Loading core/api/test-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -3234,6 +3234,7 @@ package android.window { method public int getWindowingMode(); method public boolean hasRunningActivity(); method public boolean isEmpty(); method public boolean isTaskClearedForReuse(); method public boolean isVisible(); field @NonNull public static final android.os.Parcelable.Creator<android.window.TaskFragmentInfo> CREATOR; } Loading core/java/android/window/TaskFragmentInfo.java +18 −2 Original line number Diff line number Diff line Loading @@ -71,11 +71,18 @@ public final class TaskFragmentInfo implements Parcelable { /** Relative position of the fragment's top left corner in the parent container. */ private final Point mPositionInParent; /** * Whether the last running activity in the TaskFragment was finished due to clearing task while * launching an activity in the host Task. */ private final boolean mIsTaskClearedForReuse; /** @hide */ public TaskFragmentInfo( @NonNull IBinder fragmentToken, @NonNull WindowContainerToken token, @NonNull Configuration configuration, boolean isEmpty, int runningActivityCount, boolean isVisible, @NonNull List<IBinder> activities, @NonNull Point positionInParent) { boolean isVisible, @NonNull List<IBinder> activities, @NonNull Point positionInParent, boolean isTaskClearedForReuse) { mFragmentToken = requireNonNull(fragmentToken); mToken = requireNonNull(token); mConfiguration.setTo(configuration); Loading @@ -84,6 +91,7 @@ public final class TaskFragmentInfo implements Parcelable { mIsVisible = isVisible; mActivities.addAll(activities); mPositionInParent = requireNonNull(positionInParent); mIsTaskClearedForReuse = isTaskClearedForReuse; } @NonNull Loading Loading @@ -128,6 +136,10 @@ public final class TaskFragmentInfo implements Parcelable { return mPositionInParent; } public boolean isTaskClearedForReuse() { return mIsTaskClearedForReuse; } @WindowingMode public int getWindowingMode() { return mConfiguration.windowConfiguration.getWindowingMode(); Loading @@ -149,7 +161,8 @@ public final class TaskFragmentInfo implements Parcelable { && mIsVisible == that.mIsVisible && getWindowingMode() == that.getWindowingMode() && mActivities.equals(that.mActivities) && mPositionInParent.equals(that.mPositionInParent); && mPositionInParent.equals(that.mPositionInParent) && mIsTaskClearedForReuse == that.mIsTaskClearedForReuse; } private TaskFragmentInfo(Parcel in) { Loading @@ -161,6 +174,7 @@ public final class TaskFragmentInfo implements Parcelable { mIsVisible = in.readBoolean(); in.readBinderList(mActivities); mPositionInParent = requireNonNull(in.readTypedObject(Point.CREATOR)); mIsTaskClearedForReuse = in.readBoolean(); } /** @hide */ Loading @@ -174,6 +188,7 @@ public final class TaskFragmentInfo implements Parcelable { dest.writeBoolean(mIsVisible); dest.writeBinderList(mActivities); dest.writeTypedObject(mPositionInParent, flags); dest.writeBoolean(mIsTaskClearedForReuse); } @NonNull Loading @@ -199,6 +214,7 @@ public final class TaskFragmentInfo implements Parcelable { + " runningActivityCount=" + mRunningActivityCount + " isVisible=" + mIsVisible + " positionInParent=" + mPositionInParent + " isTaskClearedForReuse=" + mIsTaskClearedForReuse + "}"; } Loading libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitController.java +5 −1 Original line number Diff line number Diff line Loading @@ -134,7 +134,11 @@ 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()) { mPresenter.cleanupContainer(container, true /* shouldFinishDependent */); // Do not finish the dependents if this TaskFragment was cleared due to launching // activity in the Task. final boolean shouldFinishDependent = !taskFragmentInfo.isTaskClearedForReuse(); mPresenter.cleanupContainer(container, shouldFinishDependent); updateCallbackIfNecessary(); } } Loading services/core/java/com/android/server/wm/ActivityRecord.java +5 −0 Original line number Diff line number Diff line Loading @@ -3505,6 +3505,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A finishing = true; final TaskFragment taskFragment = getTaskFragment(); if (taskFragment != null) { final Task task = taskFragment.getTask(); if (task != null && task.isClearingToReuseTask() && taskFragment.getTopNonFinishingActivity() == null) { taskFragment.mClearedTaskForReuse = true; } taskFragment.sendTaskFragmentInfoChanged(); } if (stopped) { Loading services/core/java/com/android/server/wm/TaskFragment.java +10 −1 Original line number Diff line number Diff line Loading @@ -173,6 +173,12 @@ class TaskFragment extends WindowContainer<WindowContainer> { */ boolean mTaskFragmentAppearedSent; /** * The last running activity of the TaskFragment was finished due to clear task while launching * an activity in the Task. */ boolean mClearedTaskForReuse; /** * When we are in the process of pausing an activity, before starting the * next one, this variable holds the activity that is currently being paused. Loading Loading @@ -1587,6 +1593,8 @@ class TaskFragment extends WindowContainer<WindowContainer> { @Override void addChild(WindowContainer child, int index) { mClearedTaskForReuse = false; boolean isAddingActivity = child.asActivityRecord() != null; final Task task = isAddingActivity ? getTask() : null; Loading Loading @@ -2093,7 +2101,8 @@ class TaskFragment extends WindowContainer<WindowContainer> { runningActivityCount[0], isVisible(), childActivities, positionInParent); positionInParent, mClearedTaskForReuse); } @Nullable Loading Loading
core/api/test-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -3234,6 +3234,7 @@ package android.window { method public int getWindowingMode(); method public boolean hasRunningActivity(); method public boolean isEmpty(); method public boolean isTaskClearedForReuse(); method public boolean isVisible(); field @NonNull public static final android.os.Parcelable.Creator<android.window.TaskFragmentInfo> CREATOR; } Loading
core/java/android/window/TaskFragmentInfo.java +18 −2 Original line number Diff line number Diff line Loading @@ -71,11 +71,18 @@ public final class TaskFragmentInfo implements Parcelable { /** Relative position of the fragment's top left corner in the parent container. */ private final Point mPositionInParent; /** * Whether the last running activity in the TaskFragment was finished due to clearing task while * launching an activity in the host Task. */ private final boolean mIsTaskClearedForReuse; /** @hide */ public TaskFragmentInfo( @NonNull IBinder fragmentToken, @NonNull WindowContainerToken token, @NonNull Configuration configuration, boolean isEmpty, int runningActivityCount, boolean isVisible, @NonNull List<IBinder> activities, @NonNull Point positionInParent) { boolean isVisible, @NonNull List<IBinder> activities, @NonNull Point positionInParent, boolean isTaskClearedForReuse) { mFragmentToken = requireNonNull(fragmentToken); mToken = requireNonNull(token); mConfiguration.setTo(configuration); Loading @@ -84,6 +91,7 @@ public final class TaskFragmentInfo implements Parcelable { mIsVisible = isVisible; mActivities.addAll(activities); mPositionInParent = requireNonNull(positionInParent); mIsTaskClearedForReuse = isTaskClearedForReuse; } @NonNull Loading Loading @@ -128,6 +136,10 @@ public final class TaskFragmentInfo implements Parcelable { return mPositionInParent; } public boolean isTaskClearedForReuse() { return mIsTaskClearedForReuse; } @WindowingMode public int getWindowingMode() { return mConfiguration.windowConfiguration.getWindowingMode(); Loading @@ -149,7 +161,8 @@ public final class TaskFragmentInfo implements Parcelable { && mIsVisible == that.mIsVisible && getWindowingMode() == that.getWindowingMode() && mActivities.equals(that.mActivities) && mPositionInParent.equals(that.mPositionInParent); && mPositionInParent.equals(that.mPositionInParent) && mIsTaskClearedForReuse == that.mIsTaskClearedForReuse; } private TaskFragmentInfo(Parcel in) { Loading @@ -161,6 +174,7 @@ public final class TaskFragmentInfo implements Parcelable { mIsVisible = in.readBoolean(); in.readBinderList(mActivities); mPositionInParent = requireNonNull(in.readTypedObject(Point.CREATOR)); mIsTaskClearedForReuse = in.readBoolean(); } /** @hide */ Loading @@ -174,6 +188,7 @@ public final class TaskFragmentInfo implements Parcelable { dest.writeBoolean(mIsVisible); dest.writeBinderList(mActivities); dest.writeTypedObject(mPositionInParent, flags); dest.writeBoolean(mIsTaskClearedForReuse); } @NonNull Loading @@ -199,6 +214,7 @@ public final class TaskFragmentInfo implements Parcelable { + " runningActivityCount=" + mRunningActivityCount + " isVisible=" + mIsVisible + " positionInParent=" + mPositionInParent + " isTaskClearedForReuse=" + mIsTaskClearedForReuse + "}"; } Loading
libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitController.java +5 −1 Original line number Diff line number Diff line Loading @@ -134,7 +134,11 @@ 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()) { mPresenter.cleanupContainer(container, true /* shouldFinishDependent */); // Do not finish the dependents if this TaskFragment was cleared due to launching // activity in the Task. final boolean shouldFinishDependent = !taskFragmentInfo.isTaskClearedForReuse(); mPresenter.cleanupContainer(container, shouldFinishDependent); updateCallbackIfNecessary(); } } Loading
services/core/java/com/android/server/wm/ActivityRecord.java +5 −0 Original line number Diff line number Diff line Loading @@ -3505,6 +3505,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A finishing = true; final TaskFragment taskFragment = getTaskFragment(); if (taskFragment != null) { final Task task = taskFragment.getTask(); if (task != null && task.isClearingToReuseTask() && taskFragment.getTopNonFinishingActivity() == null) { taskFragment.mClearedTaskForReuse = true; } taskFragment.sendTaskFragmentInfoChanged(); } if (stopped) { Loading
services/core/java/com/android/server/wm/TaskFragment.java +10 −1 Original line number Diff line number Diff line Loading @@ -173,6 +173,12 @@ class TaskFragment extends WindowContainer<WindowContainer> { */ boolean mTaskFragmentAppearedSent; /** * The last running activity of the TaskFragment was finished due to clear task while launching * an activity in the Task. */ boolean mClearedTaskForReuse; /** * When we are in the process of pausing an activity, before starting the * next one, this variable holds the activity that is currently being paused. Loading Loading @@ -1587,6 +1593,8 @@ class TaskFragment extends WindowContainer<WindowContainer> { @Override void addChild(WindowContainer child, int index) { mClearedTaskForReuse = false; boolean isAddingActivity = child.asActivityRecord() != null; final Task task = isAddingActivity ? getTask() : null; Loading Loading @@ -2093,7 +2101,8 @@ class TaskFragment extends WindowContainer<WindowContainer> { runningActivityCount[0], isVisible(), childActivities, positionInParent); positionInParent, mClearedTaskForReuse); } @Nullable Loading