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

Commit d668dde4 authored by Charles Chen's avatar Charles Chen Committed by Automerger Merge Worker
Browse files

Merge "Fixes some issues for embedded Task" into sc-v2-dev am: 62a65fbf

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

Change-Id: I41ccf37d0379b28ecd23629059d04989060f2e20
parents a209c117 62a65fbf
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -2794,7 +2794,9 @@ class ActivityStarter {
            // request. If the task was resolved and different than mInTaskFragment, reparent the
            // task to mInTaskFragment for embedding.
            if (mInTaskFragment.getTask() != task) {
                if (shouldReparentInTaskFragment(task)) {
                    task.reparent(mInTaskFragment, POSITION_TOP);
                }
            } else {
                newParent = mInTaskFragment;
            }
@@ -2813,6 +2815,18 @@ class ActivityStarter {
        }
    }

    private boolean shouldReparentInTaskFragment(Task task) {
        // The task has not been embedded. We should reparent the task to TaskFragment.
        if (!task.isEmbedded()) {
            return true;
        }
        WindowContainer<?> parent = task.getParent();
        // If the Activity is going to launch on top of embedded Task in the same TaskFragment,
        // we don't need to reparent the Task. Otherwise, the embedded Task should reparent to
        // another TaskFragment.
        return parent.asTaskFragment() != mInTaskFragment;
    }

    private int adjustLaunchFlagsToDocumentMode(ActivityRecord r, boolean launchSingleInstance,
            boolean launchSingleTask, int launchFlags) {
        if ((launchFlags & Intent.FLAG_ACTIVITY_NEW_DOCUMENT) != 0 &&
+4 −22
Original line number Diff line number Diff line
@@ -1236,7 +1236,7 @@ class Task extends TaskFragment {
        mRootWindowContainer.updateUIDsPresentOnDisplay();
    }

    /** Returns the currently topmost resumed activity. */
    @Override
    @Nullable
    ActivityRecord getTopResumedActivity() {
        if (!isLeafTask()) {
@@ -1253,15 +1253,7 @@ class Task extends TaskFragment {
        for (int i = mChildren.size() - 1; i >= 0; --i) {
            final WindowContainer child = mChildren.get(i);
            if (child.asTaskFragment() != null) {
                final ActivityRecord[] resumedActivity = new ActivityRecord[1];
                child.asTaskFragment().forAllLeafTaskFragments(fragment -> {
                    if (fragment.getResumedActivity() != null) {
                        resumedActivity[0] = fragment.getResumedActivity();
                        return true;
                    }
                    return false;
                });
                topResumedActivity = resumedActivity[0];
                topResumedActivity = child.asTaskFragment().getTopResumedActivity();
            } else if (taskResumedActivity != null
                    && child.asActivityRecord() == taskResumedActivity) {
                topResumedActivity = taskResumedActivity;
@@ -1273,9 +1265,7 @@ class Task extends TaskFragment {
        return null;
    }

    /**
     * Returns the currently topmost pausing activity.
     */
    @Override
    @Nullable
    ActivityRecord getTopPausingActivity() {
        if (!isLeafTask()) {
@@ -1292,15 +1282,7 @@ class Task extends TaskFragment {
        for (int i = mChildren.size() - 1; i >= 0; --i) {
            final WindowContainer child = mChildren.get(i);
            if (child.asTaskFragment() != null) {
                final ActivityRecord[] pausingActivity = new ActivityRecord[1];
                child.asTaskFragment().forAllLeafTaskFragments(fragment -> {
                    if (fragment.getPausingActivity() != null) {
                        pausingActivity[0] = fragment.getPausingActivity();
                        return true;
                    }
                    return false;
                });
                topPausingActivity = pausingActivity[0];
                topPausingActivity = child.asTaskFragment().getTopPausingActivity();
            } else if (taskPausingActivity != null
                    && child.asActivityRecord() == taskPausingActivity) {
                topPausingActivity = taskPausingActivity;
+45 −2
Original line number Diff line number Diff line
@@ -352,7 +352,29 @@ class TaskFragment extends WindowContainer<WindowContainer> {
        return mAdjacentTaskFragment;
    }

    /** @return the currently resumed activity. */
    /** Returns the currently topmost resumed activity. */
    @Nullable
    ActivityRecord getTopResumedActivity() {
        final ActivityRecord taskFragResumedActivity = getResumedActivity();
        for (int i = getChildCount() - 1; i >= 0; --i) {
            WindowContainer<?> child = getChildAt(i);
            ActivityRecord topResumedActivity = null;
            if (taskFragResumedActivity != null && child == taskFragResumedActivity) {
                topResumedActivity = child.asActivityRecord();
            } else if (child.asTaskFragment() != null) {
                topResumedActivity = child.asTaskFragment().getTopResumedActivity();
            }
            if (topResumedActivity != null) {
                return topResumedActivity;
            }
        }
        return null;
    }

    /**
     * Returns the currently resumed activity in this TaskFragment's
     * {@link #mChildren direct children}
     */
    ActivityRecord getResumedActivity() {
        return mResumedActivity;
    }
@@ -376,6 +398,25 @@ class TaskFragment extends WindowContainer<WindowContainer> {
        mPausingActivity = pausing;
    }

    /** Returns the currently topmost pausing activity. */
    @Nullable
    ActivityRecord getTopPausingActivity() {
        final ActivityRecord taskFragPausingActivity = getPausingActivity();
        for (int i = getChildCount() - 1; i >= 0; --i) {
            WindowContainer<?> child = getChildAt(i);
            ActivityRecord topPausingActivity = null;
            if (taskFragPausingActivity != null && child == taskFragPausingActivity) {
                topPausingActivity = child.asActivityRecord();
            } else if (child.asTaskFragment() != null) {
                topPausingActivity = child.asTaskFragment().getTopPausingActivity();
            }
            if (topPausingActivity != null) {
                return topPausingActivity;
            }
        }
        return null;
    }

    ActivityRecord getPausingActivity() {
        return mPausingActivity;
    }
@@ -1673,7 +1714,9 @@ class TaskFragment extends WindowContainer<WindowContainer> {
        }

        final Task thisTask = asTask();
        if (thisTask != null) {
        // Embedded Task's configuration should go with parent TaskFragment, so we don't re-compute
        // configuration here.
        if (thisTask != null && !thisTask.isEmbedded()) {
            thisTask.resolveLeafTaskOnlyOverrideConfigs(newParentConfig,
                    mTmpBounds /* previousBounds */);
        }