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

Commit cec212c4 authored by Louis Chang's avatar Louis Chang Committed by Automerger Merge Worker
Browse files

Merge "Finish the primary container while secondary exited" into sc-v2-dev am: 4abf39e6

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15723038

Change-Id: Iae5949672b79ff288c3473e16a7412dc83808349
parents e8522e21 4abf39e6
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -3229,6 +3229,7 @@ package android.window {
    method @NonNull public android.content.res.Configuration getConfiguration();
    method @NonNull public android.content.res.Configuration getConfiguration();
    method @NonNull public android.os.IBinder getFragmentToken();
    method @NonNull public android.os.IBinder getFragmentToken();
    method @NonNull public android.graphics.Point getPositionInParent();
    method @NonNull public android.graphics.Point getPositionInParent();
    method public int getRunningActivityCount();
    method @NonNull public android.window.WindowContainerToken getToken();
    method @NonNull public android.window.WindowContainerToken getToken();
    method public int getWindowingMode();
    method public int getWindowingMode();
    method public boolean hasRunningActivity();
    method public boolean hasRunningActivity();
+13 −9
Original line number Original line Diff line number Diff line
@@ -55,8 +55,8 @@ public final class TaskFragmentInfo implements Parcelable {
    /** Whether the TaskFragment contains any child Window Container. */
    /** Whether the TaskFragment contains any child Window Container. */
    private final boolean mIsEmpty;
    private final boolean mIsEmpty;


    /** Whether the TaskFragment contains any running Activity. */
    /** The number of the running activities in the TaskFragment. */
    private final boolean mHasRunningActivity;
    private final int mRunningActivityCount;


    /** Whether this TaskFragment is visible on the window hierarchy. */
    /** Whether this TaskFragment is visible on the window hierarchy. */
    private final boolean mIsVisible;
    private final boolean mIsVisible;
@@ -74,13 +74,13 @@ public final class TaskFragmentInfo implements Parcelable {
    /** @hide */
    /** @hide */
    public TaskFragmentInfo(
    public TaskFragmentInfo(
            @NonNull IBinder fragmentToken, @NonNull WindowContainerToken token,
            @NonNull IBinder fragmentToken, @NonNull WindowContainerToken token,
            @NonNull Configuration configuration, boolean isEmpty, boolean hasRunningActivity,
            @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) {
        mFragmentToken = requireNonNull(fragmentToken);
        mFragmentToken = requireNonNull(fragmentToken);
        mToken = requireNonNull(token);
        mToken = requireNonNull(token);
        mConfiguration.setTo(configuration);
        mConfiguration.setTo(configuration);
        mIsEmpty = isEmpty;
        mIsEmpty = isEmpty;
        mHasRunningActivity = hasRunningActivity;
        mRunningActivityCount = runningActivityCount;
        mIsVisible = isVisible;
        mIsVisible = isVisible;
        mActivities.addAll(activities);
        mActivities.addAll(activities);
        mPositionInParent = requireNonNull(positionInParent);
        mPositionInParent = requireNonNull(positionInParent);
@@ -106,7 +106,11 @@ public final class TaskFragmentInfo implements Parcelable {
    }
    }


    public boolean hasRunningActivity() {
    public boolean hasRunningActivity() {
        return mHasRunningActivity;
        return mRunningActivityCount > 0;
    }

    public int getRunningActivityCount() {
        return mRunningActivityCount;
    }
    }


    public boolean isVisible() {
    public boolean isVisible() {
@@ -141,7 +145,7 @@ public final class TaskFragmentInfo implements Parcelable {
        return mFragmentToken.equals(that.mFragmentToken)
        return mFragmentToken.equals(that.mFragmentToken)
                && mToken.equals(that.mToken)
                && mToken.equals(that.mToken)
                && mIsEmpty == that.mIsEmpty
                && mIsEmpty == that.mIsEmpty
                && mHasRunningActivity == that.mHasRunningActivity
                && mRunningActivityCount == that.mRunningActivityCount
                && mIsVisible == that.mIsVisible
                && mIsVisible == that.mIsVisible
                && getWindowingMode() == that.getWindowingMode()
                && getWindowingMode() == that.getWindowingMode()
                && mActivities.equals(that.mActivities)
                && mActivities.equals(that.mActivities)
@@ -153,7 +157,7 @@ public final class TaskFragmentInfo implements Parcelable {
        mToken = in.readTypedObject(WindowContainerToken.CREATOR);
        mToken = in.readTypedObject(WindowContainerToken.CREATOR);
        mConfiguration.readFromParcel(in);
        mConfiguration.readFromParcel(in);
        mIsEmpty = in.readBoolean();
        mIsEmpty = in.readBoolean();
        mHasRunningActivity = in.readBoolean();
        mRunningActivityCount = in.readInt();
        mIsVisible = in.readBoolean();
        mIsVisible = in.readBoolean();
        in.readBinderList(mActivities);
        in.readBinderList(mActivities);
        mPositionInParent = requireNonNull(in.readTypedObject(Point.CREATOR));
        mPositionInParent = requireNonNull(in.readTypedObject(Point.CREATOR));
@@ -166,7 +170,7 @@ public final class TaskFragmentInfo implements Parcelable {
        dest.writeTypedObject(mToken, flags);
        dest.writeTypedObject(mToken, flags);
        mConfiguration.writeToParcel(dest, flags);
        mConfiguration.writeToParcel(dest, flags);
        dest.writeBoolean(mIsEmpty);
        dest.writeBoolean(mIsEmpty);
        dest.writeBoolean(mHasRunningActivity);
        dest.writeInt(mRunningActivityCount);
        dest.writeBoolean(mIsVisible);
        dest.writeBoolean(mIsVisible);
        dest.writeBinderList(mActivities);
        dest.writeBinderList(mActivities);
        dest.writeTypedObject(mPositionInParent, flags);
        dest.writeTypedObject(mPositionInParent, flags);
@@ -192,7 +196,7 @@ public final class TaskFragmentInfo implements Parcelable {
                + " fragmentToken=" + mFragmentToken
                + " fragmentToken=" + mFragmentToken
                + " token=" + mToken
                + " token=" + mToken
                + " isEmpty=" + mIsEmpty
                + " isEmpty=" + mIsEmpty
                + " hasRunningActivity=" + mHasRunningActivity
                + " runningActivityCount=" + mRunningActivityCount
                + " isVisible=" + mIsVisible
                + " isVisible=" + mIsVisible
                + " positionInParent=" + mPositionInParent
                + " positionInParent=" + mPositionInParent
                + "}";
                + "}";
+9 −1
Original line number Original line Diff line number Diff line
@@ -40,8 +40,16 @@ class SplitContainer {
        mSplitRule = splitRule;
        mSplitRule = splitRule;


        if (shouldFinishPrimaryWithSecondary(splitRule)) {
        if (shouldFinishPrimaryWithSecondary(splitRule)) {
            if (mPrimaryContainer.getRunningActivityCount() == 1
                    && mPrimaryContainer.hasActivity(primaryActivity.getActivityToken())) {
                mSecondaryContainer.addContainerToFinishOnExit(mPrimaryContainer);
            } else {
                // Only adding the activity to be finished vs. the entire TaskFragment while
                // the secondary container exits because there are other unrelated activities in the
                // primary TaskFragment.
                mSecondaryContainer.addActivityToFinishOnExit(primaryActivity);
                mSecondaryContainer.addActivityToFinishOnExit(primaryActivity);
            }
            }
        }
        if (shouldFinishSecondaryWithPrimary(splitRule)) {
        if (shouldFinishSecondaryWithPrimary(splitRule)) {
            mPrimaryContainer.addContainerToFinishOnExit(mSecondaryContainer);
            mPrimaryContainer.addContainerToFinishOnExit(mSecondaryContainer);
        }
        }
+8 −0
Original line number Original line Diff line number Diff line
@@ -125,6 +125,14 @@ class TaskFragmentContainer {
        return false;
        return false;
    }
    }


    int getRunningActivityCount() {
        int count = mPendingAppearedActivities.size();
        if (mInfo != null) {
            count += mInfo.getRunningActivityCount();
        }
        return count;
    }

    @Nullable
    @Nullable
    TaskFragmentInfo getInfo() {
    TaskFragmentInfo getInfo() {
        return mInfo;
        return mInfo;
+7 −1
Original line number Original line Diff line number Diff line
@@ -2080,12 +2080,18 @@ class TaskFragment extends WindowContainer<WindowContainer> {
        }
        }
        final Point positionInParent = new Point();
        final Point positionInParent = new Point();
        getRelativePosition(positionInParent);
        getRelativePosition(positionInParent);
        final int[] runningActivityCount = new int[1];
        forAllActivities(a -> {
            if (!a.finishing) {
                runningActivityCount[0]++;
            }
        });
        return new TaskFragmentInfo(
        return new TaskFragmentInfo(
                mFragmentToken,
                mFragmentToken,
                mRemoteToken.toWindowContainerToken(),
                mRemoteToken.toWindowContainerToken(),
                getConfiguration(),
                getConfiguration(),
                getChildCount() == 0,
                getChildCount() == 0,
                hasRunningActivity(this),
                runningActivityCount[0],
                isVisible(),
                isVisible(),
                childActivities,
                childActivities,
                positionInParent);
                positionInParent);