Merge "Allow the FGS with soft denied permission to start" into udc-dev
This commit is contained in:
@@ -18,6 +18,7 @@ package android.app;
|
|||||||
|
|
||||||
import static android.app.AppOpsManager.MODE_ALLOWED;
|
import static android.app.AppOpsManager.MODE_ALLOWED;
|
||||||
import static android.app.AppOpsManager.MODE_FOREGROUND;
|
import static android.app.AppOpsManager.MODE_FOREGROUND;
|
||||||
|
import static android.app.AppOpsManager.MODE_IGNORED;
|
||||||
import static android.content.pm.PackageManager.PERMISSION_DENIED;
|
import static android.content.pm.PackageManager.PERMISSION_DENIED;
|
||||||
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
||||||
import static android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA;
|
import static android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA;
|
||||||
@@ -1078,9 +1079,9 @@ public abstract class ForegroundServiceTypePolicy {
|
|||||||
int checkPermission(@NonNull Context context, @NonNull String name, int callerUid,
|
int checkPermission(@NonNull Context context, @NonNull String name, int callerUid,
|
||||||
int callerPid, String packageName, boolean allowWhileInUse) {
|
int callerPid, String packageName, boolean allowWhileInUse) {
|
||||||
// Simple case, check if it's already granted.
|
// Simple case, check if it's already granted.
|
||||||
@PackageManager.PermissionResult int result;
|
@PermissionCheckerManager.PermissionResult int result;
|
||||||
if ((result = PermissionChecker.checkPermissionForPreflight(context, name,
|
if ((result = PermissionChecker.checkPermissionForPreflight(context, name, callerPid,
|
||||||
callerPid, callerUid, packageName)) == PERMISSION_GRANTED) {
|
callerUid, packageName)) == PermissionCheckerManager.PERMISSION_GRANTED) {
|
||||||
return PERMISSION_GRANTED;
|
return PERMISSION_GRANTED;
|
||||||
}
|
}
|
||||||
if (allowWhileInUse && result == PermissionCheckerManager.PERMISSION_SOFT_DENIED) {
|
if (allowWhileInUse && result == PermissionCheckerManager.PERMISSION_SOFT_DENIED) {
|
||||||
@@ -1093,6 +1094,13 @@ public abstract class ForegroundServiceTypePolicy {
|
|||||||
if (currentMode == MODE_FOREGROUND) {
|
if (currentMode == MODE_FOREGROUND) {
|
||||||
// It's in foreground only mode and we're allowing while-in-use.
|
// It's in foreground only mode and we're allowing while-in-use.
|
||||||
return PERMISSION_GRANTED;
|
return PERMISSION_GRANTED;
|
||||||
|
} else if (currentMode == MODE_IGNORED) {
|
||||||
|
// If it's soft denied with the mode "ignore", semantically it's a silent
|
||||||
|
// failure and no exception should be thrown, we might not want to allow
|
||||||
|
// the FGS. However, since the user has agreed with this permission
|
||||||
|
// (otherwise it's going to be a hard denial), and we're allowing
|
||||||
|
// while-in-use here, it's safe to allow the FGS run here.
|
||||||
|
return PERMISSION_GRANTED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user