summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jing Ji <jji@google.com> 2023-05-11 20:58:41 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-05-11 20:58:41 +0000
commit0b740a1388813089d24dbeeda1c48ea3fe8a022d (patch)
tree2020bea5f81bb387d4ad068f22ab295ad4f59a4c
parentb5cce772396bf50c4483e00493e65a23175bce0f (diff)
parent4990af744b3d7d5dd052e5de54a5858b1cc140d0 (diff)
Merge "Allow the FGS with soft denied permission to start" into udc-dev
-rw-r--r--core/java/android/app/ForegroundServiceTypePolicy.java14
1 files changed, 11 insertions, 3 deletions
diff --git a/core/java/android/app/ForegroundServiceTypePolicy.java b/core/java/android/app/ForegroundServiceTypePolicy.java
index c0c59a24dd8d..19b31417e789 100644
--- a/core/java/android/app/ForegroundServiceTypePolicy.java
+++ b/core/java/android/app/ForegroundServiceTypePolicy.java
@@ -18,6 +18,7 @@ package android.app;
import static android.app.AppOpsManager.MODE_ALLOWED;
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_GRANTED;
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 callerPid, String packageName, boolean allowWhileInUse) {
// Simple case, check if it's already granted.
- @PackageManager.PermissionResult int result;
- if ((result = PermissionChecker.checkPermissionForPreflight(context, name,
- callerPid, callerUid, packageName)) == PERMISSION_GRANTED) {
+ @PermissionCheckerManager.PermissionResult int result;
+ if ((result = PermissionChecker.checkPermissionForPreflight(context, name, callerPid,
+ callerUid, packageName)) == PermissionCheckerManager.PERMISSION_GRANTED) {
return PERMISSION_GRANTED;
}
if (allowWhileInUse && result == PermissionCheckerManager.PERMISSION_SOFT_DENIED) {
@@ -1093,6 +1094,13 @@ public abstract class ForegroundServiceTypePolicy {
if (currentMode == MODE_FOREGROUND) {
// It's in foreground only mode and we're allowing while-in-use.
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;
}
}
}