diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-12-18 15:30:19 +0000 |
|---|---|---|
| committer | Aleksandr Granin <aleksandr@mullvad.net> | 2021-04-08 13:26:19 +0200 |
| commit | b4956ac00e2ab6c3dc47398e7297097b93d4f78d (patch) | |
| tree | 965dcbbe93fb5d220b93af39197481ec7405aaa1 /android/src | |
| parent | 0400e2121268d8d5be009fb99b26d3c5e6cbb009 (diff) | |
| download | mullvadvpn-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.kt | 42 |
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) + } +} |
