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
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 {
permissionManager
.
checkPermissionStatus
(
permission
,
applicationContext
,
activity
,
result:
:
success
,
(
String
errorCode
,
String
errorDescription
)
->
result
.
error
(
errorCode
,
errorDescription
,
null
));
result:
:
success
);
break
;
}
case
"requestPermissions"
:
...
...
permission_handler/android/src/main/java/com/baseflow/permissionhandler/PermissionConstants.java
View file @
8d21b7a3
...
...
@@ -10,6 +10,7 @@ final class PermissionConstants {
static
final
int
PERMISSION_CODE
=
24
;
static
final
int
PERMISSION_CODE_IGNORE_BATTERY_OPTIMIZATIONS
=
209
;
static
final
int
PERMISSION_CODE_MANAGE_EXTERNAL_STORAGE
=
210
;
static
final
int
PERMISSION_CODE_SYSTEM_ALERT_WINDOW
=
211
;
//PERMISSION_GROUP
static
final
int
PERMISSION_GROUP_CALENDAR
=
0
;
...
...
@@ -35,6 +36,7 @@ final class PermissionConstants {
static
final
int
PERMISSION_GROUP_UNKNOWN
=
20
;
static
final
int
PERMISSION_GROUP_BLUETOOTH
=
21
;
static
final
int
PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE
=
22
;
static
final
int
PERMISSION_GROUP_SYSTEM_ALERT_WINDOW
=
23
;
@Retention
(
RetentionPolicy
.
SOURCE
)
@IntDef
({
...
...
@@ -59,7 +61,8 @@ final class PermissionConstants {
PERMISSION_GROUP_ACTIVITY_RECOGNITION
,
PERMISSION_GROUP_UNKNOWN
,
PERMISSION_GROUP_BLUETOOTH
,
PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE
PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE
,
PERMISSION_GROUP_SYSTEM_ALERT_WINDOW
})
@interface
PermissionGroup
{
}
...
...
@@ -95,4 +98,4 @@ final class PermissionConstants {
})
@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;
final
class
PermissionManager
implements
PluginRegistry
.
ActivityResultListener
,
PluginRegistry
.
RequestPermissionsResultListener
{
@Nullable
private
ErrorCallback
errorCallback
;
@Nullable
private
RequestPermissionsSuccessCallback
successCallback
;
@Nullable
...
...
@@ -38,7 +35,9 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
@Override
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
;
}
...
...
@@ -55,6 +54,15 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
?
PermissionConstants
.
PERMISSION_STATUS_GRANTED
:
PermissionConstants
.
PERMISSION_STATUS_DENIED
;
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
{
return
false
;
}
...
...
@@ -154,14 +162,11 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
void
checkPermissionStatus
(
@PermissionConstants
.
PermissionGroup
int
permission
,
Context
context
,
Activity
activity
,
CheckPermissionsSuccessCallback
successCallback
,
ErrorCallback
errorCallback
)
{
CheckPermissionsSuccessCallback
successCallback
)
{
successCallback
.
onSuccess
(
determinePermissionStatus
(
permission
,
context
,
activity
));
context
));
}
void
requestPermissions
(
...
...
@@ -185,14 +190,13 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
return
;
}
this
.
errorCallback
=
errorCallback
;
this
.
successCallback
=
successCallback
;
this
.
activity
=
activity
;
this
.
requestResults
=
new
HashMap
<>();
ArrayList
<
String
>
permissionsToRequest
=
new
ArrayList
<>();
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
(!
requestResults
.
containsKey
(
permission
))
{
requestResults
.
put
(
permission
,
PermissionConstants
.
PERMISSION_STATUS_GRANTED
);
...
...
@@ -233,6 +237,10 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
executeIntent
(
Settings
.
ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
,
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
{
permissionsToRequest
.
addAll
(
names
);
}
...
...
@@ -257,8 +265,7 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
@PermissionConstants
.
PermissionStatus
private
int
determinePermissionStatus
(
@PermissionConstants
.
PermissionGroup
int
permission
,
Context
context
,
@Nullable
Activity
activity
)
{
Context
context
)
{
if
(
permission
==
PermissionConstants
.
PERMISSION_GROUP_NOTIFICATION
)
{
return
checkNotificationPermissionStatus
(
context
);
...
...
@@ -328,6 +335,14 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
:
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
);
if
(
permissionStatus
!=
PackageManager
.
PERMISSION_GRANTED
)
{
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 {
return
PermissionConstants
.
PERMISSION_GROUP_ACTIVITY_RECOGNITION
;
case
Manifest
.
permission
.
MANAGE_EXTERNAL_STORAGE
:
return
PermissionConstants
.
PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE
;
case
Manifest
.
permission
.
SYSTEM_ALERT_WINDOW
:
return
PermissionConstants
.
PERMISSION_GROUP_SYSTEM_ALERT_WINDOW
;
default
:
return
PermissionConstants
.
PERMISSION_GROUP_UNKNOWN
;
}
...
...
@@ -224,6 +226,11 @@ public class PermissionUtils {
permissionNames
.
add
(
Manifest
.
permission
.
MANAGE_EXTERNAL_STORAGE
);
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_MEDIA_LIBRARY
:
case
PermissionConstants
.
PERMISSION_GROUP_PHOTOS
:
...
...
permission_handler/example/android/app/src/main/AndroidManifest.xml
View file @
8d21b7a3
...
...
@@ -66,6 +66,9 @@
<!-- Permissions options for the `manage external storage` group -->
<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
android:name=
"io.flutter.app.FlutterApplication"
android:icon=
"@mipmap/ic_launcher"
...
...
permission_handler/ios/Classes/PermissionHandlerEnums.h
View file @
8d21b7a3
...
...
@@ -118,7 +118,8 @@ typedef NS_ENUM(int, PermissionGroup) {
PermissionGroupActivityRecognition
,
PermissionGroupUnknown
,
PermissionGroupBluetooth
,
PermissionGroupManageExternalStorage
PermissionGroupManageExternalStorage
,
PermissionGroupSystemAlertWindow
};
typedef
NS_ENUM
(
int
,
PermissionStatus
)
{
...
...
permission_handler/pubspec.yaml
View file @
8d21b7a3
name
:
permission_handler
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
flutter
:
...
...
@@ -16,7 +16,7 @@ dependencies:
flutter
:
sdk
:
flutter
meta
:
^1.3.0
permission_handler_platform_interface
:
^3.
2
.0
permission_handler_platform_interface
:
^3.
3
.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