summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-12-18 15:30:19 +0000
committerAleksandr Granin <aleksandr@mullvad.net>2021-04-08 13:26:19 +0200
commitb4956ac00e2ab6c3dc47398e7297097b93d4f78d (patch)
tree965dcbbe93fb5d220b93af39197481ec7405aaa1 /android/src
parent0400e2121268d8d5be009fb99b26d3c5e6cbb009 (diff)
downloadmullvadvpn-b4956ac00e2ab6c3dc47398e7297097b93d4f78d.tar.xz
mullvadvpn-b4956ac00e2ab6c3dc47398e7297097b93d4f78d.zip
Create UI-side `SplitTunneling` class
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/SplitTunneling.kt42
1 files changed, 42 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/SplitTunneling.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/SplitTunneling.kt
new file mode 100644
index 0000000000..a98c55b5de
--- /dev/null
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/SplitTunneling.kt
@@ -0,0 +1,42 @@
+package net.mullvad.mullvadvpn.ui.serviceconnection
+
+import android.os.Messenger
+import kotlin.properties.Delegates.observable
+import net.mullvad.mullvadvpn.ipc.DispatchingHandler
+import net.mullvad.mullvadvpn.ipc.Event
+import net.mullvad.mullvadvpn.ipc.Request
+
+class SplitTunneling(val connection: Messenger, eventDispatcher: DispatchingHandler<Event>) {
+ private var excludedApps: Set<String> = emptySet()
+
+ var enabled by observable(false) { _, wasEnabled, isEnabled ->
+ if (wasEnabled != isEnabled) {
+ connection.send(Request.SetEnableSplitTunneling(isEnabled).message)
+ }
+ }
+
+ init {
+ eventDispatcher.registerHandler(Event.SplitTunnelingUpdate::class) { event ->
+ if (event.excludedApps != null) {
+ enabled = true
+ excludedApps = event.excludedApps.toSet()
+ } else {
+ enabled = false
+ }
+ }
+ }
+
+ fun isAppExcluded(appPackageName: String): Boolean = excludedApps.contains(appPackageName)
+
+ fun excludeApp(appPackageName: String) {
+ connection.send(Request.ExcludeApp(appPackageName).message)
+ }
+
+ fun includeApp(appPackageName: String) {
+ connection.send(Request.IncludeApp(appPackageName).message)
+ }
+
+ fun persist() {
+ connection.send(Request.PersistExcludedApps.message)
+ }
+}