diff options
Diffstat (limited to 'android')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt | 5 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt | 26 |
2 files changed, 24 insertions, 7 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt index c3b1661907..a175efc5ca 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt @@ -20,6 +20,7 @@ class MullvadDaemon(val vpnService: MullvadVpnService) { var onKeygenEvent: ((KeygenEvent) -> Unit)? = null var onRelayListChange: ((RelayList) -> Unit)? = null var onTunnelStateChange: ((TunnelState) -> Unit)? = null + var onDaemonStopped: (() -> Unit)? = null init { System.loadLibrary("mullvad_jni") @@ -138,6 +139,10 @@ class MullvadDaemon(val vpnService: MullvadVpnService) { onTunnelStateChange?.invoke(event) } + private fun notifyDaemonStopped() { + onDaemonStopped?.invoke() + } + private fun finalize() { deinitialize() } 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 f22094dfe9..6d8747f915 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt @@ -34,8 +34,7 @@ class MullvadVpnService : TalpidVpnService() { override fun onRebind(intent: Intent) { if (isStopping) { - tearDown() - setUp() + restart() isStopping = false } } @@ -46,7 +45,6 @@ class MullvadVpnService : TalpidVpnService() { override fun onDestroy() { tearDown() - daemon.cancel() super.onDestroy() } @@ -72,6 +70,12 @@ class MullvadVpnService : TalpidVpnService() { onSettingsChange.subscribe { settings -> notificationManager.loggedIn = settings?.accountToken != null } + + onDaemonStopped = { + if (!isStopping) { + restart() + } + } } serviceNotifier.notify(ServiceInstance(daemon, connectionProxy, connectivityListener)) @@ -88,20 +92,28 @@ class MullvadVpnService : TalpidVpnService() { private fun stop() { isStopping = true + stopDaemon() + stopSelf() + } - serviceNotifier.notify(null) - + private fun stopDaemon() { if (daemon.isCompleted) { runBlocking { daemon.await().shutdown() } } else { daemon.cancel() } - - stopSelf() } private fun tearDown() { + serviceNotifier.notify(null) + stopDaemon() + connectionProxy.onDestroy() notificationManager.onDestroy() } + + private fun restart() { + tearDown() + setUp() + } } |
