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
c4fa34bb
Unverified
Commit
c4fa34bb
authored
Mar 12, 2020
by
Maurits van Beusekom
Committed by
GitHub
Mar 12, 2020
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #234 from Baseflow/bug/issue_233
Fallback on application context if activity is null
parents
f3d2fd81
43edc53b
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
20 additions
and
22 deletions
+20
-22
permission_handler/android/src/main/java/com/baseflow/permissionhandler/MethodCallHandlerImpl.java
+6
-4
permission_handler/android/src/main/java/com/baseflow/permissionhandler/PermissionManager.java
+8
-12
permission_handler/android/src/main/java/com/baseflow/permissionhandler/PermissionUtils.java
+1
-0
permission_handler/android/src/main/java/com/baseflow/permissionhandler/ServiceManager.java
+5
-6
No files found.
permission_handler/android/src/main/java/com/baseflow/permissionhandler/MethodCallHandlerImpl.java
View file @
c4fa34bb
...
@@ -56,6 +56,7 @@ final class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler {
...
@@ -56,6 +56,7 @@ final class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler {
@PermissionConstants
.
PermissionStatus
final
int
permissionStatus
=
@PermissionConstants
.
PermissionStatus
final
int
permissionStatus
=
permissionManager
.
checkPermissionStatus
(
permissionManager
.
checkPermissionStatus
(
permission
,
permission
,
applicationContext
,
activity
);
activity
);
result
.
success
(
permissionStatus
);
result
.
success
(
permissionStatus
);
...
@@ -66,7 +67,7 @@ final class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler {
...
@@ -66,7 +67,7 @@ final class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler {
@PermissionConstants
.
ServiceStatus
final
int
serviceStatus
=
@PermissionConstants
.
ServiceStatus
final
int
serviceStatus
=
serviceManager
.
checkServiceStatus
(
serviceManager
.
checkServiceStatus
(
permission
,
permission
,
a
ctivity
);
a
pplicationContext
);
result
.
success
(
serviceStatus
);
result
.
success
(
serviceStatus
);
break
;
break
;
...
@@ -79,9 +80,10 @@ final class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler {
...
@@ -79,9 +80,10 @@ final class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler {
activityRegistry
,
activityRegistry
,
permissionRegistry
,
permissionRegistry
,
result:
:
success
,
result:
:
success
,
(
String
errorCode
,
String
errorDescription
)
->
{
(
String
errorCode
,
String
errorDescription
)
->
result
.
error
(
result
.
error
(
errorCode
,
errorDescription
,
null
);
errorCode
,
});
errorDescription
,
null
));
break
;
break
;
case
"shouldShowRequestPermissionRationale"
:
{
case
"shouldShowRequestPermissionRationale"
:
{
...
...
permission_handler/android/src/main/java/com/baseflow/permissionhandler/PermissionManager.java
View file @
c4fa34bb
...
@@ -44,17 +44,13 @@ final class PermissionManager {
...
@@ -44,17 +44,13 @@ final class PermissionManager {
@PermissionConstants
.
PermissionStatus
@PermissionConstants
.
PermissionStatus
int
checkPermissionStatus
(
int
checkPermissionStatus
(
@PermissionConstants
.
PermissionGroup
int
permission
,
@PermissionConstants
.
PermissionGroup
int
permission
,
Context
context
,
Activity
activity
)
{
Activity
activity
)
{
if
(
activity
==
null
)
{
Log
.
d
(
PermissionConstants
.
LOG_TAG
,
"Unable to detect current Activity or App Context."
);
return
PermissionConstants
.
PERMISSION_STATUS_UNKNOWN
;
}
if
(
permission
==
PermissionConstants
.
PERMISSION_GROUP_NOTIFICATION
)
{
if
(
permission
==
PermissionConstants
.
PERMISSION_GROUP_NOTIFICATION
)
{
return
checkNotificationPermissionStatus
(
activity
);
return
checkNotificationPermissionStatus
(
context
);
}
}
final
List
<
String
>
names
=
PermissionUtils
.
getManifestNames
(
activity
,
permission
);
final
List
<
String
>
names
=
PermissionUtils
.
getManifestNames
(
context
,
permission
);
if
(
names
==
null
)
{
if
(
names
==
null
)
{
Log
.
d
(
PermissionConstants
.
LOG_TAG
,
"No android specific permissions needed for: "
+
permission
);
Log
.
d
(
PermissionConstants
.
LOG_TAG
,
"No android specific permissions needed for: "
+
permission
);
...
@@ -68,14 +64,14 @@ final class PermissionManager {
...
@@ -68,14 +64,14 @@ final class PermissionManager {
return
PermissionConstants
.
PERMISSION_STATUS_UNKNOWN
;
return
PermissionConstants
.
PERMISSION_STATUS_UNKNOWN
;
}
}
final
boolean
targetsMOrHigher
=
activity
.
getApplicationInfo
().
targetSdkVersion
>=
Build
.
VERSION_CODES
.
M
;
final
boolean
targetsMOrHigher
=
context
.
getApplicationInfo
().
targetSdkVersion
>=
Build
.
VERSION_CODES
.
M
;
for
(
String
name
:
names
)
{
for
(
String
name
:
names
)
{
// Only handle them if the client app actually targets a API level greater than M.
// Only handle them if the client app actually targets a API level greater than M.
if
(
targetsMOrHigher
)
{
if
(
targetsMOrHigher
)
{
if
(
permission
==
PermissionConstants
.
PERMISSION_GROUP_IGNORE_BATTERY_OPTIMIZATIONS
)
{
if
(
permission
==
PermissionConstants
.
PERMISSION_GROUP_IGNORE_BATTERY_OPTIMIZATIONS
)
{
String
packageName
=
activity
.
getPackageName
();
String
packageName
=
context
.
getPackageName
();
PowerManager
pm
=
(
PowerManager
)
activity
.
getSystemService
(
Context
.
POWER_SERVICE
);
PowerManager
pm
=
(
PowerManager
)
context
.
getSystemService
(
Context
.
POWER_SERVICE
);
// PowerManager.isIgnoringBatteryOptimizations has been included in Android M first.
// PowerManager.isIgnoringBatteryOptimizations has been included in Android M first.
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
)
{
if
(
pm
!=
null
&&
pm
.
isIgnoringBatteryOptimizations
(
packageName
))
{
if
(
pm
!=
null
&&
pm
.
isIgnoringBatteryOptimizations
(
packageName
))
{
...
@@ -87,7 +83,7 @@ final class PermissionManager {
...
@@ -87,7 +83,7 @@ final class PermissionManager {
return
PermissionConstants
.
PERMISSION_STATUS_RESTRICTED
;
return
PermissionConstants
.
PERMISSION_STATUS_RESTRICTED
;
}
}
}
}
final
int
permissionStatus
=
ContextCompat
.
checkSelfPermission
(
activity
,
name
);
final
int
permissionStatus
=
ContextCompat
.
checkSelfPermission
(
context
,
name
);
if
(
permissionStatus
==
PackageManager
.
PERMISSION_DENIED
)
{
if
(
permissionStatus
==
PackageManager
.
PERMISSION_DENIED
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
&&
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
&&
PermissionUtils
.
isNeverAskAgainSelected
(
activity
,
permission
))
{
PermissionUtils
.
isNeverAskAgainSelected
(
activity
,
permission
))
{
...
@@ -125,7 +121,7 @@ final class PermissionManager {
...
@@ -125,7 +121,7 @@ final class PermissionManager {
Map
<
Integer
,
Integer
>
requestResults
=
new
HashMap
<>();
Map
<
Integer
,
Integer
>
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
=
checkPermissionStatus
(
permission
,
activity
);
@PermissionConstants
.
PermissionStatus
final
int
permissionStatus
=
checkPermissionStatus
(
permission
,
activity
.
getApplicationContext
(),
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
);
...
...
permission_handler/android/src/main/java/com/baseflow/permissionhandler/PermissionUtils.java
View file @
c4fa34bb
...
@@ -11,6 +11,7 @@ import android.util.Log;
...
@@ -11,6 +11,7 @@ import android.util.Log;
import
androidx.annotation.RequiresApi
;
import
androidx.annotation.RequiresApi
;
import
androidx.core.app.ActivityCompat
;
import
androidx.core.app.ActivityCompat
;
import
androidx.core.content.ContextCompat
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Arrays
;
...
...
permission_handler/android/src/main/java/com/baseflow/permissionhandler/ServiceManager.java
View file @
c4fa34bb
package
com
.
baseflow
.
permissionhandler
;
package
com
.
baseflow
.
permissionhandler
;
import
android.app.Activity
;
import
android.content.Context
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.content.Intent
;
import
android.content.pm.PackageManager
;
import
android.content.pm.PackageManager
;
...
@@ -21,8 +20,8 @@ final class ServiceManager {
...
@@ -21,8 +20,8 @@ final class ServiceManager {
@PermissionConstants
.
ServiceStatus
@PermissionConstants
.
ServiceStatus
int
checkServiceStatus
(
int
checkServiceStatus
(
int
permission
,
int
permission
,
Activity
activity
)
{
Context
context
)
{
if
(
activity
==
null
)
{
if
(
context
==
null
)
{
Log
.
d
(
PermissionConstants
.
LOG_TAG
,
"Unable to detect current Activity or App Context."
);
Log
.
d
(
PermissionConstants
.
LOG_TAG
,
"Unable to detect current Activity or App Context."
);
return
PermissionConstants
.
SERVICE_STATUS_UNKNOWN
;
return
PermissionConstants
.
SERVICE_STATUS_UNKNOWN
;
}
}
...
@@ -30,18 +29,18 @@ final class ServiceManager {
...
@@ -30,18 +29,18 @@ final class ServiceManager {
if
(
permission
==
PermissionConstants
.
PERMISSION_GROUP_LOCATION
||
if
(
permission
==
PermissionConstants
.
PERMISSION_GROUP_LOCATION
||
permission
==
PermissionConstants
.
PERMISSION_GROUP_LOCATION_ALWAYS
||
permission
==
PermissionConstants
.
PERMISSION_GROUP_LOCATION_ALWAYS
||
permission
==
PermissionConstants
.
PERMISSION_GROUP_LOCATION_WHEN_IN_USE
)
{
permission
==
PermissionConstants
.
PERMISSION_GROUP_LOCATION_WHEN_IN_USE
)
{
return
isLocationServiceEnabled
(
activity
)
return
isLocationServiceEnabled
(
context
)
?
PermissionConstants
.
SERVICE_STATUS_ENABLED
?
PermissionConstants
.
SERVICE_STATUS_ENABLED
:
PermissionConstants
.
SERVICE_STATUS_DISABLED
;
:
PermissionConstants
.
SERVICE_STATUS_DISABLED
;
}
}
if
(
permission
==
PermissionConstants
.
PERMISSION_GROUP_PHONE
)
{
if
(
permission
==
PermissionConstants
.
PERMISSION_GROUP_PHONE
)
{
PackageManager
pm
=
activity
.
getPackageManager
();
PackageManager
pm
=
context
.
getPackageManager
();
if
(!
pm
.
hasSystemFeature
(
PackageManager
.
FEATURE_TELEPHONY
))
{
if
(!
pm
.
hasSystemFeature
(
PackageManager
.
FEATURE_TELEPHONY
))
{
return
PermissionConstants
.
SERVICE_STATUS_NOT_APPLICABLE
;
return
PermissionConstants
.
SERVICE_STATUS_NOT_APPLICABLE
;
}
}
TelephonyManager
telephonyManager
=
(
TelephonyManager
)
activity
TelephonyManager
telephonyManager
=
(
TelephonyManager
)
context
.
getSystemService
(
Context
.
TELEPHONY_SERVICE
);
.
getSystemService
(
Context
.
TELEPHONY_SERVICE
);
if
(
telephonyManager
==
null
||
telephonyManager
.
getPhoneType
()
==
TelephonyManager
.
PHONE_TYPE_NONE
)
{
if
(
telephonyManager
==
null
||
telephonyManager
.
getPhoneType
()
==
TelephonyManager
.
PHONE_TYPE_NONE
)
{
...
...
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