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

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

Merge "Supporting independent back nav while task embedded" into sc-v2-dev am:...

Merge "Supporting independent back nav while task embedded" into sc-v2-dev am: c3a85ce0 am: 66919a7c

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

Change-Id: I767ee85a9ac388bc1a1ce562b13fd7a60a7c8f15
parents 51a0f7c3 66919a7c
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -1908,17 +1908,17 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {

        if (r.moveFocusableActivityToTop("setFocusedTask")) {
            mRootWindowContainer.resumeFocusedTasksTopActivities();
        } else if (touchedActivity != null && touchedActivity != r
                && touchedActivity.getTask() == r.getTask()
                && touchedActivity.getTaskFragment() != r.getTaskFragment()) {
            // Set the focused app directly since the focused window is not on the
            // top-most TaskFragment of the top-most Task
        } else if (touchedActivity != null && touchedActivity.isFocusable()) {
            final TaskFragment parent = touchedActivity.getTaskFragment();
            if (parent != null && parent.isEmbedded()) {
                // Set the focused app directly if the focused window is currently embedded
                final DisplayContent displayContent = touchedActivity.getDisplayContent();
                displayContent.setFocusedApp(touchedActivity);
                mWindowManager.updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL,
                        true /* updateInputWindows */);
            }
        }
    }

    @Override
    public boolean removeTask(int taskId) {
+13 −4
Original line number Diff line number Diff line
@@ -771,12 +771,21 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
                return true;
            }

            if (focusedApp.getTask() == activity.getTask()
                    && focusedApp.getTaskFragment() != activity.getTaskFragment()) {
                // Do not use the activity window of another TaskFragment in the same leaf Task
            // If the candidate activity is currently being embedded in the focused task, the
            // activity cannot be focused unless it is on the same TaskFragment as the focusedApp's.
            TaskFragment parent = activity.getTaskFragment();
            if (parent != null && parent.isEmbedded()) {
                Task hostTask = focusedApp.getTask();
                if (hostTask.isEmbedded()) {
                    // Use the hosting task if the current task is embedded.
                    hostTask = hostTask.getParent().asTaskFragment().getTask();
                }
                if (activity.isDescendantOf(hostTask)
                        && activity.getTaskFragment() != focusedApp.getTaskFragment()) {
                    return false;
                }
            }
        }

        ProtoLog.v(WM_DEBUG_FOCUS_LIGHT, "findFocusedWindow: Found new focus @ %s", w);
        mTmpWindow = w;