summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Achim Thesmann <achim@google.com> 2024-12-16 22:42:53 +0000
committer Achim Thesmann <achim@google.com> 2024-12-18 01:36:28 +0000
commitba99059cd500c3707ed2892f09929f48a5b62721 (patch)
tree241845e98ccfb7677a8ed376af7e3f8dc6f40afa
parentaabbec67c54c4489cec0f82fefd1acf8ff6f8b6c (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.aconfig7
-rw-r--r--services/core/java/com/android/server/wm/BackgroundActivityStartController.java17
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