diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-05-18 18:09:25 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-05-20 13:42:49 +0000 |
| commit | 92532e455237e027feaac0bafa574acd9f96ff0f (patch) | |
| tree | 5c90f6c6b404591eaf3c85aa1d1c3e0fc559d740 | |
| parent | bd084dffaabc4c8fd99e5575680c23f66282f188 (diff) | |
| download | mullvadvpn-92532e455237e027feaac0bafa574acd9f96ff0f.tar.xz mullvadvpn-92532e455237e027feaac0bafa574acd9f96ff0f.zip | |
Replace callback with event notifier
3 files changed, 17 insertions, 19 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/KeyStatusListener.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/KeyStatusListener.kt index bee9244fe2..d6271f0a23 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/KeyStatusListener.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/KeyStatusListener.kt @@ -5,28 +5,17 @@ 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) + var keyStatus: KeygenEvent? = null private set(value) { - synchronized(this) { - field = value - - if (value != null) { - onKeyStatusChange?.invoke(value) - } - } - } - - var onKeyStatusChange: ((KeygenEvent) -> Unit)? = null - set(value) { field = value - - synchronized(this) { - keyStatus?.let { status -> value?.invoke(status) } - } + value?.let { newKeyStatus -> onKeyStatusChange.notify(newKeyStatus) } } private fun setUp() = GlobalScope.launch(Dispatchers.Default) { @@ -67,6 +56,7 @@ class KeyStatusListener(val daemon: MullvadDaemon) { fun onDestroy() { setUpJob.cancel() daemon.onKeygenEvent = null + onKeyStatusChange.unsubscribeAll() } private fun retryKeyGeneration() = GlobalScope.launch(Dispatchers.Default) { diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConnectFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConnectFragment.kt index 22960d5e73..1d71909d69 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConnectFragment.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConnectFragment.kt @@ -33,6 +33,7 @@ class ConnectFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) { private var updateTunnelStateJob: Job? = null private var isTunnelInfoExpanded = false + private var keyStatusListenerId: Int? = null private var tunnelStateListener: Int? = null override fun onCreate(savedInstanceState: Bundle?) { @@ -82,7 +83,7 @@ class ConnectFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) { notificationBanner.onResume() - keyStatusListener.onKeyStatusChange = { keyStatus -> + keyStatusListenerId = keyStatusListener.onKeyStatusChange.subscribe { keyStatus -> updateKeyStatusJob.cancel() updateKeyStatusJob = updateKeyStatus(keyStatus) } @@ -115,10 +116,13 @@ class ConnectFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) { override fun onSafelyPause() { accountCache.onAccountDataChange = null - keyStatusListener.onKeyStatusChange = null locationInfoCache.onNewLocation = null relayListListener.onRelayListChange = null + keyStatusListenerId?.let { listener -> + keyStatusListener.onKeyStatusChange.unsubscribe(listener) + } + tunnelStateListener?.let { listener -> connectionProxy.onUiStateChange.unsubscribe(listener) } diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WireguardKeyFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WireguardKeyFragment.kt index e72a4c495c..68e381d948 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WireguardKeyFragment.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WireguardKeyFragment.kt @@ -39,6 +39,7 @@ class WireguardKeyFragment : ServiceDependentFragment(OnNoService.GoToLaunchScre private var greenColor: Int = 0 private var redColor: Int = 0 + private var keyStatusListenerId: Int? = null private var tunnelStateListener: Int? = null private var tunnelState: TunnelState = TunnelState.Disconnected() @@ -161,7 +162,7 @@ class WireguardKeyFragment : ServiceDependentFragment(OnNoService.GoToLaunchScre } } - keyStatusListener.onKeyStatusChange = { newKeyStatus -> + keyStatusListenerId = keyStatusListener.onKeyStatusChange.subscribe { newKeyStatus -> jobTracker.newUiJob("keyStatusUpdate") { keyStatus = newKeyStatus } @@ -175,11 +176,14 @@ class WireguardKeyFragment : ServiceDependentFragment(OnNoService.GoToLaunchScre connectionProxy.onUiStateChange.unsubscribe(listener) } + keyStatusListenerId?.let { listener -> + keyStatusListener.onKeyStatusChange.unsubscribe(listener) + } + if (!(actionState is ActionState.Idle)) { actionState = ActionState.Idle(false) } - keyStatusListener.onKeyStatusChange = null jobTracker.cancelAllJobs() } |
