diff options
Diffstat (limited to 'android/src')
| -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 +} |
