|
35 | 35 |
|
36 | 36 | final class PermissionManager implements PluginRegistry.ActivityResultListener, PluginRegistry.RequestPermissionsResultListener {
|
37 | 37 |
|
| 38 | + @NonNull |
| 39 | + private final Context context; |
38 | 40 | @Nullable
|
39 | 41 | private RequestPermissionsSuccessCallback successCallback;
|
40 |
| - |
41 | 42 | @Nullable
|
42 | 43 | private Activity activity;
|
43 |
| - |
44 |
| - @NonNull |
45 |
| - private final Context context; |
46 |
| - |
47 | 44 | /**
|
48 | 45 | * The number of pending permission requests.
|
49 | 46 | * <p>
|
@@ -77,14 +74,20 @@ public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
|
77 | 74 | return false;
|
78 | 75 | }
|
79 | 76 |
|
80 |
| - int status = resultCode == Activity.RESULT_OK |
81 |
| - ? PermissionConstants.PERMISSION_STATUS_GRANTED |
82 |
| - : PermissionConstants.PERMISSION_STATUS_DENIED; |
83 |
| - |
84 |
| - int permission; |
| 77 | + int status, permission; |
85 | 78 |
|
86 | 79 | if (requestCode == PermissionConstants.PERMISSION_CODE_IGNORE_BATTERY_OPTIMIZATIONS) {
|
87 | 80 | permission = PermissionConstants.PERMISSION_GROUP_IGNORE_BATTERY_OPTIMIZATIONS;
|
| 81 | + |
| 82 | + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { |
| 83 | + String packageName = context.getPackageName(); |
| 84 | + PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); |
| 85 | + status = (pm != null && pm.isIgnoringBatteryOptimizations(packageName)) |
| 86 | + ? PermissionConstants.PERMISSION_STATUS_GRANTED |
| 87 | + : PermissionConstants.PERMISSION_STATUS_DENIED; |
| 88 | + } else { |
| 89 | + status = PermissionConstants.PERMISSION_STATUS_RESTRICTED; |
| 90 | + } |
88 | 91 | } else if (requestCode == PermissionConstants.PERMISSION_CODE_MANAGE_EXTERNAL_STORAGE) {
|
89 | 92 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
90 | 93 | status = Environment.isExternalStorageManager()
|
@@ -264,21 +267,6 @@ public boolean onRequestPermissionsResult(
|
264 | 267 | return true;
|
265 | 268 | }
|
266 | 269 |
|
267 |
| - @FunctionalInterface |
268 |
| - interface RequestPermissionsSuccessCallback { |
269 |
| - void onSuccess(Map<Integer, Integer> results); |
270 |
| - } |
271 |
| - |
272 |
| - @FunctionalInterface |
273 |
| - interface CheckPermissionsSuccessCallback { |
274 |
| - void onSuccess(@PermissionConstants.PermissionStatus int permissionStatus); |
275 |
| - } |
276 |
| - |
277 |
| - @FunctionalInterface |
278 |
| - interface ShouldShowRequestPermissionRationaleSuccessCallback { |
279 |
| - void onSuccess(boolean shouldShowRequestPermissionRationale); |
280 |
| - } |
281 |
| - |
282 | 270 | /**
|
283 | 271 | * Determines the permission status of the provided permission.
|
284 | 272 | * <p>
|
@@ -666,4 +654,19 @@ private boolean isValidManifestForCalendarFullAccess() {
|
666 | 654 | }
|
667 | 655 | return true;
|
668 | 656 | }
|
| 657 | + |
| 658 | + @FunctionalInterface |
| 659 | + interface RequestPermissionsSuccessCallback { |
| 660 | + void onSuccess(Map<Integer, Integer> results); |
| 661 | + } |
| 662 | + |
| 663 | + @FunctionalInterface |
| 664 | + interface CheckPermissionsSuccessCallback { |
| 665 | + void onSuccess(@PermissionConstants.PermissionStatus int permissionStatus); |
| 666 | + } |
| 667 | + |
| 668 | + @FunctionalInterface |
| 669 | + interface ShouldShowRequestPermissionRationaleSuccessCallback { |
| 670 | + void onSuccess(boolean shouldShowRequestPermissionRationale); |
| 671 | + } |
669 | 672 | }
|
0 commit comments