diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java index 4d3434970ae70..72f8c779227af 100644 --- a/core/java/android/app/ActionBar.java +++ b/core/java/android/app/ActionBar.java @@ -1056,6 +1056,11 @@ public abstract class ActionBar { return false; } + /** @hide */ + public boolean onKeyShortcut(int keyCode, KeyEvent event) { + return false; + } + /** @hide */ public boolean collapseActionView() { return false; diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index d07238aa702b4..7572799108a18 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -2469,7 +2469,9 @@ public class Activity extends ContextThemeWrapper * @return True if the key shortcut was handled. */ public boolean onKeyShortcut(int keyCode, KeyEvent event) { - return false; + // Let the Action Bar have a chance at handling the shortcut. + ActionBar actionBar = getActionBar(); + return (actionBar != null && actionBar.onKeyShortcut(keyCode, event)); } /** diff --git a/core/java/com/android/internal/app/ToolbarActionBar.java b/core/java/com/android/internal/app/ToolbarActionBar.java index 2b162af6c7efa..c1b184e12fb9e 100644 --- a/core/java/com/android/internal/app/ToolbarActionBar.java +++ b/core/java/com/android/internal/app/ToolbarActionBar.java @@ -463,6 +463,18 @@ public class ToolbarActionBar extends ActionBar { return true; } + @Override + public boolean onKeyShortcut(int keyCode, KeyEvent event) { + Menu menu = mDecorToolbar.getMenu(); + if (menu != null) { + menu.performShortcut(keyCode, event, 0); + } + // This action bar always returns true for handling keyboard shortcuts. + // This will block the window from preparing a temporary panel to handle + // keyboard shortcuts. + return true; + } + public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) { mMenuVisibilityListeners.add(listener); }