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

Commit 62a65fbf authored by Charles Chen's avatar Charles Chen Committed by Android (Google) Code Review
Browse files

Merge "Fixes some issues for embedded Task" into sc-v2-dev

parents f9de2e24 98d61854
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 */);
        }