Add overflow menu to title bar

    Bug: 5011697

Change-Id: Idcd9ddc2883caa0ee0513300b8322af1c6d89423
diff --git a/src/com/android/browser/TitleBarPhone.java b/src/com/android/browser/TitleBarPhone.java
index f41eca7..66b4648 100644
--- a/src/com/android/browser/TitleBarPhone.java
+++ b/src/com/android/browser/TitleBarPhone.java
@@ -21,13 +21,18 @@
 import android.content.res.Resources;
 import android.graphics.drawable.Drawable;
 import android.view.ContextMenu;
+import android.view.Menu;
 import android.view.MenuInflater;
+import android.view.MenuItem;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.View.OnFocusChangeListener;
+import android.view.ViewConfiguration;
 import android.webkit.WebView;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
+import android.widget.PopupMenu;
+import android.widget.PopupMenu.OnDismissListener;
 
 import com.android.browser.UrlInputView.StateListener;
 import com.android.browser.autocomplete.SuggestedTextController.TextChangeWatcher;
@@ -39,7 +44,7 @@
  * browser.
  */
 public class TitleBarPhone extends TitleBarBase implements OnFocusChangeListener,
-        OnClickListener, TextChangeWatcher, StateListener {
+        OnClickListener, TextChangeWatcher, StateListener, OnDismissListener {
 
     private Activity mActivity;
     private ImageView mStopButton;
@@ -49,11 +54,15 @@
     private View mTabSwitcher;
     private View mComboIcon;
     private View mTitleContainer;
+    private View mMore;
     private Drawable mTextfieldBgDrawable;
+    private boolean mMenuShowing;
+    private boolean mNeedsMenu;
 
     public TitleBarPhone(Activity activity, UiController controller, PhoneUi ui,
             FrameLayout parent) {
         super(activity, controller, ui, parent);
+        mNeedsMenu = !ViewConfiguration.get(activity).hasPermanentMenuKey();
         mActivity = activity;
         initLayout(activity, R.layout.title_bar);
     }
@@ -69,6 +78,8 @@
         mVoiceButton.setOnClickListener(this);
         mTabSwitcher = findViewById(R.id.tab_switcher);
         mTabSwitcher.setOnClickListener(this);
+        mMore = findViewById(R.id.more);
+        mMore.setOnClickListener(this);
         mComboIcon = findViewById(R.id.iconcombo);
         mTitleContainer = findViewById(R.id.title_bg);
         setFocusState(false);
@@ -164,11 +175,48 @@
             mUiController.startVoiceSearch();
         } else if (v == mTabSwitcher) {
             mBaseUi.onMenuKey();
+        } else if (mMore == v) {
+            showMenu();
         } else {
             super.onClick(v);
         }
     }
 
+    public boolean isMenuShowing() {
+        return mMenuShowing;
+    }
+
+    private void showMenu() {
+        mMenuShowing = true;
+        PopupMenu popup = new PopupMenu(mContext, mMore);
+        Menu menu = popup.getMenu();
+        popup.getMenuInflater().inflate(R.menu.browser, menu);
+        menu.setGroupVisible(R.id.NAV_MENU, false);
+        popup.setOnMenuItemClickListener(this);
+        popup.setOnDismissListener(this);
+        popup.show();
+    }
+
+    @Override
+    public void onDismiss(PopupMenu menu) {
+        onMenuHidden();
+    }
+
+    @Override
+    public boolean onMenuItemClick(MenuItem item) {
+        onMenuHidden();
+        boolean res = mUiController.onOptionsItemSelected(item);
+        if (!res) {
+            return super.onMenuItemClick(item);
+        }
+        return res;
+    }
+
+    private void onMenuHidden() {
+        mMenuShowing = false;
+        mBaseUi.showTitleBarForDuration();
+    }
+
     @Override
     public void onStateChanged(int state) {
         switch(state) {
@@ -178,12 +226,14 @@
             setSearchMode(false);
             mTabSwitcher.setVisibility(View.VISIBLE);
             mTitleContainer.setBackgroundDrawable(null);
+            mMore.setVisibility(mNeedsMenu ? View.VISIBLE : View.GONE);
             break;
         case StateListener.STATE_HIGHLIGHTED:
             mComboIcon.setVisibility(View.GONE);
             mStopButton.setVisibility(View.VISIBLE);
             setSearchMode(true);
             mTabSwitcher.setVisibility(View.GONE);
+            mMore.setVisibility(View.GONE);
             mTitleContainer.setBackgroundDrawable(mTextfieldBgDrawable);
             break;
         case StateListener.STATE_EDITED:
@@ -191,6 +241,7 @@
             mStopButton.setVisibility(View.GONE);
             setSearchMode(false);
             mTabSwitcher.setVisibility(View.GONE);
+            mMore.setVisibility(View.GONE);
             mTitleContainer.setBackgroundDrawable(mTextfieldBgDrawable);
             break;
         }