Commit c4fa34bb by Maurits van Beusekom Committed by GitHub

Merge pull request #234 from Baseflow/bug/issue_233

Fallback on application context if activity is null
parents f3d2fd81 43edc53b
...@@ -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,
activity); applicationContext);
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": {
......
...@@ -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);
......
...@@ -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;
......
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) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment