Commit 305edfed authored by kkimlabs@chromium.org's avatar kkimlabs@chromium.org

[Android] Regression fix: dismiss popup menu on HW menu button press.

BUG=366154

Review URL: https://codereview.chromium.org/314103003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@275619 0039d316-1c4b-4281-b951-d872f2087c98
parent b2662554
......@@ -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.
*/
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment