Defer resume of activity while applying wct

When the hierarchy is changing, defer resuming the activity until it is
ready to let it finish processing the wct.

If the activity does not wait, there will be extra lifecycle states even
if they are applied in the same wct. Update test to not defer resume at
the start.

Flag: EXEMPT (bug fix)
Bug: 369186876
Test: atest CtsWindowManagerDeviceActivity com.android.server.wm.ActivityTaskManagerServiceTests
Change-Id: I2f564f4b7245de94871999a4da122489dba7fd7d
diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
index 4f71719..023ff6e 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
@@ -2280,6 +2280,9 @@
      * sent to the new top resumed activity.
      */
     ActivityRecord updateTopResumedActivityIfNeeded(String reason) {
+        if (!readyToResume()) {
+            return mTopResumedActivity;
+        }
         final ActivityRecord prevTopActivity = mTopResumedActivity;
         final Task topRootTask = mRootWindowContainer.getTopDisplayFocusedRootTask();
         if (topRootTask == null || topRootTask.getTopResumedActivity() == prevTopActivity) {
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java
index c176658..e0b29c9 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java
@@ -382,13 +382,11 @@
 
     @Test
     public void testResumeNextActivityOnCrashedAppDied() {
-        mSupervisor.beginDeferResume();
         final ActivityRecord homeActivity = new ActivityBuilder(mAtm)
                 .setTask(mRootWindowContainer.getDefaultTaskDisplayArea().getOrCreateRootHomeTask())
                 .build();
         final ActivityRecord activity = new ActivityBuilder(mAtm).setCreateTask(true).build();
         activity.setState(RESUMED, "test");
-        mSupervisor.endDeferResume();
 
         assertEquals(activity.app, mAtm.mInternal.getTopApp());