summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorEmīls Piņķis <emils@mullvad.net>2019-10-10 21:47:40 +0100
committerEmīls Piņķis <emils@mullvad.net>2019-10-24 19:38:54 +0100
commitf6b3df04efa0aa958c2b95c884c4a121b34b8fc9 (patch)
tree581328d8becb8395c545d8e164de7d95e27c5a25 /android/src
parent27f9629f29fddceba55e37e7e70be5170347eb2e (diff)
downloadmullvadvpn-f6b3df04efa0aa958c2b95c884c4a121b34b8fc9.tar.xz
mullvadvpn-f6b3df04efa0aa958c2b95c884c4a121b34b8fc9.zip
Add BlockingController
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
+}