summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-07-01 12:03:21 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-07-01 12:03:21 -0300
commit12c090a7699dbf9971503e374ba0a826cbe8371d (patch)
tree21a892bfd4dca21685d87e036e7f824e8a804b45
parent6261362f90a9b62c890acce8f4db4fed1a69db58 (diff)
parent09861ee4fd7fd9cda0fa95b4aaf7dee2ef8ba27f (diff)
downloadmullvadvpn-12c090a7699dbf9971503e374ba0a826cbe8371d.tar.xz
mullvadvpn-12c090a7699dbf9971503e374ba0a826cbe8371d.zip
Merge branch 'use-broadcasted-relay-location-on-android'
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/ConnectionProxy.kt2
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/LocationInfoCache.kt7
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/model/TunnelState.kt4
-rw-r--r--mullvad-jni/src/into_java.rs25
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, &parameters)
+ }
+ None => env.new_object(&class, "()V", &[]),
+ }
+ .expect("Failed to create TunnelState sub-class variant Java object")
}
}