summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-08-23 22:15:28 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-08-29 11:13:52 +0000
commit59804bb794fd670a8e956a1d1794b3c44276e185 (patch)
tree6011762ab69f4b44d9b88393fabd77b32a2daf33 /android
parent6fcce536e4bc06ea2b68df4b192de5cca98cfdc1 (diff)
downloadmullvadvpn-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.kt32
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()
+ }
+}