diff options
Diffstat (limited to 'android')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/ConnectionProxy.kt | 24 |
1 files changed, 24 insertions, 0 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 16b34b137d..e55c696a2b 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/ConnectionProxy.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/ConnectionProxy.kt @@ -66,6 +66,15 @@ class ConnectionProxy(val context: Context, val daemon: MullvadDaemon) { } } + fun reconnect() { + if (anticipateReconnectingState()) { + cancelActiveAction() + activeAction = GlobalScope.launch(Dispatchers.Default) { + daemon.reconnect() + } + } + } + fun disconnect() { if (anticipateDisconnectingState()) { cancelActiveAction() @@ -103,6 +112,21 @@ class ConnectionProxy(val context: Context, val daemon: MullvadDaemon) { } } + private fun anticipateReconnectingState(): Boolean { + synchronized(this) { + val currentState = uiState + + if (currentState is TunnelState.Disconnecting && + currentState.actionAfterDisconnect == ActionAfterDisconnect.Reconnect) { + return false + } else { + scheduleToResetAnticipatedState() + uiState = TunnelState.Disconnecting(ActionAfterDisconnect.Reconnect) + return true + } + } + } + private fun anticipateDisconnectingState(): Boolean { synchronized(this) { val currentState = uiState |
