diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-07-27 12:27:20 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-07-29 22:05:04 +0000 |
| commit | 296834235503915aee04f5135ea95ca8f624ad40 (patch) | |
| tree | 77268168c3eeaa49a8480d11887fabfb9a910c6c /android/src/main | |
| parent | 44aa872853f0e2101d775eb51649b0f6f3cb2443 (diff) | |
| download | mullvadvpn-296834235503915aee04f5135ea95ca8f624ad40.tar.xz mullvadvpn-296834235503915aee04f5135ea95ca8f624ad40.zip | |
Add UI state anticipation guards
Diffstat (limited to 'android/src/main')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/ConnectionProxy.kt | 50 |
1 files changed, 38 insertions, 12 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/ConnectionProxy.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/ConnectionProxy.kt index 7a3ec1dd9c..17c5dff47d 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/ConnectionProxy.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/ConnectionProxy.kt @@ -41,25 +41,25 @@ class ConnectionProxy(val parentActivity: MainActivity) { } fun connect() { - uiState = TunnelState.Connecting(null) + if (anticipateConnectingState()) { + cancelActiveAction() - cancelActiveAction() - - val vpnPermission = parentActivity.requestVpnPermission() + val vpnPermission = parentActivity.requestVpnPermission() - activeAction = GlobalScope.launch(Dispatchers.Default) { - if (vpnPermission.await()) { - daemon.await().connect() + activeAction = GlobalScope.launch(Dispatchers.Default) { + if (vpnPermission.await()) { + daemon.await().connect() + } } } } fun disconnect() { - uiState = TunnelState.Disconnecting(ActionAfterDisconnect.Nothing()) - - cancelActiveAction() - activeAction = GlobalScope.launch(Dispatchers.Default) { - daemon.await().disconnect() + if (anticipateDisconnectingState()) { + cancelActiveAction() + activeAction = GlobalScope.launch(Dispatchers.Default) { + daemon.await().disconnect() + } } } @@ -74,6 +74,32 @@ class ConnectionProxy(val parentActivity: MainActivity) { cancelActiveAction() } + private fun anticipateConnectingState(): Boolean { + synchronized(this) { + val currentState = state + + if (currentState is TunnelState.Connecting || currentState is TunnelState.Connected) { + return false + } else { + uiState = TunnelState.Connecting(null) + return true + } + } + } + + private fun anticipateDisconnectingState(): Boolean { + synchronized(this) { + val currentState = state + + if (currentState is TunnelState.Disconnected) { + return false + } else { + uiState = TunnelState.Disconnecting(ActionAfterDisconnect.Nothing()) + return true + } + } + } + private fun fetchInitialState() = GlobalScope.launch(Dispatchers.Default) { val initialState = daemon.await().getState() |
