summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-11-11 15:44:20 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-11-13 14:18:36 +0000
commitd81910026fa846420585507adae9e35b8e0fd83c (patch)
tree09e846d36d3f9ab9483b91ae000f12299b5f7367 /android/src
parentba3e14391ddb421f0cbb4997620cdaf42b6f597c (diff)
downloadmullvadvpn-d81910026fa846420585507adae9e35b8e0fd83c.tar.xz
mullvadvpn-d81910026fa846420585507adae9e35b8e0fd83c.zip
Initialize `SplitTunneling` in the background
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt28
1 files changed, 19 insertions, 9 deletions
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 f498b9bf7f..4973c7fcc2 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
@@ -9,6 +9,7 @@ import android.os.IBinder
import android.util.Log
import java.io.File
import kotlin.properties.Delegates.observable
+import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job
@@ -43,6 +44,8 @@ class MullvadVpnService : TalpidVpnService() {
private val binder = LocalBinder()
private val serviceNotifier = EventNotifier<ServiceInstance?>(null)
+ private val splitTunneling = CompletableDeferred<SplitTunneling>()
+
private var isStopping = false
private var shouldStop = false
@@ -67,7 +70,6 @@ class MullvadVpnService : TalpidVpnService() {
private lateinit var keyguardManager: KeyguardManager
private lateinit var notificationManager: ForegroundNotificationManager
- private lateinit var splitTunneling: SplitTunneling
private lateinit var tunnelStateUpdater: TunnelStateUpdater
private var pendingAction by observable<PendingAction?>(null) { _, _, action ->
@@ -91,19 +93,14 @@ class MullvadVpnService : TalpidVpnService() {
super.onCreate()
Log.d(TAG, "Initializing service")
+ initializeSplitTunneling()
+
keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
notificationManager = ForegroundNotificationManager(this, serviceNotifier, keyguardManager)
tunnelStateUpdater = TunnelStateUpdater(this, serviceNotifier)
notificationManager.acknowledgeStartForegroundService()
- splitTunneling = SplitTunneling(this).apply {
- onChange = { excludedApps ->
- disallowedApps = excludedApps
- markTunAsStale()
- }
- }
-
setUp()
}
@@ -187,6 +184,17 @@ class MullvadVpnService : TalpidVpnService() {
set(value) { this@MullvadVpnService.isUiVisible = value }
}
+ private fun initializeSplitTunneling() = GlobalScope.launch(Dispatchers.Default) {
+ splitTunneling.complete(
+ SplitTunneling(this@MullvadVpnService).apply {
+ onChange = { excludedApps ->
+ disallowedApps = excludedApps
+ markTunAsStale()
+ }
+ }
+ )
+ }
+
private fun setUp() {
startDaemonJob?.cancel()
startDaemonJob = startDaemon()
@@ -195,6 +203,7 @@ class MullvadVpnService : TalpidVpnService() {
private fun startDaemon() = GlobalScope.launch(Dispatchers.Default) {
Log.d(TAG, "Starting daemon")
prepareFiles()
+ splitTunneling.await()
val daemon = MullvadDaemon(this@MullvadVpnService).apply {
onDaemonStopped = {
@@ -234,9 +243,10 @@ class MullvadVpnService : TalpidVpnService() {
}
}
- private fun setUpInstance(daemon: MullvadDaemon, settings: Settings) {
+ private suspend fun setUpInstance(daemon: MullvadDaemon, settings: Settings) {
val settingsListener = SettingsListener(daemon, settings)
val connectionProxy = ConnectionProxy(this, daemon)
+ val splitTunneling = splitTunneling.await()
splitTunneling.onChange = { excludedApps ->
disallowedApps = excludedApps