summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Andrii Kulian <akulian@google.com> 2021-08-06 21:01:39 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-08-06 21:01:39 +0000
commitf74b9ddc8a5798a3484cc2eaab86a055ae158951 (patch)
treed64f075cd9e36ab0bee835d22cfdb1daf44b9034
parent2635342df3d31db7abed6de6aad700936fecdff5 (diff)
parente82c67504dfc5bd8415f1cb530dfe6c0db1be6ad (diff)
Merge "Delete dependent TaskFragments in the same transaction" into sc-v2-dev
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitController.java19
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitPresenter.java8
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/TaskFragmentContainer.java12
3 files changed, 22 insertions, 17 deletions
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitController.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitController.java
index a1ebb59c3822..912c61b0c8b4 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitController.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitController.java
@@ -128,7 +128,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
// Check if there are no running activities - consider the container empty if there are no
// non-finishing activities left.
if (!taskFragmentInfo.hasRunningActivity()) {
- cleanupContainer(container, true /* shouldFinishDependent */);
+ mPresenter.cleanupContainer(container, true /* shouldFinishDependent */);
updateCallbackIfNecessary();
}
}
@@ -140,7 +140,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
return;
}
- cleanupContainer(container, true /* shouldFinishDependent */);
+ mPresenter.cleanupContainer(container, true /* shouldFinishDependent */);
updateCallbackIfNecessary();
}
@@ -307,13 +307,10 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
mSplitContainers.add(splitContainer);
}
- void cleanupContainer(@NonNull TaskFragmentContainer container, boolean shouldFinishDependent) {
- if (container.isFinished()) {
- return;
- }
-
- container.finish(shouldFinishDependent);
-
+ /**
+ * Removes the container from bookkeeping records.
+ */
+ void removeContainer(@NonNull TaskFragmentContainer container) {
// Remove all split containers that included this one
mContainers.remove(container);
List<SplitContainer> containersToRemove = new ArrayList<>();
@@ -324,8 +321,6 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
}
}
mSplitContainers.removeAll(containersToRemove);
-
- mPresenter.deleteContainer(container);
}
/**
@@ -462,7 +457,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
return false;
}
- cleanupContainer(splitContainer.getSecondaryContainer(),
+ mPresenter.cleanupContainer(splitContainer.getSecondaryContainer(),
false /* shouldFinishDependent */);
return true;
}
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitPresenter.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitPresenter.java
index d8b1d2a62383..0f356291f50e 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitPresenter.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitPresenter.java
@@ -68,11 +68,13 @@ class SplitPresenter extends JetpackTaskFragmentOrganizer {
}
/**
- * Deletes the provided container and updates the presentation if necessary.
+ * Deletes the specified container and all other associated and dependent containers in the same
+ * transaction.
*/
- void deleteContainer(TaskFragmentContainer container) {
+ void cleanupContainer(@NonNull TaskFragmentContainer container, boolean shouldFinishDependent) {
final WindowContainerTransaction wct = new WindowContainerTransaction();
- deleteTaskFragment(wct, container.getTaskFragmentToken());
+
+ container.finish(shouldFinishDependent, this, wct, mController);
final TaskFragmentContainer newTopContainer = mController.getTopActiveContainer();
if (newTopContainer != null) {
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/TaskFragmentContainer.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/TaskFragmentContainer.java
index f47dc245d2b0..a4f5c75276f5 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/TaskFragmentContainer.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/TaskFragmentContainer.java
@@ -24,6 +24,7 @@ import android.graphics.Rect;
import android.os.Binder;
import android.os.IBinder;
import android.window.TaskFragmentInfo;
+import android.window.WindowContainerTransaction;
import java.util.ArrayList;
import java.util.List;
@@ -179,7 +180,8 @@ class TaskFragmentContainer {
* Removes all activities that belong to this process and finishes other containers/activities
* configured to finish together.
*/
- void finish(boolean shouldFinishDependent) {
+ void finish(boolean shouldFinishDependent, @NonNull SplitPresenter presenter,
+ @NonNull WindowContainerTransaction wct, @NonNull SplitController controller) {
if (mIsFinished) {
return;
}
@@ -190,13 +192,19 @@ class TaskFragmentContainer {
activity.finish();
}
+ // Cleanup the visuals
+ presenter.deleteTaskFragment(wct, getTaskFragmentToken());
+ // Cleanup the records
+ controller.removeContainer(this);
+
if (!shouldFinishDependent) {
return;
}
// Finish dependent containers
for (TaskFragmentContainer container : mContainersToFinishOnExit) {
- container.finish(true /* shouldFinishDependent */);
+ container.finish(true /* shouldFinishDependent */, presenter,
+ wct, controller);
}
mContainersToFinishOnExit.clear();