Skip to content

Commit c852aa9

Browse files
committed
Pass isCancelled to sendInstances instead of making it suspend
1 parent f15e8a1 commit c852aa9

4 files changed

Lines changed: 7 additions & 19 deletions

File tree

collect_app/src/main/java/org/odk/collect/android/instancemanagement/InstancesDataService.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package org.odk.collect.android.instancemanagement
22

3-
import kotlinx.coroutines.currentCoroutineContext
43
import kotlinx.coroutines.flow.StateFlow
5-
import kotlinx.coroutines.isActive
64
import org.odk.collect.analytics.Analytics
75
import org.odk.collect.android.analytics.AnalyticsEvents
86
import org.odk.collect.android.analytics.AnalyticsUtils
@@ -218,19 +216,19 @@ class InstancesDataService(
218216
}
219217
}
220218

221-
suspend fun sendInstances(
219+
fun sendInstances(
222220
projectId: String,
223221
instances: List<Instance>,
224222
referrer: String,
225223
overrideURL: String?,
226224
externalDeleteAfterUpload: Boolean?,
227225
defaultSuccessMessage: String,
226+
isCancelled: () -> Boolean = { false },
228227
onProgress: (current: Int, total: Int) -> Unit = { _, _ -> }
229228
): List<InstanceUploadResult> {
230229
val projectDependencyModule = projectDependencyModuleFactory.create(projectId)
231-
val coroutineContext = currentCoroutineContext()
232230

233-
return projectDependencyModule.instancesLock.withLockSuspend { acquiredLock: Boolean ->
231+
return projectDependencyModule.instancesLock.withLock { acquiredLock: Boolean ->
234232
if (acquiredLock) {
235233
val result = instanceSubmitter.submitInstances(
236234
projectId,
@@ -240,7 +238,7 @@ class InstancesDataService(
240238
cancelAfterAuthException = true,
241239
externalDeleteAfterUpload = externalDeleteAfterUpload,
242240
defaultSuccessMessage = defaultSuccessMessage,
243-
isCancelled = { !coroutineContext.isActive },
241+
isCancelled = isCancelled,
244242
onProgress = onProgress
245243
)
246244

collect_app/src/main/java/org/odk/collect/android/instancemanagement/send/InstanceUploaderViewModel.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import androidx.lifecycle.MutableLiveData
66
import androidx.lifecycle.ViewModel
77
import androidx.lifecycle.viewModelScope
88
import kotlinx.coroutines.Job
9+
import kotlinx.coroutines.isActive
910
import kotlinx.coroutines.launch
1011
import org.odk.collect.android.instancemanagement.InstancesDataService
1112
import org.odk.collect.android.utilities.WebCredentialsUtils
@@ -53,6 +54,7 @@ class InstanceUploadViewModel(
5354
externalUrl,
5455
externalDeleteAfterUpload,
5556
defaultSuccessMessage,
57+
isCancelled = { !isActive },
5658
) { current, total ->
5759
_state.postValue(UploadState.Progress(current, total))
5860
}

collect_app/src/test/java/org/odk/collect/android/instancemanagement/send/InstanceUploadViewModelTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ class InstanceUploadViewModelTest {
115115
"Waiting"
116116
)
117117
viewModel.upload(listOf(instance.dbId))
118-
dispatcherProvider.runBackground()
118+
dispatcherProvider.flush()
119119

120120
assertThat(submittedInstances.isEmpty(), equalTo(true))
121121
}

shared/src/main/java/org/odk/collect/shared/locks/ChangeLock.kt

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,6 @@ interface ChangeLock {
2020
}
2121
}
2222

23-
suspend fun <T> withLockSuspend(function: suspend (Boolean) -> T): T {
24-
val acquired = tryLock(DEFAULT_TOKEN)
25-
26-
return try {
27-
function(acquired)
28-
} finally {
29-
if (acquired) {
30-
unlock(DEFAULT_TOKEN)
31-
}
32-
}
33-
}
34-
3523
fun tryLock(token: Any): Boolean
3624

3725
fun unlock(token: Any)

0 commit comments

Comments
 (0)