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:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user