diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-12-13 15:03:38 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-12-13 15:03:38 -0300 |
| commit | 6868537a5b81a194e261d4c57a45a87974640e32 (patch) | |
| tree | e46a5e86589bd58e8eb98dd8f66d8591242c6db4 /android/src | |
| parent | bd31ed8db6be066dc39011e8d5089bf024c12dc7 (diff) | |
| parent | 17e1a8df77b8e971cfdfec82d1e38fdc2b140f8d (diff) | |
| download | mullvadvpn-6868537a5b81a194e261d4c57a45a87974640e32.tar.xz mullvadvpn-6868537a5b81a194e261d4c57a45a87974640e32.zip | |
Merge branch 'create-service-connection'
Diffstat (limited to 'android/src')
10 files changed, 144 insertions, 93 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AppVersionInfoCache.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AppVersionInfoCache.kt index 032dfe9eb9..ac01929b1b 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AppVersionInfoCache.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AppVersionInfoCache.kt @@ -1,18 +1,18 @@ package net.mullvad.mullvadvpn.dataproxy import android.content.Context +import kotlinx.coroutines.Deferred import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import net.mullvad.mullvadvpn.model.AppVersionInfo -import net.mullvad.mullvadvpn.ui.MainActivity +import net.mullvad.mullvadvpn.service.MullvadDaemon -class AppVersionInfoCache(val parentActivity: MainActivity) { +class AppVersionInfoCache(val context: Context, val daemon: Deferred<MullvadDaemon>) { companion object { val LEGACY_SHARED_PREFERENCES = "app_version_info_cache" } - private val daemon = parentActivity.daemon private val setUpJob = setUp() private var appVersionInfo: AppVersionInfo? = null @@ -61,7 +61,7 @@ class AppVersionInfoCache(val parentActivity: MainActivity) { private set fun onCreate() { - parentActivity.getSharedPreferences(LEGACY_SHARED_PREFERENCES, Context.MODE_PRIVATE) + context.getSharedPreferences(LEGACY_SHARED_PREFERENCES, Context.MODE_PRIVATE) .edit() .clear() .commit() diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/RelayListListener.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/RelayListListener.kt index df743a7e58..056331d223 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/RelayListListener.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/RelayListListener.kt @@ -1,6 +1,6 @@ package net.mullvad.mullvadvpn.dataproxy -import kotlinx.coroutines.CompletableDeferred +import kotlinx.coroutines.Deferred import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch @@ -10,10 +10,11 @@ import net.mullvad.mullvadvpn.model.RelaySettings import net.mullvad.mullvadvpn.relaylist.RelayItem import net.mullvad.mullvadvpn.relaylist.RelayList import net.mullvad.mullvadvpn.service.MullvadDaemon -import net.mullvad.mullvadvpn.ui.MainActivity -class RelayListListener(val parentActivity: MainActivity) { - private val daemon = CompletableDeferred<MullvadDaemon>() +class RelayListListener( + val daemon: Deferred<MullvadDaemon>, + val settingsListener: SettingsListener +) { private val setUpJob = setUp() private var relayList: RelayList? = null @@ -36,14 +37,14 @@ class RelayListListener(val parentActivity: MainActivity) { } init { - parentActivity.settingsListener.onRelaySettingsChange = { newRelaySettings -> + settingsListener.onRelaySettingsChange = { newRelaySettings -> relaySettingsChanged(newRelaySettings) } } fun onDestroy() { setUpJob.cancel() - parentActivity.settingsListener.onRelaySettingsChange = null + settingsListener.onRelaySettingsChange = null if (daemon.isActive) { daemon.cancel() @@ -53,8 +54,6 @@ class RelayListListener(val parentActivity: MainActivity) { } private fun setUp() = GlobalScope.launch(Dispatchers.Default) { - daemon.complete(parentActivity.daemon.await()) - setUpListener() fetchInitialRelayList() } diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/SettingsListener.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/SettingsListener.kt index 9917acc606..a1c87442ba 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/SettingsListener.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/SettingsListener.kt @@ -1,14 +1,14 @@ package net.mullvad.mullvadvpn.dataproxy +import kotlinx.coroutines.Deferred import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import net.mullvad.mullvadvpn.model.RelaySettings import net.mullvad.mullvadvpn.model.Settings import net.mullvad.mullvadvpn.service.MullvadDaemon -import net.mullvad.mullvadvpn.ui.MainActivity -class SettingsListener(val parentActivity: MainActivity) { +class SettingsListener(val asyncDaemon: Deferred<MullvadDaemon>) { private lateinit var daemon: MullvadDaemon private val setUpJob = setUp() @@ -41,7 +41,7 @@ class SettingsListener(val parentActivity: MainActivity) { } private fun setUp() = GlobalScope.launch(Dispatchers.Default) { - daemon = parentActivity.daemon.await() + daemon = asyncDaemon.await() listenerId = daemon.onSettingsChange.subscribe { maybeSettings -> maybeSettings?.let { settings -> handleNewSettings(settings) } 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 7b3bfaea8e..7423b91586 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt @@ -11,6 +11,7 @@ import kotlinx.coroutines.async import kotlinx.coroutines.runBlocking import net.mullvad.mullvadvpn.dataproxy.ConnectionProxy import net.mullvad.talpid.TalpidVpnService +import net.mullvad.talpid.util.EventNotifier class MullvadVpnService : TalpidVpnService() { private val binder = LocalBinder() @@ -21,6 +22,8 @@ class MullvadVpnService : TalpidVpnService() { private lateinit var connectionProxy: ConnectionProxy private lateinit var notificationManager: ForegroundNotificationManager + private var serviceNotifier = EventNotifier<ServiceInstance?>(null) + override fun onCreate() { super.onCreate() setUp() @@ -51,6 +54,8 @@ class MullvadVpnService : TalpidVpnService() { inner class LocalBinder : Binder() { val daemon get() = this@MullvadVpnService.daemon + val serviceNotifier + get() = this@MullvadVpnService.serviceNotifier val connectionProxy get() = this@MullvadVpnService.connectionProxy val connectivityListener @@ -72,11 +77,15 @@ class MullvadVpnService : TalpidVpnService() { private fun startDaemon() = GlobalScope.async(Dispatchers.Default) { ApiRootCaFile().extract(application) - MullvadDaemon(this@MullvadVpnService).apply { + val daemon = MullvadDaemon(this@MullvadVpnService).apply { onSettingsChange.subscribe { settings -> notificationManager.loggedIn = settings?.accountToken != null } } + + serviceNotifier.notify(ServiceInstance(daemon, connectionProxy, connectivityListener)) + + daemon } private fun startNotificationManager(): ForegroundNotificationManager { @@ -89,6 +98,8 @@ class MullvadVpnService : TalpidVpnService() { private fun stop() { resetComplete = CompletableDeferred() + serviceNotifier.notify(null) + if (daemon.isCompleted) { runBlocking { daemon.await().shutdown() } } else { diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt new file mode 100644 index 0000000000..070ab1c9bf --- /dev/null +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt @@ -0,0 +1,10 @@ +package net.mullvad.mullvadvpn.service + +import net.mullvad.mullvadvpn.dataproxy.ConnectionProxy +import net.mullvad.talpid.ConnectivityListener + +data class ServiceInstance( + val daemon: MullvadDaemon, + val connectionProxy: ConnectionProxy, + val connectivityListener: ConnectivityListener +) 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 d7f1704e9a..336f3507aa 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConnectFragment.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConnectFragment.kt @@ -19,7 +19,6 @@ import net.mullvad.mullvadvpn.dataproxy.LocationInfoCache import net.mullvad.mullvadvpn.dataproxy.RelayListListener import net.mullvad.mullvadvpn.model.KeygenEvent import net.mullvad.mullvadvpn.model.TunnelState -import net.mullvad.mullvadvpn.util.SmartDeferred val KEY_IS_TUNNEL_INFO_EXPANDED = "is_tunnel_info_expanded" @@ -32,7 +31,7 @@ class ConnectFragment : Fragment() { private lateinit var locationInfo: LocationInfo private lateinit var parentActivity: MainActivity - private lateinit var connectionProxy: SmartDeferred<ConnectionProxy> + private lateinit var connectionProxy: ConnectionProxy private lateinit var keyStatusListener: KeyStatusListener private lateinit var locationInfoCache: LocationInfoCache private lateinit var relayListListener: RelayListListener @@ -40,7 +39,6 @@ class ConnectFragment : Fragment() { private lateinit var updateKeyStatusJob: Job private var updateTunnelStateJob: Job? = null - private var tunnelStateSubscriptionJob: Long? = null private var isTunnelInfoExpanded = false private var tunnelStateListener: Int? = null @@ -87,9 +85,9 @@ class ConnectFragment : Fragment() { actionButton = ConnectActionButton(view) actionButton.apply { - onConnect = { connectionProxy.awaitThen { connect() } } - onCancel = { connectionProxy.awaitThen { disconnect() } } - onDisconnect = { connectionProxy.awaitThen { disconnect() } } + onConnect = { connectionProxy.connect() } + onCancel = { connectionProxy.disconnect() } + onDisconnect = { connectionProxy.disconnect() } } switchLocationButton = SwitchLocationButton(view, resources) @@ -120,11 +118,9 @@ class ConnectFragment : Fragment() { switchLocationButton.location = selectedRelayItem } - tunnelStateSubscriptionJob = connectionProxy.awaitThen { - tunnelStateListener = onUiStateChange.subscribe { uiState -> - updateTunnelStateJob?.cancel() - updateTunnelStateJob = updateTunnelState(uiState, state) - } + tunnelStateListener = connectionProxy.onUiStateChange.subscribe { uiState -> + updateTunnelStateJob?.cancel() + updateTunnelStateJob = updateTunnelState(uiState, connectionProxy.state) } } @@ -133,14 +129,8 @@ class ConnectFragment : Fragment() { locationInfoCache.onNewLocation = null relayListListener.onRelayListChange = null - tunnelStateSubscriptionJob?.let { jobId -> - connectionProxy.cancelJob(jobId) - } - tunnelStateListener?.let { listener -> - connectionProxy.awaitThen { - onUiStateChange.unsubscribe(listener) - } + connectionProxy.onUiStateChange.unsubscribe(listener) } updateTunnelStateJob?.cancel() diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt index 7660e240bb..914188a8ab 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt @@ -3,7 +3,6 @@ package net.mullvad.mullvadvpn.ui import android.app.Activity import android.content.ComponentName import android.content.Intent -import android.content.ServiceConnection import android.os.Bundle import android.os.IBinder import android.support.v4.app.FragmentActivity @@ -11,57 +10,70 @@ import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job -import kotlinx.coroutines.async import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking import net.mullvad.mullvadvpn.R import net.mullvad.mullvadvpn.dataproxy.AccountCache import net.mullvad.mullvadvpn.dataproxy.AppVersionInfoCache +import net.mullvad.mullvadvpn.dataproxy.ConnectionProxy import net.mullvad.mullvadvpn.dataproxy.KeyStatusListener import net.mullvad.mullvadvpn.dataproxy.LocationInfoCache import net.mullvad.mullvadvpn.dataproxy.MullvadProblemReport import net.mullvad.mullvadvpn.dataproxy.RelayListListener -import net.mullvad.mullvadvpn.dataproxy.SettingsListener import net.mullvad.mullvadvpn.dataproxy.WwwAuthTokenRetriever import net.mullvad.mullvadvpn.service.MullvadDaemon import net.mullvad.mullvadvpn.service.MullvadVpnService -import net.mullvad.mullvadvpn.util.SmartDeferred -import net.mullvad.talpid.ConnectivityListener class MainActivity : FragmentActivity() { companion object { val KEY_SHOULD_CONNECT = "should_connect" } - var connectivityListener = CompletableDeferred<ConnectivityListener>() - private set + var serviceConnection: ServiceConnection? = null + private var serviceConnectionSubscription: Int? = null + var daemon = CompletableDeferred<MullvadDaemon>() private set var service = CompletableDeferred<MullvadVpnService.LocalBinder>() private set - var appVersionInfoCache = AppVersionInfoCache(this) - val connectionProxy = SmartDeferred(configureConnectionProxy()) - val keyStatusListener = KeyStatusListener(daemon) val problemReport = MullvadProblemReport() - var settingsListener = SettingsListener(this) - var relayListListener = RelayListListener(this) - val locationInfoCache = LocationInfoCache(daemon, connectivityListener, relayListListener) - val accountCache = AccountCache(settingsListener, daemon) - val wwwAuthTokenRetriever = WwwAuthTokenRetriever(daemon) + + val appVersionInfoCache: AppVersionInfoCache + get() = serviceConnection!!.appVersionInfoCache + val connectionProxy: ConnectionProxy + get() = serviceConnection!!.connectionProxy + val keyStatusListener: KeyStatusListener + get() = serviceConnection!!.keyStatusListener + val relayListListener: RelayListListener + get() = serviceConnection!!.relayListListener + val locationInfoCache: LocationInfoCache + get() = serviceConnection!!.locationInfoCache + val accountCache: AccountCache + get() = serviceConnection!!.accountCache + val wwwAuthTokenRetriever: WwwAuthTokenRetriever + get() = serviceConnection!!.wwwAuthTokenRetriever private var quitJob: Job? = null private var serviceToStop: MullvadVpnService.LocalBinder? = null private var waitForDaemonJob: Job? = null - private val serviceConnection = object : ServiceConnection { + private val serviceConnectionManager = object : android.content.ServiceConnection { override fun onServiceConnected(className: ComponentName, binder: IBinder) { val localBinder = binder as MullvadVpnService.LocalBinder + serviceConnectionSubscription = localBinder.serviceNotifier.subscribe { service -> + serviceConnection?.onDestroy() + + serviceConnection = service?.let { service -> + ServiceConnection(service, this@MainActivity) + } + } + waitForDaemonJob = GlobalScope.launch(Dispatchers.Default) { localBinder.resetComplete?.await() service.complete(localBinder) daemon.complete(localBinder.daemon.await()) - connectivityListener.complete(localBinder.connectivityListener) } } @@ -69,12 +81,18 @@ class MainActivity : FragmentActivity() { waitForDaemonJob?.cancel() waitForDaemonJob = null + serviceConnectionSubscription?.let { subscription -> + runBlocking { + service.await().serviceNotifier.unsubscribe(subscription) + } + serviceConnection = null + } + service.cancel() daemon.cancel() service = CompletableDeferred<MullvadVpnService.LocalBinder>() daemon = CompletableDeferred<MullvadDaemon>() - connectivityListener = CompletableDeferred<ConnectivityListener>() } } @@ -86,10 +104,8 @@ class MainActivity : FragmentActivity() { addInitialFragment() } - appVersionInfoCache.onCreate() - if (intent.getBooleanExtra(KEY_SHOULD_CONNECT, false)) { - connectionProxy.awaitThen { connect() } + connectionProxy.connect() } } @@ -99,7 +115,7 @@ class MainActivity : FragmentActivity() { val intent = Intent(this, MullvadVpnService::class.java) startService(intent) - bindService(intent, serviceConnection, 0) + bindService(intent, serviceConnectionManager, 0) } override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) { @@ -110,20 +126,13 @@ class MainActivity : FragmentActivity() { quitJob?.cancel() serviceToStop?.apply { stop() } - unbindService(serviceConnection) + unbindService(serviceConnectionManager) super.onStop() } override fun onDestroy() { - connectionProxy.cancel() - - accountCache.onDestroy() - appVersionInfoCache.onDestroy() - keyStatusListener.onDestroy() - locationInfoCache.onDestroy() - relayListListener.onDestroy() - settingsListener.onDestroy() + serviceConnection?.onDestroy() waitForDaemonJob?.cancel() daemon.cancel() @@ -164,15 +173,7 @@ class MainActivity : FragmentActivity() { } } - private fun configureConnectionProxy() = GlobalScope.async(Dispatchers.Default) { - service.await().connectionProxy.apply { - mainActivity = this@MainActivity - } - } - private fun setVpnPermission(allow: Boolean) = GlobalScope.launch(Dispatchers.Default) { - connectionProxy.awaitThen { - vpnPermission.complete(allow) - } + connectionProxy.vpnPermission.complete(allow) } } diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SelectLocationFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SelectLocationFragment.kt index 9a885dd13d..fdb50715e9 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SelectLocationFragment.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SelectLocationFragment.kt @@ -25,11 +25,10 @@ import net.mullvad.mullvadvpn.relaylist.RelayItem import net.mullvad.mullvadvpn.relaylist.RelayItemDividerDecoration import net.mullvad.mullvadvpn.relaylist.RelayList import net.mullvad.mullvadvpn.relaylist.RelayListAdapter -import net.mullvad.mullvadvpn.util.SmartDeferred class SelectLocationFragment : Fragment() { private lateinit var parentActivity: MainActivity - private lateinit var connectionProxy: SmartDeferred<ConnectionProxy> + private lateinit var connectionProxy: ConnectionProxy private lateinit var relayListListener: RelayListListener private lateinit var relayListContainer: ViewSwitcher @@ -129,7 +128,7 @@ class SelectLocationFragment : Fragment() { val keyStatus = parentActivity.keyStatusListener.keyStatus if (keyStatus == null || keyStatus is KeygenEvent.NewKey) { - connectionProxy.awaitThen { connect() } + connectionProxy.connect() } } } diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt new file mode 100644 index 0000000000..831d52274f --- /dev/null +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt @@ -0,0 +1,51 @@ +package net.mullvad.mullvadvpn.ui + +import kotlinx.coroutines.CompletableDeferred +import net.mullvad.mullvadvpn.dataproxy.AccountCache +import net.mullvad.mullvadvpn.dataproxy.AppVersionInfoCache +import net.mullvad.mullvadvpn.dataproxy.KeyStatusListener +import net.mullvad.mullvadvpn.dataproxy.LocationInfoCache +import net.mullvad.mullvadvpn.dataproxy.RelayListListener +import net.mullvad.mullvadvpn.dataproxy.SettingsListener +import net.mullvad.mullvadvpn.dataproxy.WwwAuthTokenRetriever +import net.mullvad.mullvadvpn.service.MullvadDaemon +import net.mullvad.mullvadvpn.service.ServiceInstance +import net.mullvad.talpid.ConnectivityListener + +class ServiceConnection(private val service: ServiceInstance, val mainActivity: MainActivity) { + private val asyncDaemon = CompletableDeferred<MullvadDaemon>() + private val asyncConnectivityListener = CompletableDeferred<ConnectivityListener>() + + val daemon = service.daemon + val connectionProxy = service.connectionProxy + val connectivityListener = service.connectivityListener + + val appVersionInfoCache = AppVersionInfoCache(mainActivity, asyncDaemon) + val keyStatusListener = KeyStatusListener(asyncDaemon) + val settingsListener = SettingsListener(asyncDaemon) + val accountCache = AccountCache(settingsListener, asyncDaemon) + var relayListListener = RelayListListener(asyncDaemon, settingsListener) + val locationInfoCache = + LocationInfoCache(asyncDaemon, asyncConnectivityListener, relayListListener) + val wwwAuthTokenRetriever = WwwAuthTokenRetriever(asyncDaemon) + + init { + asyncDaemon.complete(daemon) + asyncConnectivityListener.complete(connectivityListener) + appVersionInfoCache.onCreate() + + connectionProxy.mainActivity = mainActivity + } + + fun onDestroy() { + asyncDaemon.cancel() + asyncConnectivityListener.cancel() + + accountCache.onDestroy() + appVersionInfoCache.onDestroy() + keyStatusListener.onDestroy() + locationInfoCache.onDestroy() + relayListListener.onDestroy() + settingsListener.onDestroy() + } +} 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 c27c9b0133..49537c7d75 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WireguardKeyFragment.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WireguardKeyFragment.kt @@ -27,7 +27,6 @@ import net.mullvad.mullvadvpn.dataproxy.WwwAuthTokenRetriever import net.mullvad.mullvadvpn.model.KeygenEvent import net.mullvad.mullvadvpn.model.KeygenFailure import net.mullvad.mullvadvpn.model.TunnelState -import net.mullvad.mullvadvpn.util.SmartDeferred import org.joda.time.DateTime import org.joda.time.DateTimeZone import org.joda.time.format.DateTimeFormat @@ -39,9 +38,8 @@ class WireguardKeyFragment : Fragment() { private var currentJob: Job? = null private var updateViewsJob: Job? = null private var tunnelStateListener: Int? = null - private var tunnelStateSubscriptionJob: Long? = null private var tunnelState: TunnelState = TunnelState.Disconnected() - private lateinit var connectionProxy: SmartDeferred<ConnectionProxy> + private lateinit var connectionProxy: ConnectionProxy private lateinit var keyStatusListener: KeyStatusListener private lateinit var parentActivity: MainActivity private lateinit var wwwTokenRetriever: WwwAuthTokenRetriever @@ -299,14 +297,8 @@ class WireguardKeyFragment : Fragment() { } override fun onPause() { - tunnelStateSubscriptionJob?.let { jobId -> - connectionProxy.cancelJob(jobId) - } - tunnelStateListener?.let { listener -> - connectionProxy.awaitThen { - onUiStateChange.unsubscribe(listener) - } + connectionProxy.onUiStateChange.unsubscribe(listener) } keyStatusListener.onKeyStatusChange = null @@ -321,12 +313,10 @@ class WireguardKeyFragment : Fragment() { override fun onResume() { super.onResume() - tunnelStateSubscriptionJob = connectionProxy.awaitThen { - tunnelStateListener = onUiStateChange.subscribe { uiState -> - tunnelState = uiState - updateViewsJob?.cancel() - updateViewsJob = updateViewJob() - } + tunnelStateListener = connectionProxy.onUiStateChange.subscribe { uiState -> + tunnelState = uiState + updateViewsJob?.cancel() + updateViewsJob = updateViewJob() } keyStatusListener.onKeyStatusChange = { _ -> |
