summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-07-24 11:55:05 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-07-24 11:55:05 -0300
commit39b2bc0a1cf1dfe29b5b32d1c84f348e5bb8a08e (patch)
treea02101cd9f88f3d9f4ca7a761c3b2b3968b11e74 /android
parent652577a791241cebc22702b0a93a23f9a38f70fc (diff)
parent4fb039533c75feabee9b36a6473aaeb0a9e79c44 (diff)
downloadmullvadvpn-39b2bc0a1cf1dfe29b5b32d1c84f348e5bb8a08e.tar.xz
mullvadvpn-39b2bc0a1cf1dfe29b5b32d1c84f348e5bb8a08e.zip
Merge branch 'faster-connecting-feedback'
Diffstat (limited to 'android')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectActionButton.kt9
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ConnectionStatus.kt9
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/NotificationBanner.kt13
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/ConnectionProxy.kt7
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/LocationInfoCache.kt9
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/model/ActionAfterDisconnect.kt7
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/model/TunnelState.kt2
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()
}