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
8d21b7a3
Unverified
Commit
8d21b7a3
authored
Apr 29, 2021
by
Maurits van Beusekom
Committed by
GitHub
Apr 29, 2021
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #529 from Baseflow/system_alert_window
Added 'SYSTEM_ALERT_WINDOW' permission
parents
65b51131
44dc776c
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
53 additions
and
25 deletions
+53
-25
permission_handler/CHANGELOG.md
+4
-0
permission_handler/android/src/main/java/com/baseflow/permissionhandler/MethodCallHandlerImpl.java
+1
-7
permission_handler/android/src/main/java/com/baseflow/permissionhandler/PermissionConstants.java
+6
-2
permission_handler/android/src/main/java/com/baseflow/permissionhandler/PermissionManager.java
+28
-13
permission_handler/android/src/main/java/com/baseflow/permissionhandler/PermissionUtils.java
+7
-0
permission_handler/example/android/app/src/main/AndroidManifest.xml
+3
-0
permission_handler/ios/Classes/PermissionHandlerEnums.h
+2
-1
permission_handler/pubspec.yaml
+2
-2
No files found.
permission_handler/CHANGELOG.md
View file @
8d21b7a3
## 7.1.0
*
Added support for the "SYSTEM_ALERT_WINDOW" permission on Android.
## 7.0.0
## 7.0.0
This release contains the following
**breaking changes**
:
This release contains the following
**breaking changes**
:
...
...
permission_handler/android/src/main/java/com/baseflow/permissionhandler/MethodCallHandlerImpl.java
View file @
8d21b7a3
...
@@ -58,13 +58,7 @@ final class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler {
...
@@ -58,13 +58,7 @@ final class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler {
permissionManager
.
checkPermissionStatus
(
permissionManager
.
checkPermissionStatus
(
permission
,
permission
,
applicationContext
,
applicationContext
,
activity
,
result:
:
success
);
result:
:
success
,
(
String
errorCode
,
String
errorDescription
)
->
result
.
error
(
errorCode
,
errorDescription
,
null
));
break
;
break
;
}
}
case
"requestPermissions"
:
case
"requestPermissions"
:
...
...
permission_handler/android/src/main/java/com/baseflow/permissionhandler/PermissionConstants.java
View file @
8d21b7a3
...
@@ -10,6 +10,7 @@ final class PermissionConstants {
...
@@ -10,6 +10,7 @@ final class PermissionConstants {
static
final
int
PERMISSION_CODE
=
24
;
static
final
int
PERMISSION_CODE
=
24
;
static
final
int
PERMISSION_CODE_IGNORE_BATTERY_OPTIMIZATIONS
=
209
;
static
final
int
PERMISSION_CODE_IGNORE_BATTERY_OPTIMIZATIONS
=
209
;
static
final
int
PERMISSION_CODE_MANAGE_EXTERNAL_STORAGE
=
210
;
static
final
int
PERMISSION_CODE_MANAGE_EXTERNAL_STORAGE
=
210
;
static
final
int
PERMISSION_CODE_SYSTEM_ALERT_WINDOW
=
211
;
//PERMISSION_GROUP
//PERMISSION_GROUP
static
final
int
PERMISSION_GROUP_CALENDAR
=
0
;
static
final
int
PERMISSION_GROUP_CALENDAR
=
0
;
...
@@ -35,6 +36,7 @@ final class PermissionConstants {
...
@@ -35,6 +36,7 @@ final class PermissionConstants {
static
final
int
PERMISSION_GROUP_UNKNOWN
=
20
;
static
final
int
PERMISSION_GROUP_UNKNOWN
=
20
;
static
final
int
PERMISSION_GROUP_BLUETOOTH
=
21
;
static
final
int
PERMISSION_GROUP_BLUETOOTH
=
21
;
static
final
int
PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE
=
22
;
static
final
int
PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE
=
22
;
static
final
int
PERMISSION_GROUP_SYSTEM_ALERT_WINDOW
=
23
;
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@IntDef
({
@IntDef
({
...
@@ -59,7 +61,8 @@ final class PermissionConstants {
...
@@ -59,7 +61,8 @@ final class PermissionConstants {
PERMISSION_GROUP_ACTIVITY_RECOGNITION
,
PERMISSION_GROUP_ACTIVITY_RECOGNITION
,
PERMISSION_GROUP_UNKNOWN
,
PERMISSION_GROUP_UNKNOWN
,
PERMISSION_GROUP_BLUETOOTH
,
PERMISSION_GROUP_BLUETOOTH
,
PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE
PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE
,
PERMISSION_GROUP_SYSTEM_ALERT_WINDOW
})
})
@interface
PermissionGroup
{
@interface
PermissionGroup
{
}
}
...
@@ -95,4 +98,4 @@ final class PermissionConstants {
...
@@ -95,4 +98,4 @@ final class PermissionConstants {
})
})
@interface
ServiceStatus
{
@interface
ServiceStatus
{
}
}
}
}
\ No newline at end of file
permission_handler/android/src/main/java/com/baseflow/permissionhandler/PermissionManager.java
View file @
8d21b7a3
...
@@ -26,9 +26,6 @@ import io.flutter.plugin.common.PluginRegistry;
...
@@ -26,9 +26,6 @@ import io.flutter.plugin.common.PluginRegistry;
final
class
PermissionManager
implements
PluginRegistry
.
ActivityResultListener
,
PluginRegistry
.
RequestPermissionsResultListener
{
final
class
PermissionManager
implements
PluginRegistry
.
ActivityResultListener
,
PluginRegistry
.
RequestPermissionsResultListener
{
@Nullable
@Nullable
private
ErrorCallback
errorCallback
;
@Nullable
private
RequestPermissionsSuccessCallback
successCallback
;
private
RequestPermissionsSuccessCallback
successCallback
;
@Nullable
@Nullable
...
@@ -38,7 +35,9 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
...
@@ -38,7 +35,9 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
@Override
@Override
public
boolean
onActivityResult
(
int
requestCode
,
int
resultCode
,
Intent
data
)
{
public
boolean
onActivityResult
(
int
requestCode
,
int
resultCode
,
Intent
data
)
{
if
(
requestCode
!=
PermissionConstants
.
PERMISSION_CODE_IGNORE_BATTERY_OPTIMIZATIONS
&&
requestCode
!=
PermissionConstants
.
PERMISSION_CODE_MANAGE_EXTERNAL_STORAGE
)
{
if
(
requestCode
!=
PermissionConstants
.
PERMISSION_CODE_IGNORE_BATTERY_OPTIMIZATIONS
&&
requestCode
!=
PermissionConstants
.
PERMISSION_CODE_MANAGE_EXTERNAL_STORAGE
&&
requestCode
!=
PermissionConstants
.
PERMISSION_CODE_SYSTEM_ALERT_WINDOW
)
{
return
false
;
return
false
;
}
}
...
@@ -55,6 +54,15 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
...
@@ -55,6 +54,15 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
?
PermissionConstants
.
PERMISSION_STATUS_GRANTED
?
PermissionConstants
.
PERMISSION_STATUS_GRANTED
:
PermissionConstants
.
PERMISSION_STATUS_DENIED
;
:
PermissionConstants
.
PERMISSION_STATUS_DENIED
;
permission
=
PermissionConstants
.
PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE
;
permission
=
PermissionConstants
.
PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE
;
}
else
if
(
requestCode
==
PermissionConstants
.
PERMISSION_CODE_SYSTEM_ALERT_WINDOW
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
)
{
status
=
Settings
.
canDrawOverlays
(
activity
)
?
PermissionConstants
.
PERMISSION_STATUS_GRANTED
:
PermissionConstants
.
PERMISSION_STATUS_DENIED
;
permission
=
PermissionConstants
.
PERMISSION_GROUP_SYSTEM_ALERT_WINDOW
;
}
else
{
return
false
;
}
}
else
{
}
else
{
return
false
;
return
false
;
}
}
...
@@ -154,14 +162,11 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
...
@@ -154,14 +162,11 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
void
checkPermissionStatus
(
void
checkPermissionStatus
(
@PermissionConstants
.
PermissionGroup
int
permission
,
@PermissionConstants
.
PermissionGroup
int
permission
,
Context
context
,
Context
context
,
Activity
activity
,
CheckPermissionsSuccessCallback
successCallback
)
{
CheckPermissionsSuccessCallback
successCallback
,
ErrorCallback
errorCallback
)
{
successCallback
.
onSuccess
(
determinePermissionStatus
(
successCallback
.
onSuccess
(
determinePermissionStatus
(
permission
,
permission
,
context
,
context
));
activity
));
}
}
void
requestPermissions
(
void
requestPermissions
(
...
@@ -185,14 +190,13 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
...
@@ -185,14 +190,13 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
return
;
return
;
}
}
this
.
errorCallback
=
errorCallback
;
this
.
successCallback
=
successCallback
;
this
.
successCallback
=
successCallback
;
this
.
activity
=
activity
;
this
.
activity
=
activity
;
this
.
requestResults
=
new
HashMap
<>();
this
.
requestResults
=
new
HashMap
<>();
ArrayList
<
String
>
permissionsToRequest
=
new
ArrayList
<>();
ArrayList
<
String
>
permissionsToRequest
=
new
ArrayList
<>();
for
(
Integer
permission
:
permissions
)
{
for
(
Integer
permission
:
permissions
)
{
@PermissionConstants
.
PermissionStatus
final
int
permissionStatus
=
determinePermissionStatus
(
permission
,
activity
,
activity
);
@PermissionConstants
.
PermissionStatus
final
int
permissionStatus
=
determinePermissionStatus
(
permission
,
activity
);
if
(
permissionStatus
==
PermissionConstants
.
PERMISSION_STATUS_GRANTED
)
{
if
(
permissionStatus
==
PermissionConstants
.
PERMISSION_STATUS_GRANTED
)
{
if
(!
requestResults
.
containsKey
(
permission
))
{
if
(!
requestResults
.
containsKey
(
permission
))
{
requestResults
.
put
(
permission
,
PermissionConstants
.
PERMISSION_STATUS_GRANTED
);
requestResults
.
put
(
permission
,
PermissionConstants
.
PERMISSION_STATUS_GRANTED
);
...
@@ -233,6 +237,10 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
...
@@ -233,6 +237,10 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
executeIntent
(
executeIntent
(
Settings
.
ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
,
Settings
.
ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
,
PermissionConstants
.
PERMISSION_CODE_MANAGE_EXTERNAL_STORAGE
);
PermissionConstants
.
PERMISSION_CODE_MANAGE_EXTERNAL_STORAGE
);
}
else
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
&&
permission
==
PermissionConstants
.
PERMISSION_GROUP_SYSTEM_ALERT_WINDOW
)
{
executeIntent
(
Settings
.
ACTION_MANAGE_OVERLAY_PERMISSION
,
PermissionConstants
.
PERMISSION_CODE_SYSTEM_ALERT_WINDOW
);
}
else
{
}
else
{
permissionsToRequest
.
addAll
(
names
);
permissionsToRequest
.
addAll
(
names
);
}
}
...
@@ -257,8 +265,7 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
...
@@ -257,8 +265,7 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
@PermissionConstants
.
PermissionStatus
@PermissionConstants
.
PermissionStatus
private
int
determinePermissionStatus
(
private
int
determinePermissionStatus
(
@PermissionConstants
.
PermissionGroup
int
permission
,
@PermissionConstants
.
PermissionGroup
int
permission
,
Context
context
,
Context
context
)
{
@Nullable
Activity
activity
)
{
if
(
permission
==
PermissionConstants
.
PERMISSION_GROUP_NOTIFICATION
)
{
if
(
permission
==
PermissionConstants
.
PERMISSION_GROUP_NOTIFICATION
)
{
return
checkNotificationPermissionStatus
(
context
);
return
checkNotificationPermissionStatus
(
context
);
...
@@ -328,6 +335,14 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
...
@@ -328,6 +335,14 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
:
PermissionConstants
.
PERMISSION_STATUS_DENIED
;
:
PermissionConstants
.
PERMISSION_STATUS_DENIED
;
}
}
if
(
permission
==
PermissionConstants
.
PERMISSION_GROUP_SYSTEM_ALERT_WINDOW
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
)
{
return
Settings
.
canDrawOverlays
(
context
)
?
PermissionConstants
.
PERMISSION_STATUS_GRANTED
:
PermissionConstants
.
PERMISSION_STATUS_DENIED
;
}
}
final
int
permissionStatus
=
ContextCompat
.
checkSelfPermission
(
context
,
name
);
final
int
permissionStatus
=
ContextCompat
.
checkSelfPermission
(
context
,
name
);
if
(
permissionStatus
!=
PackageManager
.
PERMISSION_GRANTED
)
{
if
(
permissionStatus
!=
PackageManager
.
PERMISSION_GRANTED
)
{
return
PermissionConstants
.
PERMISSION_STATUS_DENIED
;
return
PermissionConstants
.
PERMISSION_STATUS_DENIED
;
...
...
permission_handler/android/src/main/java/com/baseflow/permissionhandler/PermissionUtils.java
View file @
8d21b7a3
...
@@ -63,6 +63,8 @@ public class PermissionUtils {
...
@@ -63,6 +63,8 @@ public class PermissionUtils {
return
PermissionConstants
.
PERMISSION_GROUP_ACTIVITY_RECOGNITION
;
return
PermissionConstants
.
PERMISSION_GROUP_ACTIVITY_RECOGNITION
;
case
Manifest
.
permission
.
MANAGE_EXTERNAL_STORAGE
:
case
Manifest
.
permission
.
MANAGE_EXTERNAL_STORAGE
:
return
PermissionConstants
.
PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE
;
return
PermissionConstants
.
PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE
;
case
Manifest
.
permission
.
SYSTEM_ALERT_WINDOW
:
return
PermissionConstants
.
PERMISSION_GROUP_SYSTEM_ALERT_WINDOW
;
default
:
default
:
return
PermissionConstants
.
PERMISSION_GROUP_UNKNOWN
;
return
PermissionConstants
.
PERMISSION_GROUP_UNKNOWN
;
}
}
...
@@ -224,6 +226,11 @@ public class PermissionUtils {
...
@@ -224,6 +226,11 @@ public class PermissionUtils {
permissionNames
.
add
(
Manifest
.
permission
.
MANAGE_EXTERNAL_STORAGE
);
permissionNames
.
add
(
Manifest
.
permission
.
MANAGE_EXTERNAL_STORAGE
);
break
;
break
;
case
PermissionConstants
.
PERMISSION_GROUP_SYSTEM_ALERT_WINDOW
:
if
(
hasPermissionInManifest
(
context
,
permissionNames
,
Manifest
.
permission
.
SYSTEM_ALERT_WINDOW
))
permissionNames
.
add
(
Manifest
.
permission
.
SYSTEM_ALERT_WINDOW
);
break
;
case
PermissionConstants
.
PERMISSION_GROUP_NOTIFICATION
:
case
PermissionConstants
.
PERMISSION_GROUP_NOTIFICATION
:
case
PermissionConstants
.
PERMISSION_GROUP_MEDIA_LIBRARY
:
case
PermissionConstants
.
PERMISSION_GROUP_MEDIA_LIBRARY
:
case
PermissionConstants
.
PERMISSION_GROUP_PHOTOS
:
case
PermissionConstants
.
PERMISSION_GROUP_PHOTOS
:
...
...
permission_handler/example/android/app/src/main/AndroidManifest.xml
View file @
8d21b7a3
...
@@ -66,6 +66,9 @@
...
@@ -66,6 +66,9 @@
<!-- Permissions options for the `manage external storage` group -->
<!-- Permissions options for the `manage external storage` group -->
<uses-permission
android:name=
"android.permission.MANAGE_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.MANAGE_EXTERNAL_STORAGE"
/>
<!-- Permissions options for the `system alert windows` group -->
<uses-permission
android:name=
"android.permission.SYSTEM_ALERT_WINDOW"
/>
<application
<application
android:name=
"io.flutter.app.FlutterApplication"
android:name=
"io.flutter.app.FlutterApplication"
android:icon=
"@mipmap/ic_launcher"
android:icon=
"@mipmap/ic_launcher"
...
...
permission_handler/ios/Classes/PermissionHandlerEnums.h
View file @
8d21b7a3
...
@@ -118,7 +118,8 @@ typedef NS_ENUM(int, PermissionGroup) {
...
@@ -118,7 +118,8 @@ typedef NS_ENUM(int, PermissionGroup) {
PermissionGroupActivityRecognition
,
PermissionGroupActivityRecognition
,
PermissionGroupUnknown
,
PermissionGroupUnknown
,
PermissionGroupBluetooth
,
PermissionGroupBluetooth
,
PermissionGroupManageExternalStorage
PermissionGroupManageExternalStorage
,
PermissionGroupSystemAlertWindow
};
};
typedef
NS_ENUM
(
int
,
PermissionStatus
)
{
typedef
NS_ENUM
(
int
,
PermissionStatus
)
{
...
...
permission_handler/pubspec.yaml
View file @
8d21b7a3
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
:
7.
0
.0
version
:
7.
1
.0
homepage
:
https://github.com/baseflowit/flutter-permission-handler
homepage
:
https://github.com/baseflowit/flutter-permission-handler
flutter
:
flutter
:
...
@@ -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.
2
.0
permission_handler_platform_interface
:
^3.
3
.0
dev_dependencies
:
dev_dependencies
:
flutter_test
:
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