summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/WindowOrganizerController.java11
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java1
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