diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-07-24 11:55:05 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-07-24 11:55:05 -0300 |
| commit | 39b2bc0a1cf1dfe29b5b32d1c84f348e5bb8a08e (patch) | |
| tree | a02101cd9f88f3d9f4ca7a761c3b2b3968b11e74 /android | |
| parent | 652577a791241cebc22702b0a93a23f9a38f70fc (diff) | |
| parent | 4fb039533c75feabee9b36a6473aaeb0a9e79c44 (diff) | |
| download | mullvadvpn-39b2bc0a1cf1dfe29b5b32d1c84f348e5bb8a08e.tar.xz mullvadvpn-39b2bc0a1cf1dfe29b5b32d1c84f348e5bb8a08e.zip | |
Merge branch 'faster-connecting-feedback'
Diffstat (limited to 'android')
7 files changed, 49 insertions, 7 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectActionButton.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectActionButton.kt index 00ebdd8f64..aaa8032542 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectActionButton.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectActionButton.kt @@ -3,6 +3,7 @@ package net.mullvad.mullvadvpn import android.view.View import android.widget.Button +import net.mullvad.mullvadvpn.model.ActionAfterDisconnect import net.mullvad.mullvadvpn.model.KeygenEvent import net.mullvad.mullvadvpn.model.TunnelState @@ -47,7 +48,13 @@ class ConnectActionButton(val parentView: View) { set(value) { when (value) { is TunnelState.Disconnected -> disconnected() - is TunnelState.Disconnecting -> disconnected() + is TunnelState.Disconnecting -> { + when (value.actionAfterDisconnect) { + is ActionAfterDisconnect.Nothing -> disconnected() + is ActionAfterDisconnect.Block -> connected() + is ActionAfterDisconnect.Reconnect -> connecting() + } + } is TunnelState.Connecting -> connecting() is TunnelState.Connected -> connected() is TunnelState.Blocked -> connected() diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectionStatus.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectionStatus.kt index fda8eee4bc..e783e8e438 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectionStatus.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectionStatus.kt @@ -4,6 +4,7 @@ import android.content.Context import android.view.View import android.widget.TextView +import net.mullvad.mullvadvpn.model.ActionAfterDisconnect import net.mullvad.mullvadvpn.model.TunnelState class ConnectionStatus(val parentView: View, val context: Context) { @@ -16,7 +17,13 @@ class ConnectionStatus(val parentView: View, val context: Context) { fun setState(state: TunnelState) { when (state) { - is TunnelState.Disconnecting -> disconnected() + is TunnelState.Disconnecting -> { + when (state.actionAfterDisconnect) { + is ActionAfterDisconnect.Nothing -> disconnected() + is ActionAfterDisconnect.Block -> connected() + is ActionAfterDisconnect.Reconnect -> connecting() + } + } is TunnelState.Disconnected -> disconnected() is TunnelState.Connecting -> connecting() is TunnelState.Connected -> connected() diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/NotificationBanner.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/NotificationBanner.kt index b90b3aa251..f6e50fd94e 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/NotificationBanner.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/NotificationBanner.kt @@ -3,6 +3,7 @@ package net.mullvad.mullvadvpn import android.widget.TextView import android.view.View +import net.mullvad.mullvadvpn.model.ActionAfterDisconnect import net.mullvad.mullvadvpn.model.KeygenEvent import net.mullvad.mullvadvpn.model.TunnelState @@ -40,8 +41,16 @@ class NotificationBanner(val parentView: View) { } private fun updateBasedOnTunnelState(): Boolean { - when (tunnelState) { - is TunnelState.Disconnecting -> hide() + val state = tunnelState + + when (state) { + is TunnelState.Disconnecting -> { + when (state.actionAfterDisconnect) { + is ActionAfterDisconnect.Nothing -> hide() + is ActionAfterDisconnect.Block -> show(R.string.blocking_internet) + is ActionAfterDisconnect.Reconnect -> show(R.string.blocking_internet) + } + } is TunnelState.Disconnected -> hide() is TunnelState.Connecting -> show(R.string.blocking_internet) is TunnelState.Connected -> hide() 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 8782493b4c..7a3ec1dd9c 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/ConnectionProxy.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/ConnectionProxy.kt @@ -6,6 +6,7 @@ import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job import net.mullvad.mullvadvpn.MainActivity +import net.mullvad.mullvadvpn.model.ActionAfterDisconnect import net.mullvad.mullvadvpn.model.TunnelState class ConnectionProxy(val parentActivity: MainActivity) { @@ -34,6 +35,10 @@ class ConnectionProxy(val parentActivity: MainActivity) { } var onUiStateChange: ((TunnelState) -> Unit)? = null + set(value) { + field = value + value?.invoke(uiState) + } fun connect() { uiState = TunnelState.Connecting(null) @@ -50,7 +55,7 @@ class ConnectionProxy(val parentActivity: MainActivity) { } fun disconnect() { - uiState = TunnelState.Disconnecting() + uiState = TunnelState.Disconnecting(ActionAfterDisconnect.Nothing()) cancelActiveAction() activeAction = GlobalScope.launch(Dispatchers.Default) { diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/LocationInfoCache.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/LocationInfoCache.kt index 569f008729..74745118d3 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/LocationInfoCache.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/LocationInfoCache.kt @@ -7,6 +7,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job +import net.mullvad.mullvadvpn.model.ActionAfterDisconnect import net.mullvad.mullvadvpn.model.GeoIpLocation import net.mullvad.mullvadvpn.model.TunnelState import net.mullvad.mullvadvpn.MullvadDaemon @@ -38,7 +39,13 @@ class LocationInfoCache(val daemon: Deferred<MullvadDaemon>) { location = value.location fetchLocation() } - is TunnelState.Disconnecting -> location = lastKnownRealLocation + is TunnelState.Disconnecting -> { + when (value.actionAfterDisconnect) { + is ActionAfterDisconnect.Nothing -> location = lastKnownRealLocation + is ActionAfterDisconnect.Block -> location = null + is ActionAfterDisconnect.Reconnect -> {} // Leave location unchanged + } + } is TunnelState.Blocked -> location = null } } diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/model/ActionAfterDisconnect.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/ActionAfterDisconnect.kt new file mode 100644 index 0000000000..f39ba030fc --- /dev/null +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/ActionAfterDisconnect.kt @@ -0,0 +1,7 @@ +package net.mullvad.mullvadvpn.model + +sealed class ActionAfterDisconnect { + class Nothing : ActionAfterDisconnect() + class Block : ActionAfterDisconnect() + class Reconnect : ActionAfterDisconnect() +} diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/model/TunnelState.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/TunnelState.kt index 15a698c6f4..b08e75e3e8 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/model/TunnelState.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/TunnelState.kt @@ -4,6 +4,6 @@ sealed class TunnelState() { class Disconnected() : TunnelState() class Connecting(val location: GeoIpLocation?) : TunnelState() class Connected(val location: GeoIpLocation?) : TunnelState() - class Disconnecting() : TunnelState() + class Disconnecting(val actionAfterDisconnect: ActionAfterDisconnect) : TunnelState() class Blocked() : TunnelState() } |
