Prevent multiple handle menus from opening.

Changes the handle menu logic such that if the open menu button is
clicked while the menu is currently open, it will close the existing
menu rather than make a second handle menu.

Bug: 277125646
Test: Manual; click the exposed corners of the open menu button while
handle menu is open. Confirm clicking handle menu pills is unaffected.

Change-Id: I230e1dcac2a338c41a7c74acb37e3c13b711f218
This commit is contained in:
mattsziklay
2023-04-05 18:12:00 -07:00
committed by Matt Sziklay
parent bbbe3c7935
commit 18c329c208
2 changed files with 16 additions and 3 deletions

View File

@@ -312,8 +312,12 @@ 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();
if (!decoration.isHandleMenuActive()) {
moveTaskToFront(mTaskOrganizer.getRunningTaskInfo(mTaskId));
decoration.createHandleMenu();
} else {
decoration.closeHandleMenu();
}
} else if (id == R.id.desktop_button) {
mDesktopModeController.ifPresent(c -> c.setDesktopModeActive(true));
mDesktopTasksController.ifPresent(c -> c.moveToDesktop(mTaskId));

View File

@@ -446,6 +446,14 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
if (mHandleMenuAppInfoPill.mWindowViewHost.getView().getWidth() == 0) return;
PointF inputPoint = offsetCaptionLocation(ev);
// If this is called before open_menu_button's onClick, we don't want to close
// the menu since it will just reopen in onClick.
final boolean pointInOpenMenuButton = pointInView(
mResult.mRootView.findViewById(R.id.open_menu_button),
inputPoint.x,
inputPoint.y);
final boolean pointInAppInfoPill = pointInView(
mHandleMenuAppInfoPill.mWindowViewHost.getView(),
inputPoint.x - mHandleMenuAppInfoPillPosition.x - mResult.mDecorContainerOffsetX,
@@ -465,7 +473,8 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
- mResult.mDecorContainerOffsetX,
inputPoint.y - mHandleMenuMoreActionsPillPosition.y
- mResult.mDecorContainerOffsetY);
if (!pointInAppInfoPill && !pointInWindowingPill && !pointInMoreActionsPill) {
if (!pointInAppInfoPill && !pointInWindowingPill
&& !pointInMoreActionsPill && !pointInOpenMenuButton) {
closeHandleMenu();
}
}