| Index: chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java
|
| index 090beba78a66e0085d730e605b5c0183cbaa62e9..4cfefcf0d77a9275482fcbe68c7299777ee2ef09 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java
|
| @@ -7,11 +7,13 @@ package org.chromium.chrome.browser.appmenu;
|
| import android.content.Context;
|
| import android.content.res.Resources;
|
| import android.graphics.Rect;
|
| +import android.view.KeyEvent;
|
| import android.view.LayoutInflater;
|
| import android.view.Menu;
|
| import android.view.MenuItem;
|
| import android.view.Surface;
|
| import android.view.View;
|
| +import android.view.View.OnKeyListener;
|
| import android.view.ViewGroup;
|
| import android.widget.AdapterView;
|
| import android.widget.AdapterView.OnItemClickListener;
|
| @@ -31,7 +33,7 @@ import java.util.List;
|
| * - Only visible MenuItems are shown.
|
| * - Disabled items are grayed out.
|
| */
|
| -public class AppMenu implements OnItemClickListener {
|
| +public class AppMenu implements OnItemClickListener, OnKeyListener {
|
| private static final float LAST_ITEM_SHOW_FRACTION = 0.5f;
|
|
|
| private final Menu mMenu;
|
| @@ -120,6 +122,7 @@ public class AppMenu implements OnItemClickListener {
|
| mPopup.setOnItemClickListener(this);
|
| mPopup.show();
|
| mPopup.getListView().setItemsCanFocus(true);
|
| + mPopup.getListView().setOnKeyListener(this);
|
|
|
| mHandler.onMenuVisibilityChanged(true);
|
|
|
| @@ -180,6 +183,26 @@ public class AppMenu implements OnItemClickListener {
|
| onItemClick(mAdapter.getItem(position));
|
| }
|
|
|
| + @Override
|
| + public boolean onKey(View v, int keyCode, KeyEvent event) {
|
| + if (mPopup == null || mPopup.getListView() == null) return false;
|
| +
|
| + if (event.getKeyCode() == KeyEvent.KEYCODE_MENU) {
|
| + if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) {
|
| + event.startTracking();
|
| + v.getKeyDispatcherState().startTracking(event, this);
|
| + return true;
|
| + } else if (event.getAction() == KeyEvent.ACTION_UP) {
|
| + v.getKeyDispatcherState().handleUpEvent(event);
|
| + if (event.isTracking() && !event.isCanceled()) {
|
| + dismiss();
|
| + return true;
|
| + }
|
| + }
|
| + }
|
| + return false;
|
| + }
|
| +
|
| /**
|
| * Dismisses the app menu and cancels the drag-to-scroll if it is taking place.
|
| */
|
|
|