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

Commit 41299be4 authored by mattsziklay's avatar mattsziklay
Browse files

Bring task to front when interacting with header.

When interacting with window header (moving, tapping, opening menu), the window is brought to the front.

Test: Manual, open multiple windows layered over each other, interact
with header, including handle menu button, and verify layering changes.

Bug: 271487478
Change-Id: I840d63896fee879b4a7917dc9936af9ac3f444ec
parent 76c7fbbe
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -312,6 +312,20 @@ public class DesktopModeController implements RemoteCallable<DesktopModeControll
        }
    }

    /**
     * Moves a specifc task to the front.
     * @param taskInfo the task to show in front.
     */
    public void moveTaskToFront(RunningTaskInfo taskInfo) {
        WindowContainerTransaction wct = new WindowContainerTransaction();
        wct.reorder(taskInfo.token, true /* onTop */);
        if (Transitions.ENABLE_SHELL_TRANSITIONS) {
            mTransitions.startTransition(TRANSIT_TO_FRONT, wct, null);
        } else {
            mShellTaskOrganizer.applyTransaction(wct);
        }
    }

    /**
     * Turn desktop mode on or off
     * @param active the desired state for desktop mode setting
+11 −0
Original line number Diff line number Diff line
@@ -143,6 +143,17 @@ class DesktopTasksController(
        }
    }

    /** Move a task to the front **/
    fun moveTaskToFront(taskInfo: ActivityManager.RunningTaskInfo) {
        val wct = WindowContainerTransaction()
        wct.reorder(taskInfo.token, true)
        if (Transitions.ENABLE_SHELL_TRANSITIONS) {
            transitions.startTransition(TRANSIT_TO_FRONT, wct, null /* handler */)
        } else {
            shellTaskOrganizer.applyTransaction(wct)
        }
    }

    /**
     * Get windowing move for a given `taskId`
     *
+9 −0
Original line number Diff line number Diff line
@@ -252,6 +252,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
            } else if (id == R.id.back_button) {
                mTaskOperations.injectBackKey();
            } else if (id == R.id.caption_handle || id == R.id.open_menu_button) {
                moveTaskToFront(mTaskOrganizer.getRunningTaskInfo(mTaskId));
                decoration.createHandleMenu();
            } else if (id == R.id.desktop_button) {
                mDesktopModeController.ifPresent(c -> c.setDesktopModeActive(true));
@@ -272,9 +273,17 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
            if (id != R.id.caption_handle && id != R.id.desktop_mode_caption) {
                return false;
            }
            moveTaskToFront(mTaskOrganizer.getRunningTaskInfo(mTaskId));
            return mDragDetector.onMotionEvent(e);
        }

        private void moveTaskToFront(RunningTaskInfo taskInfo) {
            if (!taskInfo.isFocused) {
                mDesktopTasksController.ifPresent(c -> c.moveTaskToFront(taskInfo));
                mDesktopModeController.ifPresent(c -> c.moveTaskToFront(taskInfo));
            }
        }

        /**
         * @param e {@link MotionEvent} to process
         * @return {@code true} if the motion event is handled.