summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/util/BlockingController.kt37
1 files changed, 37 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/util/BlockingController.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/util/BlockingController.kt
new file mode 100644
index 0000000000..cc759bf98d
--- /dev/null
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/util/BlockingController.kt
@@ -0,0 +1,37 @@
+package net.mullvad.mullvadvpn
+
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.launch
+
+class BlockingController(val blockableView: BlockableView) {
+ var job: Job? = null
+ var innerJob: Job? = null
+
+ fun action() {
+ if (!(job?.isActive ?: false)) {
+ job = GlobalScope.launch(Dispatchers.Main) {
+ blockableView.setEnabled(false)
+ innerJob = blockableView.onClick()
+ innerJob?.join()
+ blockableView.setEnabled(true)
+ }
+ }
+ }
+
+ fun onPause() {
+ innerJob?.cancel()
+ job?.cancel()
+ blockableView.setEnabled(true)
+ }
+
+ fun onDestroy() {
+ onPause()
+ }
+}
+
+interface BlockableView {
+ fun setEnabled(enabled: Boolean)
+ fun onClick(): Job
+}