Do not allow app to start background activity after stop app switches triggered
Bug: 133450759
Bug: 132333960
Test: atest CtsActivityManagerBackgroundActivityTestCases
Change-Id: Ifec482d94437cb9e26fa30a1aa66d212c463cd99
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 765c9d0..7284e0f 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -508,6 +508,12 @@
*/
private boolean mDidAppSwitch;
+ /**
+ * Last stop app switches time, apps finished before this time cannot start background activity
+ * even if they are in grace period.
+ */
+ private long mLastStopAppSwitchesTime;
+
IActivityController mController = null;
boolean mControllerIsAMonkey = false;
@@ -4731,6 +4737,7 @@
enforceCallerIsRecentsOrHasPermission(STOP_APP_SWITCHES, "stopAppSwitches");
synchronized (mGlobalLock) {
mAppSwitchesAllowedTime = SystemClock.uptimeMillis() + APP_SWITCH_DELAY_TIME;
+ mLastStopAppSwitchesTime = SystemClock.uptimeMillis();
mDidAppSwitch = false;
getActivityStartController().schedulePendingActivityLaunches(APP_SWITCH_DELAY_TIME);
}
@@ -4747,6 +4754,10 @@
}
}
+ long getLastStopAppSwitchesTime() {
+ return mLastStopAppSwitchesTime;
+ }
+
void onStartActivitySetDidAppSwitch() {
if (mDidAppSwitch) {
// This is the second allowed switch since we stopped switches, so now just generally