Commit d5d6ef23 by Maurits van Beusekom

Production version 4.1.0

parents 54382479 3d8bfb8c
...@@ -34,4 +34,6 @@ ...@@ -34,4 +34,6 @@
*.java linguist-language=Dart *.java linguist-language=Dart
*.kt linguist-language=Dart *.kt linguist-language=Dart
*.swift linguist-language=Dart *.swift linguist-language=Dart
\ No newline at end of file *.m linguist-language=Dart
*.h linguist-language=Dart
...@@ -19,6 +19,6 @@ ...@@ -19,6 +19,6 @@
### :thinking: Checklist before submitting ### :thinking: Checklist before submitting
- [ ] All projects build - [ ] All projects build
- [ ] Follows style guide lines ([code style guide](https://github.com/BaseflowIT/flutter-geolocator/blob/develop/CONTRIBUTING.md)) - [ ] Follows style guide lines ([code style guide](https://github.com/Baseflow/flutter-permission-handler/blob/develop/CONTRIBUTING.md))
- [ ] Relevant documentation was updated - [ ] Relevant documentation was updated
- [ ] Rebased onto current develop - [ ] Rebased onto current develop
\ No newline at end of file
## 4.1.0
* iOS: Added option to exclude permissions logic using macros. This allows developers to submit their app to the AppStore without having to include all permissions in their Info.plist;
* Android: Support ANSWER_PHONE_CALLS permission for API 26 and higher;
* Android: Support ACCESS_MEDIA_LOCATION permission for API 26 and higher;
* Android: Synchronized Gradle version with Flutter stable (1.12.13+hotfix.5).
## 4.0.0 ## 4.0.0
* iOS: Added support for requesting permissions on the DOCUMENTS and DOWNLOADS folder (thanks to @phranck); * iOS: Added support for requesting permissions on the DOCUMENTS and DOWNLOADS folder (thanks to @phranck);
......
...@@ -12,13 +12,13 @@ What you will need ...@@ -12,13 +12,13 @@ What you will need
Setting up your development environment Setting up your development environment
--------------------------------------- ---------------------------------------
* Fork `https://github.com/BaseflowIT/flutter-permission-handler` into your own GitHub account. If you already have a fork and moving to a new computer, make sure you update you fork. * Fork `https://github.com/Baseflow/flutter-permission-handler` into your own GitHub account. If you already have a fork and moving to a new computer, make sure you update you fork.
* If you haven't configured your machine with an SSH key that's known to github, then * If you haven't configured your machine with an SSH key that's known to github, then
follow [GitHub's directions](https://help.github.com/articles/generating-ssh-keys/) follow [GitHub's directions](https://help.github.com/articles/generating-ssh-keys/)
to generate an SSH key. to generate an SSH key.
* Clone your forked repo on your local development machine: `git clone git@github.com:<your_name_here>/flutter-permission-handler.git` * Clone your forked repo on your local development machine: `git clone git@github.com:<your_name_here>/flutter-permission-handler.git`
* Change into the `flutter-permission-handler` directory: `cd flutter-permission-handler` * Change into the `flutter-permission-handler` directory: `cd flutter-permission-handler`
* Add an upstream to the original repo, so that fetch from the master repository and not your clone: `git remote add upstream git@github.com:BaseflowIT/flutter-permission-handler.git` * Add an upstream to the original repo, so that fetch from the master repository and not your clone: `git remote add upstream git@github.com:Baseflow/flutter-permission-handler.git`
Running the example project Running the example project
--------------------------- ---------------------------
...@@ -44,6 +44,6 @@ We really appreciate contributions via GitHub pull requests. To contribute take ...@@ -44,6 +44,6 @@ We really appreciate contributions via GitHub pull requests. To contribute take
Send us your pull request: Send us your pull request:
* Go to `https://github.com/BaseflowIT/flutter-permission-handler` and click the "Compare & pull request" button. * Go to `https://github.com/Baseflow/flutter-permission-handler` and click the "Compare & pull request" button.
Please make sure you solved all warnings and errors reported by the static code analyses and that you fill in the full pull request template. Failing to do so will result in us asking you to fix it. Please make sure you solved all warnings and errors reported by the static code analyses and that you fill in the full pull request template. Failing to do so will result in us asking you to fix it.
...@@ -22,7 +22,7 @@ To use this plugin, add `permission_handler` as a [dependency in your pubspec.ya ...@@ -22,7 +22,7 @@ To use this plugin, add `permission_handler` as a [dependency in your pubspec.ya
```yaml ```yaml
dependencies: dependencies:
permission_handler: '^4.0.0' permission_handler: '^4.1.0'
``` ```
> **NOTE:** As of version 3.1.0 the permission_handler plugin switched to the AndroidX version of the Android Support Libraries. This means you need to make sure your Android project is also upgraded to support AndroidX. Detailed instructions can be found [here](https://flutter.dev/docs/development/packages-and-plugins/androidx-compatibility). > **NOTE:** As of version 3.1.0 the permission_handler plugin switched to the AndroidX version of the Android Support Libraries. This means you need to make sure your Android project is also upgraded to support AndroidX. Detailed instructions can be found [here](https://flutter.dev/docs/development/packages-and-plugins/androidx-compatibility).
...@@ -50,10 +50,91 @@ dependencies: ...@@ -50,10 +50,91 @@ dependencies:
For this plugin to work you will have to add permission configuration to your `AndroidManifest.xml` (Android) and `Info.plist` (iOS) files. This will tell the platform which hardware or software features your app needs. Complete lists of these permission options can be found in our example app here: For this plugin to work you will have to add permission configuration to your `AndroidManifest.xml` (Android) and `Info.plist` (iOS) files. This will tell the platform which hardware or software features your app needs. Complete lists of these permission options can be found in our example app here:
- [AndroidManifest.xml](https://github.com/BaseflowIT/flutter-permission-handler/blob/develop/example/android/app/src/main/AndroidManifest.xml) (note that there is a debug, main and profile version which are used depending on how you start your App. In general it is sufficient to add permissions only to the `main` version); - [AndroidManifest.xml](https://github.com/Baseflow/flutter-permission-handler/blob/develop/example/android/app/src/main/AndroidManifest.xml) (note that there is a debug, main and profile version which are used depending on how you start your App. In general it is sufficient to add permissions only to the `main` version);
- [Info.plist](https://github.com/BaseflowIT/flutter-permission-handler/blob/develop/example/ios/Runner/Info.plist) - [Info.plist](https://github.com/Baseflow/flutter-permission-handler/blob/develop/example/ios/Runner/Info.plist)
> IMPORTANT: On iOS you will have to include all permission options when you want to submit your App. This is because the `permission_handler` plugin touches all different SDKs and because the static code analyser (run by Apple upon App submission) detects this and will assert if it cannot find a matching permission option in the `Info.plist`. More information about this can be found [here](https://github.com/BaseflowIT/flutter-permission-handler/issues/26). Unfortunately we don't have a good solution for this. > IMPORTANT: ~~On iOS you will have to include all permission options when you want to submit your App.~~ This is because the `permission_handler` plugin touches all different SDKs and because the static code analyser (run by Apple upon App submission) detects this and will assert if it cannot find a matching permission option in the `Info.plist`. More information about this can be found [here](https://github.com/BaseflowIT/flutter-permission-handler/issues/26).
On iOS, the permission_handler plugin use [macros](https://github.com/BaseflowIT/flutter-permission-handler/blob/develop/ios/Classes/PermissionHandlerEnums.h) to control whether a permission is supported.
By default, all the permissions listed [here](https://github.com/Baseflow/flutter-permission-handler#list-of-available-permissions) are supported.
You can remove permissions you don't use by:
> 1. Add the following to your `Podfile` file:
>
> ```ruby
> post_install do |installer|
> installer.pods_project.targets.each do |target|
> target.build_configurations.each do |config|
> ... # Here are some configurations automatically generated by flutter
>
> # You can remove unused permissions here
> # for more infomation: https://github.com/BaseflowIT/flutter-permission-handler/blob/develop/ios/Classes/PermissionHandlerEnums.h
> # e.g. when you don't need camera permission, just add 'PERMISSION_CAMERA=0'
> config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
> '$(inherited)',
>
> ## dart: PermissionGroup.calendar
> # 'PERMISSION_EVENTS=0',
>
> ## dart: PermissionGroup.reminders
> # 'PERMISSION_REMINDERS=0',
>
> ## dart: PermissionGroup.contacts
> # 'PERMISSION_CONTACTS=0',
>
> ## dart: PermissionGroup.camera
> # 'PERMISSION_CAMERA=0',
>
> ## dart: PermissionGroup.microphone
> # 'PERMISSION_MICROPHONE=0',
>
> ## dart: PermissionGroup.speech
> # 'PERMISSION_SPEECH_RECOGNIZER=0',
>
> ## dart: PermissionGroup.photos
> # 'PERMISSION_PHOTOS=0',
>
> ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
> # 'PERMISSION_LOCATION=0',
>
> ## dart: PermissionGroup.notification
> # 'PERMISSION_NOTIFICATIONS=0',
>
> ## dart: PermissionGroup.mediaLibrary
> # 'PERMISSION_MEDIA_LIBRARY=0',
>
> ## dart: PermissionGroup.sensors
> # 'PERMISSION_SENSORS=0'
> ]
>
> end
> end
> end
> ```
>
> 2. Delete the corresponding permission description in `Info.plist`
>
> e.g. when you don't need camera permission, just delete 'NSCameraUsageDescription'
>
> The following lists the relationship between `Permission` and `The key of Info.plist`:
>
> | Permission | Info.plist | Macro |
> |---|---|---|
> | PermissionGroup.calendar | NSCalendarsUsageDescription | PERMISSION_EVENTS |
> | PermissionGroup.reminders | NSRemindersUsageDescription | PERMISSION_REMINDERS |
> | PermissionGroup.contacts | NSContactsUsageDescription | PERMISSION_CONTACTS |
> | PermissionGroup.camera | NSCameraUsageDescription | PERMISSION_CAMERA |
> | PermissionGroup.microphone | NSMicrophoneUsageDescription | PERMISSION_MICROPHONE |
> | PermissionGroup.speech | NSSpeechRecognitionUsageDescription | PERMISSION_SPEECH_RECOGNIZER |
> | PermissionGroup.photos | NSPhotoLibraryUsageDescription | PERMISSION_PHOTOS |
> | PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse | NSLocationUsageDescription, NSLocationAlwaysAndWhenInUseUsageDescription, NSLocationWhenInUseUsageDescription | PERMISSION_LOCATION |
> | PermissionGroup.notification | PermissionGroupNotification | PERMISSION_NOTIFICATIONS |
> | PermissionGroup.mediaLibrary | NSAppleMusicUsageDescription, kTCCServiceMediaLibrary | PERMISSION_MEDIA_LIBRARY |
> | PermissionGroup.sensors | NSMotionUsageDescription | PERMISSION_SENSORS |
>
> 3. Clean & Rebuild
## API ## API
...@@ -222,11 +303,11 @@ enum ServiceStatus { ...@@ -222,11 +303,11 @@ enum ServiceStatus {
## Issues ## Issues
Please file any issues, bugs or feature request as an issue on our [GitHub](https://github.com/BaseflowIT/flutter-permission-handler/issues) page. Please file any issues, bugs or feature request as an issue on our [GitHub](https://github.com/Baseflow/flutter-permission-handler/issues) page.
## Want to contribute ## Want to contribute
If you would like to contribute to the plugin (e.g. by improving the documentation, solving a bug or adding a cool new feature), please carefully review our [contribution guide](CONTRIBUTING.md) and send us your [pull request](https://github.com/BaseflowIT/flutter-permission-handler/pulls). If you would like to contribute to the plugin (e.g. by improving the documentation, solving a bug or adding a cool new feature), please carefully review our [contribution guide](CONTRIBUTING.md) and send us your [pull request](https://github.com/Baseflow/flutter-permission-handler/pulls).
## Author ## Author
......
...@@ -9,7 +9,7 @@ buildscript { ...@@ -9,7 +9,7 @@ buildscript {
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.5.1' classpath 'com.android.tools.build:gradle:3.5.0'
} }
} }
......
...@@ -62,7 +62,8 @@ public class PermissionHandlerPlugin implements MethodCallHandler { ...@@ -62,7 +62,8 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
private static final int PERMISSION_GROUP_STORAGE = 14; private static final int PERMISSION_GROUP_STORAGE = 14;
private static final int PERMISSION_GROUP_IGNORE_BATTERY_OPTIMIZATIONS = 15; private static final int PERMISSION_GROUP_IGNORE_BATTERY_OPTIMIZATIONS = 15;
private static final int PERMISSION_GROUP_NOTIFICATION = 16; private static final int PERMISSION_GROUP_NOTIFICATION = 16;
private static final int PERMISSION_GROUP_UNKNOWN = 17; private static final int PERMISSION_GROUP_ACCESS_MEDIA_LOCATION = 17;
private static final int PERMISSION_GROUP_UNKNOWN = 18;
private PermissionHandlerPlugin(Registrar mRegistrar) { private PermissionHandlerPlugin(Registrar mRegistrar) {
this.mRegistrar = mRegistrar; this.mRegistrar = mRegistrar;
...@@ -87,6 +88,7 @@ public class PermissionHandlerPlugin implements MethodCallHandler { ...@@ -87,6 +88,7 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
PERMISSION_GROUP_STORAGE, PERMISSION_GROUP_STORAGE,
PERMISSION_GROUP_IGNORE_BATTERY_OPTIMIZATIONS, PERMISSION_GROUP_IGNORE_BATTERY_OPTIMIZATIONS,
PERMISSION_GROUP_NOTIFICATION, PERMISSION_GROUP_NOTIFICATION,
PERMISSION_GROUP_ACCESS_MEDIA_LOCATION,
PERMISSION_GROUP_UNKNOWN, PERMISSION_GROUP_UNKNOWN,
}) })
private @interface PermissionGroup { private @interface PermissionGroup {
...@@ -195,6 +197,8 @@ public class PermissionHandlerPlugin implements MethodCallHandler { ...@@ -195,6 +197,8 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
case Manifest.permission.READ_EXTERNAL_STORAGE: case Manifest.permission.READ_EXTERNAL_STORAGE:
case Manifest.permission.WRITE_EXTERNAL_STORAGE: case Manifest.permission.WRITE_EXTERNAL_STORAGE:
return PERMISSION_GROUP_STORAGE; return PERMISSION_GROUP_STORAGE;
case Manifest.permission.ACCESS_MEDIA_LOCATION:
return PERMISSION_GROUP_ACCESS_MEDIA_LOCATION;
default: default:
return PERMISSION_GROUP_UNKNOWN; return PERMISSION_GROUP_UNKNOWN;
} }
...@@ -623,6 +627,9 @@ public class PermissionHandlerPlugin implements MethodCallHandler { ...@@ -623,6 +627,9 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
if (hasPermissionInManifest(Manifest.permission.BIND_CALL_REDIRECTION_SERVICE)) if (hasPermissionInManifest(Manifest.permission.BIND_CALL_REDIRECTION_SERVICE))
permissionNames.add(Manifest.permission.BIND_CALL_REDIRECTION_SERVICE); permissionNames.add(Manifest.permission.BIND_CALL_REDIRECTION_SERVICE);
if (VERSION.SDK_INT >= VERSION_CODES.O && hasPermissionInManifest(Manifest.permission.ANSWER_PHONE_CALLS))
permissionNames.add(Manifest.permission.ANSWER_PHONE_CALLS);
break; break;
case PERMISSION_GROUP_SENSORS: case PERMISSION_GROUP_SENSORS:
...@@ -663,6 +670,11 @@ public class PermissionHandlerPlugin implements MethodCallHandler { ...@@ -663,6 +670,11 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
permissionNames.add(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); permissionNames.add(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
break; break;
case PERMISSION_GROUP_ACCESS_MEDIA_LOCATION:
if (VERSION.SDK_INT >= VERSION_CODES.Q && hasPermissionInManifest(Manifest.permission.ACCESS_MEDIA_LOCATION))
permissionNames.add(Manifest.permission.ACCESS_MEDIA_LOCATION);
break;
case PERMISSION_GROUP_NOTIFICATION: case PERMISSION_GROUP_NOTIFICATION:
case PERMISSION_GROUP_MEDIA_LIBRARY: case PERMISSION_GROUP_MEDIA_LIBRARY:
case PERMISSION_GROUP_PHOTOS: case PERMISSION_GROUP_PHOTOS:
......
...@@ -46,4 +46,8 @@ ...@@ -46,4 +46,8 @@
<!-- Permissions options for the `sensors` group --> <!-- Permissions options for the `sensors` group -->
<uses-permission android:name="android.permission.BODY_SENSORS" /> <uses-permission android:name="android.permission.BODY_SENSORS" />
<!-- Permissions options for the `access_media_location` group -->
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
</manifest> </manifest>
...@@ -51,6 +51,9 @@ ...@@ -51,6 +51,9 @@
<!-- Permissions options for the `sensors` group --> <!-- Permissions options for the `sensors` group -->
<uses-permission android:name="android.permission.BODY_SENSORS" /> <uses-permission android:name="android.permission.BODY_SENSORS" />
<!-- Permissions options for the `access_media_location` group -->
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
<application <application
android:name="io.flutter.app.FlutterApplication" android:name="io.flutter.app.FlutterApplication"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
......
...@@ -5,7 +5,7 @@ buildscript { ...@@ -5,7 +5,7 @@ buildscript {
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.5.1' classpath 'com.android.tools.build:gradle:3.5.0'
} }
} }
......
...@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME ...@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.1-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
...@@ -64,6 +64,47 @@ post_install do |installer| ...@@ -64,6 +64,47 @@ post_install do |installer|
installer.pods_project.targets.each do |target| installer.pods_project.targets.each do |target|
target.build_configurations.each do |config| target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = 'NO' config.build_settings['ENABLE_BITCODE'] = 'NO'
# You can remove unused permissions here
# for more infomation: https://github.com/BaseflowIT/flutter-permission-handler/blob/develop/ios/Classes/PermissionHandlerEnums.h
# e.g. when you don't need camera permission, just add 'PERMISSION_CAMERA=0'
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
'$(inherited)',
## dart: PermissionGroup.calendar
# 'PERMISSION_EVENTS=0',
## dart: PermissionGroup.reminders
# 'PERMISSION_REMINDERS=0',
## dart: PermissionGroup.contacts
# 'PERMISSION_CONTACTS=0',
## dart: PermissionGroup.camera
# 'PERMISSION_CAMERA=0',
## dart: PermissionGroup.microphone
# 'PERMISSION_MICROPHONE=0',
## dart: PermissionGroup.speech
# 'PERMISSION_SPEECH_RECOGNIZER=0',
## dart: PermissionGroup.photos
# 'PERMISSION_PHOTOS=0',
## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
# 'PERMISSION_LOCATION=0',
## dart: PermissionGroup.notification
# 'PERMISSION_NOTIFICATIONS=0',
## dart: PermissionGroup.mediaLibrary
# 'PERMISSION_MEDIA_LIBRARY=0',
## dart: PermissionGroup.sensors
# 'PERMISSION_SENSORS=0'
]
end end
end end
end end
...@@ -31,7 +31,8 @@ class MyApp extends StatelessWidget { ...@@ -31,7 +31,8 @@ class MyApp extends StatelessWidget {
permission != PermissionGroup.sms && permission != PermissionGroup.sms &&
permission != PermissionGroup.storage && permission != PermissionGroup.storage &&
permission != permission !=
PermissionGroup.ignoreBatteryOptimizations; PermissionGroup.ignoreBatteryOptimizations &&
permission != PermissionGroup.access_media_location;
} else { } else {
return permission != PermissionGroup.unknown && return permission != PermissionGroup.unknown &&
permission != PermissionGroup.mediaLibrary && permission != PermissionGroup.mediaLibrary &&
......
...@@ -5,6 +5,82 @@ ...@@ -5,6 +5,82 @@
// Created by Razvan Lung on 15/02/2019. // Created by Razvan Lung on 15/02/2019.
// //
// ios: PermissionGroupCalendar
// Info.plist: NSCalendarsUsageDescription
// dart: PermissionGroup.calendar
#ifndef PERMISSION_EVENTS
#define PERMISSION_EVENTS 1
#endif
// ios: PermissionGroupReminders
// Info.plist: NSRemindersUsageDescription
// dart: PermissionGroup.reminders
#ifndef PERMISSION_REMINDERS
#define PERMISSION_REMINDERS 1
#endif
// ios: PermissionGroupContacts
// Info.plist: NSContactsUsageDescription
// dart: PermissionGroup.contacts
#ifndef PERMISSION_CONTACTS
#define PERMISSION_CONTACTS 1
#endif
// ios: PermissionGroupCamera
// Info.plist: NSCameraUsageDescription
// dart: PermissionGroup.camera
#ifndef PERMISSION_CAMERA
#define PERMISSION_CAMERA 1
#endif
// ios: PermissionGroupMicrophone
// Info.plist: NSMicrophoneUsageDescription
// dart: PermissionGroup.microphone
#ifndef PERMISSION_MICROPHONE
#define PERMISSION_MICROPHONE 1
#endif
// ios: PermissionGroupSpeech
// Info.plist: NSSpeechRecognitionUsageDescription
// dart: PermissionGroup.speech
#ifndef PERMISSION_SPEECH_RECOGNIZER
#define PERMISSION_SPEECH_RECOGNIZER 1
#endif
// ios: PermissionGroupPhotos
// Info.plist: NSPhotoLibraryUsageDescription
// dart: PermissionGroup.photos
#ifndef PERMISSION_PHOTOS
#define PERMISSION_PHOTOS 1
#endif
// ios: [PermissionGroupLocation, PermissionGroupLocationAlways, PermissionGroupLocationWhenInUse]
// Info.plist: [NSLocationUsageDescription, NSLocationAlwaysAndWhenInUseUsageDescription, NSLocationWhenInUseUsageDescription]
// dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
#ifndef PERMISSION_LOCATION
#define PERMISSION_LOCATION 1
#endif
// ios: PermissionGroupNotification
// dart: PermissionGroup.notification
#ifndef PERMISSION_NOTIFICATIONS
#define PERMISSION_NOTIFICATIONS 1
#endif
// ios: PermissionGroupMediaLibrary
// Info.plist: [NSAppleMusicUsageDescription, kTCCServiceMediaLibrary]
// dart: PermissionGroup.mediaLibrary
#ifndef PERMISSION_MEDIA_LIBRARY
#define PERMISSION_MEDIA_LIBRARY 1
#endif
// ios: PermissionGroupSensors
// Info.plist: NSMotionUsageDescription
// dart: PermissionGroup.sensors
#ifndef PERMISSION_SENSORS
#define PERMISSION_SENSORS 1
#endif
typedef NS_ENUM(int, PermissionGroup) { typedef NS_ENUM(int, PermissionGroup) {
PermissionGroupCalendar = 0, PermissionGroupCalendar = 0,
PermissionGroupCamera, PermissionGroupCamera,
...@@ -23,6 +99,7 @@ typedef NS_ENUM(int, PermissionGroup) { ...@@ -23,6 +99,7 @@ typedef NS_ENUM(int, PermissionGroup) {
PermissionGroupStorage, PermissionGroupStorage,
PermissionGroupIgnoreBatteryOptimizations, PermissionGroupIgnoreBatteryOptimizations,
PermissionGroupNotification, PermissionGroupNotification,
PermissionGroupAccessMediaLocation,
PermissionGroupUnknown, PermissionGroupUnknown,
}; };
......
...@@ -84,7 +84,11 @@ ...@@ -84,7 +84,11 @@
case PermissionGroupLocation: case PermissionGroupLocation:
case PermissionGroupLocationAlways: case PermissionGroupLocationAlways:
case PermissionGroupLocationWhenInUse: case PermissionGroupLocationWhenInUse:
#if PERMISSION_LOCATION
return [[LocationPermissionStrategy alloc] initWithLocationManager]; return [[LocationPermissionStrategy alloc] initWithLocationManager];
#else
return [LocationPermissionStrategy new];
#endif
case PermissionGroupMediaLibrary: case PermissionGroupMediaLibrary:
return [MediaLibraryPermissionStrategy new]; return [MediaLibraryPermissionStrategy new];
case PermissionGroupMicrophone: case PermissionGroupMicrophone:
......
...@@ -3,10 +3,19 @@ ...@@ -3,10 +3,19 @@
// Copyright (c) 2019 The Chromium Authors. All rights reserved. // Copyright (c) 2019 The Chromium Authors. All rights reserved.
// //
#import <AVFoundation/AVFoundation.h>
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "PermissionStrategy.h" #import "PermissionStrategy.h"
#if PERMISSION_CAMERA | PERMISSION_MICROPHONE
#import <AVFoundation/AVFoundation.h>
@interface AudioVideoPermissionStrategy : NSObject <PermissionStrategy> @interface AudioVideoPermissionStrategy : NSObject <PermissionStrategy>
@end @end
\ No newline at end of file
#else
#import "UnknownPermissionStrategy.h"
@interface AudioVideoPermissionStrategy : UnknownPermissionStrategy
@end
#endif
...@@ -5,14 +5,23 @@ ...@@ -5,14 +5,23 @@
#import "AudioVideoPermissionStrategy.h" #import "AudioVideoPermissionStrategy.h"
#if PERMISSION_CAMERA | PERMISSION_MICROPHONE
@implementation AudioVideoPermissionStrategy @implementation AudioVideoPermissionStrategy
- (PermissionStatus)checkPermissionStatus:(PermissionGroup)permission { - (PermissionStatus)checkPermissionStatus:(PermissionGroup)permission {
if (permission == PermissionGroupCamera) { if (permission == PermissionGroupCamera) {
#if PERMISSION_CAMERA
return [AudioVideoPermissionStrategy permissionStatus:AVMediaTypeVideo]; return [AudioVideoPermissionStrategy permissionStatus:AVMediaTypeVideo];
#else
return PermissionStatusUnknown;
#endif
} else if (permission == PermissionGroupMicrophone) { } else if (permission == PermissionGroupMicrophone) {
#if PERMISSION_MICROPHONE
return [AudioVideoPermissionStrategy permissionStatus:AVMediaTypeAudio]; return [AudioVideoPermissionStrategy permissionStatus:AVMediaTypeAudio];
#else
return PermissionStatusUnknown;
#endif
} }
return PermissionStatusUnknown; return PermissionStatusUnknown;
} }
...@@ -32,9 +41,19 @@ ...@@ -32,9 +41,19 @@
AVMediaType mediaType; AVMediaType mediaType;
if (permission == PermissionGroupCamera) { if (permission == PermissionGroupCamera) {
#if PERMISSION_CAMERA
mediaType = AVMediaTypeVideo; mediaType = AVMediaTypeVideo;
#else
completionHandler(PermissionStatusUnknown);
return;
#endif
} else if (permission == PermissionGroupMicrophone) { } else if (permission == PermissionGroupMicrophone) {
#if PERMISSION_MICROPHONE
mediaType = AVMediaTypeAudio; mediaType = AVMediaTypeAudio;
#else
completionHandler(PermissionStatusUnknown);
return;
#endif
} else { } else {
completionHandler(PermissionStatusUnknown); completionHandler(PermissionStatusUnknown);
return; return;
...@@ -66,4 +85,11 @@ ...@@ -66,4 +85,11 @@
return PermissionStatusUnknown; return PermissionStatusUnknown;
} }
@end @end
\ No newline at end of file
#else
@implementation AudioVideoPermissionStrategy
@end
#endif
...@@ -3,11 +3,21 @@ ...@@ -3,11 +3,21 @@
// Copyright (c) 2019 The Chromium Authors. All rights reserved. // Copyright (c) 2019 The Chromium Authors. All rights reserved.
// //
#import <AddressBook/ABAddressBook.h>
#import <Contacts/Contacts.h>
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "PermissionStrategy.h" #import "PermissionStrategy.h"
#if PERMISSION_CONTACTS
#import <AddressBook/ABAddressBook.h>
#import <Contacts/Contacts.h>
@interface ContactPermissionStrategy : NSObject <PermissionStrategy> @interface ContactPermissionStrategy : NSObject <PermissionStrategy>
@end @end
\ No newline at end of file
#else
#import "UnknownPermissionStrategy.h"
@interface ContactPermissionStrategy : UnknownPermissionStrategy
@end
#endif
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#import "ContactPermissionStrategy.h" #import "ContactPermissionStrategy.h"
#if PERMISSION_CONTACTS
@implementation ContactPermissionStrategy @implementation ContactPermissionStrategy
...@@ -94,3 +95,10 @@ ...@@ -94,3 +95,10 @@
}); });
} }
@end @end
#else
@implementation ContactPermissionStrategy
@end
#endif
...@@ -4,9 +4,19 @@ ...@@ -4,9 +4,19 @@
// //
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import <EventKit/EventKit.h>
#import "PermissionStrategy.h" #import "PermissionStrategy.h"
#if PERMISSION_EVENTS | PERMISSION_REMINDERS
#import <EventKit/EventKit.h>
@interface EventPermissionStrategy : NSObject <PermissionStrategy> @interface EventPermissionStrategy : NSObject <PermissionStrategy>
@end @end
\ No newline at end of file
#else
#import "UnknownPermissionStrategy.h"
@interface EventPermissionStrategy : UnknownPermissionStrategy
@end
#endif
...@@ -5,14 +5,23 @@ ...@@ -5,14 +5,23 @@
#import "EventPermissionStrategy.h" #import "EventPermissionStrategy.h"
#if PERMISSION_EVENTS | PERMISSION_REMINDERS
@implementation EventPermissionStrategy @implementation EventPermissionStrategy
- (PermissionStatus)checkPermissionStatus:(PermissionGroup)permission { - (PermissionStatus)checkPermissionStatus:(PermissionGroup)permission {
if (permission == PermissionGroupCalendar) { if (permission == PermissionGroupCalendar) {
#if PERMISSION_EVENTS
return [EventPermissionStrategy permissionStatus:EKEntityTypeEvent]; return [EventPermissionStrategy permissionStatus:EKEntityTypeEvent];
#else
return PermissionStatusUnknown;
#endif
} else if (permission == PermissionGroupReminders) { } else if (permission == PermissionGroupReminders) {
#if PERMISSION_REMINDERS
return [EventPermissionStrategy permissionStatus:EKEntityTypeReminder]; return [EventPermissionStrategy permissionStatus:EKEntityTypeReminder];
#else
return PermissionStatusUnknown;
#endif
} }
return PermissionStatusUnknown; return PermissionStatusUnknown;
...@@ -33,9 +42,19 @@ ...@@ -33,9 +42,19 @@
EKEntityType entityType; EKEntityType entityType;
if (permission == PermissionGroupCalendar) { if (permission == PermissionGroupCalendar) {
#if PERMISSION_EVENTS
entityType = EKEntityTypeEvent; entityType = EKEntityTypeEvent;
#else
completionHandler(PermissionStatusUnknown);
return;
#endif
} else if (permission == PermissionGroupReminders) { } else if (permission == PermissionGroupReminders) {
#if PERMISSION_REMINDERS
entityType = EKEntityTypeReminder; entityType = EKEntityTypeReminder;
#else
completionHandler(PermissionStatusUnknown);
return;
#endif
} else { } else {
completionHandler(PermissionStatusUnknown); completionHandler(PermissionStatusUnknown);
return; return;
...@@ -69,3 +88,10 @@ ...@@ -69,3 +88,10 @@
} }
@end @end
#else
@implementation EventPermissionStrategy
@end
#endif
...@@ -3,11 +3,21 @@ ...@@ -3,11 +3,21 @@
// Copyright (c) 2019 The Chromium Authors. All rights reserved. // Copyright (c) 2019 The Chromium Authors. All rights reserved.
// //
#import <CoreLocation/CoreLocation.h>
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "PermissionStrategy.h" #import "PermissionStrategy.h"
#if PERMISSION_LOCATION
#import <CoreLocation/CoreLocation.h>
@interface LocationPermissionStrategy : NSObject <PermissionStrategy, CLLocationManagerDelegate> @interface LocationPermissionStrategy : NSObject <PermissionStrategy, CLLocationManagerDelegate>
- (instancetype)initWithLocationManager; - (instancetype)initWithLocationManager;
@end @end
#else
#import "UnknownPermissionStrategy.h"
@interface LocationPermissionStrategy : UnknownPermissionStrategy
@end
#endif
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#import "LocationPermissionStrategy.h" #import "LocationPermissionStrategy.h"
#if PERMISSION_LOCATION
@implementation LocationPermissionStrategy { @implementation LocationPermissionStrategy {
CLLocationManager *_locationManager; CLLocationManager *_locationManager;
...@@ -154,3 +155,10 @@ ...@@ -154,3 +155,10 @@
} }
@end @end
#else
@implementation LocationPermissionStrategy
@end
#endif
...@@ -4,9 +4,19 @@ ...@@ -4,9 +4,19 @@
// //
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import <MediaPlayer/MediaPlayer.h>
#include "PermissionStrategy.h" #include "PermissionStrategy.h"
#if PERMISSION_MEDIA_LIBRARY
#import <MediaPlayer/MediaPlayer.h>
@interface MediaLibraryPermissionStrategy : NSObject <PermissionStrategy> @interface MediaLibraryPermissionStrategy : NSObject <PermissionStrategy>
@end @end
#else
#import "UnknownPermissionStrategy.h"
@interface MediaLibraryPermissionStrategy : UnknownPermissionStrategy
@end
#endif
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#import "MediaLibraryPermissionStrategy.h" #import "MediaLibraryPermissionStrategy.h"
#if PERMISSION_MEDIA_LIBRARY
@implementation MediaLibraryPermissionStrategy @implementation MediaLibraryPermissionStrategy
...@@ -59,3 +60,10 @@ ...@@ -59,3 +60,10 @@
} }
@end @end
#else
@implementation MediaLibraryPermissionStrategy
@end
#endif
...@@ -6,9 +6,20 @@ ...@@ -6,9 +6,20 @@
// //
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import <UserNotifications/UserNotifications.h>
#import "PermissionStrategy.h" #import "PermissionStrategy.h"
#if PERMISSION_NOTIFICATIONS
#import <UserNotifications/UserNotifications.h>
@interface NotificationPermissionStrategy : NSObject <PermissionStrategy> @interface NotificationPermissionStrategy : NSObject <PermissionStrategy>
@end @end
#else
#import "UnknownPermissionStrategy.h"
@interface NotificationPermissionStrategy : UnknownPermissionStrategy
@end
#endif
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
#import "NotificationPermissionStrategy.h" #import "NotificationPermissionStrategy.h"
#if PERMISSION_NOTIFICATIONS
@implementation NotificationPermissionStrategy @implementation NotificationPermissionStrategy
- (PermissionStatus)checkPermissionStatus:(PermissionGroup)permission { - (PermissionStatus)checkPermissionStatus:(PermissionGroup)permission {
...@@ -73,3 +75,10 @@ ...@@ -73,3 +75,10 @@
} }
@end @end
#else
@implementation NotificationPermissionStrategy
@end
#endif
...@@ -5,8 +5,18 @@ ...@@ -5,8 +5,18 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "PermissionStrategy.h" #import "PermissionStrategy.h"
#import <Photos/Photos.h>
#if PERMISSION_PHOTOS
#import <Photos/Photos.h>
@interface PhotoPermissionStrategy : NSObject <PermissionStrategy> @interface PhotoPermissionStrategy : NSObject <PermissionStrategy>
@end @end
\ No newline at end of file
#else
#import "UnknownPermissionStrategy.h"
@interface PhotoPermissionStrategy : UnknownPermissionStrategy
@end
#endif
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#import "PhotoPermissionStrategy.h" #import "PhotoPermissionStrategy.h"
#if PERMISSION_PHOTOS
@implementation PhotoPermissionStrategy @implementation PhotoPermissionStrategy
- (PermissionStatus)checkPermissionStatus:(PermissionGroup)permission { - (PermissionStatus)checkPermissionStatus:(PermissionGroup)permission {
...@@ -49,4 +50,11 @@ ...@@ -49,4 +50,11 @@
return PermissionStatusUnknown; return PermissionStatusUnknown;
} }
@end @end
\ No newline at end of file
#else
@implementation PhotoPermissionStrategy
@end
#endif
...@@ -3,10 +3,20 @@ ...@@ -3,10 +3,20 @@
// Copyright (c) 2019 The Chromium Authors. All rights reserved. // Copyright (c) 2019 The Chromium Authors. All rights reserved.
// //
#import <CoreMotion/CoreMotion.h>
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "PermissionStrategy.h" #import "PermissionStrategy.h"
#if PERMISSION_SENSORS
#import <CoreMotion/CoreMotion.h>
@interface SensorPermissionStrategy : NSObject <PermissionStrategy> @interface SensorPermissionStrategy : NSObject <PermissionStrategy>
@end @end
\ No newline at end of file
#else
#import "UnknownPermissionStrategy.h"
@interface SensorPermissionStrategy : UnknownPermissionStrategy
@end
#endif
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#import "SensorPermissionStrategy.h" #import "SensorPermissionStrategy.h"
#if PERMISSION_SENSORS
@implementation SensorPermissionStrategy @implementation SensorPermissionStrategy
- (PermissionStatus)checkPermissionStatus:(PermissionGroup)permission { - (PermissionStatus)checkPermissionStatus:(PermissionGroup)permission {
...@@ -80,3 +81,10 @@ ...@@ -80,3 +81,10 @@
} }
@end @end
#else
@implementation SensorPermissionStrategy
@end
#endif
...@@ -5,7 +5,18 @@ ...@@ -5,7 +5,18 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "PermissionStrategy.h" #import "PermissionStrategy.h"
#if PERMISSION_SPEECH_RECOGNIZER
#import <Speech/Speech.h> #import <Speech/Speech.h>
@interface SpeechPermissionStrategy : NSObject <PermissionStrategy> @interface SpeechPermissionStrategy : NSObject <PermissionStrategy>
@end @end
\ No newline at end of file
#else
#import "UnknownPermissionStrategy.h"
@interface SpeechPermissionStrategy : UnknownPermissionStrategy
@end
#endif
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#import "SpeechPermissionStrategy.h" #import "SpeechPermissionStrategy.h"
#if PERMISSION_SPEECH_RECOGNIZER
@implementation SpeechPermissionStrategy @implementation SpeechPermissionStrategy
- (PermissionStatus)checkPermissionStatus:(PermissionGroup)permission { - (PermissionStatus)checkPermissionStatus:(PermissionGroup)permission {
...@@ -58,3 +59,10 @@ ...@@ -58,3 +59,10 @@
} }
@end @end
#else
@implementation SpeechPermissionStrategy
@end
#endif
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# #
Pod::Spec.new do |s| Pod::Spec.new do |s|
s.name = 'permission_handler' s.name = 'permission_handler'
s.version = '4.0.0' s.version = '4.1.0'
s.summary = 'Permission plugin for Flutter.' s.summary = 'Permission plugin for Flutter.'
s.description = <<-DESC s.description = <<-DESC
Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions. Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.
......
...@@ -153,8 +153,11 @@ class PermissionGroup { ...@@ -153,8 +153,11 @@ class PermissionGroup {
/// iOS: Notification /// iOS: Notification
static const PermissionGroup notification = PermissionGroup._(16); static const PermissionGroup notification = PermissionGroup._(16);
/// Android: Allows an application to access any geographic locations persisted in the user's shared collection.
static const PermissionGroup access_media_location = PermissionGroup._(17);
/// The unknown permission only used for return type, never requested /// The unknown permission only used for return type, never requested
static const PermissionGroup unknown = PermissionGroup._(17); static const PermissionGroup unknown = PermissionGroup._(18);
static const List<PermissionGroup> values = <PermissionGroup>[ static const List<PermissionGroup> values = <PermissionGroup>[
calendar, calendar,
...@@ -174,6 +177,7 @@ class PermissionGroup { ...@@ -174,6 +177,7 @@ class PermissionGroup {
storage, storage,
ignoreBatteryOptimizations, ignoreBatteryOptimizations,
notification, notification,
access_media_location,
unknown, unknown,
]; ];
...@@ -195,6 +199,7 @@ class PermissionGroup { ...@@ -195,6 +199,7 @@ class PermissionGroup {
'storage', 'storage',
'ignoreBatteryOptimizations', 'ignoreBatteryOptimizations',
'notification', 'notification',
'access_media_location',
'unknown', 'unknown',
]; ];
......
name: permission_handler name: permission_handler
description: Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions. description: Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.
version: 4.0.0 version: 4.1.0
authors:
- Baseflow <hello@baseflow.com>
- long1eu <home@long1.eu>
- Sebastian Roth <sebastian.roth@gmail.com>
homepage: https://github.com/baseflowit/flutter-permission-handler homepage: https://github.com/baseflowit/flutter-permission-handler
environment: environment:
......
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