diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-06-01 15:54:39 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-06-01 15:54:39 -0300 |
| commit | 28033c96a8e1a3718b5e3161506b6abc387d0ca5 (patch) | |
| tree | de7ff5299b8808a8ccec8555e717d8cb78f605ac /android | |
| parent | 4e03a95e5a21ccea92933ec1c9b6bb07b8bcaf15 (diff) | |
| parent | af4811f005bb2db863ce219afe9dfc32c4bcf80c (diff) | |
| download | mullvadvpn-28033c96a8e1a3718b5e3161506b6abc387d0ca5.tar.xz mullvadvpn-28033c96a8e1a3718b5e3161506b6abc387d0ca5.zip | |
Merge branch 'fix-key-status-listener-race'
Diffstat (limited to 'android')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/KeyStatusListener.kt (renamed from android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/KeyStatusListener.kt) | 21 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt | 13 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt | 9 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt | 4 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt | 2 |
5 files changed, 17 insertions, 32 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/KeyStatusListener.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/KeyStatusListener.kt index d6271f0a23..302cb095e9 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/KeyStatusListener.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/KeyStatusListener.kt @@ -1,16 +1,13 @@ -package net.mullvad.mullvadvpn.dataproxy +package net.mullvad.mullvadvpn.service import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import net.mullvad.mullvadvpn.model.KeygenEvent -import net.mullvad.mullvadvpn.service.MullvadDaemon import net.mullvad.talpid.util.EventNotifier class KeyStatusListener(val daemon: MullvadDaemon) { - private val setUpJob = setUp() - - val onKeyStatusChange = EventNotifier<KeygenEvent?>(null) + val onKeyStatusChange = EventNotifier(getInitialKeyStatus()) var keyStatus: KeygenEvent? = null private set(value) { @@ -18,16 +15,17 @@ class KeyStatusListener(val daemon: MullvadDaemon) { value?.let { newKeyStatus -> onKeyStatusChange.notify(newKeyStatus) } } - private fun setUp() = GlobalScope.launch(Dispatchers.Default) { + init { daemon.onKeygenEvent = { event -> keyStatus = event } - val wireguardKey = daemon.getWireguardKey() - if (wireguardKey != null) { - keyStatus = KeygenEvent.NewKey(wireguardKey, null, null) + } + + private fun getInitialKeyStatus(): KeygenEvent? { + return daemon.getWireguardKey()?.let { wireguardKey -> + KeygenEvent.NewKey(wireguardKey, null, null) } } fun generateKey() = GlobalScope.launch(Dispatchers.Default) { - setUpJob.join() val oldStatus = keyStatus val newStatus = daemon.generateWireguardKey() val newFailure = newStatus?.failure() @@ -41,7 +39,6 @@ class KeyStatusListener(val daemon: MullvadDaemon) { } fun verifyKey() = GlobalScope.launch(Dispatchers.Default) { - setUpJob.join() val verified = daemon.verifyWireguardKey() // Only update verification status if the key is actually there when (val state = keyStatus) { @@ -54,13 +51,11 @@ class KeyStatusListener(val daemon: MullvadDaemon) { } fun onDestroy() { - setUpJob.cancel() daemon.onKeygenEvent = null onKeyStatusChange.unsubscribeAll() } private fun retryKeyGeneration() = GlobalScope.launch(Dispatchers.Default) { - setUpJob.join() keyStatus = daemon.generateWireguardKey() } } 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 9224246eb0..9a3962bcb7 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt @@ -185,8 +185,6 @@ class MullvadVpnService : TalpidVpnService() { } } - val accountCache = AccountCache(daemon, settingsListener) - val connectionProxy = ConnectionProxy(this, daemon).apply { when (pendingAction) { PendingAction.Connect -> { @@ -203,16 +201,7 @@ class MullvadVpnService : TalpidVpnService() { pendingAction = null } - val locationInfoCache = LocationInfoCache(daemon, connectionProxy, connectivityListener) - - instance = ServiceInstance( - daemon, - accountCache, - connectionProxy, - connectivityListener, - locationInfoCache, - settingsListener - ) + instance = ServiceInstance(daemon, connectionProxy, connectivityListener, settingsListener) } private fun stop() { diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt index ceb7be792c..273955bcef 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt @@ -2,17 +2,20 @@ package net.mullvad.mullvadvpn.service import net.mullvad.talpid.ConnectivityListener -data class ServiceInstance( +class ServiceInstance( val daemon: MullvadDaemon, - val accountCache: AccountCache, val connectionProxy: ConnectionProxy, val connectivityListener: ConnectivityListener, - val locationInfoCache: LocationInfoCache, val settingsListener: SettingsListener ) { + val accountCache = AccountCache(daemon, settingsListener) + val keyStatusListener = KeyStatusListener(daemon) + val locationInfoCache = LocationInfoCache(daemon, connectionProxy, connectivityListener) + fun onDestroy() { accountCache.onDestroy() connectionProxy.onDestroy() + keyStatusListener.onDestroy() locationInfoCache.onDestroy() settingsListener.onDestroy() } 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 6e621d2a4f..b2717fb1ec 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt @@ -1,7 +1,6 @@ package net.mullvad.mullvadvpn.ui import net.mullvad.mullvadvpn.dataproxy.AppVersionInfoCache -import net.mullvad.mullvadvpn.dataproxy.KeyStatusListener import net.mullvad.mullvadvpn.dataproxy.RelayListListener import net.mullvad.mullvadvpn.service.ServiceInstance @@ -10,10 +9,10 @@ class ServiceConnection(private val service: ServiceInstance, val mainActivity: val accountCache = service.accountCache val connectionProxy = service.connectionProxy val connectivityListener = service.connectivityListener + val keyStatusListener = service.keyStatusListener val locationInfoCache = service.locationInfoCache val settingsListener = service.settingsListener - val keyStatusListener = KeyStatusListener(daemon) val appVersionInfoCache = AppVersionInfoCache(mainActivity, daemon, settingsListener) var relayListListener = RelayListListener(daemon, settingsListener) @@ -24,7 +23,6 @@ class ServiceConnection(private val service: ServiceInstance, val mainActivity: fun onDestroy() { appVersionInfoCache.onDestroy() - keyStatusListener.onDestroy() relayListListener.onDestroy() connectionProxy.mainActivity = null } diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt index 59466e3cd2..03dbd53f0d 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt @@ -6,10 +6,10 @@ import android.view.View import android.view.ViewGroup import net.mullvad.mullvadvpn.R import net.mullvad.mullvadvpn.dataproxy.AppVersionInfoCache -import net.mullvad.mullvadvpn.dataproxy.KeyStatusListener import net.mullvad.mullvadvpn.dataproxy.RelayListListener import net.mullvad.mullvadvpn.service.AccountCache import net.mullvad.mullvadvpn.service.ConnectionProxy +import net.mullvad.mullvadvpn.service.KeyStatusListener import net.mullvad.mullvadvpn.service.LocationInfoCache import net.mullvad.mullvadvpn.service.MullvadDaemon import net.mullvad.mullvadvpn.service.SettingsListener |
