summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-01-12 13:28:22 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-03-23 12:36:35 +0000
commit52dea8bb89718f10867b78751610c551ac779917 (patch)
treedab3bcd4a28077958234e00c7236525845f6047e /android/src
parent3412ed642e267b2a40d0556feea5229e8d15faa1 (diff)
downloadmullvadvpn-52dea8bb89718f10867b78751610c551ac779917.tar.xz
mullvadvpn-52dea8bb89718f10867b78751610c551ac779917.zip
Use intermittent daemon in `SettingsListener`
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt2
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/SettingsListener.kt28
2 files changed, 25 insertions, 5 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
index 0e43e7aa64..2c8293be1c 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
@@ -232,7 +232,7 @@ class MullvadVpnService : TalpidVpnService() {
}
private suspend fun setUpInstance(daemon: MullvadDaemon, settings: Settings) {
- val settingsListener = SettingsListener(daemon, settings)
+ val settingsListener = SettingsListener(settings, daemonInstance.intermittentDaemon)
val connectionProxy = ConnectionProxy(this, daemon)
val customDns = CustomDns(daemon, settingsListener)
val splitTunneling = splitTunneling.await()
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/SettingsListener.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/SettingsListener.kt
index 8f5154ea54..186065c20b 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/SettingsListener.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/SettingsListener.kt
@@ -1,9 +1,10 @@
package net.mullvad.mullvadvpn.service
import net.mullvad.mullvadvpn.model.Settings
+import net.mullvad.mullvadvpn.util.Intermittent
import net.mullvad.talpid.util.EventNotifier
-class SettingsListener(val daemon: MullvadDaemon, val initialSettings: Settings) {
+class SettingsListener(val initialSettings: Settings, val daemon: Intermittent<MullvadDaemon>) {
val accountNumberNotifier = EventNotifier(initialSettings.accountToken)
val dnsOptionsNotifier = EventNotifier(initialSettings.tunnelOptions.dnsOptions)
val relaySettingsNotifier = EventNotifier(initialSettings.relaySettings)
@@ -13,13 +14,16 @@ class SettingsListener(val daemon: MullvadDaemon, val initialSettings: Settings)
private set
init {
- daemon.onSettingsChange.subscribe(this) { maybeSettings ->
- maybeSettings?.let { settings -> handleNewSettings(settings) }
+ daemon.registerListener(this) { newDaemon ->
+ if (newDaemon != null) {
+ registerListener(newDaemon)
+ fetchInitialSettings(newDaemon)
+ }
}
}
fun onDestroy() {
- daemon.onSettingsChange.unsubscribe(this)
+ daemon.unregisterListener(this)
accountNumberNotifier.unsubscribeAll()
dnsOptionsNotifier.unsubscribeAll()
@@ -35,6 +39,22 @@ class SettingsListener(val daemon: MullvadDaemon, val initialSettings: Settings)
settingsNotifier.unsubscribe(id)
}
+ private fun registerListener(daemon: MullvadDaemon) {
+ daemon.onSettingsChange.subscribe(this) { maybeSettings ->
+ synchronized(this) {
+ maybeSettings?.let { newSettings -> handleNewSettings(newSettings) }
+ }
+ }
+ }
+
+ private fun fetchInitialSettings(daemon: MullvadDaemon) {
+ synchronized(this) {
+ daemon.getSettings()?.let { newSettings ->
+ handleNewSettings(newSettings)
+ }
+ }
+ }
+
private fun handleNewSettings(newSettings: Settings) {
synchronized(this) {
if (settings.accountToken != newSettings.accountToken) {