aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/ui/src/main/java/com/wireguard/android/QuickTileService.kt
diff options
context:
space:
mode:
Diffstat (limited to 'ui/src/main/java/com/wireguard/android/QuickTileService.kt')
-rw-r--r--ui/src/main/java/com/wireguard/android/QuickTileService.kt41
1 files changed, 19 insertions, 22 deletions
diff --git a/ui/src/main/java/com/wireguard/android/QuickTileService.kt b/ui/src/main/java/com/wireguard/android/QuickTileService.kt
index a849c481..ee94b055 100644
--- a/ui/src/main/java/com/wireguard/android/QuickTileService.kt
+++ b/ui/src/main/java/com/wireguard/android/QuickTileService.kt
@@ -4,15 +4,14 @@
*/
package com.wireguard.android
+import android.annotation.SuppressLint
import android.app.PendingIntent
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.drawable.Icon
-import android.net.Uri
import android.os.Build
import android.os.IBinder
-import android.provider.Settings
import android.service.quicksettings.Tile
import android.service.quicksettings.TileService
import android.util.Log
@@ -21,6 +20,7 @@ import androidx.databinding.Observable
import androidx.databinding.Observable.OnPropertyChangedCallback
import com.wireguard.android.activity.MainActivity
import com.wireguard.android.activity.TunnelToggleActivity
+import com.wireguard.android.activity.TunnelToggleActivity.Companion.SHOW_PROGRESS
import com.wireguard.android.backend.Tunnel
import com.wireguard.android.model.ObservableTunnel
import com.wireguard.android.util.applicationScope
@@ -52,9 +52,9 @@ class QuickTileService : TileService() {
override fun onClick() {
applicationScope.launch {
+ updateTile()
if (tunnel == null) {
Application.getTunnelManager().getTunnels()
- updateTile()
}
when (val tunnel = tunnel) {
null -> {
@@ -64,7 +64,7 @@ class QuickTileService : TileService() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
startActivityAndCollapse(PendingIntent.getActivity(this@QuickTileService, 0, intent, PendingIntent.FLAG_IMMUTABLE))
} else {
- @Suppress("DEPRECATION")
+ @Suppress("DEPRECATION", "StartActivityAndCollapseDeprecated")
startActivityAndCollapse(intent)
}
}
@@ -76,24 +76,15 @@ class QuickTileService : TileService() {
tunnel.setStateAsync(Tunnel.State.TOGGLE)
updateTile()
} catch (e: Throwable) {
- Log.d(TAG, "Failed to set state, so falling back", e)
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE && !Settings.canDrawOverlays(this@QuickTileService)) {
- Log.d(TAG, "Need overlay permissions")
- val permissionIntent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:$packageName"))
- permissionIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- startActivityAndCollapse(
- PendingIntent.getActivity(
- this@QuickTileService,
- 0,
- permissionIntent,
- PendingIntent.FLAG_IMMUTABLE
- )
- )
- return@launch
+ val intent = Intent(this@QuickTileService, TunnelToggleActivity::class.java)
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ intent.putExtra(SHOW_PROGRESS, true)
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+ startActivityAndCollapse(PendingIntent.getActivity(this@QuickTileService, 0, intent, PendingIntent.FLAG_IMMUTABLE))
+ } else {
+ @Suppress("DEPRECATION")
+ startActivity(intent)
}
- val toggleIntent = Intent(this@QuickTileService, TunnelToggleActivity::class.java)
- toggleIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- startActivity(toggleIntent)
}
}
}
@@ -149,7 +140,7 @@ class QuickTileService : TileService() {
isAdded = false
}
- private fun updateTile() {
+ private fun updateTile(isConnecting: Boolean = false) {
// Update the tunnel.
val newTunnel = Application.getTunnelManager().lastUsedTunnel
if (newTunnel != tunnel) {
@@ -164,6 +155,12 @@ class QuickTileService : TileService() {
null -> {
tile.label = getString(R.string.app_name)
tile.state = Tile.STATE_INACTIVE
+ if (isConnecting) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ tile.subtitle = getString(R.string.quick_settings_tile_connecting)
+ tile.state = Tile.STATE_ACTIVE
+ }
+ }
tile.icon = iconOff
}
else -> {