Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
permission_handler
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
songyanzhi
permission_handler
Commits
49acc864
Commit
49acc864
authored
Apr 21, 2021
by
Jan-Derk
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added MANAGE_EXTERNAL_STORAGE permission
Registered Listeners on plugin level
parent
14368466
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
77 additions
and
45 deletions
+77
-45
permission_handler/CHANGELOG.md
+7
-0
permission_handler/android/build.gradle
+1
-1
permission_handler/android/src/main/java/com/baseflow/permissionhandler/MethodCallHandlerImpl.java
+0
-21
permission_handler/android/src/main/java/com/baseflow/permissionhandler/PermissionConstants.java
+5
-2
permission_handler/android/src/main/java/com/baseflow/permissionhandler/PermissionHandlerPlugin.java
+40
-16
permission_handler/android/src/main/java/com/baseflow/permissionhandler/PermissionManager.java
+0
-0
permission_handler/android/src/main/java/com/baseflow/permissionhandler/PermissionUtils.java
+15
-1
permission_handler/example/android/app/build.gradle
+1
-1
permission_handler/example/android/app/src/main/AndroidManifest.xml
+3
-0
permission_handler/example/lib/plugin_example/permission_list.dart
+2
-1
permission_handler/ios/Classes/PermissionHandlerEnums.h
+1
-0
permission_handler/pubspec.yaml
+2
-2
No files found.
permission_handler/CHANGELOG.md
View file @
49acc864
## 7.0.0
This release contains the following
**breaking changes**
:
*
Updated compile SDK version to 30 in the build.gradle for handling the MANAGE_EXTERNAL_STORAGE permission;
*
Added the MANAGE_EXTERNAL_STORAGE permission for Android R and up;
*
Registered listeners on the plugin level to prevent memory leaks or unwanted behaviour.
## 6.1.3
*
Implement equality operator on the
`Permission`
class;
...
...
permission_handler/android/build.gradle
View file @
49acc864
...
...
@@ -28,7 +28,7 @@ project.getTasks().withType(JavaCompile){
apply
plugin:
'com.android.library'
android
{
compileSdkVersion
29
compileSdkVersion
30
defaultConfig
{
minSdkVersion
16
...
...
permission_handler/android/src/main/java/com/baseflow/permissionhandler/MethodCallHandlerImpl.java
View file @
49acc864
...
...
@@ -6,12 +6,9 @@ import android.content.Context;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
io.flutter.plugin.common.BinaryMessenger
;
import
io.flutter.plugin.common.MethodCall
;
import
io.flutter.plugin.common.MethodChannel
;
import
io.flutter.plugin.common.MethodChannel.Result
;
import
com.baseflow.permissionhandler.PermissionManager.ActivityRegistry
;
import
com.baseflow.permissionhandler.PermissionManager.PermissionRegistry
;
import
java.util.List
;
...
...
@@ -35,26 +32,10 @@ final class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler {
@Nullable
private
Activity
activity
;
@Nullable
private
ActivityRegistry
activityRegistry
;
@Nullable
private
PermissionRegistry
permissionRegistry
;
public
void
setActivity
(
@Nullable
Activity
activity
)
{
this
.
activity
=
activity
;
}
public
void
setActivityRegistry
(
@Nullable
ActivityRegistry
activityRegistry
)
{
this
.
activityRegistry
=
activityRegistry
;
}
public
void
setPermissionRegistry
(
@Nullable
PermissionRegistry
permissionRegistry
)
{
this
.
permissionRegistry
=
permissionRegistry
;
}
@Override
public
void
onMethodCall
(
@NonNull
MethodCall
call
,
@NonNull
final
Result
result
)
{
...
...
@@ -91,8 +72,6 @@ final class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler {
permissionManager
.
requestPermissions
(
permissions
,
activity
,
activityRegistry
,
permissionRegistry
,
result:
:
success
,
(
String
errorCode
,
String
errorDescription
)
->
result
.
error
(
errorCode
,
...
...
permission_handler/android/src/main/java/com/baseflow/permissionhandler/PermissionConstants.java
View file @
49acc864
...
...
@@ -8,7 +8,8 @@ import java.lang.annotation.RetentionPolicy;
final
class
PermissionConstants
{
static
final
String
LOG_TAG
=
"permissions_handler"
;
static
final
int
PERMISSION_CODE
=
24
;
static
final
int
PERMISSION_CODE_IGNORE_BATTERY_OPTIMIZATIONS
=
5672353
;
static
final
int
PERMISSION_CODE_IGNORE_BATTERY_OPTIMIZATIONS
=
209
;
static
final
int
PERMISSION_CODE_MANAGE_EXTERNAL_STORAGE
=
210
;
//PERMISSION_GROUP
static
final
int
PERMISSION_GROUP_CALENDAR
=
0
;
...
...
@@ -33,6 +34,7 @@ final class PermissionConstants {
static
final
int
PERMISSION_GROUP_ACTIVITY_RECOGNITION
=
19
;
static
final
int
PERMISSION_GROUP_UNKNOWN
=
20
;
static
final
int
PERMISSION_GROUP_BLUETOOTH
=
21
;
static
final
int
PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE
=
22
;
@Retention
(
RetentionPolicy
.
SOURCE
)
@IntDef
({
...
...
@@ -57,6 +59,7 @@ final class PermissionConstants {
PERMISSION_GROUP_ACTIVITY_RECOGNITION
,
PERMISSION_GROUP_UNKNOWN
,
PERMISSION_GROUP_BLUETOOTH
,
PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE
})
@interface
PermissionGroup
{
}
...
...
@@ -74,7 +77,7 @@ final class PermissionConstants {
PERMISSION_STATUS_GRANTED
,
PERMISSION_STATUS_RESTRICTED
,
PERMISSION_STATUS_LIMITED
,
PERMISSION_STATUS_NEVER_ASK_AGAIN
,
PERMISSION_STATUS_NEVER_ASK_AGAIN
})
@interface
PermissionStatus
{
}
...
...
permission_handler/android/src/main/java/com/baseflow/permissionhandler/PermissionHandlerPlugin.java
View file @
49acc864
...
...
@@ -4,8 +4,6 @@ import android.app.Activity;
import
android.content.Context
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
com.baseflow.permissionhandler.PermissionManager.ActivityRegistry
;
import
com.baseflow.permissionhandler.PermissionManager.PermissionRegistry
;
import
io.flutter.embedding.engine.plugins.FlutterPlugin
;
import
io.flutter.embedding.engine.plugins.activity.ActivityAware
;
import
io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding
;
...
...
@@ -23,11 +21,21 @@ import io.flutter.plugin.common.MethodChannel;
*/
public
final
class
PermissionHandlerPlugin
implements
FlutterPlugin
,
ActivityAware
{
private
final
PermissionManager
permissionManager
;
private
MethodChannel
methodChannel
;
@SuppressWarnings
(
"deprecation"
)
@Nullable
private
io
.
flutter
.
plugin
.
common
.
PluginRegistry
.
Registrar
pluginRegistrar
;
@Nullable
private
ActivityPluginBinding
pluginBinding
;
@Nullable
private
MethodCallHandlerImpl
methodCallHandler
;
public
PermissionHandlerPlugin
()
{
this
.
permissionManager
=
new
PermissionManager
();
}
/**
* Registers a plugin implementation that uses the stable {@code io.flutter.plugin.common}
* package.
...
...
@@ -38,13 +46,15 @@ public final class PermissionHandlerPlugin implements FlutterPlugin, ActivityAwa
@SuppressWarnings
(
"deprecation"
)
public
static
void
registerWith
(
io
.
flutter
.
plugin
.
common
.
PluginRegistry
.
Registrar
registrar
)
{
final
PermissionHandlerPlugin
plugin
=
new
PermissionHandlerPlugin
();
plugin
.
pluginRegistrar
=
registrar
;
plugin
.
registerListeners
();
plugin
.
startListening
(
registrar
.
context
(),
registrar
.
messenger
());
if
(
registrar
.
activeContext
()
instanceof
Activity
)
{
plugin
.
startListeningToActivity
(
registrar
.
activity
(),
registrar:
:
addActivityResultListener
,
registrar:
:
addRequestPermissionsResultListener
registrar
.
activity
()
);
}
}
...
...
@@ -65,10 +75,11 @@ public final class PermissionHandlerPlugin implements FlutterPlugin, ActivityAwa
@Override
public
void
onAttachedToActivity
(
@NonNull
ActivityPluginBinding
binding
)
{
startListeningToActivity
(
binding
.
getActivity
(),
binding:
:
addActivityResultListener
,
binding:
:
addRequestPermissionsResultListener
binding
.
getActivity
()
);
this
.
pluginBinding
=
binding
;
registerListeners
();
}
@Override
...
...
@@ -79,6 +90,8 @@ public final class PermissionHandlerPlugin implements FlutterPlugin, ActivityAwa
@Override
public
void
onDetachedFromActivity
()
{
stopListeningToActivity
();
deregisterListeners
();
}
@Override
...
...
@@ -95,7 +108,7 @@ public final class PermissionHandlerPlugin implements FlutterPlugin, ActivityAwa
methodCallHandler
=
new
MethodCallHandlerImpl
(
applicationContext
,
new
AppSettingsManager
(),
new
PermissionManager
()
,
this
.
permissionManager
,
new
ServiceManager
()
);
...
...
@@ -109,22 +122,33 @@ public final class PermissionHandlerPlugin implements FlutterPlugin, ActivityAwa
}
private
void
startListeningToActivity
(
Activity
activity
,
ActivityRegistry
activityRegistry
,
PermissionRegistry
permissionRegistry
Activity
activity
)
{
if
(
methodCallHandler
!=
null
)
{
methodCallHandler
.
setActivity
(
activity
);
methodCallHandler
.
setActivityRegistry
(
activityRegistry
);
methodCallHandler
.
setPermissionRegistry
(
permissionRegistry
);
}
}
private
void
stopListeningToActivity
()
{
if
(
methodCallHandler
!=
null
)
{
methodCallHandler
.
setActivity
(
null
);
methodCallHandler
.
setActivityRegistry
(
null
);
methodCallHandler
.
setPermissionRegistry
(
null
);
}
}
private
void
registerListeners
()
{
if
(
this
.
pluginRegistrar
!=
null
)
{
this
.
pluginRegistrar
.
addActivityResultListener
(
this
.
permissionManager
);
this
.
pluginRegistrar
.
addRequestPermissionsResultListener
(
this
.
permissionManager
);
}
else
if
(
pluginBinding
!=
null
)
{
this
.
pluginBinding
.
addActivityResultListener
(
this
.
permissionManager
);
this
.
pluginBinding
.
addRequestPermissionsResultListener
(
this
.
permissionManager
);
}
}
private
void
deregisterListeners
()
{
if
(
this
.
pluginBinding
!=
null
)
{
this
.
pluginBinding
.
removeActivityResultListener
(
this
.
permissionManager
);
this
.
pluginBinding
.
removeRequestPermissionsResultListener
(
this
.
permissionManager
);
}
}
}
permission_handler/android/src/main/java/com/baseflow/permissionhandler/PermissionManager.java
View file @
49acc864
This diff is collapsed.
Click to expand it.
permission_handler/android/src/main/java/com/baseflow/permissionhandler/PermissionUtils.java
View file @
49acc864
...
...
@@ -6,6 +6,7 @@ import android.content.Context;
import
android.content.pm.PackageInfo
;
import
android.content.pm.PackageManager
;
import
android.os.Build
;
import
android.os.Environment
;
import
android.util.Log
;
import
androidx.annotation.RequiresApi
;
...
...
@@ -60,6 +61,8 @@ public class PermissionUtils {
return
PermissionConstants
.
PERMISSION_GROUP_ACCESS_MEDIA_LOCATION
;
case
Manifest
.
permission
.
ACTIVITY_RECOGNITION
:
return
PermissionConstants
.
PERMISSION_GROUP_ACTIVITY_RECOGNITION
;
case
Manifest
.
permission
.
MANAGE_EXTERNAL_STORAGE
:
return
PermissionConstants
.
PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE
;
default
:
return
PermissionConstants
.
PERMISSION_GROUP_UNKNOWN
;
}
...
...
@@ -177,9 +180,12 @@ public class PermissionUtils {
if
(
hasPermissionInManifest
(
context
,
permissionNames
,
Manifest
.
permission
.
READ_EXTERNAL_STORAGE
))
permissionNames
.
add
(
Manifest
.
permission
.
READ_EXTERNAL_STORAGE
);
if
(
Build
.
VERSION
.
SDK_INT
<
Build
.
VERSION_CODES
.
Q
||
(
Build
.
VERSION
.
SDK_INT
==
Build
.
VERSION_CODES
.
Q
&&
Environment
.
isExternalStorageLegacy
()))
{
if
(
hasPermissionInManifest
(
context
,
permissionNames
,
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
))
permissionNames
.
add
(
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
);
break
;
}
break
;
case
PermissionConstants
.
PERMISSION_GROUP_IGNORE_BATTERY_OPTIMIZATIONS
:
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
&&
hasPermissionInManifest
(
context
,
permissionNames
,
Manifest
.
permission
.
REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
))
...
...
@@ -197,7 +203,7 @@ public class PermissionUtils {
break
;
case
PermissionConstants
.
PERMISSION_GROUP_ACTIVITY_RECOGNITION
:
// The AC
CESS_MEDIA_LOCA
TION permission is introduced in Android Q, meaning we should
// The AC
TIVITY_RECOGNI
TION permission is introduced in Android Q, meaning we should
// not handle permissions on pre Android Q devices.
if
(
Build
.
VERSION
.
SDK_INT
<
Build
.
VERSION_CODES
.
Q
)
return
null
;
...
...
@@ -210,6 +216,14 @@ public class PermissionUtils {
if
(
hasPermissionInManifest
(
context
,
permissionNames
,
Manifest
.
permission
.
BLUETOOTH
))
permissionNames
.
add
(
Manifest
.
permission
.
BLUETOOTH
);
break
;
case
PermissionConstants
.
PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE
:
// The MANAGE_EXTERNAL_STORAGE permission is introduced in Android R, meaning we should
// not handle permissions on pre Android R devices.
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
R
&&
hasPermissionInManifest
(
context
,
permissionNames
,
Manifest
.
permission
.
MANAGE_EXTERNAL_STORAGE
))
permissionNames
.
add
(
Manifest
.
permission
.
MANAGE_EXTERNAL_STORAGE
);
break
;
case
PermissionConstants
.
PERMISSION_GROUP_NOTIFICATION
:
case
PermissionConstants
.
PERMISSION_GROUP_MEDIA_LIBRARY
:
case
PermissionConstants
.
PERMISSION_GROUP_PHOTOS
:
...
...
permission_handler/example/android/app/build.gradle
View file @
49acc864
...
...
@@ -25,7 +25,7 @@ apply plugin: 'com.android.application'
apply
from:
"$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android
{
compileSdkVersion
29
compileSdkVersion
30
lintOptions
{
disable
'InvalidPackage'
...
...
permission_handler/example/android/app/src/main/AndroidManifest.xml
View file @
49acc864
...
...
@@ -63,6 +63,9 @@
<!-- Permissions options for the `bluetooth` group -->
<uses-permission
android:name=
"android.permission.BLUETOOTH"
/>
<!-- Permissions options for the `manage external storage` group -->
<uses-permission
android:name=
"android.permission.MANAGE_EXTERNAL_STORAGE"
/>
<application
android:name=
"io.flutter.app.FlutterApplication"
android:icon=
"@mipmap/ic_launcher"
...
...
permission_handler/example/lib/plugin_example/permission_list.dart
View file @
49acc864
...
...
@@ -20,7 +20,8 @@ class PermissionList extends StatelessWidget {
permission
!=
Permission
.
storage
&&
permission
!=
Permission
.
ignoreBatteryOptimizations
&&
permission
!=
Permission
.
accessMediaLocation
&&
permission
!=
Permission
.
activityRecognition
;
permission
!=
Permission
.
activityRecognition
&&
permission
!=
Permission
.
manageExternalStorage
;
}
else
{
return
permission
!=
Permission
.
unknown
&&
permission
!=
Permission
.
mediaLibrary
&&
...
...
permission_handler/ios/Classes/PermissionHandlerEnums.h
View file @
49acc864
...
...
@@ -118,6 +118,7 @@ typedef NS_ENUM(int, PermissionGroup) {
PermissionGroupActivityRecognition
,
PermissionGroupUnknown
,
PermissionGroupBluetooth
,
PermissionGroupManageExternalStorage
};
typedef
NS_ENUM
(
int
,
PermissionStatus
)
{
...
...
permission_handler/pubspec.yaml
View file @
49acc864
name
:
permission_handler
description
:
Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.
version
:
6.1.3
version
:
7.0.0
homepage
:
https://github.com/baseflowit/flutter-permission-handler
flutter
:
...
...
@@ -16,7 +16,7 @@ dependencies:
flutter
:
sdk
:
flutter
meta
:
^1.3.0
permission_handler_platform_interface
:
^3.
1.3
permission_handler_platform_interface
:
^3.
2.0
dev_dependencies
:
flutter_test
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment