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

Commit 20f55b10 authored by Louis Chang's avatar Louis Chang
Browse files

Supporting independent back nav while task embedded

Also directly setting the focused app if there is a task
embedded in the split.

Bug: 189385926
Test: navigate independently
Change-Id: I0fb36a4bcc6245af26f114f96862e1cb498d146d
parent a44fcb0d
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -1909,17 +1909,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
@@ -777,12 +777,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;