diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-07-31 17:05:37 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-07-31 17:05:37 -0300 |
| commit | 029bcd20c2874b932fca80e287d637a0184856e3 (patch) | |
| tree | 12e64394cd2df31755d0781793b54e09b5b43853 /android/src | |
| parent | 1c7a7383d7bfbfe5eeeb44afeea6d615d1169dc7 (diff) | |
| parent | 34d8c5828dedfa7a0402cf9e8d4c3f305e9cac55 (diff) | |
| download | mullvadvpn-029bcd20c2874b932fca80e287d637a0184856e3.tar.xz mullvadvpn-029bcd20c2874b932fca80e287d637a0184856e3.zip | |
Merge branch 'fix-quit-not-stopping-daemon'
Diffstat (limited to 'android/src')
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 { |
