use system menu

    On phones with hardware menu key, use the framework's
    menu
    Also fixes:
    Bug: 5051899
    remove overflow button from bar if menu key is present
    Nav options are not visible on tab switcher

Change-Id: I5b55934a392a76f9d9ef16e3bf5c71f27b88d69a
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index d1445d8..b270dea 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -35,6 +35,7 @@
 import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.Menu;
+import android.view.MenuItem;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -653,6 +654,11 @@
     }
 
     @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        return false;
+    }
+
+    @Override
     public void onOptionsMenuClosed(boolean inLoad) {
     }
 
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 9b81870..8a4433e 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -1512,6 +1512,10 @@
             // won't get onKeyUp for MENU. So it is important to reset it here.
             mMenuIsDown = false;
         }
+        if (mUi.onOptionsItemSelected(item)) {
+            // ui callback handled it
+            return true;
+        }
         switch (item.getItemId()) {
             // -- Main menu
             case R.id.new_tab_menu_id:
@@ -2462,10 +2466,6 @@
         boolean noModifiers = event.hasNoModifiers();
         // Even if MENU is already held down, we need to call to super to open
         // the IME on long press.
-        if (KeyEvent.KEYCODE_MENU == keyCode) {
-            event.startTracking();
-            return true;
-        }
         if (!noModifiers
                 && ((KeyEvent.KEYCODE_MENU == keyCode)
                         || (KeyEvent.KEYCODE_CTRL_LEFT == keyCode)
diff --git a/src/com/android/browser/NavScreen.java b/src/com/android/browser/NavScreen.java
index 23317b5..ee20535 100644
--- a/src/com/android/browser/NavScreen.java
+++ b/src/com/android/browser/NavScreen.java
@@ -23,6 +23,7 @@
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
+import android.view.ViewConfiguration;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.webkit.WebView;
@@ -59,6 +60,7 @@
     NavTabGallery mScroller;
     TabAdapter mAdapter;
     int mOrientation;
+    boolean mNeedsMenu;
 
     public NavScreen(Activity activity, UiController ctl, PhoneUi ui) {
         super(activity);
@@ -122,6 +124,10 @@
                 ? LinearLayout.HORIZONTAL : LinearLayout.VERTICAL);
         // update state for active tab
         mScroller.setSelection(mUiController.getTabControl().getTabPosition(mUi.getActiveTab()));
+        mNeedsMenu = !ViewConfiguration.get(getContext()).hasPermanentMenuKey();
+        if (!mNeedsMenu) {
+            mMore.setVisibility(View.GONE);
+        }
     }
 
     @Override
diff --git a/src/com/android/browser/NavigationBarPhone.java b/src/com/android/browser/NavigationBarPhone.java
index 2030169..400b695 100644
--- a/src/com/android/browser/NavigationBarPhone.java
+++ b/src/com/android/browser/NavigationBarPhone.java
@@ -167,30 +167,6 @@
         return mMenuShowing;
     }
 
-    void showMenu() {
-        // called from menu key, use tab switcher as anchor
-        mMenuShowing = true;
-        if (isEditingUrl()) {
-            stopEditingUrl();
-            post(new Runnable() {
-                @Override
-                public void run() {
-                    showMenu();
-                }
-            });
-        } else {
-            mBaseUi.getTitleBar().setSkipTitleBarAnimations(true);
-            mBaseUi.showTitleBar();
-            mBaseUi.getTitleBar().setSkipTitleBarAnimations(false);
-            post(new Runnable() {
-                @Override
-                public void run() {
-                    showMenu(mTabSwitcher);
-                }
-            });
-        }
-    }
-
     void showMenu(View anchor) {
         mMenuShowing = true;
         mPopupMenu = new PopupMenu(mContext, anchor);
@@ -202,13 +178,6 @@
         mPopupMenu.show();
     }
 
-    void dismissMenu() {
-       if (mPopupMenu != null) {
-           mPopupMenu.dismiss();
-           mBaseUi.suggestHideTitleBar();
-       }
-    }
-
     @Override
     public void onDismiss(PopupMenu menu) {
         onMenuHidden();
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index 9e3310b..28db6f0 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -23,6 +23,7 @@
 import android.view.Gravity;
 import android.view.KeyEvent;
 import android.view.Menu;
+import android.view.MenuItem;
 import android.view.View;
 import android.webkit.WebView;
 import android.widget.FrameLayout;
@@ -78,16 +79,6 @@
     }
 
     @Override
-    public boolean onMenuKey() {
-        if (mNavigationBar.isMenuShowing()) {
-            mNavigationBar.dismissMenu();
-        } else {
-            mNavigationBar.showMenu();
-        }
-        return true;
-    }
-
-    @Override
     public boolean dispatchKey(int code, KeyEvent event) {
         return false;
     }
@@ -169,6 +160,20 @@
     // menu handling callbacks
 
     @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        menu.setGroupVisible(R.id.NAV_MENU, (mNavScreen == null));
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (mNavScreen != null) {
+            hideNavScreen(false);
+        }
+        return false;
+    }
+
+    @Override
     public void onContextMenuCreated(Menu menu) {
         hideTitleBar();
     }
diff --git a/src/com/android/browser/UI.java b/src/com/android/browser/UI.java
index 4b58872..23897f7 100644
--- a/src/com/android/browser/UI.java
+++ b/src/com/android/browser/UI.java
@@ -22,6 +22,7 @@
 import android.view.ActionMode;
 import android.view.KeyEvent;
 import android.view.Menu;
+import android.view.MenuItem;
 import android.view.View;
 import android.webkit.WebChromeClient.CustomViewCallback;
 import android.webkit.WebView;
@@ -102,6 +103,8 @@
 
     public void onExtendedMenuOpened();
 
+    public boolean onOptionsItemSelected(MenuItem item);
+
     public void onOptionsMenuClosed(boolean inLoad);
 
     public void onExtendedMenuClosed(boolean inLoad);