YAMR - Yet Another Menu Reorg

 Bug: 5186166

Change-Id: Icd459c8f9cd557659a5402431a843a856fb1b134
diff --git a/res/menu/browser.xml b/res/menu/browser.xml
index d3dc7d0..7d288c1 100644
--- a/res/menu/browser.xml
+++ b/res/menu/browser.xml
@@ -56,10 +56,18 @@
             android:icon="@drawable/ic_share_holo_dark"
             android:alphabeticShortcut="s" />
         <item
-            android:id="@+id/view_downloads_menu_id"
-            android:title="@string/menu_view_download"
-            android:icon="@drawable/ic_downloads_holo_dark"
-            android:alphabeticShortcut="j" />
+            android:id="@+id/find_menu_id"
+            android:title="@*android:string/find_on_page"/>
+        <item
+            android:id="@+id/ua_desktop_menu_id"
+            android:checkable="true"
+            android:title="@string/ua_switcher_desktop" />
+        <item
+            android:id="@+id/save_snapshot_menu_id"
+            android:title="@string/menu_save_snapshot" />
+        <item
+            android:id="@+id/page_info_menu_id"
+            android:title="@string/page_info" />
         <item
             android:id="@+id/preferences_menu_id"
             android:title="@string/menu_preferences"
@@ -76,6 +84,8 @@
             android:visible="false" />
     </group>
     <group android:id="@+id/MAIN_SHORTCUT_MENU" android:visible="false">
+        <item android:id="@+id/view_downloads_menu_id"
+            android:alphabeticShortcut="j" />
         <item android:id="@+id/homepage_menu_id"
             android:alphabeticShortcut="&#32;" />
         <item android:id="@+id/classic_history_menu_id"
diff --git a/res/menu/ua_switcher.xml b/res/menu/ua_switcher.xml
deleted file mode 100644
index 51236de..0000000
--- a/res/menu/ua_switcher.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:id="@+id/ua_mobile_menu_id"
-        android:checkable="true"
-        android:title="@string/ua_switcher_mobile" />
-    <item
-        android:id="@+id/ua_desktop_menu_id"
-        android:checkable="true"
-        android:title="@string/ua_switcher_desktop" />
-    <item
-        android:id="@+id/find_menu_id"
-        android:title="@*android:string/find_on_page"/>
-    <item
-        android:id="@+id/save_snapshot_menu_id"
-        android:title="@string/menu_save_snapshot" />
-    <item
-        android:id="@+id/page_info_menu_id"
-        android:title="@string/page_info" />
-</menu>
-
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 0751f10..d2e27fb 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1000,10 +1000,8 @@
     <string name="preview">Preview</string>
     <!-- Name for the user's unsynced, local bookmarks [CHAR LIMIT=50] -->
     <string name="local_bookmarks">Local</string>
-    <!-- Popup menu option that allows the user to select the mobile version of a webpage [CHAR LIMIT=50] -->
-    <string name="ua_switcher_mobile">Mobile</string>
-    <!-- Popup menu option that allows the user to select the desktop version of a webpage [CHAR LIMIT=50] -->
-    <string name="ua_switcher_desktop">Desktop</string>
+    <!-- Popup menu checkbox that allows the user to request the desktop version of a webpage [CHAR LIMIT=50] -->
+    <string name="ua_switcher_desktop">Request desktop site</string>
     <!-- Preload permission label [CHAR LIMIT=40] -->
     <string name="permission_preload_label">Preload results</string>
     <!-- Empty text for the "saved pages" tab that is shown when no saved pages exist. [CHAR LIMIT=None] -->
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 19ad9a9..84d7e36 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -1466,10 +1466,12 @@
         boolean canGoBack = false;
         boolean canGoForward = false;
         boolean isHome = false;
+        boolean isDesktopUa = false;
         if (tab != null) {
             canGoBack = tab.canGoBack();
             canGoForward = tab.canGoForward();
             isHome = mSettings.getHomePage().equals(tab.getUrl());
+            isDesktopUa = mSettings.hasDesktopUseragent(tab.getWebView());
         }
         final MenuItem back = menu.findItem(R.id.back_menu_id);
         back.setEnabled(canGoBack);
@@ -1504,6 +1506,8 @@
         final MenuItem counter = menu.findItem(R.id.dump_counters_menu_id);
         counter.setVisible(showDebugSettings);
         counter.setEnabled(showDebugSettings);
+        final MenuItem uaSwitcher = menu.findItem(R.id.ua_desktop_menu_id);
+        uaSwitcher.setChecked(isDesktopUa);
 
         mUi.updateMenuState(tab, menu);
     }
@@ -1650,6 +1654,12 @@
                 viewDownloads();
                 break;
 
+            case R.id.ua_desktop_menu_id:
+                WebView web = getCurrentWebView();
+                mSettings.toggleDesktopUseragent(web);
+                web.loadUrl(web.getOriginalUrl());
+                break;
+
             case R.id.window_one_menu_id:
             case R.id.window_two_menu_id:
             case R.id.window_three_menu_id:
diff --git a/src/com/android/browser/NavigationBarBase.java b/src/com/android/browser/NavigationBarBase.java
index ab79b37..bfdd9a0 100644
--- a/src/com/android/browser/NavigationBarBase.java
+++ b/src/com/android/browser/NavigationBarBase.java
@@ -24,17 +24,11 @@
 import android.speech.RecognizerResultsIntent;
 import android.util.AttributeSet;
 import android.view.KeyEvent;
-import android.view.Menu;
-import android.view.MenuItem;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.View.OnFocusChangeListener;
-import android.webkit.WebView;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
-import android.widget.PopupMenu;
-import android.widget.PopupMenu.OnDismissListener;
-import android.widget.PopupMenu.OnMenuItemClickListener;
 
 import com.android.browser.UI.DropdownChangeListener;
 import com.android.browser.UrlInputView.UrlInputListener;
@@ -42,9 +36,9 @@
 
 import java.util.List;
 
-public class NavigationBarBase extends LinearLayout implements OnClickListener,
-        OnMenuItemClickListener, UrlInputListener, OnFocusChangeListener,
-        TextChangeWatcher, OnDismissListener {
+public class NavigationBarBase extends LinearLayout implements
+        OnClickListener, UrlInputListener, OnFocusChangeListener,
+        TextChangeWatcher {
 
     protected BaseUi mBaseUi;
     protected TitleBar mTitleBar;
@@ -54,9 +48,6 @@
 
     private ImageView mFavicon;
     private ImageView mLockIcon;
-    private View mUaSwitcher;
-    private boolean mUaSwitcherShowing;
-    private PopupMenu mUaSwitcherMenu;
 
     public NavigationBarBase(Context context) {
         super(context);
@@ -104,59 +95,8 @@
         mFavicon.setImageDrawable(mBaseUi.getFaviconDrawable(icon));
     }
 
-    public void setUaSwitcher(View v) {
-        if (mUaSwitcher != null) {
-            mUaSwitcher.setOnClickListener(null);
-        }
-        mUaSwitcher = v;
-        mUaSwitcher.setOnClickListener(this);
-    }
-
     @Override
     public void onClick(View v) {
-        if (mUaSwitcher == v) {
-            BrowserSettings settings = BrowserSettings.getInstance();
-            WebView web = mTitleBar.getCurrentWebView();
-            if (web == null) return;
-            boolean desktop = settings.hasDesktopUseragent(web);
-            mUaSwitcherMenu = new PopupMenu(mContext, mUaSwitcher);
-            Menu menu = mUaSwitcherMenu.getMenu();
-            mUaSwitcherMenu.getMenuInflater().inflate(R.menu.ua_switcher, menu);
-            menu.findItem(R.id.ua_mobile_menu_id).setChecked(!desktop);
-            menu.findItem(R.id.ua_desktop_menu_id).setChecked(desktop);
-            Tab tab = mUiController.getCurrentTab();
-            MenuItem saveSnapshot = menu.findItem(R.id.save_snapshot_menu_id);
-            saveSnapshot.setVisible(tab != null && !tab.isSnapshot());
-            MenuItem find = menu.findItem(R.id.find_menu_id);
-            find.setVisible(tab != null && !tab.isSnapshot());
-            mUaSwitcherMenu.setOnMenuItemClickListener(this);
-            mUaSwitcherMenu.setOnDismissListener(this);
-            mUaSwitcherShowing = true;
-            mUaSwitcherMenu.show();
-        }
-    }
-
-    @Override
-    public boolean onMenuItemClick(MenuItem item) {
-        BrowserSettings settings = BrowserSettings.getInstance();
-        WebView web = mTitleBar.getCurrentWebView();
-        if (web == null) return false;
-        boolean desktop = settings.hasDesktopUseragent(web);
-        switch (item.getItemId()) {
-        case R.id.ua_mobile_menu_id:
-            if (desktop) {
-                settings.toggleDesktopUseragent(web);
-                web.loadUrl(web.getOriginalUrl());
-            }
-            return true;
-        case R.id.ua_desktop_menu_id:
-            if (!desktop) {
-                settings.toggleDesktopUseragent(web);
-                web.loadUrl(web.getOriginalUrl());
-            }
-            return true;
-        }
-        return mUiController.onOptionsItemSelected(item);
     }
 
     @Override
@@ -340,17 +280,8 @@
     public void onProgressStopped() {
     }
 
-    @Override
-    public void onDismiss(PopupMenu menu) {
-        if (mUaSwitcherMenu == menu) {
-            mUaSwitcherShowing = false;
-            mUaSwitcherMenu = null;
-            mBaseUi.showTitleBarForDuration();
-        }
-    }
-
     public boolean isMenuShowing() {
-        return mUaSwitcherShowing;
+        return false;
     }
 
     public void onTabDataChanged(Tab tab) {
diff --git a/src/com/android/browser/NavigationBarPhone.java b/src/com/android/browser/NavigationBarPhone.java
index d2d3797..5cabe31 100644
--- a/src/com/android/browser/NavigationBarPhone.java
+++ b/src/com/android/browser/NavigationBarPhone.java
@@ -27,11 +27,12 @@
 import android.widget.ImageView;
 import android.widget.PopupMenu;
 import android.widget.PopupMenu.OnDismissListener;
+import android.widget.PopupMenu.OnMenuItemClickListener;
 
 import com.android.browser.UrlInputView.StateListener;
 
 public class NavigationBarPhone extends NavigationBarBase implements
-        StateListener {
+        StateListener, OnMenuItemClickListener, OnDismissListener {
 
     private ImageView mStopButton;
     private ImageView mVoiceButton;
@@ -81,7 +82,6 @@
         mStopDescription = res.getString(R.string.accessibility_button_stop);
         mRefreshDescription = res.getString(R.string.accessibility_button_refresh);
         mTextfieldBgDrawable = res.getDrawable(R.drawable.textfield_active_holo_dark);
-        setUaSwitcher(mComboIcon);
         mUrlInput.setContainer(this);
         mUrlInput.setStateListener(this);
         mNeedsMenu = !ViewConfiguration.get(getContext()).hasPermanentMenuKey();
@@ -182,7 +182,6 @@
         if (menu == mPopupMenu) {
             onMenuHidden();
         }
-        super.onDismiss(menu);
     }
 
     private void onMenuHidden() {
@@ -240,4 +239,9 @@
                 ? View.VISIBLE : View.GONE);
     }
 
+    @Override
+    public boolean onMenuItemClick(MenuItem item) {
+        return mUiController.onOptionsItemSelected(item);
+    }
+
 }
diff --git a/src/com/android/browser/NavigationBarTablet.java b/src/com/android/browser/NavigationBarTablet.java
index 7f6992a..8c08dcf 100644
--- a/src/com/android/browser/NavigationBarTablet.java
+++ b/src/com/android/browser/NavigationBarTablet.java
@@ -110,7 +110,6 @@
         mGoButton.setOnClickListener(this);
         mClearButton.setOnClickListener(this);
         mVoiceSearch.setOnClickListener(this);
-        setUaSwitcher(mUrlIcon);
         mUrlInput.setContainer(mUrlContainer);
     }