QuickTileService: handle onClick in applicationScope

This helps with the case where the TunnelManager is still loading.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Jason A. Donenfeld
2025-05-28 03:49:37 +02:00
parent 1310a513d8
commit fa989fe58e
@@ -52,28 +52,40 @@ class QuickTileService : TileService() {
} }
override fun onClick() { override fun onClick() {
applicationScope.launch {
when (val tunnel = tunnel) { when (val tunnel = tunnel) {
null -> { null -> {
val intent = Intent(this, MainActivity::class.java) Log.d(TAG, "No tunnel set, so launching main activity")
val intent = Intent(this@QuickTileService, MainActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
startActivityAndCollapse(PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE)) startActivityAndCollapse(PendingIntent.getActivity(this@QuickTileService, 0, intent, PendingIntent.FLAG_IMMUTABLE))
} else { } else {
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
startActivityAndCollapse(intent) startActivityAndCollapse(intent)
} }
} }
else -> { else -> {
unlockAndRun { unlockAndRun {
applicationScope.launch { applicationScope.launch {
try { try {
tunnel.setStateAsync(Tunnel.State.TOGGLE) tunnel.setStateAsync(Tunnel.State.TOGGLE)
updateTile() updateTile()
} catch (_: Throwable) { } 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)) { 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")) val permissionIntent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:$packageName"))
permissionIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) permissionIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivityAndCollapse(PendingIntent.getActivity(this@QuickTileService, 0, permissionIntent, PendingIntent.FLAG_IMMUTABLE)) startActivityAndCollapse(
PendingIntent.getActivity(
this@QuickTileService,
0,
permissionIntent,
PendingIntent.FLAG_IMMUTABLE
)
)
return@launch return@launch
} }
val toggleIntent = Intent(this@QuickTileService, TunnelToggleActivity::class.java) val toggleIntent = Intent(this@QuickTileService, TunnelToggleActivity::class.java)
@@ -85,6 +97,7 @@ class QuickTileService : TileService() {
} }
} }
} }
}
override fun onCreate() { override fun onCreate() {
isAdded = true isAdded = true