Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 161dba6c authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix overlay below activity is dismissed" into main

parents d371e24c 7f47777d
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -102,6 +102,8 @@ public final class TaskFragmentInfo implements Parcelable {
    @NonNull
    private final Point mMinimumDimensions = new Point();

    private final boolean mIsTopNonFishingChild;

    /** @hide */
    public TaskFragmentInfo(
            @NonNull IBinder fragmentToken, @NonNull WindowContainerToken token,
@@ -110,7 +112,7 @@ public final class TaskFragmentInfo implements Parcelable {
            @NonNull List<IBinder> inRequestedTaskFragmentActivities,
            @NonNull Point positionInParent, boolean isTaskClearedForReuse,
            boolean isTaskFragmentClearedForPip, boolean isClearedForReorderActivityToFront,
            @NonNull Point minimumDimensions) {
            @NonNull Point minimumDimensions, boolean isTopNonFinishingChild) {
        mFragmentToken = requireNonNull(fragmentToken);
        mToken = requireNonNull(token);
        mConfiguration.setTo(configuration);
@@ -123,6 +125,7 @@ public final class TaskFragmentInfo implements Parcelable {
        mIsTaskFragmentClearedForPip = isTaskFragmentClearedForPip;
        mIsClearedForReorderActivityToFront = isClearedForReorderActivityToFront;
        mMinimumDimensions.set(minimumDimensions);
        mIsTopNonFishingChild = isTopNonFinishingChild;
    }

    @NonNull
@@ -211,6 +214,16 @@ public final class TaskFragmentInfo implements Parcelable {
        return mMinimumDimensions.y;
    }

    /**
     * Indicates that this TaskFragment is the top non-finishing child of its parent container
     * among all Activities and TaskFragment siblings.
     *
     * @hide
     */
    public boolean isTopNonFinishingChild() {
        return mIsTopNonFishingChild;
    }

    /**
     * Returns {@code true} if the parameters that are important for task fragment organizers are
     * equal between this {@link TaskFragmentInfo} and {@param that}.
@@ -236,7 +249,8 @@ public final class TaskFragmentInfo implements Parcelable {
                && mIsTaskClearedForReuse == that.mIsTaskClearedForReuse
                && mIsTaskFragmentClearedForPip == that.mIsTaskFragmentClearedForPip
                && mIsClearedForReorderActivityToFront == that.mIsClearedForReorderActivityToFront
                && mMinimumDimensions.equals(that.mMinimumDimensions);
                && mMinimumDimensions.equals(that.mMinimumDimensions)
                && mIsTopNonFishingChild == that.mIsTopNonFishingChild;
    }

    private TaskFragmentInfo(Parcel in) {
@@ -252,6 +266,7 @@ public final class TaskFragmentInfo implements Parcelable {
        mIsTaskFragmentClearedForPip = in.readBoolean();
        mIsClearedForReorderActivityToFront = in.readBoolean();
        mMinimumDimensions.readFromParcel(in);
        mIsTopNonFishingChild = in.readBoolean();
    }

    /** @hide */
@@ -269,6 +284,7 @@ public final class TaskFragmentInfo implements Parcelable {
        dest.writeBoolean(mIsTaskFragmentClearedForPip);
        dest.writeBoolean(mIsClearedForReorderActivityToFront);
        mMinimumDimensions.writeToParcel(dest, flags);
        dest.writeBoolean(mIsTopNonFishingChild);
    }

    @NonNull
@@ -299,6 +315,7 @@ public final class TaskFragmentInfo implements Parcelable {
                + " isTaskFragmentClearedForPip=" + mIsTaskFragmentClearedForPip
                + " mIsClearedForReorderActivityToFront=" + mIsClearedForReorderActivityToFront
                + " minimumDimensions=" + mMinimumDimensions
                + " isTopNonFinishingChild=" + mIsTopNonFishingChild
                + "}";
    }

+1 −3
Original line number Diff line number Diff line
@@ -2759,9 +2759,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
        //      in the same task, the overlay will be dismissed in case an activity above
        //      the overlay is dismissed and the overlay is shown unexpectedly.
        for (final TaskFragmentContainer overlayContainer : overlayContainers) {
            final boolean isTopNonFinishingOverlay = overlayContainer.equals(
                    overlayContainer.getTaskContainer().getTopNonFinishingTaskFragmentContainer(
                            true /* includePin */, true /* includeOverlay */));
            final boolean isTopNonFinishingOverlay = overlayContainer.isTopNonFinishingChild();
            final boolean areInSameTask = taskId == overlayContainer.getTaskId();
            final boolean haveSameTag = overlayTag.equals(overlayContainer.getOverlayTag());
            if (!associateLaunchingActivity && overlayContainer.isAlwaysOnTopOverlay()
+7 −0
Original line number Diff line number Diff line
@@ -340,6 +340,13 @@ class TaskFragmentContainer {
        return mInfo != null && mInfo.isVisible();
    }

    /**
     * See {@link TaskFragmentInfo#isTopNonFinishingChild()}
     */
    boolean isTopNonFinishingChild() {
        return mInfo != null && mInfo.isTopNonFinishingChild();
    }

    /** Whether the TaskFragment is in an intermediate state waiting for the server update.*/
    boolean isInIntermediateState() {
        if (mInfo == null) {
+23 −1
Original line number Diff line number Diff line
@@ -163,12 +163,14 @@ public class EmbeddingTestUtils {
    }

    /** Creates a mock TaskFragmentInfo for the given TaskFragment. */
    @NonNull
    static TaskFragmentInfo createMockTaskFragmentInfo(@NonNull TaskFragmentContainer container,
            @NonNull Activity activity) {
        return createMockTaskFragmentInfo(container, activity, true /* isVisible */);
    }

    /** Creates a mock TaskFragmentInfo for the given TaskFragment. */
    @NonNull
    static TaskFragmentInfo createMockTaskFragmentInfo(@NonNull TaskFragmentContainer container,
            @NonNull Activity activity, boolean isVisible) {
        return new TaskFragmentInfo(container.getTaskFragmentToken(),
@@ -182,7 +184,27 @@ public class EmbeddingTestUtils {
                false /* isTaskClearedForReuse */,
                false /* isTaskFragmentClearedForPip */,
                false /* isClearedForReorderActivityToFront */,
                new Point());
                new Point(),
                false /* isTopChild */);
    }

    /** Creates a mock TaskFragmentInfo for the given TaskFragment. */
    @NonNull
    static TaskFragmentInfo createMockTaskFragmentInfo(@NonNull TaskFragmentContainer container,
            @NonNull Activity activity, boolean isVisible, boolean isOnTop) {
        return new TaskFragmentInfo(container.getTaskFragmentToken(),
                mock(WindowContainerToken.class),
                new Configuration(),
                1,
                isVisible,
                Collections.singletonList(activity.getActivityToken()),
                new ArrayList<>(),
                new Point(),
                false /* isTaskClearedForReuse */,
                false /* isTaskFragmentClearedForPip */,
                false /* isClearedForReorderActivityToFront */,
                new Point(),
                isOnTop);
    }

    static ActivityInfo createActivityInfoWithMinDimensions() {
+2 −1
Original line number Diff line number Diff line
@@ -114,6 +114,7 @@ public class JetpackTaskFragmentOrganizerTest {
                mock(WindowContainerToken.class), new Configuration(), 0 /* runningActivityCount */,
                false /* isVisible */, new ArrayList<>(), new ArrayList<>(), new Point(),
                false /* isTaskClearedForReuse */, false /* isTaskFragmentClearedForPip */,
                false /* isClearedForReorderActivityToFront */, new Point());
                false /* isClearedForReorderActivityToFront */, new Point(),
                false /* isTopChild */);
    }
}
Loading