Reconcile with ics-factoryrom-release

Change-Id: Ia4037679977351e39450e5fc9f15e2a4b37f0cff
diff --git a/fill_screens.py b/fill_screens.py
index 9607c80..5841b8e 100755
--- a/fill_screens.py
+++ b/fill_screens.py
@@ -15,13 +15,12 @@
 AUTO_FILE = "launcher.db"
 
 APPLICATION_COMPONENTS = [
-  "com.google.android.apps.books/com.google.android.apps.books.app.BooksActivity",
   "com.android.calculator2/com.android.calculator2.Calculator",
-  "com.google.android.camera/com.android.camera.Camera",
-  "com.google.android.carhome/com.google.android.carhome.CarHome",
   "com.android.providers.downloads.ui/com.android.providers.downloads.ui.DownloadList",
-  "com.google.android.gallery3d/com.android.gallery3d.app.Gallery",
-  "com.google.android.apps.maps/com.google.android.maps.MapsActivity"
+  "com.android.settings/com.android.settings.Settings",
+  "com.android.mms/com.android.mms.ui.ConversationList",
+  "com.android.contacts/com.android.contacts.activities.PeopleActivity",
+  "com.android.contacts/com.android.contacts.activities.DialtactsActivity"
 ]
 
 def usage():
diff --git a/res/drawable-hdpi/ic_allapps_pressed.png b/res/drawable-hdpi/ic_allapps_pressed.png
new file mode 100644
index 0000000..6d87bbb
--- /dev/null
+++ b/res/drawable-hdpi/ic_allapps_pressed.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_appwidget.png b/res/drawable-hdpi/ic_launcher_appwidget.png
deleted file mode 100644
index 13513e0..0000000
--- a/res/drawable-hdpi/ic_launcher_appwidget.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/pressed_application_background.9.png b/res/drawable-hdpi/pressed_application_background.9.png
deleted file mode 100644
index 3a59f25..0000000
--- a/res/drawable-hdpi/pressed_application_background.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/preview_bg.9.png b/res/drawable-hdpi/preview_bg.9.png
deleted file mode 100644
index 5fa2ed8..0000000
--- a/res/drawable-hdpi/preview_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/preview_bg_focus.9.png b/res/drawable-hdpi/preview_bg_focus.9.png
deleted file mode 100644
index bbf67f7..0000000
--- a/res/drawable-hdpi/preview_bg_focus.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/preview_bg_press.9.png b/res/drawable-hdpi/preview_bg_press.9.png
deleted file mode 100644
index 6d0b022..0000000
--- a/res/drawable-hdpi/preview_bg_press.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-land-hdpi/bg_cling1.png b/res/drawable-land-hdpi/bg_cling1.png
new file mode 100644
index 0000000..7123c5c
--- /dev/null
+++ b/res/drawable-land-hdpi/bg_cling1.png
Binary files differ
diff --git a/res/drawable-land-hdpi/bg_cling2.png b/res/drawable-land-hdpi/bg_cling2.png
new file mode 100644
index 0000000..889b627
--- /dev/null
+++ b/res/drawable-land-hdpi/bg_cling2.png
Binary files differ
diff --git a/res/drawable-land-hdpi/bg_cling3.png b/res/drawable-land-hdpi/bg_cling3.png
new file mode 100644
index 0000000..4ff338c
--- /dev/null
+++ b/res/drawable-land-hdpi/bg_cling3.png
Binary files differ
diff --git a/res/drawable-land-hdpi/hotseat_bg_panel.9.png b/res/drawable-land-hdpi/hotseat_bg_panel.9.png
index c7602cd..90177f8 100644
--- a/res/drawable-land-hdpi/hotseat_bg_panel.9.png
+++ b/res/drawable-land-hdpi/hotseat_bg_panel.9.png
Binary files differ
diff --git a/res/drawable-land-mdpi/bg_cling1.png b/res/drawable-land-mdpi/bg_cling1.png
new file mode 100644
index 0000000..f5faeb4
--- /dev/null
+++ b/res/drawable-land-mdpi/bg_cling1.png
Binary files differ
diff --git a/res/drawable-land-mdpi/bg_cling2.png b/res/drawable-land-mdpi/bg_cling2.png
new file mode 100644
index 0000000..963967d
--- /dev/null
+++ b/res/drawable-land-mdpi/bg_cling2.png
Binary files differ
diff --git a/res/drawable-land-mdpi/bg_cling3.png b/res/drawable-land-mdpi/bg_cling3.png
new file mode 100644
index 0000000..921831a
--- /dev/null
+++ b/res/drawable-land-mdpi/bg_cling3.png
Binary files differ
diff --git a/res/drawable-land-mdpi/hotseat_bg_panel.9.png b/res/drawable-land-mdpi/hotseat_bg_panel.9.png
index d745bb3..83c4a55 100644
--- a/res/drawable-land-mdpi/hotseat_bg_panel.9.png
+++ b/res/drawable-land-mdpi/hotseat_bg_panel.9.png
Binary files differ
diff --git a/res/drawable-land-xhdpi/bg_cling1.png b/res/drawable-land-xhdpi/bg_cling1.png
new file mode 100644
index 0000000..2282117
--- /dev/null
+++ b/res/drawable-land-xhdpi/bg_cling1.png
Binary files differ
diff --git a/res/drawable-land-xhdpi/bg_cling2.png b/res/drawable-land-xhdpi/bg_cling2.png
new file mode 100644
index 0000000..5243889
--- /dev/null
+++ b/res/drawable-land-xhdpi/bg_cling2.png
Binary files differ
diff --git a/res/drawable-land-xhdpi/bg_cling3.png b/res/drawable-land-xhdpi/bg_cling3.png
new file mode 100644
index 0000000..08475f7
--- /dev/null
+++ b/res/drawable-land-xhdpi/bg_cling3.png
Binary files differ
diff --git a/res/drawable-land-xhdpi/hotseat_bg_panel.9.png b/res/drawable-land-xhdpi/hotseat_bg_panel.9.png
index acbe24a..8718040 100644
--- a/res/drawable-land-xhdpi/hotseat_bg_panel.9.png
+++ b/res/drawable-land-xhdpi/hotseat_bg_panel.9.png
Binary files differ
diff --git a/res/drawable-mdpi/apps_hotseat_button.png b/res/drawable-mdpi/apps_hotseat_button.png
deleted file mode 100644
index 62f119d..0000000
--- a/res/drawable-mdpi/apps_hotseat_button.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_allapps_pressed.png b/res/drawable-mdpi/ic_allapps_pressed.png
new file mode 100644
index 0000000..5c2076f
--- /dev/null
+++ b/res/drawable-mdpi/ic_allapps_pressed.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher_appwidget.png b/res/drawable-mdpi/ic_launcher_appwidget.png
deleted file mode 100644
index 72dbfdf..0000000
--- a/res/drawable-mdpi/ic_launcher_appwidget.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/pressed_application_background.9.png b/res/drawable-mdpi/pressed_application_background.9.png
deleted file mode 100644
index 7d5da3d..0000000
--- a/res/drawable-mdpi/pressed_application_background.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/preview_bg.9.png b/res/drawable-mdpi/preview_bg.9.png
deleted file mode 100644
index d96e885..0000000
--- a/res/drawable-mdpi/preview_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/preview_bg_focus.9.png b/res/drawable-mdpi/preview_bg_focus.9.png
deleted file mode 100644
index 19e82a7..0000000
--- a/res/drawable-mdpi/preview_bg_focus.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/preview_bg_press.9.png b/res/drawable-mdpi/preview_bg_press.9.png
deleted file mode 100644
index f938090..0000000
--- a/res/drawable-mdpi/preview_bg_press.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/apps_hotseat_button.png b/res/drawable-xhdpi/apps_hotseat_button.png
deleted file mode 100644
index 932dac7..0000000
--- a/res/drawable-xhdpi/apps_hotseat_button.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_allapps_pressed.png b/res/drawable-xhdpi/ic_allapps_pressed.png
new file mode 100644
index 0000000..72ff3b9
--- /dev/null
+++ b/res/drawable-xhdpi/ic_allapps_pressed.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_launcher_appwidget.png b/res/drawable-xhdpi/ic_launcher_appwidget.png
deleted file mode 100644
index 997504a..0000000
--- a/res/drawable-xhdpi/ic_launcher_appwidget.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/pressed_application_background.9.png b/res/drawable-xhdpi/pressed_application_background.9.png
deleted file mode 100644
index 05e240a..0000000
--- a/res/drawable-xhdpi/pressed_application_background.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/preview_bg.9.png b/res/drawable-xhdpi/preview_bg.9.png
deleted file mode 100644
index 11cbcb5..0000000
--- a/res/drawable-xhdpi/preview_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/preview_bg_focus.9.png b/res/drawable-xhdpi/preview_bg_focus.9.png
deleted file mode 100644
index 698c465..0000000
--- a/res/drawable-xhdpi/preview_bg_focus.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/preview_bg_press.9.png b/res/drawable-xhdpi/preview_bg_press.9.png
deleted file mode 100644
index 78e7510..0000000
--- a/res/drawable-xhdpi/preview_bg_press.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/preview_background.xml b/res/drawable/all_apps_button_icon.xml
similarity index 66%
rename from res/drawable/preview_background.xml
rename to res/drawable/all_apps_button_icon.xml
index 0054aa0..7c69cad 100644
--- a/res/drawable/preview_background.xml
+++ b/res/drawable/all_apps_button_icon.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -15,8 +15,7 @@
 -->
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_pressed="true" android:drawable="@drawable/preview_bg_press" />
-    <item android:state_focused="true" android:state_window_focused="true" android:drawable="@drawable/preview_bg_focus" />
-    <item android:state_focused="true" android:state_window_focused="false" android:drawable="@drawable/preview_bg" />
-    <item android:drawable="@drawable/preview_bg" />
+    <item android:state_focused="true" android:drawable="@drawable/ic_allapps_pressed" />
+    <item android:state_pressed="true" android:drawable="@drawable/ic_allapps_pressed" />
+    <item android:drawable="@drawable/ic_allapps" />
 </selector>
diff --git a/res/layout-land/folder_cling.xml b/res/layout-land/folder_cling.xml
index 91d34ad..3d7f4f4 100644
--- a/res/layout-land/folder_cling.xml
+++ b/res/layout-land/folder_cling.xml
@@ -20,8 +20,8 @@
     <FrameLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:layout_marginLeft="40dp"
-        android:layout_marginTop="40dp">
+        android:layout_marginLeft="20dp"
+        android:layout_marginTop="20dp">
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
@@ -32,21 +32,12 @@
                 android:text="@string/folder_cling_title" />
             <TextView
                 style="@style/ClingText"
-                android:id="@+id/folder_cling_move_item"
+                android:id="@+id/folder_cling_create_folder"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:text="@string/folder_cling_move_item" />
+                android:text="@string/folder_cling_create_folder" />
         </LinearLayout>
     </FrameLayout>
-    <TextView
-        style="@style/ClingText"
-        android:id="@+id/folder_cling_create_folder"
-        android:layout_width="340dp"
-        android:layout_height="wrap_content"
-        android:layout_marginLeft="40dp"
-        android:layout_marginBottom="40dp"
-        android:layout_gravity="bottom"
-        android:text="@string/folder_cling_create_folder" />
     <Button
         style="@style/ClingButton"
         android:id="@+id/cling_dismiss"
diff --git a/res/layout-land/folder_icon.xml b/res/layout-land/folder_icon.xml
index 15867c7..4c92fca 100644
--- a/res/layout-land/folder_icon.xml
+++ b/res/layout-land/folder_icon.xml
@@ -19,7 +19,9 @@
     xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:orientation="vertical">
+    android:orientation="vertical"
+    android:focusable="true"
+    android:background="@drawable/focusable_view_bg">
     <ImageView
         android:id="@+id/preview_background"
         android:layout_gravity="center_horizontal"
diff --git a/res/layout-port/folder_icon.xml b/res/layout-port/folder_icon.xml
index 69e51e8..0df16b8 100644
--- a/res/layout-port/folder_icon.xml
+++ b/res/layout-port/folder_icon.xml
@@ -19,7 +19,9 @@
     xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:orientation="vertical">
+    android:orientation="vertical"
+    android:focusable="true"
+    android:background="@drawable/focusable_view_bg">
     <ImageView
         android:id="@+id/preview_background"
         android:layout_gravity="center_horizontal"
diff --git a/res/layout-port/search_bar.xml b/res/layout-port/search_bar.xml
index 468e945..dbacd3d 100644
--- a/res/layout-port/search_bar.xml
+++ b/res/layout-port/search_bar.xml
@@ -28,7 +28,7 @@
         android:layout_height="match_parent"
         android:layout_alignParentLeft="true"
         android:layout_alignParentTop="true"
-        android:layout_toLeftOf="@+id/voice_button"
+        android:layout_toLeftOf="@+id/voice_button_container"
         android:background="?android:attr/selectableItemBackground"
         android:onClick="onClickSearchButton"
         android:focusable="true"
@@ -43,18 +43,24 @@
     </LinearLayout>
 
     <!-- Voice search icon -->
-    <ImageView
+    <LinearLayout
         style="@style/SearchButton.Voice"
-        android:id="@+id/voice_button"
-        android:layout_width="wrap_content"
+        android:id="@+id/voice_button_container"
+        android:layout_width="@dimen/search_bar_height"
         android:layout_height="match_parent"
         android:layout_alignParentRight="true"
         android:layout_alignParentTop="true"
-        android:src="@drawable/ic_home_voice_search_holo"
-        android:adjustViewBounds="true"
+        android:gravity="right"
         android:background="?android:attr/selectableItemBackground"
         android:onClick="onClickVoiceButton"
         android:focusable="true"
         android:clickable="true"
-        android:contentDescription="@string/accessibility_voice_search_button" />
+        android:contentDescription="@string/accessibility_voice_search_button">
+        <ImageView
+            android:id="@+id/voice_button"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:src="@drawable/ic_home_voice_search_holo"
+            android:adjustViewBounds="true" />
+    </LinearLayout>
 </RelativeLayout>
diff --git a/res/layout/apps_customize_progressbar.xml b/res/layout/apps_customize_progressbar.xml
index d790f21..6a8010f 100644
--- a/res/layout/apps_customize_progressbar.xml
+++ b/res/layout/apps_customize_progressbar.xml
@@ -20,5 +20,4 @@
    android:id="@+id/apps_customize_progress_bar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
-   android:layout_gravity="center"
-   android:layout_marginRight="5dp" />
+   android:layout_gravity="center" />
diff --git a/res/layout/user_folder.xml b/res/layout/user_folder.xml
index 814c968..208390d 100644
--- a/res/layout/user_folder.xml
+++ b/res/layout/user_folder.xml
@@ -37,7 +37,7 @@
         launcher:cellWidth="@dimen/folder_cell_width"
         launcher:cellHeight="@dimen/folder_cell_height" />
 
-    <EditText
+    <com.android.launcher2.FolderEditText
         android:id="@+id/folder_name"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -50,5 +50,6 @@
         android:textColor="#ff33b5e5"
         android:textColorHighlight="#ff333333"
         android:gravity="center_horizontal"
-        android:singleLine="true"/>
+        android:singleLine="true"
+        android:imeOptions="flagNoExtractUi"/>
 </com.android.launcher2.Folder>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index cba4b15..6f5e95c 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Stel \'n program in staat om die instellings en kortpaaie in Tuis te lees."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"skryf Tuis-instellings en -kortpaaie"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Stel program in staat om die instellings en kortpaaie in Tuis te verander."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Kon nie legstuk laai nie"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Dit is \'n stelselprogram en kan nie gedeïnstalleer word nie."</string>
     <string name="dream_name" msgid="2847171357608437154">"Vuurpyllanseerder"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 04a71b3..83fd130 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"ቅንብሮችን እና አቋራጮችን በመነሻለማንበብ ትግበራ ይፈቅዳል።"</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"መነሻ ቅንብሮች እና አቋራጮች ፃፍ"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"ቅንብሮችን እና አቋራጮችን በመነሻለመለወጥ ትግበራ ይፈቅዳል።"</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"ፍርግም የመጫን ችግር"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"ይህ የስርዓት ትግበራ ነው እና አለማራገፍ አይቻልም።"</string>
     <string name="dream_name" msgid="2847171357608437154">"የሮኬት ማስነሻ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 7de8bd2..db457ef 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"للسماح لتطبيق ما بقراءة الإعدادات والاختصارات في الشاشة الرئيسية."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"كتابة إعدادات الشاشة الرئيسية والاختصارات"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"للسماح لتطبيق ما بتغيير الإعدادات والاختصارات في الشاشة الرئيسية."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"حدثت مشكلة أثناء تحميل الأداة"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"هذا تطبيق نظام وتتعذر إزالته."</string>
     <string name="dream_name" msgid="2847171357608437154">"راجمة"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 8875098..b38a849 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Разрешава на приложение да прочете настройките и преките пътища към „Начало“."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"въведете настройките за „Начало“ и преки пътища"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Разрешава на приложение да промени настройките и преките пътища в „Начало“."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Проблем при зареждане на приспособление"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Това е системно приложение и не може да се деинсталира."</string>
     <string name="dream_name" msgid="2847171357608437154">"Ракетна площадка"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index c7ccf43..15a5145 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Permet a una aplicació llegir la configuració i les dreceres de la pantalla Inici."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"escriure la configuració i les dreceres de la pantalla Inici"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Permet que una aplicació canviï la configuració i les dreceres de la pantalla Inici."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"S\'ha produït un problema en carregar el widget"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Això és una aplicació del sistema i no es pot desinstal·lar."</string>
     <string name="dream_name" msgid="2847171357608437154">"Llançamíssils"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 2bb9e23..a5d3eff 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Povoluje aplikaci číst nastavení a odkazy plochy."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"zápis nastavení a odkazů plochy"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Povoluje aplikaci změnit nastavení a odkazy plochy."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Problém s načtením widgetu"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Toto je systémová aplikace a nelze ji odinstalovat."</string>
     <string name="dream_name" msgid="2847171357608437154">"Raketomet"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 790700e..6f9f6fe 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Tillader, at en applikation læser indstillingerne og genvejene i Start."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"skriv indstillinger og genveje for Start"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Tillader, at en applikation ændrer indstillingerne og genvejene i Start."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Der er problemer med indlæsning af widget"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Dette er et systemprogram, som ikke kan afinstalleres."</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 4f8bf13..b0845ac 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Ermöglicht einer App, die Einstellungen und Shortcuts auf der Startseite zu lesen."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"Einstellungen und Shortcuts für Startseite schreiben"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Ermöglicht einer App, die Einstellungen und Shortcuts auf der Startseite zu ändern."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Problem beim Laden des Widgets"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Dies ist eine Systemanwendung, die nicht deinstalliert werden kann."</string>
     <string name="dream_name" msgid="2847171357608437154">"Raketenstartgerät"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 0bb5667..708b6e7 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Επιτρέπει σε μια εφαρμογή την ανάγνωση των ρυθμίσεων και των συντομεύσεων στην αρχική οθόνη."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"εγγραφή ρυθμίσεων και συντομεύσεων αρχικής οθόνης"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Επιτρέπει σε μια εφαρμογή την αλλαγή των ρυθμίσεων και των συντομεύσεων στην αρχική οθόνη."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Παρουσιάστηκε πρόβλημα στη φόρτωση του γραφικού στοιχείου"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Αυτή είναι εφαρμογή του συστήματος και δεν είναι δυνατή η κατάργηση της εγκατάστασής της."</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 6b74e35..fe2e54d 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Allows an application to read the settings and shortcuts in Home."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"write Home settings and shortcuts"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Allows an application to change the settings and shortcuts in Home."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Problem loading widget"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"This is a system application and cannot be uninstalled."</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 5d328f5..2d491d6 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Permite a una aplicación leer la configuración y los accesos directos de la página principal."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"escribir configuración y accesos directos de la página principal"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Permite a una aplicación cambiar la configuración y los accesos directos de la página principal."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Problema al cargar el widget"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Esta es una aplicación de sistema y no puede desinstalarse."</string>
     <string name="dream_name" msgid="2847171357608437154">"Lanzacohetes"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index eaec8c4..eae7933 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Permite que una aplicación lea la información de configuración y accesos directos del escritorio."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"escribir información de accesos directos y de configuración del escritorio"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Permite que una aplicación modifique la configuración y los accesos directos de la página de inicio."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Problema al cargar el widget"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Se trata de una aplicación del sistema y no se puede desinstalar."</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index af33b83..d3afbee 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"به یک برنامه کاربردی اجازه می دهد تنظیمات و میانبرهای موجود در صفحه اصلی را بخواند."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"نوشتن تنظیمات صفحه اصلی و میانبرها"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"به برنامه کاربردی اجازه می دهد تنظیمات و میانبرها را در صفحه اصلی تغییر دهد."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"مشکل در بارگیری ابزارک"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"این یک برنامه سیستمی است و لغو نصب نمی شود."</string>
     <string name="dream_name" msgid="2847171357608437154">"پرتاب کننده موشک"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 52aa813..2140195 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Antaa sovelluksen lukea etusivun asetuksia ja pikakuvakkeita."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"kirjoittaa etusivun asetuksia ja pikakuvakkeita"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Antaa sovelluksen muuttaa etusivun asetuksia ja pikakuvakkeita."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Ongelma ladattaessa widgetiä"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Tämä on järjestelmäsovellus, eikä sitä voi poistaa."</string>
     <string name="dream_name" msgid="2847171357608437154">"Sinko"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index a52cbf5..d79e864 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Permet à une application de lire les paramètres et raccourcis de la page d\'accueil."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"Enregistrer les paramètres de la page d\'accueil et des raccourcis"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Permet à une application de modifier les paramètres et les raccourcis de la page d\'accueil."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Problème lors du chargement du widget"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Il s\'agit d\'une application système que vous ne pouvez pas désinstaller."</string>
     <string name="dream_name" msgid="2847171357608437154">"Lance-missile"</string>
@@ -92,6 +91,6 @@
     <string name="all_apps_cling_add_item" msgid="7404588523183860170">"Pour ajouter une application à votre écran d\'accueil, appuyez dessus de manière prolongée."</string>
     <string name="folder_cling_title" msgid="4308949882377840953">"Organiser vos applications dans des dossiers"</string>
     <string name="folder_cling_move_item" msgid="270598675060435169">"Pour déplacer une application, appuyez dessus de manière prolongée."</string>
-    <string name="folder_cling_create_folder" msgid="289412698047625601">"Pour créer un dossier sur votre écran d\'accueil, empilez les applications les unes sur les autres."</string>
+    <string name="folder_cling_create_folder" msgid="289412698047625601">"Pour créer un dossier sur votre écran d\'accueil, superposez les applications les unes sur les autres."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 965cfba..055aba7 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Dopušta aplikaciji čitanje postavki i prečaca na početnom zaslonu."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"zapiši postavke početnog zaslona i prečaca"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Dopušta aplikaciji promjenu postavki i prečaca na početnom zaslonu."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Problem pri učitavanju widgeta"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Ovo je aplikacija sustava i ne može se ukloniti."</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 87c291e..3dcd6d0 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Lehetővé teszi egy alkalmazás számára, hogy beolvassa a Főoldal beállításait és parancsikonjait."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"Főoldal beállításainak és parancsikonjainak írása"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Lehetővé teszi egy alkalmazás számára, hogy módosítsa a Főoldal beállításait és parancsikonjait."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Probléma történt a modul betöltésekor"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Ez egy rendszeralkalmazás, ezért nem lehet eltávolítani."</string>
     <string name="dream_name" msgid="2847171357608437154">"Aknavető"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 7a0caf4..8bfee76 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Mengizinkan aplikasi membaca setelan dan pintasan dalam Beranda."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"tuliskan setelan dan pintasan Beranda"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Mengizinkan aplikasi mengubah setelan dan pintasan dalam Beranda."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Masalah memuat widget"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Ini adalah aplikasi sistem dan tidak dapat diunduh."</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 6bf31ce..ec61dc9 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Consente a un\'applicazione di leggere le impostazioni e le scorciatoie in Home."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"creare impostazioni e scorciatoie in Home"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Consente a un\'applicazione di modificare le impostazioni e le scorciatoie in Home."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Errore durante il caricamento del widget"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Questa è un\'applicazione di sistema e non può essere disinstallata."</string>
     <string name="dream_name" msgid="2847171357608437154">"Lanciamissili"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 99bbced..7c52585 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"מאפשר ליישום לקרוא את ההגדרות וקיצורי הדרך בדף הבית."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"כתוב הגדרות וקיצורי דרך של דף הבית"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"מאפשר ליישום לשנות את ההגדרות וקיצורי הדרך בדף הבית."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"בעיה בטעינת Widget"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"זהו יישום מערכת ואין אפשרות להסיר את התקנתו."</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 16a799f..dcb382a 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"ホームの設定とショートカットの読み取りをアプリケーションに許可します。"</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"ホームの設定とショートカットの書き込み"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"ホームの設定とショートカットの変更をアプリケーションに許可します。"</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"ウィジェットを表示できません"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"このシステムアプリケーションはアンインストールできません。"</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 599eac5..916b641 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"애플리케이션이 홈에 있는 설정 및 바로가기를 읽을 수 있도록 합니다."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"홈 설정 및 바로가기 쓰기"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"애플리케이션이 홈에 있는 설정 및 바로가기를 변경할 수 있도록 합니다."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"위젯을 로드하는 중 문제가 발생했습니다."</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"시스템 애플리케이션은 제거할 수 없습니다."</string>
     <string name="dream_name" msgid="2847171357608437154">"로켓 실행기"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 7378b70..f8dad7b 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Leidžia programai skaityti pagrindinio puslapio nustatymus ir sparčiuosius klavišus."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"rašyti pagrindinio puslapio nustatymus ir sparčiuosius klavišus"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Leidžia programai keisti pagrindinio puslapio nustatymus ir sparčiuosius klavišus."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Problema įkeliant valdiklį"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Tai sistemos programa ir jos negalima pašalinti."</string>
     <string name="dream_name" msgid="2847171357608437154">"Raketinis prieštankinis šautuvas"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index c6ad644..5ea6a07 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Ļauj lietojumprogrammai lasīt iestatījumus un saīsnes sākuma ekrānā."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"rakstīt sākuma ekrāna iestatījumus un saīsnes"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Ļauj lietojumprogrammai mainīt iestatījumus un saīsnes sākuma ekrānā."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Radās problēma, ielādējot logrīku"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Šī ir sistēmas lietojumprogramma un to nevar atinstalēt."</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 192ee90..b11eaf7 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Membenarkan aplikasi untuk membaca tetapan dan pintasan di Laman Utama."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"menulis tetapan dan pintasan Laman Utama"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Membenarkan aplikasi untuk menukar tetapan dan pintasan di Laman Utama."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Masalah memuatkan widget"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Ini adalah aplikasi sistem dan tidak boleh dinyahpasang."</string>
     <string name="dream_name" msgid="2847171357608437154">"Pelancar Roket"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index afcf8f0..1ca0070 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Lar applikasjonen lese innstillinger og snarveier fra skrivebordet."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"skrive skrivebordsinnstillinger og -snarveier"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Lar applikasjonen endre innstillinger og snarveier på skrivebordet."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Problem under lasting av gadget"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Dette er et systemprogram og kan ikke avinstalleres."</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index aea9a27..5a27c18 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Hiermee kan een app de instellingen en snelkoppelingen op de startpagina lezen."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"instellingen en snelkoppelingen voor de startpagina schrijven"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Hiermee kan een app de instellingen en snelkoppelingen op de startpagina wijzigen."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Probleem bij het laden van widget"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Dit is een systeemtoepassing die niet kan worden verwijderd."</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 7e60910..0d0b6c6 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Umożliwia aplikacji odczytywanie ustawień i skrótów strony głównej."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"zapisywanie ustawień i skrótów strony głównej"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Umożliwia aplikacji zmianę ustawień i skrótów strony głównej."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Problem podczas ładowania widżetu"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"To jest aplikacja systemowa i nie można jej odinstalować."</string>
     <string name="dream_name" msgid="2847171357608437154">"Wyrzutnia rakiet"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index f5aaf00..fc77880 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Permite que uma aplicação leia as definições e os atalhos do ecrã principal."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"escrever definições e atalhos do ecrã principal"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Permite que uma aplicação altere as definições e os atalhos do ecrã principal."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Erro ao carregar o widget"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"É uma aplicação de sistema e não pode ser desinstalada."</string>
     <string name="dream_name" msgid="2847171357608437154">"Lança-mísseis"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 32b003c..772ad99 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Permite que um aplicativo leia as configurações e atalhos na Página inicial."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"gravar configurações e atalhos da Página inicial"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Permite que um aplicativo altere as configurações e atalhos na Página inicial."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Problema ao carregar o widget"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Este é um aplicativo do sistema e não pode ser desinstalado."</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index 478415b..de737be 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -105,8 +105,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Pussibilitescha ch\'ina applicaziun possia leger ils parameters e las scursanidas da la pagina da partenza."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"Definir ils parameters e las scursanidas per la pagina da partenza"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Pussibilitescha ch\'ina applicaziun possia midar ils parameters e las scursanidas sin la pagina da partenza."</string>
-    <!-- no translation found for google_apps_folder_name (2873137836817266807) -->
-    <skip />
     <string name="gadget_error_text" msgid="8359351016167075858">"Problems cun chargiar il widget"</string>
     <!-- no translation found for uninstall_system_app_text (7488523163288397451) -->
     <skip />
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index a09b0e5..0f5f60c 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Permite unei aplicaţii să citească setările şi comenzile rapide în Ecranul de pornire."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"scrieţi setări şi comenzi rapide pentru Ecranul de pornire"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Permite unei aplicaţii să modifice setările şi comenzile rapide pentru Ecranul de pornire."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Probleme la încărcarea obiectului widget"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Aceasta este o aplicaţie a sistemului şi nu se poate dezinstala."</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index e067f03..bf6fbc6 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Позволяет приложению считывать настройки и ярлыки на главном экране."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"изменять настройки и ярлыки главного экрана"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Позволяет приложению изменять настройки и ярлыки на главном экране."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Не удалось загрузить виджет"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Это системное приложение. Удалить его невозможно."</string>
     <string name="dream_name" msgid="2847171357608437154">"Фейерверк"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index dfae549..7b31a11 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Povoľuje aplikácii čítať nastavenia a odkazy plochy."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"zápis nastavení a odkazov plochy"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Povoľuje aplikácii zmeniť nastavenia a odkazy plochy."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Problém s načítaním miniaplikácií"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Toto je systémová aplikácia a nie je možné ju odinštalovať."</string>
     <string name="dream_name" msgid="2847171357608437154">"Raketomet"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index dd36403..b20a830 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Omogoča programu branje nastavitev in bližnjic na začetnem zaslonu."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"zapis nastavitev in bližnjic začetnega zaslona"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Omogoča programu spreminjanje nastavitev in bližnjic na začetnem zaslonu."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Težave pri nalaganju pripomočka"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"To je sistemski program in ga ni mogoče odstraniti."</string>
     <string name="dream_name" msgid="2847171357608437154">"Raketno izstrelišče"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 47eff57..893e4bc 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Омогућава апликацији да чита подешавања и пречице на почетном екрану."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"уписивање подешавања и пречица на почетном екрану"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Омогућава апликацији да промени подешавања и пречице на почетном екрану."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Проблем приликом учитавања виџета"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Ово је системска апликација и не може да се деинсталира."</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index e6d0288..ce65dfa 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Tillåter att ett program läser inställningar och genvägar på startsidan."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"skriva inställningar och genvägar för startsidan"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Tillåter att ett program ändrar inställningar och genvägar på startsidan."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Det gick inte att läsa in widgeten"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Det här är ett systemprogram och kan inte avinstalleras."</string>
     <string name="dream_name" msgid="2847171357608437154">"Raketavfyringsramp"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 2e67274..692c0bf 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Huruhusu programu kusoma mipangilio na njia za mkato katika Nyumbani."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"andika mipangilio ya Nyumbani na njia za mkato"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Huruhusu programu kubadilisha mipangilio na njia za mkato Nyumbani."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Tatizo la kupakia wijeti"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Hii ni programu ya mfumo na haiwezi kuondolewa."</string>
     <string name="dream_name" msgid="2847171357608437154">"Kizinduzi cha Roketi"</string>
diff --git a/res/values-sw340dp-port/dimens.xml b/res/values-sw340dp-port/dimens.xml
index 3fea47b..ab8cfec 100644
--- a/res/values-sw340dp-port/dimens.xml
+++ b/res/values-sw340dp-port/dimens.xml
@@ -32,7 +32,8 @@
     <dimen name="hotseat_left_padding">-1dp</dimen>
     <dimen name="hotseat_right_padding">-1dp</dimen>
 
-    <dimen name="qsb_bar_height">50dp</dimen>
+    <dimen name="qsb_bar_height">54dp</dimen>
+    <dimen name="search_bar_height">48dp</dimen>
     <!-- height of the bottom row of controls -->
     <dimen name="button_bar_height">80dip</dimen>
     <!-- Because portal animations go beyond the bounds of an icon, we need
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 3fe53b5..1b806a6 100644
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -41,8 +41,6 @@
     
     <!-- Size of icons in workspace -->
     <dimen name="app_icon_size">72dp</dimen>
-    <!-- Size of content of icons in workspace, as specified by the android icon guidelines -->
-    <dimen name="app_icon_content_size">60dp</dimen>
 
     <!-- extra horizontal spacing between mini screen thumbnails ie. in all
          apps and in customization mode -->
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 7eca4b3..601c7ac 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"อนุญาตให้แอปพลิเคชันอ่านการตั้งค่าและทางลัดในหน้าแรก"</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"เขียนการตั้งค่าและทางลัดหน้าแรกแล้ว"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"อนุญาตให้แอปพลิเคชันเปลี่ยนการตั้งค่าและทางลัดในหน้าแรก"</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"มีปัญหาขณะโหลดวิดเจ็ต"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"นี่เป็นแอปพลิเคชันระบบและไม่สามารถถอนการติดตั้งได้"</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 3240bb2..a8e247f 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Pinapayagan ang isang application na basahin ang mga setting at shortcut sa Home."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"magsulat ng mga setting ng Home at mga shortcut"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Pinapayagan ang isang application na baguhin ang mga setting at shortcut sa Home."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Problema sa pag-load ng widget"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Isa itong system application at hindi maaaring i-install."</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 4aef605..2ee87a1 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Bir uygulamaya Ana Sayfadaki ayarları ve kısayolları okuma izni verir."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"Ana Sayfa ayarlarını ve kısayollarını yaz"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Bir uygulamaya Ana Sayfadaki ayarları ve kısayolları değiştirme izni verir."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Widget yüklenirken sorun oluştu"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Bu bir sistem uygulamasıdır ve kaldırılamaz."</string>
     <string name="dream_name" msgid="2847171357608437154">"Roket Fırlatıcı"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index df986a0..e3991fb 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Дозволяє програмі читати налаштування та ярлики на Головній."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"писати налашт-ня Головної та ярлики"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Дозволяє програмі змінювати налаштування та ярлики на Головній."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Пробл із завантаж. віджета"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Це системна програма, її неможливо видалити."</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index aabfcc9..eb0f04a 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Cho phép ứng dụng đọc cài đặt và lối tắt trên Màn hình trang chủ."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"ghi cài đặt Màn hình trang chủ và lối tắt"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Cho phép ứng dụng thay đổi cài đặt và lối tắt trên Màn hình trang chủ."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Sự cố khi tải tiện ích"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Đây là ứng dụng hệ thống và không thể gỡ cài đặt."</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 7751191..2b0ce62 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"允许应用程序读取主屏幕的设置和快捷方式。"</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"写入主屏幕的设置和快捷方式"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"允许应用程序更改主屏幕的设置和快捷方式。"</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"载入窗口小部件时出现问题"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"这是系统应用程序,无法卸载。"</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index cc08107..38863f3 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"允許應用程式讀取主螢幕中的設定和捷徑。"</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"寫入主螢幕設定和捷徑"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"允許應用程式變更主螢幕中的設定和捷徑。"</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"載入小工具時發生問題"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"這是系統應用程式,無法將其解除安裝。"</string>
     <string name="dream_name" msgid="2847171357608437154">"Rocket Launcher"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 51ddd62..75d8c65 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -80,7 +80,6 @@
     <string name="permdesc_read_settings" msgid="8377434937176025492">"Ivumela uhlelo lokusebenza ukufunda izilungiselelo nezinqamuleli Ekhaya."</string>
     <string name="permlab_write_settings" msgid="1360567537236705628">"bhala izilungiselelo zaseKhaya nezinqamuleli"</string>
     <string name="permdesc_write_settings" msgid="1098648778383349818">"Ivumela izinhlelo ukushintsha izilungiselelo nezinqamuleli Ekhaya."</string>
-    <string name="google_apps_folder_name" msgid="2873137836817266807">"I-Google"</string>
     <string name="gadget_error_text" msgid="8359351016167075858">"Inkinga yokulayisha iwijethi"</string>
     <string name="uninstall_system_app_text" msgid="7488523163288397451">"Lolu uhlelo lokusebenza lwesistimu futhi alikwazi ukukhishwa."</string>
     <string name="dream_name" msgid="2847171357608437154">"Isiqalisi se-Rocket"</string>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index e5e1b3f..ab24d5b 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -20,14 +20,14 @@
 
 <!-- Workspace -->
     <dimen name="qsb_bar_height">40dp</dimen>
-    <dimen name="search_bar_height">44dp</dimen>
+    <dimen name="search_bar_height">40dp</dimen>
     <dimen name="workspace_cell_width">80dp</dimen>
     <dimen name="workspace_cell_height">100dp</dimen>
     <dimen name="workspace_width_gap">-1dp</dimen>
     <dimen name="workspace_height_gap">-1dp</dimen>
     <dimen name="workspace_max_gap">16dp</dimen>
     <dimen name="folder_cell_width">74dp</dimen>
-    <dimen name="folder_cell_height">80dp</dimen>
+    <dimen name="folder_cell_height">82dp</dimen>
     <dimen name="workspace_divider_padding_left">12dp</dimen>
     <dimen name="workspace_divider_padding_right">12dp</dimen>
     <dimen name="workspace_divider_padding_top">0dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5c806e2..0f4a3ba 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -153,8 +153,8 @@
     <!-- Noun, menu item used to show help. [CHAR_LIMIT=none] -->
     <string name="menu_help">Help</string>
 
-    <!-- URL pointing to help text. [DO NOT TRANSLATE] -->
-    <string name="help_url" translatable="false">http://www.google.com/support/mobile/?p=help_home</string>
+    <!-- URL pointing to help text. If empty, no link to help will be created [DO NOT TRANSLATE] -->
+    <string name="help_url" translatable="false"></string>
 
     <!--  Strings for the contextual action bar (CAB) in All Apps -->
     <skip />
@@ -199,18 +199,9 @@
     <!-- Widgets: -->
     <skip />    
 
-    <!-- The Google Apps folder name -->
-    <string name="google_apps_folder_name">Google</string>
-
     <!-- Text to show user in place of a gadget when we can't display it properly -->
     <string name="gadget_error_text">Problem loading widget</string>
 
-    <!-- URL to use when detecting the current default browser. 
-         Attempts to mimic homepage_base in Browser; {CID} should be replaced
-         by the client-id, e.g. "android-google". -->
-    <string name="default_browser_url" translatable="false">
-        http://www.google.com/m?client=ms-{CID}&amp;source=android-home-hotseat</string>
-
     <!-- Text to inform the user that they can't uninstall a system application -->
     <string name="uninstall_system_app_text">This is a system application and cannot be uninstalled.</string>
 
@@ -251,5 +242,6 @@
     <string name="folder_cling_create_folder">To make a new folder on your home screen, stack one app on top of another.</string>
     <!-- The text on the button to dismiss a cling [CHAR_LIMIT=none] -->
     <string name="cling_dismiss">OK</string>
+    <add-resource type="string" name="default_folder_name" />
 
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 19a05a0..c8fe024 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -77,7 +77,7 @@
     </style>
 
     <style name="WorkspaceIcon.Landscape">
-        <item name="android:drawablePadding">4dp</item>
+        <item name="android:drawablePadding">2dp</item>
         <item name="android:paddingLeft">4dp</item>
         <item name="android:paddingRight">4dp</item>
         <item name="android:paddingTop">6dp</item>
@@ -91,7 +91,7 @@
     <style name="WorkspaceIcon.Landscape.Folder">
         <item name="android:drawablePadding">0dp</item>
         <item name="android:paddingTop">0dp</item>
-        <item name="android:layout_marginTop">-6dp</item>
+        <item name="android:layout_marginTop">-2dp</item>
     </style>
 
     <style name="WorkspaceIcon.Portrait.AppsCustomize">
@@ -146,6 +146,8 @@
         <item name="android:paddingRight">25dp</item>
         <item name="android:textColor">#FFFFFFFF</item>
         <item name="android:textSize">16sp</item>
+        <item name="android:singleLine">true</item>
+        <item name="android:ellipsize">end</item>
         <item name="android:shadowColor">#FF000000</item>
         <item name="android:shadowDx">0.0</item>
         <item name="android:shadowDy">1.0</item>
diff --git a/res/xml/default_workspace.xml b/res/xml/default_workspace.xml
index ccc8022..f2f4240 100644
--- a/res/xml/default_workspace.xml
+++ b/res/xml/default_workspace.xml
@@ -29,7 +29,7 @@
 
     <!-- Middle screen [2] -->
     <appwidget
-        launcher:packageName="com.google.android.deskclock"
+        launcher:packageName="com.android.deskclock"
         launcher:className="com.android.alarmclock.AnalogAppWidgetProvider"
         launcher:screen="2"
         launcher:x="1"
@@ -37,59 +37,15 @@
         launcher:spanX="2"
         launcher:spanY="2" />
     <favorite
-        launcher:packageName="com.google.android.camera"
+        launcher:packageName="com.android.camera"
         launcher:className="com.android.camera.Camera"
         launcher:screen="2"
         launcher:x="0"
         launcher:y="3" />
-    <folder
-        launcher:screen="2"
-        launcher:x="3"
-        launcher:y="3"
-        launcher:title="@string/google_apps_folder_name">
-        <favorite
-            launcher:packageName="com.google.android.apps.maps"
-            launcher:className="com.google.android.maps.MapsActivity" />
-        <favorite
-            launcher:packageName="com.google.android.gm"
-            launcher:className="com.google.android.gm.ConversationListActivityGmail" />
-        <favorite
-            launcher:packageName="com.google.android.calendar"
-            launcher:className="com.android.calendar.AllInOneActivity" />
-        <favorite
-            launcher:packageName="com.google.android.apps.plus"
-            launcher:className="com.google.android.apps.plus.phone.HomeActivity" />
-        <favorite
-            launcher:packageName="com.google.android.music"
-            launcher:className="com.android.music.activitymanagement.TopLevelActivity" />
-        <favorite
-            launcher:packageName="com.google.android.apps.books"
-            launcher:className="com.google.android.apps.books.app.BooksActivity" />
-        <favorite
-            launcher:packageName="com.google.android.videos"
-            launcher:className="com.google.android.youtube.videos.honeycomb.VideosActivity" />
-        <favorite
-            launcher:packageName="com.android.vending"
-            launcher:className="com.android.vending.AssetBrowserActivity" />
-        <favorite
-            launcher:packageName="com.google.android.talk"
-            launcher:className="com.google.android.talk.SigningInActivity" />
-        <favorite
-            launcher:packageName="com.google.android.youtube"
-            launcher:className="com.google.android.youtube.app.honeycomb.Shell$HomeActivity" />
-    </folder>
 
     <!-- Right screen [3] -->
-    <appwidget
-        launcher:packageName="com.android.vending"
-        launcher:className="com.android.vending.MarketWidgetProvider"
-        launcher:screen="3"
-        launcher:x="1"
-        launcher:y="1"
-        launcher:spanX="2"
-        launcher:spanY="2" />
     <favorite
-        launcher:packageName="com.google.android.gallery3d"
+        launcher:packageName="com.android.gallery3d"
         launcher:className="com.android.gallery3d.app.Gallery"
         launcher:screen="3"
         launcher:x="1"
@@ -126,7 +82,7 @@
         launcher:x="3"
         launcher:y="0" />
     <favorite
-        launcher:packageName="com.google.android.browser"
+        launcher:packageName="com.android.browser"
         launcher:className="com.android.browser.BrowserActivity"
         launcher:container="-101"
         launcher:screen="4"
diff --git a/src/com/android/launcher2/AppWidgetResizeFrame.java b/src/com/android/launcher2/AppWidgetResizeFrame.java
index 4762193..b7943ec 100644
--- a/src/com/android/launcher2/AppWidgetResizeFrame.java
+++ b/src/com/android/launcher2/AppWidgetResizeFrame.java
@@ -111,11 +111,11 @@
                 Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
         addView(mBottomHandle, lp);
 
-        Resources r = context.getResources();
-        mWidgetPaddingLeft = r.getDimensionPixelSize(R.dimen.app_widget_padding_left);
-        mWidgetPaddingTop = r.getDimensionPixelSize(R.dimen.app_widget_padding_top);
-        mWidgetPaddingRight = r.getDimensionPixelSize(R.dimen.app_widget_padding_right);
-        mWidgetPaddingBottom = r.getDimensionPixelSize(R.dimen.app_widget_padding_bottom);
+        Launcher.Padding p = mLauncher.getPaddingForWidget(widgetView.getAppWidgetInfo().provider);
+        mWidgetPaddingLeft = p.left;
+        mWidgetPaddingTop = p.top;
+        mWidgetPaddingRight = p.right;
+        mWidgetPaddingBottom = p.bottom;
 
         if (mResizeMode == AppWidgetProviderInfo.RESIZE_HORIZONTAL) {
             mTopHandle.setVisibility(GONE);
diff --git a/src/com/android/launcher2/AppsCustomizePagedView.java b/src/com/android/launcher2/AppsCustomizePagedView.java
index 6493e97..ca4d614 100644
--- a/src/com/android/launcher2/AppsCustomizePagedView.java
+++ b/src/com/android/launcher2/AppsCustomizePagedView.java
@@ -96,6 +96,25 @@
         doInBackgroundCallback = bgR;
         postExecuteCallback = postR;
     }
+    void cleanup(boolean cancelled) {
+        // Clean up any references to source/generated bitmaps
+        if (sourceImages != null) {
+            if (cancelled) {
+                for (Bitmap b : sourceImages) {
+                    b.recycle();
+                }
+            }
+            sourceImages.clear();
+        }
+        if (generatedImages != null) {
+            if (cancelled) {
+                for (Bitmap b : generatedImages) {
+                    b.recycle();
+                }
+            }
+            generatedImages.clear();
+        }
+    }
     int page;
     ArrayList<Object> items;
     ArrayList<Bitmap> sourceImages;
@@ -692,9 +711,11 @@
 
         layout.createHardwareLayers();
 
+        /* TEMPORARILY DISABLE HOLOGRAPHIC ICONS
         if (mFadeInAdjacentScreens) {
             prepareGenerateHoloOutlinesTask(page, items, images);
         }
+        */
     }
 
     /**
@@ -746,21 +767,31 @@
                 @Override
                 public void run(AppsCustomizeAsyncTask task, AsyncTaskPageData data) {
                     try {
-                        Thread.sleep(sleepMs);
-                    } catch (Exception e) {}
-                    loadWidgetPreviewsInBackground(task, data);
+                        try {
+                            Thread.sleep(sleepMs);
+                        } catch (Exception e) {}
+                        loadWidgetPreviewsInBackground(task, data);
+                    } finally {
+                        if (task.isCancelled()) {
+                            data.cleanup(true);
+                        }
+                    }
                 }
             },
             new AsyncTaskCallback() {
                 @Override
                 public void run(AppsCustomizeAsyncTask task, AsyncTaskPageData data) {
-                    mRunningTasks.remove(task);
-                    if (task.isCancelled()) return;
-                    if (task.page > getPageCount()) return;
-                    if (task.pageContentType != mContentType) return;
-                    onSyncWidgetPageItems(data);
+                    try {
+                        mRunningTasks.remove(task);
+                        if (task.isCancelled()) return;
+                        if (task.page > getPageCount()) return;
+                        if (task.pageContentType != mContentType) return;
+                        onSyncWidgetPageItems(data);
+                    } finally {
+                        data.cleanup(task.isCancelled());
+                    }
                 }
-        });
+            });
 
         // Ensure that the task is appropriately prioritized and runs in parallel
         AppsCustomizeAsyncTask t = new AppsCustomizeAsyncTask(page, mContentType,
@@ -790,40 +821,50 @@
             new AsyncTaskCallback() {
                 @Override
                 public void run(AppsCustomizeAsyncTask task, AsyncTaskPageData data) {
-                    // Ensure that this task starts running at the correct priority
-                    task.syncThreadPriority();
-
-                    ArrayList<Bitmap> images = data.generatedImages;
-                    ArrayList<Bitmap> srcImages = data.sourceImages;
-                    int count = srcImages.size();
-                    Canvas c = new Canvas();
-                    for (int i = 0; i < count && !task.isCancelled(); ++i) {
-                        // Before work on each item, ensure that this task is running at the correct
-                        // priority
+                    try {
+                        // Ensure that this task starts running at the correct priority
                         task.syncThreadPriority();
 
-                        Bitmap b = srcImages.get(i);
-                        Bitmap outline = Bitmap.createBitmap(b.getWidth(), b.getHeight(),
-                                Bitmap.Config.ARGB_8888);
+                        ArrayList<Bitmap> images = data.generatedImages;
+                        ArrayList<Bitmap> srcImages = data.sourceImages;
+                        int count = srcImages.size();
+                        Canvas c = new Canvas();
+                        for (int i = 0; i < count && !task.isCancelled(); ++i) {
+                            // Before work on each item, ensure that this task is running at the correct
+                            // priority
+                            task.syncThreadPriority();
 
-                        c.setBitmap(outline);
-                        c.save();
-                        c.drawBitmap(b, 0, 0, null);
-                        c.restore();
-                        c.setBitmap(null);
+                            Bitmap b = srcImages.get(i);
+                            Bitmap outline = Bitmap.createBitmap(b.getWidth(), b.getHeight(),
+                                    Bitmap.Config.ARGB_8888);
 
-                        images.add(outline);
+                            c.setBitmap(outline);
+                            c.save();
+                            c.drawBitmap(b, 0, 0, null);
+                            c.restore();
+                            c.setBitmap(null);
+
+                            images.add(outline);
+                        }
+                    } finally {
+                        if (task.isCancelled()) {
+                            data.cleanup(true);
+                        }
                     }
                 }
             },
             new AsyncTaskCallback() {
                 @Override
                 public void run(AppsCustomizeAsyncTask task, AsyncTaskPageData data) {
-                    mRunningTasks.remove(task);
-                    if (task.isCancelled()) return;
-                    if (task.page > getPageCount()) return;
-                    if (task.pageContentType != mContentType) return;
-                    onHolographicPageItemsLoaded(data);
+                    try {
+                        mRunningTasks.remove(task);
+                        if (task.isCancelled()) return;
+                        if (task.page > getPageCount()) return;
+                        if (task.pageContentType != mContentType) return;
+                        onHolographicPageItemsLoaded(data);
+                    } finally {
+                        data.cleanup(task.isCancelled());
+                    }
                 }
             });
 
@@ -981,11 +1022,57 @@
         int cellHeight = ((contentHeight - mPageLayoutPaddingTop - mPageLayoutPaddingBottom
                 - ((mWidgetCountY - 1) * mWidgetHeightGap)) / mWidgetCountY);
 
+        // Prepare the set of widgets to load previews for in the background
         int offset = page * numItemsPerPage;
         for (int i = offset; i < Math.min(offset + numItemsPerPage, mWidgets.size()); ++i) {
             items.add(mWidgets.get(i));
         }
 
+        // Prepopulate the pages with the other widget info, and fill in the previews later
+        PagedViewGridLayout layout = (PagedViewGridLayout) getPageAt(page);
+        layout.setColumnCount(layout.getCellCountX());
+        for (int i = 0; i < items.size(); ++i) {
+            Object rawInfo = items.get(i);
+            PendingAddItemInfo createItemInfo = null;
+            PagedViewWidget widget = (PagedViewWidget) mLayoutInflater.inflate(
+                    R.layout.apps_customize_widget, layout, false);
+            if (rawInfo instanceof AppWidgetProviderInfo) {
+                // Fill in the widget information
+                AppWidgetProviderInfo info = (AppWidgetProviderInfo) rawInfo;
+                createItemInfo = new PendingAddWidgetInfo(info, null, null);
+                int[] cellSpans = mLauncher.getSpanForWidget(info, null);
+                widget.applyFromAppWidgetProviderInfo(info, -1, cellSpans,
+                        mHolographicOutlineHelper);
+                widget.setTag(createItemInfo);
+            } else if (rawInfo instanceof ResolveInfo) {
+                // Fill in the shortcuts information
+                ResolveInfo info = (ResolveInfo) rawInfo;
+                createItemInfo = new PendingAddItemInfo();
+                createItemInfo.itemType = LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT;
+                createItemInfo.componentName = new ComponentName(info.activityInfo.packageName,
+                        info.activityInfo.name);
+                widget.applyFromResolveInfo(mPackageManager, info, mHolographicOutlineHelper);
+                widget.setTag(createItemInfo);
+            }
+            widget.setOnClickListener(this);
+            widget.setOnLongClickListener(this);
+            widget.setOnTouchListener(this);
+
+            // Layout each widget
+            int ix = i % mWidgetCountX;
+            int iy = i / mWidgetCountX;
+            GridLayout.LayoutParams lp = new GridLayout.LayoutParams(
+                    GridLayout.spec(iy, GridLayout.LEFT),
+                    GridLayout.spec(ix, GridLayout.TOP));
+            lp.width = cellWidth;
+            lp.height = cellHeight;
+            lp.setGravity(Gravity.TOP | Gravity.LEFT);
+            if (ix > 0) lp.leftMargin = mWidgetWidthGap;
+            if (iy > 0) lp.topMargin = mWidgetHeightGap;
+            layout.addView(widget, lp);
+        }
+
+        // Load the widget previews
         if (immediate) {
             AsyncTaskPageData data = new AsyncTaskPageData(page, items, cellWidth, cellHeight,
                     mWidgetCountX, null, null);
@@ -994,7 +1081,6 @@
         } else {
             prepareLoadWidgetPreviewsTask(page, items, cellWidth, cellHeight, mWidgetCountX);
         }
-        PagedViewGridLayout layout = (PagedViewGridLayout) getPageAt(page);
     }
     private void loadWidgetPreviewsInBackground(AppsCustomizeAsyncTask task,
             AsyncTaskPageData data) {
@@ -1034,65 +1120,25 @@
     private void onSyncWidgetPageItems(AsyncTaskPageData data) {
         int page = data.page;
         PagedViewGridLayout layout = (PagedViewGridLayout) getPageAt(page);
-        // Only set the column count once we have items
-        layout.setColumnCount(layout.getCellCountX());
 
         ArrayList<Object> items = data.items;
         int count = items.size();
-        int cellWidth = data.cellWidth;
-        int cellHeight = data.cellHeight;
-        int cellCountX = data.cellCountX;
         for (int i = 0; i < count; ++i) {
-            Object rawInfo = items.get(i);
-            PendingAddItemInfo createItemInfo = null;
-            PagedViewWidget widget = (PagedViewWidget) mLayoutInflater.inflate(
-                    R.layout.apps_customize_widget, layout, false);
-            if (rawInfo instanceof AppWidgetProviderInfo) {
-                // Fill in the widget information
-                AppWidgetProviderInfo info = (AppWidgetProviderInfo) rawInfo;
-                createItemInfo = new PendingAddWidgetInfo(info, null, null);
-                int[] cellSpans = mLauncher.getSpanForWidget(info, null);
-                FastBitmapDrawable preview = new FastBitmapDrawable(data.generatedImages.get(i));
-                widget.applyFromAppWidgetProviderInfo(info, preview, -1, cellSpans, 
-                        mHolographicOutlineHelper);
-                widget.setTag(createItemInfo);
-            } else if (rawInfo instanceof ResolveInfo) {
-                // Fill in the shortcuts information
-                ResolveInfo info = (ResolveInfo) rawInfo;
-                createItemInfo = new PendingAddItemInfo();
-                createItemInfo.itemType = LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT;
-                createItemInfo.componentName = new ComponentName(info.activityInfo.packageName,
-                        info.activityInfo.name);
-                FastBitmapDrawable preview = new FastBitmapDrawable(data.generatedImages.get(i));
-                widget.applyFromResolveInfo(mPackageManager, info, preview,
-                        mHolographicOutlineHelper);
-                widget.setTag(createItemInfo);
+            PagedViewWidget widget = (PagedViewWidget) layout.getChildAt(i);
+            if (widget != null) {
+                widget.applyPreview(new FastBitmapDrawable(data.generatedImages.get(i)), i);
             }
-            widget.setOnClickListener(this);
-            widget.setOnLongClickListener(this);
-            widget.setOnTouchListener(this);
-
-            // Layout each widget
-            int ix = i % cellCountX;
-            int iy = i / cellCountX;
-            GridLayout.LayoutParams lp = new GridLayout.LayoutParams(
-                    GridLayout.spec(iy, GridLayout.LEFT),
-                    GridLayout.spec(ix, GridLayout.TOP));
-            lp.width = cellWidth;
-            lp.height = cellHeight;
-            lp.setGravity(Gravity.TOP | Gravity.LEFT);
-            if (ix > 0) lp.leftMargin = mWidgetWidthGap;
-            if (iy > 0) lp.topMargin = mWidgetHeightGap;
-            layout.addView(widget, lp);
         }
         layout.createHardwareLayer();
 
         invalidate();
         forceUpdateAdjacentPagesAlpha();
 
+        /* TEMPORARILY DISABLE HOLOGRAPHIC ICONS
         if (mFadeInAdjacentScreens) {
             prepareGenerateHoloOutlinesTask(data.page, data.items, data.generatedImages);
         }
+        */
     }
     private void onHolographicPageItemsLoaded(AsyncTaskPageData data) {
         // Invalidate early to short-circuit children invalidates
diff --git a/src/com/android/launcher2/BubbleTextView.java b/src/com/android/launcher2/BubbleTextView.java
index 79e27b0..cdc89ba 100644
--- a/src/com/android/launcher2/BubbleTextView.java
+++ b/src/com/android/launcher2/BubbleTextView.java
@@ -256,6 +256,11 @@
         }
     }
 
+    void clearPressedOrFocusedBackground() {
+        mPressedOrFocusedBackground = null;
+        setCellLayoutPressedOrFocusedIcon();
+    }
+
     Bitmap getPressedOrFocusedBackground() {
         return mPressedOrFocusedBackground;
     }
diff --git a/src/com/android/launcher2/Cling.java b/src/com/android/launcher2/Cling.java
index 0a9bc7f..9f27586 100644
--- a/src/com/android/launcher2/Cling.java
+++ b/src/com/android/launcher2/Cling.java
@@ -161,11 +161,14 @@
 
             // Draw the background
             if (mBackground == null) {
-                if (mDrawIdentifier.equals(WORKSPACE_PORTRAIT)) {
+                if (mDrawIdentifier.equals(WORKSPACE_PORTRAIT) ||
+                    mDrawIdentifier.equals(WORKSPACE_LANDSCAPE)) {
                     mBackground = getResources().getDrawable(R.drawable.bg_cling1);
-                } else if (mDrawIdentifier.equals(ALLAPPS_PORTRAIT)) {
+                } else if (mDrawIdentifier.equals(ALLAPPS_PORTRAIT) ||
+                        mDrawIdentifier.equals(ALLAPPS_LANDSCAPE)) {
                     mBackground = getResources().getDrawable(R.drawable.bg_cling2);
-                } else if (mDrawIdentifier.equals(FOLDER_PORTRAIT)) {
+                } else if (mDrawIdentifier.equals(FOLDER_PORTRAIT) ||
+                        mDrawIdentifier.equals(FOLDER_LANDSCAPE)) {
                     mBackground = getResources().getDrawable(R.drawable.bg_cling3);
                 }
             }
diff --git a/src/com/android/launcher2/DragController.java b/src/com/android/launcher2/DragController.java
index afbf80d..82aa30f 100644
--- a/src/com/android/launcher2/DragController.java
+++ b/src/com/android/launcher2/DragController.java
@@ -16,6 +16,8 @@
 
 package com.android.launcher2;
 
+import android.appwidget.AppWidgetManager;
+import android.appwidget.AppWidgetProviderInfo;
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.Rect;
@@ -361,11 +363,27 @@
             if (mLastDropTarget != null) {
                 mLastDropTarget.onDragExit(mDragObject);
             }
+            mDragObject.cancelled = true;
             mDragObject.dragComplete = true;
             mDragObject.dragSource.onDropCompleted(null, mDragObject, false);
         }
         endDrag();
     }
+    public void onAppsRemoved(ArrayList<ApplicationInfo> apps, Context context) {
+        // Cancel the current drag if we are removing an app that we are dragging
+        if (mDragObject != null) {
+            Object rawDragInfo = mDragObject.dragInfo;
+            if (rawDragInfo instanceof ShortcutInfo) {
+                ShortcutInfo dragInfo = (ShortcutInfo) rawDragInfo;
+                for (ApplicationInfo info : apps) {
+                    if (dragInfo.intent.getComponent().equals(info.intent.getComponent())) {
+                        cancelDrag();
+                        return;
+                    }
+                }
+            }
+        }
+    }
 
     private void endDrag() {
         if (mDragging) {
@@ -483,16 +501,18 @@
         if (!inDeleteRegion && x < mScrollZone) {
             if (mScrollState == SCROLL_OUTSIDE_ZONE && mDistanceSinceScroll > slop) {
                 mScrollState = SCROLL_WAITING_IN_ZONE;
-                mScrollRunnable.setDirection(SCROLL_LEFT);
-                mHandler.postDelayed(mScrollRunnable, SCROLL_DELAY);
-                mDragScroller.onEnterScrollArea(x, y, SCROLL_LEFT);
+                if (mDragScroller.onEnterScrollArea(x, y, SCROLL_LEFT)) {
+                    mScrollRunnable.setDirection(SCROLL_LEFT);
+                    mHandler.postDelayed(mScrollRunnable, SCROLL_DELAY);
+                }
             }
         } else if (!inDeleteRegion && x > mScrollView.getWidth() - mScrollZone) {
             if (mScrollState == SCROLL_OUTSIDE_ZONE && mDistanceSinceScroll > slop) {
                 mScrollState = SCROLL_WAITING_IN_ZONE;
-                mScrollRunnable.setDirection(SCROLL_RIGHT);
-                mHandler.postDelayed(mScrollRunnable, SCROLL_DELAY);
-                mDragScroller.onEnterScrollArea(x, y, SCROLL_RIGHT);
+                if (mDragScroller.onEnterScrollArea(x, y, SCROLL_RIGHT)) {
+                    mScrollRunnable.setDirection(SCROLL_RIGHT);
+                    mHandler.postDelayed(mScrollRunnable, SCROLL_DELAY);
+                }
             }
         } else {
             if (mScrollState == SCROLL_WAITING_IN_ZONE) {
diff --git a/src/com/android/launcher2/DragScroller.java b/src/com/android/launcher2/DragScroller.java
index 894b06b..a3ee6c2 100644
--- a/src/com/android/launcher2/DragScroller.java
+++ b/src/com/android/launcher2/DragScroller.java
@@ -30,11 +30,11 @@
      *
      * @param direction The scroll direction
      */
-    void onEnterScrollArea(int x, int y, int direction);
+    boolean onEnterScrollArea(int x, int y, int direction);
 
     /**
      * The touch point has left the scroll area.
      * NOTE: This may not be called, if a drop occurs inside the scroll area.
      */
-    void onExitScrollArea();
+    boolean onExitScrollArea();
 }
diff --git a/src/com/android/launcher2/DropTarget.java b/src/com/android/launcher2/DropTarget.java
index 34fa893..4172da2 100644
--- a/src/com/android/launcher2/DropTarget.java
+++ b/src/com/android/launcher2/DropTarget.java
@@ -52,6 +52,9 @@
         /** Post drag animation runnable */
         public Runnable postAnimationRunnable = null;
 
+        /** Indicates that the drag operation was cancelled */
+        public boolean cancelled = false;
+
         public DragObject() {
         }
     }
diff --git a/src/com/android/launcher2/FocusHelper.java b/src/com/android/launcher2/FocusHelper.java
index f97492b..967b02f 100644
--- a/src/com/android/launcher2/FocusHelper.java
+++ b/src/com/android/launcher2/FocusHelper.java
@@ -23,6 +23,7 @@
 import android.view.ViewParent;
 import android.widget.TabHost;
 import android.widget.TabWidget;
+import android.widget.TextView;
 
 import com.android.launcher.R;
 
@@ -33,18 +34,25 @@
 /**
  * A keyboard listener we set on all the workspace icons.
  */
-class BubbleTextViewKeyEventListener implements View.OnKeyListener {
-    @Override
+class IconKeyEventListener implements View.OnKeyListener {
     public boolean onKey(View v, int keyCode, KeyEvent event) {
-        return FocusHelper.handleBubbleTextViewKeyEvent((BubbleTextView) v, keyCode, event);
+        return FocusHelper.handleIconKeyEvent(v, keyCode, event);
+    }
+}
+
+/**
+ * A keyboard listener we set on all the workspace icons.
+ */
+class FolderKeyEventListener implements View.OnKeyListener {
+    public boolean onKey(View v, int keyCode, KeyEvent event) {
+        return FocusHelper.handleFolderKeyEvent(v, keyCode, event);
     }
 }
 
 /**
  * A keyboard listener we set on all the hotseat buttons.
  */
-class HotseatBubbleTextViewKeyEventListener implements View.OnKeyListener {
-    @Override
+class HotseatIconKeyEventListener implements View.OnKeyListener {
     public boolean onKey(View v, int keyCode, KeyEvent event) {
         final Configuration configuration = v.getResources().getConfiguration();
         return FocusHelper.handleHotseatButtonKeyEvent(v, keyCode, event, configuration.orientation);
@@ -56,7 +64,6 @@
  * market icon and vice versa.
  */
 class AppsCustomizeTabKeyEventListener implements View.OnKeyListener {
-    @Override
     public boolean onKey(View v, int keyCode, KeyEvent event) {
         return FocusHelper.handleAppsCustomizeTabKeyEvent(v, keyCode, event);
     }
@@ -278,30 +285,36 @@
         final ViewGroup container = (ViewGroup) parentLayout.getParent();
         final TabHost tabHost = findTabHostParent(container);
         final TabWidget tabs = (TabWidget) tabHost.findViewById(com.android.internal.R.id.tabs);
-        final int widgetIndex = parent.indexOfChild(v);
+        final int iconIndex = parent.indexOfChild(v);
         final int widgetCount = parent.getChildCount();
         final int pageIndex = container.indexOfChild(parentLayout);
         final int pageCount = container.getChildCount();
         final int cellCountX = parentLayout.getCellCountX();
         final int cellCountY = parentLayout.getCellCountY();
-        final int x = widgetIndex % cellCountX;
-        final int y = widgetIndex / cellCountX;
+        final int x = iconIndex % cellCountX;
+        final int y = iconIndex / cellCountX;
 
         final int action = e.getAction();
         final boolean handleKeyEvent = (action != KeyEvent.ACTION_UP);
         PagedViewCellLayoutChildren newParent = null;
+        // Side pages do not always load synchronously, so check before focusing child siblings
+        // willy-nilly
+        View child = null;
         boolean wasHandled = false;
         switch (keyCode) {
             case KeyEvent.KEYCODE_DPAD_LEFT:
                 if (handleKeyEvent) {
                     // Select the previous icon or the last icon on the previous page
-                    if (widgetIndex > 0) {
-                        parent.getChildAt(widgetIndex - 1).requestFocus();
+                    if (iconIndex > 0) {
+                        parent.getChildAt(iconIndex - 1).requestFocus();
                     } else {
                         if (pageIndex > 0) {
                             newParent = getPagedViewCellLayoutChildrenForIndex(container,
                                     pageIndex - 1);
-                            newParent.getChildAt(newParent.getChildCount() - 1).requestFocus();
+                            if (newParent != null) {
+                                child = newParent.getChildAt(newParent.getChildCount() - 1);
+                                if (child != null) child.requestFocus();
+                            }
                         }
                     }
                 }
@@ -310,13 +323,16 @@
             case KeyEvent.KEYCODE_DPAD_RIGHT:
                 if (handleKeyEvent) {
                     // Select the next icon or the first icon on the next page
-                    if (widgetIndex < (widgetCount - 1)) {
-                        parent.getChildAt(widgetIndex + 1).requestFocus();
+                    if (iconIndex < (widgetCount - 1)) {
+                        parent.getChildAt(iconIndex + 1).requestFocus();
                     } else {
                         if (pageIndex < (pageCount - 1)) {
                             newParent = getPagedViewCellLayoutChildrenForIndex(container,
                                     pageIndex + 1);
-                            newParent.getChildAt(0).requestFocus();
+                            if (newParent != null) {
+                                child = newParent.getChildAt(0);
+                                if (child != null) child.requestFocus();
+                            }
                         }
                     }
                 }
@@ -326,8 +342,8 @@
                 if (handleKeyEvent) {
                     // Select the closest icon in the previous row, otherwise select the tab bar
                     if (y > 0) {
-                        int newWidgetIndex = ((y - 1) * cellCountX) + x;
-                        parent.getChildAt(newWidgetIndex).requestFocus();
+                        int newiconIndex = ((y - 1) * cellCountX) + x;
+                        parent.getChildAt(newiconIndex).requestFocus();
                     } else {
                         tabs.requestFocus();
                     }
@@ -338,8 +354,8 @@
                 if (handleKeyEvent) {
                     // Select the closest icon in the previous row, otherwise do nothing
                     if (y < (cellCountY - 1)) {
-                        int newWidgetIndex = Math.min(widgetCount - 1, ((y + 1) * cellCountX) + x);
-                        parent.getChildAt(newWidgetIndex).requestFocus();
+                        int newiconIndex = Math.min(widgetCount - 1, ((y + 1) * cellCountX) + x);
+                        parent.getChildAt(newiconIndex).requestFocus();
                     }
                 }
                 wasHandled = true;
@@ -360,7 +376,10 @@
                     if (pageIndex > 0) {
                         newParent = getPagedViewCellLayoutChildrenForIndex(container,
                                 pageIndex - 1);
-                        newParent.getChildAt(0).requestFocus();
+                        if (newParent != null) {
+                            child = newParent.getChildAt(0);
+                            if (child != null) child.requestFocus();
+                        }
                     } else {
                         parent.getChildAt(0).requestFocus();
                     }
@@ -374,7 +393,10 @@
                     if (pageIndex < (pageCount - 1)) {
                         newParent = getPagedViewCellLayoutChildrenForIndex(container,
                                 pageIndex + 1);
-                        newParent.getChildAt(0).requestFocus();
+                        if (newParent != null) {
+                            child = newParent.getChildAt(0);
+                            if (child != null) child.requestFocus();
+                        }
                     } else {
                         parent.getChildAt(widgetCount - 1).requestFocus();
                     }
@@ -465,7 +487,6 @@
         final int buttonIndex = parent.indexOfChild(v);
         final int buttonCount = parent.getChildCount();
         final int pageIndex = workspace.getCurrentPage();
-        final int pageCount = workspace.getChildCount();
 
         // NOTE: currently we don't special case for the phone UI in different
         // orientations, even though the hotseat is on the side in landscape mode.  This
@@ -502,7 +523,7 @@
                     // Select the first bubble text view in the current page of the workspace
                     final CellLayout layout = (CellLayout) workspace.getChildAt(pageIndex);
                     final CellLayoutChildren children = layout.getChildrenLayout();
-                    final View newIcon = getBubbleTextViewInDirection(layout, children, -1, 1);
+                    final View newIcon = getIconInDirection(layout, children, -1, 1);
                     if (newIcon != null) {
                         newIcon.requestFocus();
                     } else {
@@ -554,38 +575,41 @@
         return views;
     }
     /**
-     * Private helper method to find the index of the next BubbleTextView in the delta direction.
+     * Private helper method to find the index of the next BubbleTextView or FolderIcon in the 
+     * direction delta.
+     * 
      * @param delta either -1 or 1 depending on the direction we want to search
      */
-    private static View findIndexOfBubbleTextView(ArrayList<View> views, int i, int delta) {
+    private static View findIndexOfIcon(ArrayList<View> views, int i, int delta) {
         // Then we find the next BubbleTextView offset by delta from i
         final int count = views.size();
         int newI = i + delta;
         while (0 <= newI && newI < count) {
             View newV = views.get(newI);
-            if (newV instanceof BubbleTextView) {
+            if (newV instanceof BubbleTextView || newV instanceof FolderIcon) {
                 return newV;
             }
             newI += delta;
         }
         return null;
     }
-    private static View getBubbleTextViewInDirection(CellLayout layout, ViewGroup parent, int i,
+    private static View getIconInDirection(CellLayout layout, ViewGroup parent, int i,
             int delta) {
         final ArrayList<View> views = getCellLayoutChildrenSortedSpatially(layout, parent);
-        return findIndexOfBubbleTextView(views, i, delta);
+        return findIndexOfIcon(views, i, delta);
     }
-    private static View getBubbleTextViewInDirection(CellLayout layout, ViewGroup parent, View v,
+    private static View getIconInDirection(CellLayout layout, ViewGroup parent, View v,
             int delta) {
         final ArrayList<View> views = getCellLayoutChildrenSortedSpatially(layout, parent);
-        return findIndexOfBubbleTextView(views, views.indexOf(v), delta);
+        return findIndexOfIcon(views, views.indexOf(v), delta);
     }
     /**
-     * Private helper method to find the next closest BubbleTextView in the delta direction on the
-     * next line.
+     * Private helper method to find the next closest BubbleTextView or FolderIcon in the direction 
+     * delta on the next line.
+     * 
      * @param delta either -1 or 1 depending on the line and direction we want to search
      */
-    private static View getClosestBubbleTextViewOnLine(CellLayout layout, ViewGroup parent, View v,
+    private static View getClosestIconOnLine(CellLayout layout, ViewGroup parent, View v,
             int lineDelta) {
         final ArrayList<View> views = getCellLayoutChildrenSortedSpatially(layout, parent);
         final CellLayout.LayoutParams lp = (CellLayout.LayoutParams) v.getLayoutParams();
@@ -602,7 +626,8 @@
                 View newV = views.get(index);
                 CellLayout.LayoutParams tmpLp = (CellLayout.LayoutParams) newV.getLayoutParams();
                 boolean satisfiesRow = (lineDelta < 0) ? (tmpLp.cellY < row) : (tmpLp.cellY > row);
-                if (satisfiesRow && newV instanceof BubbleTextView) {
+                if (satisfiesRow &&
+                        (newV instanceof BubbleTextView || newV instanceof FolderIcon)) {
                     float tmpDistance = (float) Math.sqrt(Math.pow(tmpLp.cellX - lp.cellX, 2) +
                             Math.pow(tmpLp.cellY - lp.cellY, 2));
                     if (tmpDistance < closestDistance) {
@@ -624,17 +649,15 @@
     }
 
     /**
-     * Handles key events in a Workspace containing BubbleTextView.
+     * Handles key events in a Workspace containing.
      */
-    static boolean handleBubbleTextViewKeyEvent(BubbleTextView v, int keyCode, KeyEvent e) {
+    static boolean handleIconKeyEvent(View v, int keyCode, KeyEvent e) {
         CellLayoutChildren parent = (CellLayoutChildren) v.getParent();
         final CellLayout layout = (CellLayout) parent.getParent();
         final Workspace workspace = (Workspace) layout.getParent();
         final ViewGroup launcher = (ViewGroup) workspace.getParent();
         final ViewGroup tabs = (ViewGroup) launcher.findViewById(R.id.qsb_bar);
         final ViewGroup hotseat = (ViewGroup) launcher.findViewById(R.id.hotseat);
-        int iconIndex = parent.indexOfChild(v);
-        int iconCount = parent.getChildCount();
         int pageIndex = workspace.indexOfChild(layout);
         int pageCount = workspace.getChildCount();
 
@@ -645,13 +668,13 @@
             case KeyEvent.KEYCODE_DPAD_LEFT:
                 if (handleKeyEvent) {
                     // Select the previous icon or the last icon on the previous page if possible
-                    View newIcon = getBubbleTextViewInDirection(layout, parent, v, -1);
+                    View newIcon = getIconInDirection(layout, parent, v, -1);
                     if (newIcon != null) {
                         newIcon.requestFocus();
                     } else {
                         if (pageIndex > 0) {
                             parent = getCellLayoutChildrenForIndex(workspace, pageIndex - 1);
-                            newIcon = getBubbleTextViewInDirection(layout, parent,
+                            newIcon = getIconInDirection(layout, parent,
                                     parent.getChildCount(), -1);
                             if (newIcon != null) {
                                 newIcon.requestFocus();
@@ -667,13 +690,13 @@
             case KeyEvent.KEYCODE_DPAD_RIGHT:
                 if (handleKeyEvent) {
                     // Select the next icon or the first icon on the next page if possible
-                    View newIcon = getBubbleTextViewInDirection(layout, parent, v, 1);
+                    View newIcon = getIconInDirection(layout, parent, v, 1);
                     if (newIcon != null) {
                         newIcon.requestFocus();
                     } else {
                         if (pageIndex < (pageCount - 1)) {
                             parent = getCellLayoutChildrenForIndex(workspace, pageIndex + 1);
-                            newIcon = getBubbleTextViewInDirection(layout, parent, -1, 1);
+                            newIcon = getIconInDirection(layout, parent, -1, 1);
                             if (newIcon != null) {
                                 newIcon.requestFocus();
                             } else {
@@ -688,7 +711,7 @@
             case KeyEvent.KEYCODE_DPAD_UP:
                 if (handleKeyEvent) {
                     // Select the closest icon in the previous line, otherwise select the tab bar
-                    View newIcon = getClosestBubbleTextViewOnLine(layout, parent, v, -1);
+                    View newIcon = getClosestIconOnLine(layout, parent, v, -1);
                     if (newIcon != null) {
                         newIcon.requestFocus();
                         wasHandled = true;
@@ -700,7 +723,7 @@
             case KeyEvent.KEYCODE_DPAD_DOWN:
                 if (handleKeyEvent) {
                     // Select the closest icon in the next line, otherwise select the button bar
-                    View newIcon = getClosestBubbleTextViewOnLine(layout, parent, v, 1);
+                    View newIcon = getClosestIconOnLine(layout, parent, v, 1);
                     if (newIcon != null) {
                         newIcon.requestFocus();
                         wasHandled = true;
@@ -715,7 +738,7 @@
                     // if there is no previous page
                     if (pageIndex > 0) {
                         parent = getCellLayoutChildrenForIndex(workspace, pageIndex - 1);
-                        View newIcon = getBubbleTextViewInDirection(layout, parent, -1, 1);
+                        View newIcon = getIconInDirection(layout, parent, -1, 1);
                         if (newIcon != null) {
                             newIcon.requestFocus();
                         } else {
@@ -723,7 +746,7 @@
                             workspace.snapToPage(pageIndex - 1);
                         }
                     } else {
-                        View newIcon = getBubbleTextViewInDirection(layout, parent, -1, 1);
+                        View newIcon = getIconInDirection(layout, parent, -1, 1);
                         if (newIcon != null) {
                             newIcon.requestFocus();
                         }
@@ -737,7 +760,7 @@
                     // if there is no previous page
                     if (pageIndex < (pageCount - 1)) {
                         parent = getCellLayoutChildrenForIndex(workspace, pageIndex + 1);
-                        View newIcon = getBubbleTextViewInDirection(layout, parent, -1, 1);
+                        View newIcon = getIconInDirection(layout, parent, -1, 1);
                         if (newIcon != null) {
                             newIcon.requestFocus();
                         } else {
@@ -745,7 +768,7 @@
                             workspace.snapToPage(pageIndex + 1);
                         }
                     } else {
-                        View newIcon = getBubbleTextViewInDirection(layout, parent,
+                        View newIcon = getIconInDirection(layout, parent,
                                 parent.getChildCount(), -1);
                         if (newIcon != null) {
                             newIcon.requestFocus();
@@ -757,7 +780,7 @@
             case KeyEvent.KEYCODE_MOVE_HOME:
                 if (handleKeyEvent) {
                     // Select the first icon on this page
-                    View newIcon = getBubbleTextViewInDirection(layout, parent, -1, 1);
+                    View newIcon = getIconInDirection(layout, parent, -1, 1);
                     if (newIcon != null) {
                         newIcon.requestFocus();
                     }
@@ -767,7 +790,90 @@
             case KeyEvent.KEYCODE_MOVE_END:
                 if (handleKeyEvent) {
                     // Select the last icon on this page
-                    View newIcon = getBubbleTextViewInDirection(layout, parent,
+                    View newIcon = getIconInDirection(layout, parent,
+                            parent.getChildCount(), -1);
+                    if (newIcon != null) {
+                        newIcon.requestFocus();
+                    }
+                }
+                wasHandled = true;
+                break;
+            default: break;
+        }
+        return wasHandled;
+    }
+
+    /**
+     * Handles key events for items in a Folder.
+     */
+    static boolean handleFolderKeyEvent(View v, int keyCode, KeyEvent e) {
+        CellLayoutChildren parent = (CellLayoutChildren) v.getParent();
+        final CellLayout layout = (CellLayout) parent.getParent();
+        final Folder folder = (Folder) layout.getParent();
+        View title = folder.mFolderName;
+
+        final int action = e.getAction();
+        final boolean handleKeyEvent = (action != KeyEvent.ACTION_UP);
+        boolean wasHandled = false;
+        switch (keyCode) {
+            case KeyEvent.KEYCODE_DPAD_LEFT:
+                if (handleKeyEvent) {
+                    // Select the previous icon
+                    View newIcon = getIconInDirection(layout, parent, v, -1);
+                    if (newIcon != null) {
+                        newIcon.requestFocus();
+                    }
+                }
+                wasHandled = true;
+                break;
+            case KeyEvent.KEYCODE_DPAD_RIGHT:
+                if (handleKeyEvent) {
+                    // Select the next icon
+                    View newIcon = getIconInDirection(layout, parent, v, 1);
+                    if (newIcon != null) {
+                        newIcon.requestFocus();
+                    } else {
+                        title.requestFocus();
+                    }
+                }
+                wasHandled = true;
+                break;
+            case KeyEvent.KEYCODE_DPAD_UP:
+                if (handleKeyEvent) {
+                    // Select the closest icon in the previous line
+                    View newIcon = getClosestIconOnLine(layout, parent, v, -1);
+                    if (newIcon != null) {
+                        newIcon.requestFocus();
+                    }
+                }
+                wasHandled = true;
+                break;
+            case KeyEvent.KEYCODE_DPAD_DOWN:
+                if (handleKeyEvent) {
+                    // Select the closest icon in the next line
+                    View newIcon = getClosestIconOnLine(layout, parent, v, 1);
+                    if (newIcon != null) {
+                        newIcon.requestFocus();
+                    } else {
+                        title.requestFocus();
+                    }
+                }
+                wasHandled = true;
+                break;
+            case KeyEvent.KEYCODE_MOVE_HOME:
+                if (handleKeyEvent) {
+                    // Select the first icon on this page
+                    View newIcon = getIconInDirection(layout, parent, -1, 1);
+                    if (newIcon != null) {
+                        newIcon.requestFocus();
+                    }
+                }
+                wasHandled = true;
+                break;
+            case KeyEvent.KEYCODE_MOVE_END:
+                if (handleKeyEvent) {
+                    // Select the last icon on this page
+                    View newIcon = getIconInDirection(layout, parent,
                             parent.getChildCount(), -1);
                     if (newIcon != null) {
                         newIcon.requestFocus();
diff --git a/src/com/android/launcher2/Folder.java b/src/com/android/launcher2/Folder.java
index f44d3ed..8a198f8 100644
--- a/src/com/android/launcher2/Folder.java
+++ b/src/com/android/launcher2/Folder.java
@@ -53,7 +53,8 @@
  * Represents a set of icons chosen by the user or generated by the system.
  */
 public class Folder extends LinearLayout implements DragSource, View.OnClickListener,
-        View.OnLongClickListener, DropTarget, FolderListener, TextView.OnEditorActionListener {
+        View.OnLongClickListener, DropTarget, FolderListener, TextView.OnEditorActionListener,
+        View.OnFocusChangeListener {
 
     private static final String TAG = "Launcher.Folder";
 
@@ -93,7 +94,6 @@
     private int[] mEmptyCell = new int[2];
     private Alarm mReorderAlarm = new Alarm();
     private Alarm mOnExitAlarm = new Alarm();
-    private TextView mFolderName;
     private int mFolderNameHeight;
     private Rect mHitRect = new Rect();
     private Rect mTempRect = new Rect();
@@ -101,6 +101,7 @@
     private boolean mDeleteFolderOnDropCompleted = false;
     private boolean mSuppressFolderDeletion = false;
     private boolean mItemAddedBackToSelfViaIcon = false;
+    FolderEditText mFolderName;
 
     private boolean mIsEditingName = false;
     private InputMethodManager mInputMethodManager;
@@ -134,8 +135,11 @@
         if (sHintText == null) {
             sHintText = res.getString(R.string.folder_hint_text);
         }
-
         mLauncher = (Launcher) context;
+        // We need this view to be focusable in touch mode so that when text editing of the folder
+        // name is complete, we have something to focus on, thus hiding the cursor and giving
+        // reliable behvior when clicking the text field (since it will always gain focus on click).
+        setFocusableInTouchMode(true);
     }
 
     @Override
@@ -143,7 +147,9 @@
         super.onFinishInflate();
         mContent = (CellLayout) findViewById(R.id.folder_content);
         mContent.setGridSize(0, 0);
-        mFolderName = (TextView) findViewById(R.id.folder_name);
+        mFolderName = (FolderEditText) findViewById(R.id.folder_name);
+        mFolderName.setFolder(this);
+        mFolderName.setOnFocusChangeListener(this);
 
         // We find out how tall the text view wants to be (it is set to wrap_content), so that
         // we can allocate the appropriate amount of space for it.
@@ -153,7 +159,6 @@
 
         // We disable action mode for now since it messes up the view on phones
         mFolderName.setCustomSelectionActionModeCallback(mActionModeCallback);
-        mFolderName.setCursorVisible(false);
         mFolderName.setOnEditorActionListener(this);
         mFolderName.setSelectAllOnFocus(true);
         mFolderName.setInputType(mFolderName.getInputType() |
@@ -190,16 +195,6 @@
         }
     }
 
-    public boolean onInterceptTouchEvent(MotionEvent ev) {
-        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
-            mFolderName.getHitRect(mHitRect);
-            if (mHitRect.contains((int) ev.getX(), (int) ev.getY()) && !mIsEditingName) {
-                startEditingFolderName();
-            }
-        }
-        return false;
-    }
-
     public boolean onLongClick(View v) {
         Object tag = v.getTag();
         if (tag instanceof ShortcutInfo) {
@@ -233,7 +228,6 @@
 
     public void startEditingFolderName() {
         mFolderName.setHint("");
-        mFolderName.setCursorVisible(true);
         mIsEditingName = true;
     }
 
@@ -248,8 +242,11 @@
         // gets saved.
         mInfo.setTitle(mFolderName.getText().toString());
         LauncherModel.updateItemInDatabase(mLauncher, mInfo);
-        mFolderName.setCursorVisible(false);
-        mFolderName.clearFocus();
+
+        // In order to clear the focus from the text field, we set the focus on ourself. This
+        // ensures that every time the field is clicked, focus is gained, giving reliable behavior.
+        requestFocus();
+
         Selection.setSelection((Spannable) mFolderName.getText(), 0, 0);
         mIsEditingName = false;
     }
@@ -320,6 +317,7 @@
         }
 
         mItemsInvalidated = true;
+        updateTextViewFocus();
         mInfo.addListener(this);
 
         if (!sDefaultFolderName.contentEquals(mInfo.title)) {
@@ -410,12 +408,20 @@
                 if (cling != null) {
                     cling.bringToFront();
                 }
+                setFocusOnFirstChild();
             }
         });
         oa.setDuration(mExpandDuration);
         oa.start();
     }
 
+    private void setFocusOnFirstChild() {
+        View firstChild = mContent.getChildAt(0, 0);
+        if (firstChild != null) {
+            firstChild.requestFocus();
+        }
+    }
+
     public void animateClosed() {
         if (!(getParent() instanceof DragLayer)) return;
 
@@ -512,6 +518,7 @@
         CellLayout.LayoutParams lp =
             new CellLayout.LayoutParams(item.cellX, item.cellY, item.spanX, item.spanY);
         boolean insert = false;
+        textView.setOnKeyListener(new FolderKeyEventListener());
         mContent.addViewToCellLayout(textView, insert ? 0 : -1, (int)item.id, lp, true);
         return true;
     }
@@ -817,12 +824,14 @@
             lp.cellX = vacant[0];
             lp.cellY = vacant[1];
             ItemInfo info = (ItemInfo) v.getTag();
-            info.cellX = vacant[0];
-            info.cellY = vacant[1];
+            if (info.cellX != vacant[0] || info.cellY != vacant[1]) {
+                info.cellX = vacant[0];
+                info.cellY = vacant[1];
+                LauncherModel.addOrMoveItemInDatabase(mLauncher, info, mInfo.id, 0,
+                        info.cellX, info.cellY);
+            }
             boolean insert = false;
             mContent.addViewToCellLayout(v, insert ? 0 : -1, (int)info.id, lp, true);
-            LauncherModel.addOrMoveItemInDatabase(mLauncher, info, mInfo.id, 0,
-                    info.cellX, info.cellY);
         }
         mItemsInvalidated = true;
     }
@@ -840,6 +849,7 @@
         parent.removeView(this);
         mDragController.removeDropTarget((DropTarget) this);
         clearFocus();
+        mFolderIcon.requestFocus();
 
         if (mRearrangeOnClose) {
             setupContentForNumItems(getItemCount());
@@ -886,6 +896,19 @@
         }
     }
 
+    // This method keeps track of the last item in the folder for the purposes
+    // of keyboard focus
+    private void updateTextViewFocus() {
+        View lastChild = getItemAt(getItemCount() - 1);
+        getItemAt(getItemCount() - 1);
+        if (lastChild != null) {
+            mFolderName.setNextFocusDownId(lastChild.getId());
+            mFolderName.setNextFocusRightId(lastChild.getId());
+            mFolderName.setNextFocusLeftId(lastChild.getId());
+            mFolderName.setNextFocusUpId(lastChild.getId());
+        }
+    }
+
     public void onDrop(DragObject d) {
         ShortcutInfo item;
         if (d.dragInfo instanceof ApplicationInfo) {
@@ -961,7 +984,9 @@
     }
 
     public void onItemsChanged() {
+        updateTextViewFocus();
     }
+
     public void onTitleChanged(CharSequence title) {
     }
 
@@ -991,4 +1016,10 @@
     public void getLocationInDragLayer(int[] loc) {
         mLauncher.getDragLayer().getLocationInDragLayer(this, loc);
     }
+
+    public void onFocusChange(View v, boolean hasFocus) {
+        if (v == mFolderName && hasFocus) {
+            startEditingFolderName();
+        }
+    }
 }
diff --git a/src/com/android/launcher2/FolderEditText.java b/src/com/android/launcher2/FolderEditText.java
new file mode 100644
index 0000000..13169bd
--- /dev/null
+++ b/src/com/android/launcher2/FolderEditText.java
@@ -0,0 +1,36 @@
+package com.android.launcher2;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.KeyEvent;
+import android.widget.EditText;
+
+public class FolderEditText extends EditText {
+
+    private Folder mFolder;
+
+    public FolderEditText(Context context) {
+        super(context);
+    }
+
+    public FolderEditText(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public FolderEditText(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    public void setFolder(Folder folder) {
+        mFolder = folder;
+    }
+
+    @Override
+    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
+        // Catch the back button on the soft keyboard so that we can just close the activity
+        if (event.getKeyCode() == android.view.KeyEvent.KEYCODE_BACK) {
+            mFolder.doneEditingFolderName(true);
+        }
+        return super.onKeyPreIme(keyCode, event);
+    }
+}
diff --git a/src/com/android/launcher2/FolderInfo.java b/src/com/android/launcher2/FolderInfo.java
index 3ae31d2..f597076 100644
--- a/src/com/android/launcher2/FolderInfo.java
+++ b/src/com/android/launcher2/FolderInfo.java
@@ -56,6 +56,7 @@
         for (int i = 0; i < listeners.size(); i++) {
             listeners.get(i).onAdd(item);
         }
+        itemsChanged();
     }
 
     /**
@@ -68,6 +69,7 @@
         for (int i = 0; i < listeners.size(); i++) {
             listeners.get(i).onRemove(item);
         }
+        itemsChanged();
     }
 
     public void setTitle(CharSequence title) {
diff --git a/src/com/android/launcher2/Hotseat.java b/src/com/android/launcher2/Hotseat.java
index f6ce059..85412c6 100644
--- a/src/com/android/launcher2/Hotseat.java
+++ b/src/com/android/launcher2/Hotseat.java
@@ -58,7 +58,7 @@
 
     public void setup(Launcher launcher) {
         mLauncher = launcher;
-        setOnKeyListener(new HotseatBubbleTextViewKeyEventListener());
+        setOnKeyListener(new HotseatIconKeyEventListener());
     }
 
     CellLayout getLayout() {
@@ -100,7 +100,7 @@
         BubbleTextView allAppsButton = (BubbleTextView)
                 inflater.inflate(R.layout.application, mContent, false);
         allAppsButton.setCompoundDrawablesWithIntrinsicBounds(null,
-                context.getResources().getDrawable(R.drawable.ic_allapps), null, null);
+                context.getResources().getDrawable(R.drawable.all_apps_button_icon), null, null);
         // allAppsButton.setText(context.getString(R.string.all_apps_button_label));
         allAppsButton.setContentDescription(context.getString(R.string.all_apps_button_label));
         allAppsButton.setOnClickListener(new View.OnClickListener() {
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 82dc8c4..1fbf7a5 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -75,9 +75,9 @@
 import android.view.MotionEvent;
 import android.view.Surface;
 import android.view.View;
-import android.view.View.OnLongClickListener;
 import android.view.ViewGroup;
 import android.view.WindowManager;
+import android.view.View.OnLongClickListener;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.animation.AccelerateDecelerateInterpolator;
 import android.view.animation.AccelerateInterpolator;
@@ -325,7 +325,7 @@
         }
 
         // On large interfaces, we want the screen to auto-rotate based on the current orientation
-        if (LauncherApplication.isScreenLarge()) {
+        if (LauncherApplication.isScreenLarge() || Build.TYPE.contentEquals("eng")) {
             setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
         }
     }
@@ -876,10 +876,16 @@
 
         if (appInfo.targetSdkVersion >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
             Resources r = getResources();
-            p.left = r.getDimensionPixelSize(R.dimen.app_widget_padding_left);
-            p.right = r.getDimensionPixelSize(R.dimen.app_widget_padding_right);
-            p.top = r.getDimensionPixelSize(R.dimen.app_widget_padding_top);
-            p.bottom = r.getDimensionPixelSize(R.dimen.app_widget_padding_bottom);
+            // The default padding values are private API currently, but will be added in
+            // API level 15. The current values are (8, 8, 8, 8).
+            p.left = r.getDimensionPixelSize(com.android.internal.
+                    R.dimen.default_app_widget_padding_left);
+            p.right = r.getDimensionPixelSize(com.android.internal.
+                    R.dimen.default_app_widget_padding_right);
+            p.top = r.getDimensionPixelSize(com.android.internal.
+                    R.dimen.default_app_widget_padding_top);
+            p.bottom = r.getDimensionPixelSize(com.android.internal.
+                    R.dimen.default_app_widget_padding_bottom);
         }
 
         return p;
@@ -1147,16 +1153,18 @@
             // also will cancel mWaitingForResult.
             closeSystemDialogs();
 
-            closeFolder();
-
             boolean alreadyOnHome = ((intent.getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT)
                         != Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
 
+            Folder openFolder = mWorkspace.getOpenFolder();
             // In all these cases, only animate if we're already on home
             mWorkspace.exitWidgetResizeMode();
-            if (alreadyOnHome && mState == State.WORKSPACE && !mWorkspace.isTouchActive()) {
+            if (alreadyOnHome && mState == State.WORKSPACE && !mWorkspace.isTouchActive() &&
+                    openFolder == null) {
                 mWorkspace.moveToDefaultScreen(true);
             }
+
+            closeFolder();
             exitSpringLoadedDragMode();
             showWorkspace(alreadyOnHome);
 
@@ -1302,7 +1310,8 @@
         Intent settings = new Intent(android.provider.Settings.ACTION_SETTINGS);
         settings.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                 | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
-        Intent help = new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.help_url)));
+        String helpUrl = getString(R.string.help_url);
+        Intent help = new Intent(Intent.ACTION_VIEW, Uri.parse(helpUrl));
         help.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                 | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
 
@@ -1317,10 +1326,12 @@
             .setIcon(android.R.drawable.ic_menu_preferences)
             .setIntent(settings)
             .setAlphabeticShortcut('P');
-        menu.add(0, MENU_HELP, 0, R.string.menu_help)
-            .setIcon(android.R.drawable.ic_menu_help)
-            .setIntent(help)
-            .setAlphabeticShortcut('H');
+        if (!helpUrl.isEmpty()) {
+            menu.add(0, MENU_HELP, 0, R.string.menu_help)
+                .setIcon(android.R.drawable.ic_menu_help)
+                .setIntent(help)
+                .setAlphabeticShortcut('H');
+        }
         return true;
     }
 
@@ -1873,6 +1884,9 @@
     public void closeFolder() {
         Folder folder = mWorkspace.getOpenFolder();
         if (folder != null) {
+            if (folder.isEditingName()) {
+                folder.dismissEditingName();
+            }
             closeFolder(folder);
 
             // Dismiss the folder cling
@@ -3016,13 +3030,15 @@
             mAppsCustomizeContent.removeApps(apps);
         }
         updateIconsAffectedByPackageManagerChanges();
+
+        // Notify the drag controller
+        mDragController.onAppsRemoved(apps, this);
     }
 
     /**
      * A number of packages were updated.
      */
     public void bindPackagesUpdated() {
-
         if (mAppsCustomizeContent != null) {
             mAppsCustomizeContent.onPackagesUpdated();
         }
diff --git a/src/com/android/launcher2/LauncherAppWidgetHostView.java b/src/com/android/launcher2/LauncherAppWidgetHostView.java
index 7917118..1a4a45e 100644
--- a/src/com/android/launcher2/LauncherAppWidgetHostView.java
+++ b/src/com/android/launcher2/LauncherAppWidgetHostView.java
@@ -116,18 +116,6 @@
     }
 
     @Override
-    public void setAppWidget(int appWidgetId, AppWidgetProviderInfo info) {
-        super.setAppWidget(appWidgetId, info);
-        // Sometimes the AppWidgetManager returns a null AppWidgetProviderInfo object for
-        // a widget, eg. for some widgets in safe mode.
-        if (info != null) {
-            // We add necessary padding to the AppWidgetHostView
-            Launcher.Padding padding = mLauncher.getPaddingForWidget(info.provider);
-            setPadding(padding.left, padding.top, padding.right, padding.bottom);
-        }
-    }
-
-    @Override
     public int getDescendantFocusability() {
         return ViewGroup.FOCUS_BLOCK_DESCENDANTS;
     }
diff --git a/src/com/android/launcher2/PagedView.java b/src/com/android/launcher2/PagedView.java
index d7e9e06..afb2b94 100644
--- a/src/com/android/launcher2/PagedView.java
+++ b/src/com/android/launcher2/PagedView.java
@@ -39,6 +39,7 @@
 import android.view.ViewGroup;
 import android.view.ViewParent;
 import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityManager;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.view.animation.Interpolator;
 import android.widget.Checkable;
@@ -402,6 +403,14 @@
             if (mTouchState == TOUCH_STATE_REST) {
                 pageEndMoving();
             }
+
+            // Notify the user when the page changes
+            if (AccessibilityManager.getInstance(getContext()).isEnabled()) {
+                AccessibilityEvent ev =
+                    AccessibilityEvent.obtain(AccessibilityEvent.TYPE_VIEW_SCROLLED);
+                ev.getText().add(getCurrentPageDescription());
+                sendAccessibilityEventUnchecked(ev);
+            }
             return true;
         }
         return false;
@@ -1664,18 +1673,6 @@
      */
     public abstract void syncPageItems(int page, boolean immediate);
 
-    protected void postInvalidatePageData(final boolean clearViews) {
-        post(new Runnable() {
-                // post the call to avoid a call to requestLayout from a layout pass
-                public void run() {
-                    if (clearViews) {
-                        removeAllViews();
-                    }
-                    invalidatePageData();
-                }
-            });
-    }
-
     protected void invalidatePageData() {
         invalidatePageData(-1, false);
     }
@@ -1872,27 +1869,6 @@
         }
     }
 
-    @Override
-    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
-        // Do not append text content to scroll events they are fired frequently
-        // and the client has already received another event type with the text.
-        if (event.getEventType() != AccessibilityEvent.TYPE_VIEW_SCROLLED) {
-            super.dispatchPopulateAccessibilityEvent(event);
-        }
-
-        onPopulateAccessibilityEvent(event);
-        return false;
-    }
-
-    @Override
-    public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
-        super.onPopulateAccessibilityEvent(event);
-
-        if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_SCROLLED) {
-            event.getText().add(getCurrentPageDescription());
-        }
-    }
-
     protected String getCurrentPageDescription() {
         int page = (mNextPage != INVALID_PAGE) ? mNextPage : mCurrentPage;
         return String.format(mContext.getString(R.string.default_scroll_format),
diff --git a/src/com/android/launcher2/PagedViewWidget.java b/src/com/android/launcher2/PagedViewWidget.java
index 053c2ea..adf94ab 100644
--- a/src/com/android/launcher2/PagedViewWidget.java
+++ b/src/com/android/launcher2/PagedViewWidget.java
@@ -52,6 +52,9 @@
 public class PagedViewWidget extends LinearLayout implements Checkable {
     static final String TAG = "PagedViewWidgetLayout";
 
+    private static final int sPreviewFadeInDuration = 80;
+    private static final int sPreviewFadeInStaggerDuration = 20;
+
     private final Paint mPaint = new Paint();
     private Bitmap mHolographicOutline;
     private HolographicOutlineHelper mHolographicOutlineHelper;
@@ -96,42 +99,61 @@
         setClipToPadding(false);
     }
 
+    @Override
+    protected void onDetachedFromWindow() {
+        super.onDetachedFromWindow();
+
+        final ImageView image = (ImageView) findViewById(R.id.widget_preview);
+        if (image != null) {
+            FastBitmapDrawable preview = (FastBitmapDrawable) image.getDrawable();
+            if (preview != null && preview.getBitmap() != null) {
+                preview.getBitmap().recycle();
+            }
+            image.setImageDrawable(null);
+        }
+    }
+
     public void applyFromAppWidgetProviderInfo(AppWidgetProviderInfo info,
-            FastBitmapDrawable preview, int maxWidth, int[] cellSpan,
-            HolographicOutlineHelper holoOutlineHelper) {
+            int maxWidth, int[] cellSpan, HolographicOutlineHelper holoOutlineHelper) {
         mHolographicOutlineHelper = holoOutlineHelper;
         final ImageView image = (ImageView) findViewById(R.id.widget_preview);
         if (maxWidth > -1) {
             image.setMaxWidth(maxWidth);
         }
-        image.setImageDrawable(preview);
         image.setContentDescription(info.label);
         mPreviewImageView = image;
         final TextView name = (TextView) findViewById(R.id.widget_name);
         name.setText(info.label);
-        name.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
         final TextView dims = (TextView) findViewById(R.id.widget_dims);
         if (dims != null) {
             dims.setText(String.format(mDimensionsFormatString, cellSpan[0], cellSpan[1]));
-            dims.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
         }
     }
 
     public void applyFromResolveInfo(PackageManager pm, ResolveInfo info,
-            FastBitmapDrawable preview, HolographicOutlineHelper holoOutlineHelper) {
+            HolographicOutlineHelper holoOutlineHelper) {
         mHolographicOutlineHelper = holoOutlineHelper;
         CharSequence label = info.loadLabel(pm);
         final ImageView image = (ImageView) findViewById(R.id.widget_preview);
-        image.setImageDrawable(preview);
         image.setContentDescription(label);
         mPreviewImageView = image;
         final TextView name = (TextView) findViewById(R.id.widget_name);
         name.setText(label);
-        name.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
         final TextView dims = (TextView) findViewById(R.id.widget_dims);
         if (dims != null) {
             dims.setText(String.format(mDimensionsFormatString, 1, 1));
-            dims.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
+        }
+    }
+
+    void applyPreview(FastBitmapDrawable preview, int index) {
+        final ImageView image = (ImageView) findViewById(R.id.widget_preview);
+        if (preview != null) {
+            image.setImageDrawable(preview);
+            image.setAlpha(0f);
+            image.animate()
+                 .alpha(1f)
+                 .setDuration(sPreviewFadeInDuration + (index * sPreviewFadeInStaggerDuration))
+                 .start();
         }
     }
 
diff --git a/src/com/android/launcher2/Utilities.java b/src/com/android/launcher2/Utilities.java
index f7f97c5..e5169a2 100644
--- a/src/com/android/launcher2/Utilities.java
+++ b/src/com/android/launcher2/Utilities.java
@@ -47,7 +47,6 @@
 
     private static int sIconWidth = -1;
     private static int sIconHeight = -1;
-    private static int sIconContentSize = -1;
     private static int sIconTextureWidth = -1;
     private static int sIconTextureHeight = -1;
 
@@ -65,10 +64,6 @@
     static int sColors[] = { 0xffff0000, 0xff00ff00, 0xff0000ff };
     static int sColorIndex = 0;
 
-    static int getIconContentSize() {
-        return sIconContentSize;
-    }
-
     /**
      * Returns a bitmap suitable for the all apps view. Used to convert pre-ICS
      * icon bitmaps that are stored in the database (which were 74x74 pixels at hdpi size)
@@ -242,9 +237,6 @@
         final float density = metrics.density;
 
         sIconWidth = sIconHeight = (int) resources.getDimension(R.dimen.app_icon_size);
-        if (LauncherApplication.isScreenLarge()) {
-            sIconContentSize = (int) resources.getDimension(R.dimen.app_icon_content_size);
-        }
         sIconTextureWidth = sIconTextureHeight = sIconWidth;
 
         sBlurPaint.setMaskFilter(new BlurMaskFilter(5 * density, BlurMaskFilter.Blur.NORMAL));
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index bf18456..9c25afc 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -469,7 +469,7 @@
             }
 
             layout = (CellLayout) getChildAt(screen);
-            child.setOnKeyListener(new BubbleTextViewKeyEventListener());
+            child.setOnKeyListener(new IconKeyEventListener());
         }
 
         CellLayout.LayoutParams lp = (CellLayout.LayoutParams) child.getLayoutParams();
@@ -1882,6 +1882,12 @@
             dragRect = new Rect(0, 0, child.getWidth(), previewSize);
         }
 
+        // Clear the pressed state if necessary
+        if (child instanceof BubbleTextView) {
+            BubbleTextView icon = (BubbleTextView) child;
+            icon.clearPressedOrFocusedBackground();
+        }
+
         mDragController.startDrag(b, dragLayerX, dragLayerY, source, child.getTag(),
                 DragController.DRAG_ACTION_MOVE, dragRect);
         b.recycle();
@@ -3051,6 +3057,9 @@
             }
             cellLayout.onDropChild(mDragInfo.cell);
         }
+        if (d.cancelled &&  mDragInfo.cell != null) {
+                mDragInfo.cell.setVisibility(VISIBLE);
+        }
         mDragOutline = null;
         mDragInfo = null;
     }
@@ -3088,16 +3097,17 @@
     }
 
     @Override
-    public void onEnterScrollArea(int x, int y, int direction) {
+    public boolean onEnterScrollArea(int x, int y, int direction) {
         // Ignore the scroll area if we are dragging over the hot seat
         if (mLauncher.getHotseat() != null) {
             Rect r = new Rect();
             mLauncher.getHotseat().getHitRect(r);
             if (r.contains(x, y)) {
-                return;
+                return false;
             }
         }
 
+        boolean result = false;
         if (!isSmall() && !mIsSwitchingState) {
             mInScrollArea = true;
 
@@ -3117,12 +3127,15 @@
                 // Workspace is responsible for drawing the edge glow on adjacent pages,
                 // so we need to redraw the workspace when this may have changed.
                 invalidate();
+                result = true;
             }
         }
+        return result;
     }
 
     @Override
-    public void onExitScrollArea() {
+    public boolean onExitScrollArea() {
+        boolean result = false;
         if (mInScrollArea) {
             if (mDragTargetLayout != null) {
                 // Unmark the overlapping layout and re-enter the current layout
@@ -3133,9 +3146,11 @@
                 // Workspace is responsible for drawing the edge glow on adjacent pages,
                 // so we need to redraw the workspace when this may have changed.
                 invalidate();
+                result = true;
             }
             mInScrollArea = false;
         }
+        return result;
     }
 
     private void onResetScrollArea() {