summaryrefslogtreecommitdiffhomepage
path: root/android/src/main
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-09-12 11:58:48 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-09-13 12:14:20 +0000
commitdad616316c994f2cb8cddade2c779a6067deeaaa (patch)
tree61215b92b27c4044f3640620c26299fc955423bd /android/src/main
parent6e1466bacecb349b628ae94f82bdb8b55ed99b4b (diff)
downloadmullvadvpn-dad616316c994f2cb8cddade2c779a6067deeaaa.tar.xz
mullvadvpn-dad616316c994f2cb8cddade2c779a6067deeaaa.zip
Reset daemon and helpers when rebinding service
Diffstat (limited to 'android/src/main')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt7
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt17
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()