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

Commit 152b4101 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes from topic "remove-intermediate-callbacks" into sc-v2-dev

* changes:
  Adds Test that verifies an Activity is Still Reported...
  Do not send split info update when TaskFragmentContainer
  Include Activities That Have Not Been Assigned...
  Update toString methods for various Embedding...
parents 7225f45e dbcffad4
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -213,6 +213,7 @@ public final class TaskFragmentInfo implements Parcelable {
                + " isEmpty=" + mIsEmpty
                + " runningActivityCount=" + mRunningActivityCount
                + " isVisible=" + mIsVisible
                + " activities=" + mActivities
                + " positionInParent=" + mPositionInParent
                + " isTaskClearedForReuse=" + mIsTaskClearedForReuse
                + "}";
+9 −0
Original line number Diff line number Diff line
@@ -83,4 +83,13 @@ class SplitContainer {
                && ((SplitPairRule) splitRule).shouldFinishSecondaryWithPrimary();
        return shouldFinishSecondaryWithPrimary || isPlaceholderContainer;
    }

    @Override
    public String toString() {
        return "SplitContainer{"
                + " primaryContainer=" + mPrimaryContainer
                + " secondaryContainer=" + mSecondaryContainer
                + " splitRule=" + mSplitRule
                + "}";
    }
}
+8 −4
Original line number Diff line number Diff line
@@ -497,7 +497,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
            return;
        }
        List<SplitInfo> currentSplitStates = getActiveSplitStates();
        if (mLastReportedSplitStates.equals(currentSplitStates)) {
        if (currentSplitStates == null || mLastReportedSplitStates.equals(currentSplitStates)) {
            return;
        }
        mLastReportedSplitStates.clear();
@@ -506,15 +506,19 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
    }

    /**
     * Returns a list of descriptors for currently active split states.
     * @return a list of descriptors for currently active split states. If the value returned is
     * null, that indicates that the active split states are in an intermediate state and should
     * not be reported.
     */
    @Nullable
    private List<SplitInfo> getActiveSplitStates() {
        List<SplitInfo> splitStates = new ArrayList<>();
        for (SplitContainer container : mSplitContainers) {
            if (container.getPrimaryContainer().isEmpty()
                    || container.getSecondaryContainer().isEmpty()) {
                // Skipping containers that do not have any activities to report.
                continue;
                // We are in an intermediate state because either the split container is about to be
                // removed or the primary or secondary container are about to receive an activity.
                return null;
            }
            ActivityStack primaryContainer = container.getPrimaryContainer().toActivityStack();
            ActivityStack secondaryContainer = container.getSecondaryContainer().toActivityStack();
+39 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.window.TaskFragmentInfo;
import android.window.WindowContainerTransaction;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
@@ -267,4 +268,42 @@ class TaskFragmentContainer {
            mLastRequestedBounds.set(bounds);
        }
    }

    @Override
    public String toString() {
        return toString(true /* includeContainersToFinishOnExit */);
    }

    /**
     * @return string for this TaskFragmentContainer and includes containers to finish on exit
     * based on {@code includeContainersToFinishOnExit}. If containers to finish on exit are always
     * included in the string, then calling {@link #toString()} on a container that mutually
     * finishes with another container would cause a stack overflow.
     */
    private String toString(boolean includeContainersToFinishOnExit) {
        return "TaskFragmentContainer{"
                + " token=" + mToken
                + " info=" + mInfo
                + " topNonFinishingActivity=" + getTopNonFinishingActivity()
                + " pendingAppearedActivities=" + mPendingAppearedActivities
                + (includeContainersToFinishOnExit ? " containersToFinishOnExit="
                + containersToFinishOnExitToString() : "")
                + " activitiesToFinishOnExit=" + mActivitiesToFinishOnExit
                + " isFinished=" + mIsFinished
                + " lastRequestedBounds=" + mLastRequestedBounds
                + "}";
    }

    private String containersToFinishOnExitToString() {
        StringBuilder sb = new StringBuilder("[");
        Iterator<TaskFragmentContainer> containerIterator = mContainersToFinishOnExit.iterator();
        while (containerIterator.hasNext()) {
            sb.append(containerIterator.next().toString(
                    false /* includeContainersToFinishOnExit */));
            if (containerIterator.hasNext()) {
                sb.append(", ");
            }
        }
        return sb.append("]").toString();
    }
}
+11 −11
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import static android.content.pm.ActivityInfo.FLAG_RESUME_WHILE_PAUSING;
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
import static android.content.res.Configuration.ORIENTATION_UNDEFINED;
import static android.os.Process.INVALID_UID;
import static android.os.UserHandle.USER_NULL;
import static android.view.Display.INVALID_DISPLAY;
import static android.view.WindowManager.TRANSIT_CLOSE;
@@ -221,6 +222,8 @@ class TaskFragment extends WindowContainer<WindowContainer> {
    /** Organizer that organizing this TaskFragment. */
    @Nullable
    private ITaskFragmentOrganizer mTaskFragmentOrganizer;
    private int mTaskFragmentOrganizerUid = INVALID_UID;
    private @Nullable String mTaskFragmentOrganizerProcessName;

    /** Client assigned unique token for this TaskFragment if this is created by an organizer. */
    @Nullable
@@ -233,13 +236,6 @@ class TaskFragment extends WindowContainer<WindowContainer> {
     */
    private boolean mDelayLastActivityRemoval;

    /**
     * The PID of the organizer that created this TaskFragment. It should be the same as the PID
     * of {@link android.window.TaskFragmentCreationParams#getOwnerToken()}.
     * {@link ActivityRecord#INVALID_PID} if this is not an organizer-created TaskFragment.
     */
    private int mTaskFragmentOrganizerPid = ActivityRecord.INVALID_PID;

    final Point mLastSurfaceSize = new Point();

    private final Rect mTmpInsets = new Rect();
@@ -338,9 +334,11 @@ class TaskFragment extends WindowContainer<WindowContainer> {
        mDelayLastActivityRemoval = false;
    }

    void setTaskFragmentOrganizer(TaskFragmentOrganizerToken organizer, int pid) {
    void setTaskFragmentOrganizer(@NonNull TaskFragmentOrganizerToken organizer, int uid,
            @NonNull String processName) {
        mTaskFragmentOrganizer = ITaskFragmentOrganizer.Stub.asInterface(organizer.asBinder());
        mTaskFragmentOrganizerPid = pid;
        mTaskFragmentOrganizerUid = uid;
        mTaskFragmentOrganizerProcessName = processName;
    }

    /** Whether this TaskFragment is organized by the given {@code organizer}. */
@@ -2180,9 +2178,11 @@ class TaskFragment extends WindowContainer<WindowContainer> {
        List<IBinder> childActivities = new ArrayList<>();
        for (int i = 0; i < getChildCount(); i++) {
            WindowContainer wc = getChildAt(i);
            if (mTaskFragmentOrganizerPid != ActivityRecord.INVALID_PID
            if (mTaskFragmentOrganizerUid != INVALID_UID
                    && wc.asActivityRecord() != null
                    && wc.asActivityRecord().getPid() == mTaskFragmentOrganizerPid) {
                    && wc.asActivityRecord().info.processName.equals(
                            mTaskFragmentOrganizerProcessName)
                    && wc.asActivityRecord().getUid() == mTaskFragmentOrganizerUid) {
                // Only includes Activities that belong to the organizer process for security.
                childActivities.add(wc.asActivityRecord().appToken);
            }
Loading