diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-08-23 22:15:28 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-08-29 11:13:52 +0000 |
| commit | 59804bb794fd670a8e956a1d1794b3c44276e185 (patch) | |
| tree | 6011762ab69f4b44d9b88393fabd77b32a2daf33 /android | |
| parent | 6fcce536e4bc06ea2b68df4b192de5cca98cfdc1 (diff) | |
| download | mullvadvpn-59804bb794fd670a8e956a1d1794b3c44276e185.tar.xz mullvadvpn-59804bb794fd670a8e956a1d1794b3c44276e185.zip | |
Create `SmartDeferred` helper type
Diffstat (limited to 'android')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/util/SmartDeferred.kt | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/util/SmartDeferred.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/util/SmartDeferred.kt new file mode 100644 index 0000000000..a7732c08ef --- /dev/null +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/util/SmartDeferred.kt @@ -0,0 +1,32 @@ +package net.mullvad.mullvadvpn.util + +import kotlinx.coroutines.launch +import kotlinx.coroutines.Deferred +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.Job + +class SmartDeferred<T>(private val deferred: Deferred<T>) { + private val jobTracker = JobTracker() + + private var active = true + + fun awaitThen(action: T.() -> Unit): Long? { + if (active) { + return jobTracker.newJob(GlobalScope.launch(Dispatchers.Default) { + deferred.await().action() + }) + } else { + return null + } + } + + fun cancelJob(jobId: Long) { + jobTracker.cancelJob(jobId) + } + + fun cancel() { + active = false + jobTracker.cancelAllJobs() + } +} |
