diff --git a/src/frontends/android/app/src/main/AndroidManifest.xml b/src/frontends/android/app/src/main/AndroidManifest.xml index e102b70d9..a5e6aabc2 100644 --- a/src/frontends/android/app/src/main/AndroidManifest.xml +++ b/src/frontends/android/app/src/main/AndroidManifest.xml @@ -26,6 +26,7 @@ + diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnTileService.java b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnTileService.java index ac8c49ade..05c3e2da9 100644 --- a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnTileService.java +++ b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnTileService.java @@ -28,6 +28,7 @@ import android.content.SharedPreferences; import android.graphics.drawable.Icon; import android.os.Build; import android.os.IBinder; +import android.provider.Settings; import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; @@ -191,6 +192,15 @@ public class VpnTileService extends TileService implements VpnStateService.VpnSt } else { + /* a bug in Android 14+ requires us to request this permission in + * order to start the activity from this "background" service */ + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE && !Settings.canDrawOverlays(this)) + { + Intent permIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); + permIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivityAndCollapse(PendingIntent.getActivity(this, 0, permIntent, PendingIntent.FLAG_IMMUTABLE)); + return; + } startActivity(intent); } return;