summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-06-24 18:17:44 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-06-24 23:51:01 +0000
commite0b02e133cb94b0287e52e274746c45e9bea4c21 (patch)
treeb62ccbaac8d36eee903e8ad9761b37657563d70f
parent18fdf76f3bc7957fc02738bbce3b561293557faf (diff)
downloadmullvadvpn-e0b02e133cb94b0287e52e274746c45e9bea4c21.tar.xz
mullvadvpn-e0b02e133cb94b0287e52e274746c45e9bea4c21.zip
Listen for settings changes
-rw-r--r--mullvad-jni/src/jni_event_listener.rs30
1 files changed, 29 insertions, 1 deletions
diff --git a/mullvad-jni/src/jni_event_listener.rs b/mullvad-jni/src/jni_event_listener.rs
index 3b82cc5b9b..9a89d85927 100644
--- a/mullvad-jni/src/jni_event_listener.rs
+++ b/mullvad-jni/src/jni_event_listener.rs
@@ -23,6 +23,7 @@ pub enum Error {
enum Event {
RelayList(RelayList),
+ Settings(Settings),
Tunnel(TunnelStateTransition),
}
@@ -40,7 +41,9 @@ impl EventListener for JniEventListener {
let _ = self.0.send(Event::Tunnel(state));
}
- fn notify_settings(&self, _: Settings) {}
+ fn notify_settings(&self, settings: Settings) {
+ let _ = self.0.send(Event::Settings(settings));
+ }
fn notify_relay_list(&self, relay_list: RelayList) {
let _ = self.0.send(Event::RelayList(relay_list));
@@ -51,6 +54,7 @@ struct JniEventHandler<'env> {
env: AttachGuard<'env>,
mullvad_ipc_client: JObject<'env>,
notify_relay_list_event: JMethodID<'env>,
+ notify_settings_event: JMethodID<'env>,
notify_tunnel_event: JMethodID<'env>,
events: mpsc::Receiver<Event>,
}
@@ -98,6 +102,12 @@ impl<'env> JniEventHandler<'env> {
"notifyRelayListEvent",
"(Lnet/mullvad/mullvadvpn/model/RelayList;)V",
)?;
+ let notify_settings_event = Self::get_method_id(
+ &env,
+ &class,
+ "notifySettingsEvent",
+ "(Lnet/mullvad/mullvadvpn/model/Settings;)V",
+ )?;
let notify_tunnel_event = Self::get_method_id(
&env,
&class,
@@ -109,6 +119,7 @@ impl<'env> JniEventHandler<'env> {
env,
mullvad_ipc_client,
notify_relay_list_event,
+ notify_settings_event,
notify_tunnel_event,
events,
})
@@ -128,6 +139,7 @@ impl<'env> JniEventHandler<'env> {
while let Ok(event) = self.events.recv() {
match event {
Event::RelayList(relay_list) => self.handle_relay_list_event(relay_list),
+ Event::Settings(settings) => self.handle_settings(settings),
Event::Tunnel(tunnel_event) => self.handle_tunnel_event(tunnel_event),
}
}
@@ -149,6 +161,22 @@ impl<'env> JniEventHandler<'env> {
}
}
+ fn handle_settings(&self, settings: Settings) {
+ let result = self.env.call_method_unchecked(
+ self.mullvad_ipc_client,
+ self.notify_settings_event,
+ JavaType::Primitive(Primitive::Void),
+ &[JValue::Object(settings.into_java(&self.env))],
+ );
+
+ if let Err(error) = result {
+ log::error!(
+ "{}",
+ error.display_chain_with_msg("Failed to call MullvadDaemon.notifySettingsEvent")
+ );
+ }
+ }
+
fn handle_tunnel_event(&self, event: TunnelStateTransition) {
let result = self.env.call_method_unchecked(
self.mullvad_ipc_client,