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
dc6beac0
Unverified
Commit
dc6beac0
authored
Nov 06, 2019
by
Frank Gregor
Committed by
GitHub
Nov 06, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1 from BaseflowIT/develop
Sync original repo into fork
parents
f24a2aa1
9dfed046
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
137 additions
and
9 deletions
+137
-9
CONTRIBUTING.md
+1
-1
README.md
+4
-0
android/src/main/java/com/baseflow/permissionhandler/PermissionHandlerPlugin.java
+24
-7
example/ios/Runner/Runner.entitlements
+8
-0
ios/Classes/PermissionHandlerEnums.h
+1
-0
ios/Classes/PermissionManager.h
+1
-0
ios/Classes/PermissionManager.m
+2
-0
ios/Classes/strategies/NotificationPermissionStrategy.h
+14
-0
ios/Classes/strategies/NotificationPermissionStrategy.m
+75
-0
lib/src/permission_enums.dart
+7
-1
No files found.
CONTRIBUTING.md
View file @
dc6beac0
...
...
@@ -37,7 +37,7 @@ We really appreciate contributions via GitHub pull requests. To contribute take
*
Apply your changes
*
Verify your changes and fix potential warnings/ errors:
*
Check formatting:
`flutter format .`
*
Run static analyses:
`flutter analyze
s
`
*
Run static analyses:
`flutter analyze`
*
Run unit-tests:
`flutter test`
*
Commit your changes:
`git commit -am "<your informative commit message>"`
*
Push changes to your fork:
`git push origin <name_of_your_branch>`
...
...
README.md
View file @
dc6beac0
...
...
@@ -169,6 +169,10 @@ enum PermissionGroup {
/// Android: None
/// iOS: MPMediaLibrary
mediaLibrary
/// Android: Check notification enable
/// iOS: Check and request notification permission
notification
}
```
...
...
android/src/main/java/com/baseflow/permissionhandler/PermissionHandlerPlugin.java
View file @
dc6beac0
...
...
@@ -19,6 +19,7 @@ import android.telephony.TelephonyManager;
import
android.text.TextUtils
;
import
android.util.Log
;
import
androidx.core.app.NotificationManagerCompat
;
import
io.flutter.plugin.common.PluginRegistry.ActivityResultListener
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
...
...
@@ -60,7 +61,8 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
private
static
final
int
PERMISSION_GROUP_SPEECH
=
13
;
private
static
final
int
PERMISSION_GROUP_STORAGE
=
14
;
private
static
final
int
PERMISSION_GROUP_IGNORE_BATTERY_OPTIMIZATIONS
=
15
;
private
static
final
int
PERMISSION_GROUP_UNKNOWN
=
16
;
private
static
final
int
PERMISSION_GROUP_NOTIFICATION
=
16
;
private
static
final
int
PERMISSION_GROUP_UNKNOWN
=
17
;
private
PermissionHandlerPlugin
(
Registrar
mRegistrar
)
{
this
.
mRegistrar
=
mRegistrar
;
...
...
@@ -84,6 +86,7 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
PERMISSION_GROUP_SPEECH
,
PERMISSION_GROUP_STORAGE
,
PERMISSION_GROUP_IGNORE_BATTERY_OPTIMIZATIONS
,
PERMISSION_GROUP_NOTIFICATION
,
PERMISSION_GROUP_UNKNOWN
,
})
private
@interface
PermissionGroup
{
...
...
@@ -250,6 +253,16 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
@PermissionStatus
private
int
checkPermissionStatus
(
@PermissionGroup
int
permission
)
{
final
Context
context
=
mRegistrar
.
activity
()
==
null
?
mRegistrar
.
activeContext
()
:
mRegistrar
.
activity
();
if
(
context
==
null
)
{
Log
.
d
(
LOG_TAG
,
"Unable to detect current Activity or App Context."
);
return
PERMISSION_STATUS_UNKNOWN
;
}
if
(
permission
==
PERMISSION_GROUP_NOTIFICATION
)
{
return
checkNotificationPermissionStatus
(
context
);
}
final
List
<
String
>
names
=
getManifestNames
(
permission
);
if
(
names
==
null
)
{
...
...
@@ -264,12 +277,6 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
return
PERMISSION_STATUS_UNKNOWN
;
}
final
Context
context
=
mRegistrar
.
activity
()
==
null
?
mRegistrar
.
activeContext
()
:
mRegistrar
.
activity
();
if
(
context
==
null
)
{
Log
.
d
(
LOG_TAG
,
"Unable to detect current Activity or App Context."
);
return
PERMISSION_STATUS_UNKNOWN
;
}
final
boolean
targetsMOrHigher
=
context
.
getApplicationInfo
().
targetSdkVersion
>=
VERSION_CODES
.
M
;
for
(
String
name
:
names
)
{
...
...
@@ -655,6 +662,7 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
permissionNames
.
add
(
Manifest
.
permission
.
REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
);
break
;
case
PERMISSION_GROUP_NOTIFICATION:
case
PERMISSION_GROUP_MEDIA_LIBRARY:
case
PERMISSION_GROUP_PHOTOS:
case
PERMISSION_GROUP_REMINDERS:
...
...
@@ -726,4 +734,13 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
return
!
TextUtils
.
isEmpty
(
locationProviders
);
}
}
private
int
checkNotificationPermissionStatus
(
Context
context
)
{
NotificationManagerCompat
manager
=
NotificationManagerCompat
.
from
(
context
);
boolean
isGranted
=
manager
.
areNotificationsEnabled
();
if
(
isGranted
)
{
return
PERMISSION_STATUS_GRANTED
;
}
return
PERMISSION_STATUS_DENIED
;
}
}
example/ios/Runner/Runner.entitlements
0 → 100644
View file @
dc6beac0
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist
version=
"1.0"
>
<dict>
<key>
com.apple.security.application-groups
</key>
<array/>
</dict>
</plist>
ios/Classes/PermissionHandlerEnums.h
View file @
dc6beac0
...
...
@@ -22,6 +22,7 @@ typedef NS_ENUM(int, PermissionGroup) {
PermissionGroupSpeech
,
PermissionGroupStorage
,
PermissionGroupIgnoreBatteryOptimizations
,
PermissionGroupNotification
,
PermissionGroupUnknown
,
};
...
...
ios/Classes/PermissionManager.h
View file @
dc6beac0
...
...
@@ -20,6 +20,7 @@
#import "SensorPermissionStrategy.h"
#import "SpeechPermissionStrategy.h"
#import "UnknownPermissionStrategy.h"
#import "NotificationPermissionStrategy.h"
#import "PermissionHandlerEnums.h"
#import "Codec.h"
...
...
ios/Classes/PermissionManager.m
View file @
dc6beac0
...
...
@@ -99,6 +99,8 @@
return
[
SensorPermissionStrategy
new
];
case
PermissionGroupSpeech
:
return
[
SpeechPermissionStrategy
new
];
case
PermissionGroupNotification
:
return
[
NotificationPermissionStrategy
new
];
default
:
return
[
UnknownPermissionStrategy
new
];
}
...
...
ios/Classes/strategies/NotificationPermissionStrategy.h
0 → 100644
View file @
dc6beac0
//
// NotificationPermissionStrategy.h
// permission_handler
//
// Created by Tong on 2019/10/21.
//
#import <Foundation/Foundation.h>
#import <UserNotifications/UserNotifications.h>
#import "PermissionStrategy.h"
@interface
NotificationPermissionStrategy
:
NSObject
<
PermissionStrategy
>
@end
ios/Classes/strategies/NotificationPermissionStrategy.m
0 → 100644
View file @
dc6beac0
//
// NotificationPermissionStrategy.m
// permission_handler
//
// Created by Tong on 2019/10/21.
//
#import "NotificationPermissionStrategy.h"
@implementation
NotificationPermissionStrategy
-
(
PermissionStatus
)
checkPermissionStatus
:(
PermissionGroup
)
permission
{
return
[
NotificationPermissionStrategy
permissionStatus
];
}
-
(
ServiceStatus
)
checkServiceStatus
:(
PermissionGroup
)
permission
{
return
ServiceStatusNotApplicable
;
}
-
(
void
)
requestPermission
:(
PermissionGroup
)
permission
completionHandler
:(
PermissionStatusHandler
)
completionHandler
{
PermissionStatus
status
=
[
self
checkPermissionStatus
:
permission
];
if
(
status
!=
PermissionStatusUnknown
)
{
completionHandler
(
status
);
return
;
}
dispatch_async
(
dispatch_get_main_queue
(),
^
{
if
(
@available
(
iOS
10
.
0
,
*
))
{
UNUserNotificationCenter
*
center
=
[
UNUserNotificationCenter
currentNotificationCenter
];
UNAuthorizationOptions
authorizationOptions
=
0
;
authorizationOptions
+=
UNAuthorizationOptionSound
;
authorizationOptions
+=
UNAuthorizationOptionAlert
;
authorizationOptions
+=
UNAuthorizationOptionBadge
;
[
center
requestAuthorizationWithOptions
:(
authorizationOptions
)
completionHandler
:
^
(
BOOL
granted
,
NSError
*
_Nullable
error
)
{
if
(
!
granted
||
error
!=
nil
)
{
completionHandler
(
PermissionStatusDenied
);
return
;
}
}];
}
else
{
UIUserNotificationType
notificationTypes
=
0
;
notificationTypes
|=
UIUserNotificationTypeSound
;
notificationTypes
|=
UIUserNotificationTypeAlert
;
notificationTypes
|=
UIUserNotificationTypeBadge
;
UIUserNotificationSettings
*
settings
=
[
UIUserNotificationSettings
settingsForTypes
:
notificationTypes
categories
:
nil
];
[[
UIApplication
sharedApplication
]
registerUserNotificationSettings
:
settings
];
}
[[
UIApplication
sharedApplication
]
registerForRemoteNotifications
];
completionHandler
(
PermissionStatusGranted
);
});
}
+
(
PermissionStatus
)
permissionStatus
{
__block
PermissionStatus
permissionStatus
=
PermissionStatusGranted
;
if
(
@available
(
iOS
10
,
*
))
{
dispatch_semaphore_t
sem
=
dispatch_semaphore_create
(
0
);
[[
UNUserNotificationCenter
currentNotificationCenter
]
getNotificationSettingsWithCompletionHandler
:
^
(
UNNotificationSettings
*
_Nonnull
settings
)
{
if
(
settings
.
authorizationStatus
==
UNAuthorizationStatusDenied
)
{
permissionStatus
=
PermissionStatusDenied
;
}
else
if
(
settings
.
authorizationStatus
==
UNAuthorizationStatusNotDetermined
)
{
permissionStatus
=
PermissionStatusUnknown
;
}
dispatch_semaphore_signal
(
sem
);
}];
dispatch_semaphore_wait
(
sem
,
DISPATCH_TIME_FOREVER
);
}
else
if
(
@available
(
iOS
8
,
*
))
{
UIUserNotificationSettings
*
setting
=
[[
UIApplication
sharedApplication
]
currentUserNotificationSettings
];
if
(
setting
.
types
==
UIUserNotificationTypeNone
)
permissionStatus
=
PermissionStatusDenied
;
}
else
{
UIRemoteNotificationType
type
=
[[
UIApplication
sharedApplication
]
enabledRemoteNotificationTypes
];
if
(
type
==
UIUserNotificationTypeNone
)
permissionStatus
=
PermissionStatusDenied
;
}
return
permissionStatus
;
}
@end
lib/src/permission_enums.dart
View file @
dc6beac0
...
...
@@ -149,8 +149,12 @@ class PermissionGroup {
static
const
PermissionGroup
ignoreBatteryOptimizations
=
PermissionGroup
.
_
(
15
);
/// Android: Notification
/// iOS: Notification
static
const
PermissionGroup
notification
=
PermissionGroup
.
_
(
16
);
/// The unknown permission only used for return type, never requested
static
const
PermissionGroup
unknown
=
PermissionGroup
.
_
(
1
6
);
static
const
PermissionGroup
unknown
=
PermissionGroup
.
_
(
1
7
);
static
const
List
<
PermissionGroup
>
values
=
<
PermissionGroup
>[
calendar
,
...
...
@@ -169,6 +173,7 @@ class PermissionGroup {
speech
,
storage
,
ignoreBatteryOptimizations
,
notification
,
unknown
,
];
...
...
@@ -189,6 +194,7 @@ class PermissionGroup {
'speech'
,
'storage'
,
'ignoreBatteryOptimizations'
,
'notification'
,
'unknown'
,
];
...
...
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