Merge "Fix voice search mode"
diff --git a/res/layout/browser_add_bookmark.xml b/res/layout/browser_add_bookmark.xml
index b66a37e..3720790 100644
--- a/res/layout/browser_add_bookmark.xml
+++ b/res/layout/browser_add_bookmark.xml
@@ -19,7 +19,6 @@
     android:layout_height="match_parent"
     android:orientation="vertical"
     >
-
     <include layout="@layout/browser_add_bookmark_content" />
 
 </LinearLayout>
diff --git a/res/layout/browser_add_bookmark_content.xml b/res/layout/browser_add_bookmark_content.xml
index 59d9329..8b28011 100644
--- a/res/layout/browser_add_bookmark_content.xml
+++ b/res/layout/browser_add_bookmark_content.xml
@@ -42,6 +42,10 @@
             android:text="@string/new_folder"
             android:visibility="gone"
             android:layout_centerVertical="true"
+            android:layout_alignTop="@+id/crumbs"
+            android:layout_alignBottom="@+id/crumbs"
+            android:focusable="true"
+            android:background="?android:attr/selectableItemBackground"
             android:textAppearance="?android:attr/textAppearanceMedium" />
         <ImageView android:id="@+id/add_divider"
             android:layout_width="wrap_content"
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 745a0f4..b2738e1 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -1467,6 +1467,11 @@
                 final MenuItem newtab = menu.findItem(R.id.new_tab_menu_id);
                 newtab.setEnabled(getTabControl().canCreateNewTab());
 
+                MenuItem archive = menu.findItem(R.id.save_webarchive_menu_id);
+                String url = getCurrentTopWebView().getUrl();
+                archive.setVisible(!TextUtils.isEmpty(url)
+                        && !url.endsWith("webarchivexml"));
+
                 break;
         }
         mCurrentMenuState = mMenuState;
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index 73c1b99..cfe7351 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -17,12 +17,16 @@
 package com.android.browser;
 
 import android.app.Activity;
+import android.content.Context;
+import android.graphics.PixelFormat;
 import android.util.Log;
 import android.view.ActionMode;
 import android.view.Gravity;
 import android.view.KeyEvent;
 import android.view.Menu;
+import android.view.MotionEvent;
 import android.view.View;
+import android.view.WindowManager;
 import android.webkit.WebView;
 
 /**
@@ -34,6 +38,7 @@
 
     private TitleBar mTitleBar;
     private ActiveTabsPage mActiveTabsPage;
+    private TouchProxy mTitleOverlay;
 
     boolean mExtendedMenuOpen;
     boolean mOptionsMenuOpen;
@@ -140,7 +145,7 @@
     }
 
     @Override
-    void showTitleBar() {
+    protected void showTitleBar() {
         if (canShowTitleBar()) {
             setTitleGravity(Gravity.TOP);
             super.showTitleBar();
@@ -191,8 +196,14 @@
     @Override
     public void onOptionsMenuOpened() {
         mOptionsMenuOpen = true;
-        // options menu opened, show fake title bar
+        // options menu opened, show title bar
         showTitleBar();
+        if (mTitleOverlay == null) {
+            // This assumes that getTitleBar always returns the same View
+            mTitleOverlay = new TouchProxy(mActivity, getTitleBar());
+        }
+        mActivity.getWindowManager().addView(mTitleOverlay,
+                mTitleOverlay.getWindowLayoutParams());
     }
 
     @Override
@@ -206,7 +217,8 @@
     @Override
     public void onOptionsMenuClosed(boolean inLoad) {
         mOptionsMenuOpen = false;
-        if (!inLoad) {
+        mActivity.getWindowManager().removeView(mTitleOverlay);
+        if (!inLoad && !getTitleBar().hasFocus()) {
             hideTitleBar();
         }
     }
@@ -241,4 +253,32 @@
         return false;
     }
 
+    static class TouchProxy extends View {
+
+        View mTarget;
+
+        TouchProxy(Context context, View target) {
+            super(context);
+            mTarget = target;
+        }
+
+        @Override
+        public boolean dispatchTouchEvent(MotionEvent event) {
+            return mTarget.dispatchTouchEvent(event);
+        }
+
+        WindowManager.LayoutParams getWindowLayoutParams() {
+            WindowManager.LayoutParams params =
+                new WindowManager.LayoutParams(
+                        mTarget.getWidth(),
+                        mTarget.getHeight(),
+                        WindowManager.LayoutParams.TYPE_APPLICATION,
+                        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
+                        PixelFormat.TRANSPARENT);
+            params.gravity = Gravity.TOP | Gravity.LEFT;
+            params.y = mTarget.getTop();
+            params.x = mTarget.getLeft();
+            return params;
+        }
+    }
 }