diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-07-30 05:49:38 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-07-30 05:49:38 -0300 |
| commit | 90a353614d70e49587ebc4153ac990dc1a47fa22 (patch) | |
| tree | 77268168c3eeaa49a8480d11887fabfb9a910c6c | |
| parent | 44aa872853f0e2101d775eb51649b0f6f3cb2443 (diff) | |
| parent | 296834235503915aee04f5135ea95ca8f624ad40 (diff) | |
| download | mullvadvpn-90a353614d70e49587ebc4153ac990dc1a47fa22.tar.xz mullvadvpn-90a353614d70e49587ebc4153ac990dc1a47fa22.zip | |
Merge branch 'fix-select-same-location'
| -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() |
