diff options
Diffstat (limited to 'android')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt | 7 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt | 17 |
2 files changed, 22 insertions, 2 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt index ebaeb76538..0b954c23b9 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt @@ -57,14 +57,17 @@ class MainActivity : FragmentActivity() { override fun onServiceConnected(className: ComponentName, binder: IBinder) { val localBinder = binder as MullvadVpnService.LocalBinder - service.complete(localBinder) - waitForDaemonJob = GlobalScope.launch(Dispatchers.Default) { + localBinder.resetComplete?.await() + service.complete(localBinder) daemon.complete(localBinder.daemon.await()) } } override fun onServiceDisconnected(className: ComponentName) { + waitForDaemonJob?.cancel() + waitForDaemonJob = null + service.cancel() daemon.cancel() diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt index a3c4c64c9b..8167d9e395 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt @@ -5,6 +5,7 @@ import java.net.InetAddress import kotlinx.coroutines.async import kotlinx.coroutines.runBlocking import kotlinx.coroutines.CompletableDeferred +import kotlinx.coroutines.Deferred import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope @@ -21,6 +22,8 @@ class MullvadVpnService : VpnService() { private val binder = LocalBinder() private val created = CompletableDeferred<Unit>() + private var resetComplete: CompletableDeferred<Unit>? = null + private lateinit var daemon: Deferred<MullvadDaemon> private lateinit var connectionProxy: ConnectionProxy private lateinit var notificationManager: ForegroundNotificationManager @@ -35,6 +38,18 @@ class MullvadVpnService : VpnService() { return super.onBind(intent) ?: binder } + override fun onRebind(intent: Intent) { + resetComplete?.let { reset -> + tearDown() + setUp() + reset.complete(Unit) + } + } + + override fun onUnbind(intent: Intent): Boolean { + return true + } + override fun onDestroy() { tearDown() daemon.cancel() @@ -72,6 +87,8 @@ class MullvadVpnService : VpnService() { get() = this@MullvadVpnService.daemon val connectionProxy get() = this@MullvadVpnService.connectionProxy + val resetComplete + get() = this@MullvadVpnService.resetComplete fun stop() { this@MullvadVpnService.stop() |
