summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-04-29 19:00:30 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-05-01 17:29:17 +0000
commit43a0789708c6383c0a024dfa1f068844c07f7917 (patch)
treeb612354e8287ea95d54eb4f81f882f0d3c13993b /android/src
parent990624960bbd7a70e1195f2a5eab9f9d6f2a3944 (diff)
downloadmullvadvpn-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.kt38
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt7
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()
+ }
+}