diff --git a/services/core/java/com/android/server/wm/TaskFragmentOrganizerController.java b/services/core/java/com/android/server/wm/TaskFragmentOrganizerController.java index b4d1cf77919a8..9aff23ddde148 100644 --- a/services/core/java/com/android/server/wm/TaskFragmentOrganizerController.java +++ b/services/core/java/com/android/server/wm/TaskFragmentOrganizerController.java @@ -470,6 +470,8 @@ public class TaskFragmentOrganizerController extends ITaskFragmentOrganizerContr .setException(exception) .build(); mPendingTaskFragmentEvents.add(pendingEvent); + // Make sure the error event will be dispatched if there are no other changes. + mAtmService.mWindowManager.mWindowPlacerLocked.requestTraversal(); } void onActivityReparentToTask(ActivityRecord activity) { diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java index d4d8dd8bceb1a..54cf57ff1b443 100644 --- a/services/core/java/com/android/server/wm/WindowOrganizerController.java +++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java @@ -525,7 +525,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub } } - if ((effects & TRANSACT_EFFECTS_CLIENT_CONFIG) == 0) { + if ((effects & TRANSACT_EFFECTS_CLIENT_CONFIG) != 0) { mService.addWindowLayoutReasons(LAYOUT_REASON_CONFIG_CHANGED); } } finally { diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java index 3ec24b76960fd..1c3b869e02d08 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java @@ -922,13 +922,14 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { .build(); doReturn(true).when(mTaskFragment).isAllowedToEmbedActivity(activity); mWindowOrganizerController.mLaunchTaskFragments.put(mFragmentToken, mTaskFragment); - clearInvocations(mAtm.mRootWindowContainer); // Reparent activity to mTaskFragment, which is smaller than activity's // minimum dimensions. mTransaction.reparentActivityToTaskFragment(mFragmentToken, activity.token) .setErrorCallbackToken(mErrorToken); mWindowOrganizerController.applyTransaction(mTransaction); + // The pending event will be dispatched on the handler (from requestTraversal). + waitHandlerIdle(mWm.mAnimationHandler); verify(mOrganizer).onTaskFragmentError(eq(mErrorToken), any(SecurityException.class)); } @@ -958,7 +959,6 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { doReturn(true).when(mTaskFragment).isAllowedToEmbedActivity(activity); mWindowOrganizerController.mLaunchTaskFragments.put(oldFragToken, oldTaskFrag); mWindowOrganizerController.mLaunchTaskFragments.put(mFragmentToken, mTaskFragment); - clearInvocations(mAtm.mRootWindowContainer); // Reparent oldTaskFrag's children to mTaskFragment, which is smaller than activity's // minimum dimensions. @@ -966,6 +966,8 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { mTaskFragment.mRemoteToken.toWindowContainerToken()) .setErrorCallbackToken(mErrorToken); mWindowOrganizerController.applyTransaction(mTransaction); + // The pending event will be dispatched on the handler (from requestTraversal). + waitHandlerIdle(mWm.mAnimationHandler); verify(mOrganizer).onTaskFragmentError(eq(mErrorToken), any(SecurityException.class)); }