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

Commit 47ef6075 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:...

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

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

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

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

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

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

    public int getRunningActivityCount() {
        return mRunningActivityCount;
    }

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

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

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