diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-08-23 22:14:50 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-08-29 11:13:17 +0000 |
| commit | 6fcce536e4bc06ea2b68df4b192de5cca98cfdc1 (patch) | |
| tree | afcc774d3fc09f8e2d4dc3c354cd4f77807c2140 /android | |
| parent | 84a66d4a27b16561aa33b91f89222d1b963e16ce (diff) | |
| download | mullvadvpn-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.kt | 46 |
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() + } + } +} |
