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