Loading services/core/java/com/android/server/wm/BackgroundActivityStartController.java +12 −0 Original line number Diff line number Diff line Loading @@ -38,9 +38,11 @@ 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.ActivityTaskSupervisor.getApplicationLabel; import static com.android.server.wm.PendingRemoteAnimationRegistry.TIMEOUT_MS; import static com.android.window.flags.Flags.balDontBringExistingBackgroundTaskStackToFg; import static com.android.window.flags.Flags.balImproveRealCallerVisibilityCheck; import static com.android.window.flags.Flags.balRequireOptInByPendingIntentCreator; import static com.android.window.flags.Flags.balRequireOptInSameUid; import static com.android.window.flags.Flags.balRespectAppSwitchStateWhenCheckBoundByForegroundUid; import static com.android.window.flags.Flags.balShowToastsBlocked; import static java.lang.annotation.RetentionPolicy.SOURCE; Loading Loading @@ -539,6 +541,16 @@ public class BackgroundActivityStartController { sb.append("; balAllowedByPiSender: ").append(mBalAllowedByPiSender); sb.append("; resultIfPiSenderAllowsBal: ").append(mResultForRealCaller); } // features sb.append("; balImproveRealCallerVisibilityCheck: ") .append(balImproveRealCallerVisibilityCheck()); sb.append("; balRequireOptInByPendingIntentCreator: ") .append(balRequireOptInByPendingIntentCreator()); sb.append("; balRequireOptInSameUid: ").append(balRequireOptInSameUid()); sb.append("; balRespectAppSwitchStateWhenCheckBoundByForegroundUid: ") .append(balRespectAppSwitchStateWhenCheckBoundByForegroundUid()); sb.append("; balDontBringExistingBackgroundTaskStackToFg: ") .append(balDontBringExistingBackgroundTaskStackToFg()); sb.append("]"); return sb.toString(); } Loading services/tests/wmtests/src/com/android/server/wm/BackgroundActivityStartControllerTests.java +62 −32 Original line number Diff line number Diff line Loading @@ -504,22 +504,37 @@ public class BackgroundActivityStartControllerTests { assertThat(balState.callerExplicitOptInOrOut()).isFalse(); assertThat(balState.realCallerExplicitOptInOrAutoOptIn()).isTrue(); assertThat(balState.realCallerExplicitOptInOrOut()).isFalse(); assertThat(balState.toString()).isEqualTo( "[callingPackage: package.app1; callingPackageTargetSdk: -1; callingUid: 10001; " + "callingPid: 11001; appSwitchState: 0; callingUidHasAnyVisibleWindow: " + "false; callingUidProcState: NONEXISTENT; " + "isCallingUidPersistentSystemProcess: false; forcedBalByPiSender: BSP" + ".NONE; intent: Intent { cmp=package.app3/someClass }; callerApp: " + "mCallerApp; inVisibleTask: false; balAllowedByPiCreator: BSP" + ".ALLOW_BAL; balAllowedByPiCreatorWithHardening: BSP.ALLOW_BAL; " + "resultIfPiCreatorAllowsBal: null; hasRealCaller: true; " + "isCallForResult: false; isPendingIntent: false; autoOptInReason: " + "notPendingIntent; realCallingPackage: uid=1[debugOnly]; " + "realCallingPackageTargetSdk: -1; realCallingUid: 1; realCallingPid: 1;" + " realCallingUidHasAnyVisibleWindow: false; realCallingUidProcState: " + "NONEXISTENT; isRealCallingUidPersistentSystemProcess: false; " + "originatingPendingIntent: null; realCallerApp: null; " + "balAllowedByPiSender: BSP.ALLOW_BAL; resultIfPiSenderAllowsBal: null]"); assertThat(balState.toString()).contains( "[callingPackage: package.app1; " + "callingPackageTargetSdk: -1; " + "callingUid: 10001; " + "callingPid: 11001; " + "appSwitchState: 0; " + "callingUidHasAnyVisibleWindow: false; " + "callingUidProcState: NONEXISTENT; " + "isCallingUidPersistentSystemProcess: false; " + "forcedBalByPiSender: BSP.NONE; " + "intent: Intent { cmp=package.app3/someClass }; " + "callerApp: mCallerApp; " + "inVisibleTask: false; " + "balAllowedByPiCreator: BSP.ALLOW_BAL; " + "balAllowedByPiCreatorWithHardening: BSP.ALLOW_BAL; " + "resultIfPiCreatorAllowsBal: null; " + "hasRealCaller: true; " + "isCallForResult: false; " + "isPendingIntent: false; " + "autoOptInReason: notPendingIntent; " + "realCallingPackage: uid=1[debugOnly]; " + "realCallingPackageTargetSdk: -1; " + "realCallingUid: 1; " + "realCallingPid: 1; " + "realCallingUidHasAnyVisibleWindow: false; " + "realCallingUidProcState: NONEXISTENT; " + "isRealCallingUidPersistentSystemProcess: false; " + "originatingPendingIntent: null; " + "realCallerApp: null; " + "balAllowedByPiSender: BSP.ALLOW_BAL; " + "resultIfPiSenderAllowsBal: null"); } @Test Loading Loading @@ -588,21 +603,36 @@ public class BackgroundActivityStartControllerTests { assertThat(balState.callerExplicitOptInOrOut()).isFalse(); assertThat(balState.realCallerExplicitOptInOrAutoOptIn()).isFalse(); assertThat(balState.realCallerExplicitOptInOrOut()).isFalse(); assertThat(balState.toString()).isEqualTo( "[callingPackage: package.app1; callingPackageTargetSdk: -1; callingUid: 10001; " + "callingPid: 11001; appSwitchState: 0; callingUidHasAnyVisibleWindow: " + "false; callingUidProcState: NONEXISTENT; " + "isCallingUidPersistentSystemProcess: false; forcedBalByPiSender: BSP" + ".NONE; intent: Intent { cmp=package.app3/someClass }; callerApp: " + "mCallerApp; inVisibleTask: false; balAllowedByPiCreator: BSP" + ".NONE; balAllowedByPiCreatorWithHardening: BSP.NONE; " + "resultIfPiCreatorAllowsBal: null; hasRealCaller: true; " + "isCallForResult: false; isPendingIntent: true; autoOptInReason: " + "null; realCallingPackage: uid=1[debugOnly]; " + "realCallingPackageTargetSdk: -1; realCallingUid: 1; realCallingPid: 1;" + " realCallingUidHasAnyVisibleWindow: false; realCallingUidProcState: " + "NONEXISTENT; isRealCallingUidPersistentSystemProcess: false; " + "originatingPendingIntent: PendingIntentRecord; realCallerApp: null; " + "balAllowedByPiSender: BSP.ALLOW_FGS; resultIfPiSenderAllowsBal: null]"); assertThat(balState.toString()).contains( "[callingPackage: package.app1; " + "callingPackageTargetSdk: -1; " + "callingUid: 10001; " + "callingPid: 11001; " + "appSwitchState: 0; " + "callingUidHasAnyVisibleWindow: false; " + "callingUidProcState: NONEXISTENT; " + "isCallingUidPersistentSystemProcess: false; " + "forcedBalByPiSender: BSP.NONE; " + "intent: Intent { cmp=package.app3/someClass }; " + "callerApp: mCallerApp; " + "inVisibleTask: false; " + "balAllowedByPiCreator: BSP.NONE; " + "balAllowedByPiCreatorWithHardening: BSP.NONE; " + "resultIfPiCreatorAllowsBal: null; " + "hasRealCaller: true; " + "isCallForResult: false; " + "isPendingIntent: true; " + "autoOptInReason: null; " + "realCallingPackage: uid=1[debugOnly]; " + "realCallingPackageTargetSdk: -1; " + "realCallingUid: 1; " + "realCallingPid: 1; " + "realCallingUidHasAnyVisibleWindow: false; " + "realCallingUidProcState: NONEXISTENT; " + "isRealCallingUidPersistentSystemProcess: false; " + "originatingPendingIntent: PendingIntentRecord; " + "realCallerApp: null; " + "balAllowedByPiSender: BSP.ALLOW_FGS; " + "resultIfPiSenderAllowsBal: null"); } } Loading
services/core/java/com/android/server/wm/BackgroundActivityStartController.java +12 −0 Original line number Diff line number Diff line Loading @@ -38,9 +38,11 @@ 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.ActivityTaskSupervisor.getApplicationLabel; import static com.android.server.wm.PendingRemoteAnimationRegistry.TIMEOUT_MS; import static com.android.window.flags.Flags.balDontBringExistingBackgroundTaskStackToFg; import static com.android.window.flags.Flags.balImproveRealCallerVisibilityCheck; import static com.android.window.flags.Flags.balRequireOptInByPendingIntentCreator; import static com.android.window.flags.Flags.balRequireOptInSameUid; import static com.android.window.flags.Flags.balRespectAppSwitchStateWhenCheckBoundByForegroundUid; import static com.android.window.flags.Flags.balShowToastsBlocked; import static java.lang.annotation.RetentionPolicy.SOURCE; Loading Loading @@ -539,6 +541,16 @@ public class BackgroundActivityStartController { sb.append("; balAllowedByPiSender: ").append(mBalAllowedByPiSender); sb.append("; resultIfPiSenderAllowsBal: ").append(mResultForRealCaller); } // features sb.append("; balImproveRealCallerVisibilityCheck: ") .append(balImproveRealCallerVisibilityCheck()); sb.append("; balRequireOptInByPendingIntentCreator: ") .append(balRequireOptInByPendingIntentCreator()); sb.append("; balRequireOptInSameUid: ").append(balRequireOptInSameUid()); sb.append("; balRespectAppSwitchStateWhenCheckBoundByForegroundUid: ") .append(balRespectAppSwitchStateWhenCheckBoundByForegroundUid()); sb.append("; balDontBringExistingBackgroundTaskStackToFg: ") .append(balDontBringExistingBackgroundTaskStackToFg()); sb.append("]"); return sb.toString(); } Loading
services/tests/wmtests/src/com/android/server/wm/BackgroundActivityStartControllerTests.java +62 −32 Original line number Diff line number Diff line Loading @@ -504,22 +504,37 @@ public class BackgroundActivityStartControllerTests { assertThat(balState.callerExplicitOptInOrOut()).isFalse(); assertThat(balState.realCallerExplicitOptInOrAutoOptIn()).isTrue(); assertThat(balState.realCallerExplicitOptInOrOut()).isFalse(); assertThat(balState.toString()).isEqualTo( "[callingPackage: package.app1; callingPackageTargetSdk: -1; callingUid: 10001; " + "callingPid: 11001; appSwitchState: 0; callingUidHasAnyVisibleWindow: " + "false; callingUidProcState: NONEXISTENT; " + "isCallingUidPersistentSystemProcess: false; forcedBalByPiSender: BSP" + ".NONE; intent: Intent { cmp=package.app3/someClass }; callerApp: " + "mCallerApp; inVisibleTask: false; balAllowedByPiCreator: BSP" + ".ALLOW_BAL; balAllowedByPiCreatorWithHardening: BSP.ALLOW_BAL; " + "resultIfPiCreatorAllowsBal: null; hasRealCaller: true; " + "isCallForResult: false; isPendingIntent: false; autoOptInReason: " + "notPendingIntent; realCallingPackage: uid=1[debugOnly]; " + "realCallingPackageTargetSdk: -1; realCallingUid: 1; realCallingPid: 1;" + " realCallingUidHasAnyVisibleWindow: false; realCallingUidProcState: " + "NONEXISTENT; isRealCallingUidPersistentSystemProcess: false; " + "originatingPendingIntent: null; realCallerApp: null; " + "balAllowedByPiSender: BSP.ALLOW_BAL; resultIfPiSenderAllowsBal: null]"); assertThat(balState.toString()).contains( "[callingPackage: package.app1; " + "callingPackageTargetSdk: -1; " + "callingUid: 10001; " + "callingPid: 11001; " + "appSwitchState: 0; " + "callingUidHasAnyVisibleWindow: false; " + "callingUidProcState: NONEXISTENT; " + "isCallingUidPersistentSystemProcess: false; " + "forcedBalByPiSender: BSP.NONE; " + "intent: Intent { cmp=package.app3/someClass }; " + "callerApp: mCallerApp; " + "inVisibleTask: false; " + "balAllowedByPiCreator: BSP.ALLOW_BAL; " + "balAllowedByPiCreatorWithHardening: BSP.ALLOW_BAL; " + "resultIfPiCreatorAllowsBal: null; " + "hasRealCaller: true; " + "isCallForResult: false; " + "isPendingIntent: false; " + "autoOptInReason: notPendingIntent; " + "realCallingPackage: uid=1[debugOnly]; " + "realCallingPackageTargetSdk: -1; " + "realCallingUid: 1; " + "realCallingPid: 1; " + "realCallingUidHasAnyVisibleWindow: false; " + "realCallingUidProcState: NONEXISTENT; " + "isRealCallingUidPersistentSystemProcess: false; " + "originatingPendingIntent: null; " + "realCallerApp: null; " + "balAllowedByPiSender: BSP.ALLOW_BAL; " + "resultIfPiSenderAllowsBal: null"); } @Test Loading Loading @@ -588,21 +603,36 @@ public class BackgroundActivityStartControllerTests { assertThat(balState.callerExplicitOptInOrOut()).isFalse(); assertThat(balState.realCallerExplicitOptInOrAutoOptIn()).isFalse(); assertThat(balState.realCallerExplicitOptInOrOut()).isFalse(); assertThat(balState.toString()).isEqualTo( "[callingPackage: package.app1; callingPackageTargetSdk: -1; callingUid: 10001; " + "callingPid: 11001; appSwitchState: 0; callingUidHasAnyVisibleWindow: " + "false; callingUidProcState: NONEXISTENT; " + "isCallingUidPersistentSystemProcess: false; forcedBalByPiSender: BSP" + ".NONE; intent: Intent { cmp=package.app3/someClass }; callerApp: " + "mCallerApp; inVisibleTask: false; balAllowedByPiCreator: BSP" + ".NONE; balAllowedByPiCreatorWithHardening: BSP.NONE; " + "resultIfPiCreatorAllowsBal: null; hasRealCaller: true; " + "isCallForResult: false; isPendingIntent: true; autoOptInReason: " + "null; realCallingPackage: uid=1[debugOnly]; " + "realCallingPackageTargetSdk: -1; realCallingUid: 1; realCallingPid: 1;" + " realCallingUidHasAnyVisibleWindow: false; realCallingUidProcState: " + "NONEXISTENT; isRealCallingUidPersistentSystemProcess: false; " + "originatingPendingIntent: PendingIntentRecord; realCallerApp: null; " + "balAllowedByPiSender: BSP.ALLOW_FGS; resultIfPiSenderAllowsBal: null]"); assertThat(balState.toString()).contains( "[callingPackage: package.app1; " + "callingPackageTargetSdk: -1; " + "callingUid: 10001; " + "callingPid: 11001; " + "appSwitchState: 0; " + "callingUidHasAnyVisibleWindow: false; " + "callingUidProcState: NONEXISTENT; " + "isCallingUidPersistentSystemProcess: false; " + "forcedBalByPiSender: BSP.NONE; " + "intent: Intent { cmp=package.app3/someClass }; " + "callerApp: mCallerApp; " + "inVisibleTask: false; " + "balAllowedByPiCreator: BSP.NONE; " + "balAllowedByPiCreatorWithHardening: BSP.NONE; " + "resultIfPiCreatorAllowsBal: null; " + "hasRealCaller: true; " + "isCallForResult: false; " + "isPendingIntent: true; " + "autoOptInReason: null; " + "realCallingPackage: uid=1[debugOnly]; " + "realCallingPackageTargetSdk: -1; " + "realCallingUid: 1; " + "realCallingPid: 1; " + "realCallingUidHasAnyVisibleWindow: false; " + "realCallingUidProcState: NONEXISTENT; " + "isRealCallingUidPersistentSystemProcess: false; " + "originatingPendingIntent: PendingIntentRecord; " + "realCallerApp: null; " + "balAllowedByPiSender: BSP.ALLOW_FGS; " + "resultIfPiSenderAllowsBal: null"); } }