diff --git a/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java b/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java
index 55193599e..c690e5bd9 100644
--- a/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java
@@ -2,6 +2,7 @@ package org.schabi.newpipe.util;
import android.Manifest;
import android.app.Activity;
+import android.app.AlertDialog;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
@@ -9,6 +10,7 @@ import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
+import android.text.Html;
import android.widget.Toast;
import androidx.annotation.RequiresApi;
@@ -113,14 +115,47 @@ public final class PermissionHelper {
@RequiresApi(api = Build.VERSION_CODES.M)
public static boolean checkSystemAlertWindowPermission(final Context context) {
if (!Settings.canDrawOverlays(context)) {
- final Intent i = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
- Uri.parse("package:" + context.getPackageName()));
- i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- try {
- context.startActivity(i);
- } catch (final ActivityNotFoundException ignored) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
+ final Intent i = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
+ Uri.parse("package:" + context.getPackageName()));
+ i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ try {
+ context.startActivity(i);
+ } catch (final ActivityNotFoundException ignored) {
+ }
+ return false;
+ // from Android R the ACTION_MANAGE_OVERLAY_PERMISSION will only point to the menu,
+ // so let’s add a dialog that points the user to the right setting.
+ } else {
+ final String appName = context.getApplicationInfo()
+ .loadLabel(context.getPackageManager()).toString();
+ final String title = context.getString(R.string.permission_display_over_apps);
+ final String permissionName =
+ context.getString(R.string.permission_display_over_apps_permission_name);
+ final String appNameItalic = "" + appName + "";
+ final String permissionNameItalic = "" + permissionName + "";
+ final String message =
+ context.getString(R.string.permission_display_over_apps_message,
+ appNameItalic,
+ permissionNameItalic
+ );
+ new AlertDialog.Builder(context)
+ .setTitle(title)
+ .setMessage(Html.fromHtml(message, Html.FROM_HTML_MODE_COMPACT))
+ .setPositiveButton("OK", (dialog, which) -> {
+ // we don’t need the package name here, since it won’t do anything on >R
+ final Intent intent =
+ new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
+ try {
+ context.startActivity(intent);
+ } catch (final ActivityNotFoundException ignored) {
+ }
+ })
+ .setCancelable(true)
+ .show();
+ return false;
}
- return false;
+
} else {
return true;
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6b7082ef3..922b7bd3f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -257,6 +257,8 @@
Restore defaults
Do you want to restore defaults?
Give permission to display over other apps
+ In order to use the Popup Player, please select %1$s in the following Android settings menu and enable %2$s.
+ “Allow display over other apps”
NewPipe encountered an error, tap to report
An error occurred, see the notification