summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-07-04 03:06:03 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-07-22 16:36:57 +0000
commita36f22f66360252401f31fb4c3b3d9a2b6634447 (patch)
tree5a1256802248d1ea2f677c32780efce2915b6f98 /android/src
parentdc7bdc7783b391d08e6c64aa8c6c92227f7fbf47 (diff)
downloadmullvadvpn-a36f22f66360252401f31fb4c3b3d9a2b6634447.tar.xz
mullvadvpn-a36f22f66360252401f31fb4c3b3d9a2b6634447.zip
Store split tunnelling state in shared prefs.
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/SplitTunnelling.kt21
2 files changed, 20 insertions, 3 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 317ca72eed..f4fb25a895 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
@@ -242,7 +242,7 @@ class MullvadVpnService : TalpidVpnService() {
pendingAction = null
}
- val splitTunnelling = SplitTunnelling().apply {
+ val splitTunnelling = SplitTunnelling(this).apply {
onChange = { excludedApps ->
disallowedApps = excludedApps
markTunAsStale()
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/SplitTunnelling.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/SplitTunnelling.kt
index 0722c2fc56..f3624ce25b 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/SplitTunnelling.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/SplitTunnelling.kt
@@ -1,9 +1,14 @@
package net.mullvad.mullvadvpn.service
+import android.content.Context
import kotlin.properties.Delegates.observable
-class SplitTunnelling {
+private const val SHARED_PREFERENCES = "split_tunnelling"
+private const val KEY_ENABLED = "enabled"
+
+class SplitTunnelling(context: Context) {
private val excludedApps = HashSet<String>()
+ private val preferences = context.getSharedPreferences(SHARED_PREFERENCES, Context.MODE_PRIVATE)
val excludedAppList
get() = if (enabled) {
@@ -12,7 +17,10 @@ class SplitTunnelling {
emptyList()
}
- var enabled by observable(false) { _, _, _ -> update() }
+ var enabled by observable(preferences.getBoolean(KEY_ENABLED, false)) { _, _, _ ->
+ enabledChanged()
+ }
+
var onChange: ((List<String>) -> Unit)? = null
fun isAppExcluded(appPackageName: String) = excludedApps.contains(appPackageName)
@@ -27,6 +35,15 @@ class SplitTunnelling {
update()
}
+ private fun enabledChanged() {
+ preferences.edit().apply {
+ putBoolean(KEY_ENABLED, enabled)
+ apply()
+ }
+
+ update()
+ }
+
private fun update() {
onChange?.invoke(excludedAppList)
}