diff --git a/res/drawable-hdpi/ic_desktop_holo_dark.png b/res/drawable-hdpi/ic_desktop_holo_dark.png
deleted file mode 100644
index 76fbb85..0000000
--- a/res/drawable-hdpi/ic_desktop_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_mobile.png b/res/drawable-hdpi/ic_mobile.png
deleted file mode 100644
index cd688c8..0000000
--- a/res/drawable-hdpi/ic_mobile.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_desktop_holo_dark.png b/res/drawable-mdpi/ic_desktop_holo_dark.png
deleted file mode 100644
index 1bb8120..0000000
--- a/res/drawable-mdpi/ic_desktop_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_mobile.png b/res/drawable-mdpi/ic_mobile.png
deleted file mode 100644
index 6cf4283..0000000
--- a/res/drawable-mdpi/ic_mobile.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_desktop_holo_dark.png b/res/drawable-xhdpi/ic_desktop_holo_dark.png
deleted file mode 100644
index 1689e9d..0000000
--- a/res/drawable-xhdpi/ic_desktop_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_mobile.png b/res/drawable-xhdpi/ic_mobile.png
deleted file mode 100644
index a055b07..0000000
--- a/res/drawable-xhdpi/ic_mobile.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/qc_menu_selector.xml b/res/drawable/qc_menu_selector.xml
deleted file mode 100644
index 1c7f13c..0000000
--- a/res/drawable/qc_menu_selector.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_pressed="true"
-        android:drawable="@drawable/list_selector_pressed_holo_dark" />
-    <item android:state_pressed="false" android:drawable="@drawable/clear" />
-</selector>
diff --git a/res/drawable/tab_nr.xml b/res/drawable/tab_nr.xml
deleted file mode 100644
index 4862294..0000000
--- a/res/drawable/tab_nr.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<!-- Used by browserbarbutton to show a clear background for the non pressed
-        state -->
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="oval">
-    <solid android:color="@color/qc_tab_nr"/>
-    <padding android:left="2dp" android:top="2dp"
-        android:right="2dp" android:bottom="2dp" />
-</shape>
diff --git a/res/layout/qc_menu_item.xml b/res/layout/qc_menu_item.xml
deleted file mode 100644
index 6c84aa6..0000000
--- a/res/layout/qc_menu_item.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<TextView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/title"
-    android:layout_width="@dimen/menu_width"
-    android:layout_height="@dimen/menu_height"
-    android:minHeight="44dip"
-    android:background="@drawable/qc_menu_selector"
-    android:textAppearance="?android:attr/textAppearanceMedium"
-    android:gravity="center_vertical"
-    android:paddingLeft="8dip"
-    android:paddingRight="8dip"
-    android:paddingTop="4dip"
-    android:paddingBottom="4dip"
-     />
diff --git a/res/layout/qc_tab.xml b/res/layout/qc_tab.xml
deleted file mode 100644
index af8d46f..0000000
--- a/res/layout/qc_tab.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:orientation="vertical"
-    android:background="@color/black"
-    android:padding="0dip"
-    >
-    <TextView android:id="@+id/title1"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:paddingLeft="8dip"
-        android:paddingRight="2dip"
-        android:paddingTop="1dip"
-        android:paddingBottom="1dip"
-        android:gravity="center_vertical"
-        android:singleLine="true"
-        android:ellipsize="marquee"
-        android:typeface="sans"
-        android:textSize="12sp"
-        android:textColor="#DDDDDD"
-        />
-    <ImageView
-        android:id="@+id/thumb"
-        android:layout_width="@dimen/qc_thumb_width"
-        android:layout_height="@dimen/qc_thumb_height"
-        android:layout_marginTop= "1dip"
-        android:layout_marginLeft= "1dip"
-        android:layout_marginRight= "1dip"
-        android:layout_marginBottom= "1dip"
-        android:src="@drawable/browser_thumbnail"
-        android:scaleType="centerInside"
-        />
-    <TextView android:id="@+id/title2"
-        android:layout_width="match_parent"
-        android:layout_height="20dip"
-        android:paddingLeft="8dip"
-        android:paddingRight="2dip"
-        android:gravity="center_vertical"
-        android:singleLine="true"
-        android:ellipsize="marquee"
-        android:typeface="sans"
-        android:textSize="12sp"
-        android:textColor="#DDDDDD"
-        />
-</LinearLayout>
diff --git a/res/layout/qc_tabs_view.xml b/res/layout/qc_tabs_view.xml
deleted file mode 100644
index accae68..0000000
--- a/res/layout/qc_tabs_view.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:padding="0dip"
-    >
-    <ImageView
-        android:id="@+id/icon"
-        android:layout_width="48dip"
-        android:layout_height="48dip"
-        />
-    <TextView android:id="@+id/label"
-        android:layout_height="24dip"
-        android:layout_width="24dip"
-        android:layout_alignParentRight="true"
-        android:layout_alignParentBottom="true"
-        android:gravity="center_horizontal|center_vertical"
-        android:typeface="sans"
-        android:textSize="12sp"
-        android:textStyle="bold"
-        android:textColor="#ffffff"
-        android:background="@drawable/tab_nr"
-        />
-</RelativeLayout>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 776ee46..93a97f0 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Toeganklikheid"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Teksgrootte"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Vinnige kontroles"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Gly duim van linker- of regterrand om die kitskontroles vinnig oop te maak en program- en URL-balke te versteek"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Gebruik Google Instant tydens Google-soektogte om resultate te wys terwyl jy tik (dit kan dataverbruik verhoog)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Volskerm"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index c04ca90..e53b59e 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"ተደራሽነት"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"የፅሁፍ መጠን"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"ቤተ ሙከራዎች"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"ፈጣን መቆጣጠሪያዎች"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"ፈጣን መቆጣጠሪያዎችን ለመክፈት እና መተግበሪያ እና URL አሞሌዎችን ለመደበቅ አውራ ጣትን ከግራ ወይም ከቀኝ ጫፍ ያንሸራትቱ"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"የGoogle ፈጣን"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"እየተየቡ(የውሂብ አጠቃቀም ይጨምራል) ውጤቶችን ለመሳየት የGoogle ፍለጋን ሲጠቀሙ የGoogle ፈጣንን ይጠቀሙ።"</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"ሙሉ ማያ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 0abd269..54050ad 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -279,8 +279,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"إمكانية الدخول"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"حجم النص"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"الميزات الاختبارية"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"عناصر التحكم السريعة"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"مرر الإبهام من الحافة اليسرى أو الحافة اليمنى لفتح عناصر التحكم السريع وإخفاء شريط التطبيقات وشريط عناوين URL"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"بحث Google الفوري"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"استخدم بحث Google الفوري عندما تستخدم بحث Google, لإظهار النتائج أثناء الكتابة (يمكن أن يزيد ذلك من استخدام البيانات)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"ملء الشاشة"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 5c0926a..d29f185 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Даступнасць"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Памер тэксту"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Хуткае кіраванне"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Правядзiце пальцам з левага цi правага краю, каб адкрыць Панэль iнструментаў i схаваць прыкладанне i панэлi з URL-адрасамi"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Жывы пошук Google"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Карыстацца Жывым пошукам пры пошуку Google для паказу вынікаў па меры ўводу (гэта можа павялічыць выкарыстанне дадзеных)"</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Поўнаэкранны рэжым"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index dd9f085..608c221 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Достъпност"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Размер на текста"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Лаборатория"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Бързи контроли"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Плъзнете палец отляво/отдясно. Отварят се бързи контроли. Лентата с приложения и URL се скрива"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Динамично търсене"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Използвайте Google Динамично търсене, за да се показват резултати, докато пишете (може да увеличи употребата на данни)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Цял екран"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index f942fdf..9b3afa1 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Accessibilitat"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Mida del text"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Controls ràpids"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Fes lliscar el dit cap a la dreta o cap a l\'esquerra per obrir els controls ràpids i per amagar les barres d\'aplicacions i d\'URL"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Utilitza Google Instant quan utilitzis la Cerca de Google per mostrar resultats mentre escrius (augmenta l\'ús de dades)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Pantalla completa"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index c0eeacd..9f8bc5f 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Usnadnění"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Velikost textu"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Laboratoř Google"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Rychlé ovládací prvky"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Posunutím prstu od levého nebo pravého okraje zobrazíte rychlé ovládací prvky a skryjete panely aplikací a adresy URL"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Dynamické vyhledávání Google"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Dynamické vyhledávání ve Vyhledávání Google zobrazuje výsledky již při zadávání dotazu. (Může se zvýšit množství přenesených dat.)"</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Celá obrazovka"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 0d99709..bff97c3 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Tilgængelighed"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Tekststørrelse"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Hurtig betjening"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Lad tommelfingeren glide fra venstre eller højre kant for at åbne hurtig betjening og skjule app- og webadresse-bjælker"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Direkte"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Brug Google Direkte, når du søger på Google for at få vist resultater ved indtastning (kan forøge dataforbruget)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Fuld skærm"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index a892a4a..48d261c 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Bedienungshilfen"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Textgröße"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Schnellsteuerung"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Daumen vom linken oder rechten Rand aus ziehen, um Schnellsteuerung zu öffnen und App- und URL-Leisten auszublenden"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Nutzen Sie Google Instant bei der Google-Suche. Ergebnisse werden bei Eingabe angezeigt - ggf. mehr Speicher erforderlich."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Vollbild"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index ec62263..bb73bea 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Προσβασιμότητα"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Μέγεθος κειμένου"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Εργαστήρια"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Στοιχεία γρήγορου ελέγχου"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Σύρ. το δείκ. από δεξ. ή αρ. για άν. των γρ. στ. ελ. και απόκ. εφαρ. και γρ. URL"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Χρησιμοποιήστε το Instant μαζί με την Αναζήτηση για να εμφανίζονται αποτελ. καθώς πληκτρολ. (πιθανή αύξηση δεδομένων)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Πλήρης οθόνη"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 5a65b4b..a72b7bd 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -265,8 +265,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Accessibility"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Text size"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Quick controls"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Slide thumb from the left or right edge to open quick controls and hide app and URL bars"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Use Google Instant when you use Google Search, to show results as you type (this can increase data use)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Full screen"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index ad3e6d8..b7993d0 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Accesibilidad"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Tamaño de la letra"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Controles rápidos"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Desliza el dedo a la izquierda o la derecha para abrir controles rápidos y ocultar barras de aplicaciones y URL"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Usa Google Instant con Búsq. de Google para que los resultados aparezcan mientras tipeas (esto puede aumentar el uso de datos)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Pantalla completa"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index e4d7dc6..a355b2b 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -279,8 +279,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Accesibilidad"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Tamaño de la letra"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Controles rápidos"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Deslizar el dedo a la izquierda o la derecha para abrir controles rápidos y ocultar barras de aplicaciones y URL"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Con Google Instant, aparecerán resultados de búsqueda de Google a medida que escribas (puede aumentar el uso de datos)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Pantalla completa"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 3a27d1e..41aac23 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Juurdepääsetavus"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Teksti suurus"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Laborid"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Kiirnupud"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Kiirn. avamiseks, rak. ja URL-riba peitmiseks libistage pöidlaga v või p serval."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Kui kasutate Google Searchi, siis kasutage ka Google Instanti tulemuste nägemiseks tippimise ajal (see võib suurendada andmemahtu)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Täisekraan"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index ab53c36..586515e 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"قابلیت دسترسی"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"اندازه نوشتار"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"کنترل‌های سریع"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"برای باز کردن کنترل‌های سریع و پنهان کردن برنامه‌ها و نوارهای URL انگشت شست را از لبه چپ یا راست بلغزانید"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"هنگام استفاده از جستجوی Google، برای نمایش نتایج در حین تایپ از Google Instant استفاده کنید (ممکن است مصرف داده بالا برود)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"تمام صفحه"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 368e76b..356e53e 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Esteettömyys"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Tekstin koko"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Pikasäätimet"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Avaa pika-aset. ja piilota sov. &amp; URL-palk. liu\'uttamalla peukaloa vas. tai oik."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Käyttämällä Google Instantia hakiessasi näet tuloksia jo hakua kirjoittaessasi (tämä voi kasvattaa tiedonsiirron määrää)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Koko ruutu"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 12386a4..b9c327a 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Accessibilité"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Taille de la police"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Commandes rapides"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Faites glisser votre pouce vers droite ou gauche pour ouvrir les commandes rapides et masquer les barres des applis/URL."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Recherche instantanée Google"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Affichez plus de résultats lors de la saisie avec la recherche instantanée Google. Peut utiliser plus de données."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Plein écran"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index f17266d..e90817d 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -278,8 +278,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"पहुंच-योग्यता"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"पाठ का आकार"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"लैब"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"त्‍वरित नियंत्रण"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"त्‍वरित नियंत्रण खोलने हेतु अंगूठे को बाएं या दाएं किनारे की ओर स्‍लाइड करें और एप्‍लि. और URL बार छुपाएं"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google झटपट"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Google खोज का उपयोग करते समय आपके लिखते ही परिणाम प्रदर्शित करने के लिए Google झटपट का उपयोग करें (इससे उपयोग किए गए डेटा की मात्रा बढ़ सकती है)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"फ़ुलस्‍क्रीन"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 9a578ff..15c3da9 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Dostupnost"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Veličina teksta"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Brze kontrole"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Klizite od lijevog/desnog ruba za brze kontrole i skrivanje traka aplik./URL-ova"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Kada u Google Pretraživanju upotrebljavate Google Instant, rezultati se prikazuju dok tipkate (promet podataka može porasti)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Puni zaslon"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 15bc8f0..2325f74 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Kisegítő lehetőségek"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Szöveg mérete"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Gyorsbeállítások"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Csúsztassa hüvelykujját a bal vagy jobb oldalra a gyorsbeállítások megnyitásához, és az alkalmazás- és URL-sávok elrejtéséhez"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"A Google-keresésnél használja a Google Instantot, és a találatok gépelés közben megjelennek (az adatforgalom nőhet)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Teljes képernyő"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index cf77bff..50a6064 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Aksesibilitas"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Ukuran teks"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Kontrol cepat"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Geser jempol dari ujung kiri atau kanan untuk membuka kontrol cepat dan menyembunyikan aplikasi dan bilah URL"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instan"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Gunakan Google Instan di Google Penelusuran agar hasilnya tampil selagi mengetik (ini dapat menambah pemakaian data)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Layar penuh"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 3d81b9b..1a9512f 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Accessibilità"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Dimensioni testo"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Controlli rapidi"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Apri i controlli rapidi per nascondere le barre delle applicazioni e degli URL."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Usa Google Instant con Ricerca Google per visualizzare i risultati mentre digiti (può aumentare l\'uso dei dati)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Schermo intero"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 2fa0f15..011c3f0 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"נגישות"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"גודל טקסט"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Google Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"פקדים מהירים"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"החלק אצבע מהקצה הימני או השמאלי כדי לפתוח במהירות פקדים ולהסתיר סרגלי יישום וכתובת אתר"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"השתמש ב-Google Instant כאשר אתה משתמש בחיפוש Google, כדי להציג תוצאות בעת ההקלדה (פעולה זו יכולה להגדיל שימוש בנתונים)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"מסך מלא"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 9a175ba..4fff052 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"ユーザー補助"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"文字サイズ"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"クイックコントロール"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"クイックコントロールを開くには左端または右端から親指をスライドさせます"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Googleインスタント検索"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Google検索時にGoogleインスタント検索を使用すると、入力中に結果が表示されます（データの使用量が増えることがあります）。"</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"全画面"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 9a9d2a8..38731f3 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"접근성"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"텍스트 크기"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"실험실"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"빠른 컨트롤"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"빠른 컨트롤을 열어 앱과 URL 표시줄을 숨기려면 왼쪽이나 오른쪽 끝에서 엄지로 슬라이드하세요."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google 순간 검색"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Google 검색을 사용할 때 Google 순간 검색을 사용하면 입력하는 동안 결과가 표시됩니다(데이터 사용이 증가될 수 있음)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"전체화면"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index b5938a2..8057b86 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Pasiekiamumas"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Teksto dydis"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Laboratorijos"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Spartieji valdikliai"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Nykšč. slysk. kair. ar deš. kraš., atidar. vald., paslėpt. progr. bei URL juost."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Intuityvioji „Google“ paieška"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Kai naud. „Google“ paiešką, naud. Int. „Google“ paiešką, kad renk. tekst. b. rodomi rezult. (tai g. padid. duom. naud.)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Visas ekranas"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 8147801..23ca419 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Pieejamība"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Teksta lielums"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Laboratorijas"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Ātrās piekļuves vadīklas"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Velciet ar īkšķi no kreisās vai labās malas, lai atvērtu ātrās vadīklas un paslēptu lietotņu un URL joslas"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google dinamiskā meklēšana"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Izmantojiet Google dinamisko meklēšanu, kad lietojat Google meklēšanu, lai redzētu rezultātus rakstīšanas laikā (var tikt izmantots vairāk datu)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Pilnekrāna režīms"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 74e664b..39f7970 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Kebolehaksesan"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Saiz teks"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Makmal"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Kawalan pantas"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Luncurkan ibu jari dari tepi kiri atau kanan untuk membuka kawalan cepat dan menyembunyikan aplikasi serta bar URL."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Guna Google Instant bila anda guna Carian Google, utk tunjuk hasil bila anda menaip (boleh menambah penggunaan data)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Skrin penuh"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index f80f0b5..b5f7adb 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Tilgjengelighet"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Tekststørrelse"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Prøvefunksjoner"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Hurtigkontroller"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Skyv tommelen fra venstre eller høyre kant for å åpne hurtigkontroller og skjule app- og nettadresseradene"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Bruk Google Instant når du bruker Google Søk for å vise resultater mens du skriver (dette kan gi økt databruk)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Fullskjerm"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 64188c6..0e29079 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Toegankelijkheid"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Tekstgrootte"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Snelle bedieningselementen"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Duim schuiven vanaf zijkant: besturingselementen openen en balken verbergen."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Gebruik Google Dynamisch zoeken als u Google Zoeken gebruikt, voor resultaten tijdens het typen (kan resulteren in meer dataverbruik)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Volledig scherm"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index e9a8ff7..c3a81f5 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Ułatwienia dostępu"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Rozmiar tekstu"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Laboratorium"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Szybkie sterowanie"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Przesuń palcem od bocznej krawędzi, by wyświetlić ukryte opcje sterowania i pasek adresu"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Wyszukiwanie dynamiczne Google"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Użyj wyszukiwania dynamicznego Google, aby uzyskiwać wyniki podczas pisania (może być pobierana większa ilość danych)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Pełny ekran"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index f6bd209..4652a37 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Acessibilidade"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Tamanho do texto"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Controlos rápidos"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Deslize o polegar na margem esquerda ou direita para abrir os controlos rápidos e ocultar as barras de aplicação e URL"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instantâneo"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Utilize Google Instantâneo na Pesquisa do Google para mostrar resultados quando escreve (pode aumentar utiliz. dados)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Ecrã inteiro"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 2143418..e8d34bf 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Acessibilidade"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Tamanho do texto"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Google Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Controles rápidos"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Deslize da esq. ou dir. p/ abrir contr. rápidos e ocultar aplic. e barras de URL"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Use o Google Instant ao usar a Pesquisa Google para exibir resultados enquanto digita (o uso de dados pode aumentar)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Tela cheia"</string>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index 19c322a..5b60a2e 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -375,10 +375,6 @@
     <skip />
     <!-- no translation found for pref_lab_title (5571091610359629423) -->
     <skip />
-    <!-- no translation found for pref_lab_quick_controls (3267606522082281367) -->
-    <skip />
-    <!-- no translation found for pref_lab_quick_controls_summary (3149664132600968775) -->
-    <skip />
     <!-- no translation found for pref_use_instant_search (1119176077760723740) -->
     <skip />
     <!-- no translation found for pref_use_instant_search_summary (839320474961917522) -->
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index fafbfb7..27ec866 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Accesibilitate"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Dimensiune text"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Laborator"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Comenzi rapide"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Glisaţi de la st. la dr. pt. desch. comenzi rapide/ascundere bare aplicaţii/URL"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Utilizaţi Google Instant în Căutarea Google şi vedeţi rezultate în timp ce introd. text (creşte vol. de date utilizate)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Ecran complet"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index c3bc5e7..faf0731 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -278,8 +278,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Специальные возможности"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Размер текста"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Лаборатория Google"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Панель инструментов"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Чтобы открыть панель инструментов, начните перелистывать страницу справа или слева"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Живой поиск"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"В Живом поиске результаты появляются прямо при вводе текста (возможно увеличение объема передаваемых данных)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Во весь экран"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 06f3dea..af3de35 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Zjednodušenie"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Veľkosť písma"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Rýchle ovládacie prvky"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Posunutím prsta od ľavého alebo pravého okraja zobrazíte rýchle ovládacie prvky a skryjete panely aplikácií a adries URL"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Dynamické vyhľadávanie Google"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Ak chcete zobrazovať výsl. počas zadávania textu, použite Dynamické vyhľ. Google (môže sa zvýšiť spotr. údajov)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Celá obrazovka"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index edd1e0c..45d4746 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Nastavitve za osebe s posebnimi potrebami"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Velikost besedila"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Laboratoriji"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Hitri kontrolniki"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Povlecite od levega ali desnega roba, da odprete hitre kontrolnike in skrijete vrstice s programi in URL-ji"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Dinamično iskanje"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Če uporabljate Google Dinamično iskanje, se rezultati prikazujejo že med tipkanjem, kar lahko poveča porabo podatkov."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Celozaslonsko"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 2899fa1..507128b 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Приступачност"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Величина текста"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Брзе контроле"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Превлачење с леве или десне ивице отвара брзе контроле и крије апликације и URL адресе"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google инстант"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Користите Google инстант са Google претрагом да бисте видели резултате док куцате (то може да повећа употребу података)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Цео екран"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 3ae3e49..4d72e15 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Tillgänglighet"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Textstorlek"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Snabbkontroller"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Dra från vänster/höger för att öppna kontrollerna och dölja app- och adressfält"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Använd Google Instant när du söker på Google så får du resultat medan du skriver (detta kan öka dataanvändningen)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Helskärm"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 316ecdf..9db3dba 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Ufikiaji"</string>
     <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 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-sw600dp/dimensions.xml b/res/values-sw600dp/dimensions.xml
index 68235c9..0b5e08f 100644
--- a/res/values-sw600dp/dimensions.xml
+++ b/res/values-sw600dp/dimensions.xml
@@ -25,16 +25,8 @@
     <!-- For the combined Bookmarks History view -->
     <dimen name="combo_paddingTop">50dip</dimen>
     <dimen name="combo_horizontalSpacing">8dip</dimen>
-    <dimen name="qc_radius_start">75dip</dimen>
-    <dimen name="qc_radius_increment">90dip</dimen>
-    <dimen name="qc_slop">15dip</dimen>
-    <dimen name="qc_touch_offset">15dip</dimen>
-    <dimen name="qc_tab_title_height">30dip</dimen>
-    <dimen name="qc_thumb_width">240dip</dimen>
-    <dimen name="qc_thumb_height">160dip</dimen>
-    <dimen name="qc_item_size">48dip</dimen>
     <dimen name="suggest_item_padding">8dp</dimen>
     <dimen name="toolbar_height">48dip</dimen>
-    <dimen name="tab_thumbnail_width">@dimen/qc_thumb_width</dimen>
-    <dimen name="tab_thumbnail_height">@dimen/qc_thumb_height</dimen>
+    <dimen name="tab_thumbnail_width">240dip</dimen>
+    <dimen name="tab_thumbnail_height">160dip</dimen>
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 40261e0..6f4b510 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -278,8 +278,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"การเข้าถึง"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"ขนาดข้อความ"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"ห้องทดลอง"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"การควบคุมอย่างรวดเร็ว"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"เลื่อนนิ้วจากขอบซ้ายหรือขวาเพื่อเปิดการควบคุมอย่างรวดเร็วและซ่อนแถบแอปฯ และ URL"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google ค้นหาทันใจ"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"ใช้ Google ค้นหาทันใจเมื่อคุณใช้ Google Search เพื่อแสดงผลการค้นหาในขณะที่คุณพิมพ์ (ซึ่งสามารถเพิ่มการใช้งานข้อมูล)"</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"เต็มหน้าจอ"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index c4a6122..cc7b050 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -279,8 +279,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Pagiging Naa-access"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Laki ng teksto"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Mga Lab"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Mga mabilis na pagkontrol"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"I-slide ang hinlalaki mula sa kaliwa o kanang gilid upang buksan ang mga mabilisang kontrol at itago ang app at mga URL bar"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Gamit Google Instant pag gumamit ka Google Search, para magpakita resulta habang type ka (mapataas nito paggamit data)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Fullscreen"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 1b8986f..96c1906 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -278,8 +278,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Erişilebilirlik"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Metin boyutu"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Labs"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Hızlı denetimler"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Hızlı denetimleri açmak, uygulama ve URL çubuklarını gizlemek için baş parmağınızı sol veya sağ kenara kaydırın."</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Anında Arama"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Yazarken sonuçların görüntülenmesi için, Google Arama\'yı kullanırken Google Anında Arama\'dan yararlanın (veri kullanımını artırabilir)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Tam ekran"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 9372226..73fdd3d 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Доступність"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Розмір тексту"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Лабораторії"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Швидкі елементи керування"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Гортайте зліва чи справа, щоб відкр. швидкі елем.керування і схов. панелі програми й URL"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Миттєвий пошук Google"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Використовуйте Миттєвий пошук у пошуку Google для відображ. результ. під час введення (може збільшитись викорис. даних)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Повноекранний режим"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 7a47a43..c3b3b08 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -278,8 +278,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Hỗ trợ 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>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Các điều khiển nhanh"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Trượt ngón cái từ cạnh trái hoặc phải để mở k.soát nhanh, ẩn các thanh ƯD và URL"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"Sử dụng Google Instant khi bạn sử dụng Tìm kiếm của Google để hiển thị kết quả khi nhập (điều này có thể tăng việc sử dụng dữ liệu)."</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"Toàn màn hình"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index db7fa89..c2114cd 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -278,8 +278,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"辅助功能"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"文字大小"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"实验室"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"快速控制"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"从左侧或右侧边缘滑动拇指可打开快速控件并隐藏应用和网址栏"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google 即搜即得"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"借助 Google 即搜即得，您可以在使用 Google 搜索时一边键入内容一边查看结果（此功能可能会增加数据使用量）。"</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"全屏"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 499a1ee..08895c9 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -275,8 +275,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"協助工具"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"文字大小"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"實驗室"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"快速控制介面"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"由左側或右側邊緣滑動姆指，即可開啟快速控制介面並隱藏應用程式和網址列"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google 互動智慧搜尋"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"使用「Google 搜尋」時啟用「Google 互動智慧搜尋」功能，您輸入查詢時可以即時獲得顯示搜尋結果 (這會增加資料傳輸量)。"</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"全螢幕"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 1e7c5e0..c54c902 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"協助工具"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"文字大小"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"研究室"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"快速控制介面"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"姆指從左側邊緣或右側邊緣滑動，即可開啟快速控制項並隱藏應用程式和網址列"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google 互動智慧搜尋"</string>
     <string name="pref_use_instant_search_summary" msgid="839320474961917522">"使用「Google 搜尋」時啟用「Google 互動智慧搜尋」功能，一邊打字一邊顯示搜尋結果 (這會增加資料傳輸量)。"</string>
     <string name="pref_lab_fullscreen" msgid="8173609016657987973">"全螢幕"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index a2b1399..87620e1 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -264,8 +264,6 @@
     <string name="pref_accessibility_title" msgid="5127836981587423215">"Ukufinyeleleka"</string>
     <string name="pref_font_size_category" msgid="6683754355084218254">"Usayizi wombhalo"</string>
     <string name="pref_lab_title" msgid="5571091610359629423">"Amalebhu"</string>
-    <string name="pref_lab_quick_controls" msgid="3267606522082281367">"Izilawuli ezisheshayo"</string>
-    <string name="pref_lab_quick_controls_summary" msgid="3149664132600968775">"Habisa isithupha sisuke echosheni langakwesokunxele noma elesokudla ukuvula izilawuli bese ufihla insiza kanye naabhazi e-URL"</string>
     <string name="pref_use_instant_search" msgid="1119176077760723740">"Google Instant"</string>
     <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>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index ffee48b..c1c5df9 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -31,11 +31,6 @@
     <color name="bookmarkListFaviconBackground">#23ffffff</color>
     <color name="tabFaviconBackground">#FF555555</color>
     <color name="tabFocusHighlight">#FF99CC00</color>
-    <color name="qcMenuBackground">#C0000000</color>
-    <color name="qc_normal">#E02A96BC</color>
-    <color name="qc_selected">#E0FF8800</color>
-    <color name="qc_sub">#F01A5B73</color>
-    <color name="qc_tab_nr">#F033B5E5</color>
     <color name="tabViewTitleBackground">#D0000000</color>
     <color name="navtab_bg">#80606060</color>
 </resources>
diff --git a/res/values/dimensions.xml b/res/values/dimensions.xml
index 4f8a7cb..3d42508 100755
--- a/res/values/dimensions.xml
+++ b/res/values/dimensions.xml
@@ -31,14 +31,6 @@
     <dimen name="widgetItemMinHeight">48dip</dimen>
     <dimen name="favicon_size">16dip</dimen>
     <dimen name="favicon_padded_size">20dip</dimen>
-    <dimen name="qc_radius_start">65dip</dimen>
-    <dimen name="qc_radius_increment">80dip</dimen>
-    <dimen name="qc_slop">10dip</dimen>
-    <dimen name="qc_touch_offset">15dip</dimen>
-    <dimen name="qc_tab_title_height">24dip</dimen>
-    <dimen name="qc_thumb_width">150dip</dimen>
-    <dimen name="qc_thumb_height">100dip</dimen>
-    <dimen name="qc_item_size">40dip</dimen>
     <dimen name="bookmark_widget_thumb_size">32dip</dimen>
     <dimen name="bookmark_widget_favicon_size">26dip</dimen>
     <!-- For the most visited page (we use px as these are adjusted by the browser) -->
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1b475b1..fbf9d62 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -642,11 +642,6 @@
     <string name="pref_font_size_category">Text size</string>
     <!-- Title for lab settings [CHAR LIMIT=25] -->
     <string name="pref_lab_title">Labs</string>
-    <!-- Title for lab quick controls feature [CHAR LIMIT=40] -->
-    <string name="pref_lab_quick_controls">Quick controls</string>
-    <!-- Summary for lab quick controls feature [CHAR LIMIT=120] -->
-    <string name="pref_lab_quick_controls_summary">
-        Slide thumb from the left or right edge to open quick controls and hide app and URL bars</string>
     <!-- Title for the "Instant search" lab feature [CHAR LIMIT=40] -->
     <string name="pref_use_instant_search">Google Instant</string>
     <!-- Summary for the "Instant search" lab feature [CHAR LIMIT=120] -->
diff --git a/res/xml-sw600dp/lab_preferences.xml b/res/xml-sw600dp/lab_preferences.xml
index a7151e0..541f0cb 100644
--- a/res/xml-sw600dp/lab_preferences.xml
+++ b/res/xml-sw600dp/lab_preferences.xml
@@ -16,9 +16,4 @@
 
 <PreferenceScreen
         xmlns:android="http://schemas.android.com/apk/res/android" >
-    <CheckBoxPreference
-        android:key="enable_quick_controls"
-        android:defaultValue="false"
-        android:title="@string/pref_lab_quick_controls"
-        android:summary="@string/pref_lab_quick_controls_summary" />
 </PreferenceScreen>
diff --git a/res/xml/lab_preferences.xml b/res/xml/lab_preferences.xml
index 3320cee..6912e7d 100644
--- a/res/xml/lab_preferences.xml
+++ b/res/xml/lab_preferences.xml
@@ -17,11 +17,6 @@
 <PreferenceScreen
         xmlns:android="http://schemas.android.com/apk/res/android" >
     <CheckBoxPreference
-        android:key="enable_quick_controls"
-        android:defaultValue="false"
-        android:title="@string/pref_lab_quick_controls"
-        android:summary="@string/pref_lab_quick_controls_summary" />
-    <CheckBoxPreference
         android:key="fullscreen"
         android:defaultValue="false"
         android:title="@string/pref_lab_fullscreen"
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index 666b997..354e901 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -110,10 +110,8 @@
     private View mVideoProgressView;
 
     private boolean mActivityPaused;
-    protected boolean mUseQuickControls;
     protected TitleBar mTitleBar;
     private NavigationBarBase mNavigationBar;
-    protected PieControl mPieControl;
     private boolean mBlockFocusAnimations;
 
     public BaseUi(Activity browser, UiController controller) {
@@ -206,21 +204,6 @@
         return false;
     }
 
-    @Override
-    public void setUseQuickControls(boolean useQuickControls) {
-        mUseQuickControls = useQuickControls;
-        mTitleBar.setUseQuickControls(mUseQuickControls);
-        if (useQuickControls) {
-            mPieControl = new PieControl(mActivity, mUiController, this);
-            mPieControl.attachToContainer(mContentView);
-        } else {
-            if (mPieControl != null) {
-                mPieControl.removeFromContainer(mContentView);
-            }
-        }
-        updateUrlBarAutoShowManagerTarget();
-    }
-
     // Tab callbacks
     @Override
     public void onTabDataChanged(Tab tab) {
@@ -290,14 +273,8 @@
         attachTabToContentView(tab);
         if (web != null) {
             // Request focus on the top window.
-            if (mUseQuickControls) {
-                mPieControl.forceToTop(mContentView);
-                web.setTitleBar(null);
-                mTitleBar.hide();
-            } else {
-                web.setTitleBar(mTitleBar);
-                mTitleBar.onScrollChanged();
-            }
+            web.setTitleBar(mTitleBar);
+            mTitleBar.onScrollChanged();
             tabToWaitFor = mActiveTab;
         }
         mTitleBar.bringToFront();
@@ -367,10 +344,8 @@
 
     protected void updateUrlBarAutoShowManagerTarget() {
         WebView web = mActiveTab != null ? mActiveTab.getWebView() : null;
-        if (!mUseQuickControls && web instanceof BrowserWebView) {
+        if (web instanceof BrowserWebView) {
             mUrlBarAutoShowManager.setTarget((BrowserWebView) web);
-        } else {
-            mUrlBarAutoShowManager.setTarget(null);
         }
     }
 
@@ -828,8 +803,7 @@
                 mTitleBar.setEnabled(true);
             }
 
-            if (!mUseQuickControls)
-                mTitleBar.setTranslationY(topControlsOffsetYPix);
+            mTitleBar.setTranslationY(topControlsOffsetYPix);
         }
     }
 
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index c033647..0318f8f 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -427,10 +427,6 @@
             if (mController != null && mController.getUi() != null) {
                 mController.getUi().setFullscreen(useFullscreen());
             }
-        } else if (PREF_ENABLE_QUICK_CONTROLS.equals(key)) {
-            if (mController != null && mController.getUi() != null) {
-                mController.getUi().setUseQuickControls(sharedPreferences.getBoolean(key, false));
-            }
         } else if (PREF_LINK_PREFETCH.equals(key)) {
             updateConnectionType();
         }
@@ -958,10 +954,6 @@
     // getter/setters for lab_preferences.xml
     // -----------------------------
 
-    public boolean useQuickControls() {
-        return mPrefs.getBoolean(PREF_ENABLE_QUICK_CONTROLS, false);
-    }
-
     public boolean useMostVisitedHomepage() {
         return HomeProvider.MOST_VISITED.equals(getHomePage());
     }
diff --git a/src/com/android/browser/BrowserWebViewFactory.java b/src/com/android/browser/BrowserWebViewFactory.java
index 6e18dc1..48ad91c 100644
--- a/src/com/android/browser/BrowserWebViewFactory.java
+++ b/src/com/android/browser/BrowserWebViewFactory.java
@@ -68,8 +68,6 @@
         // settings
         final BrowserSettings s = BrowserSettings.getInstance();
         s.startManagingSettings(w.getSettings());
-        if (s.useQuickControls())
-            w.updateTopControls(true, false, false);
 
         //Enable remote debugging by default
         WebView.setWebContentsDebuggingEnabled(true);
diff --git a/src/com/android/browser/NavigationBarBase.java b/src/com/android/browser/NavigationBarBase.java
index 100e8d7..ec18786 100644
--- a/src/com/android/browser/NavigationBarBase.java
+++ b/src/com/android/browser/NavigationBarBase.java
@@ -372,9 +372,6 @@
     void startEditingUrl(boolean clearInput, boolean forceIME) {
         // editing takes preference of progress
         setVisibility(View.VISIBLE);
-        if (mTitleBar.useQuickControls()) {
-            mTitleBar.getProgressView().setVisibility(View.GONE);
-        }
         if (!mUrlInput.hasFocus()) {
             mUrlInput.requestFocus();
         }
diff --git a/src/com/android/browser/NavigationBarTablet.java b/src/com/android/browser/NavigationBarTablet.java
index ebe40ea..a965e0a 100644
--- a/src/com/android/browser/NavigationBarTablet.java
+++ b/src/com/android/browser/NavigationBarTablet.java
@@ -229,11 +229,7 @@
                 showNavButtons();
             }
             showHideStar(mUiController.getCurrentTab());
-            if (mTitleBar.useQuickControls()) {
-                mSearchButton.setVisibility(View.GONE);
-            } else {
-                mSearchButton.setVisibility(View.VISIBLE);
-            }
+            mSearchButton.setVisibility(View.VISIBLE);
             updateUrlIcon();
         }
         mUrlContainer.setBackgroundDrawable(focus
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index 35e6ad3..d74e988 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -66,7 +66,6 @@
      */
     public PhoneUi(Activity browser, UiController controller) {
         super(browser, controller);
-        setUseQuickControls(BrowserSettings.getInstance().useQuickControls());
         mNavigationBar = (NavigationBarPhone) mTitleBar.getNavigationBar();
         mBrowser = browser;
     }
@@ -78,9 +77,6 @@
 
     @Override
     public void editUrl(boolean clearInput, boolean forceIME) {
-        if (mUseQuickControls) {
-            mTitleBar.setShowProgressOnly(false);
-        }
         //Do nothing while at Nav show screen.
         if (mShowNav) return;
         super.editUrl(clearInput, forceIME);
@@ -148,13 +144,8 @@
             return;
         }
         // Request focus on the top window.
-        if (mUseQuickControls) {
-            mPieControl.forceToTop(mContentView);
-            view.setTitleBar(null);
-            mTitleBar.setShowProgressOnly(true);
-        } else {
-            view.setTitleBar(mTitleBar);
-        }
+        view.setTitleBar(mTitleBar);
+
         // update nav bar state
         mNavigationBar.onStateChanged(StateListener.STATE_NORMAL);
         updateLockIconToLatest(tab);
@@ -184,12 +175,12 @@
             info.setVisible(false);
         }
         MenuItem newtab = menu.findItem(R.id.new_tab_menu_id);
-        if (newtab != null && !mUseQuickControls) {
+        if (newtab != null) {
             newtab.setVisible(false);
         }
         MenuItem incognito = menu.findItem(R.id.incognito_menu_id);
         if (incognito != null) {
-            incognito.setVisible(showingNavScreen() || mUseQuickControls);
+            incognito.setVisible(showingNavScreen());
         }
         MenuItem closeOthers = menu.findItem(R.id.close_other_tabs_id);
         if (closeOthers != null) {
@@ -244,9 +235,6 @@
     public void onActionModeFinished(boolean inLoad) {
         super.onActionModeFinished(inLoad);
         if (inLoad) {
-            if (mUseQuickControls) {
-                mTitleBar.setShowProgressOnly(true);
-            }
             showTitleBar();
         }
     }
diff --git a/src/com/android/browser/PieControl.java b/src/com/android/browser/PieControl.java
deleted file mode 100644
index 68f7983..0000000
--- a/src/com/android/browser/PieControl.java
+++ /dev/null
@@ -1,346 +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 android.app.Activity;
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.view.ViewGroup.LayoutParams;
-import org.codeaurora.swe.WebView;
-import android.widget.BaseAdapter;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.ImageView.ScaleType;
-import android.widget.TextView;
-
-import com.android.browser.R;
-import com.android.browser.UI.ComboViews;
-import com.android.browser.view.PieItem;
-import com.android.browser.view.PieMenu;
-import com.android.browser.view.PieStackView;
-import com.android.browser.view.PieMenu.PieView.OnLayoutListener;
-import com.android.browser.view.PieStackView.OnCurrentListener;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Controller for Quick Controls pie menu
- */
-public class PieControl implements PieMenu.PieController, OnClickListener {
-
-    protected Activity mActivity;
-    protected UiController mUiController;
-    protected PieMenu mPie;
-    protected int mItemSize;
-    protected TextView mTabsCount;
-    private BaseUi mUi;
-    private PieItem mBack;
-    private PieItem mForward;
-    private PieItem mRefresh;
-    private PieItem mUrl;
-    private PieItem mOptions;
-    private PieItem mBookmarks;
-    private PieItem mHistory;
-    private PieItem mAddBookmark;
-    private PieItem mNewTab;
-    private PieItem mIncognito;
-    private PieItem mClose;
-    private PieItem mShowTabs;
-    private PieItem mInfo;
-    private PieItem mFind;
-    private PieItem mShare;
-    private PieItem mRDS;
-    private TabAdapter mTabAdapter;
-
-    public PieControl(Activity activity, UiController controller, BaseUi ui) {
-        mActivity = activity;
-        mUiController = controller;
-        mItemSize = (int) activity.getResources().getDimension(R.dimen.qc_item_size);
-        mUi = ui;
-    }
-
-    public void stopEditingUrl() {
-        mUi.stopEditingUrl();
-    }
-
-    protected void attachToContainer(FrameLayout container) {
-        if (mPie == null) {
-            mPie = new PieMenu(mActivity);
-            LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT,
-                    LayoutParams.MATCH_PARENT);
-            mPie.setLayoutParams(lp);
-            populateMenu();
-            mPie.setController(this);
-        }
-        container.addView(mPie);
-    }
-
-    protected void removeFromContainer(FrameLayout container) {
-        container.removeView(mPie);
-    }
-
-    protected void forceToTop(FrameLayout container) {
-        if (mPie.getParent() != null) {
-            container.removeView(mPie);
-            container.addView(mPie);
-        }
-    }
-
-    protected void setClickListener(OnClickListener listener, PieItem... items) {
-        for (PieItem item : items) {
-            item.getView().setOnClickListener(listener);
-        }
-    }
-
-    @Override
-    public boolean onOpen() {
-        int n = mUiController.getTabControl().getTabCount();
-        mTabsCount.setText(Integer.toString(n));
-        Tab tab = mUiController.getCurrentTab();
-        if (tab != null) {
-            mForward.setEnabled(tab.canGoForward());
-        }
-        WebView view = mUiController.getCurrentWebView();
-        if (view != null) {
-            ImageView icon = (ImageView) mRDS.getView();
-            if (mUiController.getSettings().hasDesktopUseragent(view)) {
-                icon.setImageResource(R.drawable.ic_mobile);
-            } else {
-                icon.setImageResource(R.drawable.ic_desktop_holo_dark);
-            }
-        }
-        return true;
-    }
-
-    protected void populateMenu() {
-        mBack = makeItem(R.drawable.ic_back_holo_dark, 1);
-        mUrl = makeItem(R.drawable.ic_web_holo_dark, 1);
-        mBookmarks = makeItem(R.drawable.ic_bookmarks_holo_dark, 1);
-        mHistory = makeItem(R.drawable.ic_history_holo_dark, 1);
-        mAddBookmark = makeItem(R.drawable.ic_bookmark_on_holo_dark, 1);
-        mRefresh = makeItem(R.drawable.ic_refresh_holo_dark, 1);
-        mForward = makeItem(R.drawable.ic_forward_holo_dark, 1);
-        mNewTab = makeItem(R.drawable.ic_new_window_holo_dark, 1);
-        mIncognito = makeItem(R.drawable.ic_new_incognito_holo_dark, 1);
-        mClose = makeItem(R.drawable.ic_close_window_holo_dark, 1);
-        mInfo = makeItem(android.R.drawable.ic_menu_info_details, 1);
-        mFind = makeItem(R.drawable.ic_search_holo_dark, 1);
-        mShare = makeItem(R.drawable.ic_share_holo_dark, 1);
-        View tabs = makeTabsView();
-        mShowTabs = new PieItem(tabs, 1);
-        mOptions = makeItem(R.drawable.ic_settings_holo_dark, 1);
-        mRDS = makeItem(R.drawable.ic_desktop_holo_dark, 1);
-        mTabAdapter = new TabAdapter(mActivity, mUiController);
-        PieStackView stack = new PieStackView(mActivity);
-        stack.setLayoutListener(new OnLayoutListener() {
-            @Override
-            public void onLayout(int ax, int ay, boolean left) {
-                buildTabs();
-            }
-        });
-        stack.setOnCurrentListener(mTabAdapter);
-        stack.setAdapter(mTabAdapter);
-        mShowTabs.setPieView(stack);
-        setClickListener(this, mBack, mRefresh, mForward, mUrl, mFind, mInfo,
-                mShare, mBookmarks, mNewTab, mIncognito, mClose, mHistory,
-                mAddBookmark, mOptions, mRDS);
-        if (!BrowserActivity.isTablet(mActivity)) {
-            mShowTabs.getView().setOnClickListener(this);
-        }
-        // level 1
-        mPie.addItem(mOptions);
-        mOptions.addItem(mRDS);
-        mOptions.addItem(makeFiller());
-        mOptions.addItem(makeFiller());
-        mOptions.addItem(makeFiller());
-        mPie.addItem(mBack);
-        mBack.addItem(mRefresh);
-        mBack.addItem(mForward);
-        mBack.addItem(makeFiller());
-        mBack.addItem(makeFiller());
-        mPie.addItem(mUrl);
-        mUrl.addItem(mFind);
-        mUrl.addItem(mShare);
-        mUrl.addItem(makeFiller());
-        mUrl.addItem(makeFiller());
-        mPie.addItem(mShowTabs);
-        mShowTabs.addItem(mClose);
-        mShowTabs.addItem(mIncognito);
-        mShowTabs.addItem(mNewTab);
-        mShowTabs.addItem(makeFiller());
-        mPie.addItem(mBookmarks);
-        mBookmarks.addItem(makeFiller());
-        mBookmarks.addItem(makeFiller());
-        mBookmarks.addItem(mAddBookmark);
-        mBookmarks.addItem(mHistory);
-    }
-
-    @Override
-    public void onClick(View v) {
-        Tab tab = mUiController.getTabControl().getCurrentTab();
-        WebView web = tab.getWebView();
-        if (mBack.getView() == v) {
-            tab.goBack();
-        } else if (mForward.getView() == v) {
-            tab.goForward();
-        } else if (mRefresh.getView() == v) {
-            if (tab.inPageLoad()) {
-                web.stopLoading();
-            } else {
-                web.reload();
-            }
-        } else if (mUrl.getView() == v) {
-            mUi.editUrl(false, true);
-        } else if (mBookmarks.getView() == v) {
-            mUiController.bookmarksOrHistoryPicker(ComboViews.Bookmarks);
-        } else if (mHistory.getView() == v) {
-            mUiController.bookmarksOrHistoryPicker(ComboViews.History);
-        } else if (mAddBookmark.getView() == v) {
-            mUiController.bookmarkCurrentPage();
-        } else if (mNewTab.getView() == v) {
-            mUiController.openTabToHomePage();
-            mUi.editUrl(false, true);
-        } else if (mIncognito.getView() == v) {
-            mUiController.openIncognitoTab();
-            mUi.editUrl(false, true);
-        } else if (mClose.getView() == v) {
-            mUiController.closeCurrentTab();
-        } else if (mOptions.getView() == v) {
-            mUiController.openPreferences();
-        } else if (mShare.getView() == v) {
-            mUiController.shareCurrentPage();
-        } else if (mInfo.getView() == v) {
-            mUiController.showPageInfo();
-        } else if (mFind.getView() == v) {
-            mUiController.findOnPage();
-        } else if (mRDS.getView() == v) {
-            mUiController.toggleUserAgent();
-        } else if (mShowTabs.getView() == v) {
-            ((PhoneUi) mUi).showNavScreen();
-        }
-    }
-
-    private void buildTabs() {
-        final List<Tab> tabs = mUiController.getTabs();
-        mUi.getActiveTab().capture();
-        mTabAdapter.setTabs(tabs);
-        PieStackView sym = (PieStackView) mShowTabs.getPieView();
-        sym.setCurrent(mUiController.getTabControl().getCurrentPosition());
-    }
-
-    protected PieItem makeItem(int image, int l) {
-        ImageView view = new ImageView(mActivity);
-        view.setImageResource(image);
-        view.setMinimumWidth(mItemSize);
-        view.setMinimumHeight(mItemSize);
-        view.setScaleType(ScaleType.CENTER);
-        LayoutParams lp = new LayoutParams(mItemSize, mItemSize);
-        view.setLayoutParams(lp);
-        return new PieItem(view, l);
-    }
-
-    protected PieItem makeFiller() {
-        return new PieItem(null, 1);
-    }
-
-    protected View makeTabsView() {
-        View v = mActivity.getLayoutInflater().inflate(R.layout.qc_tabs_view, null);
-        mTabsCount = (TextView) v.findViewById(R.id.label);
-        mTabsCount.setText("1");
-        ImageView image = (ImageView) v.findViewById(R.id.icon);
-        image.setImageResource(R.drawable.ic_windows_holo_dark);
-        image.setScaleType(ScaleType.CENTER);
-        LayoutParams lp = new LayoutParams(mItemSize, mItemSize);
-        v.setLayoutParams(lp);
-        return v;
-    }
-
-    static class TabAdapter extends BaseAdapter implements OnCurrentListener {
-
-        LayoutInflater mInflater;
-        UiController mUiController;
-        private List<Tab> mTabs;
-        private int mCurrent;
-
-        public TabAdapter(Context ctx, UiController ctl) {
-            mInflater = LayoutInflater.from(ctx);
-            mUiController = ctl;
-            mTabs = new ArrayList<Tab>();
-            mCurrent = -1;
-        }
-
-        public void setTabs(List<Tab> tabs) {
-            mTabs = tabs;
-            notifyDataSetChanged();
-        }
-
-        @Override
-        public int getCount() {
-            return mTabs.size();
-        }
-
-        @Override
-        public Tab getItem(int position) {
-            return mTabs.get(position);
-        }
-
-        @Override
-        public long getItemId(int position) {
-            return position;
-        }
-
-        @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            final Tab tab = mTabs.get(position);
-            View view = mInflater.inflate(R.layout.qc_tab,
-                    null);
-            ImageView thumb = (ImageView) view.findViewById(R.id.thumb);
-            TextView title1 = (TextView) view.findViewById(R.id.title1);
-            TextView title2 = (TextView) view.findViewById(R.id.title2);
-            Bitmap b = tab.getScreenshot();
-            if (b != null) {
-                thumb.setImageBitmap(b);
-            }
-            if (position > mCurrent) {
-                title1.setVisibility(View.GONE);
-                title2.setText(tab.getTitle());
-            } else {
-                title2.setVisibility(View.GONE);
-                title1.setText(tab.getTitle());
-            }
-            view.setOnClickListener(new OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    mUiController.switchToTab(tab);
-                }
-            });
-            return view;
-        }
-
-        @Override
-        public void onSetCurrent(int index) {
-            mCurrent = index;
-        }
-
-    }
-
-}
diff --git a/src/com/android/browser/PreferenceKeys.java b/src/com/android/browser/PreferenceKeys.java
index 83dc371..6f2acd4 100644
--- a/src/com/android/browser/PreferenceKeys.java
+++ b/src/com/android/browser/PreferenceKeys.java
@@ -83,7 +83,6 @@
     // ----------------------
     // Keys for lab_preferences.xml
     // ----------------------
-    static final String PREF_ENABLE_QUICK_CONTROLS = "enable_quick_controls";
     static final String PREF_FULLSCREEN = "fullscreen";
 
     // ----------------------
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index d4d6cba..2254e4a 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -741,7 +741,7 @@
         if (getWebView() != null) {
             if (fullScreen)
                 getWebView().updateTopControls(true, false, true);
-            else if (!mSettings.useQuickControls())
+            else
                 getWebView().updateTopControls(true, true, true);
         }
 
diff --git a/src/com/android/browser/TabBar.java b/src/com/android/browser/TabBar.java
index 4078ba4..a4e039d 100644
--- a/src/com/android/browser/TabBar.java
+++ b/src/com/android/browser/TabBar.java
@@ -86,7 +86,6 @@
     private int mTabOverlap;
     private int mAddTabOverlap;
     private int mTabSliceWidth;
-    private boolean mUseQuickControls;
 
     public TabBar(Activity activity, UiController controller, XLargeUi ui) {
         super(activity);
@@ -135,12 +134,6 @@
         mTabs.updateLayout();
     }
 
-    void setUseQuickControls(boolean useQuickControls) {
-        mUseQuickControls = useQuickControls;
-        mNewTab.setVisibility(mUseQuickControls ? View.GONE
-                : View.VISIBLE);
-    }
-
     int getTabCount() {
         return mTabMap.size();
     }
@@ -160,9 +153,7 @@
         super.onMeasure(hspec, vspec);
         int w = getMeasuredWidth();
         // adjust for new tab overlap
-        if (!mUseQuickControls) {
-            w -= mAddTabOverlap;
-        }
+        w -= mAddTabOverlap;
         setMeasuredDimension(w, getMeasuredHeight());
     }
 
@@ -173,35 +164,22 @@
         int pt = getPaddingTop();
         int sw = mTabs.getMeasuredWidth();
         int w = right - left - pl;
-        if (mUseQuickControls) {
-            mButtonWidth = 0;
-        } else {
-            mButtonWidth = mNewTab.getMeasuredWidth() - mAddTabOverlap;
-            if (w-sw < mButtonWidth) {
-                sw = w - mButtonWidth;
-            }
+        mButtonWidth = mNewTab.getMeasuredWidth() - mAddTabOverlap;
+        if (w-sw < mButtonWidth) {
+            sw = w - mButtonWidth;
         }
         mTabs.layout(pl, pt, pl + sw, bottom - top);
         // adjust for overlap
-        if (!mUseQuickControls) {
-            mNewTab.layout(pl + sw - mAddTabOverlap, pt,
-                    pl + sw + mButtonWidth - mAddTabOverlap, bottom - top);
-        }
+        mNewTab.layout(pl + sw - mAddTabOverlap, pt,
+                pl + sw + mButtonWidth - mAddTabOverlap, bottom - top);
+
     }
 
     public void onClick(View view) {
         if (mNewTab == view) {
             mUiController.openTabToHomePage();
         } else if (mTabs.getSelectedTab() == view) {
-            if (mUseQuickControls) {
-                if (mUi.isTitleBarShowing() && !isLoading()) {
-                    mUi.stopEditingUrl();
-                    mUi.hideTitleBar();
-                } else {
-                    mUi.stopWebViewScrolling();
-                    mUi.editUrl(false, false);
-                }
-            } else if (mUi.isTitleBarShowing() && !isLoading()) {
+            if (mUi.isTitleBarShowing() && !isLoading()) {
                 mUi.stopEditingUrl();
                 mUi.hideTitleBar();
             } else {
diff --git a/src/com/android/browser/TitleBar.java b/src/com/android/browser/TitleBar.java
index 6c9130a..1ea4dad 100644
--- a/src/com/android/browser/TitleBar.java
+++ b/src/com/android/browser/TitleBar.java
@@ -55,7 +55,6 @@
     private AccessibilityManager mAccessibilityManager;
 
     private NavigationBarBase mNavBar;
-    private boolean mUseQuickControls;
     private SnapshotBar mSnapshotBar;
 
     //state
@@ -113,8 +112,7 @@
     }
 
     private void setFixedTitleBar() {
-        boolean isFixed = !mUseQuickControls
-                && !getContext().getResources().getBoolean(R.bool.hide_title);
+        boolean isFixed = !getContext().getResources().getBoolean(R.bool.hide_title);
 
         isFixed |= mAccessibilityManager.isEnabled();
         // If getParent() returns null, we are initializing
@@ -143,18 +141,6 @@
         return mUiController;
     }
 
-    public void setUseQuickControls(boolean use) {
-        mUseQuickControls = use;
-        setFixedTitleBar();
-        if (use) {
-            this.setVisibility(View.GONE);
-            hideTopControls();
-        } else {
-            this.setVisibility(View.VISIBLE);
-            enableTopControls();
-        }
-    }
-
     void setShowProgressOnly(boolean progress) {
         if (progress && !wantsToBeVisible()) {
             mNavBar.setVisibility(View.GONE);
@@ -179,7 +165,7 @@
     private static final  boolean bOldStyleAutoHideDisabled = true;
     void show() {
         cancelTitleBarAnimation(false);
-        if (mUseQuickControls || mSkipTitleBarAnimations) {
+        if (mSkipTitleBarAnimations) {
             this.setVisibility(View.VISIBLE);
             this.setTranslationY(0);
             hideTopControls();
@@ -200,23 +186,18 @@
     }
 
     void hide() {
-        if (mUseQuickControls) {
-            this.setVisibility(View.GONE);
-            hideTopControls();
+        if (mIsFixedTitleBar || bOldStyleAutoHideDisabled) return;
+        if (!mSkipTitleBarAnimations) {
+            cancelTitleBarAnimation(false);
+            int visibleHeight = getVisibleTitleHeight();
+            mTitleBarAnimator = ObjectAnimator.ofFloat(this,
+                    "translationY", getTranslationY(),
+                    (-getEmbeddedHeight() + visibleHeight));
+            mTitleBarAnimator.addListener(mHideTileBarAnimatorListener);
+            setupTitleBarAnimator(mTitleBarAnimator);
+            mTitleBarAnimator.start();
         } else {
-            if (mIsFixedTitleBar || bOldStyleAutoHideDisabled) return;
-            if (!mSkipTitleBarAnimations) {
-                cancelTitleBarAnimation(false);
-                int visibleHeight = getVisibleTitleHeight();
-                mTitleBarAnimator = ObjectAnimator.ofFloat(this,
-                        "translationY", getTranslationY(),
-                        (-getEmbeddedHeight() + visibleHeight));
-                mTitleBarAnimator.addListener(mHideTileBarAnimatorListener);
-                setupTitleBarAnimator(mTitleBarAnimator);
-                mTitleBarAnimator.start();
-            } else {
-                onScrollChanged();
-            }
+            onScrollChanged();
         }
         mShowing = false;
     }
@@ -298,19 +279,11 @@
             mNavBar.onProgressStopped();
             // check if needs to be hidden
             if (!isEditingUrl() && !wantsToBeVisible()) {
-                if (mUseQuickControls) {
-                    hide();
-                } else {
-                    mBaseUi.showTitleBarForDuration();
-                }
+                mBaseUi.showTitleBarForDuration();
             }
 
             //onPageFinished
-            if (mUseQuickControls) {
-                hideTopControls();
-            } else {
-                enableTopControls();
-            }
+            enableTopControls();
 
         } else {
             if (!mInLoad) {
@@ -319,17 +292,10 @@
                 mNavBar.onProgressStarted();
 
                 //onPageStarted
-                if (mUseQuickControls) {
-                    hideTopControls();
-                } else {
-                    showTopControls();
-                }
+                showTopControls();
             }
             mProgress.setProgress(newProgress * PageProgressView.MAX_PROGRESS
                     / PROGRESS_MAX);
-            if (mUseQuickControls && !isEditingUrl()) {
-                setShowProgressOnly(true);
-            }
             if (!mShowing) {
                 show();
             }
@@ -337,7 +303,7 @@
     }
 
     public int getEmbeddedHeight() {
-        if (mUseQuickControls || mIsFixedTitleBar) return 0;
+        if (mIsFixedTitleBar) return 0;
         return calculateEmbeddedHeight();
     }
 
@@ -376,10 +342,6 @@
         return mNavBar;
     }
 
-    public boolean useQuickControls() {
-        return mUseQuickControls;
-    }
-
     public boolean isInLoad() {
         return mInLoad;
     }
diff --git a/src/com/android/browser/UI.java b/src/com/android/browser/UI.java
index f24f8f3..a374203 100644
--- a/src/com/android/browser/UI.java
+++ b/src/com/android/browser/UI.java
@@ -138,8 +138,6 @@
 
     void setFullscreen(boolean enabled);
 
-    void setUseQuickControls(boolean enabled);
-
     void translateTitleBar(float topControlsOffsetYPix);
 
     public boolean shouldCaptureThumbnails();
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
index 8dd31d8..08d742e 100644
--- a/src/com/android/browser/XLargeUi.java
+++ b/src/com/android/browser/XLargeUi.java
@@ -64,7 +64,6 @@
         mTabBar = new TabBar(mActivity, mUiController, this);
         mActionBar = mActivity.getActionBar();
         setupActionBar();
-        setUseQuickControls(BrowserSettings.getInstance().useQuickControls());
     }
 
     private void setupActionBar() {
@@ -75,33 +74,9 @@
 
     public void showComboView(ComboViews startWith, Bundle extras) {
         super.showComboView(startWith, extras);
-        if (mUseQuickControls) {
-            mActionBar.show();
-        }
-    }
-
-    @Override
-    public void setUseQuickControls(boolean useQuickControls) {
-        super.setUseQuickControls(useQuickControls);
-        checkHideActionBar();
-        if (!useQuickControls) {
-            mActionBar.show();
-        }
-        mTabBar.setUseQuickControls(mUseQuickControls);
-        // We need to update the tabs with this change
-        for (Tab t : mTabControl.getTabs()) {
-            t.updateShouldCaptureThumbnails();
-        }
     }
 
     private void checkHideActionBar() {
-        if (mUseQuickControls) {
-            mHandler.post(new Runnable() {
-                public void run() {
-                    mActionBar.hide();
-                }
-            });
-        }
     }
 
     @Override
@@ -189,9 +164,6 @@
 
     @Override
     public void editUrl(boolean clearInput, boolean forceIME) {
-        if (mUseQuickControls) {
-            mTitleBar.setShowProgressOnly(false);
-        }
         super.editUrl(clearInput, forceIME);
     }
 
@@ -211,9 +183,6 @@
         if (inLoad) {
             // the titlebar was removed when the CAB was shown
             // if the page is loading, show it again
-            if (mUseQuickControls) {
-                mTitleBar.setShowProgressOnly(true);
-            }
             showTitleBar();
         }
     }
@@ -276,7 +245,7 @@
 
     @Override
     public boolean shouldCaptureThumbnails() {
-        return mUseQuickControls;
+        return false;
     }
 
     private Drawable getFaviconBackground() {
diff --git a/src/com/android/browser/view/BasePieView.java b/src/com/android/browser/view/BasePieView.java
deleted file mode 100644
index b9178be..0000000
--- a/src/com/android/browser/view/BasePieView.java
+++ /dev/null
@@ -1,162 +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.view;
-
-import android.database.DataSetObserver;
-import android.graphics.Canvas;
-import android.view.MotionEvent;
-import android.view.View;
-import android.widget.Adapter;
-
-import java.util.ArrayList;
-
-/**
- * common code for pie views
- */
-public abstract class BasePieView implements PieMenu.PieView {
-
-    protected Adapter mAdapter;
-    private DataSetObserver mObserver;
-    protected ArrayList<View> mViews;
-
-    protected OnLayoutListener mListener;
-
-    protected int mCurrent;
-    protected int mChildWidth;
-    protected int mChildHeight;
-    protected int mWidth;
-    protected int mHeight;
-    protected int mLeft;
-    protected int mTop;
-
-    public BasePieView() {
-    }
-
-    public void setLayoutListener(OnLayoutListener l) {
-        mListener = l;
-    }
-
-    public void setAdapter(Adapter adapter) {
-        mAdapter = adapter;
-        if (adapter == null) {
-            if (mAdapter != null) {
-                mAdapter.unregisterDataSetObserver(mObserver);
-            }
-            mViews = null;
-            mCurrent = -1;
-        } else {
-            mObserver = new DataSetObserver() {
-                @Override
-                public void onChanged() {
-                    buildViews();
-                }
-
-                @Override
-                public void onInvalidated() {
-                    mViews.clear();
-                }
-            };
-            mAdapter.registerDataSetObserver(mObserver);
-            setCurrent(0);
-        }
-    }
-
-    public void setCurrent(int ix) {
-        mCurrent = ix;
-    }
-
-    public Adapter getAdapter() {
-        return mAdapter;
-    }
-
-    protected void buildViews() {
-        if (mAdapter != null) {
-            final int n = mAdapter.getCount();
-            if (mViews == null) {
-                mViews = new ArrayList<View>(n);
-            } else {
-                mViews.clear();
-            }
-            mChildWidth = 0;
-            mChildHeight = 0;
-            for (int i = 0; i < n; i++) {
-                View view = mAdapter.getView(i, null, null);
-                view.measure(View.MeasureSpec.UNSPECIFIED,
-                        View.MeasureSpec.UNSPECIFIED);
-                mChildWidth = Math.max(mChildWidth, view.getMeasuredWidth());
-                mChildHeight = Math.max(mChildHeight, view.getMeasuredHeight());
-                mViews.add(view);
-            }
-        }
-    }
-
-    /**
-     * this will be called before the first draw call
-     * needs to set top, left, width, height
-     */
-    @Override
-    public void layout(int anchorX, int anchorY, boolean left, float angle,
-            int parentHeight) {
-        if (mListener != null) {
-            mListener.onLayout(anchorX, anchorY, left);
-        }
-    }
-
-
-    @Override
-    public abstract void draw(Canvas canvas);
-
-    protected void drawView(View view, Canvas canvas) {
-        final int state = canvas.save();
-        canvas.translate(view.getLeft(), view.getTop());
-        view.draw(canvas);
-        canvas.restoreToCount(state);
-    }
-
-    protected abstract int findChildAt(int y);
-
-    @Override
-    public boolean onTouchEvent(MotionEvent evt) {
-        int action = evt.getActionMasked();
-        int evtx = (int) evt.getX();
-        int evty = (int) evt.getY();
-        if ((evtx < mLeft) || (evtx >= mLeft + mWidth)
-                || (evty < mTop) || (evty >= mTop + mHeight)) {
-            return false;
-        }
-        switch (action) {
-            case MotionEvent.ACTION_MOVE:
-                View v = mViews.get(mCurrent);
-                setCurrent(Math.max(0, Math.min(mViews.size() -1,
-                        findChildAt(evty))));
-                View v1 = mViews.get(mCurrent);
-                if (v != v1) {
-                    v.setPressed(false);
-                    v1.setPressed(true);
-                }
-                break;
-            case MotionEvent.ACTION_UP:
-                mViews.get(mCurrent).performClick();
-                mViews.get(mCurrent).setPressed(false);
-                break;
-            default:
-                break;
-        }
-        return true;
-    }
-
-}
diff --git a/src/com/android/browser/view/PieItem.java b/src/com/android/browser/view/PieItem.java
deleted file mode 100644
index 9e04ecb..0000000
--- a/src/com/android/browser/view/PieItem.java
+++ /dev/null
@@ -1,159 +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.view;
-
-import android.view.View;
-
-import com.android.browser.view.PieMenu.PieView;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Pie menu item
- */
-public class PieItem {
-
-    private View mView;
-    private PieView mPieView;
-    private int level;
-    private float start;
-    private float sweep;
-    private float animate;
-    private int inner;
-    private int outer;
-    private boolean mSelected;
-    private boolean mEnabled;
-    private List<PieItem> mItems;
-
-    public PieItem(View view, int level) {
-        mView = view;
-        this.level = level;
-        mEnabled = true;
-        setAnimationAngle(getAnimationAngle());
-        setAlpha(getAlpha());
-    }
-
-    public PieItem(View view, int level, PieView sym) {
-        mView = view;
-        this.level = level;
-        mPieView = sym;
-        mEnabled = false;
-    }
-
-    public boolean hasItems() {
-        return mItems != null;
-    }
-
-    public List<PieItem> getItems() {
-        return mItems;
-    }
-
-    public void addItem(PieItem item) {
-        if (mItems == null) {
-            mItems = new ArrayList<PieItem>();
-        }
-        mItems.add(item);
-    }
-
-    public void setAlpha(float alpha) {
-        if (mView != null) {
-            mView.setAlpha(alpha);
-        }
-    }
-
-    public float getAlpha() {
-        if (mView != null) {
-            return mView.getAlpha();
-        }
-        return 1;
-    }
-
-    public void setAnimationAngle(float a) {
-        animate = a;
-    }
-
-    public float getAnimationAngle() {
-        return animate;
-    }
-
-    public void setEnabled(boolean enabled) {
-        mEnabled = enabled;
-    }
-
-    public void setSelected(boolean s) {
-        mSelected = s;
-        if (mView != null) {
-            mView.setSelected(s);
-        }
-    }
-
-    public boolean isSelected() {
-        return mSelected;
-    }
-
-    public int getLevel() {
-        return level;
-    }
-
-    public void setGeometry(float st, float sw, int inside, int outside) {
-        start = st;
-        sweep = sw;
-        inner = inside;
-        outer = outside;
-    }
-
-    public float getStart() {
-        return start;
-    }
-
-    public float getStartAngle() {
-        return start + animate;
-    }
-
-    public float getSweep() {
-        return sweep;
-    }
-
-    public int getInnerRadius() {
-        return inner;
-    }
-
-    public int getOuterRadius() {
-        return outer;
-    }
-
-    public boolean isPieView() {
-        return (mPieView != null);
-    }
-
-    public View getView() {
-        return mView;
-    }
-
-    public void setPieView(PieView sym) {
-        mPieView = sym;
-    }
-
-    public PieView getPieView() {
-        if (mEnabled) {
-            return mPieView;
-        }
-        return null;
-    }
-
-}
diff --git a/src/com/android/browser/view/PieListView.java b/src/com/android/browser/view/PieListView.java
deleted file mode 100644
index 1043fc7..0000000
--- a/src/com/android/browser/view/PieListView.java
+++ /dev/null
@@ -1,83 +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.view;
-
-import com.android.browser.R;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.view.View;
-
-/**
- * shows views in a menu style list
- */
-public class PieListView extends BasePieView {
-
-    private Paint mBgPaint;
-
-    public PieListView(Context ctx) {
-        mBgPaint = new Paint();
-        mBgPaint.setColor(ctx.getResources().getColor(R.color.qcMenuBackground));
-    }
-
-    /**
-     * this will be called before the first draw call
-     */
-    @Override
-    public void layout(int anchorX, int anchorY, boolean left, float angle,
-            int pHeight) {
-        super.layout(anchorX, anchorY, left, angle, pHeight);
-        buildViews();
-        mWidth = mChildWidth;
-        mHeight = mChildHeight * mAdapter.getCount();
-        mLeft = anchorX + (left ? 0 : - mChildWidth);
-        mTop = Math.max(anchorY - mHeight / 2, 0);
-        if (mTop + mHeight > pHeight) {
-            mTop = pHeight - mHeight;
-        }
-        if (mViews != null) {
-            layoutChildrenLinear();
-        }
-    }
-
-    protected void layoutChildrenLinear() {
-        final int n = mViews.size();
-        int top = mTop;
-        for (View view : mViews) {
-            view.layout(mLeft, top, mLeft + mChildWidth, top + mChildHeight);
-            top += mChildHeight;
-        }
-    }
-
-    @Override
-    public void draw(Canvas canvas) {
-        canvas.drawRect(mLeft, mTop, mLeft + mWidth, mTop + mHeight, mBgPaint);
-        if (mViews != null) {
-            for (View view : mViews) {
-                drawView(view, canvas);
-            }
-        }
-    }
-
-    @Override
-    protected int findChildAt(int y) {
-        final int ix = (y - mTop) * mViews.size() / mHeight;
-        return ix;
-    }
-
-}
diff --git a/src/com/android/browser/view/PieMenu.java b/src/com/android/browser/view/PieMenu.java
deleted file mode 100644
index 1699c27..0000000
--- a/src/com/android/browser/view/PieMenu.java
+++ /dev/null
@@ -1,636 +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.view;
-
-import android.animation.Animator;
-import android.animation.Animator.AnimatorListener;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
-import android.animation.ValueAnimator.AnimatorUpdateListener;
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.Path;
-import android.graphics.Point;
-import android.graphics.PointF;
-import android.graphics.RectF;
-import android.graphics.drawable.Drawable;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.SoundEffectConstants;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-
-import com.android.browser.R;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class PieMenu extends FrameLayout {
-
-    private static final int MAX_LEVELS = 5;
-    private static final long ANIMATION = 80;
-
-    public interface PieController {
-        /**
-         * called before menu opens to customize menu
-         * returns if pie state has been changed
-         */
-        public boolean onOpen();
-        public void stopEditingUrl();
-
-    }
-
-    /**
-     * A view like object that lives off of the pie menu
-     */
-    public interface PieView {
-
-        public interface OnLayoutListener {
-            public void onLayout(int ax, int ay, boolean left);
-        }
-
-        public void setLayoutListener(OnLayoutListener l);
-
-        public void layout(int anchorX, int anchorY, boolean onleft, float angle,
-                int parentHeight);
-
-        public void draw(Canvas c);
-
-        public boolean onTouchEvent(MotionEvent evt);
-
-    }
-
-    private Point mCenter;
-    private int mRadius;
-    private int mRadiusInc;
-    private int mSlop;
-    private int mTouchOffset;
-    private Path mPath;
-
-    private boolean mOpen;
-    private PieController mController;
-
-    private List<PieItem> mItems;
-    private int mLevels;
-    private int[] mCounts;
-    private PieView mPieView = null;
-
-    // sub menus
-    private List<PieItem> mCurrentItems;
-    private PieItem mOpenItem;
-
-    private Drawable mBackground;
-    private Paint mNormalPaint;
-    private Paint mSelectedPaint;
-    private Paint mSubPaint;
-
-    // touch handling
-    private PieItem mCurrentItem;
-
-    private boolean mUseBackground;
-    private boolean mAnimating;
-
-    /**
-     * @param context
-     * @param attrs
-     * @param defStyle
-     */
-    public PieMenu(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        init(context);
-    }
-
-    /**
-     * @param context
-     * @param attrs
-     */
-    public PieMenu(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        init(context);
-    }
-
-    /**
-     * @param context
-     */
-    public PieMenu(Context context) {
-        super(context);
-        init(context);
-    }
-
-    private void init(Context ctx) {
-        mItems = new ArrayList<PieItem>();
-        mLevels = 0;
-        mCounts = new int[MAX_LEVELS];
-        Resources res = ctx.getResources();
-        mRadius = (int) res.getDimension(R.dimen.qc_radius_start);
-        mRadiusInc = (int) res.getDimension(R.dimen.qc_radius_increment);
-        mSlop = (int) res.getDimension(R.dimen.qc_slop);
-        mTouchOffset = (int) res.getDimension(R.dimen.qc_touch_offset);
-        mOpen = false;
-        setWillNotDraw(false);
-        setDrawingCacheEnabled(false);
-        mCenter = new Point(0,0);
-        mBackground = res.getDrawable(R.drawable.qc_background_normal);
-        mNormalPaint = new Paint();
-        mNormalPaint.setColor(res.getColor(R.color.qc_normal));
-        mNormalPaint.setAntiAlias(true);
-        mSelectedPaint = new Paint();
-        mSelectedPaint.setColor(res.getColor(R.color.qc_selected));
-        mSelectedPaint.setAntiAlias(true);
-        mSubPaint = new Paint();
-        mSubPaint.setAntiAlias(true);
-        mSubPaint.setColor(res.getColor(R.color.qc_sub));
-    }
-
-    public void setController(PieController ctl) {
-        mController = ctl;
-    }
-
-    public void setUseBackground(boolean useBackground) {
-        mUseBackground = useBackground;
-    }
-
-    public void addItem(PieItem item) {
-        // add the item to the pie itself
-        mItems.add(item);
-        int l = item.getLevel();
-        mLevels = Math.max(mLevels, l);
-        mCounts[l]++;
-    }
-
-    public void removeItem(PieItem item) {
-        mItems.remove(item);
-    }
-
-    public void clearItems() {
-        mItems.clear();
-    }
-
-    private boolean onTheLeft() {
-        return mCenter.x < mSlop;
-    }
-
-    /**
-     * guaranteed has center set
-     * @param show
-     */
-    private void show(boolean show) {
-        mOpen = show;
-        if (mOpen) {
-            // ensure clean state
-            mAnimating = false;
-            mCurrentItem = null;
-            mOpenItem = null;
-            mPieView = null;
-            mController.stopEditingUrl();
-            mCurrentItems = mItems;
-            for (PieItem item : mCurrentItems) {
-                item.setSelected(false);
-            }
-            if (mController != null) {
-                boolean changed = mController.onOpen();
-            }
-            layoutPie();
-            animateOpen();
-        }
-        invalidate();
-    }
-
-    private void animateOpen() {
-        ValueAnimator anim = ValueAnimator.ofFloat(0, 1);
-        anim.addUpdateListener(new AnimatorUpdateListener() {
-            @Override
-            public void onAnimationUpdate(ValueAnimator animation) {
-                for (PieItem item : mCurrentItems) {
-                    item.setAnimationAngle((1 - animation.getAnimatedFraction()) * (- item.getStart()));
-                }
-                invalidate();
-            }
-
-        });
-        anim.setDuration(2*ANIMATION);
-        anim.start();
-    }
-
-    private void setCenter(int x, int y) {
-        if (x < mSlop) {
-            mCenter.x = 0;
-        } else {
-            mCenter.x = getWidth();
-        }
-        mCenter.y = y;
-    }
-
-    private void layoutPie() {
-        float emptyangle = (float) Math.PI / 16;
-        int rgap = 2;
-        int inner = mRadius + rgap;
-        int outer = mRadius + mRadiusInc - rgap;
-        int gap = 1;
-        for (int i = 0; i < mLevels; i++) {
-            int level = i + 1;
-            float sweep = (float) (Math.PI - 2 * emptyangle) / mCounts[level];
-            float angle = emptyangle + sweep / 2;
-            mPath = makeSlice(getDegrees(0) - gap, getDegrees(sweep) + gap, outer, inner, mCenter);
-            for (PieItem item : mCurrentItems) {
-                if (item.getLevel() == level) {
-                    View view = item.getView();
-                    if (view != null) {
-                        view.measure(view.getLayoutParams().width,
-                                view.getLayoutParams().height);
-                        int w = view.getMeasuredWidth();
-                        int h = view.getMeasuredHeight();
-                        int r = inner + (outer - inner) * 2 / 3;
-                        int x = (int) (r * Math.sin(angle));
-                        int y = mCenter.y - (int) (r * Math.cos(angle)) - h / 2;
-                        if (onTheLeft()) {
-                            x = mCenter.x + x - w / 2;
-                        } else {
-                            x = mCenter.x - x - w / 2;
-                        }
-                        view.layout(x, y, x + w, y + h);
-                    }
-                    float itemstart = angle - sweep / 2;
-                    item.setGeometry(itemstart, sweep, inner, outer);
-                    angle += sweep;
-                }
-            }
-            inner += mRadiusInc;
-            outer += mRadiusInc;
-        }
-    }
-
-
-    /**
-     * converts a
-     *
-     * @param angle from 0..PI to Android degrees (clockwise starting at 3
-     *        o'clock)
-     * @return skia angle
-     */
-    private float getDegrees(double angle) {
-        return (float) (270 - 180 * angle / Math.PI);
-    }
-
-    @Override
-    protected void onDraw(Canvas canvas) {
-        if (mOpen) {
-            int state;
-            if (mUseBackground) {
-                int w = mBackground.getIntrinsicWidth();
-                int h = mBackground.getIntrinsicHeight();
-                int left = mCenter.x - w;
-                int top = mCenter.y - h / 2;
-                mBackground.setBounds(left, top, left + w, top + h);
-                state = canvas.save();
-                if (onTheLeft()) {
-                    canvas.scale(-1, 1);
-                }
-                mBackground.draw(canvas);
-                canvas.restoreToCount(state);
-            }
-            // draw base menu
-            PieItem last = mCurrentItem;
-            if (mOpenItem != null) {
-                last = mOpenItem;
-            }
-            for (PieItem item : mCurrentItems) {
-                if (item != last) {
-                    drawItem(canvas, item);
-                }
-            }
-            if (last != null) {
-                drawItem(canvas, last);
-            }
-            if (mPieView != null) {
-                mPieView.draw(canvas);
-            }
-        }
-    }
-
-    private void drawItem(Canvas canvas, PieItem item) {
-        if (item.getView() != null) {
-            Paint p = item.isSelected() ? mSelectedPaint : mNormalPaint;
-            if (!mItems.contains(item)) {
-                p = item.isSelected() ? mSelectedPaint : mSubPaint;
-            }
-            int state = canvas.save();
-            if (onTheLeft()) {
-                canvas.scale(-1, 1);
-            }
-            float r = getDegrees(item.getStartAngle()) - 270; // degrees(0)
-            canvas.rotate(r, mCenter.x, mCenter.y);
-            canvas.drawPath(mPath, p);
-            canvas.restoreToCount(state);
-            // draw the item view
-            View view = item.getView();
-            state = canvas.save();
-            canvas.translate(view.getX(), view.getY());
-            view.draw(canvas);
-            canvas.restoreToCount(state);
-        }
-    }
-
-    private Path makeSlice(float start, float end, int outer, int inner, Point center) {
-        RectF bb =
-                new RectF(center.x - outer, center.y - outer, center.x + outer,
-                        center.y + outer);
-        RectF bbi =
-                new RectF(center.x - inner, center.y - inner, center.x + inner,
-                        center.y + inner);
-        Path path = new Path();
-        path.arcTo(bb, start, end - start, true);
-        path.arcTo(bbi, end, start - end);
-        path.close();
-        return path;
-    }
-
-    // touch handling for pie
-
-    @Override
-    public boolean onTouchEvent(MotionEvent evt) {
-        float x = evt.getX();
-        float y = evt.getY();
-        int action = evt.getActionMasked();
-        if (MotionEvent.ACTION_DOWN == action) {
-            if ((x > getWidth() - mSlop) || (x < mSlop)) {
-                setCenter((int) x, (int) y);
-                show(true);
-                return true;
-            }
-        } else if (MotionEvent.ACTION_UP == action) {
-            if (mOpen) {
-                boolean handled = false;
-                if (mPieView != null) {
-                    handled = mPieView.onTouchEvent(evt);
-                }
-                PieItem item = mCurrentItem;
-                if (!mAnimating) {
-                    deselect();
-                }
-                show(false);
-                if (!handled && (item != null) && (item.getView() != null)) {
-                    if ((item == mOpenItem) || !mAnimating) {
-                        item.getView().performClick();
-                    }
-                }
-                return true;
-            }
-        } else if (MotionEvent.ACTION_CANCEL == action) {
-            if (mOpen) {
-                show(false);
-            }
-            if (!mAnimating) {
-                deselect();
-                invalidate();
-            }
-            return false;
-        } else if (MotionEvent.ACTION_MOVE == action) {
-            if (mAnimating) return false;
-            boolean handled = false;
-            PointF polar = getPolar(x, y);
-            int maxr = mRadius + mLevels * mRadiusInc + 50;
-            if (mPieView != null) {
-                handled = mPieView.onTouchEvent(evt);
-            }
-            if (handled) {
-                invalidate();
-                return false;
-            }
-            if (polar.y < mRadius) {
-                if (mOpenItem != null) {
-                    closeSub();
-                } else if (!mAnimating) {
-                    deselect();
-                    invalidate();
-                }
-                return false;
-            }
-            if (polar.y > maxr) {
-                deselect();
-                show(false);
-                evt.setAction(MotionEvent.ACTION_DOWN);
-                if (getParent() != null) {
-                    ((ViewGroup) getParent()).dispatchTouchEvent(evt);
-                }
-                return false;
-            }
-            PieItem item = findItem(polar);
-            if (item == null) {
-            } else if (mCurrentItem != item) {
-                onEnter(item);
-                if ((item != null) && item.isPieView() && (item.getView() != null)) {
-                    int cx = item.getView().getLeft() + (onTheLeft()
-                            ? item.getView().getWidth() : 0);
-                    int cy = item.getView().getTop();
-                    mPieView = item.getPieView();
-                    layoutPieView(mPieView, cx, cy,
-                            (item.getStartAngle() + item.getSweep()) / 2);
-                }
-                invalidate();
-            }
-        }
-        // always re-dispatch event
-        return false;
-    }
-
-    private void layoutPieView(PieView pv, int x, int y, float angle) {
-        pv.layout(x, y, onTheLeft(), angle, getHeight());
-    }
-
-    /**
-     * enter a slice for a view
-     * updates model only
-     * @param item
-     */
-    private void onEnter(PieItem item) {
-        // deselect
-        if (mCurrentItem != null) {
-            mCurrentItem.setSelected(false);
-        }
-        if (item != null) {
-            // clear up stack
-            playSoundEffect(SoundEffectConstants.CLICK);
-            item.setSelected(true);
-            mPieView = null;
-            mCurrentItem = item;
-            if ((mCurrentItem != mOpenItem) && mCurrentItem.hasItems()) {
-                openSub(mCurrentItem);
-                mOpenItem = item;
-            }
-        } else {
-            mCurrentItem = null;
-        }
-
-    }
-
-    private void animateOut(final PieItem fixed, AnimatorListener listener) {
-        if ((mCurrentItems == null) || (fixed == null)) return;
-        final float target = fixed.getStartAngle();
-        ValueAnimator anim = ValueAnimator.ofFloat(0, 1);
-        anim.addUpdateListener(new AnimatorUpdateListener() {
-            @Override
-            public void onAnimationUpdate(ValueAnimator animation) {
-                for (PieItem item : mCurrentItems) {
-                    if (item != fixed) {
-                        item.setAnimationAngle(animation.getAnimatedFraction()
-                                * (target - item.getStart()));
-                    }
-                }
-                invalidate();
-            }
-        });
-        anim.setDuration(ANIMATION);
-        anim.addListener(listener);
-        anim.start();
-    }
-
-    private void animateIn(final PieItem fixed, AnimatorListener listener) {
-        if ((mCurrentItems == null) || (fixed == null)) return;
-        final float target = fixed.getStartAngle();
-        ValueAnimator anim = ValueAnimator.ofFloat(0, 1);
-        anim.addUpdateListener(new AnimatorUpdateListener() {
-            @Override
-            public void onAnimationUpdate(ValueAnimator animation) {
-                for (PieItem item : mCurrentItems) {
-                    if (item != fixed) {
-                        item.setAnimationAngle((1 - animation.getAnimatedFraction())
-                                * (target - item.getStart()));
-                    }
-                }
-                invalidate();
-
-            }
-
-        });
-        anim.setDuration(ANIMATION);
-        anim.addListener(listener);
-        anim.start();
-    }
-
-    private void openSub(final PieItem item) {
-        mAnimating = true;
-        animateOut(item, new AnimatorListenerAdapter() {
-            public void onAnimationEnd(Animator a) {
-                for (PieItem item : mCurrentItems) {
-                    item.setAnimationAngle(0);
-                }
-                mCurrentItems = new ArrayList<PieItem>(mItems.size());
-                int i = 0, j = 0;
-                while (i < mItems.size()) {
-                    if (mItems.get(i) == item) {
-                        mCurrentItems.add(item);
-                    } else {
-                        mCurrentItems.add(item.getItems().get(j++));
-                    }
-                    i++;
-                }
-                layoutPie();
-                animateIn(item, new AnimatorListenerAdapter() {
-                    public void onAnimationEnd(Animator a) {
-                        for (PieItem item : mCurrentItems) {
-                            item.setAnimationAngle(0);
-                        }
-                        mAnimating = false;
-                    }
-                });
-            }
-        });
-    }
-
-    private void closeSub() {
-        mAnimating = true;
-        if (mCurrentItem != null) {
-            mCurrentItem.setSelected(false);
-        }
-        animateOut(mOpenItem, new AnimatorListenerAdapter() {
-            public void onAnimationEnd(Animator a) {
-                for (PieItem item : mCurrentItems) {
-                    item.setAnimationAngle(0);
-                }
-                mCurrentItems = mItems;
-                mPieView = null;
-                animateIn(mOpenItem, new AnimatorListenerAdapter() {
-                    public void onAnimationEnd(Animator a) {
-                        for (PieItem item : mCurrentItems) {
-                            item.setAnimationAngle(0);
-                        }
-                        mAnimating = false;
-                        mOpenItem = null;
-                        mCurrentItem = null;
-                    }
-                });
-            }
-        });
-    }
-
-    private void deselect() {
-        if (mCurrentItem != null) {
-            mCurrentItem.setSelected(false);
-        }
-        if (mOpenItem != null) {
-            mOpenItem = null;
-            mCurrentItems = mItems;
-        }
-        mCurrentItem = null;
-        mPieView = null;
-    }
-
-    private PointF getPolar(float x, float y) {
-        PointF res = new PointF();
-        // get angle and radius from x/y
-        res.x = (float) Math.PI / 2;
-        x = mCenter.x - x;
-        if (mCenter.x < mSlop) {
-            x = -x;
-        }
-        y = mCenter.y - y;
-        res.y = (float) Math.sqrt(x * x + y * y);
-        if (y > 0) {
-            res.x = (float) Math.asin(x / res.y);
-        } else if (y < 0) {
-            res.x = (float) (Math.PI - Math.asin(x / res.y ));
-        }
-        return res;
-    }
-
-    /**
-     *
-     * @param polar x: angle, y: dist
-     * @return the item at angle/dist or null
-     */
-    private PieItem findItem(PointF polar) {
-        // find the matching item:
-        for (PieItem item : mCurrentItems) {
-            if (inside(polar, mTouchOffset, item)) {
-                return item;
-            }
-        }
-        return null;
-    }
-
-    private boolean inside(PointF polar, float offset, PieItem item) {
-        return (item.getInnerRadius() - offset < polar.y)
-        && (item.getOuterRadius() - offset > polar.y)
-        && (item.getStartAngle() < polar.x)
-        && (item.getStartAngle() + item.getSweep() > polar.x);
-    }
-
-}
diff --git a/src/com/android/browser/view/PieStackView.java b/src/com/android/browser/view/PieStackView.java
deleted file mode 100644
index e1f41bd..0000000
--- a/src/com/android/browser/view/PieStackView.java
+++ /dev/null
@@ -1,104 +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.view;
-
-import com.android.browser.R;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.view.View;
-
-/**
- * shows views in a stack
- */
-public class PieStackView extends BasePieView {
-
-    private static final int SLOP = 5;
-
-    private OnCurrentListener mCurrentListener;
-    private int mMinHeight;
-
-    public interface OnCurrentListener {
-        public void onSetCurrent(int index);
-    }
-
-    public PieStackView(Context ctx) {
-        mMinHeight = (int) ctx.getResources()
-                .getDimension(R.dimen.qc_tab_title_height);
-    }
-
-    public void setOnCurrentListener(OnCurrentListener l) {
-        mCurrentListener = l;
-    }
-
-    @Override
-    public void setCurrent(int ix) {
-        super.setCurrent(ix);
-        if (mCurrentListener != null) {
-            mCurrentListener.onSetCurrent(ix);
-        }
-    }
-
-    /**
-     * this will be called before the first draw call
-     */
-    @Override
-    public void layout(int anchorX, int anchorY, boolean left, float angle,
-            int pHeight) {
-        super.layout(anchorX, anchorY, left, angle, pHeight);
-        buildViews();
-        mWidth = mChildWidth;
-        mHeight = mChildHeight + (mViews.size() - 1) * mMinHeight;
-        mLeft = anchorX + (left ? SLOP : -(SLOP + mChildWidth));
-        mTop = anchorY - mHeight / 2;
-        if (mViews != null) {
-            layoutChildrenLinear();
-        }
-    }
-
-    private void layoutChildrenLinear() {
-        final int n = mViews.size();
-        int top = mTop;
-        int dy = (n == 1) ? 0 : (mHeight - mChildHeight) / (n - 1);
-        for (View view : mViews) {
-            int x = mLeft;
-            view.layout(x, top, x + mChildWidth, top + mChildHeight);
-            top += dy;
-        }
-    }
-
-    @Override
-    public void draw(Canvas canvas) {
-        if ((mViews != null) && (mCurrent > -1)) {
-            final int n = mViews.size();
-            for (int i = 0; i < mCurrent; i++) {
-                drawView(mViews.get(i), canvas);
-            }
-            for (int i = n - 1; i > mCurrent; i--) {
-                drawView(mViews.get(i), canvas);
-            }
-            drawView(mViews.get(mCurrent), canvas);
-        }
-    }
-
-    @Override
-    protected int findChildAt(int y) {
-        final int ix = (y - mTop) * mViews.size() / mHeight;
-        return ix;
-    }
-
-}
