Merge "Revert "Fix assets and layout for popup window"" into ics-mr1
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 60a9336..3a281c9 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -119,6 +119,7 @@
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.LAUNCHER" />
                 <category android:name="android.intent.category.BROWSABLE" />
+                <category android:name="android.intent.category.APP_BROWSER" />
             </intent-filter>
             <!-- The maps app is a much better experience, so it's not
                  worth having this at all... especially for a demo!
diff --git a/res/layout-port/autofill_settings_fragment.xml b/res/layout-port/autofill_settings_fragment.xml
index 63dba4d..097074b 100644
--- a/res/layout-port/autofill_settings_fragment.xml
+++ b/res/layout-port/autofill_settings_fragment.xml
@@ -56,7 +56,8 @@
                 android:layout_margin="2dip"
                 android:textAppearance="?android:attr/textAppearanceMedium"
                 android:inputType="textPersonName|textCapWords"
-                android:singleLine="true" />
+                android:singleLine="true"
+                android:imeOptions="actionNext" />
             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
@@ -71,7 +72,8 @@
                 android:layout_margin="2dip"
                 android:textAppearance="?android:attr/textAppearanceMedium"
                 android:inputType="textCapWords"
-                android:singleLine="true" />
+                android:singleLine="true"
+                android:imeOptions="actionNext" />
             <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
@@ -97,7 +99,8 @@
                 android:layout_margin="2dip"
                 android:textAppearance="?android:attr/textAppearanceMedium"
                 android:inputType="textCapWords"
-                android:singleLine="true" />
+                android:singleLine="true"
+                android:imeOptions="actionNext" />
             <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
@@ -123,7 +126,8 @@
                 android:layout_margin="2dip"
                 android:textAppearance="?android:attr/textAppearanceMedium"
                 android:inputType="textCapWords"
-                android:singleLine="true" />
+                android:singleLine="true"
+                android:imeOptions="actionNext" />
             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
@@ -138,7 +142,8 @@
                 android:layout_margin="2dip"
                 android:inputType="textCapWords"
                 android:textAppearance="?android:attr/textAppearanceMedium"
-                android:singleLine="true" />
+                android:singleLine="true"
+                android:imeOptions="actionNext" />
             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
@@ -153,7 +158,8 @@
                 android:layout_margin="2dip"
                 android:inputType="textCapWords"
                 android:textAppearance="?android:attr/textAppearanceMedium"
-                android:singleLine="true" />
+                android:singleLine="true"
+                android:imeOptions="actionNext" />
             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
@@ -168,7 +174,8 @@
                 android:layout_margin="2dip"
                 android:inputType="textCapCharacters"
                 android:textAppearance="?android:attr/textAppearanceMedium"
-                android:singleLine="true" />
+                android:singleLine="true"
+                android:imeOptions="actionNext" />
             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
@@ -183,7 +190,8 @@
                 android:layout_margin="2dip"
                 android:inputType="textCapWords"
                 android:textAppearance="?android:attr/textAppearanceMedium"
-                android:singleLine="true" />
+                android:singleLine="true"
+                android:imeOptions="actionNext" />
             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
@@ -198,7 +206,8 @@
                 android:layout_margin="2dip"
                 android:textAppearance="?android:attr/textAppearanceMedium"
                 android:singleLine="true"
-                android:phoneNumber="true" />
+                android:phoneNumber="true"
+                android:imeOptions="actionNext" />
             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
@@ -213,7 +222,8 @@
                 android:layout_margin="2dip"
                 android:textAppearance="?android:attr/textAppearanceMedium"
                 android:inputType="textEmailAddress"
-                android:singleLine="true" />
+                android:singleLine="true"
+                android:imeOptions="actionDone" />
         </LinearLayout>
     </ScrollView>
 
diff --git a/res/layout-sw600dp/title_bar_nav.xml b/res/layout-sw600dp/title_bar_nav.xml
index 433394c..e628a81 100644
--- a/res/layout-sw600dp/title_bar_nav.xml
+++ b/res/layout-sw600dp/title_bar_nav.xml
@@ -58,12 +58,12 @@
         android:background="@drawable/url_background">
         <ImageView
             android:id="@+id/url_icon"
-            android:layout_width="48dp"
-            android:layout_height="match_parent"
+            android:layout_width="48dip"
+            android:layout_height="20dip"
+            android:paddingLeft="14dip"
+            android:paddingRight="14dip"
             android:src="@drawable/ic_web_holo_dark"
-            android:contentDescription="@string/accessibility_button_uaswitch"
-            android:scaleType="center"
-            style="@style/HoloButton" />
+            android:layout_gravity="center" />
         <ImageView
             android:id="@+id/lock"
             android:layout_width="wrap_content"
diff --git a/res/layout/autofill_settings_fragment.xml b/res/layout/autofill_settings_fragment.xml
index 8c90dd7..44bf8f0 100644
--- a/res/layout/autofill_settings_fragment.xml
+++ b/res/layout/autofill_settings_fragment.xml
@@ -62,7 +62,8 @@
                         android:layout_margin="2dip"
                         android:textAppearance="?android:attr/textAppearanceMedium"
                         android:inputType="textPersonName|textCapWords"
-                        android:singleLine="true" />
+                        android:singleLine="true"
+                        android:imeOptions="actionNext" />
                 </TableRow>
                 <TableRow>
                     <TextView
@@ -79,7 +80,8 @@
                         android:layout_margin="2dip"
                         android:textAppearance="?android:attr/textAppearanceMedium"
                         android:inputType="textCapWords"
-                        android:singleLine="true" />
+                        android:singleLine="true"
+                        android:imeOptions="actionNext" />
                 </TableRow>
                 <TableRow>
                     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
@@ -107,7 +109,8 @@
                         android:layout_margin="2dip"
                         android:textAppearance="?android:attr/textAppearanceMedium"
                         android:inputType="textCapWords"
-                        android:singleLine="true" />
+                        android:singleLine="true"
+                        android:imeOptions="actionNext" />
                 </TableRow>
                 <TableRow>
                     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
@@ -135,7 +138,8 @@
                         android:layout_margin="2dip"
                         android:textAppearance="?android:attr/textAppearanceMedium"
                         android:inputType="textCapWords"
-                        android:singleLine="true" />
+                        android:singleLine="true"
+                        android:imeOptions="actionNext" />
                 </TableRow>
                 <TableRow>
                     <TextView
@@ -152,7 +156,8 @@
                         android:layout_margin="2dip"
                         android:inputType="textCapWords"
                         android:textAppearance="?android:attr/textAppearanceMedium"
-                        android:singleLine="true" />
+                        android:singleLine="true"
+                        android:imeOptions="actionNext" />
                 </TableRow>
                 <TableRow>
                     <TextView
@@ -169,7 +174,8 @@
                         android:layout_margin="2dip"
                         android:inputType="textCapWords"
                         android:textAppearance="?android:attr/textAppearanceMedium"
-                        android:singleLine="true" />
+                        android:singleLine="true"
+                        android:imeOptions="actionNext" />
                 </TableRow>
                 <TableRow>
                     <TextView
@@ -186,7 +192,8 @@
                         android:layout_margin="2dip"
                         android:inputType="textCapCharacters"
                         android:textAppearance="?android:attr/textAppearanceMedium"
-                        android:singleLine="true" />
+                        android:singleLine="true"
+                        android:imeOptions="actionNext" />
                 </TableRow>
                 <TableRow>
                     <TextView
@@ -203,7 +210,8 @@
                         android:layout_margin="2dip"
                         android:inputType="textCapWords"
                         android:textAppearance="?android:attr/textAppearanceMedium"
-                        android:singleLine="true" />
+                        android:singleLine="true"
+                        android:imeOptions="actionNext" />
                 </TableRow>
                 <TableRow>
                     <TextView
@@ -220,7 +228,8 @@
                         android:layout_margin="2dip"
                         android:textAppearance="?android:attr/textAppearanceMedium"
                         android:singleLine="true"
-                        android:phoneNumber="true" />
+                        android:phoneNumber="true"
+                        android:imeOptions="actionNext" />
                 </TableRow>
                 <TableRow>
                     <TextView
@@ -237,7 +246,8 @@
                         android:layout_margin="2dip"
                         android:textAppearance="?android:attr/textAppearanceMedium"
                         android:inputType="textEmailAddress"
-                        android:singleLine="true" />
+                        android:singleLine="true"
+                        android:imeOptions="actionDone" />
                 </TableRow>
             </TableLayout>
        </LinearLayout>
diff --git a/res/menu/browser.xml b/res/menu/browser.xml
index bf95574..bd40c51 100644
--- a/res/menu/browser.xml
+++ b/res/menu/browser.xml
@@ -39,6 +39,11 @@
             android:title="@string/new_incognito_tab"
             android:icon="@drawable/ic_new_incognito_holo_dark" />
         <item
+            android:id="@+id/bookmarks_menu_id"
+            android:title="@string/bookmarks"
+            android:icon="@drawable/ic_bookmarks_holo_dark"
+            android:showAsAction="never" />
+        <item
             android:id="@+id/add_bookmark_menu_id"
             android:title="@string/save_to_bookmarks"
             android:icon="@drawable/ic_bookmark_on_holo_dark"
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 5556434..9896b3b 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -119,7 +119,7 @@
     <string name="contextmenu_add_contact" msgid="3183511922223645716">"Voeg kontak by"</string>
     <string name="contextmenu_send_mail" msgid="1014513374828775660">"Stuur e-pos"</string>
     <string name="contextmenu_map" msgid="7471390435434034912">"Kaart"</string>
-    <string name="choosertitle_sharevia" msgid="4600490613341909086">"Deel via"</string>
+    <string name="choosertitle_sharevia" msgid="4600490613341909086">"Deel met"</string>
     <string name="clear" msgid="7070043081700011461">"Maak skoon"</string>
     <string name="replace" msgid="4843033491070384047">"Vervang"</string>
     <string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"Boekmerke"</string>
@@ -137,7 +137,7 @@
     <item msgid="8547442717307793863">"Af"</item>
   </string-array>
     <string name="pref_content_open_in_background_summary" msgid="955411158407739504">"Maak nuwe oortjies agter die huidige oortjie oop"</string>
-    <string name="pref_content_homepage" msgid="3324574611613105696">"Stel tuisblad in"</string>
+    <string name="pref_content_homepage" msgid="3324574611613105696">"Kies tuisblad"</string>
     <string name="pref_content_search_engine" msgid="1620101310821644144">"Stel soekenjin"</string>
     <string name="pref_content_search_engine_summary" msgid="304003941861818133">"Kies \'n soekenjin"</string>
     <string name="pref_set_homepage_to" msgid="7838684355145561242">"Stel na"</string>
@@ -154,9 +154,9 @@
     <string name="pref_general_sync_title" msgid="3138637035975860324">"Sinkroniseer"</string>
     <string name="pref_general_autofill_title" msgid="547881256865816858">"Outo-invul"</string>
     <string name="pref_autofill_enabled" msgid="1015751713312396713">"Vorm-outo-invul"</string>
-    <string name="pref_autofill_enabled_summary" msgid="7659954073892471496">"Vul webvorms in met \'n enkele raak"</string>
+    <string name="pref_autofill_enabled_summary" msgid="7659954073892471496">"Vul webvorms in met een klik"</string>
     <string name="pref_autofill_profile_editor" msgid="8934844472922113166">"Outo-invul-teks"</string>
-    <string name="pref_autofill_profile_editor_summary" msgid="4864447251676856190">"Stel teks op om outomaties by webvorms te outo-invul"</string>
+    <string name="pref_autofill_profile_editor_summary" msgid="4864447251676856190">"Stel teks op om outomaties by webvorms in te vul"</string>
     <string name="pref_autologin_title" msgid="4421187193809267096">"Outomatiese Google-aanmelding"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Meld aan by Google-werwe met <xliff:g id="ID_1">%s</xliff:g>"</string>
     <string name="autologin_bar_text" msgid="3684581827167173371">"Meld aan as"</string>
@@ -192,8 +192,8 @@
     <string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Maak alle koekiedata skoon"</string>
     <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Maak alle blaaierkoekies skoon"</string>
     <string name="pref_privacy_clear_cookies_dlg" msgid="1493252163164621278">"Vee alle koekies uit?"</string>
-    <string name="pref_privacy_clear_history" msgid="8723795508825198477">"Vee geskiedenis uit"</string>
-    <string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Maak blaaiernavigasiegeskiedenis skoon"</string>
+    <string name="pref_privacy_clear_history" msgid="8723795508825198477">"Maak geskiedenis skoon"</string>
+    <string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Maak blaaier se navigasiegeskiedenis skoon"</string>
     <string name="pref_privacy_clear_history_dlg" msgid="6934317391642846227">"Vee die blaaier se navigasiegeskiedenis uit?"</string>
     <string name="pref_privacy_formdata_title" msgid="6549813837982050424">"Vorminligting"</string>
     <string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Maak vormdata skoon"</string>
@@ -207,7 +207,7 @@
     <string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Laat werwe toe om toegang tot jou ligging te versoek"</string>
     <string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Maak liggingstoegang skoon"</string>
     <string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"Maak liggingstoegang skoon vir alle webwerwe"</string>
-    <string name="pref_privacy_clear_geolocation_access_dlg" msgid="3190928760598034346">"Vee webwerfligging-toegang uit?"</string>
+    <string name="pref_privacy_clear_geolocation_access_dlg" msgid="3190928760598034346">"Vee webwerwe se liggingstoegang uit?"</string>
     <string name="pref_security_passwords_title" msgid="5734190542383756711">"Wagwoorde"</string>
     <string name="pref_security_remember_passwords" msgid="6492957683454529549">"Onthou wagwoorde"</string>
     <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Stoor gebruikername en wagwoorde vir webwerwe"</string>
@@ -287,7 +287,7 @@
     <string name="browserFrameFormResubmitMessage" msgid="5244059279866705254">"Die bladsy wat jy wil sien, bevat data wat reeds ingedien is (\"POSTDATA\"). As jy die data weer stuur, sal enige handeling wat die vorm op die bladsy uitgevoer het (soos \'n soektog of iets aanlyn koop) herhaal word."</string>
     <string name="loadSuspendedTitle" msgid="6453376579109644551">"Geen verbinding nie"</string>
     <string name="loadSuspended" msgid="3843343290039218668">"Die blaaier kan nie hierdie bladsy laai nie, want daar is geen internetverbinding nie."</string>
-    <string name="clear_history" msgid="5998307092715979619">"Vee geskiedenis uit"</string>
+    <string name="clear_history" msgid="5998307092715979619">"Maak geskiedenis skoon"</string>
     <string name="browser_history" msgid="2979476257919939232">"Onlangs besoekte bladsye"</string>
     <string name="empty_history" msgid="7013369425484218985">"Geen blaaiergeskiedenis nie."</string>
     <string name="go_home" msgid="109129207276086793">"Tuisblad"</string>
@@ -362,7 +362,7 @@
     <string name="instant_search_label" msgid="8769284297650716935">"Google met Instant (Labs)"</string>
     <string name="preview" msgid="6450823514561689038">"Voorbeskou"</string>
     <string name="local_bookmarks" msgid="533816851415228520">"Plaaslik"</string>
-    <string name="ua_switcher_desktop" msgid="220097077327558435">"Versoek tafelrekenaar-werf"</string>
+    <string name="ua_switcher_desktop" msgid="220097077327558435">"Versoek volle webwerf"</string>
     <string name="permission_preload_label" msgid="4856971662337877316">"Laai resultate vooraf"</string>
     <string name="empty_snapshots_folder" msgid="7675378008107026013">"Geen gestoorde bladsye nie."</string>
     <string name="remove_snapshot" msgid="1624447424544976849">"Vee gestoorde bladsy uit"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 1ad875f..f72a50e 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -158,7 +158,7 @@
     <string name="pref_autofill_profile_editor" msgid="8934844472922113166">"Text d\'emplenament automàtic"</string>
     <string name="pref_autofill_profile_editor_summary" msgid="4864447251676856190">"Configura el text per a l\'emplenament automàtic de formularis web"</string>
     <string name="pref_autologin_title" msgid="4421187193809267096">"Inici de sessió autom. de Google"</string>
-    <string name="pref_autologin_progress" msgid="8333244467048833461">"Inici de la sessió a Llocs web de Google amb <xliff:g id="ID_1">%s</xliff:g>"</string>
+    <string name="pref_autologin_progress" msgid="8333244467048833461">"Inici de la sessió a Google Sites amb <xliff:g id="ID_1">%s</xliff:g>"</string>
     <string name="autologin_bar_text" msgid="3684581827167173371">"Inicia la sessió com a"</string>
     <string name="autologin_bar_login_text" msgid="3336615320510851879">"Inic sess"</string>
     <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Amaga"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 00b314e..2d6f48f 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -66,7 +66,7 @@
     <string name="no_subfolders" msgid="3303645239686962674">"Keine Unterordner"</string>
     <string name="add_to_bookmarks_menu_option" msgid="4449323955122214389">"Lesezeichen"</string>
     <string name="add_to_homescreen_menu_option" msgid="1461447829242963790">"Startbildschirm"</string>
-    <string name="add_to_other_folder_menu_option" msgid="5947586525822134105">"Anderer Ordner"</string>
+    <string name="add_to_other_folder_menu_option" msgid="5947586525822134105">"Sonstiger Ordner"</string>
     <string name="name" msgid="5462672162695365387">"Label"</string>
     <string name="http" msgid="2163722670597250102">"http://"</string>
     <string name="save_to_bookmarks" msgid="1679286010089780932">"Als Lesezeichen speichern"</string>
@@ -79,7 +79,7 @@
     <string name="remove_from_bookmarks" msgid="4374080666576982775">"Aus Lesezeichen entfernen"</string>
     <string name="remove_history_item" msgid="5021424935726728618">"Aus Verlauf entfernen"</string>
     <string name="set_as_homepage" msgid="4752937379414905560">"Als Startseite festlegen"</string>
-    <string name="bookmark_saved" msgid="2766434679871317557">"Gespeichert in Lesezeichen."</string>
+    <string name="bookmark_saved" msgid="2766434679871317557">"Gespeichert in Lesezeichen"</string>
     <string name="bookmark_not_saved" msgid="1077732557310662080">"Lesezeichen konnte nicht gespeichert werden."</string>
     <string name="homepage_set" msgid="8768087280310966395">"Startseite festgelegt."</string>
     <string name="bookmark_needs_title" msgid="6245900436119218187">"Das Lesezeichen muss über einen Namen verfügen."</string>
@@ -145,7 +145,7 @@
     <item msgid="844041670142910837">"Aktuelle Seite"</item>
     <item msgid="4430498748295169195">"Leere Seite"</item>
     <item msgid="5747608191946904074">"Standardseite"</item>
-    <item msgid="6092441301001006473">"Am häufigsten besuchte Websites"</item>
+    <item msgid="6092441301001006473">"Meistbesuchte Websites"</item>
     <item msgid="6569304572171444894">"Andere"</item>
   </string-array>
     <string name="pref_content_autofit" msgid="8260474534053660809">"Autom. Anpassung"</string>
@@ -153,7 +153,7 @@
     <string name="pref_general_title" msgid="1946872771219249323">"Allgemein"</string>
     <string name="pref_general_sync_title" msgid="3138637035975860324">"Synchronisierung"</string>
     <string name="pref_general_autofill_title" msgid="547881256865816858">"AutoFill"</string>
-    <string name="pref_autofill_enabled" msgid="1015751713312396713">"Formular autom. ausf."</string>
+    <string name="pref_autofill_enabled" msgid="1015751713312396713">"Automatisch ausfüllen"</string>
     <string name="pref_autofill_enabled_summary" msgid="7659954073892471496">"Webformulare mit einer einzigen Berührung ausfüllen"</string>
     <string name="pref_autofill_profile_editor" msgid="8934844472922113166">"AutoFill-Text"</string>
     <string name="pref_autofill_profile_editor_summary" msgid="4864447251676856190">"AutoFill-Text für Webformulare einrichten"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index dc1ece0..76f6a9c 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -232,7 +232,7 @@
     <string name="pref_force_userscalable_summary" msgid="3613242300617172230">"Evitar que un sitio web pueda cambiar el zoom"</string>
     <string name="pref_inverted_category" msgid="1280639705117152207">"Invertir colores"</string>
     <string name="pref_inverted" msgid="7613556986776824112">"Invertir colores"</string>
-    <string name="pref_inverted_summary" msgid="7357225897413923085">"El negro se convertirá en blanco y viceversa."</string>
+    <string name="pref_inverted_summary" msgid="7357225897413923085">"El negro se convertirá en blanco y viceversa"</string>
     <string name="pref_inverted_contrast" msgid="8527441236225288169">"Contraste"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Zoom predeterminado"</string>
   <string-array name="pref_default_zoom_choices">
@@ -241,8 +241,8 @@
     <item msgid="3840999588443167001">"Cerca"</item>
   </string-array>
     <string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Zoom predeterminado"</string>
-    <string name="pref_content_load_page" msgid="2219810141690955452">"Ver información general"</string>
-    <string name="pref_content_load_page_summary" msgid="9168803276420332955">"Mostrar información general de las páginas abiertas recientemente"</string>
+    <string name="pref_content_load_page" msgid="2219810141690955452">"Abrir en tamaño reducido"</string>
+    <string name="pref_content_load_page_summary" msgid="9168803276420332955">"Abrir páginas nuevas a tamaño reducido para verlas de un vistazo"</string>
     <string name="pref_extras_title" msgid="7075456173747370647">"Avanzados"</string>
     <string name="pref_extras_website_settings" msgid="67866640052455549">"Ajustes del sitio web"</string>
     <string name="pref_extras_website_settings_summary" msgid="1656771443223494406">"Ajustes avanzados de sitios web individuales"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index bce533c..1a08f4d 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -207,7 +207,7 @@
     <string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Autoriser les sites à demander l\'accès à vos données de localisation"</string>
     <string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Supprimer l\'accès"</string>
     <string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"Supprimer l\'accès aux données de localisation pour tous les sites Web"</string>
-    <string name="pref_privacy_clear_geolocation_access_dlg" msgid="3190928760598034346">"Supprimer l\'accès du site Web aux données de localisation ?"</string>
+    <string name="pref_privacy_clear_geolocation_access_dlg" msgid="3190928760598034346">"Supprimer l\'accès des sites aux données de localisation ?"</string>
     <string name="pref_security_passwords_title" msgid="5734190542383756711">"Mots de passe"</string>
     <string name="pref_security_remember_passwords" msgid="6492957683454529549">"Mémoriser mots de passe"</string>
     <string name="pref_security_remember_passwords_summary" msgid="256388703356349137">"Enregistrer les noms d\'utilisateur et les mots de passe pour les sites Web"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 50dfb53..4dc836b 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -52,7 +52,7 @@
     <string name="ssl_unknown" msgid="5679243486524754571">"अज्ञात प्रमाणपत्र त्रुटि."</string>
     <string name="stopping" msgid="4839698519340302982">"रोका जा रहा है…"</string>
     <string name="stop" msgid="5687251076030630074">"रोकें"</string>
-    <string name="reload" msgid="8585220783228408062">"रीफ़्रेश करें"</string>
+    <string name="reload" msgid="8585220783228408062">"रीफ़्रेश करें"</string>
     <string name="back" msgid="8414603107175713668">"वापस जाएं"</string>
     <string name="forward" msgid="4288210890526641577">"अग्रेषित करें"</string>
     <string name="save" msgid="5922311934992468496">"ठीक"</string>
@@ -116,7 +116,7 @@
     <string name="contextmenu_view_image" msgid="3870625602053600905">"छवि देखें"</string>
     <string name="contextmenu_set_wallpaper" msgid="3691902960115350686">"वॉलपेपर के रूप में सेट करें"</string>
     <string name="contextmenu_dial_dot" msgid="5856550683415933806">"डायल करें…"</string>
-    <string name="contextmenu_add_contact" msgid="3183511922223645716">"संपर्क जोड़ें"</string>
+    <string name="contextmenu_add_contact" msgid="3183511922223645716">"संपर्क जोड़ें"</string>
     <string name="contextmenu_send_mail" msgid="1014513374828775660">"ईमेल भेजें"</string>
     <string name="contextmenu_map" msgid="7471390435434034912">"मानचित्र"</string>
     <string name="choosertitle_sharevia" msgid="4600490613341909086">"इसके द्वारा शेयर करें"</string>
@@ -148,7 +148,7 @@
     <item msgid="6092441301001006473">"सर्वाधिक देखी गई साइटें"</item>
     <item msgid="6569304572171444894">"अन्य"</item>
   </string-array>
-    <string name="pref_content_autofit" msgid="8260474534053660809">"स्वतः फ़िट पृष्ठ"</string>
+    <string name="pref_content_autofit" msgid="8260474534053660809">"स्वतः फ़िट पृष्ठ"</string>
     <string name="pref_content_autofit_summary" msgid="324810555822572112">"स्‍क्रीन में फ़िट करने के लिए वेबपृष्ठों को प्रारूपित करें"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"सामान्य"</string>
     <string name="pref_general_sync_title" msgid="3138637035975860324">"समन्वयित करें"</string>
@@ -378,7 +378,7 @@
     <string name="accessibility_button_closetab" msgid="6954807842756927737">"टैब बंद करें"</string>
     <string name="accessibility_button_newtab" msgid="4116986240706315748">"नया टैब खोलें"</string>
     <string name="accessibility_button_newincognitotab" msgid="5254901889040012964">"नया गुप्त टैब खोलें"</string>
-    <string name="accessibility_button_clear" msgid="6943152307986161598">"इनपुट साफ़ करें"</string>
+    <string name="accessibility_button_clear" msgid="6943152307986161598">"इनपुट साफ़ करें"</string>
     <string name="accessibility_button_uaswitch" msgid="6286804719724282339">"उपयोगकर्ता एजेंट स्विच करें"</string>
     <string name="accessibility_button_go" msgid="1182818872083055958">"जाएं"</string>
     <string name="accessibility_button_navscreen" msgid="9142904748728713075">"पृष्ठ प्रबंधक"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 718f936..7a2210c 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -148,7 +148,7 @@
     <item msgid="6092441301001006473">"Situs yang paling sering dikunjungi"</item>
     <item msgid="6569304572171444894">"Lainnya"</item>
   </string-array>
-    <string name="pref_content_autofit" msgid="8260474534053660809">"Sesuaikan dengan laman secara otomatis"</string>
+    <string name="pref_content_autofit" msgid="8260474534053660809">"Sesuaikan otomatis ukuran laman"</string>
     <string name="pref_content_autofit_summary" msgid="324810555822572112">"Format laman web agar sesuai dengan layar"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Umum"</string>
     <string name="pref_general_sync_title" msgid="3138637035975860324">"Sinkronisasi"</string>
@@ -190,7 +190,7 @@
     <string name="pref_privacy_clear_cache_dlg" msgid="4344512581716422465">"Hapus basis data dan konten dalam tembolok lokal?"</string>
     <string name="pref_privacy_cookies_title" msgid="6763274282214830526">"Kuki"</string>
     <string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Hapus semua data kuki"</string>
-    <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Hapus semua kuki peramban"</string>
+    <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Menghapus semua kuki peramban"</string>
     <string name="pref_privacy_clear_cookies_dlg" msgid="1493252163164621278">"Hapus semua kuki?"</string>
     <string name="pref_privacy_clear_history" msgid="8723795508825198477">"Hapus riwayat"</string>
     <string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Hapus riwayat navigasi peramban"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 656d1b1..8b52381 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -22,7 +22,7 @@
     <string name="new_tab" msgid="7971857320679510529">"כרטיסייה חדשה"</string>
     <string name="new_incognito_tab" msgid="3606197964239039478">"כרטיסייה חדשה של גלישה בסתר"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"סימניות"</string>
-    <string name="tab_most_visited" msgid="1077402532455000703">"אתרים שבהם אתה מבקר בתדירות הגבוהה ביותר"</string>
+    <string name="tab_most_visited" msgid="1077402532455000703">"אתרים שבהם אתה מבקר הכי הרבה"</string>
     <string name="tab_history" msgid="1979267558744613746">"היסטוריה"</string>
     <string name="tab_snapshots" msgid="1449241204980265186">"דפים שמורים"</string>
     <string name="added_to_bookmarks" msgid="4028710765672851635">"נוסף לסימניות."</string>
@@ -69,7 +69,7 @@
     <string name="add_to_other_folder_menu_option" msgid="5947586525822134105">"תיקיה אחרת"</string>
     <string name="name" msgid="5462672162695365387">"תווית"</string>
     <string name="http" msgid="2163722670597250102">"http://‎"</string>
-    <string name="save_to_bookmarks" msgid="1679286010089780932">"שמור בסימניות."</string>
+    <string name="save_to_bookmarks" msgid="1679286010089780932">"שמור בסימניות"</string>
     <string name="bookmark_this_page" msgid="7530739804320811054">"הוסף דף זה לסימניות"</string>
     <string name="remove" msgid="7820112494467011374">"הסר"</string>
     <string name="edit_bookmark" msgid="5024089053490231905">"ערוך סימניה"</string>
@@ -145,7 +145,7 @@
     <item msgid="844041670142910837">"דף נוכחי"</item>
     <item msgid="4430498748295169195">"דף ריק"</item>
     <item msgid="5747608191946904074">"דף ברירת מחדל"</item>
-    <item msgid="6092441301001006473">"האתרים שבהם ביקרת בתדירות גבוהה"</item>
+    <item msgid="6092441301001006473">"האתרים הפופולריים ביותר"</item>
     <item msgid="6569304572171444894">"אחר"</item>
   </string-array>
     <string name="pref_content_autofit" msgid="8260474534053660809">"התאם דפים באופן אוטומטי"</string>
@@ -238,7 +238,7 @@
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"רחוק"</item>
     <item msgid="5619034257768161024">"בינוני"</item>
-    <item msgid="3840999588443167001">"סגור"</item>
+    <item msgid="3840999588443167001">"קרוב"</item>
   </string-array>
     <string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"ברירת מחדל של מרחק מתצוגה"</string>
     <string name="pref_content_load_page" msgid="2219810141690955452">"פתח דפים בסקירה"</string>
@@ -303,14 +303,14 @@
     <string name="too_many_windows_dialog_message" msgid="3644234634638290304">"לא ניתן לפתוח כרטיסיה חדשה עד לסגירת אחת הכרטיסיות."</string>
     <string name="too_many_subwindows_dialog_title" msgid="3805453941587725944">"חלון קופץ כבר פתוח"</string>
     <string name="too_many_subwindows_dialog_message" msgid="2164725447981195556">"רק חלון קופץ אחד יכול להיות פתוח בכל פעם."</string>
-    <string name="download_no_sdcard_dlg_title" product="nosdcard" msgid="56777245081568508">"אמצעי אחסון מסוג USB אינו זמין"</string>
+    <string name="download_no_sdcard_dlg_title" product="nosdcard" msgid="56777245081568508">"אחסון USB אינו זמין"</string>
     <string name="download_no_sdcard_dlg_title" product="default" msgid="605904452159416792">"אין כרטיס SD"</string>
-    <string name="download_no_sdcard_dlg_msg" product="nosdcard" msgid="3144652102051031721">"דרוש אמצעי אחסון מסוג USB להורדה של <xliff:g id="FILENAME">%s</xliff:g>."</string>
+    <string name="download_no_sdcard_dlg_msg" product="nosdcard" msgid="3144652102051031721">"דרוש אחסון USB להורדה של <xliff:g id="FILENAME">%s</xliff:g>."</string>
     <string name="download_no_sdcard_dlg_msg" product="default" msgid="2616399456116301518">"דרוש כרטיס SD כדי להוריד את <xliff:g id="FILENAME">%s</xliff:g>."</string>
-    <string name="download_sdcard_busy_dlg_title" product="nosdcard" msgid="8081445664689818973">"אמצעי אחסון מסוג USB אינו זמין"</string>
+    <string name="download_sdcard_busy_dlg_title" product="nosdcard" msgid="8081445664689818973">"אחסון USB אינו זמין"</string>
     <string name="download_sdcard_busy_dlg_title" product="default" msgid="6877712666046917741">"כרטיס SD לא זמין"</string>
-    <string name="download_sdcard_busy_dlg_msg" product="nosdcard" msgid="8412543086906716875">"אחסון ה-USB אינו פנוי. כדי לאפשר הורדות, גע ב\"כבה אמצעי אחסון מסוג USB\" בהתראה."</string>
-    <string name="download_sdcard_busy_dlg_msg" product="default" msgid="2629425950473358591">"כרטיס ה-SD אינו פנוי. כדי לאפשר הורדות, גע ב\"כבה אמצעי אחסון מסוג USB\" בהתראה."</string>
+    <string name="download_sdcard_busy_dlg_msg" product="nosdcard" msgid="8412543086906716875">"אחסון ה-USB אינו פנוי. כדי לאפשר הורדות, גע ב\"כבה אחסון USB\" בהתראה."</string>
+    <string name="download_sdcard_busy_dlg_msg" product="default" msgid="2629425950473358591">"כרטיס ה-SD אינו פנוי. כדי לאפשר הורדות, גע ב\"כבה אחסון USB\" בהתראה."</string>
     <string name="cannot_download" msgid="8150552478556798780">"ניתן להוריד רק כתובות אתר המתחילות ב-\"http\" או \"https\"."</string>
     <string name="download_pending" msgid="2599683668575349559">"מתחיל בהורדה..."</string>
     <string name="help_page" msgid="2906208423557552540">"עזרה"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 4c4dac0..6836328 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -148,7 +148,7 @@
     <item msgid="6092441301001006473">"Dažniausiai lankomos svetainės"</item>
     <item msgid="6569304572171444894">"Kita"</item>
   </string-array>
-    <string name="pref_content_autofit" msgid="8260474534053660809">"Automatiškai talpinti puslapius"</string>
+    <string name="pref_content_autofit" msgid="8260474534053660809">"Automatiškai pritaikyti puslapius"</string>
     <string name="pref_content_autofit_summary" msgid="324810555822572112">"Formatuoti tinklalapius, kad tilptų ekrane"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Bendra"</string>
     <string name="pref_general_sync_title" msgid="3138637035975860324">"Sinchronizavimas"</string>
@@ -241,7 +241,7 @@
     <item msgid="3840999588443167001">"Uždaryti"</item>
   </string-array>
     <string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Numatytasis mastelio keitimas"</string>
-    <string name="pref_content_load_page" msgid="2219810141690955452">"Atidaryti puslapius apžvalgai"</string>
+    <string name="pref_content_load_page" msgid="2219810141690955452">"Puslapių atidarymas apžvalgos režimu"</string>
     <string name="pref_content_load_page_summary" msgid="9168803276420332955">"Rodyti naujai atidarytų puslapių apžvalgą"</string>
     <string name="pref_extras_title" msgid="7075456173747370647">"Išplėstinis"</string>
     <string name="pref_extras_website_settings" msgid="67866640052455549">"Svetainės nustatymai"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index a8eca7a..91a2f86 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -95,7 +95,7 @@
     <string name="goto_dot" msgid="3895839050522602723">"Gå til"</string>
     <string name="select_dot" msgid="6299170761900561967">"Velg tekst"</string>
     <string name="bookmarks" msgid="1961279134885867815">"Bokmerker"</string>
-    <string name="shortcut_bookmark" msgid="3974876480401135895">"Bokmerk"</string>
+    <string name="shortcut_bookmark" msgid="3974876480401135895">"Bokmerke"</string>
     <string name="shortcut_bookmark_title" msgid="7570786275916681296">"Velg et bokmerke"</string>
     <string name="history" msgid="2451240511251410032">"Logg"</string>
     <string name="menu_view_download" msgid="2124570321712995120">"Nedlastinger"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index b6b0b48..3ec3af6 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -230,8 +230,8 @@
     <string name="pref_zoom_on_double_tap" msgid="902786475250741795">"Zoomen bij dubbeltikken"</string>
     <string name="pref_force_userscalable" msgid="5641500562399892621">"Zoom inschakelen forceren"</string>
     <string name="pref_force_userscalable_summary" msgid="3613242300617172230">"Siteverzoek zoombeheer negeren"</string>
-    <string name="pref_inverted_category" msgid="1280639705117152207">"Omgekeerde opbouwvolgorde van scherm"</string>
-    <string name="pref_inverted" msgid="7613556986776824112">"Omgekeerde opbouwvolgorde"</string>
+    <string name="pref_inverted_category" msgid="1280639705117152207">"Omgekeerde opbouw van scherm"</string>
+    <string name="pref_inverted" msgid="7613556986776824112">"Omgekeerde opbouw"</string>
     <string name="pref_inverted_summary" msgid="7357225897413923085">"Zwart wordt wit en andersom"</string>
     <string name="pref_inverted_contrast" msgid="8527441236225288169">"Contrast"</string>
     <string name="pref_default_zoom" msgid="8076142259097187395">"Standaardzoom"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 39453d0..25e2f87 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -127,9 +127,9 @@
     <string name="pref_content_title" msgid="3834107397725342174">"Содержание страницы"</string>
     <string name="pref_content_load_images" msgid="2125616852957377561">"Загружать графику"</string>
     <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Показывать изображения на веб-страницах"</string>
-    <string name="pref_content_block_popups" msgid="4158524847764470895">"Блокировать всплывающие окна"</string>
+    <string name="pref_content_block_popups" msgid="4158524847764470895">"Блокир. всплыв. окна"</string>
     <string name="pref_content_javascript" msgid="4570972030299516843">"Разрешить JavaScript"</string>
-    <string name="pref_content_open_in_background" msgid="824123779725118663">"Открывать в фоновом режиме"</string>
+    <string name="pref_content_open_in_background" msgid="824123779725118663">"Фоновые вкладки"</string>
     <string name="pref_content_plugins" msgid="7231944644794301582">"Разрешить плагины"</string>
   <string-array name="pref_content_plugins_choices">
     <item msgid="6745108155096660725">"Да"</item>
@@ -224,11 +224,11 @@
     <item msgid="5043128215356351184">"Большой"</item>
     <item msgid="7201512237890458902">"Огромный"</item>
   </string-array>
-    <string name="pref_min_font_size" msgid="8811125835817449131">"Минимальный размер шрифта"</string>
+    <string name="pref_min_font_size" msgid="8811125835817449131">"Мин. размер шрифта"</string>
     <string name="pref_min_font_size_value" msgid="2924708480509060209">"<xliff:g id="FONT_SIZE">%d</xliff:g> pt"</string>
     <string name="pref_text_zoom" msgid="5171056101805125497">"Масштабирование текста"</string>
-    <string name="pref_zoom_on_double_tap" msgid="902786475250741795">"Увеличение при двойном нажатии"</string>
-    <string name="pref_force_userscalable" msgid="5641500562399892621">"Менять масштаб принудительно"</string>
+    <string name="pref_zoom_on_double_tap" msgid="902786475250741795">"Зум при двойном нажатии"</string>
+    <string name="pref_force_userscalable" msgid="5641500562399892621">"Фикс. масштаб"</string>
     <string name="pref_force_userscalable_summary" msgid="3613242300617172230">"Использовать заданное масштабирование"</string>
     <string name="pref_inverted_category" msgid="1280639705117152207">"Режим инверсии"</string>
     <string name="pref_inverted" msgid="7613556986776824112">"Инверсия"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index bbed841..2226e6e 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -160,7 +160,7 @@
     <string name="pref_autologin_title" msgid="4421187193809267096">"Automatic Google signin"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Kuingia kwa tovuti za Google kwa kutumia <xliff:g id="ID_1">%s</xliff:g>"</string>
     <string name="autologin_bar_text" msgid="3684581827167173371">"Ingia kama"</string>
-    <string name="autologin_bar_login_text" msgid="3336615320510851879">"Ingia ndani"</string>
+    <string name="autologin_bar_login_text" msgid="3336615320510851879">"Ingia"</string>
     <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Ficha"</string>
     <string name="autologin_bar_error" msgid="7470001207395920811">"Haingeweza kuinga ndani"</string>
     <string name="autofill_profile_editor_heading" msgid="4798644544927738078">"Andika maandishi unataka kujaza-oto katika fomu za wavuti."</string>
@@ -267,7 +267,7 @@
     <string name="pref_font_size_category" msgid="6683754355084218254">"Ukubwa wa maandishi"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Maabara"</string>
     <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Vidhibiti vya Haraka"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Telea gumba kutoka pambizo ya kushoto au kulia ili kufungua vidhibiti na kuficha prog na mwambaa za URL"</string>
+    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Telea gumba kutoka pambizo ya kushoto au kulia ili kufungua vidhibiti na kuficha programu na mwambaa za URL"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Tumia Google Instant unapotumia Utafutaji wa Google, ili kuonyesha matokeo unapoendelea kuchapa (hii inaweza kuongeza matumizi ya data)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Skrini nzima"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 767bc5c..a15fd2b 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -22,7 +22,7 @@
     <string name="new_tab" msgid="7971857320679510529">"แท็บใหม่"</string>
     <string name="new_incognito_tab" msgid="3606197964239039478">"แท็บใหม่ที่ไม่ระบุตัวตน"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"บุ๊กมาร์ก"</string>
-    <string name="tab_most_visited" msgid="1077402532455000703">"เข้าชมมากที่สุด"</string>
+    <string name="tab_most_visited" msgid="1077402532455000703">"เข้าชมบ่อยที่สุด"</string>
     <string name="tab_history" msgid="1979267558744613746">"ประวัติ"</string>
     <string name="tab_snapshots" msgid="1449241204980265186">"หน้าที่บันทึกไว้"</string>
     <string name="added_to_bookmarks" msgid="4028710765672851635">"เพิ่มลงในบุ๊กมาร์กแล้ว"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 81136f1..7ed35f3 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -379,7 +379,7 @@
     <string name="accessibility_button_newtab" msgid="4116986240706315748">"Yeni sekme aç"</string>
     <string name="accessibility_button_newincognitotab" msgid="5254901889040012964">"Yeni gizli sekme aç"</string>
     <string name="accessibility_button_clear" msgid="6943152307986161598">"Girdiyi temizle"</string>
-    <string name="accessibility_button_uaswitch" msgid="6286804719724282339">"Kullanıcı aracısını değiştir"</string>
+    <string name="accessibility_button_uaswitch" msgid="6286804719724282339">"User agent\'ı değiştir"</string>
     <string name="accessibility_button_go" msgid="1182818872083055958">"Git"</string>
     <string name="accessibility_button_navscreen" msgid="9142904748728713075">"Sayfa yöneticisi"</string>
     <string name="accessibility_button_more" msgid="3054251446394224216">"Diğer seçenekler"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 4aa1f05..4841c2d 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -18,15 +18,15 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="application_name" msgid="1935869255545976415">"Trình duyệt"</string>
     <string name="choose_upload" msgid="3649366287575002063">"Chọn tệp để tải lên"</string>
-    <string name="uploads_disabled" msgid="463761197575372994">"Nội dung tải lên của tệp bị vô hiệu hóa."</string>
+    <string name="uploads_disabled" msgid="463761197575372994">"Nội dung tải lên của tệp bị tắt."</string>
     <string name="new_tab" msgid="7971857320679510529">"Tab mới"</string>
     <string name="new_incognito_tab" msgid="3606197964239039478">"Tab ẩn danh mới"</string>
     <string name="tab_bookmarks" msgid="2305793036003473653">"Dấu trang"</string>
     <string name="tab_most_visited" msgid="1077402532455000703">"Truy cập nhiều nhất"</string>
     <string name="tab_history" msgid="1979267558744613746">"Lịch sử"</string>
     <string name="tab_snapshots" msgid="1449241204980265186">"Trang đã lưu"</string>
-    <string name="added_to_bookmarks" msgid="4028710765672851635">"Đã thêm vào dấu trang."</string>
-    <string name="removed_from_bookmarks" msgid="546648923924996722">"Đã xóa khỏi dấu trang."</string>
+    <string name="added_to_bookmarks" msgid="4028710765672851635">"Đã thêm vào dấu trang."</string>
+    <string name="removed_from_bookmarks" msgid="546648923924996722">"Đã xóa khỏi dấu trang."</string>
     <string name="sign_in_to" msgid="5939425800148759165">"Đăng nhập vào <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
     <string name="username" msgid="5057566336518215922">"Tên"</string>
     <string name="password" msgid="1177138552305184404">"Mật khẩu"</string>
@@ -34,12 +34,12 @@
     <string name="bookmarks_search" msgid="5229596268214362873">"Trình duyệt"</string>
     <string name="cancel" msgid="3017274947407233702">"Hủy"</string>
     <string name="ok" msgid="1509280796718850364">"OK"</string>
-    <string name="title_bar_loading" msgid="7438217780834640678">"Đang tải…"</string>
+    <string name="title_bar_loading" msgid="7438217780834640678">"Đang tải…"</string>
     <string name="page_info" msgid="4048529256302257195">"Thông tin trang"</string>
     <string name="page_info_view" msgid="5303490449842635158">"Xem thông tin trang"</string>
     <string name="page_info_address" msgid="2222306609532903254">"Địa chỉ:"</string>
     <string name="ssl_warnings_header" msgid="79744901983636370">"Có sự cố với chứng chỉ bảo mật cho trang web này."</string>
-    <string name="ssl_continue" msgid="8031515015829358457">"Tiếp tục"</string>
+    <string name="ssl_continue" msgid="8031515015829358457">"Tiếp tục"</string>
     <string name="security_warning" msgid="6607795404322797541">"Cảnh báo bảo mật"</string>
     <string name="view_certificate" msgid="1472768887529093862">"Xem chứng chỉ"</string>
     <string name="ssl_go_back" msgid="4598951822061593819">"Quay lại"</string>
@@ -69,17 +69,17 @@
     <string name="add_to_other_folder_menu_option" msgid="5947586525822134105">"Thư mục khác"</string>
     <string name="name" msgid="5462672162695365387">"Nhãn"</string>
     <string name="http" msgid="2163722670597250102">"http://"</string>
-    <string name="save_to_bookmarks" msgid="1679286010089780932">"Đã lưu vào dấu trang"</string>
+    <string name="save_to_bookmarks" msgid="1679286010089780932">"Lưu vào dấu trang"</string>
     <string name="bookmark_this_page" msgid="7530739804320811054">"Đánh dấu trang này"</string>
     <string name="remove" msgid="7820112494467011374">"Xóa"</string>
-    <string name="edit_bookmark" msgid="5024089053490231905">"Chỉnh sửa dấu trang"</string>
+    <string name="edit_bookmark" msgid="5024089053490231905">"Chỉnh sửa dấu trang"</string>
     <string name="create_shortcut_bookmark" msgid="1995095662095484289">"Thêm lối tắt tới màn hình trang chủ"</string>
-    <string name="open_bookmark" msgid="8473581305759935790">"Mở"</string>
-    <string name="remove_bookmark" msgid="8407495852801410891">"Xoá dấu trang"</string>
-    <string name="remove_from_bookmarks" msgid="4374080666576982775">"Xoá khỏi dấu trang"</string>
-    <string name="remove_history_item" msgid="5021424935726728618">"Xoá khỏi lịch sử"</string>
+    <string name="open_bookmark" msgid="8473581305759935790">"Mở"</string>
+    <string name="remove_bookmark" msgid="8407495852801410891">"Xóa dấu trang"</string>
+    <string name="remove_from_bookmarks" msgid="4374080666576982775">"Xóa khỏi dấu trang"</string>
+    <string name="remove_history_item" msgid="5021424935726728618">"Xóa khỏi lịch sử"</string>
     <string name="set_as_homepage" msgid="4752937379414905560">"Đặt làm trang chủ"</string>
-    <string name="bookmark_saved" msgid="2766434679871317557">"Đã lưu vào dấu trang."</string>
+    <string name="bookmark_saved" msgid="2766434679871317557">"Đã lưu vào dấu trang."</string>
     <string name="bookmark_not_saved" msgid="1077732557310662080">"Không thể lưu dấu trang."</string>
     <string name="homepage_set" msgid="8768087280310966395">"Đã đặt trang chủ."</string>
     <string name="bookmark_needs_title" msgid="6245900436119218187">"Dấu trang phải có tên."</string>
@@ -99,28 +99,28 @@
     <string name="shortcut_bookmark_title" msgid="7570786275916681296">"Chọn dấu trang"</string>
     <string name="history" msgid="2451240511251410032">"Lịch sử"</string>
     <string name="menu_view_download" msgid="2124570321712995120">"Nội dung tải xuống"</string>
-    <string name="copy_page_url" msgid="1188679152608889555">"Sao chép url của trang"</string>
+    <string name="copy_page_url" msgid="1188679152608889555">"Sao chép url của trang"</string>
     <string name="share_page" msgid="593756995297268343">"Chia sẻ trang"</string>
     <string name="menu_save_snapshot" msgid="6935080344031126139">"Lưu để đọc ngoại tuyến"</string>
     <string name="snapshot_failed" msgid="4584580873565876033">"Không thể lưu để đọc ngoại tuyến."</string>
     <string name="contextheader_folder_bookmarkcount" msgid="353987136645619089">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> dấu trang"</string>
     <string name="contextheader_folder_empty" msgid="974171637803391651">"Thư mục trống"</string>
-    <string name="contextmenu_openlink" msgid="7237961252214188935">"Mở"</string>
-    <string name="contextmenu_openlink_newwindow" msgid="1205313604181761403">"Mở trong tab mới"</string>
+    <string name="contextmenu_openlink" msgid="7237961252214188935">"Mở"</string>
+    <string name="contextmenu_openlink_newwindow" msgid="1205313604181761403">"Mở trong tab mới"</string>
     <string name="contextmenu_openlink_newwindow_background" msgid="4690381019116746687">"Mở trong tab nền mới"</string>
     <string name="contextmenu_savelink" msgid="5508554930832538184">"Lưu liên kết"</string>
     <string name="contextmenu_sharelink" msgid="5392275392280130331">"Chia sẻ liên kết"</string>
-    <string name="contextmenu_copy" msgid="398860586635404030">"Sao chép"</string>
-    <string name="contextmenu_copylink" msgid="5153657160294534270">"Sao chép URL liên kết"</string>
+    <string name="contextmenu_copy" msgid="398860586635404030">"Sao chép"</string>
+    <string name="contextmenu_copylink" msgid="5153657160294534270">"Sao chép URL liên kết"</string>
     <string name="contextmenu_download_image" msgid="4243829645180686912">"Lưu hình ảnh"</string>
     <string name="contextmenu_view_image" msgid="3870625602053600905">"Xem hình ảnh"</string>
     <string name="contextmenu_set_wallpaper" msgid="3691902960115350686">"Đặt làm hình nền"</string>
     <string name="contextmenu_dial_dot" msgid="5856550683415933806">"Quay số…"</string>
     <string name="contextmenu_add_contact" msgid="3183511922223645716">"Thêm liên hệ"</string>
     <string name="contextmenu_send_mail" msgid="1014513374828775660">"Gửi email"</string>
-    <string name="contextmenu_map" msgid="7471390435434034912">"Bản đồ"</string>
+    <string name="contextmenu_map" msgid="7471390435434034912">"Bản đồ"</string>
     <string name="choosertitle_sharevia" msgid="4600490613341909086">"Chia sẻ qua"</string>
-    <string name="clear" msgid="7070043081700011461">"Xoá"</string>
+    <string name="clear" msgid="7070043081700011461">"Xóa"</string>
     <string name="replace" msgid="4843033491070384047">"Thay thế"</string>
     <string name="browser_bookmarks_page_bookmarks_text" msgid="6787605028726162673">"Dấu trang"</string>
     <string name="menu_preferences" msgid="6709237687234102240">"Cài đặt"</string>
@@ -129,7 +129,7 @@
     <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Hiển thị hình ảnh trên trang web"</string>
     <string name="pref_content_block_popups" msgid="4158524847764470895">"Chặn cửa sổ bật lên"</string>
     <string name="pref_content_javascript" msgid="4570972030299516843">"Bật JavaScript"</string>
-    <string name="pref_content_open_in_background" msgid="824123779725118663">"Mở dưới nền"</string>
+    <string name="pref_content_open_in_background" msgid="824123779725118663">"Mở dưới nền"</string>
     <string name="pref_content_plugins" msgid="7231944644794301582">"Bật trình cắm"</string>
   <string-array name="pref_content_plugins_choices">
     <item msgid="6745108155096660725">"Luôn bật"</item>
@@ -148,7 +148,7 @@
     <item msgid="6092441301001006473">"Các trang web được truy cập nhiều nhất"</item>
     <item msgid="6569304572171444894">"Khác"</item>
   </string-array>
-    <string name="pref_content_autofit" msgid="8260474534053660809">"Tự động điều chỉnh kích thước các trang"</string>
+    <string name="pref_content_autofit" msgid="8260474534053660809">"Tự động điều chỉnh kích thước trang"</string>
     <string name="pref_content_autofit_summary" msgid="324810555822572112">"Định dạng trang web để vừa với màn hình"</string>
     <string name="pref_general_title" msgid="1946872771219249323">"Chung"</string>
     <string name="pref_general_sync_title" msgid="3138637035975860324">"Đồng bộ hóa"</string>
@@ -175,7 +175,7 @@
     <string name="autofill_profile_editor_state" msgid="2150403366835080407">"Tiểu bang/Tỉnh/Vùng:"</string>
     <string name="autofill_profile_editor_zip_code" msgid="283668573295656671">"Mã zip:"</string>
     <string name="autofill_profile_editor_country" msgid="7234470301239156656">"Quốc gia:"</string>
-    <string name="autofill_profile_editor_phone_number" msgid="4938852821413729276">"Điện thoại:"</string>
+    <string name="autofill_profile_editor_phone_number" msgid="4938852821413729276">"Điện thoại:"</string>
     <string name="autofill_profile_editor_phone_number_invalid" msgid="6795411298467068957">"Số điện thoại không hợp lệ."</string>
     <string name="autofill_profile_editor_save_profile" msgid="3230301454458581157">"Lưu"</string>
     <string name="autofill_profile_successful_save" msgid="5691459703493331983">"Đã lưu văn bản tự động điền."</string>
@@ -185,28 +185,28 @@
     <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Bạn luôn có thể thiết lập văn bản tự động điền của mình từ màn hình Trình duyệt &gt; Cài đặt &gt; Chung."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Tắt tính năng tự động điền"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Riêng tư &amp; bảo mật"</string>
-    <string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Xoá bộ nhớ cache"</string>
-    <string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Xoá nội dung và cơ sở dữ liệu được lưu trong bộ nhớ cache cục bộ"</string>
+    <string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Xóa bộ nhớ cache"</string>
+    <string name="pref_privacy_clear_cache_summary" msgid="2216463577207991454">"Xóa nội dung và cơ sở dữ liệu được lưu trong bộ nhớ cache cục bộ"</string>
     <string name="pref_privacy_clear_cache_dlg" msgid="4344512581716422465">"Xóa nội dung và cơ sở dữ liệu được lưu trong bộ nhớ cache cục bộ?"</string>
     <string name="pref_privacy_cookies_title" msgid="6763274282214830526">"Cookie"</string>
-    <string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Xoá tất cả dữ liệu cookie"</string>
-    <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Xoá tất cả cookie của trình duyệt"</string>
+    <string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Xóa tất cả dữ liệu cookie"</string>
+    <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Xóa tất cả cookie của trình duyệt"</string>
     <string name="pref_privacy_clear_cookies_dlg" msgid="1493252163164621278">"Xóa tất cả cookie?"</string>
-    <string name="pref_privacy_clear_history" msgid="8723795508825198477">"Xoá lịch sử"</string>
-    <string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Xoá lịch sử điều hướng của trình duyệt"</string>
+    <string name="pref_privacy_clear_history" msgid="8723795508825198477">"Xóa lịch sử"</string>
+    <string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Xóa lịch sử điều hướng của trình duyệt"</string>
     <string name="pref_privacy_clear_history_dlg" msgid="6934317391642846227">"Xóa lịch sử điều hướng của trình duyệt?"</string>
     <string name="pref_privacy_formdata_title" msgid="6549813837982050424">"Dữ liệu biểu mẫu"</string>
-    <string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Xoá dữ liệu biểu mẫu"</string>
+    <string name="pref_privacy_clear_form_data" msgid="4232668196344383987">"Xóa dữ liệu biểu mẫu"</string>
     <string name="pref_privacy_clear_form_data_summary" msgid="7702091143640546200">"Xóa tất cả dữ liệu biểu mẫu đã lưu"</string>
     <string name="pref_privacy_clear_form_data_dlg" msgid="8205626042241338983">"Xóa tất cả dữ liệu biểu mẫu đã lưu?"</string>
-    <string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"Xoá mật khẩu"</string>
-    <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Xoá tất cả mật khẩu đã lưu"</string>
+    <string name="pref_privacy_clear_passwords" msgid="4750234112289277480">"Xóa mật khẩu"</string>
+    <string name="pref_privacy_clear_passwords_summary" msgid="8856782718942903335">"Xóa tất cả mật khẩu đã lưu"</string>
     <string name="pref_privacy_clear_passwords_dlg" msgid="5836576259947160045">"Xóa tất cả mật khẩu đã lưu?"</string>
     <string name="pref_privacy_location_title" msgid="7458378016606081067">"Vị trí"</string>
     <string name="pref_privacy_enable_geolocation" msgid="1395040170290765686">"Bật vị trí"</string>
     <string name="pref_privacy_enable_geolocation_summary" msgid="8437020934664306205">"Cho phép trang web yêu cầu quyền truy cập vào vị trí của bạn"</string>
     <string name="pref_privacy_clear_geolocation_access" msgid="6649680770030042980">"Xóa truy cập vị trí"</string>
-    <string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"Xoá truy cập vị trí cho tất cả trang web"</string>
+    <string name="pref_privacy_clear_geolocation_access_summary" msgid="7750143359497314679">"Xóa truy cập vị trí cho tất cả trang web"</string>
     <string name="pref_privacy_clear_geolocation_access_dlg" msgid="3190928760598034346">"Xóa truy cập vị trí của trang web?"</string>
     <string name="pref_security_passwords_title" msgid="5734190542383756711">"Mật khẩu"</string>
     <string name="pref_security_remember_passwords" msgid="6492957683454529549">"Nhớ mật khẩu"</string>
@@ -219,9 +219,9 @@
     <string name="pref_security_accept_cookies_summary" msgid="1907951236154433751">"Cho phép trang web lưu và đọc dữ liệu cookie"</string>
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Rất nhỏ"</item>
-    <item msgid="1950030433642671460">"Nhỏ"</item>
+    <item msgid="1950030433642671460">"Nhỏ"</item>
     <item msgid="4338347520133294584">"Thường"</item>
-    <item msgid="5043128215356351184">"Lớn"</item>
+    <item msgid="5043128215356351184">"Lớn"</item>
     <item msgid="7201512237890458902">"Rất lớn"</item>
   </string-array>
     <string name="pref_min_font_size" msgid="8811125835817449131">"Kích thước phông chữ tối thiểu"</string>
@@ -229,7 +229,7 @@
     <string name="pref_text_zoom" msgid="5171056101805125497">"Chia tỷ lệ văn bản"</string>
     <string name="pref_zoom_on_double_tap" msgid="902786475250741795">"Thu phóng bằng nhấn đúp"</string>
     <string name="pref_force_userscalable" msgid="5641500562399892621">"Bắt buộc bật thu phóng"</string>
-    <string name="pref_force_userscalable_summary" msgid="3613242300617172230">"Gh.đè y/c ks t.phóng của t.web"</string>
+    <string name="pref_force_userscalable_summary" msgid="3613242300617172230">"Ghi đè yc của trang web để ksoát zoom"</string>
     <string name="pref_inverted_category" msgid="1280639705117152207">"Hiển thị màn hình đảo ngược"</string>
     <string name="pref_inverted" msgid="7613556986776824112">"Hiển thị màu sắc đảo ngược"</string>
     <string name="pref_inverted_summary" msgid="7357225897413923085">"Màu đen chuyển thành màu trắng và ngược lại"</string>
@@ -238,10 +238,10 @@
   <string-array name="pref_default_zoom_choices">
     <item msgid="549583171195154919">"Xa"</item>
     <item msgid="5619034257768161024">"Trung bình"</item>
-    <item msgid="3840999588443167001">"Đóng"</item>
+    <item msgid="3840999588443167001">"Gần"</item>
   </string-array>
     <string name="pref_default_zoom_dialogtitle" msgid="6095974367125109021">"Thu phóng mặc định"</string>
-    <string name="pref_content_load_page" msgid="2219810141690955452">"Mở các trang trong chế độ xem tổng quan"</string>
+    <string name="pref_content_load_page" msgid="2219810141690955452">"Mở trang trong tổng quan"</string>
     <string name="pref_content_load_page_summary" msgid="9168803276420332955">"Hiển thị tổng quan về các trang mới mở"</string>
     <string name="pref_extras_title" msgid="7075456173747370647">"Nâng cao"</string>
     <string name="pref_extras_website_settings" msgid="67866640052455549">"Cài đặt trang web"</string>
@@ -251,7 +251,7 @@
     <string name="pref_extras_reset_default_summary" msgid="4247870778270414501">"Khôi phục cài đặt mặc định"</string>
     <string name="pref_extras_reset_default_dlg" msgid="7922814420184322450">"Hoàn nguyên cài đặt về giá trị mặc định?"</string>
     <string name="pref_development_title" msgid="3263854204533056480">"Gỡ lỗi"</string>
-    <string name="pref_default_text_encoding" msgid="5742965543955558478">"Mã hoá văn bản"</string>
+    <string name="pref_default_text_encoding" msgid="5742965543955558478">"Mã hóa văn bản"</string>
   <string-array name="pref_default_text_encoding_choices">
     <item msgid="7275223955790513818">"Latin-1 (ISO-8859-1)"</item>
     <item msgid="2456597866837587140">"Unicode (UTF-8)"</item>
@@ -260,9 +260,9 @@
     <item msgid="891615911084608570">"Tiếng Nhật (ISO-2022-JP)"</item>
     <item msgid="5589150448475151241">"Tiếng Nhật (SHIFT_JIS)"</item>
     <item msgid="7356792686950371843">"Tiếng Nhật (EUC-JP)"</item>
-    <item msgid="2193955365569270096">"Tiếng Hàn (EUC-KR)"</item>
+    <item msgid="2193955365569270096">"Tiếng Hàn (EUC-KR)"</item>
   </string-array>
-    <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Mã hoá văn bản"</string>
+    <string name="pref_default_text_encoding_dialogtitle" msgid="5508255018084978547">"Mã hóa văn bản"</string>
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Khả năng truy cập"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Kích thước văn bản"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Lab"</string>
@@ -287,7 +287,7 @@
     <string name="browserFrameFormResubmitMessage" msgid="5244059279866705254">"Trang bạn đang cố xem chứa dữ liệu đã được gửi (\"POSTDATA\"). Nếu bạn gửi lại dữ liệu, bất kỳ tác vụ nào mà biểu mẫu trên trang đã thực hiện (như tìm kiếm hoặc mua trực tuyến) sẽ được lặp lại."</string>
     <string name="loadSuspendedTitle" msgid="6453376579109644551">"Không có kết nối"</string>
     <string name="loadSuspended" msgid="3843343290039218668">"Trình duyệt không thể tải trang này vì không có kết nối internet."</string>
-    <string name="clear_history" msgid="5998307092715979619">"Xoá lịch sử"</string>
+    <string name="clear_history" msgid="5998307092715979619">"Xóa lịch sử"</string>
     <string name="browser_history" msgid="2979476257919939232">"Các trang đã truy cập gần đây"</string>
     <string name="empty_history" msgid="7013369425484218985">"Không có lịch sử trình duyệt nào."</string>
     <string name="go_home" msgid="109129207276086793">"Trang chủ"</string>
@@ -317,7 +317,7 @@
     <string name="search_the_web" msgid="6046130189241962337">"Tìm kiếm trên web"</string>
     <string name="webstorage_outofspace_notification_title" msgid="1160474608059771788">"Bộ nhớ của trình duyệt đầy"</string>
     <string name="webstorage_outofspace_notification_text" msgid="47273584426988640">"Chạm để giải phóng dung lượng."</string>
-    <string name="webstorage_clear_data_title" msgid="689484577124333977">"Xoá dữ liệu đã lưu trữ"</string>
+    <string name="webstorage_clear_data_title" msgid="689484577124333977">"Xóa dữ liệu đã lưu trữ"</string>
     <string name="webstorage_clear_data_dialog_message" msgid="6200681632891775881">"Xóa tất cả dữ liệu do trang web này lưu trữ?"</string>
     <string name="webstorage_clear_data_dialog_ok_button" msgid="6682570951259237542">"OK"</string>
     <string name="webstorage_clear_data_dialog_cancel_button" msgid="2028867751958942762">"Hủy"</string>
@@ -335,7 +335,7 @@
     <string name="geolocation_settings_page_dialog_message" msgid="8772923416296868537">"Xóa truy cập vị trí cho trang web này?"</string>
     <string name="geolocation_settings_page_dialog_ok_button" msgid="2113465477131017852">"OK"</string>
     <string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Hủy"</string>
-    <string name="website_settings_clear_all" msgid="8739804325997655980">"Xoá tất cả"</string>
+    <string name="website_settings_clear_all" msgid="8739804325997655980">"Xóa tất cả"</string>
     <string name="website_settings_clear_all_dialog_message" msgid="1551164275687475061">"Xóa tất cả dữ liệu trang web và giấy phép vị trí?"</string>
     <string name="website_settings_clear_all_dialog_ok_button" msgid="7858504776529106243">"OK"</string>
     <string name="website_settings_clear_all_dialog_cancel_button" msgid="1896757051856611674">"Hủy"</string>
@@ -360,13 +360,13 @@
     <string name="menu_share_url" msgid="5851814357333739700">"Chia sẻ"</string>
     <string name="max_tabs_warning" msgid="4122034303809457570">"Không có thêm tab nào"</string>
     <string name="instant_search_label" msgid="8769284297650716935">"Google với tính năng Instant (Labs)"</string>
-    <string name="preview" msgid="6450823514561689038">"Xem trước"</string>
+    <string name="preview" msgid="6450823514561689038">"Xem trước"</string>
     <string name="local_bookmarks" msgid="533816851415228520">"Địa phương"</string>
     <string name="ua_switcher_desktop" msgid="220097077327558435">"Yêu cầu trang web dành cho máy tính"</string>
     <string name="permission_preload_label" msgid="4856971662337877316">"Tải trước kết quả"</string>
     <string name="empty_snapshots_folder" msgid="7675378008107026013">"Không có trang nào được lưu."</string>
     <string name="remove_snapshot" msgid="1624447424544976849">"Xóa trang đã lưu"</string>
-    <string name="snapshot_go_live" msgid="1209542802541168497">"Phát hành trực tuyến"</string>
+    <string name="snapshot_go_live" msgid="1209542802541168497">"Phát trực tuyến"</string>
     <string name="accessibility_button_back" msgid="6194680634245279407">"Quay lại"</string>
     <string name="accessibility_button_forward" msgid="1236827218480658168">"Đi về phía trước"</string>
     <string name="accessibility_button_refresh" msgid="1023441396241841313">"Làm mới trang"</string>
@@ -380,7 +380,7 @@
     <string name="accessibility_button_newincognitotab" msgid="5254901889040012964">"Mở tab ẩn danh mới"</string>
     <string name="accessibility_button_clear" msgid="6943152307986161598">"Xóa văn bản nhập"</string>
     <string name="accessibility_button_uaswitch" msgid="6286804719724282339">"Chuyển đổi tác nhân của người dùng"</string>
-    <string name="accessibility_button_go" msgid="1182818872083055958">"Bắt đầu"</string>
+    <string name="accessibility_button_go" msgid="1182818872083055958">"Đến"</string>
     <string name="accessibility_button_navscreen" msgid="9142904748728713075">"Trình quản lý trang"</string>
     <string name="accessibility_button_more" msgid="3054251446394224216">"Tùy chọn khác"</string>
     <string name="accessibility_state_incognito" msgid="5786038488425202355">"Trang ẩn danh"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 75a94d6..1541eee 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -30,7 +30,7 @@
     <string name="sign_in_to" msgid="5939425800148759165">"Ngena ngemvume ku-\"<xliff:g id="HOSTNAME">%s1</xliff:g>\" \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
     <string name="username" msgid="5057566336518215922">"Igama"</string>
     <string name="password" msgid="1177138552305184404">"Iphasiwedi"</string>
-    <string name="action" msgid="183105774472071343">"Ngena ngemvume"</string>
+    <string name="action" msgid="183105774472071343">"Ngena"</string>
     <string name="bookmarks_search" msgid="5229596268214362873">"Isiphequluli"</string>
     <string name="cancel" msgid="3017274947407233702">"Khansela"</string>
     <string name="ok" msgid="1509280796718850364">"KULUNGILE"</string>
@@ -42,7 +42,7 @@
     <string name="ssl_continue" msgid="8031515015829358457">"Qhubeka"</string>
     <string name="security_warning" msgid="6607795404322797541">"Isexwayiso sokuvikeleka"</string>
     <string name="view_certificate" msgid="1472768887529093862">"Buka isitifiketi"</string>
-    <string name="ssl_go_back" msgid="4598951822061593819">"Phindela emuva"</string>
+    <string name="ssl_go_back" msgid="4598951822061593819">"Emuva"</string>
     <string name="ssl_untrusted" msgid="7754507359360636447">"Lesi sitifiketi asiphumi embusweni othembekile."</string>
     <string name="ssl_mismatch" msgid="3809794439740523641">"Igama lale ngosi alifani negama elikusitifiketi."</string>
     <string name="ssl_expired" msgid="5739349389499575559">"Lesi sitifiketi siphelelwe yisikhathi"</string>
@@ -127,10 +127,10 @@
     <string name="pref_content_title" msgid="3834107397725342174">"Okuqukethwe ekhasini"</string>
     <string name="pref_content_load_images" msgid="2125616852957377561">"Hlohla izithombe"</string>
     <string name="pref_content_load_images_summary" msgid="5055874125248398584">"Bonisa izithombe emakhasini lewebhu"</string>
-    <string name="pref_content_block_popups" msgid="4158524847764470895">"Vimba okuzivulakelayo"</string>
+    <string name="pref_content_block_popups" msgid="4158524847764470895">"Vimba ama-pop-ups"</string>
     <string name="pref_content_javascript" msgid="4570972030299516843">"Vumela i-JavaScript"</string>
     <string name="pref_content_open_in_background" msgid="824123779725118663">"Vula emuva"</string>
-    <string name="pref_content_plugins" msgid="7231944644794301582">"Nika amandla intshutheko"</string>
+    <string name="pref_content_plugins" msgid="7231944644794301582">"Vumela ama-plugin"</string>
   <string-array name="pref_content_plugins_choices">
     <item msgid="6745108155096660725">"Njalo ivuliwe"</item>
     <item msgid="2484126708670016519">"Kuyadingeka kakhulu"</item>
@@ -155,15 +155,15 @@
     <string name="pref_general_autofill_title" msgid="547881256865816858">"Ukufaka-okuzenzakalelayo"</string>
     <string name="pref_autofill_enabled" msgid="1015751713312396713">"Ukufaka-okuzenzakalelayo kweFomu"</string>
     <string name="pref_autofill_enabled_summary" msgid="7659954073892471496">"Gcwalisa amafomu ewebhu ngokuthinta kanye"</string>
-    <string name="pref_autofill_profile_editor" msgid="8934844472922113166">"Ubhalo ozenzakalelayo"</string>
+    <string name="pref_autofill_profile_editor" msgid="8934844472922113166">"Umbhalo ofakwe ngokuzenzakalelayo"</string>
     <string name="pref_autofill_profile_editor_summary" msgid="4864447251676856190">"Setha ukuzilayisha kombhalo emafomini ewebhu"</string>
     <string name="pref_autologin_title" msgid="4421187193809267096">"Ukusayinda ku-Google okuzenzakalelayo"</string>
     <string name="pref_autologin_progress" msgid="8333244467048833461">"Ingena ngemvume kumasayithi e-Google isebenzisa i-<xliff:g id="ID_1">%s</xliff:g>"</string>
     <string name="autologin_bar_text" msgid="3684581827167173371">"Ngena ngemvume njengo"</string>
-    <string name="autologin_bar_login_text" msgid="3336615320510851879">"Ngena ngemvume"</string>
+    <string name="autologin_bar_login_text" msgid="3336615320510851879">"Ngena"</string>
     <string name="autologin_bar_hide_text" msgid="3629355974385859580">"Fihla"</string>
     <string name="autologin_bar_error" msgid="7470001207395920811">"Ayikwazanga ukungena ngemvume."</string>
-    <string name="autofill_profile_editor_heading" msgid="4798644544927738078">"Bhala umbhalo owufunayo ukuzigcwalisela aafomu ewebhu."</string>
+    <string name="autofill_profile_editor_heading" msgid="4798644544927738078">"Bhala umbhalo owufunayo ukuzigcwalisela amafomu ewebhu."</string>
     <string name="autofill_profile_editor_name" msgid="8566130291459685955">"Igama eliphelele:"</string>
     <string name="autofill_profile_editor_email_address" msgid="7967585896612797173">"I-imeyili:"</string>
     <string name="autofill_profile_editor_company_name" msgid="2813443159949210417">"Igama lenkampani:"</string>
@@ -182,7 +182,7 @@
     <string name="autofill_profile_successful_delete" msgid="1790262652460723127">"Ukuzifakekela kwamagama kususiwe."</string>
     <string name="autofill_profile_editor_delete_profile" msgid="3098369314558164153">"Susa"</string>
     <string name="autofill_setup_dialog_message" msgid="1096164985825394616">"Isiphequluli singazigcwalisela amafomu ewebhu afana nalawa. Ungathanda ukulungisa uhlelo lokuzigcwalisela umbhalo?"</string>
-    <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Ungakwazi njalo ukuthi usethe ukuzifakekela kombhalo usuka Esipheqululini &gt; Izisetho &gt; Iskrini esijwayelekile."</string>
+    <string name="autofill_setup_dialog_negative_toast" msgid="3288881675232206984">"Ungakwazi njalo ukuthi usethe ukuzifakekela kombhalo usuka Esipheqululini; Izilungiselelosetho; Iskrini esijwayelekile."</string>
     <string name="disable_autofill" msgid="8305901059849400354">"Khubaza ukufaka-okuzenzakalelayo"</string>
     <string name="pref_privacy_security_title" msgid="3480313968942160914">"Ubumfihlo nokuvikela"</string>
     <string name="pref_privacy_clear_cache" msgid="3380316479925886998">"Sula inqolobane"</string>
@@ -191,7 +191,7 @@
     <string name="pref_privacy_cookies_title" msgid="6763274282214830526">"Amakhukhi"</string>
     <string name="pref_privacy_clear_cookies" msgid="3095583579133780331">"Sula yonke idatha yekhukhi"</string>
     <string name="pref_privacy_clear_cookies_summary" msgid="6962742063990677520">"Sula wonke amakhukhi okuphequlula"</string>
-    <string name="pref_privacy_clear_cookies_dlg" msgid="1493252163164621278">"Susa wonke ama-cookie?"</string>
+    <string name="pref_privacy_clear_cookies_dlg" msgid="1493252163164621278">"Susa wonke amakhukhi?"</string>
     <string name="pref_privacy_clear_history" msgid="8723795508825198477">"Sula umlando"</string>
     <string name="pref_privacy_clear_history_summary" msgid="6868501330708940734">"Sula umlando wokuzulazula isiphequluli"</string>
     <string name="pref_privacy_clear_history_dlg" msgid="6934317391642846227">"Susa umlando wokubheka umlando?"</string>
@@ -220,13 +220,13 @@
   <string-array name="pref_text_size_choices">
     <item msgid="4952686548944739548">"Ncane"</item>
     <item msgid="1950030433642671460">"Ncane"</item>
-    <item msgid="4338347520133294584">"Kuvamile"</item>
+    <item msgid="4338347520133294584">"Jwayelekile"</item>
     <item msgid="5043128215356351184">"Okukhulu"</item>
-    <item msgid="7201512237890458902">"Kukhulu kakhulu"</item>
+    <item msgid="7201512237890458902">"Nkulu kakhulu"</item>
   </string-array>
     <string name="pref_min_font_size" msgid="8811125835817449131">"Usayizi wefonti olinganiselwe ophansi"</string>
     <string name="pref_min_font_size_value" msgid="2924708480509060209">"<xliff:g id="FONT_SIZE">%d</xliff:g>pt"</string>
-    <string name="pref_text_zoom" msgid="5171056101805125497">"Umbhalo uyakekela"</string>
+    <string name="pref_text_zoom" msgid="5171056101805125497">"Ukukekela kombhalo"</string>
     <string name="pref_zoom_on_double_tap" msgid="902786475250741795">"Sondeza ithephu ephindwe kabili"</string>
     <string name="pref_force_userscalable" msgid="5641500562399892621">"Phoqelela ukuvumela ukusondeza"</string>
     <string name="pref_force_userscalable_summary" msgid="3613242300617172230">"Shintsha isicelo sewebusayithi ukulawula indlela yokwandisa"</string>
@@ -247,9 +247,9 @@
     <string name="pref_extras_website_settings" msgid="67866640052455549">"Izilungiselelo zewebhusayithi"</string>
     <string name="pref_extras_website_settings_summary" msgid="1656771443223494406">"Izilungiselelo ezithuthukisiwe zamawebhusayithi omuntu ngamunye"</string>
     <string name="pref_extras_reset_default_title" msgid="3579760449455761762">"Setha kabusha okumisiwe"</string>
-    <string name="pref_extras_reset_default" msgid="8904000515846202110">"Setha kabusha kube okuzenzakalelayo"</string>
+    <string name="pref_extras_reset_default" msgid="8904000515846202110">"Setha kabusha kube okumisiwe"</string>
     <string name="pref_extras_reset_default_summary" msgid="4247870778270414501">"Buyisela esimweni izilungiselelo ezizenzakalelayo"</string>
-    <string name="pref_extras_reset_default_dlg" msgid="7922814420184322450">"Buyisela izisetho kokumisiwe?"</string>
+    <string name="pref_extras_reset_default_dlg" msgid="7922814420184322450">"Buyisela izilungiselelo kokumisiwe?"</string>
     <string name="pref_development_title" msgid="3263854204533056480">"Lungisa amaphutha"</string>
     <string name="pref_default_text_encoding" msgid="5742965543955558478">"Umbhalo wekhodi wokubhaliwe"</string>
   <string-array name="pref_default_text_encoding_choices">
@@ -272,7 +272,7 @@
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Sebenzisa i-Google Instant uma usebenzisa Usesho lwe-Google, ukubonisa imiphumelo njengoba uthayipha (lokhu kungakhuphula ukusetshenziswa kwedatha)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Isikrini esigcwele"</string>
     <string name="pref_lab_fullscreen_summary" msgid="7694738112219376740">"Sebenzisa imodi yesikrini esiphelele ukuze ufihle umudwa ochaza ngesimo."</string>
-    <string name="pref_data_title" msgid="7255058703417796578">"Ukuphathwa Komkhawulokudonsa"</string>
+    <string name="pref_data_title" msgid="7255058703417796578">"Ukuphathwa kwebhendiwithi"</string>
     <string name="pref_data_preload_title" msgid="4479320472980292873">"Imiphumela yosesho iyafaka"</string>
   <string-array name="pref_data_preload_choices">
     <item msgid="5180466923190095508">"Akusoze"</item>
@@ -332,7 +332,7 @@
     <string name="geolocation_settings_page_title" msgid="1745477985097536528">"Sula ukufinyelela indawo"</string>
     <string name="geolocation_settings_page_summary_allowed" msgid="9180251524290811398">"Le sayithi okwamanje ingafinyelela kundawo yakho"</string>
     <string name="geolocation_settings_page_summary_not_allowed" msgid="7941769772784366199">"Le sayithi ayikwazi okwamanje ukufinyelela kundawo yakho"</string>
-    <string name="geolocation_settings_page_dialog_message" msgid="8772923416296868537">"Susa izisetho zendawo zalewebusayithi?"</string>
+    <string name="geolocation_settings_page_dialog_message" msgid="8772923416296868537">"Susa izilungiselelo zendawo zale webusayithi?"</string>
     <string name="geolocation_settings_page_dialog_ok_button" msgid="2113465477131017852">"KULUNGILE"</string>
     <string name="geolocation_settings_page_dialog_cancel_button" msgid="7941036504673409747">"Khansela"</string>
     <string name="website_settings_clear_all" msgid="8739804325997655980">"Sula konke"</string>
@@ -352,7 +352,7 @@
     <string name="import_bookmarks_dialog_confirm_add" msgid="8942794112340838111">"Engeza amabhukimakhi akuledivayisi okwamanje bese uqalisa ukuvumelanisa amabhukimakhi nge <xliff:g id="GOOGLE_ACCOUNT">%s</xliff:g>?"</string>
     <string name="import_bookmarks_dialog_remove" msgid="5984607822851800902">"Susa amabhukimakhi"</string>
     <string name="import_bookmarks_wizard_next" msgid="7578143961884352676">"Okulandelayo"</string>
-    <string name="import_bookmarks_wizard_previous" msgid="8551440353688257031">"Okwangaphambilini"</string>
+    <string name="import_bookmarks_wizard_previous" msgid="8551440353688257031">"Okwandulele"</string>
     <string name="import_bookmarks_wizard_cancel" msgid="4936061122806506634">"Khansela"</string>
     <string name="import_bookmarks_wizard_done" msgid="1446247092194489191">"Kwenziwe"</string>
     <string name="import_bookmarks_dialog_add" msgid="1743359725294101189">"Engeza amabhukimaka e-Akhawuntini ye-Google"</string>
@@ -367,7 +367,7 @@
     <string name="empty_snapshots_folder" msgid="7675378008107026013">"Awekho amakhasi alondoloziwe."</string>
     <string name="remove_snapshot" msgid="1624447424544976849">"Susa ikhasi elilondiwe"</string>
     <string name="snapshot_go_live" msgid="1209542802541168497">"Iya bukhoma"</string>
-    <string name="accessibility_button_back" msgid="6194680634245279407">"Phindela emuva"</string>
+    <string name="accessibility_button_back" msgid="6194680634245279407">"Emuva"</string>
     <string name="accessibility_button_forward" msgid="1236827218480658168">"Iya phambili"</string>
     <string name="accessibility_button_refresh" msgid="1023441396241841313">"Vuselela ikhasi"</string>
     <string name="accessibility_button_stop" msgid="6793644120043222148">"Misa ukulayisha ikhasi"</string>
diff --git a/res/values/dimensions.xml b/res/values/dimensions.xml
index 8844f6b..d6ae6ba 100644
--- a/res/values/dimensions.xml
+++ b/res/values/dimensions.xml
@@ -27,7 +27,7 @@
     <dimen name="widgetItemMinHeight">48dip</dimen>
     <dimen name="favicon_size">16dip</dimen>
     <dimen name="favicon_padded_size">20dip</dimen>
-    <dimen name="qc_radius_start">45dip</dimen>
+    <dimen name="qc_radius_start">60dip</dimen>
     <dimen name="qc_radius_increment">70dip</dimen>
     <dimen name="qc_slop">10dip</dimen>
     <dimen name="qc_touch_offset">15dip</dimen>
diff --git a/res/xml-sw600dp/lab_preferences.xml b/res/xml-sw600dp/lab_preferences.xml
index 0edc919..a7151e0 100644
--- a/res/xml-sw600dp/lab_preferences.xml
+++ b/res/xml-sw600dp/lab_preferences.xml
@@ -21,9 +21,4 @@
         android:defaultValue="false"
         android:title="@string/pref_lab_quick_controls"
         android:summary="@string/pref_lab_quick_controls_summary" />
-    <CheckBoxPreference
-        android:key="use_instant_search"
-        android:defaultValue="false"
-        android:title="@string/pref_use_instant_search"
-        android:summary="@string/pref_use_instant_search_summary" />
 </PreferenceScreen>
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index ae5ae69..fdb34c4 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -145,6 +145,13 @@
     }
 
     private Uri getUriForFolder(long folder) {
+        BookmarkAccount account =
+                (BookmarkAccount) mAccountSpinner.getSelectedItem();
+        if (folder == mRootFolder && account != null) {
+            return BookmarksLoader.addAccount(
+                    BrowserContract.Bookmarks.CONTENT_URI_DEFAULT_FOLDER,
+                    account.accountType, account.accountName);
+        }
         return BrowserContract.Bookmarks.buildFolderUri(folder);
     }
 
@@ -437,8 +444,8 @@
             BookmarkAccount account = mAccountAdapter.getItem(i);
             if (TextUtils.equals(account.accountName, accountName)
                     && TextUtils.equals(account.accountType, accountType)) {
-                onRootFolderFound(account.rootFolderId);
                 mAccountSpinner.setSelection(i);
+                onRootFolderFound(account.rootFolderId);
                 return;
             }
         }
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index ee308f9..69063eb 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -493,11 +493,6 @@
     }
 
     @Override
-    public void registerDropdownChangeListener(DropdownChangeListener d) {
-        mNavigationBar.registerDropdownChangeListener(d);
-    }
-
-    @Override
     public void showComboView(ComboViews startingView, Bundle extras) {
         Intent intent = new Intent(mActivity, ComboViewActivity.class);
         intent.putExtra(ComboViewActivity.EXTRA_INITIAL_VIEW, startingView.name());
@@ -757,11 +752,6 @@
         final int bits = WindowManager.LayoutParams.FLAG_FULLSCREEN;
         if (enabled) {
             winParams.flags |=  bits;
-            if (mCustomView != null) {
-                mCustomView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
-            } else {
-                mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
-            }
         } else {
             winParams.flags &= ~bits;
             if (mCustomView != null) {
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index 0b8191a..2369554 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -146,10 +146,6 @@
         if (sInitialized) {
             syncSharedSettings();
         }
-
-        if (mController != null && (mSearchEngine instanceof InstantSearchEngine)) {
-             ((InstantSearchEngine) mSearchEngine).setController(mController);
-        }
     }
 
     public void startManagingSettings(WebSettings settings) {
@@ -355,9 +351,6 @@
         if (PREF_SEARCH_ENGINE.equals(key)) {
             updateSearchEngine(false);
         }
-        if (PREF_USE_INSTANT_SEARCH.equals(key)) {
-            updateSearchEngine(true);
-        }
         if (PREF_FULLSCREEN.equals(key)) {
             if (mController.getUi() != null) {
                 mController.getUi().setFullscreen(useFullscreen());
@@ -426,10 +419,6 @@
                 mSearchEngine.close();
              }
             mSearchEngine = SearchEngines.get(mContext, searchEngineName);
-
-             if (mController != null && (mSearchEngine instanceof InstantSearchEngine)) {
-                 ((InstantSearchEngine) mSearchEngine).setController(mController);
-             }
          }
     }
 
@@ -794,10 +783,6 @@
         return HomeProvider.MOST_VISITED.equals(getHomePage());
     }
 
-    public boolean useInstantSearch() {
-        return mPrefs.getBoolean(PREF_USE_INSTANT_SEARCH, false);
-    }
-
     public boolean useFullscreen() {
         return mPrefs.getBoolean(PREF_FULLSCREEN, false);
     }
diff --git a/src/com/android/browser/ComboViewActivity.java b/src/com/android/browser/ComboViewActivity.java
index ae49898..2d382cb 100644
--- a/src/com/android/browser/ComboViewActivity.java
+++ b/src/com/android/browser/ComboViewActivity.java
@@ -63,6 +63,7 @@
         if (BrowserActivity.isTablet(this)) {
             bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME
                     | ActionBar.DISPLAY_USE_LOGO);
+            bar.setHomeButtonEnabled(true);
         } else {
             bar.setDisplayOptions(0);
         }
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 9710669..8238d77 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -80,7 +80,6 @@
 
 import com.android.browser.IntentHandler.UrlData;
 import com.android.browser.UI.ComboViews;
-import com.android.browser.UI.DropdownChangeListener;
 import com.android.browser.provider.BrowserProvider;
 import com.android.browser.provider.BrowserProvider2.Thumbnails;
 import com.android.browser.provider.SnapshotProvider.Snapshots;
@@ -208,8 +207,6 @@
      */
     private boolean mExtendedMenuOpen;
 
-    private boolean mInLoad;
-
     private boolean mActivityPaused = true;
     private boolean mLoadStopped;
 
@@ -875,17 +872,16 @@
             // when the main frame completes loading regardless of the state of
             // any sub frames so calls to onProgressChanges may continue after
             // onPageFinished has executed)
-            if (mInLoad) {
-                mInLoad = false;
-                updateInLoadMenuItems(mCachedMenu);
+            if (tab.inPageLoad()) {
+                updateInLoadMenuItems(mCachedMenu, tab);
             }
         } else {
-            if (!mInLoad) {
+            if (!tab.inPageLoad()) {
                 // onPageFinished may have already been called but a subframe is
-                // still loading and updating the progress. Reset mInLoad and
+                // still loading
+                // updating the progress and
                 // update the menu items.
-                mInLoad = true;
-                updateInLoadMenuItems(mCachedMenu);
+                updateInLoadMenuItems(mCachedMenu, tab);
             }
         }
         mUi.onProgressChanged(tab);
@@ -1424,12 +1420,12 @@
      * we must manually update the state of the stop/reload menu
      * item
      */
-    private void updateInLoadMenuItems(Menu menu) {
+    private void updateInLoadMenuItems(Menu menu, Tab tab) {
         if (menu == null) {
             return;
         }
         MenuItem dest = menu.findItem(R.id.stop_reload_menu_id);
-        MenuItem src = mInLoad ?
+        MenuItem src = ((tab != null) && tab.inPageLoad()) ?
                 menu.findItem(R.id.stop_menu_id):
                 menu.findItem(R.id.reload_menu_id);
         if (src != null) {
@@ -1439,7 +1435,7 @@
     }
 
     boolean onPrepareOptionsMenu(Menu menu) {
-        updateInLoadMenuItems(menu);
+        updateInLoadMenuItems(menu, getCurrentTab());
         // hold on to the menu reference here; it is used by the page callbacks
         // to update the menu based on loading state
         mCachedMenu = menu;
@@ -1490,7 +1486,8 @@
         final MenuItem forward = menu.findItem(R.id.forward_menu_id);
         forward.setEnabled(canGoForward);
 
-        final MenuItem source = menu.findItem(mInLoad ? R.id.stop_menu_id : R.id.reload_menu_id);
+        final MenuItem source = menu.findItem(isInLoad() ? R.id.stop_menu_id
+                : R.id.reload_menu_id);
         final MenuItem dest = menu.findItem(R.id.stop_reload_menu_id);
         if (source != null && dest != null) {
             dest.setTitle(source.getTitle());
@@ -1573,7 +1570,7 @@
                 break;
 
             case R.id.stop_reload_menu_id:
-                if (mInLoad) {
+                if (isInLoad()) {
                     stopLoading();
                 } else {
                     getCurrentTopWebView().reload();
@@ -1624,12 +1621,20 @@
                         @Override
                         protected Long doInBackground(Tab... params) {
                             Uri result = cr.insert(Snapshots.CONTENT_URI, values);
+                            if (result == null) {
+                                return null;
+                            }
                             long id = ContentUris.parseId(result);
                             return id;
                         }
 
                         @Override
                         protected void onPostExecute(Long id) {
+                            if (id == null) {
+                                Toast.makeText(mActivity, R.string.snapshot_failed,
+                                        Toast.LENGTH_SHORT).show();
+                                return;
+                            }
                             Bundle b = new Bundle();
                             b.putLong(BrowserSnapshotPage.EXTRA_ANIMATE_ID, id);
                             mUi.showComboView(ComboViews.Snapshots, b);
@@ -1784,7 +1789,7 @@
                     // Switching the menu back to icon view, so show the
                     // title bar once again.
                     mExtendedMenuOpen = false;
-                    mUi.onExtendedMenuClosed(mInLoad);
+                    mUi.onExtendedMenuClosed(isInLoad());
                 }
             }
         } else {
@@ -1799,11 +1804,11 @@
 
     public void onOptionsMenuClosed(Menu menu) {
         mOptionsMenuOpen = false;
-        mUi.onOptionsMenuClosed(mInLoad);
+        mUi.onOptionsMenuClosed(isInLoad());
     }
 
     public void onContextMenuClosed(Menu menu) {
-        mUi.onContextMenuClosed(menu, mInLoad);
+        mUi.onContextMenuClosed(menu, isInLoad());
     }
 
     // Helper method for getting the top window.
@@ -1866,12 +1871,13 @@
      */
     public void onActionModeFinished(ActionMode mode) {
         if (!isInCustomActionMode()) return;
-        mUi.onActionModeFinished(mInLoad);
+        mUi.onActionModeFinished(isInLoad());
         mActionMode = null;
     }
 
     boolean isInLoad() {
-        return mInLoad;
+        final Tab tab = getCurrentTab();
+        return (tab != null) && tab.inPageLoad();
     }
 
     // bookmark handling
@@ -2216,7 +2222,10 @@
         removeSubWindow(tab);
         // dismiss the subwindow. This will destroy the WebView.
         tab.dismissSubWindow();
-        getCurrentTopWebView().requestFocus();
+        WebView wv = getCurrentTopWebView();
+        if (wv != null) {
+            wv.requestFocus();
+        }
     }
 
     @Override
@@ -2736,11 +2745,6 @@
         mActivity.startActivityForResult(intent, AUTOFILL_SETUP);
     }
 
-    @Override
-    public void registerDropdownChangeListener(DropdownChangeListener d) {
-        mUi.registerDropdownChangeListener(d);
-    }
-
     public boolean onSearchRequested() {
         mUi.editUrl(false);
         return true;
diff --git a/src/com/android/browser/DownloadHandler.java b/src/com/android/browser/DownloadHandler.java
index 17ad320..6e2c786 100644
--- a/src/com/android/browser/DownloadHandler.java
+++ b/src/com/android/browser/DownloadHandler.java
@@ -67,6 +67,7 @@
             //     that matches.
             Intent intent = new Intent(Intent.ACTION_VIEW);
             intent.setDataAndType(Uri.parse(url), mimetype);
+            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             ResolveInfo info = activity.getPackageManager().resolveActivity(intent,
                     PackageManager.MATCH_DEFAULT_ONLY);
             if (info != null) {
diff --git a/src/com/android/browser/InstantSearchEngine.java b/src/com/android/browser/InstantSearchEngine.java
deleted file mode 100644
index 7176c0a..0000000
--- a/src/com/android/browser/InstantSearchEngine.java
+++ /dev/null
@@ -1,430 +0,0 @@
-/*
- * 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.
- */
-package com.android.browser;
-
-import com.android.browser.Controller;
-import com.android.browser.R;
-import com.android.browser.UI.DropdownChangeListener;
-import com.android.browser.provider.BrowserProvider;
-import com.android.browser.search.SearchEngine;
-
-import android.app.SearchManager;
-import android.content.Context;
-import android.database.AbstractCursor;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.LruCache;
-import android.webkit.SearchBox;
-import android.webkit.WebView;
-
-import java.util.Collections;
-import java.util.List;
-
-public class InstantSearchEngine implements SearchEngine, DropdownChangeListener {
-    private static final String TAG = "Browser.InstantSearchEngine";
-    private static final boolean DBG = false;
-
-    private Controller mController;
-    private SearchBox mSearchBox;
-    private final BrowserSearchboxListener mListener = new BrowserSearchboxListener();
-    private int mHeight;
-
-    private String mInstantBaseUrl;
-    private final Context mContext;
-    // Used for startSearch( ) calls if for some reason instant
-    // is off, or no searchbox is present.
-    private final SearchEngine mWrapped;
-
-    public InstantSearchEngine(Context context, SearchEngine wrapped) {
-        mContext = context.getApplicationContext();
-        mWrapped = wrapped;
-    }
-
-    public void setController(Controller controller) {
-        mController = controller;
-    }
-
-    @Override
-    public String getName() {
-        return SearchEngine.GOOGLE;
-    }
-
-    @Override
-    public CharSequence getLabel() {
-        return mContext.getResources().getString(R.string.instant_search_label);
-    }
-
-    @Override
-    public void startSearch(Context context, String query, Bundle appData, String extraData) {
-        if (DBG) Log.d(TAG, "startSearch(" + query + ")");
-
-        switchSearchboxIfNeeded();
-
-        // If for some reason we are in a bad state, ensure that the
-        // user gets default search results at the very least.
-        if (mSearchBox == null || !isInstantPage()) {
-            mWrapped.startSearch(context, query, appData, extraData);
-            return;
-        }
-
-        mSearchBox.setQuery(query);
-        mSearchBox.setVerbatim(true);
-        mSearchBox.onsubmit(null);
-    }
-
-    private final class BrowserSearchboxListener extends SearchBox.SearchBoxListener {
-        /*
-         * The maximum number of out of order suggestions we accept
-         * before giving up the wait.
-         */
-        private static final int MAX_OUT_OF_ORDER = 5;
-
-        /*
-         * We wait for suggestions in increments of 600ms. This is primarily to
-         * guard against suggestions arriving out of order.
-         */
-        private static final int WAIT_INCREMENT_MS = 600;
-
-        /*
-         * A cache of suggestions received, keyed by the queries they were
-         * received for.
-         */
-        private final LruCache<String, List<String>> mSuggestions =
-                new LruCache<String, List<String>>(20);
-
-        /*
-         * The last set of suggestions received. We use this reduce UI flicker
-         * in case there is a delay in recieving suggestions.
-         */
-        private List<String> mLatestSuggestion = Collections.emptyList();
-
-        @Override
-        public synchronized void onSuggestionsReceived(String query, List<String> suggestions) {
-            if (DBG) Log.d(TAG, "onSuggestionsReceived(" + query + ")");
-
-            if (!TextUtils.isEmpty(query)) {
-                mSuggestions.put(query, suggestions);
-                mLatestSuggestion = suggestions;
-            }
-
-            notifyAll();
-        }
-
-        public synchronized List<String> tryWaitForSuggestions(String query) {
-            if (DBG) Log.d(TAG, "tryWait(" + query + ")");
-
-            int numWaitReturns = 0;
-
-            // This slightly unusual waiting construct is used to safeguard
-            // to some extent against suggestions arriving out of order. We
-            // wait for upto 5 notifyAll( ) calls to check if we received
-            // suggestions for a given query.
-            while (mSuggestions.get(query) == null)  {
-                try {
-                    wait(WAIT_INCREMENT_MS);
-                    ++numWaitReturns;
-                    if (numWaitReturns > MAX_OUT_OF_ORDER) {
-                        // We've waited too long for suggestions to be returned.
-                        // return the last available suggestion.
-                        break;
-                    }
-                } catch (InterruptedException e) {
-                    return Collections.emptyList();
-                }
-            }
-
-            List<String> suggestions = mSuggestions.get(query);
-            if (suggestions == null) {
-                return mLatestSuggestion;
-            }
-
-            return suggestions;
-        }
-
-        public synchronized void clear() {
-            mSuggestions.evictAll();
-        }
-    }
-
-    private WebView getCurrentWebview() {
-        if (mController != null) {
-            return mController.getTabControl().getCurrentTopWebView();
-        }
-
-        return null;
-    }
-
-    /**
-     * Attaches the searchbox to the right browser page, i.e, the currently
-     * visible tab.
-     */
-    private void switchSearchboxIfNeeded() {
-        final WebView current = getCurrentWebview();
-        if (current == null) {
-            return;
-        }
-
-        final SearchBox searchBox = current.getSearchBox();
-        if (searchBox != mSearchBox) {
-            if (mSearchBox != null) {
-                mSearchBox.removeSearchBoxListener(mListener);
-                mListener.clear();
-            }
-            mSearchBox = searchBox;
-            if (mSearchBox != null) {
-                mSearchBox.addSearchBoxListener(mListener);
-            }
-        }
-    }
-
-    private boolean isInstantPage() {
-        final WebView current = getCurrentWebview();
-        if (current == null) {
-            return false;
-        }
-
-        final String currentUrl = mController.getCurrentTab().getUrl();
-
-        if (currentUrl != null) {
-            Uri uri = Uri.parse(currentUrl);
-            final String host = uri.getHost();
-            final String path = uri.getPath();
-
-            // Is there a utility class that does this ?
-            if (path != null && host != null) {
-                return host.startsWith("www.google.") &&
-                        (path.startsWith("/search") || path.startsWith("/webhp"));
-            }
-            return false;
-        }
-
-        return false;
-    }
-
-    private void loadInstantPage() {
-        mController.getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                final WebView current = getCurrentWebview();
-                if (current != null) {
-                    current.loadUrl(getInstantBaseUrl());
-                }
-            }
-        });
-    }
-
-    /**
-     * Queries for a given search term and returns a cursor containing
-     * suggestions ordered by best match.
-     */
-    @Override
-    public Cursor getSuggestions(Context context, String query) {
-        if (DBG) Log.d(TAG, "getSuggestions(" + query + ")");
-        if (query == null) {
-            return null;
-        }
-
-        if (!isInstantPage()) {
-            loadInstantPage();
-        }
-
-        switchSearchboxIfNeeded();
-
-        mController.registerDropdownChangeListener(this);
-
-        if (mSearchBox == null) {
-            return mWrapped.getSuggestions(context, query);
-        }
-
-        mSearchBox.setDimensions(0, 0, 0, mHeight);
-        mSearchBox.onresize(null);
-
-        if (TextUtils.isEmpty(query)) {
-            // To force the SRP to render an empty (no results) page.
-            mSearchBox.setVerbatim(true);
-        } else {
-            mSearchBox.setVerbatim(false);
-        }
-        mSearchBox.setQuery(query);
-        mSearchBox.onchange(null);
-
-        // Don't bother waiting for suggestions for an empty query. We still
-        // set the query so that the SRP clears itself.
-        if (TextUtils.isEmpty(query)) {
-            return new SuggestionsCursor(Collections.<String>emptyList());
-        } else {
-            return new SuggestionsCursor(mListener.tryWaitForSuggestions(query));
-        }
-    }
-
-    @Override
-    public boolean supportsSuggestions() {
-        return true;
-    }
-
-    @Override
-    public void close() {
-        if (mController != null) {
-            mController.registerDropdownChangeListener(null);
-        }
-        if (mSearchBox != null) {
-            mSearchBox.removeSearchBoxListener(mListener);
-        }
-        mListener.clear();
-        mWrapped.close();
-    }
-
-    @Override
-    public boolean supportsVoiceSearch() {
-        return false;
-    }
-
-    @Override
-    public String toString() {
-        return "InstantSearchEngine {" + hashCode() + "}";
-    }
-
-    @Override
-    public boolean wantsEmptyQuery() {
-        return true;
-    }
-
-    private int rescaleHeight(int height) {
-        final WebView current = getCurrentWebview();
-        if (current == null) {
-            return 0;
-        }
-
-        final float scale = current.getScale();
-        if (scale != 0) {
-            return (int) (height / scale);
-        }
-
-        return height;
-    }
-
-    @Override
-    public void onNewDropdownDimensions(int height) {
-        final int rescaledHeight = rescaleHeight(height);
-
-        if (rescaledHeight != mHeight) {
-            mHeight = rescaledHeight;
-            if (mSearchBox != null) {
-                mSearchBox.setDimensions(0, 0, 0, rescaledHeight);
-                mSearchBox.onresize(null);
-            }
-        }
-    }
-
-    private String getInstantBaseUrl() {
-        if (mInstantBaseUrl == null) {
-            String url = mContext.getResources().getString(R.string.instant_base);
-            if (url.indexOf("{CID}") != -1) {
-                url = url.replace("{CID}",
-                        BrowserProvider.getClientId(mContext.getContentResolver()));
-            }
-            mInstantBaseUrl = url;
-        }
-
-        return mInstantBaseUrl;
-    }
-
-    // Indices of the columns in the below arrays.
-    private static final int COLUMN_INDEX_ID = 0;
-    private static final int COLUMN_INDEX_QUERY = 1;
-    private static final int COLUMN_INDEX_ICON = 2;
-    private static final int COLUMN_INDEX_TEXT_1 = 3;
-
-    private static final String[] COLUMNS_WITHOUT_DESCRIPTION = new String[] {
-        "_id",
-        SearchManager.SUGGEST_COLUMN_QUERY,
-        SearchManager.SUGGEST_COLUMN_ICON_1,
-        SearchManager.SUGGEST_COLUMN_TEXT_1,
-    };
-
-    private static class SuggestionsCursor extends AbstractCursor {
-        private final List<String> mSuggestions;
-
-        public SuggestionsCursor(List<String> suggestions) {
-            mSuggestions = suggestions;
-        }
-
-        @Override
-        public int getCount() {
-            return mSuggestions.size();
-        }
-
-        @Override
-        public String[] getColumnNames() {
-            return COLUMNS_WITHOUT_DESCRIPTION;
-        }
-
-        private String format(String suggestion) {
-            if (TextUtils.isEmpty(suggestion)) {
-                return "";
-            }
-            return suggestion;
-        }
-
-        @Override
-        public String getString(int column) {
-            if (mPos >= 0 && mPos < mSuggestions.size()) {
-              if ((column == COLUMN_INDEX_QUERY) || (column == COLUMN_INDEX_TEXT_1)) {
-                  return format(mSuggestions.get(mPos));
-              } else if (column == COLUMN_INDEX_ICON) {
-                  return String.valueOf(R.drawable.magnifying_glass);
-              }
-            }
-            return null;
-        }
-
-        @Override
-        public double getDouble(int column) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public float getFloat(int column) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public int getInt(int column) {
-            if (column == COLUMN_INDEX_ID) {
-                return mPos;
-            }
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public long getLong(int column) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public short getShort(int column) {
-          throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public boolean isNull(int column) {
-            throw new UnsupportedOperationException();
-        }
-    }
-}
diff --git a/src/com/android/browser/NavTabScroller.java b/src/com/android/browser/NavTabScroller.java
index 0bfe185..c940bf5 100644
--- a/src/com/android/browser/NavTabScroller.java
+++ b/src/com/android/browser/NavTabScroller.java
@@ -241,6 +241,7 @@
     void snapToSelected(int pos, boolean smooth) {
         if (pos < 0) return;
         View v = mContentView.getChildAt(pos);
+        if (v == null) return;
         int sx = 0;
         int sy = 0;
         if (mHorizontal) {
diff --git a/src/com/android/browser/NavTabView.java b/src/com/android/browser/NavTabView.java
index 4eec702..b15e828 100644
--- a/src/com/android/browser/NavTabView.java
+++ b/src/com/android/browser/NavTabView.java
@@ -74,11 +74,6 @@
         return v == mImage;
     }
 
-    protected void setHighlighted(boolean highlighted) {
-        if (highlighted == mHighlighted) return;
-        mHighlighted = highlighted;
-    }
-
     private void setTitle() {
         if (mTab == null) return;
         if (mHighlighted) {
@@ -112,23 +107,18 @@
         return mHighlighted;
     }
 
-    protected void setWebView(WebView w) {
-        mContent.addView(w, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
-    }
-
     protected void setWebView(Tab tab) {
         mTab = tab;
         setTitle();
         Bitmap image = tab.getScreenshot();
         if (image != null) {
             mImage.setImageBitmap(image);
+            if (tab != null) {
+                mImage.setContentDescription(tab.getTitle());
+            }
         }
     }
 
-    protected void hideTitle() {
-        mTitleBar.setVisibility(View.INVISIBLE);
-    }
-
     @Override
     public void setOnClickListener(OnClickListener listener) {
         mClickListener = listener;
diff --git a/src/com/android/browser/NavigationBarBase.java b/src/com/android/browser/NavigationBarBase.java
index bfdd9a0..128304c 100644
--- a/src/com/android/browser/NavigationBarBase.java
+++ b/src/com/android/browser/NavigationBarBase.java
@@ -22,23 +22,24 @@
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.speech.RecognizerResultsIntent;
+import android.text.Editable;
+import android.text.TextWatcher;
 import android.util.AttributeSet;
 import android.view.KeyEvent;
 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 com.android.browser.UI.DropdownChangeListener;
 import com.android.browser.UrlInputView.UrlInputListener;
-import com.android.browser.autocomplete.SuggestedTextController.TextChangeWatcher;
 
 import java.util.List;
 
 public class NavigationBarBase extends LinearLayout implements
         OnClickListener, UrlInputListener, OnFocusChangeListener,
-        TextChangeWatcher {
+        TextWatcher {
 
     protected BaseUi mBaseUi;
     protected TitleBar mTitleBar;
@@ -70,7 +71,7 @@
         mUrlInput.setUrlInputListener(this);
         mUrlInput.setOnFocusChangeListener(this);
         mUrlInput.setSelectAllOnFocus(true);
-        mUrlInput.addQueryTextWatcher(this);
+        mUrlInput.addTextChangedListener(this);
     }
 
     public void setTitleBar(TitleBar titleBar) {
@@ -144,16 +145,6 @@
         }
     }
 
-    // UrlInput text watcher
-
-    @Override
-    public void onTextChanged(String newText) {
-        if (mUrlInput.hasFocus()) {
-            // clear voice mode when user types
-            setInVoiceMode(false, null);
-        }
-    }
-
     // voicesearch
 
     public void setInVoiceMode(boolean voicemode, List<String> voiceResults) {
@@ -166,7 +157,7 @@
     }
 
     void clearCompletions() {
-        mUrlInput.setSuggestedText(null);
+        mUrlInput.dismissDropDown();
     }
 
  // UrlInputListener implementation
@@ -177,7 +168,10 @@
      */
     @Override
     public void onAction(String text, String extra, String source) {
-        mUiController.getCurrentTopWebView().requestFocus();
+        WebView currentTopWebView = mUiController.getCurrentTopWebView();
+        if (currentTopWebView != null) {
+            currentTopWebView.requestFocus();
+        }
         if (UrlInputView.TYPED.equals(source)) {
             String url = UrlUtils.smartUrlFilter(text, false);
             Tab t = mBaseUi.getActiveTab();
@@ -250,10 +244,6 @@
         return super.dispatchKeyEventPreIme(evt);
     }
 
-    void registerDropdownChangeListener(DropdownChangeListener d) {
-        mUrlInput.registerDropdownChangeListener(d);
-    }
-
     /**
      * called from the Ui when the user wants to edit
      * @param clearInput clear the input field
@@ -287,4 +277,17 @@
     public void onTabDataChanged(Tab tab) {
     }
 
+    @Override
+    public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
+
+    @Override
+    public void onTextChanged(CharSequence s, int start, int before, int count) {
+        if (mUrlInput.hasFocus()) {
+            // clear voice mode when user types
+            setInVoiceMode(false, null);
+        }
+    }
+
+    @Override
+    public void afterTextChanged(Editable s) { }
 }
diff --git a/src/com/android/browser/NavigationBarPhone.java b/src/com/android/browser/NavigationBarPhone.java
index 2e206fb..60b228d 100644
--- a/src/com/android/browser/NavigationBarPhone.java
+++ b/src/com/android/browser/NavigationBarPhone.java
@@ -213,6 +213,7 @@
             if (hasFocus && !mUrlInput.getText().toString().equals(mUrlInput.getTag())) {
                 // only change text if different
                 mUrlInput.setText((String) mUrlInput.getTag(), false);
+                mUrlInput.selectAll();
             } else {
                 setDisplayTitle(mUrlInput.getText().toString());
             }
diff --git a/src/com/android/browser/NavigationBarTablet.java b/src/com/android/browser/NavigationBarTablet.java
index ef29a49..04f372a 100644
--- a/src/com/android/browser/NavigationBarTablet.java
+++ b/src/com/android/browser/NavigationBarTablet.java
@@ -195,7 +195,7 @@
     }
 
     private void clearOrClose() {
-        if (TextUtils.isEmpty(mUrlInput.getUserText())) {
+        if (TextUtils.isEmpty(mUrlInput.getText())) {
             // close
             mUrlInput.clearFocus();
         } else {
@@ -278,7 +278,7 @@
     }
 
     protected void updateSearchMode(boolean userEdited) {
-        setSearchMode(!userEdited || TextUtils.isEmpty(mUrlInput.getUserText()));
+        setSearchMode(!userEdited || TextUtils.isEmpty(mUrlInput.getText()));
     }
 
     @Override
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index 37d0b34..4da0668 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -194,6 +194,10 @@
 
     @Override
     public void updateMenuState(Tab tab, Menu menu) {
+        MenuItem bm = menu.findItem(R.id.bookmarks_menu_id);
+        if (bm != null) {
+            bm.setVisible(!showingNavScreen());
+        }
         MenuItem abm = menu.findItem(R.id.add_bookmark_menu_id);
         if (abm != null) {
             abm.setVisible((tab != null) && !tab.isSnapshot() && !showingNavScreen());
diff --git a/src/com/android/browser/PieControlPhone.java b/src/com/android/browser/PieControlPhone.java
index f12c49a..2b6a3c5 100644
--- a/src/com/android/browser/PieControlPhone.java
+++ b/src/com/android/browser/PieControlPhone.java
@@ -24,6 +24,7 @@
 import android.widget.PopupMenu;
 import android.widget.PopupMenu.OnMenuItemClickListener;
 
+import com.android.browser.UI.ComboViews;
 import com.android.browser.view.PieItem;
 import com.android.browser.view.PieMenu.PieView.OnLayoutListener;
 import com.android.browser.view.PieStackView;
@@ -40,6 +41,8 @@
     private PieItem mUrl;
     private PieItem mShowTabs;
     private PieItem mOptions;
+    private PieItem mNewTab;
+    private PieItem mBookmarks;
     private TabAdapter mTabAdapter;
     private PopupMenu mPopup;
 
@@ -67,10 +70,14 @@
                 1);
 
         // level 1
+        mNewTab = makeItem(R.drawable.ic_new_window_holo_dark, 1);
+        mBookmarks = makeItem(R.drawable.ic_bookmarks_holo_dark, 1);
+        mPie.addItem(mNewTab);
         mPie.addItem(mShowTabs);
         mPie.addItem(mUrl);
+        mPie.addItem(mBookmarks);
         mPie.addItem(mOptions);
-        setClickListener(this, mUrl, mShowTabs, mOptions);
+        setClickListener(this, mUrl, mShowTabs, mOptions, mNewTab, mBookmarks);
         mPopup = new PopupMenu(mActivity, mUi.getTitleBar());
         Menu menu = mPopup.getMenu();
         mPopup.getMenuInflater().inflate(R.menu.browser, menu);
@@ -105,6 +112,11 @@
             mUi.showNavScreen();
         } else if (mOptions.getView() == v) {
             showMenu();
+        } else if (mNewTab.getView() == v) {
+            mUiController.openTabToHomePage();
+            mUi.editUrl(false);
+        } else if (mBookmarks.getView() == v) {
+            mUiController.bookmarksOrHistoryPicker(ComboViews.Bookmarks);
         }
     }
 
diff --git a/src/com/android/browser/PreferenceKeys.java b/src/com/android/browser/PreferenceKeys.java
index 15ccfe5..ecab008 100644
--- a/src/com/android/browser/PreferenceKeys.java
+++ b/src/com/android/browser/PreferenceKeys.java
@@ -81,7 +81,6 @@
     // Keys for lab_preferences.xml
     // ----------------------
     static final String PREF_ENABLE_QUICK_CONTROLS = "enable_quick_controls";
-    static final String PREF_USE_INSTANT_SEARCH = "use_instant_search";
     static final String PREF_FULLSCREEN = "fullscreen";
 
     // ----------------------
diff --git a/src/com/android/browser/SuggestionsAdapter.java b/src/com/android/browser/SuggestionsAdapter.java
index ca3754c..7400b5d 100644
--- a/src/com/android/browser/SuggestionsAdapter.java
+++ b/src/com/android/browser/SuggestionsAdapter.java
@@ -563,10 +563,6 @@
 
     }
 
-    private boolean useInstant() {
-        return mSettings.useInstantSearch();
-    }
-
     public void clearCache() {
         mFilterResults = null;
         mSuggestResults = null;
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index dd97960..0abc86b 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -619,7 +619,6 @@
                 LogTag.logPageFinishedLoading(
                         url, SystemClock.uptimeMillis() - mLoadStartTime);
             }
-            mInPageLoad = false;
             syncCurrentState(view, url);
             mWebViewController.onPageFinished(Tab.this);
         }
@@ -1044,6 +1043,9 @@
         @Override
         public void onProgressChanged(WebView view, int newProgress) {
             mPageLoadProgress = newProgress;
+            if (newProgress == 100) {
+                mInPageLoad = false;
+            }
             mWebViewController.onProgressChanged(Tab.this);
         }
 
diff --git a/src/com/android/browser/UI.java b/src/com/android/browser/UI.java
index a9cbd7b..2bd3754 100644
--- a/src/com/android/browser/UI.java
+++ b/src/com/android/browser/UI.java
@@ -140,11 +140,6 @@
 
     boolean dispatchKey(int code, KeyEvent event);
 
-    public static interface DropdownChangeListener {
-        void onNewDropdownDimensions(int height);
-    }
-    void registerDropdownChangeListener(DropdownChangeListener d);
-
     void showAutoLogin(Tab tab);
 
     void hideAutoLogin(Tab tab);
diff --git a/src/com/android/browser/UiController.java b/src/com/android/browser/UiController.java
index 9b48c46..e7a8953 100644
--- a/src/com/android/browser/UiController.java
+++ b/src/com/android/browser/UiController.java
@@ -23,7 +23,6 @@
 import android.webkit.WebView;
 
 import com.android.browser.UI.ComboViews;
-import com.android.browser.UI.DropdownChangeListener;
 
 import java.util.List;
 
@@ -92,8 +91,6 @@
 
     void updateMenuState(Tab tab, Menu menu);
 
-    void registerDropdownChangeListener(DropdownChangeListener d);
-
     boolean onOptionsItemSelected(MenuItem item);
 
     SnapshotTab createNewSnapshotTab(long snapshotId, boolean setActive);
diff --git a/src/com/android/browser/UrlBarAutoShowManager.java b/src/com/android/browser/UrlBarAutoShowManager.java
index 294115e..9f7827b 100644
--- a/src/com/android/browser/UrlBarAutoShowManager.java
+++ b/src/com/android/browser/UrlBarAutoShowManager.java
@@ -71,19 +71,17 @@
     @Override
     public void onScrollChanged(int l, int t, int oldl, int oldt) {
         mLastScrollTime = SystemClock.uptimeMillis();
-        if (t != oldt) {
-            mIsScrolling = true;
-            if (t != 0) {
-                // If it is showing, extend it
-                if (mUi.isTitleBarShowing()) {
-                    long remaining = mLastScrollTime - mTriggeredTime;
-                    remaining = Math.max(BaseUi.HIDE_TITLEBAR_DELAY - remaining,
-                            SCROLL_TIMEOUT_DURATION);
-                    mUi.showTitleBarForDuration(remaining);
-                }
-            } else {
-                mUi.suggestHideTitleBar();
+        mIsScrolling = true;
+        if (t != 0) {
+            // If it is showing, extend it
+            if (mUi.isTitleBarShowing()) {
+                long remaining = mLastScrollTime - mTriggeredTime;
+                remaining = Math.max(BaseUi.HIDE_TITLEBAR_DELAY - remaining,
+                        SCROLL_TIMEOUT_DURATION);
+                mUi.showTitleBarForDuration(remaining);
             }
+        } else {
+            mUi.suggestHideTitleBar();
         }
     }
 
diff --git a/src/com/android/browser/UrlInputView.java b/src/com/android/browser/UrlInputView.java
index 96ab864..3c0de30 100644
--- a/src/com/android/browser/UrlInputView.java
+++ b/src/com/android/browser/UrlInputView.java
@@ -19,27 +19,25 @@
 import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.TypedArray;
-import android.database.DataSetObserver;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
+import android.text.Editable;
 import android.text.TextUtils;
+import android.text.TextWatcher;
 import android.util.AttributeSet;
 import android.util.Patterns;
 import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemClickListener;
+import android.widget.AutoCompleteTextView;
 import android.widget.TextView;
 import android.widget.TextView.OnEditorActionListener;
 
 import com.android.browser.SuggestionsAdapter.CompletionListener;
 import com.android.browser.SuggestionsAdapter.SuggestItem;
-import com.android.browser.UI.DropdownChangeListener;
-import com.android.browser.autocomplete.SuggestedTextController.TextChangeWatcher;
-import com.android.browser.autocomplete.SuggestiveAutoCompleteTextView;
 import com.android.browser.search.SearchEngine;
 import com.android.browser.search.SearchEngineInfo;
 import com.android.browser.search.SearchEngines;
@@ -51,9 +49,9 @@
  * url/search input view
  * handling suggestions
  */
-public class UrlInputView extends SuggestiveAutoCompleteTextView
+public class UrlInputView extends AutoCompleteTextView
         implements OnEditorActionListener,
-        CompletionListener, OnItemClickListener, TextChangeWatcher {
+        CompletionListener, OnItemClickListener, TextWatcher {
 
     static final String TYPED = "browser-type";
     static final String SUGGESTED = "browser-suggest";
@@ -76,7 +74,6 @@
     private boolean mLandscape;
     private boolean mIncognitoMode;
     private boolean mNeedsUpdate;
-    private DropdownChangeListener mDropdownListener;
 
     private int mState;
     private StateListener mStateListener;
@@ -113,23 +110,8 @@
         setThreshold(1);
         setOnItemClickListener(this);
         mNeedsUpdate = false;
-        mDropdownListener = null;
-        addQueryTextWatcher(this);
+        addTextChangedListener(this);
 
-        mAdapter.registerDataSetObserver(new DataSetObserver() {
-            @Override
-            public void onChanged() {
-                if (!isPopupShowing()) {
-                    return;
-                }
-                dispatchChange();
-            }
-
-            @Override
-            public void onInvalidated() {
-                dispatchChange();
-            }
-        });
         mState = StateListener.STATE_NORMAL;
     }
 
@@ -225,7 +207,7 @@
         mAdapter.setLandscapeMode(mLandscape);
         if (isPopupShowing() && (getVisibility() == View.VISIBLE)) {
             setupDropDown();
-            performFiltering(getUserText(), 0);
+            performFiltering(getText(), 0);
         }
     }
 
@@ -256,21 +238,11 @@
 
     @Override
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
-        if (BrowserSettings.getInstance().useInstantSearch() &&
-                (actionId == EditorInfo.IME_ACTION_NEXT)) {
-            // When instant is turned on AND the user chooses to complete
-            // using the tab key, then use the completion rather than the
-            // text that the user has typed.
-            finishInput(getText().toString(), null, TYPED);
-        } else {
-            finishInput(getUserText(), null, TYPED);
-        }
-
+        finishInput(getText().toString(), null, TYPED);
         return true;
     }
 
     void forceFilter() {
-        performForcedFiltering();
         showDropDown();
     }
 
@@ -365,19 +337,6 @@
         return mAdapter;
     }
 
-    private void dispatchChange() {
-        final Rect popupRect = new Rect();
-        getPopupDrawableRect(popupRect);
-
-        if (mDropdownListener != null) {
-            mDropdownListener.onNewDropdownDimensions(popupRect.height());
-        }
-    }
-
-    void registerDropdownChangeListener(DropdownChangeListener d) {
-        mDropdownListener = d;
-    }
-
     /*
      * no-op to prevent scrolling of webview when embedded titlebar
      * gets edited
@@ -388,10 +347,16 @@
     }
 
     @Override
-    public void onTextChanged(String newText) {
+    public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
+
+    @Override
+    public void onTextChanged(CharSequence s, int start, int before, int count) {
         if (StateListener.STATE_HIGHLIGHTED == mState) {
             changeState(StateListener.STATE_EDITED);
         }
     }
 
+    @Override
+    public void afterTextChanged(Editable s) { }
+
 }
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
index b4afb6f..c828df4 100644
--- a/src/com/android/browser/XLargeUi.java
+++ b/src/com/android/browser/XLargeUi.java
@@ -30,6 +30,8 @@
 import android.view.ActionMode;
 import android.view.Gravity;
 import android.view.KeyEvent;
+import android.view.Menu;
+import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
 import android.webkit.WebChromeClient.CustomViewCallback;
@@ -130,9 +132,7 @@
     @Override
     public void onResume() {
         super.onResume();
-        if (!BrowserSettings.getInstance().useInstantSearch()) {
-            mNavBar.clearCompletions();
-        }
+        mNavBar.clearCompletions();
     }
 
     @Override
@@ -147,6 +147,16 @@
         }
     }
 
+    @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        MenuItem bm = menu.findItem(R.id.bookmarks_menu_id);
+        if (bm != null) {
+            bm.setVisible(false);
+        }
+        return true;
+    }
+
+
     // WebView callbacks
 
     @Override
diff --git a/src/com/android/browser/autocomplete/SuggestedSpan.java b/src/com/android/browser/autocomplete/SuggestedSpan.java
deleted file mode 100644
index dc04cb2..0000000
--- a/src/com/android/browser/autocomplete/SuggestedSpan.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.
- */
-package com.android.browser.autocomplete;
-
-import android.os.Parcel;
-import android.text.style.ForegroundColorSpan;
-
-/**
- * Class used to mark the portion of text within {@link SuggestiveEditText} that is suggested.
- */
-class SuggestedSpan extends ForegroundColorSpan {
-
-    public SuggestedSpan(Parcel src) {
-        super(src);
-    }
-
-    public SuggestedSpan(int color) {
-        super(color);
-    }
-
-}
diff --git a/src/com/android/browser/autocomplete/SuggestedTextController.java b/src/com/android/browser/autocomplete/SuggestedTextController.java
deleted file mode 100644
index 95dfcab..0000000
--- a/src/com/android/browser/autocomplete/SuggestedTextController.java
+++ /dev/null
@@ -1,516 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-package com.android.browser.autocomplete;
-
-import com.google.common.annotations.VisibleForTesting;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.text.Editable;
-import android.text.Selection;
-import android.text.SpanWatcher;
-import android.text.Spannable;
-import android.text.Spanned;
-import android.text.TextUtils;
-import android.text.TextWatcher;
-import android.util.Log;
-import android.view.View;
-import android.widget.EditText;
-
-import java.util.ArrayList;
-
-import junit.framework.Assert;
-
-
-/**
- * The query editor can show a suggestion, grayed out following the query that the user has
- * entered so far. As the user types new characters, these should replace the grayed suggestion
- * text. This class manages this logic, displaying the suggestion when the user entered text is a
- * prefix of it, and hiding it otherwise.
- *
- * Note, the text in the text view will contain the entire suggestion, not just what the user
- * entered. Instead of retrieving the text from the text view, {@link #getUserText()} should be
- * called on this class.
- */
-public class SuggestedTextController {
-    private static final boolean DBG = false;
-    private static final String TAG = "Browser.SuggestedTextController";
-
-    private final BufferTextWatcher mBufferTextWatcher = new BufferTextWatcher();
-    private final BufferSpanWatcher mBufferSpanWatcher = new BufferSpanWatcher();
-    private final ArrayList<TextChangeWatcher> mTextWatchers;
-    private final TextOwner mTextOwner;
-    private final StringBuffer mUserEntered;
-    private final SuggestedSpan mSuggested;
-    private String mSuggestedText;
-    private TextChangeAttributes mCurrentTextChange;
-    private boolean mSuspended = false;
-
-    /**
-     * While this is non-null, any changes made to the cursor position or selection are ignored. Is
-     * stored the selection state at the moment when selection change processing was disabled.
-     */
-    private BufferSelection mTextSelectionBeforeIgnoringChanges;
-
-    public SuggestedTextController(final EditText textView, int color) {
-        this(new TextOwner() {
-            @Override
-            public Editable getText() {
-                return textView.getText();
-            }
-            @Override
-            public void addTextChangedListener(TextWatcher watcher) {
-                textView.addTextChangedListener(watcher);
-            }
-            @Override
-            public void removeTextChangedListener(TextWatcher watcher) {
-                textView.removeTextChangedListener(watcher);
-            }
-            @Override
-            public void setText(String text) {
-                textView.setText(text);
-            }
-        }, color);
-    }
-
-    private void initialize(String userText, int selStart, int selEnd, String suggested) {
-        Editable text = mTextOwner.getText();
-
-        if (userText == null) userText = "";
-        String allText = userText;
-        int suggestedStart = allText.length();
-        if (suggested != null && userText != null) {
-            if (suggested.startsWith(userText.toLowerCase())) {
-                allText = suggested;
-            }
-        }
-
-        // allText is at this point either "userText" (not null) or
-        // "suggested" if thats not null and starts with userText.
-        text.replace(0, text.length(), allText);
-        Selection.setSelection(text, selStart, selEnd);
-        mUserEntered.replace(0, mUserEntered.length(), userText);
-        mSuggestedText = suggested;
-        if (suggestedStart < text.length()) {
-            text.setSpan(mSuggested, suggestedStart, text.length(),
-                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
-        } else {
-            text.removeSpan(mSuggested);
-        }
-        text.setSpan(mBufferSpanWatcher, 0, text.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
-        mTextOwner.addTextChangedListener(mBufferTextWatcher);
-        if (DBG) checkInvariant(text);
-    }
-
-    private void assertNotIgnoringSelectionChanges() {
-        if (mTextSelectionBeforeIgnoringChanges != null) {
-            throw new IllegalStateException(
-                    "Illegal operation while cursor movement processing suspended");
-        }
-    }
-
-    public boolean isCursorHandlingSuspended() {
-        return mSuspended;
-    }
-
-    public Parcelable saveInstanceState(Parcelable superState) {
-        assertNotIgnoringSelectionChanges();
-        SavedState ss = new SavedState(superState);
-        Editable buffer = mTextOwner.getText();
-        ss.mUserText = getUserText();
-        ss.mSuggestedText = mSuggestedText;
-        ss.mSelStart = Selection.getSelectionStart(buffer);
-        ss.mSelEnd = Selection.getSelectionEnd(buffer);
-        return ss;
-    }
-
-    public Parcelable restoreInstanceState(Parcelable state) {
-        assertNotIgnoringSelectionChanges();
-        if (!(state instanceof SavedState)) return state;
-        SavedState ss = (SavedState) state;
-        if (DBG) {
-            Log.d(TAG, "restoreInstanceState t='" + ss.mUserText + "' suggestion='" +
-                    ss.mSuggestedText + " sel=" + ss.mSelStart + ".." + ss.mSelEnd);
-        }
-        // remove our listeners so we don't get notifications while re-initialising
-        mTextOwner.getText().removeSpan(mBufferSpanWatcher);
-        mTextOwner.removeTextChangedListener(mBufferTextWatcher);
-        // and initialise will re-add the watchers
-        initialize(ss.mUserText, ss.mSelStart, ss.mSelEnd, ss.mSuggestedText);
-        notifyUserEnteredChanged();
-        return ss.getSuperState();
-    }
-
-    /**
-     * Temporarily stop processing cursor movements and selection changes. While cursor movements
-     * are being ignored, the text in the buffer must NOT be changed; doing so will result in an
-     * {@link IllegalStateException} being thrown.
-     *
-     * To stop ignoring cursor movements, call
-     * {@link #resumeCursorMovementHandlingAndApplyChanges()}.
-     */
-    public void suspendCursorMovementHandling() {
-        assertNotIgnoringSelectionChanges();
-        Editable buffer = mTextOwner.getText();
-        mTextSelectionBeforeIgnoringChanges = new BufferSelection(buffer);
-        mSuspended = true;
-    }
-
-    /**
-     * Start responding to cursor movements and selection changes again. If the cursor or selection
-     * moved while it was being ignored, these changes will be processed now.
-     */
-    public void resumeCursorMovementHandlingAndApplyChanges() {
-        Editable buffer = mTextOwner.getText();
-        BufferSelection oldSelection = mTextSelectionBeforeIgnoringChanges;
-        mTextSelectionBeforeIgnoringChanges = null;
-        BufferSelection newSelection = new BufferSelection(buffer);
-        if (oldSelection.mStart != newSelection.mStart) {
-            mBufferSpanWatcher.onSpanChanged(buffer, Selection.SELECTION_START,
-                    oldSelection.mStart, oldSelection.mStart,
-                    newSelection.mStart, newSelection.mStart);
-        }
-        if (oldSelection.mEnd != newSelection.mEnd) {
-            mBufferSpanWatcher.onSpanChanged(buffer, Selection.SELECTION_END,
-                    oldSelection.mEnd, oldSelection.mEnd,
-                    newSelection.mEnd, newSelection.mEnd);
-        }
-        mSuspended = false;
-    }
-
-    /**
-     * Sets the current suggested text. A portion of this will be added to the user entered text if
-     * that is a prefix of the suggestion.
-     */
-    public void setSuggestedText(String text) {
-        assertNotIgnoringSelectionChanges();
-        if (!TextUtils.equals(text, mSuggestedText)) {
-            if (DBG) Log.d(TAG, "setSuggestedText(" + text + ")");
-            mSuggestedText = text;
-            if (mCurrentTextChange == null) {
-                mCurrentTextChange = new TextChangeAttributes(0, 0, 0);
-                Editable buffer = mTextOwner.getText();
-                handleTextChanged(buffer);
-            }
-        }
-    }
-
-    /**
-     * Gets the portion of displayed text that is not suggested.
-     */
-    public String getUserText() {
-        assertNotIgnoringSelectionChanges();
-        return mUserEntered.toString();
-    }
-
-    /**
-     * Sets the given text as if it has been entered by the user.
-     */
-    public void setText(String text) {
-        assertNotIgnoringSelectionChanges();
-        if (text == null) text = "";
-        Editable buffer = mTextOwner.getText();
-        buffer.removeSpan(mSuggested);
-        // this will cause a handleTextChanged call
-        buffer.replace(0, text.length(), text);
-    }
-
-    public void addUserTextChangeWatcher(TextChangeWatcher watcher) {
-        mTextWatchers.add(watcher);
-    }
-
-    private void handleTextChanged(Editable newText) {
-        // When we make changes to the buffer from within this function, it results in recursive
-        // calls to beforeTextChanges(), afterTextChanged(). We want to ignore the changes we're
-        // making ourself:
-        if (mCurrentTextChange.isHandled()) return;
-        mCurrentTextChange.setHandled();
-        final int pos = mCurrentTextChange.mPos;
-        final int countBefore = mCurrentTextChange.mCountBefore;
-        final int countAfter = mCurrentTextChange.mCountAfter;
-        final int cursorPos = Selection.getSelectionEnd(newText);
-        if (DBG) {
-            Log.d(TAG, "pos=" + pos +"; countBefore=" + countBefore + "; countAfter=" +
-                    countAfter + "; cursor=" + cursorPos);
-        }
-        mUserEntered.replace(pos, pos + countBefore,
-                newText.subSequence(pos, pos + countAfter).toString());
-        if (DBG) Log.d(TAG, "User entered: '" + mUserEntered + "' all='" + newText + "'");
-        final int userLen = mUserEntered.length();
-        boolean haveSuggested = newText.getSpanStart(mSuggested) != -1;
-        if (mSuggestedText != null &&
-                mSuggestedText.startsWith(mUserEntered.toString().toLowerCase())) {
-            if (haveSuggested) {
-                if (!mSuggestedText.equalsIgnoreCase(newText.toString())) {
-                    if (countAfter > countBefore) {
-                        // net insertion
-                        int len = countAfter - countBefore;
-                        newText.delete(pos + len, pos + len + len);
-                    } else {
-                        // net deletion
-                        newText.replace(userLen, newText.length(),
-                                mSuggestedText.substring(userLen));
-                        if (countBefore == 0) {
-                            // no change to the text - likely just suggested change
-                            Selection.setSelection(newText, cursorPos);
-                        }
-                    }
-                }
-            } else {
-                // no current suggested text - add it
-                newText.insert(userLen, mSuggestedText.substring(userLen));
-                // keep the cursor at the end of the user entered text, if that where it was
-                // before.
-                if (cursorPos == userLen) {
-                    Selection.setSelection(newText, userLen);
-                }
-            }
-            if (userLen == newText.length()) {
-                newText.removeSpan(mSuggested);
-            } else {
-                newText.setSpan(mSuggested, userLen, newText.length(),
-                        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
-            }
-        } else {
-            if (newText.getSpanStart(mSuggested) != -1) {
-                newText.removeSpan(mSuggested);
-                newText.delete(mUserEntered.length(), newText.length());
-            }
-        }
-        if (DBG) checkInvariant(newText);
-        mCurrentTextChange = null;
-        if (countBefore > 0 || countAfter > 0) {
-            notifyUserEnteredChanged();
-        }
-    }
-
-    private void notifyUserEnteredChanged() {
-        for (TextChangeWatcher watcher : mTextWatchers) {
-            watcher.onTextChanged(mUserEntered.toString());
-        }
-    }
-
-    /**
-     * Basic interface for being notified of changes to some text.
-     */
-    public interface TextChangeWatcher {
-        void onTextChanged(String newText);
-    }
-
-    /**
-     * Interface class to wrap required methods from {@link EditText}, or some other class used
-     * to test without needing an @{link EditText}.
-     */
-    public interface TextOwner {
-        Editable getText();
-        void addTextChangedListener(TextWatcher watcher);
-        void removeTextChangedListener(TextWatcher watcher);
-        void setText(String text);
-    }
-
-    /**
-     * This class stores the parameters passed to {@link BufferTextWatcher#beforeTextChanged},
-     * together with a flag indicating if this invocation has been dealt with yet. We need this
-     * information, together with the parameters passed to
-     * {@link BufferTextWatcher#afterTextChanged}, to restore our internal state when the buffer is
-     * edited.
-     *
-     * Since the changes we make from within {@link BufferTextWatcher#afterTextChanged} also trigger
-     * further recursive calls to {@link BufferTextWatcher#beforeTextChanged} and
-     * {@link BufferTextWatcher#afterTextChanged}, this class helps detect these recursive calls so
-     * they can be ignored.
-     */
-    private static class TextChangeAttributes {
-        public final int mPos;
-        public final int mCountAfter;
-        public final int mCountBefore;
-        private boolean mHandled;
-
-        public TextChangeAttributes(int pos, int countAfter, int countBefore) {
-            mPos = pos;
-            mCountAfter = countAfter;
-            mCountBefore = countBefore;
-        }
-
-        public void setHandled() {
-            mHandled = true;
-        }
-
-        public boolean isHandled() {
-            return mHandled;
-        }
-    }
-
-    /**
-     * Encapsulates the state of the text selection (and cursor) within a text buffer.
-     */
-    private static class BufferSelection {
-        final int mStart;
-        final int mEnd;
-        public BufferSelection(CharSequence text) {
-            mStart = Selection.getSelectionStart(text);
-            mEnd = Selection.getSelectionEnd(text);
-        }
-        @Override
-        public boolean equals(Object other) {
-            if (!(other instanceof BufferSelection)) return super.equals(other);
-            BufferSelection otherSel = (BufferSelection) other;
-            return this.mStart == otherSel.mStart && this.mEnd == otherSel.mEnd;
-        }
-    }
-
-    private class BufferTextWatcher implements TextWatcher {
-        @Override
-        public void afterTextChanged(Editable newText) {
-            if (DBG) {
-                Log.d(TAG, "afterTextChanged('" + newText + "')");
-            }
-            assertNotIgnoringSelectionChanges();
-            handleTextChanged(newText);
-        }
-
-        @Override
-        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-            assertNotIgnoringSelectionChanges();
-            if (mCurrentTextChange == null) {
-                mCurrentTextChange = new TextChangeAttributes(start, after, count);
-            }
-        }
-
-        @Override
-        public void onTextChanged(CharSequence s, int start, int before, int count) {
-        }
-    }
-
-    private class BufferSpanWatcher implements SpanWatcher {
-        @Override
-        public void onSpanAdded(Spannable text, Object what, int start, int end) {
-        }
-
-        @Override
-        public void onSpanChanged(
-                Spannable text, Object what, int ostart, int oend, int nstart, int nend) {
-            if (mCurrentTextChange != null) return;
-            if (mTextSelectionBeforeIgnoringChanges != null) return;
-            if (what == Selection.SELECTION_END) {
-                if (DBG) Log.d(TAG, "cursor move to " + nend);
-                if (nend > mUserEntered.length()) {
-                    mUserEntered.replace(0, mUserEntered.length(), text.toString());
-                    text.removeSpan(mSuggested);
-                }
-                if (DBG) checkInvariant(text);
-            }
-        }
-
-        @Override
-        public void onSpanRemoved(Spannable text, Object what, int start, int end) {
-        }
-    }
-
-    public static class SavedState extends View.BaseSavedState {
-        String mUserText;
-        String mSuggestedText;
-        int mSelStart;
-        int mSelEnd;
-
-        public SavedState(Parcelable superState) {
-            super(superState);
-        }
-
-        @Override
-        public void writeToParcel(Parcel out, int flags) {
-            super.writeToParcel(out, flags);
-            out.writeString(mUserText);
-            out.writeString(mSuggestedText);
-            out.writeInt(mSelStart);
-            out.writeInt(mSelEnd);
-        }
-
-        @SuppressWarnings("hiding")
-        public static final Parcelable.Creator<SavedState> CREATOR
-                = new Parcelable.Creator<SavedState>() {
-            @Override
-            public SavedState createFromParcel(Parcel in) {
-                return new SavedState(in);
-            }
-
-            @Override
-            public SavedState[] newArray(int size) {
-                return new SavedState[size];
-            }
-        };
-
-        private SavedState(Parcel in) {
-            super(in);
-            mUserText = in.readString();
-            mSuggestedText = in.readString();
-            mSelStart = in.readInt();
-            mSelEnd = in.readInt();
-        }
-    }
-
-    /*
-     * The remaining functions are used for testing purposes only.
-     * -----------------------------------------------------------
-     */
-
-    /**
-     * Verify that the internal state of this class is consistent.
-     */
-    @VisibleForTesting
-    void checkInvariant(final Spannable s) {
-        int suggestedStart = s.getSpanStart(mSuggested);
-        int suggestedEnd = s.getSpanEnd(mSuggested);
-        int cursorPos = Selection.getSelectionEnd(s);
-        if (suggestedStart == -1 || suggestedEnd == -1) {
-            suggestedStart = suggestedEnd = s.length();
-        }
-        String userEntered = getUserText();
-        Log.d(TAG, "checkInvariant all='" + s + "' (len " + s.length() + ") sug="
-                + suggestedStart + ".." + suggestedEnd + " cursor=" + cursorPos +
-                " ue='" + userEntered + "' (len " + userEntered.length() + ")");
-        int suggestedLen = suggestedEnd - suggestedStart;
-        Assert.assertEquals("Sum of user and suggested text lengths doesn't match total length",
-                s.length(), userEntered.length() + suggestedLen);
-        Assert.assertEquals("End of user entered text doesn't match start of suggested",
-                suggestedStart, userEntered.length());
-        Assert.assertTrue("user entered text does not match start of buffer",
-                userEntered.toString().equalsIgnoreCase(
-                        s.subSequence(0, suggestedStart).toString()));
-        if (mSuggestedText != null && suggestedStart < s.length()) {
-            Assert.assertTrue("User entered is not a prefix of suggested",
-                    mSuggestedText.startsWith(userEntered.toString().toLowerCase()));
-            Assert.assertTrue("Suggested text does not match buffer contents",
-                    mSuggestedText.equalsIgnoreCase(s.toString().toLowerCase()));
-        }
-        if (mSuggestedText == null) {
-            Assert.assertEquals("Non-zero suggention length with null suggestion", 0, suggestedLen);
-        } else {
-            Assert.assertTrue("Suggestion text longer than suggestion (" + mSuggestedText.length() +
-                    ">" + suggestedLen + ")", suggestedLen <= mSuggestedText.length());
-        }
-        Assert.assertTrue("Cursor within suggested part", cursorPos <= suggestedStart);
-    }
-
-    @VisibleForTesting
-    SuggestedTextController(TextOwner textOwner, int color) {
-        mUserEntered = new StringBuffer();
-        mSuggested = new SuggestedSpan(color);
-        mTextOwner = textOwner;
-        mTextWatchers = new ArrayList<TextChangeWatcher>();
-        initialize(null, 0, 0, null);
-    }
-}
diff --git a/src/com/android/browser/autocomplete/SuggestiveAutoCompleteTextView.java b/src/com/android/browser/autocomplete/SuggestiveAutoCompleteTextView.java
deleted file mode 100644
index 50ba758..0000000
--- a/src/com/android/browser/autocomplete/SuggestiveAutoCompleteTextView.java
+++ /dev/null
@@ -1,849 +0,0 @@
-/*
- * 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.
- */
-package com.android.browser.autocomplete;
-
-import com.android.browser.BrowserSettings;
-import com.android.browser.SuggestionsAdapter;
-import com.android.browser.SuggestionsAdapter.SuggestItem;
-import com.android.browser.autocomplete.SuggestedTextController.TextChangeWatcher;
-import com.android.internal.R;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.database.DataSetObserver;
-import android.graphics.Rect;
-import android.os.Parcelable;
-import android.text.Editable;
-import android.text.Html;
-import android.text.Selection;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.AbsSavedState;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.WindowManager;
-import android.view.inputmethod.CompletionInfo;
-import android.view.inputmethod.EditorInfo;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.AdapterView;
-import android.widget.EditText;
-import android.widget.Filter;
-import android.widget.Filterable;
-import android.widget.ListAdapter;
-import android.widget.ListPopupWindow;
-import android.widget.TextView;
-
-
-/**
- * This is a stripped down version of the framework AutoCompleteTextView
- * class with added support for displaying completions in-place. Note that
- * this cannot be implemented as a subclass of the above without making
- * substantial changes to it and its descendants.
- *
- * @see android.widget.AutoCompleteTextView
- */
-public class SuggestiveAutoCompleteTextView extends EditText implements Filter.FilterListener {
-    private static final boolean DEBUG = false;
-    private static final String TAG = "SuggestiveAutoCompleteTextView";
-
-    private CharSequence mHintText;
-    private TextView mHintView;
-    private int mHintResource;
-
-    private SuggestionsAdapter mAdapter;
-    private Filter mFilter;
-    private int mThreshold;
-
-    private ListPopupWindow mPopup;
-    private int mDropDownAnchorId;
-
-    private AdapterView.OnItemClickListener mItemClickListener;
-
-    private boolean mDropDownDismissedOnCompletion = true;
-
-    private int mLastKeyCode = KeyEvent.KEYCODE_UNKNOWN;
-
-    // Set to true when text is set directly and no filtering shall be performed
-    private boolean mBlockCompletion;
-
-    // When set, an update in the underlying adapter will update the result list popup.
-    // Set to false when the list is hidden to prevent asynchronous updates to popup the list again.
-    private boolean mPopupCanBeUpdated = true;
-
-    private PassThroughClickListener mPassThroughClickListener;
-    private PopupDataSetObserver mObserver;
-    private SuggestedTextController mController;
-
-    public SuggestiveAutoCompleteTextView(Context context) {
-        this(context, null);
-    }
-
-    public SuggestiveAutoCompleteTextView(Context context, AttributeSet attrs) {
-        this(context, attrs, R.attr.autoCompleteTextViewStyle);
-    }
-
-    public SuggestiveAutoCompleteTextView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-
-        // The completions are always shown in the same color as the hint
-        // text.
-        mController = new SuggestedTextController(this, getHintTextColors().getDefaultColor());
-        mPopup = new ListPopupWindow(context, attrs,
-                 R.attr.autoCompleteTextViewStyle);
-        mPopup.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
-        mPopup.setPromptPosition(ListPopupWindow.POSITION_PROMPT_BELOW);
-
-        TypedArray a = context.obtainStyledAttributes(
-                attrs, R.styleable.AutoCompleteTextView, defStyle, 0);
-
-        mThreshold = a.getInt(
-                R.styleable.AutoCompleteTextView_completionThreshold, 2);
-
-        mPopup.setListSelector(a.getDrawable(R.styleable.AutoCompleteTextView_dropDownSelector));
-        mPopup.setVerticalOffset((int)
-                a.getDimension(R.styleable.AutoCompleteTextView_dropDownVerticalOffset, 0.0f));
-        mPopup.setHorizontalOffset((int)
-                a.getDimension(R.styleable.AutoCompleteTextView_dropDownHorizontalOffset, 0.0f));
-
-        // Get the anchor's id now, but the view won't be ready, so wait to actually get the
-        // view and store it in mDropDownAnchorView lazily in getDropDownAnchorView later.
-        // Defaults to NO_ID, in which case the getDropDownAnchorView method will simply return
-        // this TextView, as a default anchoring point.
-        mDropDownAnchorId = a.getResourceId(
-                R.styleable.AutoCompleteTextView_dropDownAnchor, View.NO_ID);
-
-        // For dropdown width, the developer can specify a specific width, or MATCH_PARENT
-        // (for full screen width) or WRAP_CONTENT (to match the width of the anchored view).
-        mPopup.setWidth(a.getLayoutDimension(
-                R.styleable.AutoCompleteTextView_dropDownWidth,
-                ViewGroup.LayoutParams.WRAP_CONTENT));
-        mPopup.setHeight(a.getLayoutDimension(
-                R.styleable.AutoCompleteTextView_dropDownHeight,
-                ViewGroup.LayoutParams.WRAP_CONTENT));
-
-        mHintResource = a.getResourceId(R.styleable.AutoCompleteTextView_completionHintView,
-                R.layout.simple_dropdown_hint);
-
-        mPopup.setOnItemClickListener(new DropDownItemClickListener());
-        setCompletionHint(a.getText(R.styleable.AutoCompleteTextView_completionHint));
-
-        // Always turn on the auto complete input type flag, since it
-        // makes no sense to use this widget without it.
-        int inputType = getInputType();
-        if ((inputType&EditorInfo.TYPE_MASK_CLASS)
-                == EditorInfo.TYPE_CLASS_TEXT) {
-            inputType |= EditorInfo.TYPE_TEXT_FLAG_AUTO_COMPLETE;
-            setRawInputType(inputType);
-        }
-
-        a.recycle();
-
-        setFocusable(true);
-
-        mController.addUserTextChangeWatcher(new MyWatcher());
-
-        mPassThroughClickListener = new PassThroughClickListener();
-        super.setOnClickListener(mPassThroughClickListener);
-    }
-
-    @Override
-    public void setOnClickListener(OnClickListener listener) {
-        mPassThroughClickListener.mWrapped = listener;
-    }
-
-    /**
-     * Private hook into the on click event, dispatched from {@link PassThroughClickListener}
-     */
-    private void onClickImpl() {
-        // If the dropdown is showing, bring the keyboard to the front
-        // when the user touches the text field.
-        if (isPopupShowing()) {
-            ensureImeVisible(true);
-        }
-    }
-
-    /**
-     * <p>Sets the optional hint text that is displayed at the bottom of the
-     * the matching list.  This can be used as a cue to the user on how to
-     * best use the list, or to provide extra information.</p>
-     *
-     * @param hint the text to be displayed to the user
-     *
-     * @attr ref android.R.styleable#AutoCompleteTextView_completionHint
-     */
-    private void setCompletionHint(CharSequence hint) {
-        mHintText = hint;
-        if (hint != null) {
-            if (mHintView == null) {
-                final TextView hintView = (TextView) LayoutInflater.from(getContext()).inflate(
-                        mHintResource, null).findViewById(R.id.text1);
-                hintView.setText(mHintText);
-                mHintView = hintView;
-                mPopup.setPromptView(hintView);
-            } else {
-                mHintView.setText(hint);
-            }
-        } else {
-            mPopup.setPromptView(null);
-            mHintView = null;
-        }
-    }
-
-    protected int getDropDownWidth() {
-        return mPopup.getWidth();
-    }
-
-    public void setDropDownWidth(int width) {
-        mPopup.setWidth(width);
-    }
-
-    protected void setDropDownVerticalOffset(int offset) {
-        mPopup.setVerticalOffset(offset);
-    }
-
-    public void setDropDownHorizontalOffset(int offset) {
-        mPopup.setHorizontalOffset(offset);
-    }
-
-    protected int getDropDownHorizontalOffset() {
-        return mPopup.getHorizontalOffset();
-    }
-
-    public void setThreshold(int threshold) {
-        if (threshold <= 0) {
-            threshold = 1;
-        }
-
-        mThreshold = threshold;
-    }
-
-    protected void setOnItemClickListener(AdapterView.OnItemClickListener l) {
-        mItemClickListener = l;
-    }
-
-    public void setAdapter(SuggestionsAdapter adapter) {
-        if (mObserver == null) {
-            mObserver = new PopupDataSetObserver();
-        } else if (mAdapter != null) {
-            mAdapter.unregisterDataSetObserver(mObserver);
-        }
-        mAdapter = adapter;
-        if (mAdapter != null) {
-            mFilter = mAdapter.getFilter();
-            adapter.registerDataSetObserver(mObserver);
-        } else {
-            mFilter = null;
-        }
-
-        mPopup.setAdapter(mAdapter);
-    }
-
-    @Override
-    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
-        if (keyCode == KeyEvent.KEYCODE_BACK && isPopupShowing()
-                && !mPopup.isDropDownAlwaysVisible()) {
-            // special case for the back key, we do not even try to send it
-            // to the drop down list but instead, consume it immediately
-            if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) {
-                KeyEvent.DispatcherState state = getKeyDispatcherState();
-                if (state != null) {
-                    state.startTracking(event, this);
-                }
-                return true;
-            } else if (event.getAction() == KeyEvent.ACTION_UP) {
-                KeyEvent.DispatcherState state = getKeyDispatcherState();
-                if (state != null) {
-                    state.handleUpEvent(event);
-                }
-                if (event.isTracking() && !event.isCanceled()) {
-                    dismissDropDown();
-                    return true;
-                }
-            }
-        }
-        return super.onKeyPreIme(keyCode, event);
-    }
-
-    @Override
-    public boolean onKeyUp(int keyCode, KeyEvent event) {
-        boolean consumed = mPopup.onKeyUp(keyCode, event);
-        if (consumed) {
-            switch (keyCode) {
-            // if the list accepts the key events and the key event
-            // was a click, the text view gets the selected item
-            // from the drop down as its content
-            case KeyEvent.KEYCODE_ENTER:
-            case KeyEvent.KEYCODE_DPAD_CENTER:
-            case KeyEvent.KEYCODE_TAB:
-                if (event.hasNoModifiers()) {
-                    performCompletion();
-                }
-                return true;
-            }
-        }
-
-        if (isPopupShowing() && keyCode == KeyEvent.KEYCODE_TAB && event.hasNoModifiers()) {
-            performCompletion();
-            return true;
-        }
-
-        return super.onKeyUp(keyCode, event);
-    }
-
-    @Override
-    public boolean onKeyDown(int keyCode, KeyEvent event) {
-        if (mPopup.onKeyDown(keyCode, event)) {
-            return true;
-        }
-
-        if (!isPopupShowing()) {
-            switch(keyCode) {
-            case KeyEvent.KEYCODE_DPAD_DOWN:
-                if (event.hasNoModifiers()) {
-                    performValidation();
-                }
-            }
-        }
-
-        if (isPopupShowing() && keyCode == KeyEvent.KEYCODE_TAB && event.hasNoModifiers()) {
-            return true;
-        }
-
-        mLastKeyCode = keyCode;
-        boolean handled = super.onKeyDown(keyCode, event);
-        mLastKeyCode = KeyEvent.KEYCODE_UNKNOWN;
-
-        if (handled && isPopupShowing()) {
-            clearListSelection();
-        }
-
-        return handled;
-    }
-
-    /**
-     * Returns <code>true</code> if the amount of text in the field meets
-     * or exceeds the {@link #getThreshold} requirement.  You can override
-     * this to impose a different standard for when filtering will be
-     * triggered.
-     */
-    private boolean enoughToFilter() {
-        if (DEBUG) Log.v(TAG, "Enough to filter: len=" + getUserText().length()
-                + " threshold=" + mThreshold);
-        return getUserText().length() >= mThreshold;
-    }
-
-    /**
-     * This is used to watch for edits to the text view.  Note that we call
-     * to methods on the auto complete text view class so that we can access
-     * private vars without going through thunks.
-     */
-    private class MyWatcher implements TextChangeWatcher {
-        @Override
-        public void onTextChanged(String newText) {
-            doAfterTextChanged();
-        }
-    }
-
-    /**
-     * @hide
-     */
-    protected void setBlockCompletion(boolean block) {
-        mBlockCompletion = block;
-    }
-
-    void doAfterTextChanged() {
-        if (DEBUG) Log.d(TAG, "doAfterTextChanged(" + getText() + ")");
-        if (mBlockCompletion) return;
-
-        // the drop down is shown only when a minimum number of characters
-        // was typed in the text view
-        if (enoughToFilter()) {
-            if (mFilter != null) {
-                mPopupCanBeUpdated = true;
-                performFiltering(getUserText(), mLastKeyCode);
-                buildImeCompletions();
-            }
-        } else {
-            // drop down is automatically dismissed when enough characters
-            // are deleted from the text view
-            if (!mPopup.isDropDownAlwaysVisible()) {
-                dismissDropDown();
-            }
-            if (mFilter != null) {
-                performFiltering(null, mLastKeyCode);
-            }
-        }
-    }
-
-    /**
-     * <p>Indicates whether the popup menu is showing.</p>
-     *
-     * @return true if the popup menu is showing, false otherwise
-     */
-    public boolean isPopupShowing() {
-        return mPopup.isShowing();
-    }
-
-    /**
-     * <p>Converts the selected item from the drop down list into a sequence
-     * of character that can be used in the edit box.</p>
-     *
-     * @param selectedItem the item selected by the user for completion
-     *
-     * @return a sequence of characters representing the selected suggestion
-     */
-    protected CharSequence convertSelectionToString(Object selectedItem) {
-        return mFilter.convertResultToString(selectedItem);
-    }
-
-    /**
-     * <p>Clear the list selection.  This may only be temporary, as user input will often bring
-     * it back.
-     */
-    private void clearListSelection() {
-        mPopup.clearListSelection();
-    }
-
-    /**
-     * <p>Starts filtering the content of the drop down list. The filtering
-     * pattern is the content of the edit box. Subclasses should override this
-     * method to filter with a different pattern, for instance a substring of
-     * <code>text</code>.</p>
-     *
-     * @param text the filtering pattern
-     * @param keyCode the last character inserted in the edit box; beware that
-     * this will be null when text is being added through a soft input method.
-     */
-    @SuppressWarnings({ "UnusedDeclaration" })
-    protected void performFiltering(CharSequence text, int keyCode) {
-        if (DEBUG) Log.d(TAG, "performFiltering(" + text + ")");
-
-        mFilter.filter(text, this);
-    }
-
-    protected void performForcedFiltering() {
-        boolean wasSuspended = false;
-        if (mController.isCursorHandlingSuspended()) {
-            mController.resumeCursorMovementHandlingAndApplyChanges();
-            wasSuspended = true;
-        }
-
-        mFilter.filter(getUserText().toString(), this);
-
-        if (wasSuspended) {
-            mController.suspendCursorMovementHandling();
-        }
-    }
-
-    /**
-     * <p>Performs the text completion by converting the selected item from
-     * the drop down list into a string, replacing the text box's content with
-     * this string and finally dismissing the drop down menu.</p>
-     */
-    private void performCompletion() {
-        performCompletion(null, -1, -1);
-    }
-
-    @Override
-    public void onCommitCompletion(CompletionInfo completion) {
-        if (isPopupShowing()) {
-            mBlockCompletion = true;
-            replaceText(completion.getText());
-            mBlockCompletion = false;
-
-            mPopup.performItemClick(completion.getPosition());
-        }
-    }
-
-    private void performCompletion(View selectedView, int position, long id) {
-        if (isPopupShowing()) {
-            Object selectedItem;
-            if (position < 0) {
-                selectedItem = mPopup.getSelectedItem();
-            } else {
-                selectedItem = mAdapter.getItem(position);
-            }
-            if (selectedItem == null) {
-                Log.w(TAG, "performCompletion: no selected item");
-                return;
-            }
-
-            mBlockCompletion = true;
-            replaceText(convertSelectionToString(selectedItem));
-            mBlockCompletion = false;
-
-            if (mItemClickListener != null) {
-                final ListPopupWindow list = mPopup;
-
-                if (selectedView == null || position < 0) {
-                    selectedView = list.getSelectedView();
-                    position = list.getSelectedItemPosition();
-                    id = list.getSelectedItemId();
-                }
-                mItemClickListener.onItemClick(list.getListView(), selectedView, position, id);
-            }
-        }
-
-        if (mDropDownDismissedOnCompletion && !mPopup.isDropDownAlwaysVisible()) {
-            dismissDropDown();
-        }
-    }
-
-    /**
-     * <p>Performs the text completion by replacing the current text by the
-     * selected item. Subclasses should override this method to avoid replacing
-     * the whole content of the edit box.</p>
-     *
-     * @param text the selected suggestion in the drop down list
-     */
-    protected void replaceText(CharSequence text) {
-        clearComposingText();
-
-        setText(text);
-        // make sure we keep the caret at the end of the text view
-        Editable spannable = getText();
-        Selection.setSelection(spannable, spannable.length());
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public void onFilterComplete(int count) {
-        updateDropDownForFilter(count);
-    }
-
-    private void updateDropDownForFilter(int count) {
-        // Not attached to window, don't update drop-down
-        if (getWindowVisibility() == View.GONE) return;
-
-        /*
-         * This checks enoughToFilter() again because filtering requests
-         * are asynchronous, so the result may come back after enough text
-         * has since been deleted to make it no longer appropriate
-         * to filter.
-         */
-
-        final boolean dropDownAlwaysVisible = mPopup.isDropDownAlwaysVisible();
-        if ((count > 0 || dropDownAlwaysVisible) && enoughToFilter() &&
-                getUserText().length() > 0) {
-            if (hasFocus() && hasWindowFocus() && mPopupCanBeUpdated) {
-                showDropDown();
-            }
-        } else if (!dropDownAlwaysVisible && isPopupShowing()) {
-            dismissDropDown();
-            // When the filter text is changed, the first update from the adapter may show an empty
-            // count (when the query is being performed on the network). Future updates when some
-            // content has been retrieved should still be able to update the list.
-            mPopupCanBeUpdated = true;
-        }
-    }
-
-    @Override
-    public void onWindowFocusChanged(boolean hasWindowFocus) {
-        super.onWindowFocusChanged(hasWindowFocus);
-        if (!hasWindowFocus && !mPopup.isDropDownAlwaysVisible()) {
-            dismissDropDown();
-        }
-    }
-
-    @Override
-    protected void onDisplayHint(int hint) {
-        super.onDisplayHint(hint);
-        switch (hint) {
-            case INVISIBLE:
-                if (!mPopup.isDropDownAlwaysVisible()) {
-                    dismissDropDown();
-                }
-                break;
-        }
-    }
-
-    @Override
-    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
-        // TextView makes several cursor movements when gaining focus, and this interferes with
-        // the suggested vs user entered text. Tell the controller to temporarily ignore cursor
-        // movements while this is going on.
-        mController.suspendCursorMovementHandling();
-
-        super.onFocusChanged(focused, direction, previouslyFocusedRect);
-        // Perform validation if the view is losing focus.
-        if (!focused) {
-            performValidation();
-        }
-        if (!focused && !mPopup.isDropDownAlwaysVisible()) {
-            dismissDropDown();
-        }
-
-        mController.resumeCursorMovementHandlingAndApplyChanges();
-    }
-
-    @Override
-    protected void onAttachedToWindow() {
-        super.onAttachedToWindow();
-    }
-
-    @Override
-    protected void onDetachedFromWindow() {
-        dismissDropDown();
-        super.onDetachedFromWindow();
-    }
-
-    /**
-     * <p>Closes the drop down if present on screen.</p>
-     */
-    protected void dismissDropDown() {
-        InputMethodManager imm = InputMethodManager.peekInstance();
-        if (imm != null) {
-            imm.displayCompletions(this, null);
-        }
-        mPopup.dismiss();
-        mPopupCanBeUpdated = false;
-    }
-
-    @Override
-    protected boolean setFrame(final int l, int t, final int r, int b) {
-        boolean result = super.setFrame(l, t, r, b);
-
-        if (isPopupShowing()) {
-            showDropDown();
-        }
-
-        return result;
-    }
-
-    /**
-     * Ensures that the drop down is not obscuring the IME.
-     * @param visible whether the ime should be in front. If false, the ime is pushed to
-     * the background.
-     * @hide internal used only here and SearchDialog
-     */
-    private void ensureImeVisible(boolean visible) {
-        mPopup.setInputMethodMode(visible
-                ? ListPopupWindow.INPUT_METHOD_NEEDED : ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
-        showDropDown();
-    }
-
-    /**
-     * <p>Displays the drop down on screen.</p>
-     */
-    protected void showDropDown() {
-        if (mPopup.getAnchorView() == null) {
-            if (mDropDownAnchorId != View.NO_ID) {
-                mPopup.setAnchorView(getRootView().findViewById(mDropDownAnchorId));
-            } else {
-                mPopup.setAnchorView(this);
-            }
-        }
-        if (!isPopupShowing()) {
-            // Make sure the list does not obscure the IME when shown for the first time.
-            mPopup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NEEDED);
-        }
-        mPopup.show();
-    }
-
-    private void buildImeCompletions() {
-        final ListAdapter adapter = mAdapter;
-        if (adapter != null) {
-            InputMethodManager imm = InputMethodManager.peekInstance();
-            if (imm != null) {
-                final int count = Math.min(adapter.getCount(), 20);
-                CompletionInfo[] completions = new CompletionInfo[count];
-                int realCount = 0;
-
-                for (int i = 0; i < count; i++) {
-                    if (adapter.isEnabled(i)) {
-                        realCount++;
-                        Object item = adapter.getItem(i);
-                        long id = adapter.getItemId(i);
-                        completions[i] = new CompletionInfo(id, i,
-                                convertSelectionToString(item));
-                    }
-                }
-
-                if (realCount != count) {
-                    CompletionInfo[] tmp = new CompletionInfo[realCount];
-                    System.arraycopy(completions, 0, tmp, 0, realCount);
-                    completions = tmp;
-                }
-
-                imm.displayCompletions(this, completions);
-            }
-        }
-    }
-
-    private void performValidation() {
-    }
-
-    /**
-     * Returns the Filter obtained from {@link Filterable#getFilter},
-     * or <code>null</code> if {@link #setAdapter} was not called with
-     * a Filterable.
-     */
-    protected Filter getFilter() {
-        return mFilter;
-    }
-
-    private class DropDownItemClickListener implements AdapterView.OnItemClickListener {
-        @Override
-        public void onItemClick(AdapterView parent, View v, int position, long id) {
-            performCompletion(v, position, id);
-        }
-    }
-
-    /**
-     * Allows us a private hook into the on click event without preventing users from setting
-     * their own click listener.
-     */
-    private class PassThroughClickListener implements OnClickListener {
-
-        private View.OnClickListener mWrapped;
-
-        /** {@inheritDoc} */
-        @Override
-        public void onClick(View v) {
-            onClickImpl();
-
-            if (mWrapped != null) mWrapped.onClick(v);
-        }
-    }
-
-    private class PopupDataSetObserver extends DataSetObserver {
-        @Override
-        public void onChanged() {
-            if (mAdapter != null) {
-                // If the popup is not showing already, showing it will cause
-                // the list of data set observers attached to the adapter to
-                // change. We can't do it from here, because we are in the middle
-                // of iterating through the list of observers.
-                post(new Runnable() {
-                    @Override
-                    public void run() {
-                        final SuggestionsAdapter adapter = mAdapter;
-                        if (adapter != null) {
-                            // This will re-layout, thus resetting mDataChanged, so that the
-                            // listView click listener stays responsive
-                            updateDropDownForFilter(adapter.getCount());
-                        }
-
-                        updateText(adapter);
-                    }
-                });
-            }
-        }
-    }
-
-    public String getUserText() {
-        return mController.getUserText();
-    }
-
-    private void updateText(SuggestionsAdapter adapter) {
-        if (!BrowserSettings.getInstance().useInstantSearch()) {
-            return;
-        }
-
-        if (!isPopupShowing()) {
-            setSuggestedText(null);
-            return;
-        }
-
-        if (mAdapter.getCount() > 0 && !TextUtils.isEmpty(getUserText())) {
-            for (int i = 0; i < mAdapter.getCount(); ++i) {
-                SuggestItem current = mAdapter.getItem(i);
-                if (current.type == SuggestionsAdapter.TYPE_SUGGEST) {
-                    setSuggestedText(current.title);
-                    break;
-                }
-            }
-        }
-    }
-
-    @Override
-    public void setText(CharSequence text, BufferType type) {
-        Editable buffer = getEditableText();
-        if (text == null) text = "";
-        // if we already have a buffer, we must not replace it with a new one as this will break
-        // mController. Write the new text into the existing buffer instead.
-        if (buffer == null) {
-            super.setText(text, type);
-        } else {
-            buffer.replace(0, buffer.length(), text);
-            invalidate();
-        }
-    }
-
-    public void setText(CharSequence text, boolean filter) {
-        if (filter) {
-            setText(text);
-        } else {
-            mBlockCompletion = true;
-            // If cursor movement handling was suspended (the view is
-            // not in focus), resume it and apply the pending change.
-            // Since we don't want to perform any filtering, this change
-            // is safe.
-            boolean wasSuspended = false;
-            if (mController.isCursorHandlingSuspended()) {
-                mController.resumeCursorMovementHandlingAndApplyChanges();
-                wasSuspended = true;
-            }
-
-            setText(text);
-
-            if (wasSuspended) {
-                mController.suspendCursorMovementHandling();
-            }
-            mBlockCompletion = false;
-        }
-    }
-
-    @Override
-    public Parcelable onSaveInstanceState() {
-        Parcelable superState = super.onSaveInstanceState();
-        if (superState instanceof TextView.SavedState) {
-            // get rid of TextView's saved state, we override it.
-            superState = ((TextView.SavedState) superState).getSuperState();
-        }
-        if (superState == null) {
-            superState = AbsSavedState.EMPTY_STATE;
-        }
-        return mController.saveInstanceState(superState);
-    }
-
-    @Override
-    public void onRestoreInstanceState(Parcelable state) {
-        super.onRestoreInstanceState(mController.restoreInstanceState(state));
-    }
-
-    public void addQueryTextWatcher(final SuggestedTextController.TextChangeWatcher watcher) {
-        mController.addUserTextChangeWatcher(watcher);
-    }
-
-    public void setSuggestedText(String text) {
-        if (!TextUtils.isEmpty(text)) {
-            String htmlStripped = Html.fromHtml(text).toString();
-            mController.setSuggestedText(htmlStripped);
-        } else {
-            mController.setSuggestedText(null);
-        }
-    }
-
-    public void getPopupDrawableRect(Rect rect) {
-        if (mPopup.getListView() != null) {
-            mPopup.getListView().getDrawingRect(rect);
-        }
-    }
-}
diff --git a/src/com/android/browser/preferences/LabPreferencesFragment.java b/src/com/android/browser/preferences/LabPreferencesFragment.java
index ca3a86a..222b5fa 100644
--- a/src/com/android/browser/preferences/LabPreferencesFragment.java
+++ b/src/com/android/browser/preferences/LabPreferencesFragment.java
@@ -26,35 +26,11 @@
 import com.android.browser.search.SearchEngine;
 
 public class LabPreferencesFragment extends PreferenceFragment {
-    private BrowserSettings mBrowserSettings;
-    private Preference useInstantPref;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-
-        mBrowserSettings = BrowserSettings.getInstance();
-
         // Load the XML preferences file
         addPreferencesFromResource(R.xml.lab_preferences);
-        useInstantPref = findPreference(PreferenceKeys.PREF_USE_INSTANT_SEARCH);
     }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        if (useInstantPref != null) {
-            useInstantPref.setEnabled(false);
-
-            // Enable the "use instant" preference only if the selected
-            // search engine is google.
-            if (mBrowserSettings.getSearchEngine() != null) {
-                final String currentName = mBrowserSettings.getSearchEngine().getName();
-                if (SearchEngine.GOOGLE.equals(currentName)) {
-                    useInstantPref.setEnabled(true);
-                }
-            }
-        }
-    }
-
 }
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java
index 06c8e16..06ace20 100644
--- a/src/com/android/browser/provider/BrowserProvider2.java
+++ b/src/com/android/browser/provider/BrowserProvider2.java
@@ -518,18 +518,21 @@
                             null, null, null);
                     if (c != null) {
                         while (c.moveToNext()) {
+                            String url = c.getString(0);
+                            if (TextUtils.isEmpty(url))
+                                continue; // We require a valid URL
                             ContentValues values = new ContentValues();
-                            values.put(Bookmarks.URL, c.getString(0));
+                            values.put(Bookmarks.URL, url);
                             values.put(Bookmarks.TITLE, c.getString(1));
                             values.put(Bookmarks.DATE_CREATED, c.getInt(4));
                             values.put(Bookmarks.POSITION, 0);
                             values.put(Bookmarks.PARENT, FIXED_ID_ROOT);
                             ContentValues imageValues = new ContentValues();
-                            imageValues.put(Images.URL, c.getString(0));
+                            imageValues.put(Images.URL, url);
                             imageValues.put(Images.FAVICON, c.getBlob(2));
                             imageValues.put(Images.TOUCH_ICON, c.getBlob(3));
-                            db.insertOrThrow(TABLE_IMAGES, Images.THUMBNAIL, imageValues);
-                            db.insertOrThrow(TABLE_BOOKMARKS, Bookmarks.DIRTY, values);
+                            db.insert(TABLE_IMAGES, Images.THUMBNAIL, imageValues);
+                            db.insert(TABLE_BOOKMARKS, Bookmarks.DIRTY, values);
                         }
                         c.close();
                     }
@@ -547,12 +550,15 @@
                     if (c != null) {
                         while (c.moveToNext()) {
                             ContentValues values = new ContentValues();
-                            values.put(History.URL, c.getString(0));
+                            String url = c.getString(0);
+                            if (TextUtils.isEmpty(url))
+                                continue; // We require a valid URL
+                            values.put(History.URL, url);
                             values.put(History.TITLE, c.getString(1));
                             values.put(History.VISITS, c.getInt(2));
                             values.put(History.DATE_LAST_VISITED, c.getLong(3));
                             values.put(History.DATE_CREATED, c.getLong(4));
-                            db.insertOrThrow(TABLE_HISTORY, History.FAVICON, values);
+                            db.insert(TABLE_HISTORY, History.FAVICON, values);
                         }
                         c.close();
                     }
diff --git a/src/com/android/browser/search/SearchEngines.java b/src/com/android/browser/search/SearchEngines.java
index fd967f9..433e877 100644
--- a/src/com/android/browser/search/SearchEngines.java
+++ b/src/com/android/browser/search/SearchEngines.java
@@ -15,8 +15,6 @@
  */
 package com.android.browser.search;
 
-import com.android.browser.BrowserSettings;
-import com.android.browser.InstantSearchEngine;
 import com.android.browser.R;
 
 import android.content.Context;
@@ -32,10 +30,6 @@
     private static final String TAG = "SearchEngines";
 
     public static SearchEngine getDefaultSearchEngine(Context context) {
-        if (BrowserSettings.getInstance().useInstantSearch()) {
-            return new InstantSearchEngine(context, DefaultSearchEngine.create(context));
-        }
-
         return DefaultSearchEngine.create(context);
     }
 
diff --git a/tests/src/com/android/browser/autocomplete/SuggestedTextControllerTest.java b/tests/src/com/android/browser/autocomplete/SuggestedTextControllerTest.java
deleted file mode 100644
index f162e3b..0000000
--- a/tests/src/com/android/browser/autocomplete/SuggestedTextControllerTest.java
+++ /dev/null
@@ -1,547 +0,0 @@
-/*
- * 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.
- */
-package com.android.browser.autocomplete;
-
-import com.android.browser.autocomplete.SuggestedTextController.TextOwner;
-
-import android.graphics.Color;
-import android.os.Parcelable;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.text.Editable;
-import android.text.Selection;
-import android.text.Spannable;
-import android.text.SpannableStringBuilder;
-import android.text.TextWatcher;
-import android.view.AbsSavedState;
-
-/**
- * Test cases for {@link SuggestedTextController}.
- */
-@SmallTest
-public class SuggestedTextControllerTest extends AndroidTestCase {
-
-    // these two must have a common prefix (but not be identical):
-    private static final String RUBY_MURRAY = "ruby murray";
-    private static final String RUBY_TUESDAY = "ruby tuesday";
-    private static final String EXTRA_USER_TEXT = " curry";
-    // no common prefix with the top two above:
-    private static final String TOD_SLOAN = "tod sloan";
-
-    private SuggestedTextController mController;
-    private SpannableStringBuilder mString;
-
-    private SuggestedTextController m2ndController;
-    private SpannableStringBuilder m2ndString;
-
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        mString = new SpannableStringBuilder();
-        Selection.setSelection(mString, 0); // position cursor
-        mController = new SuggestedTextController(new BufferTextOwner(mString), Color.GRAY);
-        checkInvariant();
-    }
-
-    private void create2ndController() {
-        m2ndString = new SpannableStringBuilder();
-        Selection.setSelection(m2ndString, 0); // position cursor
-        m2ndController = new SuggestedTextController(new BufferTextOwner(m2ndString), Color.GRAY);
-        check2ndInvariant();
-    }
-
-    private int cursorPos(Spannable string) {
-        int selStart = Selection.getSelectionStart(string);
-        int selEnd = Selection.getSelectionEnd(string);
-        assertEquals("Selection has non-zero length", selStart, selEnd);
-        return selEnd;
-    }
-
-    private int cursorPos() {
-        return cursorPos(mString);
-    }
-
-    private void insertAtCursor(String text) {
-        mString.insert(cursorPos(), text);
-        checkInvariant();
-    }
-
-    private void insertAtCursor(char ch) {
-        insertAtCursor(Character.toString(ch));
-    }
-
-    private void insertAt2ndCursor(String text) {
-        m2ndString.insert(cursorPos(m2ndString), text);
-        check2ndInvariant();
-    }
-
-    private void insertAt2ndCursor(char ch) {
-        insertAt2ndCursor(Character.toString(ch));
-    }
-
-    private void deleteBeforeCursor(int count) {
-        int pos = cursorPos();
-        count = Math.min(pos, count);
-        mString.delete(pos - count, pos);
-        checkInvariant();
-    }
-
-    private void replaceSelection(String withThis) {
-        mString.replace(Selection.getSelectionStart(mString),
-                Selection.getSelectionEnd(mString), withThis);
-        checkInvariant();
-    }
-
-    private void setSuggested(String suggested) {
-        mController.setSuggestedText(suggested);
-        checkInvariant();
-    }
-
-    private void set2ndSuggested(String suggested) {
-        m2ndController.setSuggestedText(suggested);
-        check2ndInvariant();
-    }
-
-    private void checkInvariant() {
-        mController.checkInvariant(mString);
-    }
-
-    private void check2ndInvariant() {
-        m2ndController.checkInvariant(m2ndString);
-    }
-
-    private void assertUserEntered(String expected, SuggestedTextController controller) {
-        assertEquals("User entered text not as expected", expected, controller.getUserText());
-    }
-
-    private void assertUserEntered(String expected) {
-        assertUserEntered(expected, mController);
-    }
-
-    private void assertBuffer(String expected, Editable string) {
-        assertEquals("Buffer contents not as expected", expected, string.toString());
-    }
-
-    private void assertBuffer(String expected) {
-        assertBuffer(expected, mString);
-    }
-
-    private void assertCursorPos(int where, Spannable string) {
-        assertEquals("Cursor not at expected position", where, cursorPos(string));
-    }
-
-    private void assertCursorPos(int where) {
-        assertCursorPos(where, mString);
-    }
-
-    private static final String commonPrefix(String a, String b) {
-        int pos = 0;
-        while (a.charAt(pos) == b.charAt(pos)) {
-            pos++;
-        }
-        assertTrue("No common prefix between '" + a + "' and '" + b + "'", pos > 0);
-        return a.substring(0, pos);
-    }
-
-    public void testTypeNoSuggested() {
-        for (int i = 0; i < RUBY_MURRAY.length(); ++i) {
-            assertCursorPos(i);
-            assertUserEntered(RUBY_MURRAY.substring(0, i));
-            assertBuffer(RUBY_MURRAY.substring(0, i));
-            insertAtCursor(RUBY_MURRAY.substring(i, i + 1));
-        }
-    }
-
-    public void testTypeSuggested() {
-        setSuggested(RUBY_MURRAY);
-        assertCursorPos(0);
-        assertBuffer(RUBY_MURRAY);
-        for (int i = 0; i < RUBY_MURRAY.length(); ++i) {
-            assertCursorPos(i);
-            assertUserEntered(RUBY_MURRAY.substring(0, i));
-            assertBuffer(RUBY_MURRAY);
-            insertAtCursor(RUBY_MURRAY.charAt(i));
-        }
-    }
-
-    public void testSetSuggestedAfterTextEntry() {
-        final int count = RUBY_MURRAY.length() / 2;
-        for (int i = 0; i < count; ++i) {
-            assertCursorPos(i);
-            assertUserEntered(RUBY_MURRAY.substring(0, i));
-            insertAtCursor(RUBY_MURRAY.substring(i, i + 1));
-        }
-        setSuggested(RUBY_MURRAY);
-        assertUserEntered(RUBY_MURRAY.substring(0, count));
-        assertBuffer(RUBY_MURRAY);
-    }
-
-    public void testTypeSuggestedUpperCase() {
-        setSuggested(RUBY_MURRAY);
-        assertCursorPos(0);
-        for (int i = 0; i < RUBY_MURRAY.length(); ++i) {
-            assertCursorPos(i);
-            assertUserEntered(RUBY_MURRAY.substring(0, i).toUpperCase());
-            assertTrue("Buffer doesn't contain suggested text",
-                    RUBY_MURRAY.equalsIgnoreCase(mString.toString()));
-            insertAtCursor(Character.toUpperCase(RUBY_MURRAY.charAt(i)));
-        }
-    }
-
-    public void testChangeSuggestedText() {
-        String pref = commonPrefix(RUBY_MURRAY, RUBY_TUESDAY);
-        setSuggested(RUBY_MURRAY);
-        insertAtCursor(pref);
-        assertBuffer(RUBY_MURRAY);
-        assertUserEntered(pref);
-        setSuggested(RUBY_TUESDAY);
-        assertBuffer(RUBY_TUESDAY);
-        assertUserEntered(pref);
-    }
-
-    public void testTypeNonSuggested() {
-        setSuggested(RUBY_MURRAY);
-        insertAtCursor(RUBY_MURRAY.charAt(0));
-        assertBuffer(RUBY_MURRAY);
-        insertAtCursor('x');
-        assertBuffer("rx");
-    }
-
-    public void testTypeNonSuggestedThenNewSuggestion() {
-        final String pref = commonPrefix(RUBY_MURRAY, RUBY_TUESDAY);
-        setSuggested(RUBY_MURRAY);
-        assertCursorPos(0);
-        insertAtCursor(pref);
-        assertCursorPos(pref.length());
-        assertUserEntered(pref);
-        insertAtCursor(RUBY_TUESDAY.charAt(pref.length()));
-        assertBuffer(RUBY_TUESDAY.substring(0, pref.length() + 1));
-        setSuggested(RUBY_TUESDAY);
-        assertBuffer(RUBY_TUESDAY);
-    }
-
-    public void testChangeSuggestedToNonUserEntered() {
-        final String half = RUBY_MURRAY.substring(0, RUBY_MURRAY.length() / 2);
-        setSuggested(RUBY_MURRAY);
-        insertAtCursor(half);
-        setSuggested(TOD_SLOAN);
-        assertUserEntered(half);
-        assertBuffer(half);
-    }
-
-    public void testChangeSuggestedToUserEntered() {
-        setSuggested(RUBY_MURRAY);
-        insertAtCursor(TOD_SLOAN);
-        setSuggested(TOD_SLOAN);
-        assertUserEntered(TOD_SLOAN);
-        assertBuffer(TOD_SLOAN);
-    }
-
-    public void testChangeSuggestedToEmpty() {
-        final String half = RUBY_MURRAY.substring(0, RUBY_MURRAY.length() / 2);
-        setSuggested(RUBY_MURRAY);
-        insertAtCursor(half);
-        setSuggested(null);
-        assertUserEntered(half);
-        assertBuffer(half);
-    }
-
-    public void testChangeSuggestedToEmptyFromUserEntered() {
-        setSuggested(RUBY_MURRAY);
-        insertAtCursor(RUBY_MURRAY);
-        setSuggested(null);
-        assertUserEntered(RUBY_MURRAY);
-        assertBuffer(RUBY_MURRAY);
-    }
-
-    public void typeNonSuggestedThenDelete() {
-        final String half = RUBY_MURRAY.substring(0, RUBY_MURRAY.length() / 2);
-        assertCursorPos(0);
-        insertAtCursor(half);
-        assertCursorPos(half.length());
-        setSuggested(RUBY_MURRAY);
-        insertAtCursor('x');
-        assertBuffer(half + "x");
-        deleteBeforeCursor(1);
-        assertUserEntered(half);
-        assertBuffer(RUBY_MURRAY);
-    }
-
-    public void testDeleteMultipleFromSuggested() {
-        final String twoThirds = RUBY_MURRAY.substring(0, (RUBY_MURRAY.length() * 2) / 3);
-        setSuggested(RUBY_MURRAY);
-        insertAtCursor(twoThirds);
-        assertCursorPos(twoThirds.length());
-        // select some of the text just entered:
-        Selection.setSelection(mString, RUBY_MURRAY.length() / 3, twoThirds.length());
-        // and delete it:
-        replaceSelection("");
-        assertCursorPos(RUBY_MURRAY.length() / 3);
-        assertUserEntered(RUBY_MURRAY.substring(0, RUBY_MURRAY.length() / 3));
-        assertBuffer(RUBY_MURRAY);
-    }
-
-    public void testDeleteMultipleToFormSuggested() {
-        final String pref = commonPrefix(RUBY_TUESDAY, RUBY_MURRAY);
-        final int extra = (RUBY_TUESDAY.length() - pref.length()) / 2;
-        setSuggested(RUBY_MURRAY);
-        insertAtCursor(RUBY_TUESDAY.substring(0, pref.length() + extra));
-        assertCursorPos(pref.length() + extra);
-        // select and delete extra characters, leaving just prefix
-        Selection.setSelection(mString, pref.length(), pref.length() + extra);
-        replaceSelection("");
-        assertCursorPos(pref.length());
-        assertBuffer(RUBY_MURRAY);
-        assertUserEntered(pref);
-    }
-
-    public void testBackspaceWithinUserTextFromSuggested() {
-        StringBuffer half = new StringBuffer(RUBY_MURRAY.substring(0, RUBY_MURRAY.length() / 2));
-        insertAtCursor(half.toString());
-        int backSpaceFrom = half.length() / 2;
-        Selection.setSelection(mString, backSpaceFrom);
-        deleteBeforeCursor(1);
-        assertCursorPos(backSpaceFrom - 1);
-        half.delete(backSpaceFrom - 1, backSpaceFrom);
-        assertUserEntered(half.toString());
-        assertBuffer(half.toString());
-    }
-
-    public void testInsertWithinUserTextToFormSuggested() {
-        final String half = RUBY_MURRAY.substring(0, RUBY_MURRAY.length() / 2);
-        StringBuffer initial = new StringBuffer(half);
-        int pos = initial.length() / 2;
-        char toInsert = initial.charAt(pos);
-        initial.delete(pos, pos + 1);
-        insertAtCursor(initial.toString());
-        setSuggested(RUBY_MURRAY);
-        assertUserEntered(initial.toString());
-        assertBuffer(initial.toString());
-        Selection.setSelection(mString, pos);
-        insertAtCursor(toInsert);
-        assertCursorPos(pos + 1);
-        assertUserEntered(half);
-        assertBuffer(RUBY_MURRAY);
-    }
-
-    public void testEnterTextBeyondSuggested() {
-        setSuggested(RUBY_MURRAY);
-        int i = RUBY_MURRAY.length() / 2;
-        insertAtCursor(RUBY_MURRAY.substring(0, i));
-        String query = RUBY_MURRAY + EXTRA_USER_TEXT;
-        for (; i < query.length(); ++i) {
-            assertUserEntered(query.substring(0, i));
-            if (i <= RUBY_MURRAY.length()) {
-                assertBuffer(RUBY_MURRAY);
-            }
-            insertAtCursor(query.charAt(i));
-        }
-        assertUserEntered(query);
-    }
-
-    public void testDeleteFromLongerThanSuggested() {
-        setSuggested(RUBY_MURRAY);
-        final String entered = RUBY_MURRAY + EXTRA_USER_TEXT;
-        insertAtCursor(entered);
-        for (int i = entered.length(); i > (RUBY_MURRAY.length() / 2); --i) {
-            assertCursorPos(i);
-            assertUserEntered(entered.substring(0, i));
-            if (i <= RUBY_MURRAY.length()) {
-                assertBuffer(RUBY_MURRAY);
-            }
-            deleteBeforeCursor(1);
-        }
-    }
-
-    public void testReplaceWithShorterToFormSuggested() {
-        final String pref = commonPrefix(RUBY_TUESDAY, RUBY_MURRAY);
-        final int extra = (RUBY_TUESDAY.length() - pref.length()) / 2;
-        setSuggested(RUBY_MURRAY);
-        insertAtCursor(RUBY_TUESDAY.substring(0, pref.length() + extra));
-        assertCursorPos(pref.length() + extra);
-        // select and replace extra characters, to match suggested
-        Selection.setSelection(mString, pref.length(), pref.length() + extra);
-        replaceSelection(RUBY_MURRAY.substring(pref.length(), pref.length() + extra - 1));
-        assertBuffer(RUBY_MURRAY);
-        assertUserEntered(RUBY_MURRAY.substring(0, pref.length() + extra - 1));
-    }
-
-    public void testReplaceWithSameLengthToFormSuggested() {
-        final String pref = commonPrefix(RUBY_TUESDAY, RUBY_MURRAY);
-        final int extra = (RUBY_TUESDAY.length() - pref.length()) / 2;
-        setSuggested(RUBY_MURRAY);
-        insertAtCursor(RUBY_TUESDAY.substring(0, pref.length() + extra));
-        assertCursorPos(pref.length() + extra);
-        // select and replace extra characters, to match suggested
-        Selection.setSelection(mString, pref.length(), pref.length() + extra);
-        replaceSelection(RUBY_MURRAY.substring(pref.length(), pref.length() + extra));
-        assertBuffer(RUBY_MURRAY);
-        assertUserEntered(RUBY_MURRAY.substring(0, pref.length() + extra));
-    }
-
-    public void testReplaceWithLongerToFormSuggested() {
-        final String pref = commonPrefix(RUBY_TUESDAY, RUBY_MURRAY);
-        final int extra = (RUBY_TUESDAY.length() - pref.length()) / 2;
-        setSuggested(RUBY_MURRAY);
-        insertAtCursor(RUBY_TUESDAY.substring(0, pref.length() + extra));
-        assertCursorPos(pref.length() + extra);
-        // select and replace extra characters, to match suggested
-        Selection.setSelection(mString, pref.length(), pref.length() + extra);
-        replaceSelection(RUBY_MURRAY.substring(pref.length(), pref.length() + extra + 1));
-        assertBuffer(RUBY_MURRAY);
-        assertUserEntered(RUBY_MURRAY.substring(0, pref.length() + extra + 1));
-    }
-
-    public void testMoveCursorIntoSuggested() {
-        final String half = RUBY_MURRAY.substring(0, RUBY_MURRAY.length() / 2);
-        insertAtCursor(half);
-        setSuggested(RUBY_MURRAY);
-        assertCursorPos(half.length());
-        Selection.setSelection(mString, half.length() + 1);
-        checkInvariant();
-        assertUserEntered(RUBY_MURRAY);
-    }
-
-    public void testMoveCursorWithinUserEntered() {
-        final String half = RUBY_MURRAY.substring(0, RUBY_MURRAY.length() / 2);
-        insertAtCursor(half);
-        setSuggested(RUBY_MURRAY);
-        assertCursorPos(half.length());
-        Selection.setSelection(mString, half.length() - 1);
-        checkInvariant();
-        assertUserEntered(half);
-    }
-
-    public void testSelectWithinSuggested() {
-        final String half = RUBY_MURRAY.substring(0, RUBY_MURRAY.length() / 2);
-        insertAtCursor(half);
-        setSuggested(RUBY_MURRAY);
-        assertCursorPos(half.length());
-        Selection.setSelection(mString, half.length() + 1, half.length() + 2);
-        checkInvariant();
-        assertUserEntered(RUBY_MURRAY);
-    }
-
-    public void testSelectStraddlingSuggested() {
-        final String half = RUBY_MURRAY.substring(0, RUBY_MURRAY.length() / 2);
-        insertAtCursor(half);
-        setSuggested(RUBY_MURRAY);
-        assertCursorPos(half.length());
-        Selection.setSelection(mString, half.length() - 1, half.length() + 1);
-        checkInvariant();
-        assertUserEntered(RUBY_MURRAY);
-    }
-
-    public void testSaveAndRestoreNoText() {
-        create2ndController();
-        Parcelable state = mController.saveInstanceState(AbsSavedState.EMPTY_STATE);
-        m2ndController.restoreInstanceState(state);
-        check2ndInvariant();
-        assertBuffer("", m2ndString);
-    }
-
-    public void testSaveAndRestoreWithSuggestedText() {
-        create2ndController();
-        setSuggested(TOD_SLOAN);
-        Parcelable state = mController.saveInstanceState(AbsSavedState.EMPTY_STATE);
-        m2ndController.restoreInstanceState(state);
-        check2ndInvariant();
-        assertBuffer(TOD_SLOAN, m2ndString);
-        assertUserEntered("", m2ndController);
-    }
-
-    public void testSaveAndRestoreWithUserEnteredAndSuggestedText() {
-        final String half = TOD_SLOAN.substring(0, TOD_SLOAN.length() / 2);
-        create2ndController();
-        setSuggested(TOD_SLOAN);
-        insertAtCursor(half);
-        Parcelable state = mController.saveInstanceState(AbsSavedState.EMPTY_STATE);
-        m2ndController.restoreInstanceState(state);
-        check2ndInvariant();
-        assertBuffer(TOD_SLOAN, m2ndString);
-        assertUserEntered(half, m2ndController);
-        assertCursorPos(half.length(), m2ndString);
-    }
-
-    public void testSaveAndRestoreWithNonSuggested() {
-        final String half = TOD_SLOAN.substring(0, TOD_SLOAN.length() / 2);
-        create2ndController();
-        setSuggested(RUBY_MURRAY);
-        insertAtCursor(half);
-        Parcelable state = mController.saveInstanceState(AbsSavedState.EMPTY_STATE);
-        m2ndController.restoreInstanceState(state);
-        check2ndInvariant();
-        assertBuffer(half, m2ndString);
-        assertUserEntered(half, m2ndController);
-        assertCursorPos(half.length(), m2ndString);
-    }
-
-    public void testSaveAndRestoreThenTypeSuggested() {
-        final String half = TOD_SLOAN.substring(0, TOD_SLOAN.length() / 2);
-        create2ndController();
-        set2ndSuggested(TOD_SLOAN);
-        insertAt2ndCursor(half);
-        insertAt2ndCursor('x');
-        Parcelable state = m2ndController.saveInstanceState(AbsSavedState.EMPTY_STATE);
-        mController.restoreInstanceState(state);
-        assertCursorPos(half.length() + 1);
-        // delete the x
-        deleteBeforeCursor(1);
-        assertCursorPos(half.length());
-        assertBuffer(TOD_SLOAN);
-        assertUserEntered(half);
-    }
-
-    public void testSuspendAndResumeCursorProcessing() {
-        final String half = TOD_SLOAN.substring(0, TOD_SLOAN.length() / 2);
-        setSuggested(TOD_SLOAN);
-        insertAtCursor(half);
-        mController.suspendCursorMovementHandling();
-        Selection.setSelection(mString, TOD_SLOAN.length());
-        Selection.setSelection(mString, half.length());
-        mController.resumeCursorMovementHandlingAndApplyChanges();
-        assertCursorPos(half.length());
-        assertUserEntered(half);
-        assertBuffer(TOD_SLOAN);
-    }
-
-    private static class BufferTextOwner implements TextOwner {
-
-        private final Editable mBuffer;
-
-        public BufferTextOwner(Editable buffer) {
-            mBuffer = buffer;
-        }
-
-        public void addTextChangedListener(TextWatcher watcher) {
-            mBuffer.setSpan(watcher , 0, mBuffer.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
-        }
-
-        public void removeTextChangedListener(TextWatcher watcher) {
-            mBuffer.removeSpan(watcher);
-        }
-
-        public Editable getText() {
-            return mBuffer;
-        }
-
-        public void setText(String text) {
-            mBuffer.replace(0, mBuffer.length(), text);
-        }
-
-    }
-
-}