diff options
| author | Emīls Piņķis <emils@mullvad.net> | 2019-10-10 21:47:40 +0100 |
|---|---|---|
| committer | Emīls Piņķis <emils@mullvad.net> | 2019-10-24 19:38:54 +0100 |
| commit | f6b3df04efa0aa958c2b95c884c4a121b34b8fc9 (patch) | |
| tree | 581328d8becb8395c545d8e164de7d95e27c5a25 /android | |
| parent | 27f9629f29fddceba55e37e7e70be5170347eb2e (diff) | |
| download | mullvadvpn-f6b3df04efa0aa958c2b95c884c4a121b34b8fc9.tar.xz mullvadvpn-f6b3df04efa0aa958c2b95c884c4a121b34b8fc9.zip | |
Add BlockingController
Diffstat (limited to 'android')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/util/BlockingController.kt | 37 |
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 +} |
