diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-12-10 23:04:58 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-03-23 12:36:35 +0000 |
| commit | f5b3dc97fce788e8742162397d0e9ae7c149f5dd (patch) | |
| tree | 5ff670db484ec80ffd43f25249269b828efc3850 /android/src/main | |
| parent | 5e458ba861d9d54154e535d8d9821660f132a443 (diff) | |
| download | mullvadvpn-f5b3dc97fce788e8742162397d0e9ae7c149f5dd.tar.xz mullvadvpn-f5b3dc97fce788e8742162397d0e9ae7c149f5dd.zip | |
Create new UI-side `SettingsListener`
Diffstat (limited to 'android/src/main')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/SettingsListener.kt | 48 |
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 + } +} |
