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
This commit is contained in:
mattsziklay
2023-03-22 16:31:45 -07:00
parent 76c7fbbe4f
commit 41299be43b
3 changed files with 34 additions and 0 deletions

View File

@@ -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

View File

@@ -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`
*

View File

@@ -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.