summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-08-23 22:14:50 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-08-29 11:13:17 +0000
commit6fcce536e4bc06ea2b68df4b192de5cca98cfdc1 (patch)
treeafcc774d3fc09f8e2d4dc3c354cd4f77807c2140 /android
parent84a66d4a27b16561aa33b91f89222d1b963e16ce (diff)
downloadmullvadvpn-6fcce536e4bc06ea2b68df4b192de5cca98cfdc1.tar.xz
mullvadvpn-6fcce536e4bc06ea2b68df4b192de5cca98cfdc1.zip
Create `JobTracker` helper class
Diffstat (limited to 'android')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/util/JobTracker.kt46
1 files changed, 46 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/util/JobTracker.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/util/JobTracker.kt
new file mode 100644
index 0000000000..4934669d58
--- /dev/null
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/util/JobTracker.kt
@@ -0,0 +1,46 @@
+package net.mullvad.mullvadvpn.util
+
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.Job
+
+class JobTracker {
+ private val jobs = HashMap<Long, Job>()
+
+ private var jobIdCounter = 0L
+
+ fun newJob(job: Job): Long {
+ synchronized(jobs) {
+ val jobId = jobIdCounter
+
+ jobIdCounter += 1
+
+ jobs.put(jobId, GlobalScope.launch(Dispatchers.Default) {
+ job.join()
+
+ synchronized(jobs) {
+ jobs.remove(jobId)
+ }
+ })
+
+ return jobId
+ }
+ }
+
+ fun cancelJob(jobId: Long) {
+ synchronized(jobs) {
+ jobs.remove(jobId)?.cancel()
+ }
+ }
+
+ fun cancelAllJobs() {
+ synchronized(jobs) {
+ for (job in jobs.values) {
+ job.cancel()
+ }
+
+ jobs.clear()
+ }
+ }
+}