summaryrefslogtreecommitdiffhomepage
path: root/android/src/main/kotlin
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-02-28 22:21:52 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-03-18 13:31:35 +0000
commit636e89cc44ea2837ca6385d54fabaa24a1d40584 (patch)
tree8c77288e5abed164f663c8207d06fc70d1ad1b7a /android/src/main/kotlin
parent2f5dd32f9386ac4657a5dd9e4eee3b1e9c3b0db5 (diff)
downloadmullvadvpn-636e89cc44ea2837ca6385d54fabaa24a1d40584.tar.xz
mullvadvpn-636e89cc44ea2837ca6385d54fabaa24a1d40584.zip
Create a quick settings tile
Diffstat (limited to 'android/src/main/kotlin')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadTileService.kt76
1 files changed, 76 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadTileService.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadTileService.kt
new file mode 100644
index 0000000000..01a14db174
--- /dev/null
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadTileService.kt
@@ -0,0 +1,76 @@
+package net.mullvad.mullvadvpn.service
+
+import android.content.Intent
+import android.service.quicksettings.Tile
+import android.service.quicksettings.TileService
+import net.mullvad.mullvadvpn.model.TunnelState
+import net.mullvad.mullvadvpn.service.tunnelstate.TunnelStateListener
+import net.mullvad.talpid.tunnel.ActionAfterDisconnect
+
+class MullvadTileService : TileService() {
+ private var secured = false
+ set(value) {
+ if (field != value) {
+ field = value
+ updateTileState()
+ }
+ }
+
+ private lateinit var listener: TunnelStateListener
+
+ override fun onCreate() {
+ super.onCreate()
+
+ listener = TunnelStateListener(this)
+ }
+
+ override fun onStartListening() {
+ super.onStartListening()
+
+ listener.onStateChange = { state ->
+ secured = when (state) {
+ is TunnelState.Disconnected -> false
+ is TunnelState.Connecting -> true
+ is TunnelState.Connected -> true
+ is TunnelState.Disconnecting -> {
+ state.actionAfterDisconnect == ActionAfterDisconnect.Reconnect
+ }
+ is TunnelState.Error -> {
+ state.errorState.isBlocking
+ }
+ }
+ }
+ }
+
+ override fun onClick() {
+ super.onClick()
+
+ val tunnelActionKey = if (secured) {
+ KEY_DISCONNECT_ACTION
+ } else {
+ KEY_CONNECT_ACTION
+ }
+
+ val intent = Intent(tunnelActionKey).setPackage("net.mullvad.mullvadvpn")
+
+ sendBroadcast(intent)
+ }
+
+ override fun onStopListening() {
+ super.onStartListening()
+
+ listener.onStateChange = null
+ }
+
+ private fun updateTileState() {
+ qsTile.apply {
+ if (secured) {
+ state = Tile.STATE_ACTIVE
+ } else {
+ state = Tile.STATE_INACTIVE
+ }
+
+ updateTile()
+ }
+ }
+}