summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/SplitTunnelling.kt33
1 files changed, 33 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/SplitTunnelling.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/SplitTunnelling.kt
new file mode 100644
index 0000000000..0722c2fc56
--- /dev/null
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/SplitTunnelling.kt
@@ -0,0 +1,33 @@
+package net.mullvad.mullvadvpn.service
+
+import kotlin.properties.Delegates.observable
+
+class SplitTunnelling {
+ private val excludedApps = HashSet<String>()
+
+ val excludedAppList
+ get() = if (enabled) {
+ excludedApps.toList()
+ } else {
+ emptyList()
+ }
+
+ var enabled by observable(false) { _, _, _ -> update() }
+ var onChange: ((List<String>) -> Unit)? = null
+
+ fun isAppExcluded(appPackageName: String) = excludedApps.contains(appPackageName)
+
+ fun excludeApp(appPackageName: String) {
+ excludedApps.add(appPackageName)
+ update()
+ }
+
+ fun includeApp(appPackageName: String) {
+ excludedApps.remove(appPackageName)
+ update()
+ }
+
+ private fun update() {
+ onChange?.invoke(excludedAppList)
+ }
+}