Skip to content

Commit 992674f

Browse files
authored
Report ignoreBatteryOptimizations permission correctly (#1200)
* Report ignoreBatteryOptimizations permission correctly * Report restricted status pre-marshmallow devices
1 parent 7a0244d commit 992674f

File tree

3 files changed

+33
-26
lines changed

3 files changed

+33
-26
lines changed

permission_handler_android/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 12.0.1
2+
3+
* Fixes a bug where the `ignoreBatteryOptimizations` permission didn't report the correct status when the permission is requested and granted.
4+
15
## 12.0.0
26

37
* **BREAKING CHANGES:**

permission_handler_android/android/src/main/java/com/baseflow/permissionhandler/PermissionManager.java

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,12 @@
3535

3636
final class PermissionManager implements PluginRegistry.ActivityResultListener, PluginRegistry.RequestPermissionsResultListener {
3737

38+
@NonNull
39+
private final Context context;
3840
@Nullable
3941
private RequestPermissionsSuccessCallback successCallback;
40-
4142
@Nullable
4243
private Activity activity;
43-
44-
@NonNull
45-
private final Context context;
46-
4744
/**
4845
* The number of pending permission requests.
4946
* <p>
@@ -77,14 +74,20 @@ public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
7774
return false;
7875
}
7976

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;
8578

8679
if (requestCode == PermissionConstants.PERMISSION_CODE_IGNORE_BATTERY_OPTIMIZATIONS) {
8780
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+
}
8891
} else if (requestCode == PermissionConstants.PERMISSION_CODE_MANAGE_EXTERNAL_STORAGE) {
8992
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
9093
status = Environment.isExternalStorageManager()
@@ -264,21 +267,6 @@ public boolean onRequestPermissionsResult(
264267
return true;
265268
}
266269

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-
282270
/**
283271
* Determines the permission status of the provided permission.
284272
* <p>
@@ -666,4 +654,19 @@ private boolean isValidManifestForCalendarFullAccess() {
666654
}
667655
return true;
668656
}
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+
}
669672
}

permission_handler_android/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: permission_handler_android
22
description: Permission plugin for Flutter. This plugin provides the Android API to request and check permissions.
33
homepage: https://github.com/baseflow/flutter-permission-handler
4-
version: 12.0.0
4+
version: 12.0.1
55

66
environment:
77
sdk: ">=2.15.0 <4.0.0"

0 commit comments

Comments
 (0)