|
9 | 9 | import android.net.Uri; |
10 | 10 | import android.os.Build; |
11 | 11 | import android.provider.Settings; |
| 12 | +import android.text.Html; |
12 | 13 | import android.widget.Toast; |
13 | 14 |
|
14 | 15 | import androidx.annotation.RequiresApi; |
| 16 | +import androidx.appcompat.app.AlertDialog; |
15 | 17 | import androidx.core.app.ActivityCompat; |
16 | 18 | import androidx.core.content.ContextCompat; |
17 | 19 |
|
@@ -113,14 +115,47 @@ public static boolean checkPostNotificationsPermission(final Activity activity, |
113 | 115 | @RequiresApi(api = Build.VERSION_CODES.M) |
114 | 116 | public static boolean checkSystemAlertWindowPermission(final Context context) { |
115 | 117 | if (!Settings.canDrawOverlays(context)) { |
116 | | - final Intent i = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, |
117 | | - Uri.parse("package:" + context.getPackageName())); |
118 | | - i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
119 | | - try { |
120 | | - context.startActivity(i); |
121 | | - } catch (final ActivityNotFoundException ignored) { |
| 118 | + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) { |
| 119 | + final Intent i = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, |
| 120 | + Uri.parse("package:" + context.getPackageName())); |
| 121 | + i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
| 122 | + try { |
| 123 | + context.startActivity(i); |
| 124 | + } catch (final ActivityNotFoundException ignored) { |
| 125 | + } |
| 126 | + return false; |
| 127 | + // from Android R the ACTION_MANAGE_OVERLAY_PERMISSION will only point to the menu, |
| 128 | + // so let’s add a dialog that points the user to the right setting. |
| 129 | + } else { |
| 130 | + final String appName = context.getApplicationInfo() |
| 131 | + .loadLabel(context.getPackageManager()).toString(); |
| 132 | + final String title = context.getString(R.string.permission_display_over_apps); |
| 133 | + final String permissionName = |
| 134 | + context.getString(R.string.permission_display_over_apps_permission_name); |
| 135 | + final String appNameItalic = "<i>" + appName + "</i>"; |
| 136 | + final String permissionNameItalic = "<i>" + permissionName + "</i>"; |
| 137 | + final String message = |
| 138 | + context.getString(R.string.permission_display_over_apps_message, |
| 139 | + appNameItalic, |
| 140 | + permissionNameItalic |
| 141 | + ); |
| 142 | + new AlertDialog.Builder(context) |
| 143 | + .setTitle(title) |
| 144 | + .setMessage(Html.fromHtml(message, Html.FROM_HTML_MODE_COMPACT)) |
| 145 | + .setPositiveButton("OK", (dialog, which) -> { |
| 146 | + // we don’t need the package name here, since it won’t do anything on >R |
| 147 | + final Intent intent = |
| 148 | + new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); |
| 149 | + try { |
| 150 | + context.startActivity(intent); |
| 151 | + } catch (final ActivityNotFoundException ignored) { |
| 152 | + } |
| 153 | + }) |
| 154 | + .setCancelable(true) |
| 155 | + .show(); |
| 156 | + return false; |
122 | 157 | } |
123 | | - return false; |
| 158 | + |
124 | 159 | } else { |
125 | 160 | return true; |
126 | 161 | } |
|
0 commit comments