summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-06-01 15:54:39 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-06-01 15:54:39 -0300
commit28033c96a8e1a3718b5e3161506b6abc387d0ca5 (patch)
treede7ff5299b8808a8ccec8555e717d8cb78f605ac /android
parent4e03a95e5a21ccea92933ec1c9b6bb07b8bcaf15 (diff)
parentaf4811f005bb2db863ce219afe9dfc32c4bcf80c (diff)
downloadmullvadvpn-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.kt13
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt9
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt4
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt2
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