diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-02-28 22:21:52 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-03-18 13:31:35 +0000 |
| commit | 636e89cc44ea2837ca6385d54fabaa24a1d40584 (patch) | |
| tree | 8c77288e5abed164f663c8207d06fc70d1ad1b7a /android/src/main | |
| parent | 2f5dd32f9386ac4657a5dd9e4eee3b1e9c3b0db5 (diff) | |
| download | mullvadvpn-636e89cc44ea2837ca6385d54fabaa24a1d40584.tar.xz mullvadvpn-636e89cc44ea2837ca6385d54fabaa24a1d40584.zip | |
Create a quick settings tile
Diffstat (limited to 'android/src/main')
| -rw-r--r-- | android/src/main/AndroidManifest.xml | 9 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadTileService.kt | 76 |
2 files changed, 85 insertions, 0 deletions
diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 8f472d7f5b..cbd48f152e 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -27,5 +27,14 @@ <action android:name="android.net.VpnService" /> </intent-filter> </service> + <service android:name="net.mullvad.mullvadvpn.service.MullvadTileService" + android:label="@string/app_name" + android:icon="@drawable/small_logo_black" + android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"> + + <intent-filter> + <action android:name="android.service.quicksettings.action.QS_TILE" /> + </intent-filter> + </service> </application> </manifest> 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() + } + } +} |
