summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-01-18 22:33:55 +0000
committerAleksandr Granin <aleksandr@mullvad.net>2021-04-08 13:26:19 +0200
commit7f197c0163bfc127c09f793d462d5432cb450d51 (patch)
tree59804561b622717cf5015ca8f869abf15c3662ef /android/src
parent959d41c00ec12bb45586f15b70ef9a3499a12db2 (diff)
downloadmullvadvpn-7f197c0163bfc127c09f793d462d5432cb450d51.tar.xz
mullvadvpn-7f197c0163bfc127c09f793d462d5432cb450d51.zip
Use an `EventNotifier` in `SplitTunneling`
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt2
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/SplitTunneling.kt20
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SplitTunnelingViewModel.kt2
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