Mass merge from gingerbread - do not merge

Change-Id: I9111f11e0f85577b96556a5f996bf81b4f997de9
diff --git a/res/anim/paged_view_click_feedback.xml b/res/anim/paged_view_click_feedback.xml
index d1e6e23..eb7ecef 100644
--- a/res/anim/paged_view_click_feedback.xml
+++ b/res/anim/paged_view_click_feedback.xml
@@ -14,10 +14,11 @@
      limitations under the License.
 -->
 
-<alpha xmlns:android="http://schemas.android.com/apk/res/android"
-    android:fromAlpha="1.0"
-    android:toAlpha="0.5"
-    android:duration="75"
-    android:fillAfter="true"
+<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
+    android:valueFrom="1.0"
+    android:valueTo="0.5"
+    android:valueType="floatType"
+    android:duration="100"
+    android:propertyName="alpha"
     android:repeatCount="1"
-    android:repeatMode="reverse" />
+    android:repeatMode="reverse"/>
diff --git a/res/drawable-hdpi/gardening_crosshairs.png b/res/drawable-hdpi/gardening_crosshairs.png
index fca6036..409bb5d 100644
--- a/res/drawable-hdpi/gardening_crosshairs.png
+++ b/res/drawable-hdpi/gardening_crosshairs.png
Binary files differ
diff --git a/res/drawable/wallpaper_picker_preview.png b/res/drawable-hdpi/wallpaper_picker_preview.png
similarity index 63%
rename from res/drawable/wallpaper_picker_preview.png
rename to res/drawable-hdpi/wallpaper_picker_preview.png
index 926a99c..300ea4a 100644
--- a/res/drawable/wallpaper_picker_preview.png
+++ b/res/drawable-hdpi/wallpaper_picker_preview.png
Binary files differ
diff --git a/res/drawable-mdpi/gardening_crosshairs.png b/res/drawable-mdpi/gardening_crosshairs.png
index d473044..338c832 100644
--- a/res/drawable-mdpi/gardening_crosshairs.png
+++ b/res/drawable-mdpi/gardening_crosshairs.png
Binary files differ
diff --git a/res/drawable/wallpaper_picker_preview.png b/res/drawable-mdpi/wallpaper_picker_preview.png
similarity index 63%
copy from res/drawable/wallpaper_picker_preview.png
copy to res/drawable-mdpi/wallpaper_picker_preview.png
index 926a99c..300ea4a 100644
--- a/res/drawable/wallpaper_picker_preview.png
+++ b/res/drawable-mdpi/wallpaper_picker_preview.png
Binary files differ
diff --git a/res/drawable-xlarge-hdpi/ic_home_configure_holo_dark.png b/res/drawable-xlarge-hdpi/ic_home_configure_holo_dark.png
deleted file mode 100644
index 6c94a31..0000000
--- a/res/drawable-xlarge-hdpi/ic_home_configure_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-hdpi/search_button_normal.png b/res/drawable-xlarge-hdpi/search_button_normal.png
deleted file mode 100644
index b1df556..0000000
--- a/res/drawable-xlarge-hdpi/search_button_normal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-hdpi/search_button_pressed.png b/res/drawable-xlarge-hdpi/search_button_pressed.png
deleted file mode 100644
index 1013383..0000000
--- a/res/drawable-xlarge-hdpi/search_button_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-hdpi/textfield_home_end.9.png b/res/drawable-xlarge-hdpi/textfield_home_end.9.png
deleted file mode 100644
index 4e79920..0000000
--- a/res/drawable-xlarge-hdpi/textfield_home_end.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-hdpi/textfield_home_start.9.png b/res/drawable-xlarge-hdpi/textfield_home_start.9.png
deleted file mode 100644
index a338c69..0000000
--- a/res/drawable-xlarge-hdpi/textfield_home_start.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/app_market_generic.png b/res/drawable-xlarge-mdpi/app_market_generic.png
index c093e24..355ea6a 100644
--- a/res/drawable-xlarge-mdpi/app_market_generic.png
+++ b/res/drawable-xlarge-mdpi/app_market_generic.png
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/homescreen_large_blue_strong.9.png b/res/drawable-xlarge-mdpi/homescreen_large_blue_strong.9.png
deleted file mode 100644
index f4913e5..0000000
--- a/res/drawable-xlarge-mdpi/homescreen_large_blue_strong.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/ic_generic_search.png b/res/drawable-xlarge-mdpi/ic_generic_search.png
new file mode 100644
index 0000000..d92071b
--- /dev/null
+++ b/res/drawable-xlarge-mdpi/ic_generic_search.png
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/ic_home_add_holo_dark.png b/res/drawable-xlarge-mdpi/ic_home_add_holo_dark.png
index d3ab3ad..7f04589 100644
--- a/res/drawable-xlarge-mdpi/ic_home_add_holo_dark.png
+++ b/res/drawable-xlarge-mdpi/ic_home_add_holo_dark.png
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/ic_home_all_apps_holo_dark.png b/res/drawable-xlarge-mdpi/ic_home_all_apps_holo_dark.png
index 0261d0d..04749e6 100644
--- a/res/drawable-xlarge-mdpi/ic_home_all_apps_holo_dark.png
+++ b/res/drawable-xlarge-mdpi/ic_home_all_apps_holo_dark.png
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/ic_home_configure_holo_dark.png b/res/drawable-xlarge-mdpi/ic_home_configure_holo_dark.png
deleted file mode 100644
index 8a99273..0000000
--- a/res/drawable-xlarge-mdpi/ic_home_configure_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/search_button_normal.png b/res/drawable-xlarge-mdpi/search_button_normal.png
deleted file mode 100644
index b172074..0000000
--- a/res/drawable-xlarge-mdpi/search_button_normal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/search_button_pressed.png b/res/drawable-xlarge-mdpi/search_button_pressed.png
deleted file mode 100644
index c2926c8..0000000
--- a/res/drawable-xlarge-mdpi/search_button_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/textfield_home_end.9.png b/res/drawable-xlarge-mdpi/textfield_home_end.9.png
deleted file mode 100644
index 753514f..0000000
--- a/res/drawable-xlarge-mdpi/textfield_home_end.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/textfield_home_start.9.png b/res/drawable-xlarge-mdpi/textfield_home_start.9.png
deleted file mode 100644
index 11ee7ca..0000000
--- a/res/drawable-xlarge-mdpi/textfield_home_start.9.png
+++ /dev/null
Binary files differ
diff --git a/res/layout-xlarge-land/all_apps_tabbed.xml b/res/layout-xlarge-land/all_apps_tabbed.xml
index fbe98b0..d03a571 100644
--- a/res/layout-xlarge-land/all_apps_tabbed.xml
+++ b/res/layout-xlarge-land/all_apps_tabbed.xml
@@ -54,7 +54,7 @@
             <com.android.launcher2.DeleteZone
                 android:id="@+id/all_apps_delete_zone"
                 android:text="@string/delete_zone_label_all_apps"
-                android:drawablePadding="@dimen/all_apps_drawable_padding"
+                android:drawablePadding="@dimen/delete_zone_drawable_padding"
                 android:drawableLeft="@drawable/delete_zone_selector"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
diff --git a/res/layout-xlarge-land/launcher.xml b/res/layout-xlarge-land/launcher.xml
index 93d19dc..957327e 100644
--- a/res/layout-xlarge-land/launcher.xml
+++ b/res/layout-xlarge-land/launcher.xml
@@ -54,54 +54,51 @@
         android:layout_height="?android:attr/actionBarSize"
         android:layout_gravity="top">
 
-        <LinearLayout android:id="@+id/search_button_cluster"
+       <!-- Global search icon -->
+       <ImageView
+           android:id="@+id/search_button"
+           android:layout_width="wrap_content"
+           android:layout_height="wrap_content"
+           android:layout_alignParentTop="true"
+           android:layout_alignParentLeft="true"
+           android:paddingLeft="@dimen/toolbar_button_horizontal_padding"
+           android:paddingRight="@dimen/toolbar_button_horizontal_padding"
+           android:paddingTop="@dimen/toolbar_button_vertical_padding"
+           android:paddingBottom="@dimen/toolbar_button_vertical_padding"
+           android:src="@drawable/ic_generic_search"
+           android:background="@drawable/button_bg"
+           android:onClick="onClickSearchButton"
+           android:focusable="true"
+           android:clickable="true" />
+           
+        <ImageView
+            android:id="@+id/search_divider"
+            android:src="@drawable/divider_launcher_holo"
             android:layout_width="wrap_content"
-            android:layout_height="48dp"
-            android:gravity="bottom"
-            >
-            <LinearLayout
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:layout_marginLeft="16dp"
-                android:background="@drawable/textfield_home_start"
-                android:orientation="horizontal">
-                <!-- Global search icon -->
-                <ImageView
-                    android:id="@+id/search_button"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="bottom"
-                    android:paddingLeft="8dp"
-                    android:paddingRight="32dp"
-                    android:paddingTop="12dp"
-                    android:src="@drawable/search_button_generic"
-                    android:background="@drawable/button_bg"
-                    android:onClick="onClickSearchButton"
-                    android:focusable="true"
-                    android:clickable="true"/>
-            </LinearLayout>
+            android:layout_height="match_parent"
+            android:layout_toRightOf="@id/search_button"
+            android:paddingTop="@dimen/toolbar_button_vertical_padding"
+            android:paddingBottom="@dimen/toolbar_button_vertical_padding"
 
-            <LinearLayout
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:background="@drawable/textfield_home_end"
-                android:orientation="horizontal">
-                <!-- Voice search icon -->
-                <ImageView
-                    android:id="@+id/voice_button"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="bottom"
-                    android:paddingLeft="24dp"
-                    android:paddingRight="24dp"
-                    android:paddingTop="12dp"
-                    android:src="@drawable/ic_voice_search"
-                    android:background="@drawable/button_bg"
-                    android:onClick="onClickVoiceButton"
-                    android:focusable="true"
-                    android:clickable="true"/>
-            </LinearLayout>
-        </LinearLayout>
+            android:onClick="onClickSearchButton"
+            android:focusable="false"
+            android:clickable="true" />
+
+        <!-- Voice search icon -->
+        <ImageView
+            android:id="@+id/voice_button"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_toRightOf="@id/search_divider"
+            android:paddingLeft="@dimen/toolbar_button_horizontal_padding"
+            android:paddingRight="@dimen/toolbar_button_horizontal_padding"
+            android:paddingTop="@dimen/toolbar_button_vertical_padding"
+            android:paddingBottom="@dimen/toolbar_button_vertical_padding"
+            android:src="@drawable/ic_voice_search"
+            android:background="@drawable/button_bg"
+            android:onClick="onClickVoiceButton"
+            android:focusable="true"
+            android:clickable="true"/>
 
         <ImageView
             android:id="@+id/configure_button"
@@ -123,26 +120,26 @@
             android:id="@+id/divider"
             android:src="@drawable/divider_launcher_holo"
             android:layout_width="wrap_content"
-            android:layout_height="@dimen/toolbar_divider_height"
+            android:layout_height="match_parent"
             android:layout_toLeftOf="@id/configure_button"
             android:paddingTop="@dimen/toolbar_button_vertical_padding"
             android:paddingBottom="@dimen/toolbar_button_vertical_padding"
 
             android:onClick="onClickAllAppsButton"
-            android:focusable="true"
+            android:focusable="false"
             android:clickable="true" />
         <TextView
             android:id="@+id/all_apps_button"
             android:text="@string/all_apps_button_label"
-            android:drawablePadding="@dimen/all_apps_drawable_padding"
+            android:drawablePadding="@dimen/all_apps_button_drawable_padding"
             android:drawableLeft="@drawable/ic_home_all_apps_holo_dark"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_toLeftOf="@id/divider"
             android:paddingLeft="@dimen/toolbar_button_horizontal_padding"
             android:paddingRight="@dimen/toolbar_button_horizontal_padding"
-            android:paddingTop="@dimen/toolbar_button_vertical_padding"
-            android:paddingBottom="@dimen/toolbar_button_vertical_padding"
+            android:paddingTop="@dimen/all_apps_button_vertical_padding"
+            android:paddingBottom="@dimen/all_apps_button_vertical_padding"
             android:background="@drawable/button_bg"
             
             android:gravity="center_horizontal|center_vertical"
@@ -161,7 +158,7 @@
             android:id="@+id/divider_during_drag"
             android:src="@drawable/divider_launcher_holo"
             android:layout_width="wrap_content"
-            android:layout_height="@dimen/toolbar_divider_height"
+            android:layout_height="match_parent"
             android:layout_toLeftOf="@id/configure_button"
             android:paddingTop="@dimen/toolbar_button_vertical_padding"
             android:paddingBottom="@dimen/toolbar_button_vertical_padding"
@@ -169,7 +166,7 @@
         <com.android.launcher2.DeleteZone
             android:id="@+id/delete_zone"
             android:text="@string/delete_zone_label_workspace"
-            android:drawablePadding="@dimen/all_apps_drawable_padding"
+            android:drawablePadding="@dimen/delete_zone_drawable_padding"
             android:drawableLeft="@drawable/delete_zone_selector"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
diff --git a/res/layout-xlarge-port/all_apps_tabbed.xml b/res/layout-xlarge-port/all_apps_tabbed.xml
index b90041c..269fa12 100644
--- a/res/layout-xlarge-port/all_apps_tabbed.xml
+++ b/res/layout-xlarge-port/all_apps_tabbed.xml
@@ -54,7 +54,7 @@
             <com.android.launcher2.DeleteZone
                 android:id="@+id/all_apps_delete_zone"
                 android:text="@string/delete_zone_label_all_apps"
-                android:drawablePadding="@dimen/all_apps_drawable_padding"
+                android:drawablePadding="@dimen/delete_zone_drawable_padding"
                 android:drawableLeft="@drawable/delete_zone_selector"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
diff --git a/res/layout-xlarge-port/launcher.xml b/res/layout-xlarge-port/launcher.xml
index 6ad5d9c..a8087f4 100644
--- a/res/layout-xlarge-port/launcher.xml
+++ b/res/layout-xlarge-port/launcher.xml
@@ -46,7 +46,7 @@
         android:id="@+id/all_apps_view"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:layout_gravity="top"/>
+        android:layout_gravity="top" />
 
     <RelativeLayout
         android:id="@+id/all_apps_button_cluster"
@@ -54,54 +54,51 @@
         android:layout_height="?android:attr/actionBarSize"
         android:layout_gravity="top">
 
-        <LinearLayout android:id="@+id/search_button_cluster"
+       <!-- Global search icon -->
+       <ImageView
+           android:id="@+id/search_button"
+           android:layout_width="wrap_content"
+           android:layout_height="wrap_content"
+           android:layout_alignParentTop="true"
+           android:layout_alignParentLeft="true"
+           android:paddingLeft="@dimen/toolbar_button_horizontal_padding"
+           android:paddingRight="@dimen/toolbar_button_horizontal_padding"
+           android:paddingTop="@dimen/toolbar_button_vertical_padding"
+           android:paddingBottom="@dimen/toolbar_button_vertical_padding"
+           android:src="@drawable/ic_generic_search"
+           android:background="@drawable/button_bg"
+           android:onClick="onClickSearchButton"
+           android:focusable="true"
+           android:clickable="true" />
+           
+        <ImageView
+            android:id="@+id/search_divider"
+            android:src="@drawable/divider_launcher_holo"
             android:layout_width="wrap_content"
-            android:layout_height="48dp"
-            android:gravity="bottom"
-            >
-            <LinearLayout
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:layout_marginLeft="16dp"
-                android:background="@drawable/textfield_home_start"
-                android:orientation="horizontal">
-                <!-- Global search icon -->
-                <ImageView
-                    android:id="@+id/search_button"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="bottom"
-                    android:paddingLeft="8dp"
-                    android:paddingRight="32dp"
-                    android:paddingTop="12dp"
-                    android:src="@drawable/search_button_generic"
-                    android:background="@drawable/button_bg"
-                    android:onClick="onClickSearchButton"
-                    android:focusable="true"
-                    android:clickable="true"/>
-            </LinearLayout>
+            android:layout_height="match_parent"
+            android:layout_toRightOf="@id/search_button"
+            android:paddingTop="@dimen/toolbar_button_vertical_padding"
+            android:paddingBottom="@dimen/toolbar_button_vertical_padding"
 
-            <LinearLayout
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:background="@drawable/textfield_home_end"
-                android:orientation="horizontal">
-                <!-- Voice search icon -->
-                <ImageView
-                    android:id="@+id/voice_button"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="bottom"
-                    android:paddingLeft="24dp"
-                    android:paddingRight="24dp"
-                    android:paddingTop="12dp"
-                    android:src="@drawable/ic_voice_search"
-                    android:background="@drawable/button_bg"
-                    android:onClick="onClickVoiceButton"
-                    android:focusable="true"
-                    android:clickable="true"/>
-            </LinearLayout>
-        </LinearLayout>
+            android:onClick="onClickSearchButton"
+            android:focusable="false"
+            android:clickable="true" />
+
+        <!-- Voice search icon -->
+        <ImageView
+            android:id="@+id/voice_button"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_toRightOf="@id/search_divider"
+            android:paddingLeft="@dimen/toolbar_button_horizontal_padding"
+            android:paddingRight="@dimen/toolbar_button_horizontal_padding"
+            android:paddingTop="@dimen/toolbar_button_vertical_padding"
+            android:paddingBottom="@dimen/toolbar_button_vertical_padding"
+            android:src="@drawable/ic_voice_search"
+            android:background="@drawable/button_bg"
+            android:onClick="onClickVoiceButton"
+            android:focusable="true"
+            android:clickable="true"/>
 
         <ImageView
             android:id="@+id/configure_button"
@@ -114,6 +111,7 @@
             android:paddingRight="@dimen/toolbar_button_horizontal_padding"
             android:paddingTop="@dimen/toolbar_button_vertical_padding"
             android:paddingBottom="@dimen/toolbar_button_vertical_padding"
+            android:background="@drawable/button_bg"
 
             android:onClick="onClickConfigureButton"
             android:focusable="true"
@@ -122,26 +120,27 @@
             android:id="@+id/divider"
             android:src="@drawable/divider_launcher_holo"
             android:layout_width="wrap_content"
-            android:layout_height="@dimen/toolbar_divider_height"
+            android:layout_height="match_parent"
             android:layout_toLeftOf="@id/configure_button"
             android:paddingTop="@dimen/toolbar_button_vertical_padding"
             android:paddingBottom="@dimen/toolbar_button_vertical_padding"
 
             android:onClick="onClickAllAppsButton"
-            android:focusable="true"
+            android:focusable="false"
             android:clickable="true" />
         <TextView
             android:id="@+id/all_apps_button"
             android:text="@string/all_apps_button_label"
-            android:drawablePadding="@dimen/all_apps_drawable_padding"
+            android:drawablePadding="@dimen/all_apps_button_drawable_padding"
             android:drawableLeft="@drawable/ic_home_all_apps_holo_dark"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_toLeftOf="@id/divider"
             android:paddingLeft="@dimen/toolbar_button_horizontal_padding"
             android:paddingRight="@dimen/toolbar_button_horizontal_padding"
-            android:paddingTop="@dimen/toolbar_button_vertical_padding"
-            android:paddingBottom="@dimen/toolbar_button_vertical_padding"
+            android:paddingTop="@dimen/all_apps_button_vertical_padding"
+            android:paddingBottom="@dimen/all_apps_button_vertical_padding"
+            android:background="@drawable/button_bg"
             
             android:gravity="center_horizontal|center_vertical"
             android:textColor="#CCFFFFFF"
@@ -159,7 +158,7 @@
             android:id="@+id/divider_during_drag"
             android:src="@drawable/divider_launcher_holo"
             android:layout_width="wrap_content"
-            android:layout_height="@dimen/toolbar_divider_height"
+            android:layout_height="match_parent"
             android:layout_toLeftOf="@id/configure_button"
             android:paddingTop="@dimen/toolbar_button_vertical_padding"
             android:paddingBottom="@dimen/toolbar_button_vertical_padding"
@@ -167,7 +166,7 @@
         <com.android.launcher2.DeleteZone
             android:id="@+id/delete_zone"
             android:text="@string/delete_zone_label_workspace"
-            android:drawablePadding="@dimen/all_apps_drawable_padding"
+            android:drawablePadding="@dimen/delete_zone_drawable_padding"
             android:drawableLeft="@drawable/delete_zone_selector"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
@@ -176,6 +175,7 @@
             android:paddingRight="@dimen/toolbar_button_horizontal_padding"
             android:paddingTop="@dimen/toolbar_button_vertical_padding"
             android:paddingBottom="@dimen/toolbar_button_vertical_padding"
+            android:background="@drawable/button_bg"
 
             android:gravity="center_horizontal|center_vertical"
             android:textColor="@color/workspace_all_apps_and_delete_zone_text_color"
diff --git a/res/drawable-xlarge/search_button_generic.xml b/res/layout-xlarge-port/tab_widget_indicator.xml
similarity index 73%
rename from res/drawable-xlarge/search_button_generic.xml
rename to res/layout-xlarge-port/tab_widget_indicator.xml
index 8f18e67..b113b7b 100644
--- a/res/drawable-xlarge/search_button_generic.xml
+++ b/res/layout-xlarge-port/tab_widget_indicator.xml
@@ -14,7 +14,6 @@
      limitations under the License.
 -->
 
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_pressed="true" android:drawable="@drawable/search_button_pressed" />
-    <item android:drawable="@drawable/search_button_normal" />
-</selector>
+<TextView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@style/TabIndicator.Portrait" />
diff --git a/res/layout-xlarge/tab_widget_indicator.xml b/res/layout-xlarge/tab_widget_indicator.xml
index 1b3f1c0..7794e29 100644
--- a/res/layout-xlarge/tab_widget_indicator.xml
+++ b/res/layout-xlarge/tab_widget_indicator.xml
@@ -16,20 +16,4 @@
 
 <TextView
     xmlns:android="http://schemas.android.com/apk/res/android"
-
-    android:id="@+id/title"
-    android:layout_width="wrap_content"
-    android:layout_height="match_parent"
-    android:gravity="center"
-    android:paddingLeft="40dp"
-    android:paddingRight="40dp"
-    android:paddingTop="15dp"
-    android:paddingBottom="20dp"
-
-    android:textColor="@color/tab_widget_indicator_color"
-    android:background="@drawable/tab_widget_indicator_selector"
-    android:textSize="20sp"
-    android:shadowColor="#393939"
-    android:shadowDx="0.0"
-    android:shadowDy="1.0"
-    android:shadowRadius="1.0" />
+    style="@style/TabIndicator" />
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 05b10e7..f872444 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"المجلدات"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"المزيد"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"الخلفيات"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"اختصارات التطبيقات"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"اختصارات التطبيقات"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"ستكون هذه علامة تبويب الخلفيات"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"الكل"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"التطبيقات"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"الألعاب"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"منزّلة"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"منزّلة"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"لم يتم العثور على ألعاب"</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"لم يُعثر على تطبيقات منزّلة"</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"لم يُعثر على تطبيقات منزّلة"</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"تعذر إسقاط العنصر على هذه الشاشة الرئيسية"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"تحديد أداة للإنشاء"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"اسم المجلد"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index b6412fa..2686210 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Папки"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Още"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Тапети"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Преки пътища на приложения"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Преки пътища на приложения"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Това ще бъде разделът с тапети"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Всички"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Приложения"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Игри"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Изтеглени"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Изтеглени"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Няма намерени игри."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Няма изтеглени приложения"</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Няма изтеглени приложения."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Елементът не можа да се премести на началния екран"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Избор на създаващо приспособление"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Име на папка"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index e8c92e3..8051418 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Carpetes"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Més"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Empaperats"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Dreceres d\'aplicacions"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Dreceres d\'aplicacions"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Aquesta serà la pestanya dels empaperats"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Totes"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Aplicacions"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Jocs"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Baixat"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Baixat"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"No s\'ha trobat cap joc."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"No hi ha aplic. baixades."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"No s\'ha trobat cap aplicació baixada."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"No s\'ha pogut trasll. l\'element a la pant. d\'inici"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Selecciona un widget per crear-lo"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Nom de la carpeta"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index f134a7c..b61068e 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Složky"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Další"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Tapety"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Zástupci aplikací"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Zástupci aplikací"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Toto bude karta Tapety"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Vše"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Aplikace"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Hry"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Stažené"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Stažené"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Nenalezeny žádné hry."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Žádné stažené aplikace."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Žádné stažené aplikace."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Na tuto plochu nelze položku přetáhnout"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Vyberte widget"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Název složky"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index a9362e0..f0218df 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Mapper"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Flere"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Tapeter"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Programgenvej"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Programgenvej"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Dette er fanen for tapeter"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Alle"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Programmer"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Spil"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Downloadet"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Downloadet"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Ingen spil."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Ingen hentede programmer."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Ingen hentede programmer."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Kunne ikke slippe elementet på denne startskærm"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Vælg widget for at oprette"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Mappenavn"</string>
diff --git a/res/values-de-xlarge/strings.xml b/res/values-de-xlarge/strings.xml
index 148a9af..86e2684 100644
--- a/res/values-de-xlarge/strings.xml
+++ b/res/values-de-xlarge/strings.xml
@@ -20,7 +20,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="wallpaper_dialog_title" msgid="5764793286524787718">"Hintergrund auswählen"</string>
-    <!-- no translation found for wallpaper_chooser_empty (7358237455389125747) -->
-    <skip />
+    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Keine Hintergründe verfügbar"</string>
     <string name="wallpaper_cancel" msgid="6502936522490675611">"Abbrechen"</string>
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 7964dba..e035b27 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -25,20 +25,20 @@
     <string name="chooser_wallpaper" msgid="5988031014201479733">"Hintergrund auswählen"</string>
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Hintergrund festlegen"</string>
     <string name="pick_wallpaper" msgid="5630222540525626723">"Hintergrundbilder"</string>
-    <!-- outdated translation 3571057450431950427 -->     <string name="activity_not_found" msgid="5591731020063337696">"Anwendung ist nicht auf dem Telefon installiert."</string>
+    <string name="activity_not_found" msgid="5591731020063337696">"Die Anwendung ist nicht installiert."</string>
     <string name="configure_wallpaper" msgid="2820186271419674623">"Konfigurieren..."</string>
     <string name="widgets_tab_label" msgid="9145860100000983599">"Widgets"</string>
     <string name="folders_tab_label" msgid="1145293785541489736">"Ordner"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Mehr"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Hintergründe"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"App-Verknüpfungen"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"App-Verknüpfungen"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Dies ist der Tab \"Hintergründe\""</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Alle"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Apps"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Spiele"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Heruntergeladen"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Heruntergeladen"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Keine Spiele gefunden."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Keine heruntergeladenen Apps"</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Keine heruntergeladenen Apps gefunden"</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Element wurde nicht auf Startbildschirm abgelegt."</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Widget für Erstellung auswählen"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Ordnername"</string>
@@ -65,7 +65,7 @@
     <string name="all_apps_button_label" msgid="2578400570124163469">"Anwendungen"</string>
     <string name="all_apps_home_button_label" msgid="1022222300329398558">"Startseite"</string>
     <string name="delete_zone_label_workspace" msgid="7153615831493049150">"Entfernen"</string>
-    <!-- outdated translation 2536335964588694907 -->     <string name="delete_zone_label_all_apps" msgid="6664588234817475108">"Löschen"</string>
+    <string name="delete_zone_label_all_apps" msgid="6664588234817475108">"Deinstallieren"</string>
     <string name="menu_add" msgid="3065046628354640854">"Hinzufügen"</string>
     <string name="menu_manage_apps" msgid="2308685199463588895">"Apps verwalten"</string>
     <string name="menu_wallpaper" msgid="5837429080911269832">"Hintergrund"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 4bc4b49..7e6c82d 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Φάκελοι"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Περισσότερα"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Ταπετσαρίες"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Συντομεύσεις Εφαρμογών"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Συντομεύσεις Εφαρμογών"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Αυτή θα είναι η καρτέλα ταπετσαριών"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Κάθε ηλικία"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Εφαρμογές"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Παιχνίδια"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Η λήψη ολοκληρώθηκε"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Η λήψη ολοκληρώθηκε"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Δεν βρέθηκαν παιχνίδια."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Δεν βρέθηκαν ληφθ. εφαρμ."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Δεν βρέθηκαν εφαρμογές που έχουν ληφθεί."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Δεν έγινε η απόθ. του στοιχείου στην αρχική οθόνη"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Επιλογή γραφ. στοιχείου δημιουργίας"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Όνομα φακέλου"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 2e0f2fe..61257e6 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Folders"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"More"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Wallpaper"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"App Shortcuts"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"App Shortcuts"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"This will be the wallpaper tab"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"All"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Apps"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Games"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Downloaded"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Downloaded"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"No games found."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"No downloaded apps found."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"No downloaded apps found."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Could not drop item onto this home screen"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Select widget to create"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Folder name"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 1d853dd..5ed7c09 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Carpetas"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Más"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Papeles tapiz"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Accesos directos a aplicaciones"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Accesos directos a aplicaciones"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Ésta será la pestaña para los papeles tapiz"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Todos"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Aplicaciones"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Juegos"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Descargado"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Descargado"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"No se encontraron juegos."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"No se encontraron descargas de aplicaciones."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"No se encontraron apps."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"No se pudo colocar el elemento en esta pantalla principal"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Seleccionar widget para crear"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Nombre de carpeta"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index f418e34..bca032c 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Carpetas"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Más"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Fondos de pantalla"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Accesos directos de aplicaciones"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Accesos directos de aplicaciones"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Será la carpeta de fondos de pantalla."</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Todas las aplicaciones"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Aplicaciones"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Juegos"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Descargadas"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Descargadas"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"No hay juegos."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Sin aplicaciones descarg."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Sin aplicaciones descargadas"</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"No se puede soltar el elemento en este escritorio."</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Seleccionar widget"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Nombre de carpeta"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 2c9afb2..4e2b7d3 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"پوشه ها"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"بیشتر"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"تصاویر زمینه"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"میانبرهای برنامه کاربردی"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"میانبرهای برنامه کاربردی"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"این برگه تصاویر زمینه خواهد بود"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"همه"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"برنامه های کاربردی"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"بازی ها"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"دانلود شد"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"دانلود شد"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"هیچ بازی پیدا نشد."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"هیچ برنامه دانلود شده ای پیدا نشد."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"هیچ برنامه دانلود شده ای پیدا نشد."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"نمی توان موردی در این صفحه اصلی انداخت"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"انتخاب ابزارک جهت ایجاد"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"نام پوشه"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 2f09924..5ea5af6 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Kansiot"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Lisää"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Taustakuvat"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Sovelluspikakuvakkeet"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Sovelluspikakuvakkeet"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Tämä on taustakuvavälilehti"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Kaikki"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Sovellukset"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Pelit"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Ladatut"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Ladatut"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Ei pelejä."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Ei ladattuja sovelluksia."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Ei ladattuja sovelluksia."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Kohdetta ei voi lisätä etusivulle"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Valitse luotava widget"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Kansion nimi"</string>
diff --git a/res/values-fr-xlarge/strings.xml b/res/values-fr-xlarge/strings.xml
index 0c5d315..5c0aa4b 100644
--- a/res/values-fr-xlarge/strings.xml
+++ b/res/values-fr-xlarge/strings.xml
@@ -20,7 +20,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="wallpaper_dialog_title" msgid="5764793286524787718">"Sélectionner un fond d\'écran"</string>
-    <!-- no translation found for wallpaper_chooser_empty (7358237455389125747) -->
-    <skip />
+    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Aucun fond d\'écran disponible"</string>
     <string name="wallpaper_cancel" msgid="6502936522490675611">"Annuler"</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 50f88a8..170dcfd 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -25,20 +25,20 @@
     <string name="chooser_wallpaper" msgid="5988031014201479733">"Sélectionner à partir de..."</string>
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Sélectionner"</string>
     <string name="pick_wallpaper" msgid="5630222540525626723">"Fonds d\'écran"</string>
-    <!-- outdated translation 3571057450431950427 -->     <string name="activity_not_found" msgid="5591731020063337696">"L\'application n\'est pas installée sur votre téléphone."</string>
+    <string name="activity_not_found" msgid="5591731020063337696">"L\'application n\'est pas installée."</string>
     <string name="configure_wallpaper" msgid="2820186271419674623">"Configurer..."</string>
     <string name="widgets_tab_label" msgid="9145860100000983599">"Widgets"</string>
     <string name="folders_tab_label" msgid="1145293785541489736">"Dossiers"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Plus"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Fonds d\'écran"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Raccourcis des applications"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Raccourcis des applications"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Onglet des fonds d\'écran"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Toutes"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Applications"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Jeux"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Téléchargées"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Téléchargées"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Aucun jeu n\'a été trouvé."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Pas d\'application téléchargée"</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Aucune application téléchargée trouvée"</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Impossible de déposer l\'élément sur l\'écran d\'accueil."</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Sélectionner le widget à créer"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Nom du dossier"</string>
@@ -65,7 +65,7 @@
     <string name="all_apps_button_label" msgid="2578400570124163469">"Applications"</string>
     <string name="all_apps_home_button_label" msgid="1022222300329398558">"Page d\'accueil"</string>
     <string name="delete_zone_label_workspace" msgid="7153615831493049150">"Supprimer"</string>
-    <!-- outdated translation 2536335964588694907 -->     <string name="delete_zone_label_all_apps" msgid="6664588234817475108">"Supprimer"</string>
+    <string name="delete_zone_label_all_apps" msgid="6664588234817475108">"Désinstaller"</string>
     <string name="menu_add" msgid="3065046628354640854">"Ajouter"</string>
     <string name="menu_manage_apps" msgid="2308685199463588895">"Gérer les applications"</string>
     <string name="menu_wallpaper" msgid="5837429080911269832">"Fond d\'écran"</string>
diff --git a/res/values-hr-xlarge/strings.xml b/res/values-hr-xlarge/strings.xml
index 7e4a299..c791102 100644
--- a/res/values-hr-xlarge/strings.xml
+++ b/res/values-hr-xlarge/strings.xml
@@ -20,7 +20,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="wallpaper_dialog_title" msgid="5764793286524787718">"Odaberite pozadinsku sliku"</string>
-    <!-- no translation found for wallpaper_chooser_empty (7358237455389125747) -->
-    <skip />
+    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Nema dostupnih pozadinskih slika"</string>
     <string name="wallpaper_cancel" msgid="6502936522490675611">"Odustani"</string>
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index fad275e..c93d64b 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -25,20 +25,20 @@
     <string name="chooser_wallpaper" msgid="5988031014201479733">"Odabir između pozadinskih slika"</string>
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Postavi pozadinsku sliku"</string>
     <string name="pick_wallpaper" msgid="5630222540525626723">"Pozadinske slike"</string>
-    <!-- outdated translation 3571057450431950427 -->     <string name="activity_not_found" msgid="5591731020063337696">"Aplikacija nije instalirana na vašem telefonu."</string>
+    <string name="activity_not_found" msgid="5591731020063337696">"Aplikacija nije instalirana."</string>
     <string name="configure_wallpaper" msgid="2820186271419674623">"Konfiguriraj..."</string>
     <string name="widgets_tab_label" msgid="9145860100000983599">"Widgeti"</string>
     <string name="folders_tab_label" msgid="1145293785541489736">"Mape"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Više"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Pozadinske slike"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Prečaci aplikacija"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Prečaci aplikacija"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Ovo će biti kartica pozadinske slike"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Sve"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Aplikacije"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Igre"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Preuzeto"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Preuzeto"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Igre nisu pronađene."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Nema preuzetih aplikacija"</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Nema preuzetih aplikacija"</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Nije bilo moguće spustiti stavku na početni zaslon"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Odabir widgeta za stvaranje"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Naziv mape"</string>
@@ -65,7 +65,7 @@
     <string name="all_apps_button_label" msgid="2578400570124163469">"Aplikacije"</string>
     <string name="all_apps_home_button_label" msgid="1022222300329398558">"Početna"</string>
     <string name="delete_zone_label_workspace" msgid="7153615831493049150">"Ukloni"</string>
-    <!-- outdated translation 2536335964588694907 -->     <string name="delete_zone_label_all_apps" msgid="6664588234817475108">"Izbriši"</string>
+    <string name="delete_zone_label_all_apps" msgid="6664588234817475108">"Deinstaliraj"</string>
     <string name="menu_add" msgid="3065046628354640854">"Dodaj"</string>
     <string name="menu_manage_apps" msgid="2308685199463588895">"Upravljaj aplikacijama"</string>
     <string name="menu_wallpaper" msgid="5837429080911269832">"Pozadinska slika"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index ff946de..af42d2d 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Mappák"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Egyebek"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Háttérképek"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Alkalmazás-parancsikonok"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Alkalmazás-parancsikonok"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Ez lesz a háttérképek lapja"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Összes"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Alkalmazások"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Játékok"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Letöltött"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Letöltött"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Nincsenek játékok."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Nincs letöltött alk."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Nincs letöltött alk."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Nem lehet elhelyezni az elemet ezen a főoldalon"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"A létrehozandó modul kiválasztása"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Mappa neve"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index acecc43..22b5dde 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Map"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Lainnya"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Wallpaper"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Pintasan App"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Pintasan App"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Ini akan menjadi tab wallpaper"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Semua"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Apps"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Permainan"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Diunduh"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Diunduh"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Tidak ditemukan permainan."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Tidak ada aplikasi yang diunduh."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Tidak ada aplikasi yang diunduh."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Tidak dapat menaruh item pada layar utama ini"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Pilih widget untuk membuat"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Nama map"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 0c2ca9f..62112b4 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Cartelle"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Altro"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Sfondi"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Scorciatoie applicazioni"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Scorciatoie applicazioni"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Questa sarà la scheda degli sfondi"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Tutte"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Applicazioni"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Giochi"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Scaricate"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Scaricate"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Nessun gioco trovato."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Nessuna appl. scaricata"</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Nessuna applicazione scaricata trovata."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Impossibile rilasciare elemento in schermata Home"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Seleziona il widget da creare"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Nome cartella"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 7ba83a7..6b6ba78 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"תיקיות"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"עוד"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"טפטים"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"קיצורי דרך של יישומים"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"קיצורי דרך של יישומים"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"זו תהיה כרטיסיית הטפטים"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"הכל"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"יישומים"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"משחקים"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"ירדו"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"מהורדות"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"לא נמצאו משחקים."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"לא נמצאו יישומים שהורדו."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"לא נמצאו יישומים שהורדו."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"אין אפשרות להניח פריט במסך בית זה"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"בחר widget כדי ליצור"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"שם תיקיה"</string>
diff --git a/res/values-ja-xlarge/strings.xml b/res/values-ja-xlarge/strings.xml
index 85e3b6c..3320532 100644
--- a/res/values-ja-xlarge/strings.xml
+++ b/res/values-ja-xlarge/strings.xml
@@ -20,7 +20,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="wallpaper_dialog_title" msgid="5764793286524787718">"壁紙の選択"</string>
-    <!-- no translation found for wallpaper_chooser_empty (7358237455389125747) -->
-    <skip />
+    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"利用できる壁紙がありません"</string>
     <string name="wallpaper_cancel" msgid="6502936522490675611">"キャンセル"</string>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index f44e9e5..9d45452 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -25,20 +25,20 @@
     <string name="chooser_wallpaper" msgid="5988031014201479733">"壁紙を選択"</string>
     <string name="wallpaper_instructions" msgid="4215640646180727542">"壁紙に設定"</string>
     <string name="pick_wallpaper" msgid="5630222540525626723">"壁紙"</string>
-    <!-- outdated translation 3571057450431950427 -->     <string name="activity_not_found" msgid="5591731020063337696">"アプリケーションがインストールされていません。"</string>
+    <string name="activity_not_found" msgid="5591731020063337696">"インストールされていません。"</string>
     <string name="configure_wallpaper" msgid="2820186271419674623">"設定..."</string>
     <string name="widgets_tab_label" msgid="9145860100000983599">"ウィジェット"</string>
     <string name="folders_tab_label" msgid="1145293785541489736">"フォルダ"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"その他"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"壁紙"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"アプリのショートカット"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"アプリのショートカット"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"ここが壁紙タブになります"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"すべて"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"アプリ"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"ゲーム"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"ダウンロード済み"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"ダウンロード済み"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"ゲームなし"</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"ダウンロードアプリなし"</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"ダウンロードしたアプリケーションは見つかりません。"</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"このホーム画面にアイテムをドロップできませんでした"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"作成するウィジェットを選択"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"フォルダ名"</string>
@@ -65,7 +65,7 @@
     <string name="all_apps_button_label" msgid="2578400570124163469">"アプリ"</string>
     <string name="all_apps_home_button_label" msgid="1022222300329398558">"ホーム"</string>
     <string name="delete_zone_label_workspace" msgid="7153615831493049150">"削除"</string>
-    <!-- outdated translation 2536335964588694907 -->     <string name="delete_zone_label_all_apps" msgid="6664588234817475108">"削除"</string>
+    <string name="delete_zone_label_all_apps" msgid="6664588234817475108">"アンインストール"</string>
     <string name="menu_add" msgid="3065046628354640854">"追加"</string>
     <string name="menu_manage_apps" msgid="2308685199463588895">"アプリの管理"</string>
     <string name="menu_wallpaper" msgid="5837429080911269832">"壁紙"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 3ccc4a7..5bd3246 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"폴더"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"더보기"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"배경화면"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"앱 바로가기"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"앱 바로가기"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"배경화면 탭이 됩니다."</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"모두"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"애플리케이션"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"게임"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"다운로드앱"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"다운로드됨"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"게임이 없습니다."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"다운로드한 애플리케이션이 없습니다."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"다운로드한 애플리케이션이 없습니다."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"홈 화면에 항목을 드롭할 수 없습니다."</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"만들 위젯 선택"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"폴더 이름"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 10727a7..123b67b 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Aplankai"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Daugiau"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Darbalaukio fonai"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Spartieji programos klavišai"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Spartieji programos klavišai"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Tai bus darbalaukio fonų skirtukas"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Visos"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Apps"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Žaidimai"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Atsisiųsta"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Atsisiųsta"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Nerasta žaidimų."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Nerasta atsisiųstų progr."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Nerasta atsisiųstų programų."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Nepavyko pašalinti elemento šiame pagr. ekrane"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Pasirinkti norimą sukurti valdiklį"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Aplanko pavadinimas"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 6cc70e7..0b75388 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Mapes"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Vairāk"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Fona tapetes"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Lietotnes saīsnes"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Lietotnes saīsnes"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Šī būs fona tapetes cilne"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Visas"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Lietotnes"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Spēles"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Lejupielād."</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Lejupielādētās"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Nav nevienas spēles."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Nav lejupiel. lietotņu."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Nav lejupielādētu lietotņu."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Nevarēja nomest vienumu šajā sākumekrānā."</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Atlasīt izveidojamo logrīku"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Mapes nosaukums"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index a51be4b..9f6f91f 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Mapper"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Mer"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Bakgrunner"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Programsnarveier"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Programsnarveier"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Dette er nå bakgrunnsfanen"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Alle"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Programmer"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Spill"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Nedlastet"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Nedlastet"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Finner ingen spill."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Finner ingen nedl.prog."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Finner ingen nedlastede programmer."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Kunne ikke slippe elementet på denne startskjermen"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Velg modul for oppretting"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Mappenavn"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 7de43a4..9d7ff2f 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Mappen"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Meer"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Achtergronden"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Toepassingssnelkoppelingen"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Toepassingssnelkoppelingen"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Dit wordt het tabblad \'Achtergronden\'"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Alle"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Toepassingen"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Games"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Gedownload"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Gedownload"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Geen games gevonden."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Geen gedownl. apps gevond."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Geen gedownloade toepassingen gevonden."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Kan item niet neerzetten op dit startscherm"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Widget selecteren om te maken"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Mapnaam"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index e3a98ab..50e955e 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Foldery"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Więcej"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Tapety"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Skróty do aplikacji"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Skróty do aplikacji"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"To będzie karta tapet"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Wszystkie"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Aplikacje"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Gry"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Pobrane"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Pobrane"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Nie znaleziono gier."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Brak pobranych aplikacji."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Brak pobranych aplikacji."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Nie można upuścić elementu na ekranie głównym"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Wybierz widżet do utworzenia"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Nazwa folderu"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 5b25e4a..69f202a 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Pastas"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Mais"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Imagens de fundo"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Atalhos de aplicações"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Atalhos de aplicações"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Isto será o separador de imagens de fundo"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Todas"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Aplicações"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Jogos"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Transferidas"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Transferidas"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Sem jogos."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Sem aplic. transferidas."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Sem aplicações transferidas."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Não foi possível largar o item neste ecrã inicial"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Seleccionar widget a criar"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Nome da pasta"</string>
diff --git a/res/values-pt-xlarge/strings.xml b/res/values-pt-xlarge/strings.xml
index 2f98ec2..b283297 100644
--- a/res/values-pt-xlarge/strings.xml
+++ b/res/values-pt-xlarge/strings.xml
@@ -20,7 +20,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="wallpaper_dialog_title" msgid="5764793286524787718">"Selecionar plano de fundo"</string>
-    <!-- no translation found for wallpaper_chooser_empty (7358237455389125747) -->
-    <skip />
+    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Nenhum papel de parede disponível"</string>
     <string name="wallpaper_cancel" msgid="6502936522490675611">"Cancelar"</string>
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index d2d2eab..9e6cdfd 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -25,27 +25,27 @@
     <string name="chooser_wallpaper" msgid="5988031014201479733">"Selecionar plano de fundo de"</string>
     <string name="wallpaper_instructions" msgid="4215640646180727542">"Definir plano de fundo"</string>
     <string name="pick_wallpaper" msgid="5630222540525626723">"Papéis de parede"</string>
-    <!-- outdated translation 3571057450431950427 -->     <string name="activity_not_found" msgid="5591731020063337696">"O aplicativo não está instalado no seu telefone."</string>
+    <string name="activity_not_found" msgid="5591731020063337696">"O aplicativo não está instalado."</string>
     <string name="configure_wallpaper" msgid="2820186271419674623">"Configurar..."</string>
     <string name="widgets_tab_label" msgid="9145860100000983599">"Widgets"</string>
     <string name="folders_tab_label" msgid="1145293785541489736">"Pastas"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Mais"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Papéis de parede"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Atalhos de aplicativo"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Atalhos de aplicativo"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Esta será a guia de papéis de parede"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Todos"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Aplicativos"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Jogos"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Download concluído"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Download concluído"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Nenhum jogo encontrado."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Nenhum aplic. encontrado."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Nenhum aplic. encontrado."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Não foi possível soltar o item nesta tela inicial"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Selecione um widget para criar"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Nome da pasta"</string>
     <string name="rename_folder_title" msgid="4544573104191526550">"Renomear pasta"</string>
     <string name="rename_action" msgid="6016003384693240896">"OK"</string>
     <string name="cancel_action" msgid="3811860427489435048">"Cancelar"</string>
-    <string name="menu_item_add_item" msgid="6233177331075781114">"Adicionar à tela da Página inicial"</string>
+    <string name="menu_item_add_item" msgid="6233177331075781114">"Adicionar à tela inicial"</string>
     <string name="group_applications" msgid="4118484163419674240">"Aplicativos"</string>
     <string name="group_shortcuts" msgid="9133529424900391877">"Atalhos"</string>
     <string name="group_folder" msgid="5143593791798929193">"Nova pasta"</string>
@@ -65,7 +65,7 @@
     <string name="all_apps_button_label" msgid="2578400570124163469">"Aplicativos"</string>
     <string name="all_apps_home_button_label" msgid="1022222300329398558">"Página inicial"</string>
     <string name="delete_zone_label_workspace" msgid="7153615831493049150">"Remover"</string>
-    <!-- outdated translation 2536335964588694907 -->     <string name="delete_zone_label_all_apps" msgid="6664588234817475108">"Excluir"</string>
+    <string name="delete_zone_label_all_apps" msgid="6664588234817475108">"Desinstalar"</string>
     <string name="menu_add" msgid="3065046628354640854">"Adicionar"</string>
     <string name="menu_manage_apps" msgid="2308685199463588895">"Gerenciar aplicativos"</string>
     <string name="menu_wallpaper" msgid="5837429080911269832">"Plano de fundo"</string>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index 182327c..6ac87d4 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -35,7 +35,7 @@
     <skip />
     <!-- no translation found for wallpapers_tab_label (1617804870364119879) -->
     <skip />
-    <!-- no translation found for applications_tab_label (9046797126882613707) -->
+    <!-- no translation found for applications_tab_label (2991364240020736760) -->
     <skip />
     <!-- no translation found for wallpapers_temp_tab_text (1660218201190495279) -->
     <skip />
@@ -45,7 +45,7 @@
     <skip />
     <!-- no translation found for all_apps_tab_games (1855736784923494918) -->
     <skip />
-    <!-- no translation found for all_apps_tab_downloaded (3335316755603669951) -->
+    <!-- no translation found for all_apps_tab_downloaded (1488049110598641387) -->
     <skip />
     <!-- no translation found for all_apps_no_games (5293893733372793696) -->
     <skip />
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 185192f..ff81c00 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Dosare"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Mai multe"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Imagini de fundal"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Comenzi rapide aplicaţii"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Comenzi rapide aplicaţii"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Aceasta va fi fila pentru imagini de fundal"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Toate"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Aplicaţii"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Jocuri"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Descărcate"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Descărcate"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Nu s-au găsit jocuri."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Nu s-au găsit apl. desc."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Nu s-au găsit aplicaţii descărcate."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Impos. de plasat elem. pe acest ecran de pornire"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Selectaţi obiectul widget"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Nume dosar"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index f32579a..abd09f9 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Папки"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Ещё"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Обои"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Ярлыки приложений"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Ярлыки приложений"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Это будет вкладка обоев"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Все"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Приложения"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Игры"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Загруженные"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Загруженные"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Игр не найдено."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Нет загруженных приложений."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Нет загруженных приложений."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Не удается скопировать элемент на главный экран"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Выберите виджет"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Название папки"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 3962fbd..23a8476 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Priečinky"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Viac"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Tapety"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Odkazy aplikácií"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Odkazy aplikácií"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Toto bude karta Tapety"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Všetky"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Aplikácie"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Hry"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Prevzaté"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Prevzaté"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Nenašli sa žiadne hry."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Žiadne prevz. aplikácie."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Neboli nájdené žiadne prevzaté aplikácie."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Položku sa nepodarilo pretiahnuť na túto plochu"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Vyberte miniaplikáciu"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Názov priečinka"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 12ff463..f12fd7b 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Mape"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Več"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Ozadja"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Bližnjice do programov"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Bližnjice do programov"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"To bo zavihek ozadij"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Vse"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Programi"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Igre"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Preneseno"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Preneseno"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Ni najdenih iger."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Ni najdenih prenesenih programov."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Ni najdenih prenesenih programov."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Elementa ni bilo mogoče postaviti na ta začetni zaslon"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Izberite želeni pripomoček"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Ime mape"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 12f637e..4a61abb 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Директоријуми"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Још"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Позадине"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Пречице за апликације"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Пречице за апликације"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Ово ће бити картица позадине"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Све"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Apps"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Игре"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Преузето"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Преузето"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Нису пронађене игре."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Нису пронађене преузете апликације"</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Нису пронађене преузете апликације"</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Ставка није пребачена на овај почетни екран"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Изаберите виџет за креирање"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Име директоријума"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 7d54842..5f5a5d0 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Mappar"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Mer"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Bakgrundsbilder"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Genvägar för appar"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Genvägar för appar"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Det här kommer att vara fliken för bakgrundsbilder"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Alla"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Program"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Spel"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Hämtade"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Hämtade"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Inga spel hittades."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Inga hämtade appar."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Inga hämtade appar."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Objektet kunde inte släppas på den här startsidan"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Välj en widget att skapa"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Mappnamn"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index c2795bb..39dc770 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"โฟลเดอร์"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"เพิ่มเติม"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"วอลเปเปอร์"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"ทางลัดของแอปพลิเคชัน"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"ทางลัดของแอปพลิเคชัน"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"นี่จะเป็นแท็บวอลเปเปอร์"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"ทั้งหมด"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"แอปพลิเคชัน"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"เกม"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"ที่ดาวน์โหลดไว้"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"ดาวน์โหลดแล้ว"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"ไม่พบเกม"</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"ไม่พบแอปพลิเคชันที่ดาวน์โหลดไว้"</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"ไม่พบแอปพลิเคชันที่ดาวน์โหลดไว้"</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"ไม่สามารถวางรายการลงในหน้าจอหลักนี้ได้"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"เลือกวิดเจ็ตที่จะสร้าง"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"ชื่อโฟลเดอร์"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index c92cf30..cbdac66 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Mga Folder"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Higit pa"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Mga Wallpaper"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Mga Shortcut ng App"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Mga Shortcut ng App"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Ito ang magiging tab ng mga wallpaper"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Lahat"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Apps"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Mga Laro"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Na-download"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Na-download"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Walang nakitang mga laro."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Walang na-download na app"</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Walang na-download na app"</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Hindi ma-drop ang item sa homescreen na ito"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Pumili ng widget na lilikhain"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Pangalan ng folder"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 4b35afc..3059ab4 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Klasörler"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Diğer"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Duvar Kağıtları"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Uygulama Kısayolları"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Uygulama Kısayolları"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Bu duvar kağıdı sekmesi olacaktır"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Tümü"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Uygulamalar"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Oyunlar"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"İndirilenler"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"İndirilenler"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Oyun bulunamadı."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"İndirilmş uyg bulunamadı."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"İndirilmiş uygulama bulunamadı."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Öğe bu ana ekrana bırakılamadı"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Oluşturulacak widget\'i seç"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Klasör adı"</string>
diff --git a/res/values-uk-xlarge/strings.xml b/res/values-uk-xlarge/strings.xml
index 7c859cb..4950142 100644
--- a/res/values-uk-xlarge/strings.xml
+++ b/res/values-uk-xlarge/strings.xml
@@ -20,6 +20,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="wallpaper_dialog_title" msgid="5764793286524787718">"Вибрати фоновий малюнок"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Фонові малюнки не доступні"</string>
+    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Фонові малюнки недоступні"</string>
     <string name="wallpaper_cancel" msgid="6502936522490675611">"Скасувати"</string>
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 0a1c79e..caa04d8 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Папки"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Більше"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Фонові мал."</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Ярлики програм"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Ярлики програм"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"This will be the wallpapers tab"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Усі"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Програми"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Ігри"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Завантажені"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Завантажені"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Ігор не знайдено."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Завантаж. прог. не знайд."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Завантажених програм не знайдено."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Неможливо помістити елемент на цей головний екран"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Вибрати віджет для створення"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Назва папки"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index eff426e..18f47a4 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"Thư mục"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"Khác"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"Hình nền"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"Lối tắt ứng dụng"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"Lối tắt ứng dụng"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Đây sẽ là tab hình nền"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"Tất cả"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"Ứng dụng"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"Trò chơi"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"Đã tải xuống"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"Đã tải xuống"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"Không tìm thấy trò chơi."</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Không tìm thấy ư.dụng được t.xuống."</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"Không tìm thấy ư.dụng được t.xuống."</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"Không thể thả mục vào màn hình chính này"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"Chọn tiện ích để tạo"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"Tên thư mục"</string>
diff --git a/res/values-xlarge/config.xml b/res/values-xlarge/config.xml
index 3e514fb..c6cd0e2 100644
--- a/res/values-xlarge/config.xml
+++ b/res/values-xlarge/config.xml
@@ -9,7 +9,7 @@
 
     <!-- Duration in milliseconds of the all apps / configuration zoom-in animation. -->
     <!-- NB: This should be less than the workspaceShrinkTime as they happen together. -->
-    <integer name="config_allAppsZoomInTime">800</integer>
+    <integer name="config_allAppsZoomInTime">900</integer>
 
     <!-- Duration in milliseconds of the transition between tabs in the all apps/customize
          tray -->
@@ -17,7 +17,7 @@
 
     <!-- Duration in milliseconds of the all apps zoom-out animation -->
     <!-- NB: This should be less than the workspaceUnshrinkTime as they happen together. -->
-    <integer name="config_allAppsZoomOutTime">600</integer>
+    <integer name="config_allAppsZoomOutTime">1400</integer>
 
     <!-- Scaling factor used in the all apps zooming animations -->
     <integer name="config_allAppsZoomScaleFactor">10</integer>
@@ -36,9 +36,9 @@
     <!-- Duration in milliseconds of the animations between all apps, customize, & home.
          NOTE: If these are changed, the toolbar animation times below should also be. -->
     <integer name="config_allAppsCameraPanTime">700</integer>
-    <integer name="config_allAppsFadeOutTime">150</integer>
+    <integer name="config_allAppsFadeOutTime">400</integer>
     <integer name="config_customizeWorkspaceShrinkTime">800</integer>
-    <integer name="config_allAppsWorkspaceShrinkTime">800</integer>
+    <integer name="config_allAppsWorkspaceShrinkTime">950</integer>
     <integer name="config_workspaceUnshrinkTime">450</integer>
 
     <!-- Duration in milliseconds toolbar fade in and fade out animations.
diff --git a/res/values-xlarge/dimens.xml b/res/values-xlarge/dimens.xml
index 22f4134..c4988e4 100644
--- a/res/values-xlarge/dimens.xml
+++ b/res/values-xlarge/dimens.xml
@@ -42,10 +42,11 @@
     <dimen name="customizeSmallScreenVerticalMarginLandscape">90dip</dimen>
     <dimen name="customizeSmallScreenVerticalMarginPortrait">180dip</dimen>
 
-    <dimen name="all_apps_drawable_padding">8dip</dimen>
-    <!--  toolbar divider height is 32dip plus 2*8dip for padding on top and bottom -->
-    <dimen name="toolbar_divider_height">48dip</dimen>
-    <dimen name="toolbar_button_vertical_padding">8dip</dimen>
+    <dimen name="delete_zone_drawable_padding">8dip</dimen>
+    <dimen name="all_apps_button_drawable_padding">0dip</dimen>
+    <dimen name="all_apps_button_vertical_padding">4dip</dimen>
+
+    <dimen name="toolbar_button_vertical_padding">12dip</dimen>
     <dimen name="toolbar_button_horizontal_padding">16dip</dimen>
 
     <!-- height & width of the drop rectangle for the trash icon -->
diff --git a/res/values-zh-rCN-xlarge/strings.xml b/res/values-zh-rCN-xlarge/strings.xml
index da36470..2b9866d 100644
--- a/res/values-zh-rCN-xlarge/strings.xml
+++ b/res/values-zh-rCN-xlarge/strings.xml
@@ -20,7 +20,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="wallpaper_dialog_title" msgid="5764793286524787718">"选择壁纸"</string>
-    <!-- no translation found for wallpaper_chooser_empty (7358237455389125747) -->
-    <skip />
+    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"没有可用壁纸"</string>
     <string name="wallpaper_cancel" msgid="6502936522490675611">"取消"</string>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index eb7b2e7..b28d5a0 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -25,20 +25,20 @@
     <string name="chooser_wallpaper" msgid="5988031014201479733">"选择壁纸来源"</string>
     <string name="wallpaper_instructions" msgid="4215640646180727542">"设置壁纸"</string>
     <string name="pick_wallpaper" msgid="5630222540525626723">"壁纸"</string>
-    <!-- outdated translation 3571057450431950427 -->     <string name="activity_not_found" msgid="5591731020063337696">"您的手机上未安装应用程序。"</string>
+    <string name="activity_not_found" msgid="5591731020063337696">"未安装此应用程序。"</string>
     <string name="configure_wallpaper" msgid="2820186271419674623">"配置..."</string>
     <string name="widgets_tab_label" msgid="9145860100000983599">"窗口小部件"</string>
     <string name="folders_tab_label" msgid="1145293785541489736">"文件夹"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"更多"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"壁纸"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"应用程序快捷方式"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"应用程序快捷方式"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"这将会成为壁纸标签"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"全部"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"应用程序"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"游戏"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"已下载"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"已下载"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"未找到游戏。"</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"未找到已下载的应用程序。"</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"未找到已下载的应用程序。"</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"无法将该项放到主屏幕上"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"选择窗口小部件进行创建"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"文件夹名称"</string>
@@ -65,7 +65,7 @@
     <string name="all_apps_button_label" msgid="2578400570124163469">"应用程序"</string>
     <string name="all_apps_home_button_label" msgid="1022222300329398558">"主屏幕"</string>
     <string name="delete_zone_label_workspace" msgid="7153615831493049150">"删除"</string>
-    <!-- outdated translation 2536335964588694907 -->     <string name="delete_zone_label_all_apps" msgid="6664588234817475108">"删除"</string>
+    <string name="delete_zone_label_all_apps" msgid="6664588234817475108">"卸载"</string>
     <string name="menu_add" msgid="3065046628354640854">"添加"</string>
     <string name="menu_manage_apps" msgid="2308685199463588895">"管理应用程序"</string>
     <string name="menu_wallpaper" msgid="5837429080911269832">"壁纸"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 171ab05..3b5b214 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -31,14 +31,14 @@
     <string name="folders_tab_label" msgid="1145293785541489736">"資料夾"</string>
     <string name="shortcuts_tab_label" msgid="8640731503933155644">"更多選項"</string>
     <string name="wallpapers_tab_label" msgid="1617804870364119879">"桌布"</string>
-    <string name="applications_tab_label" msgid="9046797126882613707">"應用程式捷徑"</string>
+    <!-- outdated translation 7756968120518062632 -->     <string name="applications_tab_label" msgid="2991364240020736760">"應用程式捷徑"</string>
     <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"桌布標籤保留位"</string>
     <string name="all_apps_tab_all" msgid="2942727589595027258">"全部"</string>
     <string name="all_apps_tab_apps" msgid="5468972551904071712">"應用程式"</string>
     <string name="all_apps_tab_games" msgid="1855736784923494918">"遊戲"</string>
-    <!-- outdated translation 2300935549064726963 -->     <string name="all_apps_tab_downloaded" msgid="3335316755603669951">"下載內容"</string>
+    <!-- outdated translation 7753043607780556423 -->     <string name="all_apps_tab_downloaded" msgid="1488049110598641387">"已下載"</string>
     <string name="all_apps_no_games" msgid="5293893733372793696">"找不到遊戲。"</string>
-    <!-- outdated translation 6145042636084482299 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"找不到已下載的應用程式。"</string>
+    <!-- outdated translation 6687010155766000796 -->     <string name="all_apps_no_downloads" msgid="2284720393234453761">"找不到已下載的應用程式。"</string>
     <string name="external_drop_widget_error" msgid="4976816434597126575">"無法將項目拖放至主螢幕上"</string>
     <string name="external_drop_widget_pick_title" msgid="4481311720134376218">"選取要建立的小工具"</string>
     <string name="rename_folder_label" msgid="5646236631298452787">"資料夾名稱"</string>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 91fe2c9..6c372e3 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -32,7 +32,7 @@
     <color name="app_info_filter">#A50000FE</color>
     <color name="dimmed_view_color">#FF7F7F7F</color>
 
-    <color name="drag_outline_color">#9DBE12</color>
+    <color name="drag_outline_color">#6595f9</color>
 
     <color name="workspace_item_pressed_outline_color">#6595f9</color>
     <color name="workspace_item_pressed_glow_color">#0997ff</color>
diff --git a/res/values/config.xml b/res/values/config.xml
index 473ed58..850c609 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -25,6 +25,12 @@
     <!-- The alpha value at which to show the most recent drop visualization outline. -->
     <integer name="config_dragOutlineMaxAlpha">128</integer>
 
+    <!-- Workspace screens are cached to bitmaps only when they're smaller than a certain size
+         (maxScaleForUsingWorkspaceScreenBitmapCache), since the bitmap cache it self is smaller
+         than the view itself (workspaceScreenBitmapCacheScale)  -->
+    <integer name="config_workspaceScreenBitmapCacheScale">20</integer>
+    <integer name="config_maxScaleForUsingWorkspaceScreenBitmapCache">50</integer>
+
     <!-- Parameters controlling the animation for when an item is dropped on the home screen,
          and it animates from its old position to the new one. -->
 
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 0c4aa26..6dcaa57 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -54,7 +54,7 @@
     <!--  Title of tab for configuring wallpapers -->
     <string name="wallpapers_tab_label">Wallpapers</string>
     <!--  Title of tab for configuring applications -->
-    <string name="applications_tab_label">App Shortcuts</string>
+    <string name="applications_tab_label">App shortcuts</string>
     <!--  Placeholder text, will be removed -->
     <string name="wallpapers_temp_tab_text">This will be the wallpapers tab</string>
     <!--  Labels for the tabs in All Apps -->
@@ -65,7 +65,7 @@
     <!--  Title of the tab for applications labeled as games [CHAR_LIMIT=24] -->
     <string name="all_apps_tab_games">Games</string>
     <!--  Tile of the tab for applications that were downloaded from market [CHAR_LIMIT=24] -->
-    <string name="all_apps_tab_downloaded">My Apps</string>
+    <string name="all_apps_tab_downloaded">My apps</string>
 
     <!-- All Apps pane -->
     <!-- Message to show when there are no games [CHAR_LIMIT=25] -->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 7592a15..0c74a6a 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -68,6 +68,28 @@
         <item name="android:layout_marginRight">10dip</item>
     </style>
 
+    <style name="TabIndicator">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">match_parent</item>
+        <item name="android:gravity">center</item>
+        <item name="android:paddingLeft">40dp</item>
+        <item name="android:paddingRight">40dp</item>
+        <item name="android:paddingTop">15dp</item>
+        <item name="android:paddingBottom">20dp</item>
+        <item name="android:textColor">@color/tab_widget_indicator_color</item>
+        <item name="android:background">@drawable/tab_widget_indicator_selector</item>
+        <item name="android:textSize">20sp</item>
+        <item name="android:shadowColor">#393939</item>
+        <item name="android:shadowDx">0.0</item>
+        <item name="android:shadowDy">1.0</item>
+        <item name="android:shadowRadius">1.0</item>
+    </style>
+
+    <style name="TabIndicator.Portrait">
+        <item name="android:paddingLeft">20dp</item>
+        <item name="android:paddingRight">20dp</item>
+    </style>
+
     <style name="SearchButton" parent="@android:style/Widget.Button.Small">
         <item name="android:paddingTop">7dip</item>
         <item name="android:paddingBottom">9dip</item>
diff --git a/src/com/android/launcher2/CachedViewGroup.java b/src/com/android/launcher2/CachedViewGroup.java
new file mode 100644
index 0000000..f314b32
--- /dev/null
+++ b/src/com/android/launcher2/CachedViewGroup.java
@@ -0,0 +1,262 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher2;
+
+import com.android.launcher.R;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.Bitmap.Config;
+import android.graphics.PorterDuff.Mode;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+
+// This class caches the drawing of this View's children in a bitmap when the scale factor
+// falls below a certain size. Only used by CellLayout, but in a separate class to keep cache
+// logic separate from the other logic in CellLayout
+public class CachedViewGroup extends ViewGroup implements VisibilityChangedListener {
+    static final String TAG = "CachedViewGroup";
+
+    private Bitmap mCache;
+    private Canvas mCacheCanvas;
+    private Rect mCacheRect;
+    private Paint mCachePaint;
+
+    private boolean mIsCacheEnabled = true;
+    private boolean mDisableCacheUpdates = false;
+    private boolean mForceCacheUpdate = false;
+    private boolean isUpdatingCache = false;
+    private boolean mIsCacheDirty = true;
+    private float mBitmapCacheScale;
+    private float mMaxScaleForUsingBitmapCache;
+
+    private Rect mBackgroundRect;
+
+    public CachedViewGroup(Context context) {
+        super(context);
+        init();
+    }
+
+    public CachedViewGroup(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        init();
+    }
+
+    private void init() {
+        mBackgroundRect = new Rect();
+        mCacheRect = new Rect();
+        final Resources res = getResources();
+        mBitmapCacheScale =
+            res.getInteger(R.integer.config_workspaceScreenBitmapCacheScale) / 100.0f;
+        mMaxScaleForUsingBitmapCache =
+            res.getInteger(R.integer.config_maxScaleForUsingWorkspaceScreenBitmapCache) / 100.0f;
+        mCacheCanvas = new Canvas();
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int l, int t, int r, int b) {
+        // sub-classes (namely CellLayout) will need to implement this
+        prepareCacheBitmap();
+        invalidateCache();
+    }
+
+    private void invalidateIfNeeded() {
+        if (mIsCacheDirty) {
+            // Force a redraw to update the cache if it's dirty
+            invalidate();
+        }
+    }
+
+    public void enableCache() {
+        mIsCacheEnabled = true;
+        invalidateIfNeeded();
+    }
+
+    public void disableCache() {
+        mIsCacheEnabled = false;
+    }
+
+    public void disableCacheUpdates() {
+        mDisableCacheUpdates = true;
+        // Force just one update before we enter a period of no cache updates
+        mForceCacheUpdate = true;
+    }
+
+    public void enableCacheUpdates() {
+        mDisableCacheUpdates = false;
+        invalidateIfNeeded();
+    }
+
+    private void invalidateCache() {
+        mIsCacheDirty = true;
+        invalidate();
+    }
+
+    public void receiveVisibilityChangedMessage(View v) {
+        invalidateCache();
+    }
+
+    private void prepareCacheBitmap() {
+        if (mCache == null) {
+            mCache = Bitmap.createBitmap((int) (getWidth() * mBitmapCacheScale),
+                    (int) (getHeight() * mBitmapCacheScale), Config.ARGB_8888);
+
+            mCachePaint = new Paint();
+            mCachePaint.setFilterBitmap(true);
+            mCacheCanvas.setBitmap(mCache);
+            mCacheCanvas.scale(mBitmapCacheScale, mBitmapCacheScale);
+        }
+    }
+
+
+    public void updateCache() {
+        mCacheCanvas.drawColor(0, Mode.CLEAR);
+
+        float alpha = getAlpha();
+        setAlpha(1.0f);
+        isUpdatingCache = true;
+        drawChildren(mCacheCanvas);
+        isUpdatingCache = false;
+        setAlpha(alpha);
+
+        mIsCacheDirty = false;
+    }
+
+    public void drawChildren(Canvas canvas) {
+        super.dispatchDraw(canvas);
+    }
+
+    @Override
+    public void removeAllViews() {
+        super.removeAllViews();
+        invalidateCache();
+    }
+
+    @Override
+    public void removeAllViewsInLayout() {
+        super.removeAllViewsInLayout();
+        invalidateCache();
+    }
+
+    @Override
+    public void removeView(View view) {
+        super.removeView(view);
+        invalidateCache();
+    }
+
+    @Override
+    public void removeViewAt(int index) {
+        super.removeViewAt(index);
+        invalidateCache();
+    }
+
+    @Override
+    public void removeViewInLayout(View view) {
+        super.removeViewInLayout(view);
+        invalidateCache();
+    }
+
+    @Override
+    public void removeViews(int start, int count) {
+        super.removeViews(start, count);
+        invalidateCache();
+    }
+
+    @Override
+    public void removeViewsInLayout(int start, int count) {
+        super.removeViewsInLayout(start, count);
+        invalidateCache();
+    }
+
+    @Override
+    public void dispatchDraw(Canvas canvas) {
+        final int count = getChildCount();
+
+        boolean useBitmapCache = false;
+        if (!isUpdatingCache) {
+            if (!mIsCacheDirty) {
+                // Check if one of the children (an icon or widget) is dirty
+                for (int i = 0; i < count; i++) {
+                    final View child = getChildAt(i);
+                    if (child.isDirty()) {
+                        mIsCacheDirty = true;
+                        break;
+                    }
+                }
+            }
+
+            useBitmapCache = mIsCacheEnabled && getScaleX() < mMaxScaleForUsingBitmapCache;
+            if (mForceCacheUpdate ||
+                    (useBitmapCache && !mDisableCacheUpdates)) {
+                // Sometimes we force a cache update-- this is used to make sure the cache will look as
+                // up-to-date as possible right when we disable cache updates
+                if (mIsCacheDirty) {
+                    updateCache();
+                }
+                mForceCacheUpdate = false;
+            }
+        }
+
+        if (useBitmapCache) {
+            mCachePaint.setAlpha((int)(255*getAlpha()));
+            canvas.drawBitmap(mCache, mCacheRect, mBackgroundRect, mCachePaint);
+        } else {
+            super.dispatchDraw(canvas);
+        }
+    }
+
+    @Override
+    public void addView(View child, int index, ViewGroup.LayoutParams params) {
+        super.addView(child, index, params);
+
+        // invalidate the cache to have it reflect the new item
+        invalidateCache();
+
+        if (child instanceof VisibilityChangedBroadcaster) {
+            VisibilityChangedBroadcaster v = (VisibilityChangedBroadcaster) child;
+            v.setVisibilityChangedListener(this);
+        }
+    }
+
+
+    @Override
+    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+        super.onSizeChanged(w, h, oldw, oldh);
+        mBackgroundRect.set(0, 0, w, h);
+        mCacheRect.set(0, 0, (int) (mBitmapCacheScale * w), (int) (mBitmapCacheScale * h));
+        mCache = null;
+        prepareCacheBitmap();
+        invalidateCache();
+    }
+}
+
+
+//Custom interfaces used to listen to "visibility changed" events of *children* of Views. Avoided
+//using "onVisibilityChanged" in the names because there's a method of that name in framework
+//(which can only can be used to listen to ancestors' "visibility changed" events)
+interface VisibilityChangedBroadcaster {
+    public void setVisibilityChangedListener(VisibilityChangedListener listener);
+}
+
+interface VisibilityChangedListener {
+    public void receiveVisibilityChangedMessage(View v);
+}
\ No newline at end of file
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index 49ae652..9b173be 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -25,7 +25,6 @@
 import android.animation.TimeInterpolator;
 import android.animation.ValueAnimator;
 import android.animation.ValueAnimator.AnimatorUpdateListener;
-import android.app.WallpaperManager;
 import android.content.Context;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
@@ -37,8 +36,6 @@
 import android.graphics.Rect;
 import android.graphics.RectF;
 import android.graphics.Region;
-import android.graphics.Bitmap.Config;
-import android.graphics.PorterDuff.Mode;
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.util.Log;
@@ -53,7 +50,7 @@
 
 import java.util.Arrays;
 
-public class CellLayout extends ViewGroup implements VisibilityChangedListener {
+public class CellLayout extends CachedViewGroup {
     static final String TAG = "CellLayout";
 
     private int mCellWidth;
@@ -87,7 +84,6 @@
     private float mBackgroundAlphaMultiplier = 1.0f;
 
     private Drawable mNormalBackground;
-    private Drawable mNormalGlowBackground;
     private Drawable mActiveBackground;
     private Drawable mActiveGlowBackground;
     private Drawable mNormalBackgroundMini;
@@ -99,18 +95,6 @@
     private float mGlowBackgroundScale;
     private float mGlowBackgroundAlpha;
 
-    private Bitmap mCache;
-    private Canvas mCacheCanvas;
-    private Rect mCacheRect;
-    private Paint mCachePaint;
-
-    private boolean mIsCacheEnabled = true;
-    private boolean mDisableCacheUpdates = false;
-    private boolean mForceCacheUpdate = false;
-    private boolean mIsCacheDirty = true;
-    private float mBitmapCacheScale;
-    private float mMaxScaleForUsingBitmapCache;
-
     private boolean mAcceptsDrops = false;
     // If we're actively dragging something over this screen, mIsDragOverlapping is true
     private boolean mIsDragOverlapping = false;
@@ -136,11 +120,10 @@
     // When a drag operation is in progress, holds the nearest cell to the touch point
     private final int[] mDragCell = new int[2];
 
-    private final WallpaperManager mWallpaperManager;
-
     private boolean mDragging = false;
 
     private TimeInterpolator mEaseOutInterpolator;
+    private CellLayoutChildren mChildren;
 
     public CellLayout(Context context) {
         this(context, null);
@@ -181,13 +164,10 @@
 
         setAlwaysDrawnWithCacheEnabled(false);
 
-        mWallpaperManager = WallpaperManager.getInstance(context);
-
         final Resources res = getResources();
 
         if (LauncherApplication.isScreenXLarge()) {
             mNormalBackground = res.getDrawable(R.drawable.homescreen_large_blue);
-            mNormalGlowBackground = res.getDrawable(R.drawable.homescreen_large_blue_strong);
             mActiveBackground = res.getDrawable(R.drawable.homescreen_large_green);
             mActiveGlowBackground = res.getDrawable(R.drawable.homescreen_large_green_strong);
 
@@ -197,7 +177,6 @@
             mActiveGlowBackgroundMini = res.getDrawable(R.drawable.homescreen_small_green_strong);
 
             mNormalBackground.setFilterBitmap(true);
-            mNormalGlowBackground.setFilterBitmap(true);
             mActiveBackground.setFilterBitmap(true);
             mActiveGlowBackground.setFilterBitmap(true);
             mNormalBackgroundMini.setFilterBitmap(true);
@@ -279,15 +258,20 @@
 
         mBackgroundRect = new Rect();
         mGlowBackgroundRect = new Rect();
-        mCacheRect = new Rect();
         setHoverScale(1.0f);
         setHoverAlpha(1.0f);
 
-        mBitmapCacheScale =
-            res.getInteger(R.integer.config_workspaceScreenBitmapCacheScale) / 100.0f;
-        mMaxScaleForUsingBitmapCache =
-            res.getInteger(R.integer.config_maxScaleForUsingWorkspaceScreenBitmapCache) / 100.0f;
-        mCacheCanvas = new Canvas();
+        mChildren = new CellLayoutChildren(context);
+        mChildren.setCellDimensions(
+                mCellWidth, mCellHeight, mLeftPadding, mTopPadding, mWidthGap, mHeightGap);
+        addView(mChildren);
+    }
+
+    public CellLayoutChildren getChildrenLayout() {
+        if (getChildCount() > 0) {
+            return (CellLayoutChildren) getChildAt(0);
+        }
+        return null;
     }
 
     public void setIsDefaultDropTarget(boolean isDefaultDropTarget) {
@@ -328,6 +312,9 @@
         if (scaleFactor != mGlowBackgroundScale) {
             mGlowBackgroundScale = scaleFactor;
             updateGlowRect();
+            if (getParent() != null) {
+                ((View) getParent()).invalidate();
+            }
         }
     }
 
@@ -376,102 +363,6 @@
         }
     }
 
-    public void drawChildren(Canvas canvas) {
-        super.dispatchDraw(canvas);
-    }
-
-    private void invalidateIfNeeded() {
-        if (mIsCacheDirty) {
-            // Force a redraw to update the cache if it's dirty
-            invalidate();
-        }
-    }
-
-    public void enableCache() {
-        mIsCacheEnabled = true;
-        invalidateIfNeeded();
-    }
-
-    public void disableCache() {
-        mIsCacheEnabled = false;
-    }
-
-    public void disableCacheUpdates() {
-        mDisableCacheUpdates = true;
-        // Force just one update before we enter a period of no cache updates
-        mForceCacheUpdate = true;
-    }
-
-    public void enableCacheUpdates() {
-        mDisableCacheUpdates = false;
-        invalidateIfNeeded();
-    }
-
-    private void invalidateCache() {
-        mIsCacheDirty = true;
-        invalidate();
-    }
-
-    public void receiveVisibilityChangedMessage(View v) {
-        invalidateCache();
-    }
-
-    public void updateCache() {
-        mCacheCanvas.drawColor(0, Mode.CLEAR);
-
-        float alpha = getAlpha();
-        setAlpha(1.0f);
-        drawChildren(mCacheCanvas);
-        setAlpha(alpha);
-
-        mIsCacheDirty = false;
-    }
-
-    public void dispatchDraw(Canvas canvas) {
-        final int count = getChildCount();
-
-        if (!mIsCacheDirty) {
-            // Check if one of the children (an icon or widget) is dirty
-            for (int i = 0; i < count; i++) {
-                final View child = getChildAt(i);
-                if (child.isDirty()) {
-                    mIsCacheDirty = true;
-                    break;
-                }
-            }
-        }
-
-        boolean useBitmapCache = mIsCacheEnabled && getScaleX() < mMaxScaleForUsingBitmapCache;
-        if (mForceCacheUpdate ||
-                (useBitmapCache && !mDisableCacheUpdates)) {
-            // Sometimes we force a cache update-- this is used to make sure the cache will look as
-            // up-to-date as possible right when we disable cache updates
-            if (mIsCacheDirty) {
-                updateCache();
-            }
-            mForceCacheUpdate = false;
-        }
-
-        if (useBitmapCache) {
-            mCachePaint.setAlpha((int)(255*getAlpha()));
-            canvas.drawBitmap(mCache, mCacheRect, mBackgroundRect, mCachePaint);
-        } else {
-            super.dispatchDraw(canvas);
-        }
-    }
-
-    private void prepareCacheBitmap() {
-        if (mCache == null) {
-            mCache = Bitmap.createBitmap((int) (getWidth() * mBitmapCacheScale),
-                    (int) (getHeight() * mBitmapCacheScale), Config.ARGB_8888);
-
-            mCachePaint = new Paint();
-            mCachePaint.setFilterBitmap(true);
-            mCacheCanvas.setBitmap(mCache);
-            mCacheCanvas.scale(mBitmapCacheScale, mBitmapCacheScale);
-        }
-    }
-
     @Override
     protected void onDraw(Canvas canvas) {
         // When we're large, we are either drawn in a "hover" state (ie when dragging an item to
@@ -488,8 +379,8 @@
                 bg = mini ? mActiveBackgroundMini : mActiveGlowBackground;
             } else if (mIsDragOccuring && mAcceptsDrops) {
                 bg = mini ? mActiveBackgroundMini : mActiveBackground;
-            } else if (mIsDragOccuring && mIsDefaultDropTarget) {
-                bg = mini ? mNormalGlowBackgroundMini : mNormalGlowBackground;
+            } else if (mIsDefaultDropTarget && mini) {
+                bg = mNormalGlowBackgroundMini;
             } else {
                 bg = mini ? mNormalBackgroundMini : mNormalBackground;
             }
@@ -610,15 +501,8 @@
 
             child.setId(childId);
 
-            addView(child, index, lp);
-            child.setAlpha(getAlpha());
-            if (child instanceof VisibilityChangedBroadcaster) {
-                VisibilityChangedBroadcaster v = (VisibilityChangedBroadcaster) child;
-                v.setVisibilityChangedListener(this);
-            }
+            mChildren.addView(child, index, lp);
 
-            // invalidate the cache to have it reflect the new item
-            invalidateCache();
             if (markCells) markCellsAsOccupiedForView(child);
 
             return true;
@@ -639,70 +523,56 @@
 
     @Override
     public void removeAllViews() {
-        super.removeAllViews();
         clearOccupiedCells();
-        invalidateCache();
+        mChildren.removeAllViews();
     }
 
     @Override
     public void removeAllViewsInLayout() {
-        super.removeAllViewsInLayout();
         clearOccupiedCells();
-        invalidateCache();
+        mChildren.removeAllViewsInLayout();
     }
 
     public void removeViewWithoutMarkingCells(View view) {
-        super.removeView(view);
-        invalidateCache();
+        mChildren.removeView(view);
     }
 
     @Override
     public void removeView(View view) {
         markCellsAsUnoccupiedForView(view);
-        super.removeView(view);
-        invalidateCache();
+        mChildren.removeView(view);
     }
 
     @Override
     public void removeViewAt(int index) {
-        markCellsAsUnoccupiedForView(getChildAt(index));
-        super.removeViewAt(index);
-        invalidateCache();
+        markCellsAsUnoccupiedForView(mChildren.getChildAt(index));
+        mChildren.removeViewAt(index);
     }
 
     @Override
     public void removeViewInLayout(View view) {
         markCellsAsUnoccupiedForView(view);
-        super.removeViewInLayout(view);
-        invalidateCache();
+        mChildren.removeViewInLayout(view);
     }
 
     @Override
     public void removeViews(int start, int count) {
         for (int i = start; i < start + count; i++) {
-            markCellsAsUnoccupiedForView(getChildAt(i));
+            markCellsAsUnoccupiedForView(mChildren.getChildAt(i));
         }
-        super.removeViews(start, count);
-        invalidateCache();
+        mChildren.removeViews(start, count);
     }
 
     @Override
     public void removeViewsInLayout(int start, int count) {
         for (int i = start; i < start + count; i++) {
-            markCellsAsUnoccupiedForView(getChildAt(i));
+            markCellsAsUnoccupiedForView(mChildren.getChildAt(i));
         }
-        super.removeViewsInLayout(start, count);
-        invalidateCache();
+        mChildren.removeViewsInLayout(start, count);
     }
 
-    @Override
-    public void requestChildFocus(View child, View focused) {
-        super.requestChildFocus(child, focused);
-        if (child != null) {
-            Rect r = new Rect();
-            child.getDrawingRect(r);
-            requestRectangleOnScreen(r);
-        }
+    public void drawChildren(Canvas canvas) {
+        mChildren.draw(canvas);
     }
 
     @Override
@@ -716,11 +586,11 @@
         final Rect frame = mRect;
         final int x = touchX + mScrollX;
         final int y = touchY + mScrollY;
-        final int count = getChildCount();
+        final int count = mChildren.getChildCount();
 
         boolean found = false;
         for (int i = count - 1; i >= 0; i--) {
-            final View child = getChildAt(i);
+            final View child = mChildren.getChildAt(i);
 
             if ((child.getVisibility()) == VISIBLE || child.getAnimation() != null) {
                 child.getHitRect(frame);
@@ -753,7 +623,6 @@
         setTag(cellInfo);
     }
 
-
     @Override
     public boolean onInterceptTouchEvent(MotionEvent ev) {
         if (mInterceptTouchListener != null && mInterceptTouchListener.onTouch(this, ev)) {
@@ -886,68 +755,35 @@
             mWidthGap = mHeightGap = minGap;
         }
 
-        int count = getChildCount();
-
-        for (int i = 0; i < count; i++) {
-            View child = getChildAt(i);
-            LayoutParams lp = (LayoutParams) child.getLayoutParams();
-            lp.setup(cellWidth, cellHeight, mWidthGap, mHeightGap,
-                    mLeftPadding, mTopPadding);
-
-            int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(lp.width, MeasureSpec.EXACTLY);
-            int childheightMeasureSpec = MeasureSpec.makeMeasureSpec(lp.height,
-                    MeasureSpec.EXACTLY);
-
-            child.measure(childWidthMeasureSpec, childheightMeasureSpec);
-        }
+        // Initial values correspond to widthSpecMode == MeasureSpec.EXACTLY
+        int newWidth = widthSpecSize;
+        int newHeight = heightSpecSize;
         if (widthSpecMode == MeasureSpec.AT_MOST) {
-            int newWidth = mLeftPadding + mRightPadding + (mCountX * cellWidth) +
+            newWidth = mLeftPadding + mRightPadding + (mCountX * cellWidth) +
                 ((mCountX - 1) * mWidthGap);
-            int newHeight = mTopPadding + mBottomPadding + (mCountY * cellHeight) +
+            newHeight = mTopPadding + mBottomPadding + (mCountY * cellHeight) +
                 ((mCountY - 1) * mHeightGap);
             setMeasuredDimension(newWidth, newHeight);
-        } else if (widthSpecMode == MeasureSpec.EXACTLY) {
-            setMeasuredDimension(widthSpecSize, heightSpecSize);
         }
+
+        int count = getChildCount();
+        for (int i = 0; i < count; i++) {
+            View child = getChildAt(i);
+            int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(newWidth, MeasureSpec.EXACTLY);
+            int childheightMeasureSpec = MeasureSpec.makeMeasureSpec(newHeight,
+                    MeasureSpec.EXACTLY);
+            child.measure(childWidthMeasureSpec, childheightMeasureSpec);
+        }
+        setMeasuredDimension(newWidth, newHeight);
     }
 
     @Override
     protected void onLayout(boolean changed, int l, int t, int r, int b) {
         int count = getChildCount();
-
         for (int i = 0; i < count; i++) {
-            final View child = getChildAt(i);
-            if (child.getVisibility() != GONE) {
-
-                CellLayout.LayoutParams lp = (CellLayout.LayoutParams) child.getLayoutParams();
-
-                int childLeft = lp.x;
-                int childTop = lp.y;
-                child.layout(childLeft, childTop, childLeft + lp.width, childTop + lp.height);
-
-                if (lp.dropped) {
-                    lp.dropped = false;
-
-                    final int[] cellXY = mTmpCellXY;
-                    getLocationOnScreen(cellXY);
-                    mWallpaperManager.sendWallpaperCommand(getWindowToken(),
-                            WallpaperManager.COMMAND_DROP,
-                            cellXY[0] + childLeft + lp.width / 2,
-                            cellXY[1] + childTop + lp.height / 2, 0, null);
-
-                    if (lp.animateDrop) {
-                        lp.animateDrop = false;
-
-                        // This call does not result in a requestLayout(), but at one point did.
-                        // We need to be cautious about any method calls within the layout pass
-                        // to insure we don't leave the view tree in a bad state.
-                        ((Workspace) mParent).animateViewIntoPosition(child);
-                    }
-                }
-            }
+            View child = getChildAt(i);
+            child.layout(0, 0, r - l, b - t);
         }
-        prepareCacheBitmap();
-        invalidateCache();
     }
 
     @Override
@@ -955,28 +791,16 @@
         super.onSizeChanged(w, h, oldw, oldh);
         mBackgroundRect.set(0, 0, w, h);
         updateGlowRect();
-        mCacheRect.set(0, 0, (int) (mBitmapCacheScale * w), (int) (mBitmapCacheScale * h));
-        mCache = null;
-        prepareCacheBitmap();
-        invalidateCache();
     }
 
     @Override
     protected void setChildrenDrawingCacheEnabled(boolean enabled) {
-        final int count = getChildCount();
-        for (int i = 0; i < count; i++) {
-            final View view = getChildAt(i);
-            view.setDrawingCacheEnabled(enabled);
-            // Update the drawing caches
-            if (!view.isHardwareAccelerated()) {
-                view.buildDrawingCache(true);
-            }
-        }
+        mChildren.setChildrenDrawingCacheEnabled(enabled);
     }
 
     @Override
     protected void setChildrenDrawnWithCacheEnabled(boolean enabled) {
-        super.setChildrenDrawnWithCacheEnabled(enabled);
+        mChildren.setChildrenDrawnWithCacheEnabled(enabled);
     }
 
     public float getBackgroundAlpha() {
@@ -1017,17 +841,7 @@
     }
 
     public View getChildAt(int x, int y) {
-        final int count = getChildCount();
-        for (int i = 0; i < count; i++) {
-            View child = getChildAt(i);
-            LayoutParams lp = (LayoutParams) child.getLayoutParams();
-
-            if ((lp.cellX <= x) && (x < lp.cellX + lp.cellHSpan) &&
-                    (lp.cellY <= y) && (y < lp.cellY + lp.cellHSpan)) {
-                return child;
-            }
-        }
-        return null;
+        return mChildren.getChildAt(x, y);
     }
 
     /**
@@ -1430,6 +1244,13 @@
         return result;
     }
 
+    public int[] cellSpansToSize(int hSpans, int vSpans) {
+        int[] size = new int[2];
+        size[0] = hSpans * mCellWidth + (hSpans - 1) * mWidthGap;
+        size[1] = vSpans * mCellHeight + (vSpans - 1) * mHeightGap;
+        return size;
+    }
+
     /**
      * Calculate the grid spans needed to fit given item
      */
@@ -1506,13 +1327,13 @@
     }
 
     private void markCellsAsOccupiedForView(View view) {
-        if (view == null || view.getParent() != this) return;
+        if (view == null || view.getParent() != mChildren) return;
         LayoutParams lp = (LayoutParams) view.getLayoutParams();
         markCellsForView(lp.cellX, lp.cellY, lp.cellHSpan, lp.cellVSpan, true);
     }
 
     private void markCellsAsUnoccupiedForView(View view) {
-        if (view == null || view.getParent() != this) return;
+        if (view == null || view.getParent() != mChildren) return;
         LayoutParams lp = (LayoutParams) view.getLayoutParams();
         markCellsForView(lp.cellX, lp.cellY, lp.cellHSpan, lp.cellVSpan, false);
     }
@@ -1676,14 +1497,3 @@
         }
     }
 }
-
-// Custom interfaces used to listen to "visibility changed" events of *children* of Views. Avoided
-// using "onVisibilityChanged" in the names because there's a method of that name in framework
-// (which can only can be used to listen to ancestors' "visibility changed" events)
-interface VisibilityChangedBroadcaster {
-    public void setVisibilityChangedListener(VisibilityChangedListener listener);
-}
-
-interface VisibilityChangedListener {
-    public void receiveVisibilityChangedMessage(View v);
-}
diff --git a/src/com/android/launcher2/CellLayoutChildren.java b/src/com/android/launcher2/CellLayoutChildren.java
new file mode 100644
index 0000000..a6f7f42
--- /dev/null
+++ b/src/com/android/launcher2/CellLayoutChildren.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher2;
+
+import android.app.WallpaperManager;
+import android.content.Context;
+import android.graphics.Rect;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.View.MeasureSpec;
+
+public class CellLayoutChildren extends ViewGroup {
+    static final String TAG = "CellLayoutChildren";
+
+    // These are temporary variables to prevent having to allocate a new object just to
+    // return an (x, y) value from helper functions. Do NOT use them to maintain other state.
+    private final int[] mTmpCellXY = new int[2];
+
+    private final WallpaperManager mWallpaperManager;
+
+    private int mCellWidth;
+    private int mCellHeight;
+
+    private int mLeftPadding;
+    private int mTopPadding;
+
+    private int mWidthGap;
+    private int mHeightGap;
+
+    public CellLayoutChildren(Context context) {
+        super(context);
+        mWallpaperManager = WallpaperManager.getInstance(context);
+    }
+
+    public void setCellDimensions(int cellWidth, int cellHeight,
+            int leftPadding, int topPadding, int widthGap, int heightGap ) {
+        mCellWidth = cellWidth;
+        mCellHeight = cellHeight;
+        mLeftPadding = leftPadding;
+        mTopPadding = topPadding;
+        mWidthGap = widthGap;
+        mHeightGap = heightGap;
+    }
+
+    public View getChildAt(int x, int y) {
+        final int count = getChildCount();
+        for (int i = 0; i < count; i++) {
+            View child = getChildAt(i);
+            CellLayout.LayoutParams lp = (CellLayout.LayoutParams) child.getLayoutParams();
+
+            if ((lp.cellX <= x) && (x < lp.cellX + lp.cellHSpan) &&
+                    (lp.cellY <= y) && (y < lp.cellY + lp.cellHSpan)) {
+                return child;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        final int cellWidth = mCellWidth;
+        final int cellHeight = mCellHeight;
+        int count = getChildCount();
+        for (int i = 0; i < count; i++) {
+            View child = getChildAt(i);
+            CellLayout.LayoutParams lp = (CellLayout.LayoutParams) child.getLayoutParams();
+
+            lp.setup(cellWidth, cellHeight, mWidthGap, mHeightGap,
+                    mLeftPadding, mTopPadding);
+
+            int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(lp.width, MeasureSpec.EXACTLY);
+            int childheightMeasureSpec = MeasureSpec.makeMeasureSpec(lp.height,
+                    MeasureSpec.EXACTLY);
+
+            child.measure(childWidthMeasureSpec, childheightMeasureSpec);
+        }
+        int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);
+        int heightSpecSize =  MeasureSpec.getSize(heightMeasureSpec);
+        setMeasuredDimension(widthSpecSize, heightSpecSize);
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int l, int t, int r, int b) {
+        int count = getChildCount();
+        for (int i = 0; i < count; i++) {
+            final View child = getChildAt(i);
+            if (child.getVisibility() != GONE) {
+                CellLayout.LayoutParams lp = (CellLayout.LayoutParams) child.getLayoutParams();
+
+                int childLeft = lp.x;
+                int childTop = lp.y;
+                child.layout(childLeft, childTop, childLeft + lp.width, childTop + lp.height);
+
+                if (lp.dropped) {
+                    lp.dropped = false;
+
+                    final int[] cellXY = mTmpCellXY;
+                    getLocationOnScreen(cellXY);
+                    mWallpaperManager.sendWallpaperCommand(getWindowToken(),
+                            WallpaperManager.COMMAND_DROP,
+                            cellXY[0] + childLeft + lp.width / 2,
+                            cellXY[1] + childTop + lp.height / 2, 0, null);
+
+                    if (lp.animateDrop) {
+                        lp.animateDrop = false;
+
+                        // This call does not result in a requestLayout(), but at one point did.
+                        // We need to be cautious about any method calls within the layout pass
+                        // to insure we don't leave the view tree in a bad state.
+                        ((Workspace) mParent.getParent()).animateViewIntoPosition(child);
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    public void requestChildFocus(View child, View focused) {
+        super.requestChildFocus(child, focused);
+        if (child != null) {
+            Rect r = new Rect();
+            child.getDrawingRect(r);
+            requestRectangleOnScreen(r);
+        }
+    }
+
+    @Override
+    public void cancelLongPress() {
+        super.cancelLongPress();
+
+        // Cancel long press for all children
+        final int count = getChildCount();
+        for (int i = 0; i < count; i++) {
+            final View child = getChildAt(i);
+            child.cancelLongPress();
+        }
+    }
+
+    @Override
+    protected void setChildrenDrawingCacheEnabled(boolean enabled) {
+        final int count = getChildCount();
+        for (int i = 0; i < count; i++) {
+            final View view = getChildAt(i);
+            view.setDrawingCacheEnabled(enabled);
+            // Update the drawing caches
+            if (!view.isHardwareAccelerated()) {
+                view.buildDrawingCache(true);
+            }
+        }
+    }
+
+    @Override
+    protected void setChildrenDrawnWithCacheEnabled(boolean enabled) {
+        super.setChildrenDrawnWithCacheEnabled(enabled);
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/launcher2/CustomizePagedView.java b/src/com/android/launcher2/CustomizePagedView.java
index c74e5f4..e934efa 100644
--- a/src/com/android/launcher2/CustomizePagedView.java
+++ b/src/com/android/launcher2/CustomizePagedView.java
@@ -479,8 +479,9 @@
         }
     }
 
-    Bitmap drawableToBitmap(Drawable d, View v) {
-        Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);
+    Bitmap drawableToBitmap(Drawable d, View v, boolean clipHeight) {
+        int height = clipHeight ? v.getPaddingTop() + d.getIntrinsicHeight() : v.getHeight();
+        Bitmap b = Bitmap.createBitmap(v.getWidth(), height, Bitmap.Config.ARGB_8888);
         Canvas c = new Canvas(b);
         c.translate((v.getWidth() - d.getIntrinsicWidth()) / 2, v.getPaddingTop());
         d.draw(c);
@@ -508,8 +509,7 @@
                 // Get the widget preview as the drag representation
                 final LinearLayout l = (LinearLayout) v;
                 final ImageView i = (ImageView) l.findViewById(R.id.widget_preview);
-                final Drawable icon = i.getDrawable();
-                Bitmap b = drawableToBitmap(icon, i);
+                Bitmap b = drawableToBitmap(i.getDrawable(), i, true);
                 PendingAddWidgetInfo createWidgetInfo = (PendingAddWidgetInfo) v.getTag();
 
                 int[] spanXY = CellLayout.rectToCell(
@@ -529,7 +529,7 @@
                 // get icon (top compound drawable, index is 1)
                 final TextView tv = (TextView) v;
                 final Drawable icon = tv.getCompoundDrawables()[1];
-                Bitmap b = drawableToBitmap(icon, tv);
+                Bitmap b = drawableToBitmap(icon, tv, false);
                 PendingAddItemInfo createItemInfo = (PendingAddItemInfo) v.getTag();
 
                 mLauncher.getWorkspace().onDragStartedWithItemSpans(1, 1, b);
@@ -546,7 +546,7 @@
                 // get icon (top compound drawable, index is 1)
                 final TextView tv = (TextView) v;
                 final Drawable icon = tv.getCompoundDrawables()[1];
-                Bitmap b = drawableToBitmap(icon, tv);
+                Bitmap b = drawableToBitmap(icon, tv, false);
                 ApplicationInfo app = (ApplicationInfo) v.getTag();
                 app = new ApplicationInfo(app);
 
diff --git a/src/com/android/launcher2/DragView.java b/src/com/android/launcher2/DragView.java
index 433dab8..c0776a9 100644
--- a/src/com/android/launcher2/DragView.java
+++ b/src/com/android/launcher2/DragView.java
@@ -48,7 +48,6 @@
     private int mDragRegionHeight;
 
     ValueAnimator mAnim;
-    private float mScale = 1.0f;
     private float mOffsetX = 0.0f;
     private float mOffsetY = 0.0f;
 
@@ -144,22 +143,6 @@
         mOnDrawRunnable = r;
     }
 
-    public int getScaledDragRegionXOffset() {
-        return -(int)((mScale - 1.0f) * mDragRegionWidth / 2);
-    }
-
-    public int getScaledDragRegionWidth() {
-        return (int)(mScale * mDragRegionWidth);
-    }
-
-    public int getScaledDragRegionYOffset() {
-        return -(int)((mScale - 1.0f) * mDragRegionHeight / 2);
-    }
-
-    public int getScaledDragRegionHeight() {
-        return (int)(mScale * mDragRegionWidth);
-    }
-
     public int getDragRegionLeft() {
         return mDragRegionLeft;
     }
diff --git a/src/com/android/launcher2/InstallShortcutReceiver.java b/src/com/android/launcher2/InstallShortcutReceiver.java
index ac50f66..c67e90e 100644
--- a/src/com/android/launcher2/InstallShortcutReceiver.java
+++ b/src/com/android/launcher2/InstallShortcutReceiver.java
@@ -55,25 +55,27 @@
 
         if (findEmptyCell(context, mCoordinates, screen)) {
             Intent intent = data.getParcelableExtra(Intent.EXTRA_SHORTCUT_INTENT);
+            if (intent != null) {
+                if (intent.getAction() == null) {
+                    intent.setAction(Intent.ACTION_VIEW);
+                }
 
-            if (intent.getAction() == null) {
-                intent.setAction(Intent.ACTION_VIEW);
+                // By default, we allow for duplicate entries (located in
+                // different places)
+                boolean duplicate = data.getBooleanExtra(Launcher.EXTRA_SHORTCUT_DUPLICATE, true);
+                if (duplicate || !LauncherModel.shortcutExists(context, name, intent)) {
+                    LauncherApplication app = (LauncherApplication) context.getApplicationContext();
+                    app.getModel().addShortcut(context, data, screen, mCoordinates[0], 
+                            mCoordinates[1], true);
+                    Toast.makeText(context, context.getString(R.string.shortcut_installed, name),
+                            Toast.LENGTH_SHORT).show();
+                } else {
+                    Toast.makeText(context, context.getString(R.string.shortcut_duplicate, name),
+                            Toast.LENGTH_SHORT).show();
+                }
+
+                return true;
             }
-
-            // By default, we allow for duplicate entries (located in
-            // different places)
-            boolean duplicate = data.getBooleanExtra(Launcher.EXTRA_SHORTCUT_DUPLICATE, true);
-            if (duplicate || !LauncherModel.shortcutExists(context, name, intent)) {
-                ((LauncherApplication)context.getApplicationContext()).getModel()
-                        .addShortcut(context, data, screen, mCoordinates[0], mCoordinates[1], true);
-                Toast.makeText(context, context.getString(R.string.shortcut_installed, name),
-                        Toast.LENGTH_SHORT).show();
-            } else {
-                Toast.makeText(context, context.getString(R.string.shortcut_duplicate, name),
-                        Toast.LENGTH_SHORT).show();
-            }
-
-            return true;
         } else {
             Toast.makeText(context, context.getString(R.string.out_of_space),
                     Toast.LENGTH_SHORT).show();
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index f381b1f..1733ddb 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -47,12 +47,12 @@
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
-import android.content.Intent.ShortcutIconResource;
 import android.content.IntentFilter;
+import android.content.Intent.ShortcutIconResource;
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.ResolveInfo;
+import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
@@ -88,9 +88,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.DecelerateInterpolator;
 import android.view.inputmethod.InputMethodManager;
@@ -100,11 +100,11 @@
 import android.widget.LinearLayout;
 import android.widget.PopupWindow;
 import android.widget.TabHost;
-import android.widget.TabHost.OnTabChangeListener;
-import android.widget.TabHost.TabContentFactory;
 import android.widget.TabWidget;
 import android.widget.TextView;
 import android.widget.Toast;
+import android.widget.TabHost.OnTabChangeListener;
+import android.widget.TabHost.TabContentFactory;
 
 import com.android.common.Search;
 import com.android.launcher.R;
@@ -1148,10 +1148,7 @@
         final int[] cellXY = mTmpAddItemCellCoordinates;
         final CellLayout layout = (CellLayout) mWorkspace.getChildAt(screen);
 
-        int[] touchXY = null;
-        if (mAddDropPosition != null && mAddDropPosition[0] > -1 && mAddDropPosition[1] > -1) {
-            touchXY = mAddDropPosition;
-        }
+        int[] touchXY = mAddDropPosition;
         boolean foundCellSpan = false;
         if (touchXY != null) {
             // when dragging and dropping, just find the closest free spot
@@ -1196,13 +1193,7 @@
         // if we are placing widgets on a "spring-loaded" screen
         final int[] cellXY = mTmpAddItemCellCoordinates;
 
-        // For now, we don't save the coordinate where we dropped the icon because we're not
-        // supporting spring-loaded mini-screens; however, leaving the ability to directly place
-        // a widget on the home screen in case we want to add it in the future
-        int[] touchXY = null;
-        if (mAddDropPosition != null && mAddDropPosition[0] > -1 && mAddDropPosition[1] > -1) {
-            touchXY = mAddDropPosition;
-        }
+        int[] touchXY = mAddDropPosition;
         boolean foundCellSpan = false;
         if (touchXY != null) {
             // when dragging and dropping, just find the closest free spot
@@ -1963,7 +1954,7 @@
 
     void closeFolder(Folder folder) {
         folder.getInfo().opened = false;
-        ViewGroup parent = (ViewGroup) folder.getParent();
+        ViewGroup parent = (ViewGroup) folder.getParent().getParent();
         if (parent != null) {
             CellLayout cl = (CellLayout) parent;
             cl.removeViewWithoutMarkingCells(folder);
@@ -2212,7 +2203,7 @@
         }
 
         if (!(v instanceof CellLayout)) {
-            v = (View) v.getParent();
+            v = (View) v.getParent().getParent();
         }
 
 
@@ -2607,34 +2598,26 @@
      * @param hideSeq AnimatorSet in which to put "hide" animations, or null.
      */
     private void hideAndShowToolbarButtons(State newState, AnimatorSet showSeq, AnimatorSet hideSeq) {
-        final View searchButton = findViewById(R.id.search_button_cluster);
+        final View buttonCluster = findViewById(R.id.all_apps_button_cluster);
+
         final View allAppsButton = findViewById(R.id.all_apps_button);
         final View divider = findViewById(R.id.divider);
         final View configureButton = findViewById(R.id.configure_button);
 
         switch (newState) {
         case WORKSPACE:
-            hideOrShowToolbarButton(true, searchButton, showSeq);
-            hideOrShowToolbarButton(true, allAppsButton, showSeq);
-            hideOrShowToolbarButton(true, divider, showSeq);
-            hideOrShowToolbarButton(true, configureButton, showSeq);
+            hideOrShowToolbarButton(true, buttonCluster, showSeq);
             mDeleteZone.setOverlappingViews(new View[] { allAppsButton, divider, configureButton });
             mDeleteZone.setDragAndDropEnabled(true);
             mDeleteZone.setText(getResources().getString(R.string.delete_zone_label_workspace));
             break;
         case ALL_APPS:
-            hideOrShowToolbarButton(false, configureButton, hideSeq);
-            hideOrShowToolbarButton(false, searchButton, hideSeq);
-            hideOrShowToolbarButton(false, divider, hideSeq);
-            hideOrShowToolbarButton(false, allAppsButton, hideSeq);
+            hideOrShowToolbarButton(false, buttonCluster, hideSeq);
             mDeleteZone.setDragAndDropEnabled(false);
             mDeleteZone.setText(getResources().getString(R.string.delete_zone_label_all_apps));
             break;
         case CUSTOMIZE:
-            hideOrShowToolbarButton(false, allAppsButton, hideSeq);
-            hideOrShowToolbarButton(false, searchButton, hideSeq);
-            hideOrShowToolbarButton(false, divider, hideSeq);
-            hideOrShowToolbarButton(false, configureButton, hideSeq);
+            hideOrShowToolbarButton(false, buttonCluster, hideSeq);
             mDeleteZone.setDragAndDropEnabled(false);
             break;
         }
@@ -2701,7 +2684,7 @@
                 toView.setAlpha(0f);
                 ObjectAnimator alphaAnim = ObjectAnimator.ofPropertyValuesHolder(toView,
                         PropertyValuesHolder.ofFloat("alpha", 1.0f));
-                alphaAnim.setInterpolator(new DecelerateInterpolator(1.5f));
+                alphaAnim.setInterpolator(new DecelerateInterpolator(1.0f));
                 alphaAnim.setDuration(duration);
                 alphaAnim.start();
             }
@@ -2799,11 +2782,13 @@
             ValueAnimator alphaAnim = ObjectAnimator.ofPropertyValuesHolder(fromView,
                     PropertyValuesHolder.ofFloat("alpha", 1.0f, 0.0f));
             alphaAnim.setDuration(res.getInteger(R.integer.config_allAppsFadeOutTime));
-            alphaAnim.setInterpolator(new DecelerateInterpolator(1.5f));
+            alphaAnim.setInterpolator(new DecelerateInterpolator(2.0f));
+            fromView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
             alphaAnim.addListener(new AnimatorListenerAdapter() {
                 @Override
                 public void onAnimationEnd(Animator animation) {
                     fromView.setVisibility(View.GONE);
+                    fromView.setLayerType(View.LAYER_TYPE_NONE, null);
                 }
             });
 
@@ -3115,7 +3100,7 @@
             ComponentName activityName = searchManager.getGlobalSearchActivity();
             if (activityName != null) {
                 sGlobalSearchIcon = updateButtonWithIconFromExternalActivity(
-                        R.id.search_button, activityName, R.drawable.search_button_generic);
+                        R.id.search_button, activityName, R.drawable.ic_generic_search);
             } else {
                 findViewById(R.id.search_button).setVisibility(View.GONE);
             }
@@ -3348,7 +3333,8 @@
         int count = workspace.getChildCount();
         for (int i = 0; i < count; i++) {
             // Use removeAllViewsInLayout() to avoid an extra requestLayout() and invalidate().
-            ((ViewGroup) workspace.getChildAt(i)).removeAllViewsInLayout();
+            final ViewGroup layout = ((CellLayout) workspace.getChildAt(i)).getChildrenLayout();
+            layout.removeAllViewsInLayout();
         }
 
         if (DEBUG_USER_INTERFACE) {
diff --git a/src/com/android/launcher2/PagedView.java b/src/com/android/launcher2/PagedView.java
index 4a0f44e..ede029b 100644
--- a/src/com/android/launcher2/PagedView.java
+++ b/src/com/android/launcher2/PagedView.java
@@ -18,6 +18,10 @@
 
 import java.util.ArrayList;
 
+import android.animation.Animator;
+import android.animation.AnimatorInflater;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
@@ -32,9 +36,6 @@
 import android.view.ViewConfiguration;
 import android.view.ViewGroup;
 import android.view.ViewParent;
-import android.view.animation.Animation;
-import android.view.animation.Animation.AnimationListener;
-import android.view.animation.AnimationUtils;
 import android.view.animation.Interpolator;
 import android.widget.Checkable;
 import android.widget.Scroller;
@@ -109,7 +110,7 @@
     protected boolean mAllowOverScroll = true;
     protected int mUnboundedScrollX;
 
-    // parameter that adjusts the layout to be optimized for CellLayouts with that scale factor
+    // parameter that adjusts the layout to be optimized for pages with that scale factor
     protected float mLayoutScale = 1.0f;
 
     protected static final int INVALID_POINTER = -1;
@@ -416,20 +417,20 @@
         setMeasuredDimension(widthSize, heightSize);
     }
 
-    protected void moveToNewPageWithoutMovingCellLayouts(int newCurrentPage) {
+    protected void scrollToNewPageWithoutMovingPages(int newCurrentPage) {
         int newX = getChildOffset(newCurrentPage) - getRelativeChildOffset(newCurrentPage);
         int delta = newX - mScrollX;
 
-        final int screenCount = getChildCount();
-        for (int i = 0; i < screenCount; i++) {
-            CellLayout cl = (CellLayout) getChildAt(i);
-            cl.setX(cl.getX() + delta);
+        final int pageCount = getChildCount();
+        for (int i = 0; i < pageCount; i++) {
+            View page = (View) getChildAt(i);
+            page.setX(page.getX() + delta);
         }
         setCurrentPage(newCurrentPage);
     }
 
-    // A layout scale of 1.0f assumes that the CellLayouts, in their unshrunken state, have a
-    // scale of 1.0f. A layout scale of 0.8f assumes the CellLayouts have a scale of 0.8f, and
+    // A layout scale of 1.0f assumes that the pages, in their unshrunken state, have a
+    // scale of 1.0f. A layout scale of 0.8f assumes the pages have a scale of 0.8f, and
     // tightens the layout accordingly
     public void setLayoutScale(float childrenScale) {
         mLayoutScale = childrenScale;
@@ -451,7 +452,7 @@
         }
         // Also, the page offset has changed  (since the pages are now smaller);
         // update the page offset, but again preserving absolute X and Y coordinates
-        moveToNewPageWithoutMovingCellLayouts(mCurrentPage);
+        scrollToNewPageWithoutMovingPages(mCurrentPage);
     }
 
     @Override
@@ -809,19 +810,15 @@
 
     protected void animateClickFeedback(View v, final Runnable r) {
         // animate the view slightly to show click feedback running some logic after it is "pressed"
-        Animation anim = AnimationUtils.loadAnimation(getContext(), 
-                R.anim.paged_view_click_feedback);
-        anim.setAnimationListener(new AnimationListener() {
-            @Override
-            public void onAnimationStart(Animation animation) {}
-            @Override
-            public void onAnimationRepeat(Animation animation) {
+        ObjectAnimator anim = (ObjectAnimator) AnimatorInflater.
+                loadAnimator(mContext, R.anim.paged_view_click_feedback);
+        anim.setTarget(v);
+        anim.addListener(new AnimatorListenerAdapter() {
+            public void onAnimationRepeat(Animator animation) {
                 r.run();
             }
-            @Override
-            public void onAnimationEnd(Animation animation) {}
         });
-        v.startAnimation(anim);
+        anim.start();
     }
 
     /*
@@ -882,6 +879,11 @@
         if (f == 0) return;
         f = f / (Math.abs(f)) * (overScrollInfluenceCurve(Math.abs(f)));
 
+        // Clamp this factor, f, to -1 < f < 1
+        if (Math.abs(f) >= 1) {
+            f /= Math.abs(f);
+        }
+
         int overScrollAmount = (int) Math.round(OVERSCROLL_DAMP_FACTOR * f * screenSize);
         if (amount < 0) {
             mScrollX = overScrollAmount;
diff --git a/src/com/android/launcher2/SpringLoadedDragController.java b/src/com/android/launcher2/SpringLoadedDragController.java
index a734258..9007581 100644
--- a/src/com/android/launcher2/SpringLoadedDragController.java
+++ b/src/com/android/launcher2/SpringLoadedDragController.java
@@ -26,6 +26,8 @@
     // the screen the user is currently hovering over, if any
     private CellLayout mScreen;
     private Launcher mLauncher;
+    boolean mFinishedAnimation = false;
+    boolean mWaitingToReenter = false;
 
     public SpringLoadedDragController(Launcher launcher) {
         mLauncher = launcher;
@@ -33,9 +35,16 @@
         mAlarm.setOnAlarmListener(this);
     }
 
-    public void onDragEnter(CellLayout cl) {
+    public void onDragEnter(CellLayout cl, boolean isSpringLoaded) {
         mScreen = cl;
         mAlarm.setAlarm(ENTER_SPRING_LOAD_HOVER_TIME);
+        mFinishedAnimation = isSpringLoaded;
+        mWaitingToReenter = false;
+    }
+
+    public void onEnterSpringLoadedMode(boolean waitToReenter) {
+        mFinishedAnimation = true;
+        mWaitingToReenter = waitToReenter;
     }
 
     public void onDragExit() {
@@ -43,7 +52,9 @@
             mScreen.onDragExit();
         }
         mScreen = null;
-        mAlarm.setAlarm(EXIT_SPRING_LOAD_HOVER_TIME);
+        if (mFinishedAnimation && !mWaitingToReenter) {
+            mAlarm.setAlarm(EXIT_SPRING_LOAD_HOVER_TIME);
+        }
     }
 
     // this is called when our timer runs out
diff --git a/src/com/android/launcher2/WallpaperChooserDialogFragment.java b/src/com/android/launcher2/WallpaperChooserDialogFragment.java
index ec0f8a2..4f13332 100644
--- a/src/com/android/launcher2/WallpaperChooserDialogFragment.java
+++ b/src/com/android/launcher2/WallpaperChooserDialogFragment.java
@@ -111,6 +111,8 @@
      */
     @Override
     public Dialog onCreateDialog(Bundle savedInstanceState) {
+        findWallpapers();
+
         final View v = getActivity().getLayoutInflater().inflate(
                 R.layout.wallpaper_chooser, null, false);
 
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index b9a2b62..004de3a 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -60,6 +60,7 @@
 import android.view.DragEvent;
 import android.view.MotionEvent;
 import android.view.View;
+import android.view.ViewGroup;
 import android.view.animation.DecelerateInterpolator;
 import android.widget.TextView;
 import android.widget.Toast;
@@ -125,7 +126,6 @@
 
     private int mDefaultPage;
 
-    private boolean mPageMoving = false;
     private boolean mIsDragInProcess = false;
 
     /**
@@ -210,6 +210,13 @@
     boolean mUpdateWallpaperOffsetImmediately = false;
     boolean mSyncWallpaperOffsetWithScroll = true;
 
+    // info about the last drag
+    private DragView mLastDragView;
+    private int mLastDragOriginX;
+    private int mLastDragOriginY;
+    private int mLastDragXOffset;
+    private int mLastDragYOffset;
+
     /**
      * Used to inflate the Workspace from XML.
      *
@@ -276,13 +283,22 @@
                 mIsInUnshrinkAnimation = true;
                 disableCacheUpdates();
             }
+
             @Override
             public void onAnimationEnd(Animator animation) {
                 mIsInUnshrinkAnimation = false;
                 mSyncWallpaperOffsetWithScroll = true;
-                if (mShrinkState != ShrinkState.SPRING_LOADED) {
+                if (mShrinkState == ShrinkState.SPRING_LOADED) {
+                    View layout = null;
+                    if (mLastDragView != null) {
+                        layout = findMatchingPageForDragOver(mLastDragView, mLastDragOriginX,
+                                mLastDragOriginY, mLastDragXOffset, mLastDragYOffset);
+                    }
+                    mSpringLoadedDragController.onEnterSpringLoadedMode(layout == null);
+                } else {
                     mDrawCustomizeTrayBackground = false;
                 }
+                mWallpaperOffset.setOverrideHorizontalCatchupConstant(false);
                 enableCacheUpdates();
                 mAnimator = null;
             }
@@ -294,6 +310,7 @@
             }
             @Override
             public void onAnimationEnd(Animator animation) {
+                mWallpaperOffset.setOverrideHorizontalCatchupConstant(false);
                 enableCacheUpdates();
                 mAnimator = null;
             }
@@ -360,7 +377,7 @@
      * @return The open folder on the current screen, or null if there is none
      */
     Folder getOpenFolder() {
-        CellLayout currentPage = (CellLayout) getChildAt(mCurrentPage);
+        ViewGroup currentPage = ((CellLayout) getChildAt(mCurrentPage)).getChildrenLayout();
         int count = currentPage.getChildCount();
         for (int i = 0; i < count; i++) {
             View child = currentPage.getChildAt(i);
@@ -378,7 +395,7 @@
         ArrayList<Folder> folders = new ArrayList<Folder>(screenCount);
 
         for (int screen = 0; screen < screenCount; screen++) {
-            CellLayout currentPage = (CellLayout) getChildAt(screen);
+            ViewGroup currentPage = ((CellLayout) getChildAt(screen)).getChildrenLayout();
             int count = currentPage.getChildCount();
             for (int i = 0; i < count; i++) {
                 View child = currentPage.getChildAt(i);
@@ -549,7 +566,6 @@
             enableChildrenCache(mCurrentPage - 1, mCurrentPage + 1);
         }
         showOutlines();
-        mPageMoving = true;
     }
 
     protected void onPageEndMoving() {
@@ -560,7 +576,6 @@
         }
         mOverScrollMaxBackgroundAlpha = 0.0f;
         mOverScrollPageIndex = -1;
-        mPageMoving = false;
     }
 
     @Override
@@ -651,19 +666,27 @@
         int wallpaperTravelWidth = (int) (display.getWidth() *
                 wallpaperTravelToScreenWidthRatio(display.getWidth(), display.getHeight()));
 
-        // Account for overscroll: you only see the absolute edge of the wallpaper if
-        // you overscroll as far as you can in landscape mode
-        int overscrollOffset = (int) (maxOverScroll() * display.getWidth());
-        float overscrollRatio = overscrollOffset / (float) getScrollRange();
-        int scrollRangeWithOverscroll = getScrollRange() + 2 * overscrollOffset;
-
         // Set wallpaper offset steps (1 / (number of screens - 1))
         // We have 3 vertical offset states (centered, and then top/bottom aligned
         // for all apps/customize)
         mWallpaperManager.setWallpaperOffsetSteps(1.0f / (getChildCount() - 1), 1.0f / (3 - 1));
 
+        int scrollRange = getScrollRange();
+        float scrollProgressOffset = 0;
+
+        // Account for overscroll: you only see the absolute edge of the wallpaper if
+        // you overscroll as far as you can in landscape mode. Only do this for static wallpapers
+        // because live wallpapers (and probably 3rd party wallpaper providers) rely on the offset
+        // being even intervals from 0 to 1 (eg [0, 0.25, 0.5, 0.75, 1])
+        final boolean isStaticWallpaper = (mWallpaperManager.getWallpaperInfo() == null);
+        if (isStaticWallpaper) {
+            int overscrollOffset = (int) (maxOverScroll() * display.getWidth());
+            scrollProgressOffset += overscrollOffset / (float) getScrollRange();
+            scrollRange += 2 * overscrollOffset;
+        }
+
         float scrollProgress =
-            mScrollX / (float) scrollRangeWithOverscroll + overscrollRatio;
+            mScrollX / (float) scrollRange + scrollProgressOffset;
         float offsetInDips = wallpaperTravelWidth * scrollProgress +
             (mWallpaperWidth - wallpaperTravelWidth) / 2;
         float offset = offsetInDips / (float) mWallpaperWidth;
@@ -708,13 +731,30 @@
         float mHorizontalWallpaperOffset = 0.0f;
         float mVerticalWallpaperOffset = 0.5f;
         long mLastWallpaperOffsetUpdateTime;
+        boolean mIsMovingFast;
+        boolean mOverrideHorizontalCatchupConstant;
+        float mHorizontalCatchupConstant = 0.35f;
+        float mVerticalCatchupConstant = 0.35f;
 
         public WallpaperOffsetInterpolator() {
         }
 
+        public void setOverrideHorizontalCatchupConstant(boolean override) {
+            mOverrideHorizontalCatchupConstant = override;
+        }
+
+        public void setHorizontalCatchupConstant(float f) {
+            mHorizontalCatchupConstant = f;
+        }
+
+        public void setVerticalCatchupConstant(float f) {
+            mVerticalCatchupConstant = f;
+        }
+
         public boolean computeScrollOffset() {
             if (Float.compare(mHorizontalWallpaperOffset, mFinalHorizontalWallpaperOffset) == 0 &&
                     Float.compare(mVerticalWallpaperOffset, mFinalVerticalWallpaperOffset) == 0) {
+                mIsMovingFast = false;
                 return false;
             }
             Display display = mLauncher.getWindowManager().getDefaultDisplay();
@@ -724,27 +764,44 @@
             long timeSinceLastUpdate = currentTime - mLastWallpaperOffsetUpdateTime;
             timeSinceLastUpdate = Math.min((long) (1000/30f), timeSinceLastUpdate);
             timeSinceLastUpdate = Math.max(1L, timeSinceLastUpdate);
-            // ie 75% in 100ms
-            float fractionToCatchUpIn1MsHorizontal = isLandscape ? 0.75f / 100 : 0.75f / 100;
-            float fractionToCatchUpIn1MsVertical = isLandscape ? 1.1f / 100 : 1.1f / 100;
+
+            float xdiff = Math.abs(mFinalHorizontalWallpaperOffset - mHorizontalWallpaperOffset);
+            if (!mIsMovingFast && xdiff > 0.07) {
+                mIsMovingFast = true;
+            }
+
+            float fractionToCatchUpIn1MsHorizontal;
+            if (mOverrideHorizontalCatchupConstant) {
+                fractionToCatchUpIn1MsHorizontal = mHorizontalCatchupConstant;
+            } else if (mIsMovingFast) {
+                fractionToCatchUpIn1MsHorizontal = isLandscape ? 0.5f : 0.75f;
+            } else {
+                // slow
+                fractionToCatchUpIn1MsHorizontal = isLandscape ? 0.27f : 0.5f;
+            }
+            float fractionToCatchUpIn1MsVertical = mVerticalCatchupConstant;
+
+
+            fractionToCatchUpIn1MsHorizontal /= 33f;
+            fractionToCatchUpIn1MsVertical /= 33f;
 
             final float UPDATE_THRESHOLD = 0.00001f;
             float hOffsetDelta = mFinalHorizontalWallpaperOffset - mHorizontalWallpaperOffset;
             float vOffsetDelta = mFinalVerticalWallpaperOffset - mVerticalWallpaperOffset;
-            boolean jumpToFinalValue =
-                Math.abs(hOffsetDelta / mFinalHorizontalWallpaperOffset) < UPDATE_THRESHOLD &&
-                Math.abs(vOffsetDelta / mFinalVerticalWallpaperOffset) < UPDATE_THRESHOLD;
+            boolean jumpToFinalValue = Math.abs(hOffsetDelta) < UPDATE_THRESHOLD &&
+                Math.abs(vOffsetDelta) < UPDATE_THRESHOLD;
             if (jumpToFinalValue) {
                 mHorizontalWallpaperOffset = mFinalHorizontalWallpaperOffset;
                 mVerticalWallpaperOffset = mFinalVerticalWallpaperOffset;
             } else {
                 float percentToCatchUpVertical =
-                    timeSinceLastUpdate * fractionToCatchUpIn1MsVertical;
+                    Math.min(1.0f, timeSinceLastUpdate * fractionToCatchUpIn1MsVertical);
                 float percentToCatchUpHorizontal =
-                    timeSinceLastUpdate * fractionToCatchUpIn1MsHorizontal;
+                    Math.min(1.0f, timeSinceLastUpdate * fractionToCatchUpIn1MsHorizontal);
                 mHorizontalWallpaperOffset += percentToCatchUpHorizontal * hOffsetDelta;
                 mVerticalWallpaperOffset += percentToCatchUpVertical * vOffsetDelta;
             }
+
             mLastWallpaperOffsetUpdateTime = System.currentTimeMillis();
             return true;
         }
@@ -1340,20 +1397,33 @@
         int wallpaperTravelHeight = (int) (display.getHeight() *
                 wallpaperTravelToScreenHeightRatio(display.getWidth(), display.getHeight()));
         float offsetFromCenter = (wallpaperTravelHeight / (float) mWallpaperHeight) / 2f;
+        boolean isLandscape = display.getWidth() > display.getHeight();
+
         switch (shrinkState) {
+            // animating in
             case TOP:
+                // customize
                 wallpaperOffset = 0.5f + offsetFromCenter;
+                mWallpaperOffset.setVerticalCatchupConstant(isLandscape ? 0.46f : 0.44f);
                 break;
             case MIDDLE:
             case SPRING_LOADED:
                 wallpaperOffset = 0.5f;
+                mWallpaperOffset.setVerticalCatchupConstant(isLandscape ? 0.34f : 0.32f);
                 break;
             case BOTTOM_HIDDEN:
             case BOTTOM_VISIBLE:
+                // allapps
                 wallpaperOffset = 0.5f - offsetFromCenter;
+                mWallpaperOffset.setVerticalCatchupConstant(isLandscape ? 0.34f : 0.32f);
                 break;
         }
 
+        if (animated) {
+            mWallpaperOffset.setHorizontalCatchupConstant(0.46f);
+            mWallpaperOffset.setOverrideHorizontalCatchupConstant(true);
+        }
+
         setLayoutScale(1.0f);
         if (animated) {
             mSyncWallpaperOffsetWithScroll = false;
@@ -1491,8 +1561,10 @@
         // We need to add extra padding to the bitmap to make room for the glow effect
         final int bitmapPadding = HolographicOutlineHelper.MAX_OUTER_BLUR_RADIUS;
 
+        CellLayout cl = (CellLayout) getChildAt(0);
+        int[] desiredSize = cl.cellSpansToSize(spanX, spanY);
         // The outline is used to visualize where the item will land if dropped
-        mDragOutline = createDragOutline(b, canvas, bitmapPadding);
+        mDragOutline = createDragOutline(b, canvas, bitmapPadding, desiredSize[0], desiredSize[1]);
 
         updateWhichPagesAcceptDropsDuringDrag(mShrinkState, spanX, spanY);
     }
@@ -1500,6 +1572,7 @@
     // we call this method whenever a drag and drop in Launcher finishes, even if Workspace was
     // never dragged over
     public void onDragStopped(boolean success) {
+        mLastDragView = null;
         // In the success case, DragController has already called onDragExit()
         if (!success) {
             doDragExit();
@@ -1519,7 +1592,7 @@
             if (springLoaded) {
                 setLayoutScale(SPRING_LOADED_DRAG_SHRINK_FACTOR);
             }
-            moveToNewPageWithoutMovingCellLayouts(newCurrentPage);
+            scrollToNewPageWithoutMovingPages(newCurrentPage);
             unshrink(true, springLoaded);
         }
     }
@@ -1561,6 +1634,7 @@
             final int screenCount = getChildCount();
 
             final int duration = getResources().getInteger(R.integer.config_workspaceUnshrinkTime);
+
             for (int i = 0; i < screenCount; i++) {
                 final CellLayout cl = (CellLayout)getChildAt(i);
                 float finalAlphaValue = (i == mCurrentPage) ? 1.0f : 0.0f;
@@ -1608,26 +1682,54 @@
                     mUnshrinkAnimationListener.onAnimationEnd(null);
                 }
             }
+            Display display = mLauncher.getWindowManager().getDefaultDisplay();
+            boolean isLandscape = display.getWidth() > display.getHeight();
+            switch (mShrinkState) {
+                // animating out
+                case TOP:
+                    // customize
+                    if (animated) {
+                        mWallpaperOffset.setHorizontalCatchupConstant(isLandscape ? 0.65f : 0.62f);
+                        mWallpaperOffset.setVerticalCatchupConstant(isLandscape ? 0.65f : 0.62f);
+                        mWallpaperOffset.setOverrideHorizontalCatchupConstant(true);
+                    }
+                    break;
+                case MIDDLE:
+                case SPRING_LOADED:
+                    if (animated) {
+                        mWallpaperOffset.setHorizontalCatchupConstant(isLandscape ? 0.49f : 0.46f);
+                        mWallpaperOffset.setVerticalCatchupConstant(isLandscape ? 0.49f : 0.46f);
+                        mWallpaperOffset.setOverrideHorizontalCatchupConstant(true);
+                    }
+                    break;
+                case BOTTOM_HIDDEN:
+                case BOTTOM_VISIBLE:
+                    // all apps
+                    if (animated) {
+                        mWallpaperOffset.setHorizontalCatchupConstant(isLandscape ? 0.49f : 0.46f);
+                        mWallpaperOffset.setVerticalCatchupConstant(isLandscape ? 0.49f : 0.46f);
+                        mWallpaperOffset.setOverrideHorizontalCatchupConstant(true);
+                    }
+                    break;
+            }
             if (animated) {
                 ObjectAnimator wallpaperAnim = ObjectAnimator.ofPropertyValuesHolder(this,
                         PropertyValuesHolder.ofFloat(
                                 "verticalWallpaperOffset", 0.5f),
                         PropertyValuesHolder.ofFloat(
                                 "horizontalWallpaperOffset", wallpaperOffsetForCurrentScroll()));
-                mAnimator.play(wallpaperAnim);
                 wallpaperAnim.setDuration(duration);
                 wallpaperAnim.setInterpolator(mZoomInInterpolator);
-            } else {
-                setHorizontalWallpaperOffset(wallpaperOffsetForCurrentScroll());
-                setVerticalWallpaperOffset(0.5f);
-                updateWallpaperOffsetImmediately();
-            }
+                mAnimator.play(wallpaperAnim);
 
-            if (animated) {
                 // If we call this when we're not animated, onAnimationEnd is never called on
                 // the listener; make sure we only use the listener when we're actually animating
                 mAnimator.addListener(mUnshrinkAnimationListener);
                 mAnimator.start();
+            } else {
+                setHorizontalWallpaperOffset(wallpaperOffsetForCurrentScroll());
+                setVerticalWallpaperOffset(0.5f);
+                updateWallpaperOffsetImmediately();
             }
         }
 
@@ -1688,13 +1790,24 @@
      * Returns a new bitmap to be used as the object outline, e.g. to visualize the drop location.
      * Responsibility for the bitmap is transferred to the caller.
      */
-    private Bitmap createDragOutline(Bitmap orig, Canvas canvas, int padding) {
+    private Bitmap createDragOutline(Bitmap orig, Canvas canvas, int padding, int w, int h) {
         final int outlineColor = getResources().getColor(R.color.drag_outline_color);
-        final Bitmap b = Bitmap.createBitmap(
-                orig.getWidth() + padding, orig.getHeight() + padding, Bitmap.Config.ARGB_8888);
-
+        final Bitmap b = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
         canvas.setBitmap(b);
-        canvas.drawBitmap(orig, 0, 0, new Paint());
+
+        Rect src = new Rect(0, 0, orig.getWidth(), orig.getHeight());
+        float scaleFactor = Math.min((w - padding) / (float) orig.getWidth(),
+                (h - padding) / (float) orig.getHeight());
+        int scaledWidth = (int) (scaleFactor * orig.getWidth());
+        int scaledHeight = (int) (scaleFactor * orig.getHeight());
+        Rect dst = new Rect(0, 0, scaledWidth, scaledHeight);
+
+        // center the image
+        dst.offset((w - scaledWidth) / 2, (h - scaledHeight) / 2);
+
+        Paint p = new Paint();
+        p.setFilterBitmap(true);
+        canvas.drawBitmap(orig, src, dst, p);
         mOutlineHelper.applyMediumExpensiveOutlineWithBlur(b, canvas, outlineColor, outlineColor);
 
         return b;
@@ -1811,7 +1924,7 @@
      * calls, as it is called from onLayout().
      */
     public void animateViewIntoPosition(final View view) {
-        final CellLayout parent = (CellLayout) view.getParent();
+        final CellLayout parent = (CellLayout) view.getParent().getParent();
         final CellLayout.LayoutParams lp = (CellLayout.LayoutParams) view.getLayoutParams();
 
         // Convert the animation params to be relative to the Workspace, not the CellLayout
@@ -1918,7 +2031,7 @@
         // subsequent taps add items to that screen
         int dragTargetIndex = indexOfChild(mDragTargetLayout);
         if (mCurrentPage != dragTargetIndex && (mIsSmall || mIsInUnshrinkAnimation)) {
-            moveToNewPageWithoutMovingCellLayouts(dragTargetIndex);
+            scrollToNewPageWithoutMovingPages(dragTargetIndex);
         }
 
         if (source != this) {
@@ -1979,7 +2092,7 @@
                 }
             }
 
-            final CellLayout parent = (CellLayout) cell.getParent();
+            final CellLayout parent = (CellLayout) cell.getParent().getParent();
 
             // Prepare it to be animated into its new position
             // This must be called after the view has been re-parented
@@ -2232,11 +2345,11 @@
             int dragViewX, int dragViewY, Matrix cachedInverseMatrix) {
         // Transform the coordinates of the item being dragged to the CellLayout's coordinates
         final float[] draggedItemTopLeft = mTempDragCoordinates;
-        draggedItemTopLeft[0] = dragViewX + dragView.getScaledDragRegionXOffset();
-        draggedItemTopLeft[1] = dragViewY + dragView.getScaledDragRegionYOffset();
+        draggedItemTopLeft[0] = dragViewX;
+        draggedItemTopLeft[1] = dragViewY;
         final float[] draggedItemBottomRight = mTempDragBottomRightCoordinates;
-        draggedItemBottomRight[0] = draggedItemTopLeft[0] + dragView.getScaledDragRegionWidth();
-        draggedItemBottomRight[1] = draggedItemTopLeft[1] + dragView.getScaledDragRegionHeight();
+        draggedItemBottomRight[0] = draggedItemTopLeft[0] + dragView.getDragRegionWidth();
+        draggedItemBottomRight[1] = draggedItemTopLeft[1] + dragView.getDragRegionHeight();
 
         // Transform the dragged item's top left coordinates
         // to the CellLayout's local coordinates
@@ -2328,8 +2441,12 @@
             int originY = y - yOffset;
             boolean shrunken = mIsSmall || mIsInUnshrinkAnimation;
             if (shrunken) {
-                layout = findMatchingPageForDragOver(
-                        dragView, originX, originY, xOffset, yOffset);
+                mLastDragView = dragView;
+                mLastDragOriginX = originX;
+                mLastDragOriginY = originY;
+                mLastDragXOffset = xOffset;
+                mLastDragYOffset = yOffset;
+                layout = findMatchingPageForDragOver(dragView, originX, originY, xOffset, yOffset);
 
                 if (layout != mDragTargetLayout) {
                     if (mDragTargetLayout != null) {
@@ -2339,7 +2456,8 @@
                     mDragTargetLayout = layout;
                     if (mDragTargetLayout != null && mDragTargetLayout.getAcceptsDrops()) {
                         mDragTargetLayout.setIsDragOverlapping(true);
-                        mSpringLoadedDragController.onDragEnter(mDragTargetLayout);
+                        mSpringLoadedDragController.onDragEnter(
+                                mDragTargetLayout, mShrinkState == ShrinkState.SPRING_LOADED);
                     }
                 }
             } else {
@@ -2662,7 +2780,7 @@
     public Folder getFolderForTag(Object tag) {
         final int screenCount = getChildCount();
         for (int screen = 0; screen < screenCount; screen++) {
-            CellLayout currentScreen = ((CellLayout) getChildAt(screen));
+            ViewGroup currentScreen = ((CellLayout) getChildAt(screen)).getChildrenLayout();
             int count = currentScreen.getChildCount();
             for (int i = 0; i < count; i++) {
                 View child = currentScreen.getChildAt(i);
@@ -2681,7 +2799,7 @@
     public View getViewForTag(Object tag) {
         int screenCount = getChildCount();
         for (int screen = 0; screen < screenCount; screen++) {
-            CellLayout currentScreen = ((CellLayout) getChildAt(screen));
+            ViewGroup currentScreen = ((CellLayout) getChildAt(screen)).getChildrenLayout();
             int count = currentScreen.getChildCount();
             for (int i = 0; i < count; i++) {
                 View child = currentScreen.getChildAt(i);
@@ -2706,7 +2824,7 @@
         }
 
         for (int i = 0; i < screenCount; i++) {
-            final CellLayout layout = (CellLayout) getChildAt(i);
+            final ViewGroup layout = ((CellLayout) getChildAt(i)).getChildrenLayout();
 
             // Avoid ANRs by treating each screen separately
             post(new Runnable() {
@@ -2811,7 +2929,7 @@
     void updateShortcuts(ArrayList<ApplicationInfo> apps) {
         final int screenCount = getChildCount();
         for (int i = 0; i < screenCount; i++) {
-            final CellLayout layout = (CellLayout) getChildAt(i);
+            final ViewGroup layout = ((CellLayout) getChildAt(i)).getChildrenLayout();
             int childCount = layout.getChildCount();
             for (int j = 0; j < childCount; j++) {
                 final View view = layout.getChildAt(j);