summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-12-10 23:04:58 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-03-23 12:36:35 +0000
commitf5b3dc97fce788e8742162397d0e9ae7c149f5dd (patch)
tree5ff670db484ec80ffd43f25249269b828efc3850 /android/src
parent5e458ba861d9d54154e535d8d9821660f132a443 (diff)
downloadmullvadvpn-f5b3dc97fce788e8742162397d0e9ae7c149f5dd.tar.xz
mullvadvpn-f5b3dc97fce788e8742162397d0e9ae7c149f5dd.zip
Create new UI-side `SettingsListener`
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/SettingsListener.kt48
1 files changed, 48 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/SettingsListener.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/SettingsListener.kt
new file mode 100644
index 0000000000..f98b8a27ae
--- /dev/null
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/SettingsListener.kt
@@ -0,0 +1,48 @@
+package net.mullvad.mullvadvpn.ui.serviceconnection
+
+import net.mullvad.mullvadvpn.ipc.DispatchingHandler
+import net.mullvad.mullvadvpn.ipc.Event
+import net.mullvad.mullvadvpn.model.DnsOptions
+import net.mullvad.mullvadvpn.model.RelaySettings
+import net.mullvad.mullvadvpn.model.Settings
+import net.mullvad.talpid.util.EventNotifier
+
+class SettingsListener(eventDispatcher: DispatchingHandler<Event>) {
+ val accountNumberNotifier = EventNotifier<String?>(null)
+ val dnsOptionsNotifier = EventNotifier<DnsOptions?>(null)
+ val relaySettingsNotifier = EventNotifier<RelaySettings?>(null)
+ val settingsNotifier = EventNotifier<Settings?>(null)
+
+ private var settings by settingsNotifier.notifiable()
+
+ init {
+ eventDispatcher.registerHandler(Event.SettingsUpdate::class, ::handleNewEvent)
+ }
+
+ fun onDestroy() {
+ accountNumberNotifier.unsubscribeAll()
+ dnsOptionsNotifier.unsubscribeAll()
+ relaySettingsNotifier.unsubscribeAll()
+ settingsNotifier.unsubscribeAll()
+ }
+
+ private fun handleNewEvent(event: Event.SettingsUpdate) {
+ event.settings?.let { settings -> handleNewSettings(settings) }
+ }
+
+ private fun handleNewSettings(newSettings: Settings) {
+ if (settings?.accountToken != newSettings.accountToken) {
+ accountNumberNotifier.notify(newSettings.accountToken)
+ }
+
+ if (settings?.tunnelOptions?.dnsOptions != newSettings.tunnelOptions.dnsOptions) {
+ dnsOptionsNotifier.notify(newSettings.tunnelOptions.dnsOptions)
+ }
+
+ if (settings?.relaySettings != newSettings.relaySettings) {
+ relaySettingsNotifier.notify(newSettings.relaySettings)
+ }
+
+ settings = newSettings
+ }
+}