Commit c2d73c74 by Maurits van Beusekom Committed by GitHub

Merge pull request #330 from ened/permissions-check-in-bg

Relands bug fix for permission check in background
parents 2457c78d 46904bfc
# next
* Fixes Typo
* Issue #233 - on 5.0: Solved a bug that prevented Android applications running in the background to check the permission status.
# 5.0.1 # 5.0.1
* Update `permission_handler_platform_interface 2.0.1` * Update `permission_handler_platform_interface 2.0.1`
......
...@@ -63,7 +63,7 @@ final class PermissionConstants { ...@@ -63,7 +63,7 @@ final class PermissionConstants {
static final int PERMISSION_STATUS_GRANTED = 1; static final int PERMISSION_STATUS_GRANTED = 1;
static final int PERMISSION_STATUS_RESTRICTED = 2; static final int PERMISSION_STATUS_RESTRICTED = 2;
static final int PERMISSION_STATUS_NOT_DETERMINED = 3; static final int PERMISSION_STATUS_NOT_DETERMINED = 3;
static final int PERMISSION_STATUS_NEWER_ASK_AGAIN = 4; static final int PERMISSION_STATUS_NEVER_ASK_AGAIN = 4;
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@IntDef({ @IntDef({
...@@ -71,7 +71,7 @@ final class PermissionConstants { ...@@ -71,7 +71,7 @@ final class PermissionConstants {
PERMISSION_STATUS_GRANTED, PERMISSION_STATUS_GRANTED,
PERMISSION_STATUS_RESTRICTED, PERMISSION_STATUS_RESTRICTED,
PERMISSION_STATUS_NOT_DETERMINED, PERMISSION_STATUS_NOT_DETERMINED,
PERMISSION_STATUS_NEWER_ASK_AGAIN, PERMISSION_STATUS_NEVER_ASK_AGAIN,
}) })
@interface PermissionStatus { @interface PermissionStatus {
} }
......
...@@ -10,6 +10,7 @@ import android.os.PowerManager; ...@@ -10,6 +10,7 @@ import android.os.PowerManager;
import android.provider.Settings; import android.provider.Settings;
import android.util.Log; import android.util.Log;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityCompat;
import androidx.core.app.NotificationManagerCompat; import androidx.core.app.NotificationManagerCompat;
...@@ -57,14 +58,6 @@ final class PermissionManager { ...@@ -57,14 +58,6 @@ final class PermissionManager {
CheckPermissionsSuccessCallback successCallback, CheckPermissionsSuccessCallback successCallback,
ErrorCallback errorCallback) { ErrorCallback errorCallback) {
if(activity == null) {
Log.d(PermissionConstants.LOG_TAG, "Activity cannot be null.");
errorCallback.onError(
"PermissionHandler.PermissionManager",
"Android activity is required to check for permissions and cannot be null.");
return;
}
successCallback.onSuccess(determinePermissionStatus( successCallback.onSuccess(determinePermissionStatus(
permission, permission,
context, context,
...@@ -78,7 +71,7 @@ final class PermissionManager { ...@@ -78,7 +71,7 @@ final class PermissionManager {
PermissionRegistry permissionRegistry, PermissionRegistry permissionRegistry,
RequestPermissionsSuccessCallback successCallback, RequestPermissionsSuccessCallback successCallback,
ErrorCallback errorCallback) { ErrorCallback errorCallback) {
if(ongoing) { if (ongoing) {
errorCallback.onError( errorCallback.onError(
"PermissionHandler.PermissionManager", "PermissionHandler.PermissionManager",
"A request for permissions is already running, please wait for it to finish before doing another request (note that you can request multiple permissions at the same time)."); "A request for permissions is already running, please wait for it to finish before doing another request (note that you can request multiple permissions at the same time).");
...@@ -162,7 +155,7 @@ final class PermissionManager { ...@@ -162,7 +155,7 @@ final class PermissionManager {
private int determinePermissionStatus( private int determinePermissionStatus(
@PermissionConstants.PermissionGroup int permission, @PermissionConstants.PermissionGroup int permission,
Context context, Context context,
Activity activity) { @Nullable Activity activity) {
if (permission == PermissionConstants.PERMISSION_GROUP_NOTIFICATION) { if (permission == PermissionConstants.PERMISSION_GROUP_NOTIFICATION) {
return checkNotificationPermissionStatus(context); return checkNotificationPermissionStatus(context);
...@@ -203,12 +196,11 @@ final class PermissionManager { ...@@ -203,12 +196,11 @@ final class PermissionManager {
} }
final int permissionStatus = ContextCompat.checkSelfPermission(context, name); final int permissionStatus = ContextCompat.checkSelfPermission(context, name);
if (permissionStatus == PackageManager.PERMISSION_DENIED) { if (permissionStatus == PackageManager.PERMISSION_DENIED) {
if (!PermissionUtils.getRequestedPermissionBefore(context, name)) if (!PermissionUtils.getRequestedPermissionBefore(context, name)) {
{
return PermissionConstants.PERMISSION_STATUS_NOT_DETERMINED; return PermissionConstants.PERMISSION_STATUS_NOT_DETERMINED;
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
PermissionUtils.isNeverAskAgainSelected(activity, name)) { PermissionUtils.isNeverAskAgainSelected(activity, name)) {
return PermissionConstants.PERMISSION_STATUS_NEWER_ASK_AGAIN; return PermissionConstants.PERMISSION_STATUS_NEVER_ASK_AGAIN;
} else { } else {
return PermissionConstants.PERMISSION_STATUS_DENIED; return PermissionConstants.PERMISSION_STATUS_DENIED;
} }
......
...@@ -11,7 +11,6 @@ import android.util.Log; ...@@ -11,7 +11,6 @@ import android.util.Log;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
...@@ -241,7 +240,7 @@ public class PermissionUtils { ...@@ -241,7 +240,7 @@ public class PermissionUtils {
static int toPermissionStatus(final Activity activity, final String permissionName, int grantResult) { static int toPermissionStatus(final Activity activity, final String permissionName, int grantResult) {
if (grantResult == PackageManager.PERMISSION_DENIED) { if (grantResult == PackageManager.PERMISSION_DENIED) {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && PermissionUtils.isNeverAskAgainSelected(activity, permissionName) return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && PermissionUtils.isNeverAskAgainSelected(activity, permissionName)
? PermissionConstants.PERMISSION_STATUS_NEWER_ASK_AGAIN ? PermissionConstants.PERMISSION_STATUS_NEVER_ASK_AGAIN
: PermissionConstants.PERMISSION_STATUS_DENIED; : PermissionConstants.PERMISSION_STATUS_DENIED;
} }
......
...@@ -23,6 +23,10 @@ Future<bool> openAppSettings() => _handler.openAppSettings(); ...@@ -23,6 +23,10 @@ Future<bool> openAppSettings() => _handler.openAppSettings();
/// Actions that can be executed on a permission. /// Actions that can be executed on a permission.
extension PermissionActions on Permission { extension PermissionActions on Permission {
/// The current status of this permission. /// The current status of this permission.
///
/// The Android-only [PermissionStatus.permanentlyDenied] status will only be
/// calculated if the active context is an Activity. If it isn't,
/// [PermissionStatus.denied] will be returned.
Future<PermissionStatus> get status => _handler.checkPermissionStatus(this); Future<PermissionStatus> get status => _handler.checkPermissionStatus(this);
/// If you should show a rationale for requesting permission. /// If you should show a rationale for requesting permission.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment