diff options
Diffstat (limited to 'ui/src/main/java/com/wireguard/android/QuickTileService.kt')
| -rw-r--r-- | ui/src/main/java/com/wireguard/android/QuickTileService.kt | 41 |
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 -> { |
