Merge "Private browsing cleanup is now done in webkit"
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index 4fca79d..70813e5 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -132,9 +132,9 @@
         frameLayout.addView(mBrowserFrameLayout, COVER_SCREEN_PARAMS);
 
         if (mXLargeScreenSize) {
-            mTitleBar = new TitleBarXLarge(mActivity, mUiController);
+            mTitleBar = new TitleBarXLarge(mActivity, mUiController, this);
             mTitleBar.setProgress(100);
-            mFakeTitleBar = new TitleBarXLarge(mActivity, mUiController);
+            mFakeTitleBar = new TitleBarXLarge(mActivity, mUiController, this);
             ActionBar actionBar = mActivity.getActionBar();
             mTabBar = new TabBar(mActivity, mUiController, this);
             actionBar.setCustomNavigationMode(mTabBar);
@@ -515,6 +515,11 @@
         return 0;
     }
 
+    void editUrl(boolean clearInput) {
+        showFakeTitleBar();
+        ((TitleBarXLarge) mFakeTitleBar).onEditUrl(clearInput);
+    }
+
     void showFakeTitleBar() {
         if (!isFakeTitleBarShowing() && mActiveTabsPage == null &&
                 !mActivityPaused) {
@@ -781,8 +786,11 @@
 
     @Override
     public void onActionModeStarted(ActionMode mode) {
-        // hide the fake title bar when CAB is shown
-        hideFakeTitleBar();
+        if (!mXLargeScreenSize
+                || !((TitleBarXLarge) mFakeTitleBar).isEditingUrl()) {
+            // hide the fake title bar when CAB is shown
+            hideFakeTitleBar();
+        }
     }
 
     @Override
diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java
index 99e86c4..b7497ec 100644
--- a/src/com/android/browser/TitleBarXLarge.java
+++ b/src/com/android/browser/TitleBarXLarge.java
@@ -46,6 +46,7 @@
     private static final int PROGRESS_MAX = 100;
 
     private UiController mUiController;
+    private BaseUi mUi;
 
     private Drawable mStopDrawable;
     private Drawable mReloadDrawable;
@@ -63,11 +64,14 @@
     private View mVoiceSearch;
     private PageProgressView mProgressView;
     private UrlInputView mUrlInput;
+
     private boolean mInLoad;
 
-    public TitleBarXLarge(Activity activity, UiController controller) {
+    public TitleBarXLarge(Activity activity, UiController controller,
+            BaseUi ui) {
         super(activity);
         mUiController = controller;
+        mUi = ui;
         Resources resources = activity.getResources();
         mStopDrawable = resources.getDrawable(R.drawable.ic_stop_normal);
         mReloadDrawable = resources.getDrawable(R.drawable.ic_refresh_normal);
@@ -94,6 +98,7 @@
         mVoiceSearch = findViewById(R.id.voicesearch);
         mProgressView = (PageProgressView) findViewById(R.id.progress);
         mUrlContainer = findViewById(R.id.urlbar_focused);
+
         mBackButton.setOnClickListener(this);
         mForwardButton.setOnClickListener(this);
         mStar.setOnClickListener(this);
@@ -121,9 +126,30 @@
         mStar.setActivated(isBookmark);
     }
 
+    /**
+     * called from the Ui when the user wants to edit
+     * Note: only the fake titlebar will get this callback
+     * independent of which input field started the edit mode
+     * @param clearInput clear the input field
+     */
+    void onEditUrl(boolean clearInput) {
+        mUrlInput.requestFocusFromTouch();
+        if (clearInput) {
+            mUrlInput.setText("");
+        }
+    }
+
+    boolean isEditingUrl() {
+        return mUrlInput.hasFocus();
+    }
+
     @Override
     public void onClick(View v) {
-        if (mBackButton == v) {
+        if (mUrlInput == v) {
+            if (!mUrlInput.hasFocus()) {
+                mUi.editUrl(false);
+            }
+        } else if (mBackButton == v) {
             mUiController.getCurrentTopWebView().goBack();
         } else if (mForwardButton == v) {
             mUiController.getCurrentTopWebView().goForward();
@@ -133,7 +159,7 @@
         } else if (mAllButton == v) {
             mUiController.bookmarksOrHistoryPicker(false);
         } else if (mSearchButton == v) {
-            search();
+            mUi.editUrl(true);
         } else if (mStopButton == v) {
             stopOrRefresh();
         } else if (mGoButton == v) {
@@ -165,6 +191,10 @@
 
     // UrlInputListener implementation
 
+    /**
+     * callback from suggestion dropdown
+     * user selected a suggestion
+     */
     @Override
     public void onAction(String text, String extra, String source) {
         mUiController.getCurrentTopWebView().requestFocus();
@@ -199,6 +229,10 @@
         }
     }
 
+    /**
+     * callback from the suggestion dropdown
+     * copy text to input field and stay in edit mode
+     */
     @Override
     public void onEdit(String text) {
         setDisplayTitle(text, true);
@@ -207,7 +241,7 @@
         }
     }
 
-    private void setUrlMode(boolean focused) {
+    void setUrlMode(boolean focused) {
         if (focused) {
             mUrlInput.setDropDownWidth(mUrlContainer.getWidth());
             mUrlInput.setDropDownHorizontalOffset(-mUrlInput.getLeft());
@@ -225,12 +259,6 @@
         }
     }
 
-    private void search() {
-        mUrlInput.requestFocus();
-        setDisplayTitle("");
-        setUrlMode(true);
-    }
-
     private void stopOrRefresh() {
         if (mInLoad) {
             mUiController.stopLoading();
@@ -285,7 +313,7 @@
     @Override
     public void afterTextChanged(Editable s) {
         if (mUrlInput.hasFocus()) {
-            // check if url input is empty and adjust voice search state
+            // check if input field is empty and adjust voice search state
             updateSearchMode();
         }
     }