Skip to content

Commit 08c08a4

Browse files
authored
Merge pull request #6506 from nextcloud/expeditedWorkers
perf(workers): expedite user-facing and latency-critical WorkManager …
2 parents 590f081 + 39331e7 commit 08c08a4

13 files changed

Lines changed: 59 additions & 10 deletions

File tree

app/src/gplay/java/com/nextcloud/talk/services/firebase/NCFirebaseMessagingService.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ package com.nextcloud.talk.services.firebase
1111
import android.util.Log
1212
import androidx.work.Data
1313
import androidx.work.OneTimeWorkRequest
14+
import androidx.work.OutOfQuotaPolicy
1415
import androidx.work.WorkManager
1516
import autodagger.AutoInjector
1617
import com.google.firebase.messaging.FirebaseMessagingService
@@ -53,6 +54,7 @@ class NCFirebaseMessagingService : FirebaseMessagingService() {
5354
.build()
5455
val notificationWork =
5556
OneTimeWorkRequest.Builder(NotificationWorker::class.java).setInputData(messageData)
57+
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
5658
.build()
5759
WorkManager.getInstance().enqueue(notificationWork)
5860
}

app/src/main/java/com/nextcloud/talk/account/AccountVerificationActivity.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import android.util.Log
1818
import android.widget.Toast
1919
import androidx.work.Data
2020
import androidx.work.OneTimeWorkRequest
21+
import androidx.work.OutOfQuotaPolicy
2122
import androidx.work.WorkInfo
2223
import androidx.work.WorkManager
2324
import autodagger.AutoInjector
@@ -498,6 +499,7 @@ class AccountVerificationActivity : BaseActivity() {
498499
val capabilitiesWork =
499500
OneTimeWorkRequest.Builder(CapabilitiesWorker::class.java)
500501
.setInputData(userData)
502+
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
501503
.build()
502504
WorkManager.getInstance().enqueue(capabilitiesWork)
503505
}
@@ -592,7 +594,9 @@ class AccountVerificationActivity : BaseActivity() {
592594
@SuppressLint("CheckResult")
593595
private fun deleteUserAndStartServerSelection(userId: Long) {
594596
userManager.scheduleUserForDeletionWithId(userId).blockingGet()
595-
val accountRemovalWork = OneTimeWorkRequest.Builder(AccountRemovalWorker::class.java).build()
597+
val accountRemovalWork = OneTimeWorkRequest.Builder(AccountRemovalWorker::class.java)
598+
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
599+
.build()
596600
WorkManager.getInstance(applicationContext).enqueue(accountRemovalWork)
597601

598602
WorkManager.getInstance(context).getWorkInfoByIdLiveData(accountRemovalWork.id)

app/src/main/java/com/nextcloud/talk/account/data/io/LocalLoginDataSource.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ package com.nextcloud.talk.account.data.io
1010
import android.content.Context
1111
import androidx.lifecycle.LiveData
1212
import androidx.work.OneTimeWorkRequest
13+
import androidx.work.OutOfQuotaPolicy
1314
import androidx.work.WorkInfo
1415
import androidx.work.WorkManager
1516
import com.nextcloud.talk.account.data.model.LoginCompletion
@@ -31,7 +32,9 @@ class LocalLoginDataSource(val userManager: UserManager, val appPreferences: App
3132
}
3233

3334
fun startAccountRemovalWorker(): LiveData<WorkInfo?> {
34-
val accountRemovalWork = OneTimeWorkRequest.Builder(AccountRemovalWorker::class.java).build()
35+
val accountRemovalWork = OneTimeWorkRequest.Builder(AccountRemovalWorker::class.java)
36+
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
37+
.build()
3538
WorkManager.getInstance(context).enqueue(accountRemovalWork)
3639

3740
return WorkManager.getInstance(context).getWorkInfoByIdLiveData(accountRemovalWork.id)

app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ import androidx.lifecycle.lifecycleScope
8484
import androidx.recyclerview.widget.LinearLayoutManager
8585
import androidx.work.Data
8686
import androidx.work.OneTimeWorkRequest
87+
import androidx.work.OutOfQuotaPolicy
8788
import androidx.work.WorkInfo
8889
import androidx.work.WorkManager
8990
import autodagger.AutoInjector
@@ -2198,6 +2199,7 @@ class ChatActivity :
21982199
val downloadWorker: OneTimeWorkRequest = OneTimeWorkRequest.Builder(DownloadFileToCacheWorker::class.java)
21992200
.setInputData(data)
22002201
.addTag(fileId)
2202+
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
22012203
.build()
22022204

22032205
WorkManager.getInstance().enqueue(downloadWorker)
@@ -2355,6 +2357,7 @@ class ChatActivity :
23552357
.build()
23562358
val worker = OneTimeWorkRequest.Builder(ShareOperationWorker::class.java)
23572359
.setInputData(data)
2360+
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
23582361
.build()
23592362
WorkManager.getInstance().enqueue(worker)
23602363
}
@@ -3147,7 +3150,10 @@ class ChatActivity :
31473150
data.putString(KEY_ROOM_TOKEN, conversation.token)
31483151

31493152
val deleteConversationWorker =
3150-
OneTimeWorkRequest.Builder(DeleteConversationWorker::class.java).setInputData(data.build()).build()
3153+
OneTimeWorkRequest.Builder(DeleteConversationWorker::class.java)
3154+
.setInputData(data.build())
3155+
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
3156+
.build()
31513157
WorkManager.getInstance().enqueue(deleteConversationWorker)
31523158

31533159
WorkManager.getInstance(context).getWorkInfoByIdLiveData(deleteConversationWorker.id)

app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import androidx.lifecycle.lifecycleScope
2828
import androidx.work.Data
2929
import androidx.work.ExistingWorkPolicy
3030
import androidx.work.OneTimeWorkRequest
31+
import androidx.work.OutOfQuotaPolicy
3132
import androidx.work.WorkInfo
3233
import androidx.work.WorkManager
3334
import autodagger.AutoInjector
@@ -499,7 +500,10 @@ class ConversationInfoActivity : BaseActivity() {
499500
.build()
500501

501502
val addParticipantsWorker =
502-
OneTimeWorkRequest.Builder(AddParticipantsToConversationWorker::class.java).setInputData(data).build()
503+
OneTimeWorkRequest.Builder(AddParticipantsToConversationWorker::class.java)
504+
.setInputData(data)
505+
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
506+
.build()
503507
WorkManager.getInstance().enqueue(addParticipantsWorker)
504508
WorkManager.getInstance(context).getWorkInfoByIdLiveData(addParticipantsWorker.id)
505509
.observeForever { workInfo: WorkInfo? ->
@@ -513,6 +517,7 @@ class ConversationInfoActivity : BaseActivity() {
513517
workerData?.let { data ->
514518
val workRequest = OneTimeWorkRequest.Builder(LeaveConversationWorker::class.java)
515519
.setInputData(data)
520+
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
516521
.build()
517522
WorkManager.getInstance(context).enqueueUniqueWork(
518523
"leave_conversation_work",
@@ -585,7 +590,10 @@ class ConversationInfoActivity : BaseActivity() {
585590
private fun deleteConversation() {
586591
workerData?.let {
587592
WorkManager.getInstance(context).enqueue(
588-
OneTimeWorkRequest.Builder(DeleteConversationWorker::class.java).setInputData(it).build()
593+
OneTimeWorkRequest.Builder(DeleteConversationWorker::class.java)
594+
.setInputData(it)
595+
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
596+
.build()
589597
)
590598

591599
conversationUser?.id?.let { userId ->

app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import androidx.lifecycle.ViewModelProvider
3030
import androidx.lifecycle.lifecycleScope
3131
import androidx.work.Data
3232
import androidx.work.OneTimeWorkRequest
33+
import androidx.work.OutOfQuotaPolicy
3334
import androidx.work.WorkInfo
3435
import androidx.work.WorkManager
3536
import autodagger.AutoInjector
@@ -1224,7 +1225,10 @@ class ConversationsListActivity : BaseActivity() {
12241225
.putString(KEY_ROOM_TOKEN, conversation.token)
12251226
.putLong(KEY_INTERNAL_USER_ID, currentUser?.id!!)
12261227
.build()
1227-
val worker = OneTimeWorkRequest.Builder(LeaveConversationWorker::class.java).setInputData(data).build()
1228+
val worker = OneTimeWorkRequest.Builder(LeaveConversationWorker::class.java)
1229+
.setInputData(data)
1230+
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
1231+
.build()
12281232
WorkManager.getInstance().enqueue(worker)
12291233
WorkManager.getInstance(this).getWorkInfoByIdLiveData(worker.id).observeForever { workInfo ->
12301234
when (workInfo?.state) {
@@ -1327,7 +1331,9 @@ class ConversationsListActivity : BaseActivity() {
13271331
@SuppressLint("CheckResult")
13281332
private fun deleteUserAndRestartApp() {
13291333
userManager.scheduleUserForDeletionWithId(currentUser!!.id!!).blockingGet()
1330-
val accountRemovalWork = OneTimeWorkRequest.Builder(AccountRemovalWorker::class.java).build()
1334+
val accountRemovalWork = OneTimeWorkRequest.Builder(AccountRemovalWorker::class.java)
1335+
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
1336+
.build()
13311337
WorkManager.getInstance(applicationContext).enqueue(accountRemovalWork)
13321338

13331339
WorkManager.getInstance(context).getWorkInfoByIdLiveData(accountRemovalWork.id)
@@ -1464,7 +1470,10 @@ class ConversationsListActivity : BaseActivity() {
14641470
data.putString(KEY_ROOM_TOKEN, conversation.token)
14651471

14661472
val deleteConversationWorker =
1467-
OneTimeWorkRequest.Builder(DeleteConversationWorker::class.java).setInputData(data.build()).build()
1473+
OneTimeWorkRequest.Builder(DeleteConversationWorker::class.java)
1474+
.setInputData(data.build())
1475+
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
1476+
.build()
14681477
WorkManager.getInstance().enqueue(deleteConversationWorker)
14691478

14701479
WorkManager.getInstance(context).getWorkInfoByIdLiveData(deleteConversationWorker.id)

app/src/main/java/com/nextcloud/talk/jobs/ChatMessageCatchUpWorker.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import androidx.work.CoroutineWorker
1515
import androidx.work.Data
1616
import androidx.work.NetworkType
1717
import androidx.work.OneTimeWorkRequest
18+
import androidx.work.OutOfQuotaPolicy
1819
import androidx.work.WorkManager
1920
import androidx.work.WorkRequest
2021
import androidx.work.WorkerParameters
@@ -147,6 +148,7 @@ class ChatMessageCatchUpWorker(context: Context, workerParams: WorkerParameters)
147148
.setInputData(data)
148149
.setConstraints(Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build())
149150
.setBackoffCriteria(BackoffPolicy.EXPONENTIAL, WorkRequest.MIN_BACKOFF_MILLIS, TimeUnit.MILLISECONDS)
151+
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
150152
.build()
151153

152154
WorkManager.getInstance(context).enqueue(catchUpWork)

app/src/main/java/com/nextcloud/talk/jobs/PushRegistrationWorker.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import android.content.Context
1111
import android.util.Log
1212
import androidx.work.Data
1313
import androidx.work.OneTimeWorkRequest
14+
import androidx.work.OutOfQuotaPolicy
1415
import androidx.work.WorkManager
1516
import androidx.work.Worker
1617
import androidx.work.WorkerParameters
@@ -286,6 +287,7 @@ class PushRegistrationWorker(context: Context, workerParams: WorkerParameters) :
286287
.build()
287288
val notificationWork =
288289
OneTimeWorkRequest.Builder(NotificationWorker::class.java).setInputData(messageData)
290+
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
289291
.build()
290292
WorkManager.getInstance(applicationContext).enqueue(notificationWork)
291293
}

app/src/main/java/com/nextcloud/talk/jobs/ShareOperationWorker.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import android.content.Context
1111
import android.util.Log
1212
import androidx.work.Data
1313
import androidx.work.OneTimeWorkRequest
14+
import androidx.work.OutOfQuotaPolicy
1415
import androidx.work.WorkManager
1516
import androidx.work.Worker
1617
import androidx.work.WorkerParameters
@@ -118,6 +119,7 @@ class ShareOperationWorker(context: Context, workerParams: WorkerParameters) : W
118119
.build()
119120
val shareWorker = OneTimeWorkRequest.Builder(ShareOperationWorker::class.java)
120121
.setInputData(data)
122+
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
121123
.build()
122124
WorkManager.getInstance().enqueue(shareWorker)
123125
}

app/src/main/java/com/nextcloud/talk/services/UnifiedPushService.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ package com.nextcloud.talk.services
1010
import android.util.Log
1111
import androidx.work.Data
1212
import androidx.work.OneTimeWorkRequest
13+
import androidx.work.OutOfQuotaPolicy
1314
import androidx.work.WorkManager
1415
import com.nextcloud.talk.jobs.NotificationWorker
1516
import com.nextcloud.talk.jobs.PushRegistrationWorker
@@ -55,6 +56,7 @@ class UnifiedPushService : PushService() {
5556
.build()
5657
val notificationWork =
5758
OneTimeWorkRequest.Builder(NotificationWorker::class.java).setInputData(messageData)
59+
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
5860
.build()
5961
WorkManager.getInstance(this).enqueue(notificationWork)
6062
}

0 commit comments

Comments
 (0)