diff options
| author | 2024-07-12 21:07:24 +0000 | |
|---|---|---|
| committer | 2024-07-25 21:39:17 +0000 | |
| commit | ff59d618e3e4908e46ee2911fcf8319900f074c8 (patch) | |
| tree | 3d4a7cd8d669f16bd06e9e61b3a38f96f7ef42f1 | |
| parent | d066266ea817f58bd165eba805d9641cf268c9ac (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.java | 28 |
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, |