summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Achim Thesmann <achim@google.com> 2024-07-12 21:07:24 +0000
committer Achim Thesmann <achim@google.com> 2024-07-25 21:39:17 +0000
commitff59d618e3e4908e46ee2911fcf8319900f074c8 (patch)
tree3d4a7cd8d669f16bd06e9e61b3a38f96f7ef42f1
parentd066266ea817f58bd165eba805d9641cf268c9ac (diff)
Use the new enum value to check if we grant BAL permission
Test: atest BackgroundActivityLaunchTest BackgroundActivityStartContriller*Test Flag: com.android.window.flags.bal_additional_start_modes Bug: 352182359 Change-Id: I1eaaebd31c4e06c71f46b28094e444083892d6ad
-rw-r--r--services/core/java/com/android/server/wm/BackgroundActivityStartController.java28
1 files changed, 23 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/BackgroundActivityStartController.java b/services/core/java/com/android/server/wm/BackgroundActivityStartController.java
index 54024e92f95f..02c8a4999f4d 100644
--- a/services/core/java/com/android/server/wm/BackgroundActivityStartController.java
+++ b/services/core/java/com/android/server/wm/BackgroundActivityStartController.java
@@ -20,9 +20,11 @@ import static android.Manifest.permission.START_ACTIVITIES_FROM_BACKGROUND;
import static android.app.ActivityManager.PROCESS_STATE_NONEXISTENT;
import static android.app.ActivityOptions.BackgroundActivityStartMode;
import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED;
+import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOW_ALWAYS;
import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_COMPAT;
import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_DENIED;
import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED;
+import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE;
@@ -226,6 +228,21 @@ public class BackgroundActivityStartController {
};
}
+ static String balStartModeToString(@BackgroundActivityStartMode int startMode) {
+ return switch (startMode) {
+ case MODE_BACKGROUND_ACTIVITY_START_ALLOWED -> "MODE_BACKGROUND_ACTIVITY_START_ALLOWED";
+ case MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED ->
+ "MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED";
+ case MODE_BACKGROUND_ACTIVITY_START_COMPAT -> "MODE_BACKGROUND_ACTIVITY_START_COMPAT";
+ case MODE_BACKGROUND_ACTIVITY_START_DENIED -> "MODE_BACKGROUND_ACTIVITY_START_DENIED";
+ case MODE_BACKGROUND_ACTIVITY_START_ALLOW_ALWAYS ->
+ "MODE_BACKGROUND_ACTIVITY_START_ALWAYS";
+ case MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE ->
+ "MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE";
+ default -> "MODE_BACKGROUND_ACTIVITY_START_ALLOWED(" + startMode + ")";
+ };
+ }
+
@GuardedBy("mService.mGlobalLock")
private final HashMap<Integer, FinishedActivityEntry> mTaskIdToFinishedActivity =
new HashMap<>();
@@ -464,10 +481,6 @@ public class BackgroundActivityStartController {
this.mResultForRealCaller = resultForRealCaller;
}
- public boolean isPendingIntentBalAllowedByPermission() {
- return PendingIntentRecord.isPendingIntentBalAllowedByPermission(mCheckedOptions);
- }
-
public boolean callerExplicitOptInOrAutoOptIn() {
if (mAutoOptInCaller) {
return !callerExplicitOptOut();
@@ -528,6 +541,8 @@ public class BackgroundActivityStartController {
sb.append("; balAllowedByPiCreatorWithHardening: ")
.append(mBalAllowedByPiCreatorWithHardening);
sb.append("; resultIfPiCreatorAllowsBal: ").append(mResultForCaller);
+ sb.append("; callerStartMode: ").append(balStartModeToString(
+ mCheckedOptions.getPendingIntentBackgroundActivityStartMode()));
sb.append("; hasRealCaller: ").append(hasRealCaller());
sb.append("; isCallForResult: ").append(mIsCallForResult);
sb.append("; isPendingIntent: ").append(isPendingIntent());
@@ -553,6 +568,8 @@ public class BackgroundActivityStartController {
}
sb.append("; balAllowedByPiSender: ").append(mBalAllowedByPiSender);
sb.append("; resultIfPiSenderAllowsBal: ").append(mResultForRealCaller);
+ sb.append("; realCallerStartMode: ").append(balStartModeToString(
+ mCheckedOptions.getPendingIntentCreatorBackgroundActivityStartMode()));
}
// features
sb.append("; balImproveRealCallerVisibilityCheck: ")
@@ -949,7 +966,8 @@ public class BackgroundActivityStartController {
}
}
- if (state.isPendingIntentBalAllowedByPermission()
+ if (state.mCheckedOptions.getPendingIntentBackgroundActivityStartMode()
+ == MODE_BACKGROUND_ACTIVITY_START_ALLOW_ALWAYS
&& hasBalPermission(state.mRealCallingUid, state.mRealCallingPid)) {
return new BalVerdict(BAL_ALLOW_PERMISSION,
/*background*/ false,