diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-04-29 19:00:30 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-05-01 17:29:17 +0000 |
| commit | 43a0789708c6383c0a024dfa1f068844c07f7917 (patch) | |
| tree | b612354e8287ea95d54eb4f81f882f0d3c13993b /android/src | |
| parent | 990624960bbd7a70e1195f2a5eab9f9d6f2a3944 (diff) | |
| download | mullvadvpn-43a0789708c6383c0a024dfa1f068844c07f7917.tar.xz mullvadvpn-43a0789708c6383c0a024dfa1f068844c07f7917.zip | |
Refactor to simplify service clean-up
Diffstat (limited to 'android/src')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt | 38 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt | 7 |
2 files changed, 22 insertions, 23 deletions
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 aba89e9e8a..b2668d7968 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt @@ -28,11 +28,17 @@ class MullvadVpnService : TalpidVpnService() { private var isStopping = false - private var connectionProxy: ConnectionProxy? = null - private var daemon: MullvadDaemon? = null - private var locationInfoCache: LocationInfoCache? = null private var startDaemonJob: Job? = null + private var instance: ServiceInstance? = null + set(value) { + if (field != value) { + field?.onDestroy() + field = value + serviceNotifier.notify(value) + } + } + private lateinit var notificationManager: ForegroundNotificationManager private lateinit var tunnelStateUpdater: TunnelStateUpdater @@ -40,7 +46,7 @@ class MullvadVpnService : TalpidVpnService() { set(value) { field = value - connectionProxy?.let { activeConnectionProxy -> + instance?.connectionProxy?.let { activeConnectionProxy -> when (value) { PendingAction.Connect -> activeConnectionProxy.connect() PendingAction.Disconnect -> activeConnectionProxy.disconnect() @@ -144,15 +150,13 @@ class MullvadVpnService : TalpidVpnService() { private fun startDaemon() = GlobalScope.launch(Dispatchers.Default) { prepareFiles() - val newDaemon = MullvadDaemon(this@MullvadVpnService).apply { + val daemon = MullvadDaemon(this@MullvadVpnService).apply { onSettingsChange.subscribe { settings -> loggedIn = settings?.accountToken != null } onDaemonStopped = { - locationInfoCache?.onDestroy() - connectionProxy?.onDestroy() - serviceNotifier.notify(null) + instance = null if (!isStopping) { restart() @@ -160,7 +164,7 @@ class MullvadVpnService : TalpidVpnService() { } } - val newConnectionProxy = ConnectionProxy(this@MullvadVpnService, newDaemon).apply { + val connectionProxy = ConnectionProxy(this@MullvadVpnService, daemon).apply { when (pendingAction) { PendingAction.Connect -> connect() PendingAction.Disconnect -> disconnect() @@ -170,19 +174,9 @@ class MullvadVpnService : TalpidVpnService() { pendingAction = null } - val newLocationInfoCache = - LocationInfoCache(newDaemon, newConnectionProxy, connectivityListener) - - daemon = newDaemon - connectionProxy = newConnectionProxy - locationInfoCache = newLocationInfoCache + val locationInfoCache = LocationInfoCache(daemon, connectionProxy, connectivityListener) - serviceNotifier.notify(ServiceInstance( - newDaemon, - newConnectionProxy, - connectivityListener, - newLocationInfoCache - )) + instance = ServiceInstance(daemon, connectionProxy, connectivityListener, locationInfoCache) } private fun prepareFiles() { @@ -210,7 +204,7 @@ class MullvadVpnService : TalpidVpnService() { private fun stopDaemon() { startDaemonJob?.cancel() - daemon?.shutdown() + instance?.daemon?.shutdown() } private fun tearDown() { 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 8e3e3fbf70..99bb695870 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt @@ -7,4 +7,9 @@ data class ServiceInstance( val connectionProxy: ConnectionProxy, val connectivityListener: ConnectivityListener, val locationInfoCache: LocationInfoCache -) +) { + fun onDestroy() { + connectionProxy.onDestroy() + locationInfoCache.onDestroy() + } +} |
