diff options
Diffstat (limited to 'android/src')
4 files changed, 25 insertions, 32 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt index 6b4ad64a72..88d0baadd7 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt @@ -12,7 +12,11 @@ import org.joda.time.format.DateTimeFormat val EXPIRY_FORMAT = DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss z") -class AccountCache(val settingsListener: SettingsListener, val daemon: MullvadDaemon) { +class AccountCache(val daemon: MullvadDaemon, val settingsListener: SettingsListener) { + private val subscriptionId = settingsListener.accountNumberNotifier.subscribe { accountNumber -> + handleNewAccountNumber(accountNumber) + } + private var fetchJob: Job? = null private var accountNumber: String? = null private var accountExpiry: DateTime? = null @@ -25,19 +29,13 @@ class AccountCache(val settingsListener: SettingsListener, val daemon: MullvadDa } } - init { - settingsListener.onAccountNumberChange = { accountNumber -> - handleNewAccountNumber(accountNumber) - } - } - fun refetch() { fetchJob?.cancel() fetchJob = fetchAccountExpiry() } fun onDestroy() { - settingsListener.onAccountNumberChange = null + settingsListener.accountNumberNotifier.unsubscribe(subscriptionId) fetchJob?.cancel() } 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 b8cfe4a828..7e5318c892 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt @@ -90,12 +90,7 @@ class MullvadVpnService : TalpidVpnService() { val action = intent?.action if (action == VpnService.SERVICE_INTERFACE || action == KEY_CONNECT_ACTION) { - if (loggedIn) { - pendingAction = PendingAction.Connect - } else { - pendingAction = null - openUi() - } + pendingAction = PendingAction.Connect } else if (action == KEY_DISCONNECT_ACTION) { pendingAction = PendingAction.Disconnect } @@ -152,10 +147,6 @@ class MullvadVpnService : TalpidVpnService() { prepareFiles() val daemon = MullvadDaemon(this@MullvadVpnService).apply { - onSettingsChange.subscribe { settings -> - loggedIn = settings?.accountToken != null - } - onDaemonStopped = { instance = null @@ -195,9 +186,21 @@ class MullvadVpnService : TalpidVpnService() { } private fun setUpInstance(daemon: MullvadDaemon, settings: Settings) { + val settingsListener = SettingsListener(daemon, settings).apply { + accountNumberNotifier.subscribe { accountNumber -> + loggedIn = accountNumber != null + } + } + val connectionProxy = ConnectionProxy(this@MullvadVpnService, daemon).apply { when (pendingAction) { - PendingAction.Connect -> connect() + PendingAction.Connect -> { + if (loggedIn) { + connect() + } else { + openUi() + } + } PendingAction.Disconnect -> disconnect() null -> {} } @@ -206,7 +209,6 @@ class MullvadVpnService : TalpidVpnService() { } val locationInfoCache = LocationInfoCache(daemon, connectionProxy, connectivityListener) - val settingsListener = SettingsListener(daemon, settings) instance = ServiceInstance( daemon, 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 2441e9f2cc..3ba8b058a7 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/SettingsListener.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/SettingsListener.kt @@ -17,13 +17,7 @@ class SettingsListener(val daemon: MullvadDaemon, val initialSettings: Settings) maybeSettings?.let { settings -> handleNewSettings(settings) } } - var onAccountNumberChange: ((String?) -> Unit)? = null - set(value) { - synchronized(this) { - field = value - value?.invoke(settings.accountToken) - } - } + val accountNumberNotifier = EventNotifier(initialSettings.accountToken) var onRelaySettingsChange: ((RelaySettings?) -> Unit)? = null set(value) { @@ -34,10 +28,9 @@ class SettingsListener(val daemon: MullvadDaemon, val initialSettings: Settings) } fun onDestroy() { - if (listenerId != -1) { - daemon.onSettingsChange.unsubscribe(listenerId) - } + daemon.onSettingsChange.unsubscribe(listenerId) + accountNumberNotifier.unsubscribeAll() settingsNotifier.unsubscribeAll() } @@ -52,7 +45,7 @@ class SettingsListener(val daemon: MullvadDaemon, val initialSettings: Settings) private fun handleNewSettings(newSettings: Settings) { synchronized(this) { if (settings.accountToken != newSettings.accountToken) { - onAccountNumberChange?.invoke(newSettings.accountToken) + accountNumberNotifier.notify(newSettings.accountToken) } if (settings.relaySettings != newSettings.relaySettings) { diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt index 5e7272ebcf..216b1b0607 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt @@ -15,7 +15,7 @@ class ServiceConnection(private val service: ServiceInstance, val mainActivity: val keyStatusListener = KeyStatusListener(daemon) val appVersionInfoCache = AppVersionInfoCache(mainActivity, daemon, settingsListener) - val accountCache = AccountCache(settingsListener, daemon) + val accountCache = AccountCache(daemon, settingsListener) var relayListListener = RelayListListener(daemon, settingsListener) init { |
