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
44dc776c
Commit
44dc776c
authored
Apr 23, 2021
by
Jan-Derk
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added 'SYSTEM_ALERT_WINDOW' permission
parent
84977c82
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 @
44dc776c
## 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 @
44dc776c
...
@@ -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 @
44dc776c
...
@@ -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 @
44dc776c
...
@@ -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 @
44dc776c
...
@@ -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 @
44dc776c
...
@@ -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 @
44dc776c
...
@@ -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 @
44dc776c
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