Skip to content

Commit 8390553

Browse files
committed
QuickTileService: require SYSTEM_ALERT_WINDOW to start background activity
Due to buggy changes in Android 14, we now need to bother the user about enabling "draw over other apps" for the quick settings toggle to work when the app isn't already running. Link: https://issuetracker.google.com/issues/305035828 Signed-off-by: Jason A. Donenfeld <[email protected]>
1 parent db7f707 commit 8390553

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

ui/src/main/AndroidManifest.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
<uses-permission android:name="android.permission.INTERNET" />
88
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
99
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
10+
<uses-permission
11+
android:name="android.permission.SYSTEM_ALERT_WINDOW"
12+
android:minSdkVersion="34" />
1013
<uses-permission
1114
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
1215
android:maxSdkVersion="28"

ui/src/main/java/com/wireguard/android/QuickTileService.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ import android.content.Intent
99
import android.graphics.Bitmap
1010
import android.graphics.Canvas
1111
import android.graphics.drawable.Icon
12+
import android.net.Uri
1213
import android.os.Build
1314
import android.os.IBinder
15+
import android.provider.Settings
1416
import android.service.quicksettings.Tile
1517
import android.service.quicksettings.TileService
1618
import android.util.Log
@@ -55,7 +57,7 @@ class QuickTileService : TileService() {
5557
val intent = Intent(this, MainActivity::class.java)
5658
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
5759
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
58-
startActivityAndCollapse(PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE))
60+
startActivityAndCollapse(PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE))
5961
} else {
6062
@Suppress("DEPRECATION")
6163
startActivityAndCollapse(intent)
@@ -68,6 +70,12 @@ class QuickTileService : TileService() {
6870
tunnel.setStateAsync(Tunnel.State.TOGGLE)
6971
updateTile()
7072
} catch (_: Throwable) {
73+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE && !Settings.canDrawOverlays(this@QuickTileService)) {
74+
val permissionIntent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:$packageName"))
75+
permissionIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
76+
startActivityAndCollapse(PendingIntent.getActivity(this@QuickTileService, 0, permissionIntent, PendingIntent.FLAG_IMMUTABLE))
77+
return@launch
78+
}
7179
val toggleIntent = Intent(this@QuickTileService, TunnelToggleActivity::class.java)
7280
toggleIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
7381
startActivity(toggleIntent)

0 commit comments

Comments
 (0)