summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-07-31 17:05:37 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-07-31 17:05:37 -0300
commit029bcd20c2874b932fca80e287d637a0184856e3 (patch)
tree12e64394cd2df31755d0781793b54e09b5b43853 /android/src
parent1c7a7383d7bfbfe5eeeb44afeea6d615d1169dc7 (diff)
parent34d8c5828dedfa7a0402cf9e8d4c3f305e9cac55 (diff)
downloadmullvadvpn-029bcd20c2874b932fca80e287d637a0184856e3.tar.xz
mullvadvpn-029bcd20c2874b932fca80e287d637a0184856e3.zip
Merge branch 'fix-quit-not-stopping-daemon'
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt17
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt1
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt10
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt2
4 files changed, 29 insertions, 1 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt
index 2d129e3971..4af4d7d72d 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt
@@ -36,6 +36,8 @@ class MainActivity : FragmentActivity() {
var daemon = CompletableDeferred<MullvadDaemon>()
private set
+ var service = CompletableDeferred<MullvadVpnService.LocalBinder>()
+ private set
var currentVersion = fetchCurrentVersion()
@@ -48,19 +50,25 @@ class MainActivity : FragmentActivity() {
val locationInfoCache = LocationInfoCache(daemon, relayListListener)
val accountCache = AccountCache(settingsListener, daemon)
+ private var shouldStopService = false
private var waitForDaemonJob: Job? = null
private val serviceConnection = object : ServiceConnection {
override fun onServiceConnected(className: ComponentName, binder: IBinder) {
val localBinder = binder as MullvadVpnService.LocalBinder
+ service.complete(localBinder)
+
waitForDaemonJob = GlobalScope.launch(Dispatchers.Default) {
daemon.complete(localBinder.daemon.await())
}
}
override fun onServiceDisconnected(className: ComponentName) {
+ service.cancel()
daemon.cancel()
+
+ service = CompletableDeferred<MullvadVpnService.LocalBinder>()
daemon = CompletableDeferred<MullvadDaemon>()
}
}
@@ -99,6 +107,10 @@ class MainActivity : FragmentActivity() {
}
override fun onStop() {
+ if (shouldStopService) {
+ runBlocking { service.await().stop() }
+ }
+
unbindService(serviceConnection)
super.onStop()
@@ -146,6 +158,11 @@ class MainActivity : FragmentActivity() {
return request
}
+ fun quit() {
+ shouldStopService = true
+ finishAndRemoveTask()
+ }
+
private fun addInitialFragment() {
supportFragmentManager?.beginTransaction()?.apply {
add(R.id.main_fragment, LaunchFragment())
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt
index 751334ea61..06b580d013 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt
@@ -33,6 +33,7 @@ class MullvadDaemon(val vpnService: MullvadVpnService) {
external fun getVersionInfo(): AppVersionInfo?
external fun getWireguardKey(): PublicKey?
external fun setAccount(accountToken: String?)
+ external fun shutdown()
external fun updateRelaySettings(update: RelaySettingsUpdate)
private external fun initialize(vpnService: MullvadVpnService)
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt
index 6cb45329ff..2c51a9ecde 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt
@@ -70,6 +70,16 @@ class MullvadVpnService : VpnService() {
inner class LocalBinder : Binder() {
val daemon
get() = this@MullvadVpnService.daemon
+
+ fun stop() {
+ if (daemon.isCompleted) {
+ runBlocking { daemon.await().shutdown() }
+ } else {
+ daemon.cancel()
+ }
+
+ stopSelf()
+ }
}
private fun startDaemon() = GlobalScope.async(Dispatchers.Default) {
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt
index f55426d811..5e36bfb268 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt
@@ -44,7 +44,7 @@ class SettingsFragment : Fragment() {
}
view.findViewById<Button>(R.id.quit_button).setOnClickListener {
- activity?.finishAndRemoveTask()
+ parentActivity.quit()
}
view.findViewById<View>(R.id.account).setOnClickListener {