diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-06-24 18:17:44 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-06-24 23:51:01 +0000 |
| commit | e0b02e133cb94b0287e52e274746c45e9bea4c21 (patch) | |
| tree | b62ccbaac8d36eee903e8ad9761b37657563d70f | |
| parent | 18fdf76f3bc7957fc02738bbce3b561293557faf (diff) | |
| download | mullvadvpn-e0b02e133cb94b0287e52e274746c45e9bea4c21.tar.xz mullvadvpn-e0b02e133cb94b0287e52e274746c45e9bea4c21.zip | |
Listen for settings changes
| -rw-r--r-- | mullvad-jni/src/jni_event_listener.rs | 30 |
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, |
