Commit 68ed0eb2 by Maurits van Beusekom

Merge branch 'develop'

parents d34b28c3 3e239ab9
...@@ -137,12 +137,12 @@ You can remove permissions you don't use: ...@@ -137,12 +137,12 @@ You can remove permissions you don't use:
## How to use ## How to use
There are a number of [`Permission`](https://pub.dev/documentation/permission_handler_platform_interface/latest/permission_handler_platform_interface/Permission-class.html#constants)s. There are a number of [`Permission`](https://pub.dev/documentation/permission_handler_platform_interface/latest/permission_handler_platform_interface/Permission-class.html#constants)s.
You can get a `Permission`'s `status`, which is either `undetermined`, `granted`, `denied`, `restricted` or `permanentlyDenied`. You can get a `Permission`'s `status`, which is either `granted`, `denied`, `restricted` or `permanentlyDenied`.
```dart ```dart
var status = await Permission.camera.status; var status = await Permission.camera.status;
if (status.isUndetermined) { if (status.denied) {
// We didn't ask for permission yet. // We didn't ask for permission yet or the permission has been denied before but not permanently.
} }
// You can can also directly ask the permission about its status. // You can can also directly ask the permission about its status.
......
## 6.0.0 ## 6.0.0
This release includes the following **breaking changes**:
* Migrated to null safety * Migrated to null safety
* Removed PermissionStatus.undetermined, PermissionStatus.denied will be used instead.
## 5.1.0+2 ## 5.1.0+2
......
...@@ -63,16 +63,14 @@ final class PermissionConstants { ...@@ -63,16 +63,14 @@ final class PermissionConstants {
static final int PERMISSION_STATUS_DENIED = 0; static final int PERMISSION_STATUS_DENIED = 0;
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_LIMITED = 3;
static final int PERMISSION_STATUS_LIMITED = 4; static final int PERMISSION_STATUS_NEVER_ASK_AGAIN = 4;
static final int PERMISSION_STATUS_NEVER_ASK_AGAIN = 5;
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@IntDef({ @IntDef({
PERMISSION_STATUS_DENIED, PERMISSION_STATUS_DENIED,
PERMISSION_STATUS_GRANTED, PERMISSION_STATUS_GRANTED,
PERMISSION_STATUS_RESTRICTED, PERMISSION_STATUS_RESTRICTED,
PERMISSION_STATUS_NOT_DETERMINED,
PERMISSION_STATUS_LIMITED, PERMISSION_STATUS_LIMITED,
PERMISSION_STATUS_NEVER_ASK_AGAIN, PERMISSION_STATUS_NEVER_ASK_AGAIN,
}) })
......
...@@ -104,7 +104,7 @@ final class PermissionManager { ...@@ -104,7 +104,7 @@ final class PermissionManager {
// if we can't add as unknown and continue // if we can't add as unknown and continue
if (names == null || names.isEmpty()) { if (names == null || names.isEmpty()) {
if (!requestResults.containsKey(permission)) { if (!requestResults.containsKey(permission)) {
requestResults.put(permission, PermissionConstants.PERMISSION_STATUS_NOT_DETERMINED); requestResults.put(permission, PermissionConstants.PERMISSION_STATUS_DENIED);
} }
continue; continue;
...@@ -112,7 +112,7 @@ final class PermissionManager { ...@@ -112,7 +112,7 @@ final class PermissionManager {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && permission == PermissionConstants.PERMISSION_GROUP_IGNORE_BATTERY_OPTIMIZATIONS) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && permission == PermissionConstants.PERMISSION_GROUP_IGNORE_BATTERY_OPTIMIZATIONS) {
activityRegistry.addListener( activityRegistry.addListener(
new ActivityResultListener(successCallback) new ActivityResultListener(successCallback)
); );
String packageName = activity.getPackageName(); String packageName = activity.getPackageName();
...@@ -172,7 +172,7 @@ final class PermissionManager { ...@@ -172,7 +172,7 @@ final class PermissionManager {
//if no permissions were found then there is an issue and permission is not set in Android manifest //if no permissions were found then there is an issue and permission is not set in Android manifest
if (names.size() == 0) { if (names.size() == 0) {
Log.d(PermissionConstants.LOG_TAG, "No permissions found in manifest for: " + permission); Log.d(PermissionConstants.LOG_TAG, "No permissions found in manifest for: " + permission);
return PermissionConstants.PERMISSION_STATUS_NOT_DETERMINED; return PermissionConstants.PERMISSION_STATUS_DENIED;
} }
final boolean targetsMOrHigher = context.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.M; final boolean targetsMOrHigher = context.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.M;
...@@ -195,21 +195,11 @@ final class PermissionManager { ...@@ -195,21 +195,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_GRANTED) {
if (!PermissionUtils.getRequestedPermissionBefore(context, name)) {
return PermissionConstants.PERMISSION_STATUS_NOT_DETERMINED;
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
PermissionUtils.isNeverAskAgainSelected(activity, name)) {
return PermissionConstants.PERMISSION_STATUS_NEVER_ASK_AGAIN;
} else {
return PermissionConstants.PERMISSION_STATUS_DENIED;
}
} else if (permissionStatus != PackageManager.PERMISSION_GRANTED) {
return PermissionConstants.PERMISSION_STATUS_DENIED; return PermissionConstants.PERMISSION_STATUS_DENIED;
} }
} }
} }
return PermissionConstants.PERMISSION_STATUS_GRANTED; return PermissionConstants.PERMISSION_STATUS_GRANTED;
} }
...@@ -256,7 +246,7 @@ final class PermissionManager { ...@@ -256,7 +246,7 @@ final class PermissionManager {
@VisibleForTesting @VisibleForTesting
static final class ActivityResultListener static final class ActivityResultListener
implements PluginRegistry.ActivityResultListener { implements PluginRegistry.ActivityResultListener {
// There's no way to unregister permission listeners in the v1 embedding, so we'll be called // There's no way to unregister permission listeners in the v1 embedding, so we'll be called
// duplicate times in cases where the user denies and then grants a permission. Keep track of if // duplicate times in cases where the user denies and then grants a permission. Keep track of if
...@@ -273,7 +263,7 @@ final class PermissionManager { ...@@ -273,7 +263,7 @@ final class PermissionManager {
@Override @Override
public boolean onActivityResult(int requestCode, int resultCode, Intent data) { public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
if(alreadyCalled || requestCode != PermissionConstants.PERMISSION_CODE_IGNORE_BATTERY_OPTIMIZATIONS) { if (alreadyCalled || requestCode != PermissionConstants.PERMISSION_CODE_IGNORE_BATTERY_OPTIMIZATIONS) {
return false; return false;
} }
...@@ -291,7 +281,7 @@ final class PermissionManager { ...@@ -291,7 +281,7 @@ final class PermissionManager {
@VisibleForTesting @VisibleForTesting
static final class RequestPermissionsListener static final class RequestPermissionsListener
implements PluginRegistry.RequestPermissionsResultListener { implements PluginRegistry.RequestPermissionsResultListener {
// There's no way to unregister permission listeners in the v1 embedding, so we'll be called // There's no way to unregister permission listeners in the v1 embedding, so we'll be called
// duplicate times in cases where the user denies and then grants a permission. Keep track of if // duplicate times in cases where the user denies and then grants a permission. Keep track of if
...@@ -314,8 +304,7 @@ final class PermissionManager { ...@@ -314,8 +304,7 @@ final class PermissionManager {
} }
@Override @Override
public boolean onRequestPermissionsResult(int id, String[] permissions, int[] grantResults) public boolean onRequestPermissionsResult(int id, String[] permissions, int[] grantResults) {
{
if (alreadyCalled || id != PermissionConstants.PERMISSION_CODE) { if (alreadyCalled || id != PermissionConstants.PERMISSION_CODE) {
return false; return false;
} }
......
...@@ -3,7 +3,6 @@ package com.baseflow.permissionhandler; ...@@ -3,7 +3,6 @@ package com.baseflow.permissionhandler;
import android.Manifest; import android.Manifest;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Build; import android.os.Build;
...@@ -262,10 +261,6 @@ public class PermissionUtils { ...@@ -262,10 +261,6 @@ public class PermissionUtils {
if (names == null || names.isEmpty()) { if (names == null || names.isEmpty()) {
return; return;
} }
for (String name : names) {
PermissionUtils.setRequestedPermission(activity, name);
}
} }
@RequiresApi(api = Build.VERSION_CODES.M) @RequiresApi(api = Build.VERSION_CODES.M)
...@@ -274,25 +269,7 @@ public class PermissionUtils { ...@@ -274,25 +269,7 @@ public class PermissionUtils {
return false; return false;
} }
return PermissionUtils.neverAskAgainSelected(activity, name); final boolean shouldShowRequestPermissionRationale = ActivityCompat.shouldShowRequestPermissionRationale(activity, name);
return !shouldShowRequestPermissionRationale;
} }
@RequiresApi(api = Build.VERSION_CODES.M)
static boolean neverAskAgainSelected(final Activity activity, final String permission) {
final boolean hasRequestedPermissionBefore = getRequestedPermissionBefore(activity, permission);
final boolean shouldShowRequestPermissionRationale = ActivityCompat.shouldShowRequestPermissionRationale(activity, permission);
return hasRequestedPermissionBefore && !shouldShowRequestPermissionRationale;
}
static void setRequestedPermission(final Context context, final String permission) {
SharedPreferences genPrefs = context.getSharedPreferences("GENERIC_PREFERENCES", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = genPrefs.edit();
editor.putBoolean(permission, true);
editor.apply();
}
static boolean getRequestedPermissionBefore(final Context context, final String permission) {
SharedPreferences genPrefs = context.getSharedPreferences("GENERIC_PREFERENCES", Context.MODE_PRIVATE);
return genPrefs.getBoolean(permission, false);
}
} }
...@@ -17,7 +17,7 @@ class _PermissionState extends State<PermissionWidget> { ...@@ -17,7 +17,7 @@ class _PermissionState extends State<PermissionWidget> {
_PermissionState(this._permission); _PermissionState(this._permission);
final Permission _permission; final Permission _permission;
PermissionStatus _permissionStatus = PermissionStatus.undetermined; PermissionStatus _permissionStatus = PermissionStatus.denied;
@override @override
void initState() { void initState() {
......
...@@ -113,10 +113,10 @@ typedef NS_ENUM(int, PermissionGroup) { ...@@ -113,10 +113,10 @@ typedef NS_ENUM(int, PermissionGroup) {
typedef NS_ENUM(int, PermissionStatus) { typedef NS_ENUM(int, PermissionStatus) {
PermissionStatusDenied = 0, PermissionStatusDenied = 0,
PermissionStatusGranted, PermissionStatusGranted = 1,
PermissionStatusRestricted, PermissionStatusRestricted = 2,
PermissionStatusNotDetermined, PermissionStatusLimited = 3,
PermissionStatusLimited, PermissionStatusPermanentlyDenied = 4
}; };
typedef NS_ENUM(int, ServiceStatus) { typedef NS_ENUM(int, ServiceStatus) {
......
...@@ -75,7 +75,7 @@ ...@@ -75,7 +75,7 @@
BOOL success = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; BOOL success = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
result([[NSNumber alloc] initWithBool:success]); result([[NSNumber alloc] initWithBool:success]);
} else { } else {
result(@false); result(@false);
} }
} }
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
return [AudioVideoPermissionStrategy permissionStatus:AVMediaTypeAudio]; return [AudioVideoPermissionStrategy permissionStatus:AVMediaTypeAudio];
#endif #endif
} }
return PermissionStatusNotDetermined; return PermissionStatusDenied;
} }
- (ServiceStatus)checkServiceStatus:(PermissionGroup)permission { - (ServiceStatus)checkServiceStatus:(PermissionGroup)permission {
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
- (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler { - (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler {
PermissionStatus status = [self checkPermissionStatus:permission]; PermissionStatus status = [self checkPermissionStatus:permission];
if (status != PermissionStatusNotDetermined) { if (status != PermissionStatusDenied) {
completionHandler(status); completionHandler(status);
return; return;
} }
...@@ -40,18 +40,18 @@ ...@@ -40,18 +40,18 @@
#if PERMISSION_CAMERA #if PERMISSION_CAMERA
mediaType = AVMediaTypeVideo; mediaType = AVMediaTypeVideo;
#else #else
completionHandler(PermissionStatusNotDetermined); completionHandler(PermissionStatusDenied);
return; return;
#endif #endif
} else if (permission == PermissionGroupMicrophone) { } else if (permission == PermissionGroupMicrophone) {
#if PERMISSION_MICROPHONE #if PERMISSION_MICROPHONE
mediaType = AVMediaTypeAudio; mediaType = AVMediaTypeAudio;
#else #else
completionHandler(PermissionStatusNotDetermined); completionHandler(PermissionStatusDenied);
return; return;
#endif #endif
} else { } else {
completionHandler(PermissionStatusNotDetermined); completionHandler(PermissionStatusDenied);
return; return;
} }
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
if (granted) { if (granted) {
completionHandler(PermissionStatusGranted); completionHandler(PermissionStatusGranted);
} else { } else {
completionHandler(PermissionStatusDenied); completionHandler(PermissionStatusPermanentlyDenied);
} }
}]; }];
} }
...@@ -69,16 +69,16 @@ ...@@ -69,16 +69,16 @@
switch (status) { switch (status) {
case AVAuthorizationStatusNotDetermined: case AVAuthorizationStatusNotDetermined:
return PermissionStatusNotDetermined; return PermissionStatusDenied;
case AVAuthorizationStatusRestricted: case AVAuthorizationStatusRestricted:
return PermissionStatusRestricted; return PermissionStatusRestricted;
case AVAuthorizationStatusDenied: case AVAuthorizationStatusDenied:
return PermissionStatusDenied; return PermissionStatusPermanentlyDenied;
case AVAuthorizationStatusAuthorized: case AVAuthorizationStatusAuthorized:
return PermissionStatusGranted; return PermissionStatusGranted;
} }
return PermissionStatusNotDetermined; return PermissionStatusDenied;
} }
@end @end
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
- (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler { - (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler {
PermissionStatus status = [self checkPermissionStatus:permission]; PermissionStatus status = [self checkPermissionStatus:permission];
if (status != PermissionStatusNotDetermined) { if (status != PermissionStatusDenied) {
completionHandler(status); completionHandler(status);
} }
...@@ -37,11 +37,11 @@ ...@@ -37,11 +37,11 @@
switch (status) { switch (status) {
case CNAuthorizationStatusNotDetermined: case CNAuthorizationStatusNotDetermined:
return PermissionStatusNotDetermined; return PermissionStatusDenied;
case CNAuthorizationStatusRestricted: case CNAuthorizationStatusRestricted:
return PermissionStatusRestricted; return PermissionStatusRestricted;
case CNAuthorizationStatusDenied: case CNAuthorizationStatusDenied:
return PermissionStatusDenied; return PermissionStatusPermanentlyDenied;
case CNAuthorizationStatusAuthorized: case CNAuthorizationStatusAuthorized:
return PermissionStatusGranted; return PermissionStatusGranted;
} }
...@@ -51,17 +51,17 @@ ...@@ -51,17 +51,17 @@
switch (status) { switch (status) {
case kABAuthorizationStatusNotDetermined: case kABAuthorizationStatusNotDetermined:
return PermissionStatusNotDetermined; return PermissionStatusDenied;
case kABAuthorizationStatusRestricted: case kABAuthorizationStatusRestricted:
return PermissionStatusRestricted; return PermissionStatusRestricted;
case kABAuthorizationStatusDenied: case kABAuthorizationStatusDenied:
return PermissionStatusDenied; return PermissionStatusPermanentlyDenied;
case kABAuthorizationStatusAuthorized: case kABAuthorizationStatusAuthorized:
return PermissionStatusGranted; return PermissionStatusGranted;
} }
} }
return PermissionStatusNotDetermined; return PermissionStatusDenied;
} }
+ (void)requestPermissionsFromContactStore:(PermissionStatusHandler)completionHandler API_AVAILABLE(ios(9)) { + (void)requestPermissionsFromContactStore:(PermissionStatusHandler)completionHandler API_AVAILABLE(ios(9)) {
...@@ -71,18 +71,9 @@ ...@@ -71,18 +71,9 @@
if (granted) { if (granted) {
completionHandler(PermissionStatusGranted); completionHandler(PermissionStatusGranted);
} else { } else {
completionHandler(PermissionStatusDenied); completionHandler(PermissionStatusPermanentlyDenied);
} }
}]; }];
ABAddressBookRequestAccessWithCompletion(ABAddressBookCreate(), ^(bool granted, CFErrorRef error) {
if (granted) {
completionHandler(PermissionStatusGranted);
} else {
completionHandler(PermissionStatusDenied);
}
});
} }
+ (void)requestPermissionsFromAddressBook:(PermissionStatusHandler)completionHandler { + (void)requestPermissionsFromAddressBook:(PermissionStatusHandler)completionHandler {
...@@ -90,7 +81,7 @@ ...@@ -90,7 +81,7 @@
if (granted) { if (granted) {
completionHandler(PermissionStatusGranted); completionHandler(PermissionStatusGranted);
} else { } else {
completionHandler(PermissionStatusDenied); completionHandler(PermissionStatusPermanentlyDenied);
} }
}); });
} }
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#endif #endif
} }
return PermissionStatusNotDetermined; return PermissionStatusDenied;
} }
- (ServiceStatus)checkServiceStatus:(PermissionGroup)permission { - (ServiceStatus)checkServiceStatus:(PermissionGroup)permission {
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
- (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler { - (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler {
PermissionStatus permissionStatus = [self checkPermissionStatus:permission]; PermissionStatus permissionStatus = [self checkPermissionStatus:permission];
if (permissionStatus != PermissionStatusNotDetermined) { if (permissionStatus != PermissionStatusDenied) {
completionHandler(permissionStatus); completionHandler(permissionStatus);
return; return;
} }
...@@ -41,18 +41,18 @@ ...@@ -41,18 +41,18 @@
#if PERMISSION_EVENTS #if PERMISSION_EVENTS
entityType = EKEntityTypeEvent; entityType = EKEntityTypeEvent;
#else #else
completionHandler(PermissionStatusNotDetermined); completionHandler(PermissionStatusDenied);
return; return;
#endif #endif
} else if (permission == PermissionGroupReminders) { } else if (permission == PermissionGroupReminders) {
#if PERMISSION_REMINDERS #if PERMISSION_REMINDERS
entityType = EKEntityTypeReminder; entityType = EKEntityTypeReminder;
#else #else
completionHandler(PermissionStatusNotDetermined); completionHandler(PermissionStatusDenied);
return; return;
#endif #endif
} else { } else {
completionHandler(PermissionStatusNotDetermined); completionHandler(PermissionStatusPermanentlyDenied);
return; return;
} }
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
if (granted) { if (granted) {
completionHandler(PermissionStatusGranted); completionHandler(PermissionStatusGranted);
} else { } else {
completionHandler(PermissionStatusDenied); completionHandler(PermissionStatusPermanentlyDenied);
} }
}]; }];
} }
...@@ -71,16 +71,16 @@ ...@@ -71,16 +71,16 @@
switch (status) { switch (status) {
case EKAuthorizationStatusNotDetermined: case EKAuthorizationStatusNotDetermined:
return PermissionStatusNotDetermined; return PermissionStatusDenied;
case EKAuthorizationStatusRestricted: case EKAuthorizationStatusRestricted:
return PermissionStatusRestricted; return PermissionStatusRestricted;
case EKAuthorizationStatusDenied: case EKAuthorizationStatusDenied:
return PermissionStatusDenied; return PermissionStatusPermanentlyDenied;
case EKAuthorizationStatusAuthorized: case EKAuthorizationStatusAuthorized:
return PermissionStatusGranted; return PermissionStatusGranted;
} }
return PermissionStatusNotDetermined; return PermissionStatusDenied;
} }
@end @end
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
PermissionStatus status = [self checkPermissionStatus:permission]; PermissionStatus status = [self checkPermissionStatus:permission];
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedWhenInUse && permission == PermissionGroupLocationAlways) { if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedWhenInUse && permission == PermissionGroupLocationAlways) {
// don't do anything and continue requesting permissions // don't do anything and continue requesting permissions
} else if (status != PermissionStatusNotDetermined) { } else if (status != PermissionStatusDenied) {
completionHandler(status); completionHandler(status);
} }
...@@ -105,12 +105,12 @@ ...@@ -105,12 +105,12 @@
if (permission == PermissionGroupLocationAlways) { if (permission == PermissionGroupLocationAlways) {
switch (authorizationStatus) { switch (authorizationStatus) {
case kCLAuthorizationStatusNotDetermined: case kCLAuthorizationStatusNotDetermined:
return PermissionStatusNotDetermined; return PermissionStatusDenied;
case kCLAuthorizationStatusRestricted: case kCLAuthorizationStatusRestricted:
return PermissionStatusRestricted; return PermissionStatusRestricted;
case kCLAuthorizationStatusAuthorizedWhenInUse: case kCLAuthorizationStatusAuthorizedWhenInUse:
case kCLAuthorizationStatusDenied: case kCLAuthorizationStatusDenied:
return PermissionStatusDenied; return PermissionStatusPermanentlyDenied;
case kCLAuthorizationStatusAuthorizedAlways: case kCLAuthorizationStatusAuthorizedAlways:
return PermissionStatusGranted; return PermissionStatusGranted;
} }
...@@ -118,11 +118,11 @@ ...@@ -118,11 +118,11 @@
switch (authorizationStatus) { switch (authorizationStatus) {
case kCLAuthorizationStatusNotDetermined: case kCLAuthorizationStatusNotDetermined:
return PermissionStatusNotDetermined; return PermissionStatusDenied;
case kCLAuthorizationStatusRestricted: case kCLAuthorizationStatusRestricted:
return PermissionStatusRestricted; return PermissionStatusRestricted;
case kCLAuthorizationStatusDenied: case kCLAuthorizationStatusDenied:
return PermissionStatusDenied; return PermissionStatusPermanentlyDenied;
case kCLAuthorizationStatusAuthorizedWhenInUse: case kCLAuthorizationStatusAuthorizedWhenInUse:
case kCLAuthorizationStatusAuthorizedAlways: case kCLAuthorizationStatusAuthorizedAlways:
return PermissionStatusGranted; return PermissionStatusGranted;
...@@ -134,15 +134,15 @@ ...@@ -134,15 +134,15 @@
switch (authorizationStatus) { switch (authorizationStatus) {
case kCLAuthorizationStatusNotDetermined: case kCLAuthorizationStatusNotDetermined:
return PermissionStatusNotDetermined; return PermissionStatusDenied;
case kCLAuthorizationStatusRestricted: case kCLAuthorizationStatusRestricted:
return PermissionStatusRestricted; return PermissionStatusRestricted;
case kCLAuthorizationStatusDenied: case kCLAuthorizationStatusDenied:
return PermissionStatusDenied; return PermissionStatusPermanentlyDenied;
case kCLAuthorizationStatusAuthorized: case kCLAuthorizationStatusAuthorized:
return PermissionStatusGranted; return PermissionStatusGranted;
default: default:
return PermissionStatusNotDetermined; return PermissionStatusDenied;
} }
#pragma clang diagnostic pop #pragma clang diagnostic pop
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
- (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler { - (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler {
PermissionStatus status = [self checkPermissionStatus:permission]; PermissionStatus status = [self checkPermissionStatus:permission];
if (status != PermissionStatusNotDetermined) { if (status != PermissionStatusDenied) {
completionHandler(status); completionHandler(status);
return; return;
} }
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
completionHandler([MediaLibraryPermissionStrategy determinePermissionStatus:status]); completionHandler([MediaLibraryPermissionStrategy determinePermissionStatus:status]);
}]; }];
} else { } else {
completionHandler(PermissionStatusNotDetermined); completionHandler(PermissionStatusPermanentlyDenied);
return; return;
} }
} }
...@@ -41,22 +41,22 @@ ...@@ -41,22 +41,22 @@
return [MediaLibraryPermissionStrategy determinePermissionStatus:status]; return [MediaLibraryPermissionStrategy determinePermissionStatus:status];
} }
return PermissionStatusNotDetermined; return PermissionStatusDenied;
} }
+ (PermissionStatus)determinePermissionStatus:(MPMediaLibraryAuthorizationStatus)authorizationStatus API_AVAILABLE(ios(9.3)){ + (PermissionStatus)determinePermissionStatus:(MPMediaLibraryAuthorizationStatus)authorizationStatus API_AVAILABLE(ios(9.3)){
switch (authorizationStatus) { switch (authorizationStatus) {
case MPMediaLibraryAuthorizationStatusNotDetermined: case MPMediaLibraryAuthorizationStatusNotDetermined:
return PermissionStatusNotDetermined;
case MPMediaLibraryAuthorizationStatusDenied:
return PermissionStatusDenied; return PermissionStatusDenied;
case MPMediaLibraryAuthorizationStatusDenied:
return PermissionStatusPermanentlyDenied;
case MPMediaLibraryAuthorizationStatusRestricted: case MPMediaLibraryAuthorizationStatusRestricted:
return PermissionStatusRestricted; return PermissionStatusRestricted;
case MPMediaLibraryAuthorizationStatusAuthorized: case MPMediaLibraryAuthorizationStatusAuthorized:
return PermissionStatusGranted; return PermissionStatusGranted;
} }
return PermissionStatusNotDetermined; return PermissionStatusDenied;
} }
@end @end
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
- (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler { - (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler {
PermissionStatus status = [self checkPermissionStatus:permission]; PermissionStatus status = [self checkPermissionStatus:permission];
if (status != PermissionStatusNotDetermined) { if (status != PermissionStatusDenied) {
completionHandler(status); completionHandler(status);
return; return;
} }
...@@ -33,8 +33,8 @@ ...@@ -33,8 +33,8 @@
authorizationOptions += UNAuthorizationOptionAlert; authorizationOptions += UNAuthorizationOptionAlert;
authorizationOptions += UNAuthorizationOptionBadge; authorizationOptions += UNAuthorizationOptionBadge;
[center requestAuthorizationWithOptions:(authorizationOptions) completionHandler:^(BOOL granted, NSError * _Nullable error) { [center requestAuthorizationWithOptions:(authorizationOptions) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (!granted || error != nil) { if (error != nil || !granted) {
completionHandler(PermissionStatusDenied); completionHandler(PermissionStatusPermanentlyDenied);
return; return;
} }
...@@ -64,9 +64,9 @@ ...@@ -64,9 +64,9 @@
dispatch_semaphore_t sem = dispatch_semaphore_create(0); dispatch_semaphore_t sem = dispatch_semaphore_create(0);
[[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) { [[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
if (settings.authorizationStatus == UNAuthorizationStatusDenied) { if (settings.authorizationStatus == UNAuthorizationStatusDenied) {
permissionStatus = PermissionStatusDenied; permissionStatus = PermissionStatusPermanentlyDenied;
} else if (settings.authorizationStatus == UNAuthorizationStatusNotDetermined) { } else if (settings.authorizationStatus == UNAuthorizationStatusNotDetermined) {
permissionStatus = PermissionStatusNotDetermined; permissionStatus = PermissionStatusDenied;
} }
dispatch_semaphore_signal(sem); dispatch_semaphore_signal(sem);
}]; }];
...@@ -75,7 +75,7 @@ ...@@ -75,7 +75,7 @@
UIUserNotificationSettings * setting = [[UIApplication sharedApplication] currentUserNotificationSettings]; UIUserNotificationSettings * setting = [[UIApplication sharedApplication] currentUserNotificationSettings];
if (setting.types == UIUserNotificationTypeNone) permissionStatus = PermissionStatusDenied; if (setting.types == UIUserNotificationTypeNone) permissionStatus = PermissionStatusDenied;
} else { } else {
permissionStatus = PermissionStatusDenied; permissionStatus = PermissionStatusPermanentlyDenied;
} }
return permissionStatus; return permissionStatus;
} }
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
@implementation PhonePermissionStrategy @implementation PhonePermissionStrategy
- (PermissionStatus)checkPermissionStatus:(PermissionGroup)permission { - (PermissionStatus)checkPermissionStatus:(PermissionGroup)permission {
return PermissionStatusNotDetermined; return PermissionStatusDenied;
} }
- (ServiceStatus)checkServiceStatus:(PermissionGroup)permission { - (ServiceStatus)checkServiceStatus:(PermissionGroup)permission {
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
} }
- (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler { - (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler {
completionHandler(PermissionStatusNotDetermined); completionHandler(PermissionStatusPermanentlyDenied);
} }
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
- (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler { - (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler {
PermissionStatus status = [self checkPermissionStatus:permission]; PermissionStatus status = [self checkPermissionStatus:permission];
if (status != PermissionStatusNotDetermined) { if (status != PermissionStatusDenied) {
completionHandler(status); completionHandler(status);
return; return;
} }
...@@ -61,18 +61,18 @@ ...@@ -61,18 +61,18 @@
+ (PermissionStatus)determinePermissionStatus:(PHAuthorizationStatus)authorizationStatus { + (PermissionStatus)determinePermissionStatus:(PHAuthorizationStatus)authorizationStatus {
switch (authorizationStatus) { switch (authorizationStatus) {
case PHAuthorizationStatusNotDetermined: case PHAuthorizationStatusNotDetermined:
return PermissionStatusNotDetermined; return PermissionStatusDenied;
case PHAuthorizationStatusRestricted: case PHAuthorizationStatusRestricted:
return PermissionStatusRestricted; return PermissionStatusRestricted;
case PHAuthorizationStatusDenied: case PHAuthorizationStatusDenied:
return PermissionStatusDenied; return PermissionStatusPermanentlyDenied;
case PHAuthorizationStatusAuthorized: case PHAuthorizationStatusAuthorized:
return PermissionStatusGranted; return PermissionStatusGranted;
case PHAuthorizationStatusLimited: case PHAuthorizationStatusLimited:
return PermissionStatusLimited; return PermissionStatusLimited;
} }
return PermissionStatusNotDetermined; return PermissionStatusDenied;
} }
@end @end
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
- (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler { - (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler {
PermissionStatus status = [self checkPermissionStatus:permission]; PermissionStatus status = [self checkPermissionStatus:permission];
if (status != PermissionStatusNotDetermined) { if (status != PermissionStatusDenied) {
completionHandler(status); completionHandler(status);
return; return;
} }
...@@ -35,14 +35,11 @@ ...@@ -35,14 +35,11 @@
NSDate *today = [NSDate new]; NSDate *today = [NSDate new];
[motionManager queryActivityStartingFromDate:today toDate:today toQueue:[NSOperationQueue mainQueue] withHandler:^(NSArray<CMMotionActivity *> *__nullable activities, NSError *__nullable error) { [motionManager queryActivityStartingFromDate:today toDate:today toQueue:[NSOperationQueue mainQueue] withHandler:^(NSArray<CMMotionActivity *> *__nullable activities, NSError *__nullable error) {
if (error != nil && error.code == CMErrorMotionActivityNotAuthorized) { PermissionStatus status = [SensorPermissionStrategy permissionStatus];
completionHandler(PermissionStatusDenied); completionHandler(status);
} else {
completionHandler(PermissionStatusGranted);
}
}]; }];
} else { } else {
completionHandler(PermissionStatusNotDetermined); completionHandler(PermissionStatusDenied);
} }
} }
...@@ -54,13 +51,13 @@ ...@@ -54,13 +51,13 @@
switch (status) { switch (status) {
case CMAuthorizationStatusNotDetermined: case CMAuthorizationStatusNotDetermined:
permissionStatus = PermissionStatusNotDetermined; permissionStatus = PermissionStatusDenied;
break; break;
case CMAuthorizationStatusRestricted: case CMAuthorizationStatusRestricted:
permissionStatus = PermissionStatusRestricted; permissionStatus = PermissionStatusRestricted;
break; break;
case CMAuthorizationStatusDenied: case CMAuthorizationStatusDenied:
permissionStatus = PermissionStatusDenied; permissionStatus = PermissionStatusPermanentlyDenied;
break; break;
case CMAuthorizationStatusAuthorized: case CMAuthorizationStatusAuthorized:
permissionStatus = PermissionStatusGranted; permissionStatus = PermissionStatusGranted;
...@@ -72,7 +69,7 @@ ...@@ -72,7 +69,7 @@
return permissionStatus; return permissionStatus;
} }
return PermissionStatusNotDetermined; return PermissionStatusDenied;
} }
@end @end
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
- (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler { - (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler {
PermissionStatus status = [self checkPermissionStatus:permission]; PermissionStatus status = [self checkPermissionStatus:permission];
if (status != PermissionStatusNotDetermined) { if (status != PermissionStatusDenied) {
completionHandler(status); completionHandler(status);
return; return;
} }
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
completionHandler([SpeechPermissionStrategy determinePermissionStatus:authorizationStatus]); completionHandler([SpeechPermissionStrategy determinePermissionStatus:authorizationStatus]);
}]; }];
} else { } else {
completionHandler(PermissionStatusNotDetermined); completionHandler(PermissionStatusDenied);
} }
} }
...@@ -40,22 +40,22 @@ ...@@ -40,22 +40,22 @@
return [SpeechPermissionStrategy determinePermissionStatus:status]; return [SpeechPermissionStrategy determinePermissionStatus:status];
} }
return PermissionStatusNotDetermined; return PermissionStatusDenied;
} }
+ (PermissionStatus)determinePermissionStatus:(SFSpeechRecognizerAuthorizationStatus)authorizationStatus API_AVAILABLE(ios(10.0)){ + (PermissionStatus)determinePermissionStatus:(SFSpeechRecognizerAuthorizationStatus)authorizationStatus API_AVAILABLE(ios(10.0)){
switch (authorizationStatus) { switch (authorizationStatus) {
case SFSpeechRecognizerAuthorizationStatusNotDetermined: case SFSpeechRecognizerAuthorizationStatusNotDetermined:
return PermissionStatusNotDetermined;
case SFSpeechRecognizerAuthorizationStatusDenied:
return PermissionStatusDenied; return PermissionStatusDenied;
case SFSpeechRecognizerAuthorizationStatusDenied:
return PermissionStatusPermanentlyDenied;
case SFSpeechRecognizerAuthorizationStatusRestricted: case SFSpeechRecognizerAuthorizationStatusRestricted:
return PermissionStatusRestricted; return PermissionStatusRestricted;
case SFSpeechRecognizerAuthorizationStatusAuthorized: case SFSpeechRecognizerAuthorizationStatusAuthorized:
return PermissionStatusGranted; return PermissionStatusGranted;
} }
return PermissionStatusNotDetermined; return PermissionStatusDenied;
} }
@end @end
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
@implementation UnknownPermissionStrategy @implementation UnknownPermissionStrategy
- (PermissionStatus)checkPermissionStatus:(PermissionGroup)permission { - (PermissionStatus)checkPermissionStatus:(PermissionGroup)permission {
return PermissionStatusNotDetermined; return PermissionStatusDenied;
} }
- (ServiceStatus)checkServiceStatus:(PermissionGroup)permission { - (ServiceStatus)checkServiceStatus:(PermissionGroup)permission {
...@@ -17,6 +17,6 @@ ...@@ -17,6 +17,6 @@
} }
- (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler { - (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler {
completionHandler(PermissionStatusNotDetermined); completionHandler(PermissionStatusPermanentlyDenied);
} }
@end @end
...@@ -53,9 +53,6 @@ extension PermissionActions on Permission { ...@@ -53,9 +53,6 @@ extension PermissionActions on Permission {
/// Shortcuts for checking the [status] of a [Permission]. /// Shortcuts for checking the [status] of a [Permission].
extension PermissionCheckShortcuts on Permission { extension PermissionCheckShortcuts on Permission {
/// If this permission was never requested before.
Future<bool> get isUndetermined => status.isUndetermined;
/// If the user granted this permission. /// If the user granted this permission.
Future<bool> get isGranted => status.isGranted; Future<bool> get isGranted => status.isGranted;
......
...@@ -16,7 +16,7 @@ dependencies: ...@@ -16,7 +16,7 @@ dependencies:
flutter: flutter:
sdk: flutter sdk: flutter
meta: ^1.3.0 meta: ^1.3.0
permission_handler_platform_interface: ^3.0.0 permission_handler_platform_interface: ^3.0.0+1
dev_dependencies: dev_dependencies:
effective_dart: ^1.3.0 effective_dart: ^1.3.0
......
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