diff options
4 files changed, 25 insertions, 13 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 8922344de5..8782493b4c 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/ConnectionProxy.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/ConnectionProxy.kt @@ -36,7 +36,7 @@ class ConnectionProxy(val parentActivity: MainActivity) { var onUiStateChange: ((TunnelState) -> Unit)? = null fun connect() { - uiState = TunnelState.Connecting() + uiState = TunnelState.Connecting(null) cancelActiveAction() 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 9b39853d25..569f008729 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/LocationInfoCache.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/LocationInfoCache.kt @@ -33,8 +33,11 @@ class LocationInfoCache(val daemon: Deferred<MullvadDaemon>) { when (value) { is TunnelState.Disconnected -> fetchLocation() - is TunnelState.Connecting -> fetchLocation() - is TunnelState.Connected -> fetchLocation() + is TunnelState.Connecting -> location = value.location + is TunnelState.Connected -> { + location = value.location + fetchLocation() + } is TunnelState.Disconnecting -> location = lastKnownRealLocation is TunnelState.Blocked -> location = null } 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 006de053c8..2551cfe978 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/model/TunnelState.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/TunnelState.kt @@ -2,8 +2,8 @@ package net.mullvad.mullvadvpn.model sealed class TunnelState() { class Disconnected() : TunnelState() - class Connecting() : TunnelState() - class Connected() : TunnelState() + class Connecting(val location: GeoIpLocation?) : TunnelState() + class Connected(val location: GeoIpLocation) : TunnelState() class Disconnecting() : TunnelState() class Blocked() : TunnelState() } diff --git a/mullvad-jni/src/into_java.rs b/mullvad-jni/src/into_java.rs index 204f023ec0..bb29c20bc9 100644 --- a/mullvad-jni/src/into_java.rs +++ b/mullvad-jni/src/into_java.rs @@ -465,12 +465,12 @@ impl<'env> IntoJava<'env> for TunnelState { type JavaType = JObject<'env>; fn into_java(self, env: &JNIEnv<'env>) -> Self::JavaType { - let variant = match self { - TunnelState::Disconnected => "Disconnected", - TunnelState::Connecting { .. } => "Connecting", - TunnelState::Connected { .. } => "Connected", - TunnelState::Disconnecting(_) => "Disconnecting", - TunnelState::Blocked(_) => "Blocked", + let (variant, location) = match self { + TunnelState::Disconnected => ("Disconnected", None), + TunnelState::Connecting { location, .. } => ("Connecting", Some(location)), + TunnelState::Connected { location, .. } => ("Connected", Some(location)), + TunnelState::Disconnecting(_) => ("Disconnecting", None), + TunnelState::Blocked(_) => ("Blocked", None), }; let class = get_class(&format!( @@ -478,7 +478,16 @@ impl<'env> IntoJava<'env> for TunnelState { variant )); - env.new_object(&class, "()V", &[]) - .expect("Failed to create TunnelState sub-class variant Java object") + match location { + Some(location) => { + let location = env.auto_local(location.into_java(env)); + let parameters = [JValue::Object(location.as_obj())]; + let signature = "(Lnet/mullvad/mullvadvpn/model/GeoIpLocation;)V"; + + env.new_object(&class, signature, ¶meters) + } + None => env.new_object(&class, "()V", &[]), + } + .expect("Failed to create TunnelState sub-class variant Java object") } } |
