Loading core/java/android/window/flags/responsible_apis.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -41,3 +41,10 @@ flag { description: "Prevent a task to restart based on a visible window during task switch." bug: "171459802" } flag { name: "bal_respect_app_switch_state_when_check_bound_by_foreground_uid" namespace: "responsible_apis" description: "Prevent BAL based on it is bound by foreground Uid but the app switch is stopped." bug: "171459802" } services/core/java/com/android/server/wm/BackgroundLaunchProcessController.java +9 −4 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM; import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.server.wm.ActivityTaskManagerService.ACTIVITY_BG_START_GRACE_PERIOD_MS; import static com.android.server.wm.ActivityTaskManagerService.APP_SWITCH_ALLOW; import static com.android.server.wm.ActivityTaskManagerService.APP_SWITCH_FG_ONLY; import static com.android.server.wm.ActivityTaskManagerService.APP_SWITCH_DISALLOW; import static com.android.server.wm.BackgroundActivityStartController.BAL_ALLOW_FOREGROUND; import static com.android.server.wm.BackgroundActivityStartController.BAL_ALLOW_GRACE_PERIOD; import static com.android.server.wm.BackgroundActivityStartController.BAL_ALLOW_PERMISSION; Loading @@ -49,6 +49,7 @@ import android.util.Slog; import com.android.internal.annotations.GuardedBy; import com.android.server.wm.BackgroundActivityStartController.BalVerdict; import com.android.window.flags.Flags; import java.io.PrintWriter; import java.util.ArrayList; Loading Loading @@ -113,13 +114,17 @@ class BackgroundLaunchProcessController { "process allowed by token"); } // Allow if the caller is bound by a UID that's currently foreground. if (isBoundByForegroundUid()) { // But still respect the appSwitchState. boolean allowBoundByForegroundUid = Flags.balRespectAppSwitchStateWhenCheckBoundByForegroundUid() ? appSwitchState != APP_SWITCH_DISALLOW && isBoundByForegroundUid() : isBoundByForegroundUid(); if (allowBoundByForegroundUid) { return new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW, /*background*/ false, "process bound by foreground uid"); } // Allow if the caller has an activity in any foreground task. if (hasActivityInVisibleTask && (appSwitchState == APP_SWITCH_ALLOW || appSwitchState == APP_SWITCH_FG_ONLY)) { if (hasActivityInVisibleTask && appSwitchState != APP_SWITCH_DISALLOW) { return new BalVerdict(BAL_ALLOW_FOREGROUND, /*background*/ false, "process has activity in foreground task"); } Loading Loading
core/java/android/window/flags/responsible_apis.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -41,3 +41,10 @@ flag { description: "Prevent a task to restart based on a visible window during task switch." bug: "171459802" } flag { name: "bal_respect_app_switch_state_when_check_bound_by_foreground_uid" namespace: "responsible_apis" description: "Prevent BAL based on it is bound by foreground Uid but the app switch is stopped." bug: "171459802" }
services/core/java/com/android/server/wm/BackgroundLaunchProcessController.java +9 −4 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM; import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.server.wm.ActivityTaskManagerService.ACTIVITY_BG_START_GRACE_PERIOD_MS; import static com.android.server.wm.ActivityTaskManagerService.APP_SWITCH_ALLOW; import static com.android.server.wm.ActivityTaskManagerService.APP_SWITCH_FG_ONLY; import static com.android.server.wm.ActivityTaskManagerService.APP_SWITCH_DISALLOW; import static com.android.server.wm.BackgroundActivityStartController.BAL_ALLOW_FOREGROUND; import static com.android.server.wm.BackgroundActivityStartController.BAL_ALLOW_GRACE_PERIOD; import static com.android.server.wm.BackgroundActivityStartController.BAL_ALLOW_PERMISSION; Loading @@ -49,6 +49,7 @@ import android.util.Slog; import com.android.internal.annotations.GuardedBy; import com.android.server.wm.BackgroundActivityStartController.BalVerdict; import com.android.window.flags.Flags; import java.io.PrintWriter; import java.util.ArrayList; Loading Loading @@ -113,13 +114,17 @@ class BackgroundLaunchProcessController { "process allowed by token"); } // Allow if the caller is bound by a UID that's currently foreground. if (isBoundByForegroundUid()) { // But still respect the appSwitchState. boolean allowBoundByForegroundUid = Flags.balRespectAppSwitchStateWhenCheckBoundByForegroundUid() ? appSwitchState != APP_SWITCH_DISALLOW && isBoundByForegroundUid() : isBoundByForegroundUid(); if (allowBoundByForegroundUid) { return new BalVerdict(BAL_ALLOW_VISIBLE_WINDOW, /*background*/ false, "process bound by foreground uid"); } // Allow if the caller has an activity in any foreground task. if (hasActivityInVisibleTask && (appSwitchState == APP_SWITCH_ALLOW || appSwitchState == APP_SWITCH_FG_ONLY)) { if (hasActivityInVisibleTask && appSwitchState != APP_SWITCH_DISALLOW) { return new BalVerdict(BAL_ALLOW_FOREGROUND, /*background*/ false, "process has activity in foreground task"); } Loading