Merge "Most Visited custom homepage" into honeycomb
diff --git a/res/drawable-mdpi/ic_pie_web.png b/res/drawable-mdpi/ic_pie_web.png
new file mode 100644
index 0000000..86e41ff
--- /dev/null
+++ b/res/drawable-mdpi/ic_pie_web.png
Binary files differ
diff --git a/res/layout/new_folder_layout.xml b/res/layout/new_folder_layout.xml
index 4ce0ade..ecc730f 100644
--- a/res/layout/new_folder_layout.xml
+++ b/res/layout/new_folder_layout.xml
@@ -27,12 +27,29 @@
         android:gravity="center_vertical"
         android:minHeight="?android:attr/listPreferredItemHeight"
         android:src="@drawable/ic_folder_bookmark_widget_holo_dark" />
+  <LinearLayout
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:background="@*android:drawable/edit_text_holo_dark"
+      android:gravity="center_vertical"
+      android:paddingBottom="5dip"
+      android:orientation="horizontal">
     <EditText
         android:id="@+id/folder_namer"
-        android:layout_width="match_parent"
+        android:layout_width="0dip"
         android:layout_height="wrap_content"
+        android:layout_weight="1"
         android:textAppearance="?android:attr/textAppearanceMedium"
+        android:background="@null"
         android:gravity="center_vertical"
         android:paddingLeft="6dip"
-        android:minHeight="?android:attr/listPreferredItemHeight" />
+        />
+    <ImageView
+        android:id="@+id/close"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:gravity="center_vertical"
+        android:src="@drawable/ic_tab_close"
+        />
+  </LinearLayout>
 </LinearLayout>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index cb1b754..834bead 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -29,7 +29,7 @@
     <color name="bookmarkWidgetDivider">#383847</color>
     <color name="bookmarkWidgetItemBackground">#2b2b3c</color>
     <color name="bookmarkWidgetFolderBackground">#A0383847</color>
-    <color name="qc_slice_normal">#C0A0A0A0</color>
-    <color name="qc_slice_active">#C02090FF</color>
+    <color name="qc_slice_normal">#E0A0A0A0</color>
+    <color name="qc_slice_active">#E02090FF</color>
     <color name="bookmarkWidgetFaviconBackground">#23ffffff</color>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9c12dc3..c0aa0d2 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -603,7 +603,7 @@
     </string-array>
     <string name="pref_default_text_encoding_default" translatable="false">Latin-1</string>
     <!-- Title for lab settings [CHAR LIMIT=25] -->
-    <string name="pref_lab_title">Lab</string>
+    <string name="pref_lab_title">Labs</string>
     <!-- Title for lab quick controls feature [CHAR LIMIT=40] -->
     <string name="pref_lab_quick_controls">Quick Controls</string>
     <!-- Summary for lab quick controls feature [CHAR LIMIT=80] -->
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index 9d8c73c..5e389ea 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -98,6 +98,7 @@
     private View mDefaultView;
     private View mFolderSelector;
     private EditText mFolderNamer;
+    private View mFolderCancel;
     private boolean mIsFolderNamerShowing;
     private View mFolderNamerHolder;
     private View mAddNewFolder;
@@ -243,6 +244,8 @@
             } else {
                 finish();
             }
+        } else if (v == mFolderCancel) {
+            completeOrCancelFolderNaming(true);
         } else if (v == mAddNewFolder) {
             setShowFolderNamer(true);
             mFolderNamer.setText(R.string.new_folder);
@@ -286,6 +289,11 @@
     public void onNothingSelected(AdapterView<?> parent) {
     }
 
+    /**
+     * Finish naming a folder, and close the IME
+     * @param cancel If true, the new folder is not created.  If false, the new
+     *      folder is created and the user is taken inside it.
+     */
     private void completeOrCancelFolderNaming(boolean cancel) {
         if (!cancel && !TextUtils.isEmpty(mFolderNamer.getText())) {
             String name = mFolderNamer.getText().toString();
@@ -588,6 +596,8 @@
         mFolderNamerHolder = getLayoutInflater().inflate(R.layout.new_folder_layout, null);
         mFolderNamer = (EditText) mFolderNamerHolder.findViewById(R.id.folder_namer);
         mFolderNamer.setOnEditorActionListener(this);
+        mFolderCancel = mFolderNamerHolder.findViewById(R.id.close);
+        mFolderCancel.setOnClickListener(this);
 
         mAddNewFolder = findViewById(R.id.add_new_folder);
         mAddNewFolder.setOnClickListener(this);
diff --git a/src/com/android/browser/PieControl.java b/src/com/android/browser/PieControl.java
index 210e9ea..6326f2e 100644
--- a/src/com/android/browser/PieControl.java
+++ b/src/com/android/browser/PieControl.java
@@ -70,7 +70,7 @@
             mPie.addItem(mRefresh);
             mBack = makeMenuView(R.drawable.ic_pie_back);
             mPie.addItem(mBack);
-            mUrl = makeMenuView(R.drawable.ic_pie_search);
+            mUrl = makeMenuView(R.drawable.ic_pie_web);
             mPie.addItem(mUrl);
             mBookmarks = makeMenuView(R.drawable.ic_pie_bookmarks);
             mPie.addItem(mBookmarks);
@@ -133,6 +133,7 @@
             mUiController.bookmarksOrHistoryPicker(false);
         } else if (mNewTab == v) {
             mUiController.openTabToHomePage();
+            mUi.showFakeTitleBarAndEdit();
         } else if (mClose == v) {
             mUiController.closeCurrentTab();
         } else {
diff --git a/src/com/android/browser/TabBar.java b/src/com/android/browser/TabBar.java
index 502512a..ba123d0 100644
--- a/src/com/android/browser/TabBar.java
+++ b/src/com/android/browser/TabBar.java
@@ -16,7 +16,6 @@
 
 package com.android.browser;
 
-import android.graphics.Matrix;
 import com.android.browser.ScrollWebView.ScrollListener;
 
 import android.app.Activity;
@@ -26,6 +25,7 @@
 import android.graphics.BitmapShader;
 import android.graphics.Canvas;
 import android.graphics.Color;
+import android.graphics.Matrix;
 import android.graphics.Paint;
 import android.graphics.Path;
 import android.graphics.Shader;
@@ -33,6 +33,7 @@
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.LayerDrawable;
 import android.graphics.drawable.PaintDrawable;
+import android.util.Log;
 import android.view.ContextMenu;
 import android.view.Gravity;
 import android.view.LayoutInflater;
@@ -140,6 +141,8 @@
 
     void setUseQuickControls(boolean useQuickControls) {
         mUseQuickControls = useQuickControls;
+        mNewTab.setVisibility(mUseQuickControls ? View.GONE
+                : View.VISIBLE);
     }
 
     int getTabCount() {
@@ -160,7 +163,9 @@
         super.onMeasure(hspec, vspec);
         int w = getMeasuredWidth();
         // adjust for new tab overlap
-        w -= mTabOverlap;
+        if (!mUseQuickControls) {
+            w -= mTabOverlap;
+        }
         setMeasuredDimension(w, getMeasuredHeight());
     }
 
@@ -188,8 +193,14 @@
         if (mNewTab == view) {
             mUiController.openTabToHomePage();
         } else if (mTabs.getSelectedTab() == view) {
-            if (mUseQuickControls) return;
-            if (mUi.isFakeTitleBarShowing() && !isLoading()) {
+            if (mUseQuickControls) {
+                if (mUi.isFakeTitleBarShowing() && !isLoading()) {
+                    mUi.hideFakeTitleBar();
+                } else {
+                    mUi.stopWebViewScrolling();
+                    mUi.showFakeTitleBarAndEdit();
+                }
+            } else if (mUi.isFakeTitleBarShowing() && !isLoading()) {
                 mUi.hideFakeTitleBar();
             } else {
                 showUrlBar();
diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java
index 57cc724..8be4df5 100644
--- a/src/com/android/browser/TitleBarXLarge.java
+++ b/src/com/android/browser/TitleBarXLarge.java
@@ -17,6 +17,7 @@
 package com.android.browser;
 
 import com.android.browser.UrlInputView.UrlInputListener;
+import com.android.browser.search.SearchEngine;
 
 import android.app.Activity;
 import android.app.SearchManager;
@@ -373,7 +374,11 @@
     }
 
     private void setSearchMode(boolean voiceSearchEnabled) {
-        mVoiceSearch.setVisibility(voiceSearchEnabled ? View.VISIBLE :
+        SearchEngine searchEngine = BrowserSettings.getInstance()
+                .getSearchEngine();
+        boolean showvoicebutton = voiceSearchEnabled &&
+                (searchEngine != null && searchEngine.supportsVoiceSearch());
+        mVoiceSearch.setVisibility(showvoicebutton ? View.VISIBLE :
                 View.GONE);
         mGoButton.setVisibility(voiceSearchEnabled ? View.GONE :
                 View.VISIBLE);
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
index ac121cc..1e607a7 100644
--- a/src/com/android/browser/XLargeUi.java
+++ b/src/com/android/browser/XLargeUi.java
@@ -276,6 +276,7 @@
     @Override
     protected void hideFakeTitleBar() {
         if (isFakeTitleBarShowing()) {
+            mFakeTitleBar.setUrlMode(false);
             mContentView.removeView(mFakeTitleBar);
             mTabBar.onHideTitleBar();
         }
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java
index 919a135..ff00c56 100644
--- a/src/com/android/browser/provider/BrowserProvider2.java
+++ b/src/com/android/browser/provider/BrowserProvider2.java
@@ -402,6 +402,7 @@
 
         @Override
         public void onOpen(SQLiteDatabase db) {
+            db.enableWriteAheadLogging();
             mSyncHelper.onDatabaseOpened(db);
         }
 
@@ -478,6 +479,9 @@
         }
 
         private byte[] readRaw(Resources res, int id) throws IOException {
+            if (id == 0) {
+                return null;
+            }
             InputStream is = res.openRawResource(id);
             try {
                 ByteArrayOutputStream bos = new ByteArrayOutputStream();