diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowOrganizerController.java | 11 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java | 1 |
2 files changed, 11 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java index fb197c566b7d..c0cde225be6c 100644 --- a/services/core/java/com/android/server/wm/WindowOrganizerController.java +++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java @@ -2658,10 +2658,19 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub private int deleteTaskFragment(@NonNull TaskFragment taskFragment, @Nullable Transition transition) { - if (transition != null) transition.collectExistenceChange(taskFragment); + final boolean isEmpty = taskFragment.getNonFinishingActivityCount() == 0; + if (transition != null && (taskFragment.isVisibleRequested() + // In case to update existing change type. + || transition.mChanges.containsKey(taskFragment))) { + transition.collectExistenceChange(taskFragment); + } mLaunchTaskFragments.remove(taskFragment.getFragmentToken()); taskFragment.remove(true /* withTransition */, "deleteTaskFragment"); + if (isEmpty) { + // The removal of an empty TaskFragment doesn't affect lifecycle. + return 0; + } return TRANSACT_EFFECTS_LIFECYCLE; } 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 19c1ce2616af..ef58498b351c 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java @@ -638,6 +638,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { @Test public void testApplyTransaction_enforceHierarchyChange_deleteTaskFragment() { doReturn(true).when(mTaskFragment).isAttached(); + doReturn(1).when(mTaskFragment).getNonFinishingActivityCount(); mWindowOrganizerController.mLaunchTaskFragments.put(mFragmentToken, mTaskFragment); // Throw exception if the transaction is trying to change a window that is not organized by |