diff options
| author | 2024-12-16 22:42:53 +0000 | |
|---|---|---|
| committer | 2024-12-18 01:36:28 +0000 | |
| commit | ba99059cd500c3707ed2892f09929f48a5b62721 (patch) | |
| tree | 241845e98ccfb7677a8ed376af7e3f8dc6f40afa | |
| parent | aabbec67c54c4489cec0f82fefd1acf8ff6f8b6c (diff) | |
Consider grace period use a violation in BAL strict mode
Test: atest BackgroundActivityStartControllerTest
Bug: 384807495
Flag: com.android.window.flags.bal_strict_mode_grace_period
Change-Id: Ie2ba0fb5e04bac8dda48d5f3954e7f9ade709420
| -rw-r--r-- | core/java/android/window/flags/responsible_apis.aconfig | 7 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/BackgroundActivityStartController.java | 17 |
2 files changed, 21 insertions, 3 deletions
diff --git a/core/java/android/window/flags/responsible_apis.aconfig b/core/java/android/window/flags/responsible_apis.aconfig index d5ba32cafebd..4b5adfcc2c9b 100644 --- a/core/java/android/window/flags/responsible_apis.aconfig +++ b/core/java/android/window/flags/responsible_apis.aconfig @@ -75,4 +75,9 @@ flag { bug: "362575865" } - +flag { + name: "bal_strict_mode_grace_period" + namespace: "responsible_apis" + description: "Strict mode violation triggered by grace period usage" + bug: "384807495" +} diff --git a/services/core/java/com/android/server/wm/BackgroundActivityStartController.java b/services/core/java/com/android/server/wm/BackgroundActivityStartController.java index 852a0ac054f4..d27b524f4f8b 100644 --- a/services/core/java/com/android/server/wm/BackgroundActivityStartController.java +++ b/services/core/java/com/android/server/wm/BackgroundActivityStartController.java @@ -50,6 +50,7 @@ import static com.android.window.flags.Flags.balImprovedMetrics; import static com.android.window.flags.Flags.balRequireOptInByPendingIntentCreator; import static com.android.window.flags.Flags.balShowToastsBlocked; import static com.android.window.flags.Flags.balStrictModeRo; +import static com.android.window.flags.Flags.balStrictModeGracePeriod; import static java.lang.annotation.RetentionPolicy.SOURCE; import static java.util.Objects.requireNonNull; @@ -1896,7 +1897,14 @@ public class BackgroundActivityStartController { (state.mOriginatingPendingIntent != null)); } - logIfOnlyAllowedBy(finalVerdict, state, BAL_ALLOW_GRACE_PERIOD); + if (logIfOnlyAllowedBy(finalVerdict, state, BAL_ALLOW_GRACE_PERIOD)) { + if (balStrictModeRo() && balStrictModeGracePeriod()) { + String abortDebugMessage = "Activity start is only allowed by grace period. " + + "This may stop working in the future. " + + "intent: " + state.mIntent; + strictModeLaunchAborted(state.mRealCallingUid, abortDebugMessage); + } + } logIfOnlyAllowedBy(finalVerdict, state, BAL_ALLOW_NON_APP_VISIBLE_WINDOW); if (balImprovedMetrics()) { @@ -1940,24 +1948,29 @@ public class BackgroundActivityStartController { * Logs details about the activity starts if the only reason it is allowed is the provided * {@code balCode}. */ - private static void logIfOnlyAllowedBy(BalVerdict finalVerdict, BalState state, int balCode) { + private static boolean logIfOnlyAllowedBy(BalVerdict finalVerdict, BalState state, + int balCode) { if (finalVerdict.getRawCode() == balCode) { if (state.realCallerExplicitOptInOrAutoOptIn() && state.mResultForRealCaller != null && state.mResultForRealCaller.allows() && state.mResultForRealCaller.getRawCode() != balCode) { // real caller could allow with a different exemption + return false; } else if (state.callerExplicitOptInOrAutoOptIn() && state.mResultForCaller != null && state.mResultForCaller.allows() && state.mResultForCaller.getRawCode() != balCode) { // caller could allow with a different exemption + return false; } else { // log to determine grace period length distribution Slog.wtf(TAG, "Activity start ONLY allowed by " + balCodeToString(balCode) + " " + finalVerdict.mMessage + ": " + state); + return true; } } + return false; } @VisibleForTesting |