From 4852ebcf2f622138bd8a23b8d95eae4e5e652a36 Mon Sep 17 00:00:00 2001 From: Material Design Team Date: Thu, 4 Sep 2025 07:50:49 +0000 Subject: [PATCH] [Menu][A11y] Update Menu Catalog Demo to use Ctrl + Enter for Context Menu The context menu in the Menu catalog demo now opens when `Ctrl + Enter` is pressed on a keyboard, instead of just `Enter`. The description text has also been updated to reflect this change. PiperOrigin-RevId: 802901209 --- .../catalog/menu/MenuMainDemoFragment.java | 17 ++++++++++++++++- .../catalog/menu/res/values/strings.xml | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/catalog/java/io/material/catalog/menu/MenuMainDemoFragment.java b/catalog/java/io/material/catalog/menu/MenuMainDemoFragment.java index fb0f471fc..953d41f1a 100644 --- a/catalog/java/io/material/catalog/menu/MenuMainDemoFragment.java +++ b/catalog/java/io/material/catalog/menu/MenuMainDemoFragment.java @@ -36,6 +36,7 @@ import android.text.style.BackgroundColorSpan; import android.util.TypedValue; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; +import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -90,7 +91,7 @@ public class MenuMainDemoFragment extends DemoFragment { iconMenuButton.setOnClickListener(v -> showMenu(v, R.menu.menu_with_icons)); TextView contextMenuTextView = view.findViewById(R.id.context_menu_tv); - registerForContextMenu(contextMenuTextView); + setupContextMenuWithKeyboard(contextMenuTextView); Button listPopupWindowButton = view.findViewById(R.id.list_popup_window); ListPopupWindow listPopupWindow = initializeListPopupMenu(listPopupWindowButton); @@ -99,6 +100,20 @@ public class MenuMainDemoFragment extends DemoFragment { return view; } + private void setupContextMenuWithKeyboard(View view) { + registerForContextMenu(view); + view.setOnKeyListener( + (v, keyCode, event) -> { + if (event.getAction() == KeyEvent.ACTION_DOWN + && event.isCtrlPressed() + && (keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_DPAD_CENTER)) { + v.showContextMenu(); + return true; + } + return false; + }); + } + @SuppressWarnings("RestrictTo") private void showMenu(View v, @MenuRes int menuRes) { PopupMenu popup = new PopupMenu(getContext(), v); diff --git a/catalog/java/io/material/catalog/menu/res/values/strings.xml b/catalog/java/io/material/catalog/menu/res/values/strings.xml index 8f7e3f9b0..6dbad944e 100644 --- a/catalog/java/io/material/catalog/menu/res/values/strings.xml +++ b/catalog/java/io/material/catalog/menu/res/values/strings.xml @@ -31,7 +31,7 @@ - This TextView opens a context menu when long pressed or by pressing Enter on a keyboard. + This TextView opens a context menu when long pressed or by pressing Ctrl + Enter on a keyboard. \n\nIt provides actions that affect the selected content or context frame. Highlight