diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-11-11 15:44:20 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-11-13 14:18:36 +0000 |
| commit | d81910026fa846420585507adae9e35b8e0fd83c (patch) | |
| tree | 09e846d36d3f9ab9483b91ae000f12299b5f7367 /android/src | |
| parent | ba3e14391ddb421f0cbb4997620cdaf42b6f597c (diff) | |
| download | mullvadvpn-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.kt | 28 |
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 |
