diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-01-18 22:33:55 +0000 |
|---|---|---|
| committer | Aleksandr Granin <aleksandr@mullvad.net> | 2021-04-08 13:26:19 +0200 |
| commit | 7f197c0163bfc127c09f793d462d5432cb450d51 (patch) | |
| tree | 59804561b622717cf5015ca8f869abf15c3662ef /android/src | |
| parent | 959d41c00ec12bb45586f15b70ef9a3499a12db2 (diff) | |
| download | mullvadvpn-7f197c0163bfc127c09f793d462d5432cb450d51.tar.xz mullvadvpn-7f197c0163bfc127c09f793d462d5432cb450d51.zip | |
Use an `EventNotifier` in `SplitTunneling`
Diffstat (limited to 'android/src')
3 files changed, 10 insertions, 14 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 99482c9a6d..920e51c9d1 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt @@ -230,7 +230,7 @@ class MullvadVpnService : TalpidVpnService() { val connectionProxy = ConnectionProxy(this, daemon) val customDns = CustomDns(daemon, endpoint.settingsListener) - endpoint.splitTunneling.onChange = { excludedApps -> + endpoint.splitTunneling.onChange.subscribe(this@MullvadVpnService) { excludedApps -> disallowedApps = excludedApps markTunAsStale() connectionProxy.reconnect() diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/SplitTunneling.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/SplitTunneling.kt index 2dfecf678d..4a226ec614 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/SplitTunneling.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/SplitTunneling.kt @@ -4,6 +4,7 @@ import android.content.Context import java.io.File import kotlin.properties.Delegates.observable import net.mullvad.mullvadvpn.ipc.Request +import net.mullvad.talpid.util.EventNotifier // The spelling of the shared preferences location can't be changed to American English without // either having users lose their preferences on update or implementing some migration code. @@ -17,21 +18,12 @@ class SplitTunneling(context: Context, endpoint: ServiceEndpoint) { private val excludedApps = HashSet<String>() private val preferences = context.getSharedPreferences(SHARED_PREFERENCES, Context.MODE_PRIVATE) - val excludedAppList - get() = if (enabled) { - excludedApps.toList() - } else { - null - } + val onChange = EventNotifier<List<String>?>(null) var enabled by observable(preferences.getBoolean(KEY_ENABLED, false)) { _, _, _ -> enabledChanged() } - var onChange by observable<((List<String>?) -> Unit)?>(null) { _, _, _ -> - update() - } - init { if (appListFile.exists()) { excludedApps.addAll(appListFile.readLines()) @@ -74,7 +66,7 @@ class SplitTunneling(context: Context, endpoint: ServiceEndpoint) { } fun onDestroy() { - onChange = null + onChange.unsubscribeAll() } private fun enabledChanged() { @@ -87,6 +79,10 @@ class SplitTunneling(context: Context, endpoint: ServiceEndpoint) { } private fun update() { - onChange?.invoke(excludedAppList) + if (enabled) { + onChange.notify(excludedApps.toList()) + } else { + onChange.notify(null) + } } } diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModel.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModel.kt index 7eda34092f..7b0ab9cc91 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModel.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModel.kt @@ -92,7 +92,7 @@ class SplitTunnelingViewModel( private suspend fun fetchData() { appsProvider.getAppsList() - .partition { app -> splitTunneling.excludedAppList?.contains(app.packageName) ?: false } + .partition { app -> splitTunneling.isAppExcluded(app.packageName) } .let { (excludedAppsList, notExcludedAppsList) -> // TODO: remove potential package names from splitTunneling list // if they already uninstalled or filtered; but not in ViewModel |
