summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 29a0dc19fe9d..4c2d8492197c 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;
@@ -1912,7 +1913,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()) {
@@ -1956,24 +1964,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