Merge "Implementing new visualization for folder icon"
diff --git a/Android.mk b/Android.mk
index 89e626b..844f052 100644
--- a/Android.mk
+++ b/Android.mk
@@ -21,9 +21,10 @@
 
 LOCAL_MODULE_TAGS := optional
 
-LOCAL_STATIC_JAVA_LIBRARIES := android-common
+LOCAL_STATIC_JAVA_LIBRARIES := android-common android-support-v13
 
-LOCAL_SRC_FILES := $(call all-subdir-java-files) $(call all-renderscript-files-under, src)
+LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-renderscript-files-under, src)
+
 
 LOCAL_PACKAGE_NAME := Launcher2
 LOCAL_CERTIFICATE := shared
@@ -34,4 +35,6 @@
 
 include $(BUILD_PACKAGE)
 
+include $(call all-subdir-makefiles)
+
 endif
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 5d0f323..5206896 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -67,7 +67,7 @@
         android:process="@string/process"
         android:label="@string/application_name"
         android:icon="@drawable/ic_launcher_home"
-        android:hardwareAccelerated="@bool/config_hardwareAccelerated"
+        android:hardwareAccelerated="true"
         android:largeHeap="true">
 
         <activity
@@ -100,6 +100,18 @@
                 android:resource="@xml/wallpaper_picker_preview" />
         </activity>
 
+        <activity android:name="com.android.launcher2.RocketLauncher"
+            android:label="@string/dream_name"
+            android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
+            android:hardwareAccelerated="true"
+            >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.DREAM" />
+            </intent-filter>
+        </activity>
+
         <!-- Intent received used to install shortcuts from other applications -->
         <receiver
             android:name="com.android.launcher2.InstallShortcutReceiver"
diff --git a/res/drawable-hdpi/app_market_generic.png b/res/drawable-hdpi/app_market_generic.png
index 2a2381f..117453c 100644
--- a/res/drawable-hdpi/app_market_generic.png
+++ b/res/drawable-hdpi/app_market_generic.png
Binary files differ
diff --git a/res/drawable-hdpi/divider_launcher_holo.9.png b/res/drawable-hdpi/divider_launcher_holo.9.png
new file mode 100644
index 0000000..0a1bd2a
--- /dev/null
+++ b/res/drawable-hdpi/divider_launcher_holo.9.png
Binary files differ
diff --git a/res/drawable-large-hdpi/ic_generic_search.png b/res/drawable-hdpi/ic_generic_search.png
similarity index 100%
rename from res/drawable-large-hdpi/ic_generic_search.png
rename to res/drawable-hdpi/ic_generic_search.png
Binary files differ
diff --git a/res/drawable-large-hdpi/ic_voice_search.png b/res/drawable-hdpi/ic_voice_search.png
similarity index 100%
rename from res/drawable-large-hdpi/ic_voice_search.png
rename to res/drawable-hdpi/ic_voice_search.png
Binary files differ
diff --git a/res/drawable-land-hdpi/divider_launcher_holo.9.png b/res/drawable-land-hdpi/divider_launcher_holo.9.png
new file mode 100644
index 0000000..f07f6c4
--- /dev/null
+++ b/res/drawable-land-hdpi/divider_launcher_holo.9.png
Binary files differ
diff --git a/res/drawable-land-mdpi/divider_launcher_holo.9.png b/res/drawable-land-mdpi/divider_launcher_holo.9.png
new file mode 100644
index 0000000..ae77340
--- /dev/null
+++ b/res/drawable-land-mdpi/divider_launcher_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/divider_launcher_holo.9.png b/res/drawable-mdpi/divider_launcher_holo.9.png
new file mode 100644
index 0000000..6d101f4
--- /dev/null
+++ b/res/drawable-mdpi/divider_launcher_holo.9.png
Binary files differ
diff --git a/res/drawable-large-mdpi/ic_generic_search.png b/res/drawable-mdpi/ic_generic_search.png
similarity index 100%
rename from res/drawable-large-mdpi/ic_generic_search.png
rename to res/drawable-mdpi/ic_generic_search.png
Binary files differ
diff --git a/res/drawable-large-mdpi/ic_voice_search.png b/res/drawable-mdpi/ic_voice_search.png
similarity index 100%
rename from res/drawable-large-mdpi/ic_voice_search.png
rename to res/drawable-mdpi/ic_voice_search.png
Binary files differ
diff --git a/res/drawable/flying_icon_bg.xml b/res/drawable/flying_icon_bg.xml
new file mode 100644
index 0000000..affd975
--- /dev/null
+++ b/res/drawable/flying_icon_bg.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true" android:drawable="@drawable/homescreen_small_green" />
+    <item android:drawable="@android:color/transparent" />
+</selector>
diff --git a/res/layout-land/launcher.xml b/res/layout-land/launcher.xml
index b2b2c9f..c8a82e6 100644
--- a/res/layout-land/launcher.xml
+++ b/res/layout-land/launcher.xml
@@ -41,6 +41,12 @@
 
     </com.android.launcher2.Workspace>
 
+    <include layout="@layout/qsb_bar"
+        android:id="@+id/qsb_bar"
+        android:layout_width="@dimen/qsb_bar_height"
+        android:layout_height="match_parent"
+        android:layout_gravity="left" />
+
     <include layout="@layout/apps_customize_pane"
         android:id="@+id/apps_customize_pane"
         android:layout_width="match_parent"
diff --git a/res/layout-land/workspace_screen.xml b/res/layout-land/workspace_screen.xml
index f2bac59..a9faf89 100644
--- a/res/layout-land/workspace_screen.xml
+++ b/res/layout-land/workspace_screen.xml
@@ -24,7 +24,7 @@
 
     launcher:cellWidth="@dimen/workspace_cell_width"
     launcher:cellHeight="@dimen/workspace_cell_height"
-    launcher:xAxisStartPadding="48dip"
+    launcher:xAxisStartPadding="@dimen/qsb_bar_height"
     launcher:xAxisEndPadding="0dip"
     launcher:yAxisStartPadding="0dip"
     launcher:yAxisEndPadding="0dip"/>
diff --git a/res/layout-large/customization_drawer.xml b/res/layout-large/customization_drawer.xml
index d8db066..0c59a3f 100644
--- a/res/layout-large/customization_drawer.xml
+++ b/res/layout-large/customization_drawer.xml
@@ -40,15 +40,12 @@
                 launcher:wallpaperCellSpanX="@integer/customization_drawer_contents_wallpaperCellSpanX"
                 launcher:wallpaperCellCountX="@integer/customization_drawer_contents_wallpaperCellCountX"
                 launcher:widgetCellCountX="@integer/customization_drawer_contents_widgetCellCountX"
-                launcher:cellCountX="@integer/customization_drawer_contents_cellCountX"
-                launcher:cellCountY="@integer/customization_drawer_contents_cellCountY"
                 launcher:pageLayoutWidthGap="@dimen/customization_drawer_contents_pageLayoutWidthGap"
-                launcher:pageLayoutHeightGap="12dp"
-                launcher:pageLayoutPaddingTop="40dp"
-                launcher:pageLayoutPaddingBottom="25dp"
-                launcher:pageLayoutPaddingLeft="20dp"
-                launcher:pageLayoutPaddingRight="20dp"
-                launcher:pageLayoutMaxHeight="@dimen/customization_drawer_content_height" />
+                launcher:pageLayoutHeightGap="@dimen/customization_drawer_contents_pageLayoutHeightGap"
+                launcher:pageLayoutPaddingTop="@dimen/customization_drawer_contents_pageLayoutPaddingTop"
+                launcher:pageLayoutPaddingBottom="@dimen/customization_drawer_contents_pageLayoutPaddingBottom"
+                launcher:pageLayoutPaddingLeft="@dimen/customization_drawer_contents_pageLayoutPaddingLeft"
+                launcher:pageLayoutPaddingRight="@dimen/customization_drawer_contents_pageLayoutPaddingRight" />
          </FrameLayout>
       </LinearLayout>
 </com.android.launcher2.CustomizeTrayTabHost>
\ No newline at end of file
diff --git a/res/layout-large/customize_tab_widget_indicator.xml b/res/layout-large/customize_tab_widget_indicator.xml
new file mode 100644
index 0000000..186a342
--- /dev/null
+++ b/res/layout-large/customize_tab_widget_indicator.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<com.android.launcher2.AccessibleTabView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@style/CustomizeTabIndicator.Wide" />
diff --git a/res/layout-large/launcher.xml b/res/layout-large/launcher.xml
index 6a16eb5..2d14137 100644
--- a/res/layout-large/launcher.xml
+++ b/res/layout-large/launcher.xml
@@ -44,7 +44,7 @@
     <include layout="@layout/customization_drawer"
         android:id="@+id/customization_drawer"
         android:layout_width="match_parent"
-        android:layout_height="@dimen/customization_drawer_height"
+        android:layout_height="wrap_content"
         android:layout_gravity="bottom"
         android:visibility="invisible" />
 </com.android.launcher2.DragLayer>
diff --git a/res/layout-port/launcher.xml b/res/layout-port/launcher.xml
index c7bcbb0..f05f9b6 100644
--- a/res/layout-port/launcher.xml
+++ b/res/layout-port/launcher.xml
@@ -36,9 +36,14 @@
         <include android:id="@+id/cell3" layout="@layout/workspace_screen" />
         <include android:id="@+id/cell4" layout="@layout/workspace_screen" />
         <include android:id="@+id/cell5" layout="@layout/workspace_screen" />
-                
     </com.android.launcher2.Workspace>
 
+    <include layout="@layout/qsb_bar"
+        android:id="@+id/qsb_bar"
+        android:layout_width="fill_parent"
+        android:layout_height="@dimen/qsb_bar_height"
+        android:layout_gravity="top" />
+
     <include layout="@layout/apps_customize_pane"
         android:id="@+id/apps_customize_pane"
         android:layout_width="match_parent"
diff --git a/res/layout-port/workspace_screen.xml b/res/layout-port/workspace_screen.xml
index f400c40..7a6714f 100644
--- a/res/layout-port/workspace_screen.xml
+++ b/res/layout-port/workspace_screen.xml
@@ -24,7 +24,7 @@
 
     launcher:cellWidth="@dimen/workspace_cell_width"
     launcher:cellHeight="@dimen/workspace_cell_height"
-    launcher:yAxisStartPadding="8dip"
+    launcher:yAxisStartPadding="@dimen/qsb_bar_height"
     launcher:yAxisEndPadding="@dimen/button_bar_height"
     launcher:xAxisStartPadding="0dip"
     launcher:xAxisEndPadding="0dip" />
diff --git a/res/layout/add_list_item.xml b/res/layout/add_list_item.xml
index 62fc4f4..e937d7b 100644
--- a/res/layout/add_list_item.xml
+++ b/res/layout/add_list_item.xml
@@ -18,7 +18,7 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
-    android:textAppearance="?android:attr/textAppearanceLargeInverse"
+    android:textAppearance="?android:attr/textAppearanceLarge"
     android:gravity="center_vertical"
     android:drawablePadding="14dip"
     android:paddingLeft="15dip"
diff --git a/res/layout/apps_customize_pane.xml b/res/layout/apps_customize_pane.xml
index 05884ef..e22ba12 100644
--- a/res/layout/apps_customize_pane.xml
+++ b/res/layout/apps_customize_pane.xml
@@ -20,7 +20,7 @@
         android:orientation="vertical"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:background="@drawable/apps_customize_bg_gradient">
+        android:background="#FF000000">
         <!-- The layout_width of the tab bar gets overriden to align the content
              with the text in the tabs in AppsCustomizeTabHost. -->
         <FrameLayout
diff --git a/res/layout/qsb_bar.xml b/res/layout/qsb_bar.xml
new file mode 100644
index 0000000..5469224
--- /dev/null
+++ b/res/layout/qsb_bar.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher"
+    android:focusable="false">
+
+    <!-- Search buttons container -->
+    <LinearLayout
+        android:id="@+id/qsb_search_bar"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        style="@style/SearchBar">
+       <!-- Global search icon -->
+       <ImageView
+            style="@style/SearchButton"
+            android:id="@+id/search_button"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@drawable/ic_generic_search"
+            android:background="@drawable/button_bg"
+            android:onClick="onClickSearchButton"
+            android:focusable="true"
+            android:clickable="true"
+            android:contentDescription="@string/accessibility_search_button" />
+
+        <ImageView
+            style="@style/SearchButtonDivider"
+            android:id="@+id/search_divider"
+            android:src="@drawable/divider_launcher_holo"
+            android:onClick="onClickSearchButton"
+            android:focusable="false"
+            android:clickable="true" />
+
+        <!-- Voice search icon -->
+        <ImageView
+            style="@style/SearchButton"
+            android:id="@+id/voice_button"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@drawable/ic_voice_search"
+            android:background="@drawable/button_bg"
+            android:onClick="onClickVoiceButton"
+            android:focusable="true"
+            android:clickable="true"
+            android:contentDescription="@string/accessibility_voice_search_button" />
+    </LinearLayout>
+
+    <!-- Drag specific targets container -->
+    <LinearLayout
+        android:id="@+id/drag_target_bar"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="#FF00FF00"
+        android:visibility="gone">
+    </LinearLayout>
+</FrameLayout>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
new file mode 100644
index 0000000..7adc72d
--- /dev/null
+++ b/res/values-af/strings.xml
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+* Copyright (C) 2008 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
+    <!-- no translation found for application_name (8424725141379931883) -->
+    <skip />
+    <string name="uid_name" msgid="3371120195364560632">"Android Kernprogramme"</string>
+    <!-- no translation found for folder_name (4588446541914685904) -->
+    <skip />
+    <!-- no translation found for chooser_wallpaper (5988031014201479733) -->
+    <skip />
+    <!-- no translation found for wallpaper_instructions (4215640646180727542) -->
+    <skip />
+    <!-- no translation found for pick_wallpaper (5630222540525626723) -->
+    <skip />
+    <!-- no translation found for activity_not_found (5591731020063337696) -->
+    <skip />
+    <string name="configure_wallpaper" msgid="2820186271419674623">"Stel op..."</string>
+    <!-- no translation found for widgets_tab_label (9145860100000983599) -->
+    <skip />
+    <!-- no translation found for folders_tab_label (1145293785541489736) -->
+    <skip />
+    <!-- no translation found for shortcuts_tab_label (8640731503933155644) -->
+    <skip />
+    <!-- no translation found for wallpapers_tab_label (1617804870364119879) -->
+    <skip />
+    <!-- no translation found for applications_tab_label (2991364240020736760) -->
+    <skip />
+    <!-- no translation found for wallpapers_temp_tab_text (1660218201190495279) -->
+    <skip />
+    <!-- no translation found for all_apps_tab_all (2942727589595027258) -->
+    <skip />
+    <!-- no translation found for all_apps_tab_apps (5468972551904071712) -->
+    <skip />
+    <!-- no translation found for all_apps_tab_games (1855736784923494918) -->
+    <skip />
+    <!-- no translation found for all_apps_tab_downloaded (1488049110598641387) -->
+    <skip />
+    <!-- no translation found for all_apps_no_games (5293893733372793696) -->
+    <skip />
+    <!-- no translation found for all_apps_no_downloads (2284720393234453761) -->
+    <skip />
+    <!-- no translation found for market (2652226429823445833) -->
+    <skip />
+    <!-- no translation found for external_drop_widget_error (4976816434597126575) -->
+    <skip />
+    <!-- no translation found for external_drop_widget_pick_title (4481311720134376218) -->
+    <skip />
+    <string name="rename_folder_label" msgid="5646236631298452787">"Vouernaam"</string>
+    <!-- no translation found for rename_folder_title (4544573104191526550) -->
+    <skip />
+    <!-- no translation found for rename_action (6016003384693240896) -->
+    <skip />
+    <!-- no translation found for cancel_action (3811860427489435048) -->
+    <skip />
+    <string name="menu_item_add_item" msgid="6233177331075781114">"Voeg by Tuis-skerm"</string>
+    <string name="group_applications" msgid="4118484163419674240">"Programme"</string>
+    <string name="group_shortcuts" msgid="9133529424900391877">"Kortpaaie"</string>
+    <string name="group_folder" msgid="5143593791798929193">"Nuwe vouer"</string>
+    <string name="group_live_folders" msgid="2664945399140647217">"Vouers"</string>
+    <string name="group_widgets" msgid="6704978494073105844">"Legstukke"</string>
+    <string name="group_wallpapers" msgid="1568191644272224858">"Muurpapier"</string>
+    <!-- no translation found for add_folder (3521088587367839879) -->
+    <skip />
+    <!-- no translation found for add_clock (2337943840175865746) -->
+    <skip />
+    <!-- no translation found for add_photo_frame (3154058437359487954) -->
+    <skip />
+    <!-- no translation found for out_of_space (8365249326091984698) -->
+    <skip />
+    <string name="shortcut_installed" msgid="7071557296331322355">"Kortpad \"<xliff:g id="NAME">%s</xliff:g>\" is geskep."</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"Kortpad \"<xliff:g id="NAME">%s</xliff:g>\" is verwyder."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"Kortpad \"<xliff:g id="NAME">%s</xliff:g>\" bestaan reeds."</string>
+    <string name="title_select_shortcut" msgid="2858897527672831763">"Kies kortpad"</string>
+    <!-- no translation found for title_select_application (8031072293115454221) -->
+    <skip />
+    <string name="title_select_live_folder" msgid="3753447798805166749">"Kies vouer"</string>
+    <!-- no translation found for all_apps_button_label (2578400570124163469) -->
+    <skip />
+    <!-- no translation found for all_apps_home_button_label (1022222300329398558) -->
+    <skip />
+    <!-- no translation found for delete_zone_label_workspace (7153615831493049150) -->
+    <skip />
+    <!-- no translation found for delete_zone_label_all_apps (6664588234817475108) -->
+    <skip />
+    <!-- no translation found for accessibility_search_button (816822994629942611) -->
+    <skip />
+    <!-- no translation found for accessibility_voice_search_button (3938249215065842475) -->
+    <skip />
+    <!-- no translation found for accessibility_all_apps_button (1595097919145716305) -->
+    <skip />
+    <!-- no translation found for accessibility_customize_button (585539669413531163) -->
+    <skip />
+    <!-- no translation found for accessibility_delete_button (3628162007991023603) -->
+    <skip />
+    <!-- no translation found for delete_zone_label_all_apps_system_app (3683920959591819044) -->
+    <skip />
+    <!-- no translation found for menu_add (3065046628354640854) -->
+    <skip />
+    <!-- no translation found for menu_manage_apps (2308685199463588895) -->
+    <skip />
+    <!-- no translation found for menu_wallpaper (5837429080911269832) -->
+    <skip />
+    <!-- no translation found for menu_search (4826514464423239041) -->
+    <skip />
+    <!-- no translation found for menu_notifications (6424587053194766192) -->
+    <skip />
+    <string name="menu_gestures" msgid="514678675575912237">"Handgebare"</string>
+    <!-- no translation found for menu_settings (6233960148378443661) -->
+    <skip />
+    <!-- no translation found for cab_menu_delete_app (1242619904941293871) -->
+    <skip />
+    <!-- no translation found for cab_menu_app_info (5180426909324882018) -->
+    <skip />
+    <!-- no translation found for cab_app_selection_text (606113924828167756) -->
+    <skip />
+    <!-- no translation found for cab_widget_selection_text (962527270506951955) -->
+    <skip />
+    <!-- no translation found for cab_folder_selection_text (8916111874189565067) -->
+    <skip />
+    <!-- no translation found for cab_shortcut_selection_text (8115847384500412878) -->
+    <skip />
+    <!-- no translation found for permlab_install_shortcut (1201690825493376489) -->
+    <skip />
+    <string name="permdesc_install_shortcut" msgid="7429365847558984148">"Stel \'n program in staat om kortpaaie by te voeg sonder gebruikerhandeling."</string>
+    <!-- no translation found for permlab_uninstall_shortcut (7696645932555926449) -->
+    <skip />
+    <string name="permdesc_uninstall_shortcut" msgid="959972195916090900">"Stel \'n program in staat om kortpaaie te verwyder sonder gebruikerhandeling."</string>
+    <string name="permlab_read_settings" msgid="3452408290738106747">"lees Tuis-instellings en -kortpaaie"</string>
+    <string name="permdesc_read_settings" msgid="8377434937176025492">"Stel \'n program in staat om die instellings en kortpaaie in Tuis te lees."</string>
+    <string name="permlab_write_settings" msgid="1360567537236705628">"skryf Tuis-instellings en -kortpaaie"</string>
+    <string name="permdesc_write_settings" msgid="1098648778383349818">"Stel program in staat om die instellings en kortpaaie in Tuis te verander."</string>
+    <string name="gadget_error_text" msgid="8359351016167075858">"Kon nie legstuk laai nie"</string>
+    <!-- no translation found for uninstall_system_app_text (7488523163288397451) -->
+    <skip />
+</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
new file mode 100644
index 0000000..55daece
--- /dev/null
+++ b/res/values-am/strings.xml
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+* Copyright (C) 2008 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
+    <string name="application_name" msgid="8424725141379931883">"አስነሺ"</string>
+    <string name="uid_name" msgid="3371120195364560632">"የAndroid ኮር ትግበራዎች"</string>
+    <!-- no translation found for folder_name (4588446541914685904) -->
+    <skip />
+    <!-- no translation found for chooser_wallpaper (5988031014201479733) -->
+    <skip />
+    <!-- no translation found for wallpaper_instructions (4215640646180727542) -->
+    <skip />
+    <string name="pick_wallpaper" msgid="5630222540525626723">"ልጥፎች"</string>
+    <!-- no translation found for activity_not_found (5591731020063337696) -->
+    <skip />
+    <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>
+    <!-- no translation found for applications_tab_label (2991364240020736760) -->
+    <skip />
+    <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>
+    <!-- no translation found for all_apps_tab_downloaded (1488049110598641387) -->
+    <skip />
+    <!-- no translation found for all_apps_no_games (5293893733372793696) -->
+    <skip />
+    <!-- no translation found for all_apps_no_downloads (2284720393234453761) -->
+    <skip />
+    <!-- no translation found for market (2652226429823445833) -->
+    <skip />
+    <!-- no translation found for external_drop_widget_error (4976816434597126575) -->
+    <skip />
+    <!-- no translation found for external_drop_widget_pick_title (4481311720134376218) -->
+    <skip />
+    <string name="rename_folder_label" msgid="5646236631298452787">"አቃፊ ስም"</string>
+    <!-- no translation found for rename_folder_title (4544573104191526550) -->
+    <skip />
+    <!-- no translation found for rename_action (6016003384693240896) -->
+    <skip />
+    <!-- no translation found for cancel_action (3811860427489435048) -->
+    <skip />
+    <string name="menu_item_add_item" msgid="6233177331075781114">"ወደ መነሻ ማያ አክል"</string>
+    <string name="group_applications" msgid="4118484163419674240">"መተግበሪያዎች"</string>
+    <string name="group_shortcuts" msgid="9133529424900391877">"አቋራጮች"</string>
+    <string name="group_folder" msgid="5143593791798929193">"አዲስ አቃፊ"</string>
+    <string name="group_live_folders" msgid="2664945399140647217">"አቃፊዎች"</string>
+    <string name="group_widgets" msgid="6704978494073105844">"ፍርግሞች"</string>
+    <string name="group_wallpapers" msgid="1568191644272224858">"ልጣፍ"</string>
+    <!-- no translation found for add_folder (3521088587367839879) -->
+    <skip />
+    <!-- no translation found for add_clock (2337943840175865746) -->
+    <skip />
+    <!-- no translation found for add_photo_frame (3154058437359487954) -->
+    <skip />
+    <!-- no translation found for out_of_space (8365249326091984698) -->
+    <skip />
+    <string name="shortcut_installed" msgid="7071557296331322355">"አቋራጭ\"<xliff:g id="NAME">%s</xliff:g> \"ተፈጥሯል።"</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"አቋራጭ \"<xliff:g id="NAME">%s</xliff:g>\" ተወግዶ ነበር።"</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"አቋራጭ \"<xliff:g id="NAME">%s</xliff:g>\" አስቀድሞ አለ።"</string>
+    <string name="title_select_shortcut" msgid="2858897527672831763">"አቋራጭ ምረጥ"</string>
+    <string name="title_select_application" msgid="8031072293115454221">"ትግበራ ይምረጡ"</string>
+    <string name="title_select_live_folder" msgid="3753447798805166749">"አቃፊ ምረጥ"</string>
+    <string name="all_apps_button_label" msgid="2578400570124163469">"ትግበራ"</string>
+    <string name="all_apps_home_button_label" msgid="1022222300329398558">"መነሻ"</string>
+    <!-- no translation found for delete_zone_label_workspace (7153615831493049150) -->
+    <skip />
+    <!-- no translation found for delete_zone_label_all_apps (6664588234817475108) -->
+    <skip />
+    <!-- no translation found for accessibility_search_button (816822994629942611) -->
+    <skip />
+    <!-- no translation found for accessibility_voice_search_button (3938249215065842475) -->
+    <skip />
+    <!-- no translation found for accessibility_all_apps_button (1595097919145716305) -->
+    <skip />
+    <!-- no translation found for accessibility_customize_button (585539669413531163) -->
+    <skip />
+    <!-- no translation found for accessibility_delete_button (3628162007991023603) -->
+    <skip />
+    <!-- no translation found for delete_zone_label_all_apps_system_app (3683920959591819044) -->
+    <skip />
+    <!-- no translation found for menu_add (3065046628354640854) -->
+    <skip />
+    <!-- no translation found for menu_manage_apps (2308685199463588895) -->
+    <skip />
+    <!-- no translation found for menu_wallpaper (5837429080911269832) -->
+    <skip />
+    <!-- no translation found for menu_search (4826514464423239041) -->
+    <skip />
+    <!-- no translation found for menu_notifications (6424587053194766192) -->
+    <skip />
+    <string name="menu_gestures" msgid="514678675575912237">"የሰውነትእንቅስቃሴዎች"</string>
+    <!-- no translation found for menu_settings (6233960148378443661) -->
+    <skip />
+    <string name="cab_menu_delete_app" msgid="1242619904941293871">"ትግበራ አራግፍ"</string>
+    <string name="cab_menu_app_info" msgid="5180426909324882018">"የትግበራ ዝርዝሮች"</string>
+    <string name="cab_app_selection_text" msgid="606113924828167756">"1 ትግበራ ተመርጧል"</string>
+    <string name="cab_widget_selection_text" msgid="962527270506951955">"1 ዊድጌት ተመርጧል"</string>
+    <string name="cab_folder_selection_text" msgid="8916111874189565067">"1 አቃፊ ተመርጧል"</string>
+    <string name="cab_shortcut_selection_text" msgid="8115847384500412878">"1 አቋራጭ ተመርጧል"</string>
+    <!-- no translation found for permlab_install_shortcut (1201690825493376489) -->
+    <skip />
+    <string name="permdesc_install_shortcut" msgid="7429365847558984148">"ያለተጠቃሚ ጣልቃገብነት ትግበራአቋራጭ ለማከል ይፈቅዳል።"</string>
+    <!-- no translation found for permlab_uninstall_shortcut (7696645932555926449) -->
+    <skip />
+    <string name="permdesc_uninstall_shortcut" msgid="959972195916090900">"ያለተጠቃሚ ጣልቃገብነት ትግበራአቋራጭ ለማስወገድ ይፈቅዳል።"</string>
+    <string name="permlab_read_settings" msgid="3452408290738106747">"የመነሻቅንብሮች እና አቋራጮችን አንብብ"</string>
+    <string name="permdesc_read_settings" msgid="8377434937176025492">"ቅንብሮችን እና አቋራጮችን በመነሻለማንበብ ትግበራ ይፈቅዳል።"</string>
+    <string name="permlab_write_settings" msgid="1360567537236705628">"መነሻ ቅንብሮች እና አቋራጮች ፃፍ"</string>
+    <string name="permdesc_write_settings" msgid="1098648778383349818">"ቅንብሮችን እና አቋራጮችን በመነሻለመለወጥ ትግበራ ይፈቅዳል።"</string>
+    <string name="gadget_error_text" msgid="8359351016167075858">"ፍርግም የመጫን ችግር"</string>
+    <string name="uninstall_system_app_text" msgid="7488523163288397451">"ይህ የስርዓት ትግበራ ነው እና አለማራገፍ አይቻልም።"</string>
+</resources>
diff --git a/res/values-ar-large/strings.xml b/res/values-ar-large/strings.xml
index 2182311..eb51f77 100644
--- a/res/values-ar-large/strings.xml
+++ b/res/values-ar-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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_cancel" msgid="6502936522490675611">"إلغاء"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"تحديد خلفية"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"لا تتوفر أية خلفيات"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"إلغاء"</string>
 </resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index cb4c1f3..d07e42b 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"المشغل"</string>
     <string name="uid_name" msgid="3371120195364560632">"تطبيقات Android المركزية"</string>
     <string name="folder_name" msgid="4588446541914685904">"المجلد"</string>
diff --git a/res/values-bg-large/strings.xml b/res/values-bg-large/strings.xml
index 5ca1b46..5627dce 100644
--- a/res/values-bg-large/strings.xml
+++ b/res/values-bg-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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_cancel" msgid="6502936522490675611">"Отказ"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Избор на тапет"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Няма налични тапети"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Отказ"</string>
 </resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 0f0f07d..f471d08 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Стартов панел"</string>
     <string name="uid_name" msgid="3371120195364560632">"Основни приложения на Android"</string>
     <string name="folder_name" msgid="4588446541914685904">"Папка"</string>
diff --git a/res/values-ca-large/strings.xml b/res/values-ca-large/strings.xml
index b92811b..7252c3e 100644
--- a/res/values-ca-large/strings.xml
+++ b/res/values-ca-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Seleccionar un fons de pantalla"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"No hi ha fons de pantalla disponibles"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Cancel·la"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Selecció d\'un empaperat"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"No hi ha empaperats disponibles"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Cancel·la"</string>
 </resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 85058ba..0b79929 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Barra d\'execució ràpida"</string>
     <string name="uid_name" msgid="3371120195364560632">"Aplicacions principals d\'Android"</string>
     <string name="folder_name" msgid="4588446541914685904">"Carpeta"</string>
diff --git a/res/values-cs-large/strings.xml b/res/values-cs-large/strings.xml
index d3e5aa8..2387c68 100644
--- a/res/values-cs-large/strings.xml
+++ b/res/values-cs-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Výběr tapety"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"K dispozici nejsou žádné tapety"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Zrušit"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Výběr tapety"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"K dispozici nejsou žádné tapety"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Zrušit"</string>
 </resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index af04cb6..99ccf90 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Launcher"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android Core Apps"</string>
     <string name="folder_name" msgid="4588446541914685904">"Složka"</string>
diff --git a/res/values-da-large/strings.xml b/res/values-da-large/strings.xml
index 76ee7b0..9bc5155 100644
--- a/res/values-da-large/strings.xml
+++ b/res/values-da-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Vælg tapet"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Ingen tilgængelige tapeter"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Annuller"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Vælg tapet"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Ingen tilgængelige tapeter"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Annuller"</string>
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 10bd77f..4cbb3e7 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Launcher"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android-kerneprogrammer"</string>
     <string name="folder_name" msgid="4588446541914685904">"Mappe"</string>
diff --git a/res/values-de-large/strings.xml b/res/values-de-large/strings.xml
index 86e2684..e101422 100644
--- a/res/values-de-large/strings.xml
+++ b/res/values-de-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Keine Hintergründe verfügbar"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Abbrechen"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Hintergrund auswählen"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Keine Hintergründe verfügbar"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Abbrechen"</string>
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 87124a3..05e7ca4 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Übersicht"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android Core Apps"</string>
     <string name="folder_name" msgid="4588446541914685904">"Ordner"</string>
diff --git a/res/values-el-large/strings.xml b/res/values-el-large/strings.xml
index 66cbfde..56d85ca 100644
--- a/res/values-el-large/strings.xml
+++ b/res/values-el-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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_cancel" msgid="6502936522490675611">"Ακύρωση"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Επιλογή ταπετσαρίας"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Δεν υπάρχουν διαθέσιμες ταπετσαρίες"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Ακύρωση"</string>
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 59ef926..1e32dee 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Launcher"</string>
     <string name="uid_name" msgid="3371120195364560632">"Βασικές εφαρμογές Android"</string>
     <string name="folder_name" msgid="4588446541914685904">"Φάκελος"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index f07752c..bdb3bab 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Launcher"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android Core Apps"</string>
     <string name="folder_name" msgid="4588446541914685904">"Folder"</string>
diff --git a/res/values-es-large/strings.xml b/res/values-es-large/strings.xml
index f43f72a..e018aee 100644
--- a/res/values-es-large/strings.xml
+++ b/res/values-es-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Seleccionar fondo de pantalla"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"No hay fondos de pantalla disponibles."</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Cancelar"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Seleccionar fondo de pantalla"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"No hay fondos de pantalla disponibles."</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Cancelar"</string>
 </resources>
diff --git a/res/values-es-rUS-large/strings.xml b/res/values-es-rUS-large/strings.xml
index 349e3eb..7cc6740 100644
--- a/res/values-es-rUS-large/strings.xml
+++ b/res/values-es-rUS-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Seleccionar fondo de pantalla"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"No hay fondos de pantalla disponibles"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Cancelar"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Seleccionar fondo de pantalla"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Ningún fondo de pantalla disponible"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Cancelar"</string>
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 46781f1..837b565 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Launcher"</string>
     <string name="uid_name" msgid="3371120195364560632">"Aplicaciones del núcleo de Android"</string>
     <string name="folder_name" msgid="4588446541914685904">"Carpeta"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 3d162b9..59df7ae 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Launcher"</string>
     <string name="uid_name" msgid="3371120195364560632">"Aplicaciones básicas de Android"</string>
     <string name="folder_name" msgid="4588446541914685904">"Carpeta"</string>
diff --git a/res/values-fa-large/strings.xml b/res/values-fa-large/strings.xml
index 159cc4f..7ec422f 100644
--- a/res/values-fa-large/strings.xml
+++ b/res/values-fa-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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_cancel" msgid="6502936522490675611">"لغو"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"انتخاب تصویر زمینه"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"هیچ تصویر زمینه ای موجود نیست"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"لغو"</string>
 </resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 1170d79..2cc44bb 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"راه انداز"</string>
     <string name="uid_name" msgid="3371120195364560632">"برنامه های Android Core"</string>
     <string name="folder_name" msgid="4588446541914685904">"پوشه"</string>
diff --git a/res/values-fi-large/strings.xml b/res/values-fi-large/strings.xml
index 7559e16..f3baf00 100644
--- a/res/values-fi-large/strings.xml
+++ b/res/values-fi-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Valitse taustakuva"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Ei taustakuvia saatavilla"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Peruuta"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Valitse taustakuva"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Ei taustakuvia saatavilla"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Peruuta"</string>
 </resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 4e40e56..9e60601 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Käynnistysohjelma"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android Core -sovellukset"</string>
     <string name="folder_name" msgid="4588446541914685904">"Kansio"</string>
diff --git a/res/values-fr-large/strings.xml b/res/values-fr-large/strings.xml
index 5c0aa4b..4fd5350 100644
--- a/res/values-fr-large/strings.xml
+++ b/res/values-fr-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Aucun fond d\'écran disponible"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Annuler"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Sélectionner un fond d\'écran"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Aucun fond d\'écran disponible."</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Annuler"</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 83d71d8..987d5ff 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Lanceur d\'applications"</string>
     <string name="uid_name" msgid="3371120195364560632">"Applications de base Android"</string>
     <string name="folder_name" msgid="4588446541914685904">"Dossier"</string>
diff --git a/res/values-hr-large/strings.xml b/res/values-hr-large/strings.xml
index c791102..95c55b9 100644
--- a/res/values-hr-large/strings.xml
+++ b/res/values-hr-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Nema dostupnih pozadinskih slika"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Odustani"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Odaberite pozadinsku sliku"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Nema dostupnih pozadinskih slika"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Odustani"</string>
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 34487a5..ae6b9f7 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Pokretač"</string>
     <string name="uid_name" msgid="3371120195364560632">"Matične aplikacije za Android"</string>
     <string name="folder_name" msgid="4588446541914685904">"Mapa"</string>
diff --git a/res/values-hu-large/strings.xml b/res/values-hu-large/strings.xml
index 800581e..fe42077 100644
--- a/res/values-hu-large/strings.xml
+++ b/res/values-hu-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Háttérkép kiválasztása"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Nincs elérhető háttérkép"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Mégse"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Háttérkép kiválasztása"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Nincs elérhető háttérkép"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Mégse"</string>
 </resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index dfa267b..57c305c 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Indító"</string>
     <string name="uid_name" msgid="3371120195364560632">"Alap Android-alkalmazások"</string>
     <string name="folder_name" msgid="4588446541914685904">"Mappa"</string>
diff --git a/res/values-in-large/strings.xml b/res/values-in-large/strings.xml
index 7062353..4064a49 100644
--- a/res/values-in-large/strings.xml
+++ b/res/values-in-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Pilih wallpaper"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Tidak tersedia wallpaper"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Batal"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Pilih wallpaper"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Tidak tersedia wallpaper"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Batal"</string>
 </resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index d9a6d28..4b861ee 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Peluncur"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android Core Apps"</string>
     <string name="folder_name" msgid="4588446541914685904">"Map"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 0a1f4fd..8fed00c 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Avvio applicazioni"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android Core Apps"</string>
     <string name="folder_name" msgid="4588446541914685904">"Cartella"</string>
diff --git a/res/values-iw-large/strings.xml b/res/values-iw-large/strings.xml
index 72e6b0f..ab82b96 100644
--- a/res/values-iw-large/strings.xml
+++ b/res/values-iw-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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_cancel" msgid="6502936522490675611">"ביטול"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"בחר טפט"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"אין טפטים זמינים"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"ביטול"</string>
 </resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 535cf73..14ab4ae 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"מפעיל"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android Core Apps"</string>
     <string name="folder_name" msgid="4588446541914685904">"תיקיה"</string>
diff --git a/res/values-ja-large/strings.xml b/res/values-ja-large/strings.xml
index 3320532..24aea5e 100644
--- a/res/values-ja-large/strings.xml
+++ b/res/values-ja-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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_cancel" msgid="6502936522490675611">"キャンセル"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"壁紙の選択"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"利用できる壁紙がありません"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"キャンセル"</string>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 4b2d31d..daa2a6a 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"ランチャー"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android Core Apps"</string>
     <string name="folder_name" msgid="4588446541914685904">"フォルダ"</string>
diff --git a/res/values-ko-large/strings.xml b/res/values-ko-large/strings.xml
index 4c7e3c6..93203de 100644
--- a/res/values-ko-large/strings.xml
+++ b/res/values-ko-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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_cancel" msgid="6502936522490675611">"취소"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"배경화면 선택"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"배경화면이 없습니다."</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"취소"</string>
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 9f6ee4a..783d891 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Launcher"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android Core 애플리케이션"</string>
     <string name="folder_name" msgid="4588446541914685904">"폴더"</string>
diff --git a/res/values-land/dimens.xml b/res/values-land/dimens.xml
index b3d0b2e..13519e5 100644
--- a/res/values-land/dimens.xml
+++ b/res/values-land/dimens.xml
@@ -15,7 +15,11 @@
 -->
 
 <resources>
-    <dimen name="workspace_cell_width">96dip</dimen>
+<!-- QSB -->
+    <dimen name="toolbar_button_vertical_padding">12dip</dimen>
+    <dimen name="toolbar_button_horizontal_padding">12dip</dimen>
+
+    <dimen name="workspace_cell_width">106dip</dimen>
     <dimen name="workspace_cell_height">74dip</dimen>
     <dimen name="folder_cell_width">100dip</dimen>
     <dimen name="folder_cell_height">74dip</dimen>
diff --git a/res/values-land/styles.xml b/res/values-land/styles.xml
index 251c717..50aba09 100644
--- a/res/values-land/styles.xml
+++ b/res/values-land/styles.xml
@@ -18,6 +18,23 @@
 -->
 
 <resources>
+<!-- Search Bar -->
+    <style name="SearchBar">
+        <item name="android:orientation">vertical</item>
+    </style>
+    <style name="SearchButton">
+        <item name="android:layout_gravity">center_horizontal</item>
+        <item name="android:paddingTop">@dimen/toolbar_button_vertical_padding</item>
+        <item name="android:paddingBottom">@dimen/toolbar_button_vertical_padding</item>
+        <item name="android:paddingLeft">@dimen/toolbar_button_horizontal_padding</item>
+        <item name="android:paddingRight">@dimen/toolbar_button_horizontal_padding</item>
+    </style>
+    <style name="SearchButtonDivider">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_gravity">center_horizontal</item>
+    </style>
+
     <style name="HotseatButton">
         <item name="android:paddingTop">12dip</item>
         <item name="android:paddingBottom">12dip</item>
diff --git a/res/values-large-land/dimens.xml b/res/values-large-land/dimens.xml
index 0f7e0ed..eeb16f4 100644
--- a/res/values-large-land/dimens.xml
+++ b/res/values-large-land/dimens.xml
@@ -19,9 +19,6 @@
          or right while you're dragging. -->
     <dimen name="scroll_zone">100dip</dimen>
 
-    <dimen name="customization_drawer_height">480dp</dimen>
-    <dimen name="customization_drawer_content_height">420dp</dimen>
-
     <dimen name="all_apps_view_pageLayoutWidthGap">36dp</dimen>
     <dimen name="all_apps_view_pageLayoutHeightGap">6dp</dimen>
     <dimen name="all_apps_view_pageLayoutPaddingTop">20dp</dimen>
@@ -29,10 +26,15 @@
     <dimen name="all_apps_view_pageLayoutPaddingLeft">40dp</dimen>
     <dimen name="all_apps_view_pageLayoutPaddingRight">40dp</dimen>
 
+    <!-- Dimensions for customize should generally be the same as all apps, or very similar. -->
+    <dimen name="customization_drawer_contents_pageLayoutWidthGap">32dp</dimen>
+    <dimen name="customization_drawer_contents_pageLayoutHeightGap">12dp</dimen>
+    <dimen name="customization_drawer_contents_pageLayoutPaddingTop">20dp</dimen>
+    <dimen name="customization_drawer_contents_pageLayoutPaddingBottom">20dp</dimen>
+    <dimen name="customization_drawer_contents_pageLayoutPaddingLeft">40dp</dimen>
+    <dimen name="customization_drawer_contents_pageLayoutPaddingRight">40dp</dimen>
+
     <integer name="customization_drawer_contents_wallpaperCellSpanX">3</integer>
     <integer name="customization_drawer_contents_wallpaperCellCountX">12</integer>
     <integer name="customization_drawer_contents_widgetCellCountX">14</integer>
-    <integer name="customization_drawer_contents_cellCountX">8</integer>
-    <integer name="customization_drawer_contents_cellCountY">3</integer>
-    <dimen name="customization_drawer_contents_pageLayoutWidthGap">32dp</dimen>
 </resources>
\ No newline at end of file
diff --git a/res/values-large-port/dimens.xml b/res/values-large-port/dimens.xml
index 2ea9e38..89f8605 100644
--- a/res/values-large-port/dimens.xml
+++ b/res/values-large-port/dimens.xml
@@ -19,9 +19,6 @@
          or right while you're dragging. -->
     <dimen name="scroll_zone">40dp</dimen>
 
-    <dimen name="customization_drawer_height">800dp</dimen>
-    <dimen name="customization_drawer_content_height">420dp</dimen>
-
     <dimen name="all_apps_view_pageLayoutWidthGap">36dp</dimen>
     <dimen name="all_apps_view_pageLayoutHeightGap">36dp</dimen>
     <dimen name="all_apps_view_pageLayoutPaddingTop">25dp</dimen>
@@ -32,7 +29,12 @@
     <integer name="customization_drawer_contents_wallpaperCellSpanX">3</integer>
     <integer name="customization_drawer_contents_wallpaperCellCountX">9</integer>
     <integer name="customization_drawer_contents_widgetCellCountX">9</integer>
-    <integer name="customization_drawer_contents_cellCountX">5</integer>
-    <integer name="customization_drawer_contents_cellCountY">3</integer>
+
+    <!-- Dimensions for customize should generally be the same as all apps, or very similar. -->
     <dimen name="customization_drawer_contents_pageLayoutWidthGap">36dp</dimen>
+    <dimen name="customization_drawer_contents_pageLayoutHeightGap">12dp</dimen>
+    <dimen name="customization_drawer_contents_pageLayoutPaddingTop">25dp</dimen>
+    <dimen name="customization_drawer_contents_pageLayoutPaddingBottom">25dp</dimen>
+    <dimen name="customization_drawer_contents_pageLayoutPaddingLeft">20dp</dimen>
+    <dimen name="customization_drawer_contents_pageLayoutPaddingRight">20dp</dimen>
 </resources>
\ No newline at end of file
diff --git a/res/values-large-port/styles.xml b/res/values-large-port/styles.xml
new file mode 100644
index 0000000..ba23a89
--- /dev/null
+++ b/res/values-large-port/styles.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+* Copyright (C) 2008 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+-->
+
+<resources>
+    <style name="CustomizeTabIndicator.Wide" parent="TabIndicator.Wide">
+        <item name="android:paddingLeft">20dp</item>
+        <item name="android:paddingRight">20dp</item>
+        <item name="android:paddingTop">12dp</item>
+        <item name="android:paddingBottom">16dp</item>
+        <item name="android:textSize">16sp</item>
+    </style>
+</resources>
diff --git a/res/values-large/dimens.xml b/res/values-large/dimens.xml
index 2416109..fa660e5 100644
--- a/res/values-large/dimens.xml
+++ b/res/values-large/dimens.xml
@@ -62,9 +62,6 @@
     <integer name="land_all_apps_view_cellCountX">7</integer>
     <integer name="land_all_apps_view_cellCountY">5</integer>
 
-    <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 -->
     <dimen name="delete_zone_vertical_drag_padding">20dip</dimen>
     <dimen name="delete_zone_horizontal_drag_padding">20dip</dimen>
@@ -88,4 +85,14 @@
      the drag view should be offset from the position of the original view. -->
     <dimen name="dragViewOffsetX">0dp</dimen>
     <dimen name="dragViewOffsetY">-12dp</dimen>
+
+    <!-- The actual number of rows/columns will be determined dynamically based on the screen
+         size, but in portrait we want to cap the rows at 3, otherwise it looks weird. -->
+    <integer name="customization_drawer_contents_maxCellCountY">3</integer>
+
+    <!-- The percentage of vertical space that the customize tray should try to fill. -->
+    <integer name="customization_drawer_verticalFillPercentage">65</integer>
+
+    <!-- Max number of rows in all apps, because too many looks weird. -->
+    <integer name="all_apps_view_maxCellCountY">6</integer>
 </resources>
diff --git a/res/values-large/styles.xml b/res/values-large/styles.xml
index bcbe038..ebb26f5 100644
--- a/res/values-large/styles.xml
+++ b/res/values-large/styles.xml
@@ -50,6 +50,9 @@
         <item name="android:textSize">20sp</item>
     </style>
 
+    <style name="CustomizeTabIndicator.Wide" parent="TabIndicator.Wide">
+    </style>
+
     <style name="config_orientation">
         <item name="@android:screenOrientation">unspecified</item>
     </style>
diff --git a/res/values-lt-large/strings.xml b/res/values-lt-large/strings.xml
index 527a09b..cc8bb90 100644
--- a/res/values-lt-large/strings.xml
+++ b/res/values-lt-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Pasirinkti darbalaukio foną"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Nepasiekiami jokie darbalaukio fonai"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Atšaukti"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Pasirinkti darbalaukio foną"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Negalimi jokie darbalaukio fonai"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Atšaukti"</string>
 </resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index e84360d..0492757 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Paleidimo priemonė"</string>
     <string name="uid_name" msgid="3371120195364560632">"Pagrindinės „Android“ programos"</string>
     <string name="folder_name" msgid="4588446541914685904">"Aplankas"</string>
diff --git a/res/values-lv-large/strings.xml b/res/values-lv-large/strings.xml
index 167ee7a..a1cfaf0 100644
--- a/res/values-lv-large/strings.xml
+++ b/res/values-lv-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Fona tapetes atlase"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Tapetes nav pieejamas."</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Atcelt"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Fona tapetes atlase"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Fona tapetes nav pieejamas."</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Atcelt"</string>
 </resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 963c332..9d83aa5 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Palaidējs"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android kodola lietojumprogrammas"</string>
     <string name="folder_name" msgid="4588446541914685904">"Mape"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
new file mode 100644
index 0000000..13e9259
--- /dev/null
+++ b/res/values-ms/strings.xml
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+* Copyright (C) 2008 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
+    <!-- outdated translation 5865630159700533006 -->     <string name="application_name" msgid="8424725141379931883">"Laman Utama"</string>
+    <string name="uid_name" msgid="3371120195364560632">"Apl Teras Android"</string>
+    <string name="folder_name" msgid="4588446541914685904">"Folder"</string>
+    <string name="chooser_wallpaper" msgid="5988031014201479733">"Pilih kertas dinding daripada"</string>
+    <string name="wallpaper_instructions" msgid="4215640646180727542">"Tetapkan kertas dinding"</string>
+    <!-- outdated translation 2674908923379130941 -->     <string name="pick_wallpaper" msgid="5630222540525626723">"Galeri Kertas Dinding"</string>
+    <!-- outdated translation 3571057450431950427 -->     <string name="activity_not_found" msgid="5591731020063337696">"Aplikasi tidak dipasang pada telefon anda."</string>
+    <!-- no translation found for configure_wallpaper (2820186271419674623) -->
+    <skip />
+    <!-- no translation found for widgets_tab_label (9145860100000983599) -->
+    <skip />
+    <!-- no translation found for folders_tab_label (1145293785541489736) -->
+    <skip />
+    <!-- no translation found for shortcuts_tab_label (8640731503933155644) -->
+    <skip />
+    <!-- no translation found for wallpapers_tab_label (1617804870364119879) -->
+    <skip />
+    <!-- no translation found for applications_tab_label (2991364240020736760) -->
+    <skip />
+    <!-- no translation found for wallpapers_temp_tab_text (1660218201190495279) -->
+    <skip />
+    <!-- no translation found for all_apps_tab_all (2942727589595027258) -->
+    <skip />
+    <!-- no translation found for all_apps_tab_apps (5468972551904071712) -->
+    <skip />
+    <!-- no translation found for all_apps_tab_games (1855736784923494918) -->
+    <skip />
+    <!-- no translation found for all_apps_tab_downloaded (1488049110598641387) -->
+    <skip />
+    <!-- no translation found for all_apps_no_games (5293893733372793696) -->
+    <skip />
+    <!-- no translation found for all_apps_no_downloads (2284720393234453761) -->
+    <skip />
+    <!-- no translation found for market (2652226429823445833) -->
+    <skip />
+    <!-- no translation found for external_drop_widget_error (4976816434597126575) -->
+    <skip />
+    <!-- no translation found for external_drop_widget_pick_title (4481311720134376218) -->
+    <skip />
+    <string name="rename_folder_label" msgid="5646236631298452787">"Nama folder"</string>
+    <string name="rename_folder_title" msgid="4544573104191526550">"Namakan semula folder"</string>
+    <string name="rename_action" msgid="6016003384693240896">"OK"</string>
+    <string name="cancel_action" msgid="3811860427489435048">"Batal"</string>
+    <string name="menu_item_add_item" msgid="6233177331075781114">"Tambah ke Skrin utama"</string>
+    <string name="group_applications" msgid="4118484163419674240">"Aplikasi"</string>
+    <string name="group_shortcuts" msgid="9133529424900391877">"Pintasan"</string>
+    <string name="group_folder" msgid="5143593791798929193">"Folder baru"</string>
+    <string name="group_live_folders" msgid="2664945399140647217">"Folder"</string>
+    <string name="group_widgets" msgid="6704978494073105844">"Widget"</string>
+    <string name="group_wallpapers" msgid="1568191644272224858">"Kertas dinding"</string>
+    <string name="add_folder" msgid="3521088587367839879">"Folder"</string>
+    <string name="add_clock" msgid="2337943840175865746">"Jam"</string>
+    <string name="add_photo_frame" msgid="3154058437359487954">"Bingkai gambar"</string>
+    <string name="out_of_space" msgid="8365249326091984698">"Tiada lagi ruang pada skrin Utama ini"</string>
+    <!-- no translation found for shortcut_installed (7071557296331322355) -->
+    <skip />
+    <!-- no translation found for shortcut_uninstalled (2129499669449749995) -->
+    <skip />
+    <!-- no translation found for shortcut_duplicate (4757756326465060694) -->
+    <skip />
+    <string name="title_select_shortcut" msgid="2858897527672831763">"Pilih pintasan"</string>
+    <!-- no translation found for title_select_application (8031072293115454221) -->
+    <skip />
+    <string name="title_select_live_folder" msgid="3753447798805166749">"Pilih folder"</string>
+    <!-- no translation found for all_apps_button_label (2578400570124163469) -->
+    <skip />
+    <!-- no translation found for all_apps_home_button_label (1022222300329398558) -->
+    <skip />
+    <!-- no translation found for delete_zone_label_workspace (7153615831493049150) -->
+    <skip />
+    <!-- no translation found for delete_zone_label_all_apps (6664588234817475108) -->
+    <skip />
+    <!-- no translation found for accessibility_search_button (816822994629942611) -->
+    <skip />
+    <!-- no translation found for accessibility_voice_search_button (3938249215065842475) -->
+    <skip />
+    <!-- no translation found for accessibility_all_apps_button (1595097919145716305) -->
+    <skip />
+    <!-- no translation found for accessibility_customize_button (585539669413531163) -->
+    <skip />
+    <!-- no translation found for accessibility_delete_button (3628162007991023603) -->
+    <skip />
+    <!-- no translation found for delete_zone_label_all_apps_system_app (3683920959591819044) -->
+    <skip />
+    <string name="menu_add" msgid="3065046628354640854">"Tambah"</string>
+    <!-- no translation found for menu_manage_apps (2308685199463588895) -->
+    <skip />
+    <string name="menu_wallpaper" msgid="5837429080911269832">"Kertas dinding"</string>
+    <string name="menu_search" msgid="4826514464423239041">"Cari"</string>
+    <string name="menu_notifications" msgid="6424587053194766192">"Pemberitahuan"</string>
+    <string name="menu_gestures" msgid="514678675575912237">"Gerak isyarat"</string>
+    <string name="menu_settings" msgid="6233960148378443661">"Tetapan"</string>
+    <!-- no translation found for cab_menu_delete_app (1242619904941293871) -->
+    <skip />
+    <!-- no translation found for cab_menu_app_info (5180426909324882018) -->
+    <skip />
+    <!-- no translation found for cab_app_selection_text (606113924828167756) -->
+    <skip />
+    <!-- no translation found for cab_widget_selection_text (962527270506951955) -->
+    <skip />
+    <!-- no translation found for cab_folder_selection_text (8916111874189565067) -->
+    <skip />
+    <!-- no translation found for cab_shortcut_selection_text (8115847384500412878) -->
+    <skip />
+    <string name="permlab_install_shortcut" msgid="1201690825493376489">"pasang pintasan"</string>
+    <string name="permdesc_install_shortcut" msgid="7429365847558984148">"Membenarkan aplikasi menambah pintasan tanpa campur tangan pengguna."</string>
+    <string name="permlab_uninstall_shortcut" msgid="7696645932555926449">"nyahpasang pintasan"</string>
+    <string name="permdesc_uninstall_shortcut" msgid="959972195916090900">"Membenarkan aplikasi mengalih keluar pintasan tanpa campur tangan pengguna."</string>
+    <string name="permlab_read_settings" msgid="3452408290738106747">"membaca tetapan dan pintasan Laman Utama"</string>
+    <string name="permdesc_read_settings" msgid="8377434937176025492">"Membenarkan aplikasi untuk membaca tetapan dan pintasan di Laman Utama."</string>
+    <string name="permlab_write_settings" msgid="1360567537236705628">"menulis tetapan dan pintasan Laman Utama"</string>
+    <string name="permdesc_write_settings" msgid="1098648778383349818">"Membenarkan aplikasi untuk menukar tetapan dan pintasan di Laman Utama."</string>
+    <string name="gadget_error_text" msgid="8359351016167075858">"Masalah memuatkan widget"</string>
+    <!-- no translation found for uninstall_system_app_text (7488523163288397451) -->
+    <skip />
+</resources>
diff --git a/res/values-nb-large/strings.xml b/res/values-nb-large/strings.xml
index dd58eae..52f392c 100644
--- a/res/values-nb-large/strings.xml
+++ b/res/values-nb-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Velg bakgrunnsbilde"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Ingen bakgrunner tilgjengelig"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Avbryt"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Velg bakgrunn"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Ingen bakgrunner er tilgjengelige"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Avbryt"</string>
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 382bac4..81f2f1a 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Utskytingsrampe"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android-kjerneapplikasjoner"</string>
     <string name="folder_name" msgid="4588446541914685904">"Mappe"</string>
diff --git a/res/values-nl-large/strings.xml b/res/values-nl-large/strings.xml
index 474f13b..c044921 100644
--- a/res/values-nl-large/strings.xml
+++ b/res/values-nl-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Achtergrond selecteren"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Geen achtergronden beschikbaar"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Annuleren"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Achtergrond selecteren"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Geen achtergronden beschikbaar"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Annuleren"</string>
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index abcf29a..0538784 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Launcher"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android-kerntoepassingen"</string>
     <string name="folder_name" msgid="4588446541914685904">"Map"</string>
diff --git a/res/values-pl-large/strings.xml b/res/values-pl-large/strings.xml
index 51b2442..44fbf4f 100644
--- a/res/values-pl-large/strings.xml
+++ b/res/values-pl-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Wybierz tapetę"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Brak tapet"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Anuluj"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Wybierz tapetę"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Brak tapet"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Anuluj"</string>
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 97b54af..cf186c7 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Program uruchamiający"</string>
     <string name="uid_name" msgid="3371120195364560632">"Aplikacje główne systemu Android"</string>
     <string name="folder_name" msgid="4588446541914685904">"Folder"</string>
diff --git a/res/values-pt-large/strings.xml b/res/values-pt-large/strings.xml
index b283297..ee43758 100644
--- a/res/values-pt-large/strings.xml
+++ b/res/values-pt-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Nenhum papel de parede disponível"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Cancelar"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Selecionar papel de parede"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Nenhum papel de parede disponível"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Cancelar"</string>
 </resources>
diff --git a/res/values-pt-rPT-large/strings.xml b/res/values-pt-rPT-large/strings.xml
index 9ec0e0f..b6c2d16 100644
--- a/res/values-pt-rPT-large/strings.xml
+++ b/res/values-pt-rPT-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Seleccionar imagem de fundo"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Nenhuma imagem de fundo disponível"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Cancelar"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Selecionar imagem de fundo"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Nenhuma imagem de fundo disponível"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Cancelar"</string>
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 71f634d..103af32 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Launcher"</string>
     <string name="uid_name" msgid="3371120195364560632">"Aplicações Principais do Android"</string>
     <string name="folder_name" msgid="4588446541914685904">"Pasta"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 2714fde..f83eaa9 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Launcher"</string>
     <string name="uid_name" msgid="3371120195364560632">"Principais aplicativos do Android"</string>
     <string name="folder_name" msgid="4588446541914685904">"Pasta"</string>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index a8453ed..e9aca66 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Lantschader"</string>
     <string name="uid_name" msgid="3371120195364560632">"Applicaziuns da basa dad Android"</string>
     <string name="folder_name" msgid="4588446541914685904">"Ordinatur"</string>
diff --git a/res/values-ro-large/strings.xml b/res/values-ro-large/strings.xml
index 6bea7b5..0e7eaa3 100644
--- a/res/values-ro-large/strings.xml
+++ b/res/values-ro-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Selectaţi o imagine de fundal"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Nu există imagini de fundal disponibile"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Anulaţi"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Selectaţi o imagine de fundal"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Nu există imagini de fundal disponibile"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Anulaţi"</string>
 </resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 6bed5d0..bb112dd 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Lansator"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android Core Apps"</string>
     <string name="folder_name" msgid="4588446541914685904">"Dosar"</string>
diff --git a/res/values-ru-large/strings.xml b/res/values-ru-large/strings.xml
index 01796bc..592dc6b 100644
--- a/res/values-ru-large/strings.xml
+++ b/res/values-ru-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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_cancel" msgid="6502936522490675611">"Отмена"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Выберите обои"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Нет доступных обоев"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Отмена"</string>
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 0456e4c..60f63a1 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Launcher"</string>
     <string name="uid_name" msgid="3371120195364560632">"Основные приложения Android"</string>
     <string name="folder_name" msgid="4588446541914685904">"Папка"</string>
diff --git a/res/values-sk-large/strings.xml b/res/values-sk-large/strings.xml
index c857c3c..77cceb3 100644
--- a/res/values-sk-large/strings.xml
+++ b/res/values-sk-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Výber tapety"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Tapety nie sú k dispozícii"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Zrušiť"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Výber tapety"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"K dispozícii nie sú žiadne tapety"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Zrušiť"</string>
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 064309d..93ec647 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Spúšťač"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android Core Apps"</string>
     <string name="folder_name" msgid="4588446541914685904">"Priečinok"</string>
diff --git a/res/values-sl-large/strings.xml b/res/values-sl-large/strings.xml
index f007b98..abb4526 100644
--- a/res/values-sl-large/strings.xml
+++ b/res/values-sl-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Izberite sliko za ozadje"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Ni slik za ozadje"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Prekliči"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Izberite sliko za ozadje"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Ni slik za ozadje"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Prekliči"</string>
 </resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 78b5187..98310c7 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Zaganjalnik"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android Core Apps"</string>
     <string name="folder_name" msgid="4588446541914685904">"Mapa"</string>
diff --git a/res/values-sr-large/strings.xml b/res/values-sr-large/strings.xml
index f716909..c559806 100644
--- a/res/values-sr-large/strings.xml
+++ b/res/values-sr-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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_cancel" msgid="6502936522490675611">"Откажи"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Избор позадине"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Позадине нису доступне"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Откажи"</string>
 </resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index cbc4bf2..6315d40 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Покретач"</string>
     <string name="uid_name" msgid="3371120195364560632">"Основне Android апликације"</string>
     <string name="folder_name" msgid="4588446541914685904">"Директоријум"</string>
diff --git a/res/values-sv-large/strings.xml b/res/values-sv-large/strings.xml
index 907348a..bc60cbe 100644
--- a/res/values-sv-large/strings.xml
+++ b/res/values-sv-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Välj bakgrund"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Inga tillgängliga bakgrundsbilder"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Avbryt"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Välj bakgrund"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Inga tillgängliga bakgrunder"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Avbryt"</string>
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 68859e3..7b01015 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Startbild"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android Core Apps"</string>
     <string name="folder_name" msgid="4588446541914685904">"Mapp"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
new file mode 100644
index 0000000..3358e17
--- /dev/null
+++ b/res/values-sw/strings.xml
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+* Copyright (C) 2008 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
+    <string name="application_name" msgid="8424725141379931883">"Kizinduzi"</string>
+    <string name="uid_name" msgid="3371120195364560632">"Programu Kuu za Android"</string>
+    <!-- no translation found for folder_name (4588446541914685904) -->
+    <skip />
+    <!-- no translation found for chooser_wallpaper (5988031014201479733) -->
+    <skip />
+    <!-- no translation found for wallpaper_instructions (4215640646180727542) -->
+    <skip />
+    <string name="pick_wallpaper" msgid="5630222540525626723">"Taswira"</string>
+    <!-- no translation found for activity_not_found (5591731020063337696) -->
+    <skip />
+    <string name="configure_wallpaper" msgid="2820186271419674623">"Weka mipangilio.."</string>
+    <string name="widgets_tab_label" msgid="9145860100000983599">"Wijeti"</string>
+    <string name="folders_tab_label" msgid="1145293785541489736">"Mafolda"</string>
+    <string name="shortcuts_tab_label" msgid="8640731503933155644">"Zaidi"</string>
+    <string name="wallpapers_tab_label" msgid="1617804870364119879">"Taswira"</string>
+    <!-- no translation found for applications_tab_label (2991364240020736760) -->
+    <skip />
+    <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Hiki kitakuwa kichupo cha taswira"</string>
+    <string name="all_apps_tab_all" msgid="2942727589595027258">"Zote"</string>
+    <string name="all_apps_tab_apps" msgid="5468972551904071712">"Programu"</string>
+    <string name="all_apps_tab_games" msgid="1855736784923494918">"Michezo"</string>
+    <!-- no translation found for all_apps_tab_downloaded (1488049110598641387) -->
+    <skip />
+    <!-- no translation found for all_apps_no_games (5293893733372793696) -->
+    <skip />
+    <!-- no translation found for all_apps_no_downloads (2284720393234453761) -->
+    <skip />
+    <!-- no translation found for market (2652226429823445833) -->
+    <skip />
+    <!-- no translation found for external_drop_widget_error (4976816434597126575) -->
+    <skip />
+    <!-- no translation found for external_drop_widget_pick_title (4481311720134376218) -->
+    <skip />
+    <string name="rename_folder_label" msgid="5646236631298452787">"Jina la folda"</string>
+    <!-- no translation found for rename_folder_title (4544573104191526550) -->
+    <skip />
+    <!-- no translation found for rename_action (6016003384693240896) -->
+    <skip />
+    <!-- no translation found for cancel_action (3811860427489435048) -->
+    <skip />
+    <string name="menu_item_add_item" msgid="6233177331075781114">"Ongeza kwa skrini ya Nyumbani"</string>
+    <string name="group_applications" msgid="4118484163419674240">"Programu"</string>
+    <string name="group_shortcuts" msgid="9133529424900391877">"Njia za mkato"</string>
+    <string name="group_folder" msgid="5143593791798929193">"Folda mpya"</string>
+    <string name="group_live_folders" msgid="2664945399140647217">"Mafolda"</string>
+    <string name="group_widgets" msgid="6704978494073105844">"Wijeti"</string>
+    <string name="group_wallpapers" msgid="1568191644272224858">"Pazia"</string>
+    <!-- no translation found for add_folder (3521088587367839879) -->
+    <skip />
+    <!-- no translation found for add_clock (2337943840175865746) -->
+    <skip />
+    <!-- no translation found for add_photo_frame (3154058437359487954) -->
+    <skip />
+    <!-- no translation found for out_of_space (8365249326091984698) -->
+    <skip />
+    <string name="shortcut_installed" msgid="7071557296331322355">"Njia ya mkato ya \"<xliff:g id="NAME">%s</xliff:g>\" imeundwa."</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"Njia ya mkato ya \"<xliff:g id="NAME">%s</xliff:g>\" iliondolewa."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"Njia ya mkato ya \"<xliff:g id="NAME">%s</xliff:g>\" tayari ipo."</string>
+    <string name="title_select_shortcut" msgid="2858897527672831763">"Chagua njia ya mkato"</string>
+    <string name="title_select_application" msgid="8031072293115454221">"Chagua programu"</string>
+    <string name="title_select_live_folder" msgid="3753447798805166749">"Chagua folda"</string>
+    <string name="all_apps_button_label" msgid="2578400570124163469">"Programu"</string>
+    <string name="all_apps_home_button_label" msgid="1022222300329398558">"Nyumbani"</string>
+    <!-- no translation found for delete_zone_label_workspace (7153615831493049150) -->
+    <skip />
+    <!-- no translation found for delete_zone_label_all_apps (6664588234817475108) -->
+    <skip />
+    <!-- no translation found for accessibility_search_button (816822994629942611) -->
+    <skip />
+    <!-- no translation found for accessibility_voice_search_button (3938249215065842475) -->
+    <skip />
+    <!-- no translation found for accessibility_all_apps_button (1595097919145716305) -->
+    <skip />
+    <!-- no translation found for accessibility_customize_button (585539669413531163) -->
+    <skip />
+    <!-- no translation found for accessibility_delete_button (3628162007991023603) -->
+    <skip />
+    <!-- no translation found for delete_zone_label_all_apps_system_app (3683920959591819044) -->
+    <skip />
+    <!-- no translation found for menu_add (3065046628354640854) -->
+    <skip />
+    <!-- no translation found for menu_manage_apps (2308685199463588895) -->
+    <skip />
+    <!-- no translation found for menu_wallpaper (5837429080911269832) -->
+    <skip />
+    <!-- no translation found for menu_search (4826514464423239041) -->
+    <skip />
+    <!-- no translation found for menu_notifications (6424587053194766192) -->
+    <skip />
+    <string name="menu_gestures" msgid="514678675575912237">"Ishara"</string>
+    <!-- no translation found for menu_settings (6233960148378443661) -->
+    <skip />
+    <string name="cab_menu_delete_app" msgid="1242619904941293871">"Ondoa programu"</string>
+    <string name="cab_menu_app_info" msgid="5180426909324882018">"Maelezo ya programu"</string>
+    <string name="cab_app_selection_text" msgid="606113924828167756">"Programu 1 imechaguliwa"</string>
+    <string name="cab_widget_selection_text" msgid="962527270506951955">"Wijeti 1 imechaguliwa"</string>
+    <string name="cab_folder_selection_text" msgid="8916111874189565067">"Folda 1 limechaguliwa"</string>
+    <string name="cab_shortcut_selection_text" msgid="8115847384500412878">" Njia 1 ya mkato imechaguliwa"</string>
+    <!-- no translation found for permlab_install_shortcut (1201690825493376489) -->
+    <skip />
+    <string name="permdesc_install_shortcut" msgid="7429365847558984148">"Huruhusu programu kuongeza njia za mkato bila mtumiaji kuhusika."</string>
+    <!-- no translation found for permlab_uninstall_shortcut (7696645932555926449) -->
+    <skip />
+    <string name="permdesc_uninstall_shortcut" msgid="959972195916090900">"Huruhusu programu kuondoa njia za mkato bila mtumiaji kuhusika."</string>
+    <string name="permlab_read_settings" msgid="3452408290738106747">"soma mipangilio ya Nyumbani na njia za mkato"</string>
+    <string name="permdesc_read_settings" msgid="8377434937176025492">"Huruhusu programu kusoma mipangilio na njia za mkato katika Nyumbani."</string>
+    <string name="permlab_write_settings" msgid="1360567537236705628">"andika mipangilio ya Nyumbani na njia za mkato"</string>
+    <string name="permdesc_write_settings" msgid="1098648778383349818">"Huruhusu programu kubadilisha mipangilio na njia za mkato Nyumbani."</string>
+    <string name="gadget_error_text" msgid="8359351016167075858">"Tatizo la kupakia wijeti"</string>
+    <string name="uninstall_system_app_text" msgid="7488523163288397451">"Hii ni programu ya mfumo na haiwezi kuondolewa."</string>
+</resources>
diff --git a/res/values-th-large/strings.xml b/res/values-th-large/strings.xml
index 38c7d85..1cfb978 100644
--- a/res/values-th-large/strings.xml
+++ b/res/values-th-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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_cancel" msgid="6502936522490675611">"ยกเลิก"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"เลือกวอลเปเปอร์"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"ไม่มีวอลเปเปอร์ให้ใช้งาน"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"ยกเลิก"</string>
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 1562135..cbee52c 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"ตัวเรียกใช้งาน"</string>
     <string name="uid_name" msgid="3371120195364560632">"แอปหลัก Android"</string>
     <string name="folder_name" msgid="4588446541914685904">"โฟลเดอร์"</string>
diff --git a/res/values-tl-large/strings.xml b/res/values-tl-large/strings.xml
index 7eadb6d..9b1cfa7 100644
--- a/res/values-tl-large/strings.xml
+++ b/res/values-tl-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Pumili ng wallpaper"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Walang available na mga wallpaper"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"Kanselahin"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Pumili ng wallpaper"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Walang available na mga wallpaper"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Kanselahin"</string>
 </resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 50ed317..5ff0174 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Launcher"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android Core Apps"</string>
     <string name="folder_name" msgid="4588446541914685904">"Folder"</string>
diff --git a/res/values-tr-large/strings.xml b/res/values-tr-large/strings.xml
index a81e998..3c5d759 100644
--- a/res/values-tr-large/strings.xml
+++ b/res/values-tr-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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">"Duvar kağıdı seçin"</string>
-    <string name="wallpaper_chooser_empty" msgid="7358237455389125747">"Hiç duvar kağıdı yok"</string>
-    <string name="wallpaper_cancel" msgid="6502936522490675611">"İptal"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Duvar kağıdı seçin"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Hiç duvar kağıdı yok"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"İptal"</string>
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 2057828..b7c2dfc 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Launcher"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android Core Apps"</string>
     <string name="folder_name" msgid="4588446541914685904">"Klasör"</string>
diff --git a/res/values-uk-large/strings.xml b/res/values-uk-large/strings.xml
index 4950142..aab00c5 100644
--- a/res/values-uk-large/strings.xml
+++ b/res/values-uk-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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_cancel" msgid="6502936522490675611">"Скасувати"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"Вибрати фоновий малюнок"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Фонові малюнки недоступні"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"Скасувати"</string>
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index b3f0846..77ab693 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Пан. запуску"</string>
     <string name="uid_name" msgid="3371120195364560632">"Служби Android Core"</string>
     <string name="folder_name" msgid="4588446541914685904">"Папка"</string>
diff --git a/res/values-vi-large/strings.xml b/res/values-vi-large/strings.xml
index c8ce028..a994fc5 100644
--- a/res/values-vi-large/strings.xml
+++ b/res/values-vi-large/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="8362944198120933329">"Chọn hình nền"</string>
-    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Không có sẵn hình nền nào"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"Không có hình nền nào"</string>
     <string name="wallpaper_cancel" msgid="5942480248232268588">"Hủy"</string>
 </resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 9238c4a..e96b68b 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"Trình khởi chạy"</string>
     <string name="uid_name" msgid="3371120195364560632">"Ứng dụng Lõi Android"</string>
     <string name="folder_name" msgid="4588446541914685904">"Thư mục"</string>
diff --git a/res/values-xlarge/styles.xml b/res/values-xlarge/styles.xml
new file mode 100644
index 0000000..fdf2f19
--- /dev/null
+++ b/res/values-xlarge/styles.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+* Copyright (C) 2011 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+-->
+
+<resources>
+    <style name="CustomizeTabIndicator.Wide" parent="TabIndicator.Wide">
+    </style>
+</resources>
diff --git a/res/values-zh-rCN-large/strings.xml b/res/values-zh-rCN-large/strings.xml
index 323cce2..c950b46 100644
--- a/res/values-zh-rCN-large/strings.xml
+++ b/res/values-zh-rCN-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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_cancel" msgid="6502936522490675611">"取消"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"选择壁纸"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"无可用壁纸"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"取消"</string>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index b2f228c..60aafc9 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"启动器"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android 核心应用程序"</string>
     <string name="folder_name" msgid="4588446541914685904">"文件夹"</string>
diff --git a/res/values-zh-rTW-large/strings.xml b/res/values-zh-rTW-large/strings.xml
index 793b58d..f821f5c 100644
--- a/res/values-zh-rTW-large/strings.xml
+++ b/res/values-zh-rTW-large/strings.xml
@@ -19,7 +19,7 @@
 
 <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_cancel" msgid="6502936522490675611">"取消"</string>
+    <string name="wallpaper_dialog_title" msgid="8362944198120933329">"選取桌布"</string>
+    <string name="wallpaper_chooser_empty" msgid="6543937491391049913">"沒有可用的桌布"</string>
+    <string name="wallpaper_cancel" msgid="5942480248232268588">"取消"</string>
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index f172ef6..4abe756 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -19,6 +19,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
     <string name="application_name" msgid="8424725141379931883">"啟動器"</string>
     <string name="uid_name" msgid="3371120195364560632">"Android 核心應用程式"</string>
     <string name="folder_name" msgid="4588446541914685904">"資料夾"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
new file mode 100644
index 0000000..81fec63
--- /dev/null
+++ b/res/values-zu/strings.xml
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+* Copyright (C) 2008 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for live_wallpaper_picker_class_name (2908396359221567921) -->
+    <skip />
+    <string name="application_name" msgid="8424725141379931883">"Isiqalisi"</string>
+    <string name="uid_name" msgid="3371120195364560632">"I-Android Core Apps"</string>
+    <!-- no translation found for folder_name (4588446541914685904) -->
+    <skip />
+    <!-- no translation found for chooser_wallpaper (5988031014201479733) -->
+    <skip />
+    <!-- no translation found for wallpaper_instructions (4215640646180727542) -->
+    <skip />
+    <string name="pick_wallpaper" msgid="5630222540525626723">"Amaphephadonga"</string>
+    <!-- no translation found for activity_not_found (5591731020063337696) -->
+    <skip />
+    <string name="configure_wallpaper" msgid="2820186271419674623">"Misa..."</string>
+    <string name="widgets_tab_label" msgid="9145860100000983599">"Amawijethi"</string>
+    <string name="folders_tab_label" msgid="1145293785541489736">"Amafolda"</string>
+    <string name="shortcuts_tab_label" msgid="8640731503933155644">"Okungaphezulu"</string>
+    <string name="wallpapers_tab_label" msgid="1617804870364119879">"Amaphephadonga"</string>
+    <!-- no translation found for applications_tab_label (2991364240020736760) -->
+    <skip />
+    <string name="wallpapers_temp_tab_text" msgid="1660218201190495279">"Lokhu kuzoba isithikithana samaphephadonga"</string>
+    <string name="all_apps_tab_all" msgid="2942727589595027258">"Konke"</string>
+    <string name="all_apps_tab_apps" msgid="5468972551904071712">"Izinhlelo Zokusebenza"</string>
+    <string name="all_apps_tab_games" msgid="1855736784923494918">"Imidlalo"</string>
+    <!-- no translation found for all_apps_tab_downloaded (1488049110598641387) -->
+    <skip />
+    <!-- no translation found for all_apps_no_games (5293893733372793696) -->
+    <skip />
+    <!-- no translation found for all_apps_no_downloads (2284720393234453761) -->
+    <skip />
+    <!-- no translation found for market (2652226429823445833) -->
+    <skip />
+    <!-- no translation found for external_drop_widget_error (4976816434597126575) -->
+    <skip />
+    <!-- no translation found for external_drop_widget_pick_title (4481311720134376218) -->
+    <skip />
+    <string name="rename_folder_label" msgid="5646236631298452787">"Igama lefolda"</string>
+    <!-- no translation found for rename_folder_title (4544573104191526550) -->
+    <skip />
+    <!-- no translation found for rename_action (6016003384693240896) -->
+    <skip />
+    <!-- no translation found for cancel_action (3811860427489435048) -->
+    <skip />
+    <string name="menu_item_add_item" msgid="6233177331075781114">"Faka kwisikrini saseKhaya"</string>
+    <string name="group_applications" msgid="4118484163419674240">"Izinhlelo zokusebenza"</string>
+    <string name="group_shortcuts" msgid="9133529424900391877">"Izinqamuleli"</string>
+    <string name="group_folder" msgid="5143593791798929193">"Ifolda entsha"</string>
+    <string name="group_live_folders" msgid="2664945399140647217">"Amafolda"</string>
+    <string name="group_widgets" msgid="6704978494073105844">"Izinqunjwana"</string>
+    <string name="group_wallpapers" msgid="1568191644272224858">"Amaphephadonga"</string>
+    <!-- no translation found for add_folder (3521088587367839879) -->
+    <skip />
+    <!-- no translation found for add_clock (2337943840175865746) -->
+    <skip />
+    <!-- no translation found for add_photo_frame (3154058437359487954) -->
+    <skip />
+    <!-- no translation found for out_of_space (8365249326091984698) -->
+    <skip />
+    <string name="shortcut_installed" msgid="7071557296331322355">"Isinqamuleli \"<xliff:g id="NAME">%s</xliff:g>\" senziwe"</string>
+    <string name="shortcut_uninstalled" msgid="2129499669449749995">"Isinqamuleli \"<xliff:g id="NAME">%s</xliff:g>\" sikhishiwe."</string>
+    <string name="shortcut_duplicate" msgid="4757756326465060694">"Isinqamuleli \"<xliff:g id="NAME">%s</xliff:g>\" sivele sikhona"</string>
+    <string name="title_select_shortcut" msgid="2858897527672831763">"Khetha isinqamuleli"</string>
+    <string name="title_select_application" msgid="8031072293115454221">"Khetha uhlelo lokusebenza"</string>
+    <string name="title_select_live_folder" msgid="3753447798805166749">"Khetha ifolda"</string>
+    <string name="all_apps_button_label" msgid="2578400570124163469">"Izinhlelo zokusebenza"</string>
+    <string name="all_apps_home_button_label" msgid="1022222300329398558">"Ekhaya"</string>
+    <!-- no translation found for delete_zone_label_workspace (7153615831493049150) -->
+    <skip />
+    <!-- no translation found for delete_zone_label_all_apps (6664588234817475108) -->
+    <skip />
+    <!-- no translation found for accessibility_search_button (816822994629942611) -->
+    <skip />
+    <!-- no translation found for accessibility_voice_search_button (3938249215065842475) -->
+    <skip />
+    <!-- no translation found for accessibility_all_apps_button (1595097919145716305) -->
+    <skip />
+    <!-- no translation found for accessibility_customize_button (585539669413531163) -->
+    <skip />
+    <!-- no translation found for accessibility_delete_button (3628162007991023603) -->
+    <skip />
+    <!-- no translation found for delete_zone_label_all_apps_system_app (3683920959591819044) -->
+    <skip />
+    <!-- no translation found for menu_add (3065046628354640854) -->
+    <skip />
+    <!-- no translation found for menu_manage_apps (2308685199463588895) -->
+    <skip />
+    <!-- no translation found for menu_wallpaper (5837429080911269832) -->
+    <skip />
+    <!-- no translation found for menu_search (4826514464423239041) -->
+    <skip />
+    <!-- no translation found for menu_notifications (6424587053194766192) -->
+    <skip />
+    <string name="menu_gestures" msgid="514678675575912237">"Izimpawu"</string>
+    <!-- no translation found for menu_settings (6233960148378443661) -->
+    <skip />
+    <string name="cab_menu_delete_app" msgid="1242619904941293871">"Khipha uhlelo lokusebenza"</string>
+    <string name="cab_menu_app_info" msgid="5180426909324882018">"Imininingwane yohlelo lokusebenza"</string>
+    <string name="cab_app_selection_text" msgid="606113924828167756">"Kukhethwe uhlelo lokusebenza olungu-1"</string>
+    <string name="cab_widget_selection_text" msgid="962527270506951955">"kukhethwe iwijethi engu-1"</string>
+    <string name="cab_folder_selection_text" msgid="8916111874189565067">"kukhethwe ifolda engu-1"</string>
+    <string name="cab_shortcut_selection_text" msgid="8115847384500412878">"kukhethwe isinqamuleli esingu-1"</string>
+    <!-- no translation found for permlab_install_shortcut (1201690825493376489) -->
+    <skip />
+    <string name="permdesc_install_shortcut" msgid="7429365847558984148">"Ivumela uhlelo lokusebenza ukufaka izinqamuleli ngaphandle kokungenela komsebenzisi."</string>
+    <!-- no translation found for permlab_uninstall_shortcut (7696645932555926449) -->
+    <skip />
+    <string name="permdesc_uninstall_shortcut" msgid="959972195916090900">"Ivumela uhlelo lokusebenza ukukhipha izinqamuleli ngaphandle kokungenela komsebenzisi."</string>
+    <string name="permlab_read_settings" msgid="3452408290738106747">"funda izilungiselelo zaseKhaya nezinqamuleli"</string>
+    <string name="permdesc_read_settings" msgid="8377434937176025492">"Ivumela uhlelo lokusebenza ukufunda izilungiselelo nezinqamuleli Ekhaya."</string>
+    <string name="permlab_write_settings" msgid="1360567537236705628">"bhala izilungiselelo zaseKhaya nezinqamuleli"</string>
+    <string name="permdesc_write_settings" msgid="1098648778383349818">"Ivumela izinhlelo ukushintsha izilungiselelo nezinqamuleli Ekhaya."</string>
+    <string name="gadget_error_text" msgid="8359351016167075858">"Inkinga yokulayisha isinqunjwana"</string>
+    <string name="uninstall_system_app_text" msgid="7488523163288397451">"Lolu uhlelo lokusebenza lwesistimu futhi alikwazi ukukhishwa."</string>
+</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 99b1240..9d159f9 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -15,6 +15,13 @@
 -->
 
 <resources>
+<!-- Workspace -->
+    <dimen name="qsb_bar_height">56dp</dimen>
+
+<!-- QSB -->
+    <dimen name="toolbar_button_vertical_padding">12dip</dimen>
+    <dimen name="toolbar_button_horizontal_padding">16dip</dimen>
+
 <!-- AllApps/Customize/AppsCustomize -->
     <!-- Size of icons in Workspace/AppsCustomize -->
     <dimen name="app_icon_size">50dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9ad3e24..32e649d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -25,6 +25,13 @@
     <!-- Do not translate. android:process of this application. -->
     <string name="process" translate="false"><xliff:g id="x"></xliff:g></string>
     
+    <!-- Do not translate. We wish to prioritize the Wallpaper and Live Wallpaper pickers,
+         but because they are in a different package, we need to reference the component in
+         a non language-dependent way.  If the Live Wallpaper picker component name changes
+         this will have to be updated as well. -->
+    <string name="live_wallpaper_picker_package_name" translate="false">com.android.wallpaper.livepicker</string>
+    <string name="live_wallpaper_picker_class_name" translate="false">com.android.wallpaper.livepicker.LiveWallpaperActivity</string>
+
     <!-- General -->
     <skip />
     <!-- Application name -->
@@ -67,6 +74,10 @@
     <!--  Tile of the tab for applications that were downloaded from market [CHAR_LIMIT=24] -->
     <string name="all_apps_tab_downloaded">My apps</string>
 
+    <!-- AppsCustomize pane -->
+    <!-- Message to tell the user to long-press on a widget to add it [CHAR_LIMIT=50] -->
+    <string name="long_press_widget_to_add">Long-press to pick up a widget</string>
+
     <!-- All Apps pane -->
     <!-- Message to show when there are no games [CHAR_LIMIT=25] -->
     <string name="all_apps_no_games">No games found.</string>
@@ -237,4 +248,7 @@
 
     <!--  Text to inform the user that they can't uninstall a system application -->
     <string name="uninstall_system_app_text">This is a system application and cannot be uninstalled.</string>
+
+    <!-- Title of the Android Dreams (screensaver) module -->
+    <string name="dream_name">Rocket Launcher</string>
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index abe6ac4..c3e6ce9 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -68,6 +68,23 @@
         <item name="android:layout_marginRight">10dip</item>
     </style>
 
+    <style name="SearchBar">
+        <item name="android:orientation">horizontal</item>
+    </style>
+    <style name="SearchButton">
+        <item name="android:layout_gravity">center_vertical</item>
+        <item name="android:paddingTop">@dimen/toolbar_button_vertical_padding</item>
+        <item name="android:paddingBottom">@dimen/toolbar_button_vertical_padding</item>
+        <item name="android:paddingLeft">@dimen/toolbar_button_horizontal_padding</item>
+        <item name="android:paddingRight">@dimen/toolbar_button_horizontal_padding</item>
+    </style>
+    <style name="SearchButtonDivider">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">match_parent</item>
+        <item name="android:layout_gravity">center_vertical</item>
+    </style>
+
+
     <style name="TabIndicator">
         <item name="android:layout_width">wrap_content</item>
         <item name="android:layout_height">match_parent</item>
@@ -85,13 +102,6 @@
         <item name="android:shadowRadius">1.0</item>
     </style>
 
-    <style name="SearchButton" parent="@android:style/Widget.Button.Small">
-        <item name="android:paddingTop">7dip</item>
-        <item name="android:paddingBottom">9dip</item>
-        <item name="android:paddingLeft">10dip</item>
-        <item name="android:paddingRight">10dip</item>
-    </style>
-
     <style name="MarketButton">
         <item name="android:paddingRight">20dp</item>
         <item name="android:text">@string/market</item>
diff --git a/src/com/android/launcher2/AddAdapter.java b/src/com/android/launcher2/AddAdapter.java
index 6f97d72..d1076b1 100644
--- a/src/com/android/launcher2/AddAdapter.java
+++ b/src/com/android/launcher2/AddAdapter.java
@@ -40,6 +40,7 @@
     
     public static final int ITEM_SHORTCUT = 0;
     public static final int ITEM_APPWIDGET = 1;
+    public static final int ITEM_APPLICATION = 2;
     public static final int ITEM_WALLPAPER = 3;
     
     /**
@@ -69,8 +70,8 @@
         // Create default actions
         Resources res = launcher.getResources();
         
-        mItems.add(new ListItem(res, R.string.group_shortcuts,
-                R.drawable.ic_launcher_shortcut, ITEM_SHORTCUT));
+        mItems.add(new ListItem(res, R.string.group_applications,
+                R.drawable.ic_launcher_application, ITEM_APPLICATION));
 
         mItems.add(new ListItem(res, R.string.group_widgets,
                 R.drawable.ic_launcher_appwidget, ITEM_APPWIDGET));
diff --git a/src/com/android/launcher2/AllAppsBackground.java b/src/com/android/launcher2/AllAppsBackground.java
index 5292d0a..51e1ee4 100644
--- a/src/com/android/launcher2/AllAppsBackground.java
+++ b/src/com/android/launcher2/AllAppsBackground.java
@@ -25,8 +25,8 @@
 import android.view.View;
 
 /**
- * An implementation of PagedView that populates the pages of the workspace
- * with all of the user's applications.
+ * The background for AllApps which moves independently of the AllApps tray (for example, when we
+ * transition between AllApps and the Workspace while in spring-loaded mode).
  */
 public class AllAppsBackground extends View {
     private Drawable mBackground;
diff --git a/src/com/android/launcher2/AllAppsPagedView.java b/src/com/android/launcher2/AllAppsPagedView.java
index ead2c5d..64e6f98 100644
--- a/src/com/android/launcher2/AllAppsPagedView.java
+++ b/src/com/android/launcher2/AllAppsPagedView.java
@@ -73,6 +73,8 @@
     private int mLastMeasureWidth = -1;
     private int mLastMeasureHeight = -1;
 
+    private int mMaxCellCountY;
+
     public AllAppsPagedView(Context context) {
         this(context, null);
     }
@@ -90,9 +92,10 @@
         a.recycle();
         setSoundEffectsEnabled(false);
 
-        Resources r = context.getResources();
+        final Resources r = context.getResources();
         setDragSlopeThreshold(
                 r.getInteger(R.integer.config_appsCustomizeDragSlopeThreshold) / 100.0f);
+        mMaxCellCountY = r.getInteger(R.integer.all_apps_view_maxCellCountY);
     }
 
     @Override
@@ -172,7 +175,19 @@
         availableHeight -= mPageLayoutPaddingTop + mPageLayoutPaddingBottom;
         availableHeight -= cellHeight; // Assume at least one row
         availableHeight -= screenHeight * 0.16f;
-        return (1 + availableHeight / (cellHeight + mPageLayoutHeightGap));
+        if (availableHeight > 0) {
+            return Math.min(mMaxCellCountY,
+                    1 + availableHeight / (cellHeight + mPageLayoutHeightGap));
+        }
+        return 0;
+    }
+
+    int getCellCountX() {
+        return mCellCountX;
+    }
+
+    int getCellCountY() {
+        return mCellCountY;
     }
 
     void allowHardwareLayerCreation() {
diff --git a/src/com/android/launcher2/AppsCustomizePagedView.java b/src/com/android/launcher2/AppsCustomizePagedView.java
index fabd9e4..bd70463 100644
--- a/src/com/android/launcher2/AppsCustomizePagedView.java
+++ b/src/com/android/launcher2/AppsCustomizePagedView.java
@@ -18,14 +18,17 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 
 import org.xmlpull.v1.XmlPullParser;
 
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
 import android.animation.ObjectAnimator;
 import android.animation.PropertyValuesHolder;
+import android.animation.ValueAnimator;
 import android.app.WallpaperManager;
 import android.appwidget.AppWidgetManager;
 import android.appwidget.AppWidgetProviderInfo;
@@ -52,10 +55,12 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.animation.AccelerateInterpolator;
 import android.view.animation.DecelerateInterpolator;
 import android.view.animation.LinearInterpolator;
 import android.widget.ImageView;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import com.android.launcher.R;
 
@@ -167,6 +172,22 @@
         setDragSlopeThreshold(r.getInteger(R.integer.config_appsCustomizeDragSlopeThreshold)/100f);
     }
 
+    /** Removes and returns the ResolveInfo with the specified ComponentName */
+    private ResolveInfo removeResolveInfoWithComponentName(List<ResolveInfo> list,
+            ComponentName cn) {
+        Iterator<ResolveInfo> iter = list.iterator();
+        while (iter.hasNext()) {
+            ResolveInfo rinfo = iter.next();
+            ActivityInfo info = rinfo.activityInfo;
+            ComponentName c = new ComponentName(info.packageName, info.name);
+            if (c.equals(cn)) {
+                iter.remove();
+                return rinfo;
+            }
+        }
+        return null;
+    }
+
     public void onPackagesUpdated() {
         // Get the list of widgets and shortcuts
         mWidgets.clear();
@@ -182,6 +203,20 @@
                 PackageManager.GET_META_DATA);
         Collections.sort(mWallpapers,
                 new LauncherModel.ShortcutNameComparator(mPackageManager));
+        // Move Live Wallpapers to the front of the list
+        Context c = getContext();
+        ResolveInfo liveWallpapers = removeResolveInfoWithComponentName(mWallpapers,
+            new ComponentName(c.getString(R.string.live_wallpaper_picker_package_name),
+                c.getString(R.string.live_wallpaper_picker_class_name)));
+        if (liveWallpapers != null) {
+            mWallpapers.add(0, liveWallpapers);
+        }
+        // Move Wallpapers to the front of the list
+        ResolveInfo wallpapers = removeResolveInfoWithComponentName(mWallpapers,
+            new ComponentName(c.getPackageName(), WallpaperChooser.class.getName()));
+        if (wallpapers != null) {
+            mWallpapers.add(0, wallpapers);
+        }
     }
 
     /**
@@ -310,31 +345,21 @@
                     });
                 }
             } else {
-                // Add the widget to the current workspace screen
-                Workspace w = mLauncher.getWorkspace();
-                int currentWorkspaceScreen = mLauncher.getCurrentWorkspaceScreen();
-                final CellLayout cl = (CellLayout) w.getChildAt(currentWorkspaceScreen);
-                final View dragView = v.findViewById(R.id.widget_preview);
-                final ItemInfo itemInfo = (ItemInfo) v.getTag();
-                animateClickFeedback(v, new Runnable() {
-                    @Override
-                    public void run() {
-                        cl.calculateSpans(itemInfo);
-                        if (cl.findCellForSpan(null, itemInfo.spanX, itemInfo.spanY)) {
-                            if (LauncherApplication.isScreenLarge()) {
-                                animateItemOntoScreen(dragView, cl, itemInfo);
-                            } else {
-                                mLauncher.addExternalItemToScreen(itemInfo, cl);
-                                itemInfo.dropPos = null;
-                            }
+                // Let the user know that they have to long press to add a widget
+                Toast.makeText(getContext(), R.string.long_press_widget_to_add,
+                        Toast.LENGTH_SHORT).show();
 
-                            // Hide the pane so we can see the workspace we dropped on
-                            mLauncher.showWorkspace(true);
-                        } else {
-                            mLauncher.showOutOfSpaceMessage();
-                        }
-                    }
-                });
+                // Create a little animation to show that the widget can move
+                float offsetY = getResources().getDimensionPixelSize(R.dimen.dragViewOffsetY);
+                final ImageView p = (ImageView) v.findViewById(R.id.widget_preview);
+                AnimatorSet bounce = new AnimatorSet();
+                ValueAnimator tyuAnim = ObjectAnimator.ofFloat(p, "translationY", offsetY);
+                tyuAnim.setDuration(125);
+                ValueAnimator tydAnim = ObjectAnimator.ofFloat(p, "translationY", 0f);
+                tydAnim.setDuration(100);
+                bounce.play(tyuAnim).before(tydAnim);
+                bounce.setInterpolator(new AccelerateInterpolator());
+                bounce.start();
             }
         }
     }
diff --git a/src/com/android/launcher2/AppsCustomizeTabHost.java b/src/com/android/launcher2/AppsCustomizeTabHost.java
index e2d21b6..cd8e7ef 100644
--- a/src/com/android/launcher2/AppsCustomizeTabHost.java
+++ b/src/com/android/launcher2/AppsCustomizeTabHost.java
@@ -42,6 +42,13 @@
         mLayoutInflater = LayoutInflater.from(context);
     }
 
+    void selectAppsTab() {
+        setCurrentTabByTag(APPS_TAB_TAG);
+    }
+    void selectWidgetsTab() {
+        setCurrentTabByTag(WIDGETS_TAB_TAG);
+    }
+
     /**
      * Setup the tab host and create all necessary tabs.
      */
diff --git a/src/com/android/launcher2/CachedTextView.java b/src/com/android/launcher2/CachedTextView.java
index d0f6dd8..ac2cc3b 100644
--- a/src/com/android/launcher2/CachedTextView.java
+++ b/src/com/android/launcher2/CachedTextView.java
@@ -107,7 +107,7 @@
         int width = (int) (textCacheRight - mTextCacheLeft + (2 * xCharWidth));
         int height = (int) (textCacheBottom - mTextCacheTop);
 
-        if (width != 0 && height != 0) {
+        if (width > 0 && height > 0) {
             if (mCache != null) {
                 if (mCache.getWidth() != width || mCache.getHeight() != height) {
                     mCache.recycle();
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index 5f848a8..f189cd5 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -71,7 +71,7 @@
 
     // 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 int[] mTmpXY = new int[2];
     private final int[] mTmpPoint = new int[2];
     private final PointF mTmpPointF = new PointF();
 
@@ -694,6 +694,14 @@
             if ((child.getVisibility() == VISIBLE || child.getAnimation() != null) &&
                     lp.isLockedToGrid) {
                 child.getHitRect(frame);
+
+                // The child hit rect is relative to the CellLayoutChildren parent, so we need to
+                // offset that by this CellLayout's padding to test an (x,y) point that is relative
+                // to this view.
+                final int tmpXY[] = mTmpXY;
+                child.getLocationOnScreen(tmpXY);
+                frame.offset(mLeftPadding, mTopPadding);
+
                 if (frame.contains(x, y)) {
                     cellInfo.cell = child;
                     cellInfo.cellX = lp.cellX;
@@ -708,7 +716,7 @@
         }
 
         if (!found) {
-            final int cellXY[] = mTmpCellXY;
+            final int cellXY[] = mTmpXY;
             pointToCellExact(x, y, cellXY);
 
             cellInfo.cell = null;
@@ -1161,7 +1169,7 @@
                         }
                     }
                 }
-                final int[] cellXY = mTmpCellXY;
+                final int[] cellXY = mTmpXY;
                 cellToCenterPoint(x, y, cellXY);
 
                 double distance = Math.sqrt(Math.pow(cellXY[0] - pixelX, 2)
diff --git a/src/com/android/launcher2/CustomizePagedView.java b/src/com/android/launcher2/CustomizePagedView.java
index 68ec535..5ac261f 100644
--- a/src/com/android/launcher2/CustomizePagedView.java
+++ b/src/com/android/launcher2/CustomizePagedView.java
@@ -108,6 +108,9 @@
     // The max number of wallpaper cells to take a "page" of wallpaper items
     private int mMaxWallpaperCellHSpan;
 
+    // The maximum number of rows in a paged view.
+    private int mMaxCellCountY;
+
     // The raw sources of data for each of the different tabs of the customization page
     private List<AppWidgetProviderInfo> mWidgetList;
     private List<ResolveInfo> mShortcutList;
@@ -143,7 +146,10 @@
 
     private int[] mDragViewOrigin = new int[2];
 
-    private int mPageContentWidth;
+    private int mPageContentWidth = -1;
+    private int mPageContentHeight = -1;
+
+    private AllAppsPagedView mAllAppsPagedView;
 
     public CustomizePagedView(Context context) {
         this(context, null, 0);
@@ -162,10 +168,6 @@
         mMaxWallpaperCellHSpan = a.getInt(R.styleable.CustomizePagedView_wallpaperCellCountX, 8);
         mMaxWidgetsCellHSpan = a.getInt(R.styleable.CustomizePagedView_widgetCellCountX, 8);
         a.recycle();
-        a = context.obtainStyledAttributes(attrs, R.styleable.PagedView, defStyle, 0);
-        mCellCountX = a.getInt(R.styleable.PagedView_cellCountX, 7);
-        mCellCountY = a.getInt(R.styleable.PagedView_cellCountY, 4);
-        a.recycle();
 
         mCustomizationType = CustomizationType.WidgetCustomization;
         mWidgetPages = new ArrayList<ArrayList<AppWidgetProviderInfo>>();
@@ -176,6 +178,8 @@
         setDragSlopeThreshold(
                 r.getInteger(R.integer.config_customizationDrawerDragSlopeThreshold) / 100.0f);
 
+        mMaxCellCountY = r.getInteger(R.integer.customization_drawer_contents_maxCellCountY);
+
         setVisibility(View.GONE);
         setSoundEffectsEnabled(false);
         setupWorkspaceLayout();
@@ -188,29 +192,44 @@
     }
 
     @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+    protected void onMeasure(int widthSpec, int heightSpec) {
+        // Base the size of this control on the size of the All Apps view.
+        final int cellCountX = mAllAppsPagedView.getCellCountX();
+        final int cellCountY = Math.min(mAllAppsPagedView.getCellCountY(), mMaxCellCountY);
 
-        final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
-        final int heightSize = MeasureSpec.getSize(heightMeasureSpec);
+        if (cellCountX != mCellCountX || cellCountY != mCellCountY) {
+            mCellCountX = cellCountX;
+            mCellCountY = cellCountY;
 
-        if (mFirstMeasure) {
-            mFirstMeasure = false;
-
-            // TODO: actually calculate mCellCountX/mCellCountY as some function of
-            // widthSize and heightSize
-            //mCellCountX = ?
-            //mCellCountY = ?
-
-            // Since mCellCountX/mCellCountY changed, we need to update the pages
-            invalidatePageData();
-
-            // Create a dummy page and set it up to find out the content width (used by our parent)
+            // Create a dummy page and set it up to determine our size.
+            // The size is based on the app shortcuts tab having the same dimensions as All Apps.
             PagedViewCellLayout layout = new PagedViewCellLayout(getContext());
             setupPage(layout);
             mPageContentWidth = layout.getContentWidth();
+            mPageContentHeight = layout.getContentHeight();
             mMinPageWidth = layout.getWidthBeforeFirstLayout();
         }
+        if (mPageContentHeight > 0) {
+            // Lock our height to the size of the page content
+            final int h = mPageContentHeight + mPageLayoutPaddingTop + mPageLayoutPaddingBottom;
+            heightSpec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY);
+        }
+        super.onMeasure(widthSpec, heightSpec);
+        mFirstMeasure = false;
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        if (mFirstLayout) {
+            invalidatePageData();
+
+            // invalidatePageData() is what causes the child pages to be created. We need the
+            // children to be measured before layout, so force a new measure here.
+            measure(MeasureSpec.makeMeasureSpec(getMeasuredWidth(), MeasureSpec.EXACTLY),
+                    MeasureSpec.makeMeasureSpec(getMeasuredHeight(), MeasureSpec.EXACTLY));
+        }
+        super.onLayout(changed, left, top, right, bottom);
+        mFirstLayout = false;
     }
 
     public void setLauncher(Launcher launcher) {
@@ -219,6 +238,10 @@
         mPackageManager = context.getPackageManager();
     }
 
+    public void setAllAppsPagedView(AllAppsPagedView view) {
+        mAllAppsPagedView = view;
+    }
+
     /**
      * Sets the list of applications that launcher has loaded.
      */
diff --git a/src/com/android/launcher2/CustomizeTrayTabHost.java b/src/com/android/launcher2/CustomizeTrayTabHost.java
index ab50cf1..c6a39b3 100644
--- a/src/com/android/launcher2/CustomizeTrayTabHost.java
+++ b/src/com/android/launcher2/CustomizeTrayTabHost.java
@@ -44,9 +44,14 @@
 
     private boolean mFirstLayout = true;
 
+    // How much of the vertical space this control should attempt to fill
+    private float mVerticalFillPercentage;
+
     private final LayoutInflater mInflater;
     private Context mContext;
 
+    private CustomizePagedView mCustomizePagedView;
+
     public CustomizeTrayTabHost(Context context, AttributeSet attrs) {
         super(context, attrs);
         mContext = context;
@@ -55,58 +60,66 @@
 
     @Override
     protected void onFinishInflate() {
+        final Resources res = getResources();
+
         setup();
 
-        final CustomizePagedView customizePagedView =
+        mCustomizePagedView =
             (CustomizePagedView) findViewById(R.id.customization_drawer_tab_contents);
 
         // Configure tabs
         TabContentFactory contentFactory = new TabContentFactory() {
             public View createTabContent(String tag) {
-                return customizePagedView;
+                return mCustomizePagedView;
             }
         };
 
         TextView tabView;
         TabWidget tabWidget = (TabWidget) findViewById(com.android.internal.R.id.tabs);
 
-        tabView = (TextView) mInflater.inflate(R.layout.tab_widget_indicator, tabWidget, false);
+        tabView = (TextView) mInflater.inflate(
+                R.layout.customize_tab_widget_indicator, tabWidget, false);
         tabView.setText(mContext.getString(R.string.widgets_tab_label));
         addTab(newTabSpec(WIDGETS_TAG)
                 .setIndicator(tabView).setContent(contentFactory));
-        tabView = (TextView) mInflater.inflate(R.layout.tab_widget_indicator, tabWidget, false);
+        tabView = (TextView) mInflater.inflate(
+                R.layout.customize_tab_widget_indicator, tabWidget, false);
         tabView.setText(mContext.getString(R.string.applications_tab_label));
         addTab(newTabSpec(APPLICATIONS_TAG)
                 .setIndicator(tabView).setContent(contentFactory));
-        tabView = (TextView) mInflater.inflate(R.layout.tab_widget_indicator, tabWidget, false);
+        tabView = (TextView) mInflater.inflate(
+                R.layout.customize_tab_widget_indicator, tabWidget, false);
         tabView.setText(mContext.getString(R.string.wallpapers_tab_label));
         addTab(newTabSpec(WALLPAPERS_TAG)
                 .setIndicator(tabView).setContent(contentFactory));
-        tabView = (TextView) mInflater.inflate(R.layout.tab_widget_indicator, tabWidget, false);
+        tabView = (TextView) mInflater.inflate(
+                R.layout.customize_tab_widget_indicator, tabWidget, false);
         tabView.setText(mContext.getString(R.string.shortcuts_tab_label));
         addTab(newTabSpec(SHORTCUTS_TAG)
                 .setIndicator(tabView).setContent(contentFactory));
 
+        mVerticalFillPercentage =
+                res.getInteger(R.integer.customization_drawer_verticalFillPercentage) / 100f;
+
         setOnTabChangedListener(new OnTabChangeListener() {
             public void onTabChanged(String tabId) {
                 final CustomizePagedView.CustomizationType newType =
                     getCustomizeFilterForTabTag(tabId);
-                if (newType != customizePagedView.getCustomizationFilter()) {
+                if (newType != mCustomizePagedView.getCustomizationFilter()) {
                     // animate the changing of the tab content by fading pages in and out
-                    final Resources res = getResources();
                     final int duration = res.getInteger(R.integer.config_tabTransitionDuration);
-                    final float alpha = customizePagedView.getAlpha();
-                    ValueAnimator alphaAnim = ObjectAnimator.ofFloat(customizePagedView,
+                    final float alpha = mCustomizePagedView.getAlpha();
+                    ValueAnimator alphaAnim = ObjectAnimator.ofFloat(mCustomizePagedView,
                             "alpha", alpha, 0.0f);
                     alphaAnim.setDuration(duration);
                     alphaAnim.addListener(new AnimatorListenerAdapter() {
                         @Override
                         public void onAnimationEnd(Animator animation) {
-                            customizePagedView.setCustomizationFilter(newType);
+                            mCustomizePagedView.setCustomizationFilter(newType);
 
-                            final float alpha = customizePagedView.getAlpha();
+                            final float alpha = mCustomizePagedView.getAlpha();
                             ValueAnimator alphaAnim = ObjectAnimator.ofFloat(
-                                    customizePagedView, "alpha", alpha, 1.0f);
+                                    mCustomizePagedView, "alpha", alpha, 1.0f);
                             alphaAnim.setDuration(duration);
                             alphaAnim.start();
                         }
@@ -138,6 +151,22 @@
     }
 
     @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+
+        // If there's extra room, try to grow to fill it
+        if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) {
+            final int availableHeight = MeasureSpec.getSize(heightMeasureSpec);
+            final int finalHeight = Math.max(getMeasuredHeight(),
+                        (int) (availableHeight * mVerticalFillPercentage));
+
+            // Measure a second time with EXACTLY so that we get sized correctly
+            heightMeasureSpec = MeasureSpec.makeMeasureSpec(finalHeight, MeasureSpec.EXACTLY);
+            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        }
+    }
+
+    @Override
     protected void onLayout(boolean changed, int l, int t, int r, int b) {
         if (mFirstLayout) {
             mFirstLayout = false;
diff --git a/src/com/android/launcher2/IconCache.java b/src/com/android/launcher2/IconCache.java
index 7e37afe..5c07cfb 100644
--- a/src/com/android/launcher2/IconCache.java
+++ b/src/com/android/launcher2/IconCache.java
@@ -24,6 +24,7 @@
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.drawable.Drawable;
+import android.util.Pair;
 import android.util.DisplayMetrics;
 
 import java.util.HashMap;
@@ -187,4 +188,16 @@
         }
         return entry;
     }
+
+    public HashMap<ComponentName,Bitmap> getAllIcons() {
+        synchronized (mCache) {
+            HashMap<ComponentName,Bitmap> set = new HashMap<ComponentName,Bitmap>();
+            int i = 0;
+            for (ComponentName cn : mCache.keySet()) {
+                final CacheEntry e = mCache.get(cn);
+                set.put(cn, e.icon);
+            }
+            return set;
+        }
+    }
 }
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 9dfed69..5cf8e9c 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -933,6 +933,7 @@
         if (mCustomizePagedView != null) {
             mCustomizePagedView.setLauncher(this);
             mCustomizePagedView.setDragController(dragController);
+            mCustomizePagedView.setAllAppsPagedView(mAllAppsPagedView);
         } else {
              ImageView hotseatLeft = (ImageView) findViewById(R.id.hotseat_left);
              hotseatLeft.setContentDescription(mHotseatLabels[0]);
@@ -2229,11 +2230,7 @@
                 mWorkspace.setAllowLongPress(false);
                 mWorkspace.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS,
                         HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
-                if (LauncherApplication.isScreenLarge()) {
-                    addItems();
-                } else {
-                    startWallpaper();
-                }
+                addItems();
             } else {
                 if (!(itemUnderLongClick instanceof Folder)) {
                     // User long pressed on an item
@@ -2969,9 +2966,8 @@
             // Change the state *after* we've called all the transition code
             mState = State.ALL_APPS;
         } else {
-            View appsCustomizePane = findViewById(R.id.apps_customize_pane);
             cameraZoomOut(State.APPS_CUSTOMIZE, animated, false);
-            appsCustomizePane.requestFocus();
+            mAppsCustomizeTabHost.requestFocus();
 
             // Change the state *after* we've called all the transition code
             mState = State.APPS_CUSTOMIZE;
@@ -3156,22 +3152,34 @@
     }
 
     private void updateGlobalSearchIcon() {
-        if (LauncherApplication.isScreenLarge()) {
-            final View searchButton = findViewById(R.id.search_button);
-            final View searchDivider = findViewById(R.id.search_divider);
+        final ImageView searchButton = (ImageView) findViewById(R.id.search_button);
+        final View searchDivider = findViewById(R.id.search_divider);
 
-            final SearchManager searchManager =
-                    (SearchManager) getSystemService(Context.SEARCH_SERVICE);
-            ComponentName activityName = searchManager.getGlobalSearchActivity();
-            if (activityName != null) {
+        final SearchManager searchManager =
+                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
+        ComponentName activityName = searchManager.getGlobalSearchActivity();
+        if (activityName != null) {
+            // In landscape mode on the Phone UI, we only have enough space to show the magnifying
+            // glass icon
+            boolean iconLoaded = false;
+            if (!LauncherApplication.isScreenLarge()) {
+                // TODO-APPS_CUSTOMIZE: Remove when the QSB fixes itself?
+                int orientation = getResources().getConfiguration().orientation;
+                if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
+                    searchButton.setImageResource(R.drawable.ic_generic_search);
+                    iconLoaded = true;
+                    sGlobalSearchIcon = null;
+                }
+            }
+            if (!iconLoaded) {
                 sGlobalSearchIcon = updateButtonWithIconFromExternalActivity(
                         R.id.search_button, activityName, R.drawable.ic_generic_search);
-                searchButton.setVisibility(View.VISIBLE);
-                searchDivider.setVisibility(View.VISIBLE);
-            } else {
-                searchButton.setVisibility(View.GONE);
-                searchDivider.setVisibility(View.GONE);
             }
+            searchButton.setVisibility(View.VISIBLE);
+            searchDivider.setVisibility(View.VISIBLE);
+        } else {
+            searchButton.setVisibility(View.GONE);
+            searchDivider.setVisibility(View.GONE);
         }
     }
 
@@ -3180,21 +3188,19 @@
     }
 
     private void updateVoiceSearchIcon() {
-        if (LauncherApplication.isScreenLarge()) {
-            final View searchDivider = findViewById(R.id.search_divider);
-            final View voiceButton = findViewById(R.id.voice_button);
+        final View searchDivider = findViewById(R.id.search_divider);
+        final View voiceButton = findViewById(R.id.voice_button);
 
-            Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH);
-            ComponentName activityName = intent.resolveActivity(getPackageManager());
-            if (activityName != null) {
-                sVoiceSearchIcon = updateButtonWithIconFromExternalActivity(
-                        R.id.voice_button, activityName, R.drawable.ic_voice_search);
-                searchDivider.setVisibility(View.VISIBLE);
-                voiceButton.setVisibility(View.VISIBLE);
-            } else {
-                searchDivider.setVisibility(View.GONE);
-                voiceButton.setVisibility(View.GONE);
-            }
+        Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH);
+        ComponentName activityName = intent.resolveActivity(getPackageManager());
+        if (activityName != null) {
+            sVoiceSearchIcon = updateButtonWithIconFromExternalActivity(
+                    R.id.voice_button, activityName, R.drawable.ic_voice_search);
+            searchDivider.setVisibility(View.VISIBLE);
+            voiceButton.setVisibility(View.VISIBLE);
+        } else {
+            searchDivider.setVisibility(View.GONE);
+            voiceButton.setVisibility(View.GONE);
         }
     }
 
@@ -3211,7 +3217,7 @@
         // Find the app market activity by resolving an intent.
         // (If multiple app markets are installed, it will return the ResolverActivity.)
         ComponentName activityName = intent.resolveActivity(getPackageManager());
-        if (activityName != null) {
+        if (activityName != null && LauncherApplication.isScreenLarge()) {
             mAppMarketIntent = intent;
             sAppMarketIcon = updateTextButtonWithIconFromExternalActivity(
                     R.id.market_button, activityName, R.drawable.app_market_generic);
@@ -3241,12 +3247,11 @@
         Dialog createDialog() {
             mAdapter = new AddAdapter(Launcher.this);
 
-            final AlertDialog.Builder builder = new AlertDialog.Builder(Launcher.this);
+            final AlertDialog.Builder builder = new AlertDialog.Builder(Launcher.this, 
+                    AlertDialog.THEME_HOLO_DARK);
             builder.setTitle(getString(R.string.menu_item_add_item));
             builder.setAdapter(mAdapter, this);
 
-            builder.setInverseBackgroundForced(true);
-
             AlertDialog dialog = builder.create();
             dialog.setOnCancelListener(this);
             dialog.setOnDismissListener(this);
@@ -3261,6 +3266,8 @@
         }
 
         public void onDismiss(DialogInterface dialog) {
+            mWaitingForResult = false;
+            cleanup();
         }
 
         private void cleanup() {
@@ -3278,22 +3285,26 @@
             Resources res = getResources();
             cleanup();
 
-            switch (which) {
+            AddAdapter.ListItem item = (AddAdapter.ListItem) mAdapter.getItem(which);
+            switch (item.actionTag) {
                 case AddAdapter.ITEM_SHORTCUT: {
                     pickShortcut();
                     break;
                 }
-
-                case AddAdapter.ITEM_APPWIDGET: {
-                    int appWidgetId = Launcher.this.mAppWidgetHost.allocateAppWidgetId();
-
-                    Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK);
-                    pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
-                    // start the pick activity
-                    startActivityForResult(pickIntent, REQUEST_PICK_APPWIDGET);
+                case AddAdapter.ITEM_APPLICATION: {
+                    if (mAppsCustomizeTabHost != null) {
+                        mAppsCustomizeTabHost.selectAppsTab();
+                    }
+                    showAllApps(true);
                     break;
                 }
-
+                case AddAdapter.ITEM_APPWIDGET: {
+                    if (mAppsCustomizeTabHost != null) {
+                        mAppsCustomizeTabHost.selectWidgetsTab();
+                    }
+                    showAllApps(true);
+                    break;
+                }
                 case AddAdapter.ITEM_WALLPAPER: {
                     startWallpaper();
                     break;
diff --git a/src/com/android/launcher2/PagedViewCellLayout.java b/src/com/android/launcher2/PagedViewCellLayout.java
index 15b155f..0ae7a59 100644
--- a/src/com/android/launcher2/PagedViewCellLayout.java
+++ b/src/com/android/launcher2/PagedViewCellLayout.java
@@ -286,11 +286,17 @@
     }
 
     int getContentHeight() {
-        return mCellCountY * mCellHeight + (mCellCountY - 1) * Math.max(0, mHeightGap);
+        if (mCellCountY > 0) {
+            return mCellCountY * mCellHeight + (mCellCountY - 1) * Math.max(0, mHeightGap);
+        }
+        return 0;
     }
 
     int getWidthBeforeFirstLayout() {
-        return mCellCountX * mCellWidth + (mCellCountX - 1) * Math.max(0, mWidthGap);
+        if (mCellCountX > 0) {
+            return mCellCountX * mCellWidth + (mCellCountX - 1) * Math.max(0, mWidthGap);
+        }
+        return 0;
     }
 
     @Override
diff --git a/src/com/android/launcher2/PagedViewIcon.java b/src/com/android/launcher2/PagedViewIcon.java
index 306ff9e..30f0b1d 100644
--- a/src/com/android/launcher2/PagedViewIcon.java
+++ b/src/com/android/launcher2/PagedViewIcon.java
@@ -31,7 +31,6 @@
 import android.os.Message;
 import android.util.AttributeSet;
 import android.view.KeyEvent;
-import android.view.View;
 import android.widget.Checkable;
 
 import com.android.launcher.R;
diff --git a/src/com/android/launcher2/RocketLauncher.java b/src/com/android/launcher2/RocketLauncher.java
new file mode 100644
index 0000000..1c6510f
--- /dev/null
+++ b/src/com/android/launcher2/RocketLauncher.java
@@ -0,0 +1,426 @@
+/*);
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// TODO:
+// background stellar matter:
+//  - add some slow horizontal parallax motion, or perhaps veeeeery gradual outward drift
+
+package com.android.launcher2;
+
+import android.animation.AnimatorSet;
+import android.animation.PropertyValuesHolder;
+import android.animation.ObjectAnimator;
+import android.animation.TimeAnimator;
+import android.app.Activity;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.support.v13.dreams.BasicDream;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.Point;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.os.Handler;
+import android.util.AttributeSet;
+import android.util.DisplayMetrics;
+import android.util.Pair;
+import android.view.Gravity;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import java.util.HashMap;
+import java.util.Random;
+
+import com.android.launcher.R;
+
+public class RocketLauncher extends BasicDream {
+    public static final boolean ROCKET_LAUNCHER = true;
+
+    public static class Board extends FrameLayout
+    {
+        public static final boolean FIXED_STARS = true;
+        public static final boolean FLYING_STARS = true;
+        public static final int NUM_ICONS = 20;
+
+        public static final float MANEUVERING_THRUST_SCALE = 0.1f; // tenth speed
+        private boolean mManeuveringThrusters = false;
+        private float mSpeedScale = 1.0f;
+
+        public static final int LAUNCH_ZOOM_TIME = 400; // ms
+
+        HashMap<ComponentName, Bitmap> mIcons;
+        ComponentName[] mComponentNames;
+
+        static Random sRNG = new Random();
+
+        static float lerp(float a, float b, float f) {
+            return (b-a)*f + a;
+        }
+
+        static float randfrange(float a, float b) {
+            return lerp(a, b, sRNG.nextFloat());
+        }
+
+        static int randsign() {
+            return sRNG.nextBoolean() ? 1 : -1;
+        }
+
+        static <E> E pick(E[] array) {
+            if (array.length == 0) return null;
+            return array[sRNG.nextInt(array.length)];
+        }
+
+        public class FlyingIcon extends ImageView {
+            public static final float VMAX = 1000.0f;
+            public static final float VMIN = 100.0f;
+            public static final float ANGULAR_VMAX = 45f;
+            public static final float ANGULAR_VMIN = 0f;
+            public static final float SCALE_MIN = 0.5f;
+            public static final float SCALE_MAX = 4f;
+
+            public float v, vr;
+
+            public final float[] hsv = new float[3];
+
+            public float angle, anglex, angley;
+            public float fuse;
+            public float dist;
+            public float endscale;
+            public float boardCenterX, boardCenterY;
+
+            public ComponentName component;
+
+            public FlyingIcon(Context context, AttributeSet as) {
+                super(context, as);
+                setLayerType(View.LAYER_TYPE_HARDWARE, null);
+
+                setBackgroundResource(R.drawable.flying_icon_bg);
+                //android.util.Log.d("RocketLauncher", "ctor: " + this);
+                hsv[1] = 1f;
+                hsv[2] = 1f;
+            }
+
+            @Override
+            public boolean onTouchEvent(MotionEvent event) {
+                if (!mManeuveringThrusters || component == null) {
+                    return false;
+                }
+                if (getAlpha() < 0.5f) {
+                    setPressed(false);
+                    return false;
+                }
+
+                switch (event.getAction()) {
+                    case MotionEvent.ACTION_DOWN:
+                        setPressed(true);
+                        Board.this.resetWarpTimer();
+                        break;
+                    case MotionEvent.ACTION_MOVE:
+                        final Rect hit = new Rect();
+                        final Point offset = new Point();
+                        getGlobalVisibleRect(hit, offset);
+                        final int globx = (int) event.getX() + offset.x;
+                        final int globy = (int) event.getY() + offset.y;
+                        setPressed(hit.contains(globx, globy));
+                        Board.this.resetWarpTimer();
+                        break;
+                    case MotionEvent.ACTION_UP:
+                        if (isPressed()) {
+                            setPressed(false);
+                            postDelayed(new Runnable() {
+                                public void run() {
+                                    try {
+                                        getContext().startActivity(new Intent(Intent.ACTION_MAIN)
+                                            .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+                                            .setComponent(component));
+                                    } catch (android.content.ActivityNotFoundException e) {
+                                    } catch (SecurityException e) {
+                                    }
+                                }
+                            }, LAUNCH_ZOOM_TIME);
+                            endscale = 0;
+                            AnimatorSet s = new AnimatorSet();
+                            s.playTogether(
+                                ObjectAnimator.ofFloat(this, "scaleX", 15f),
+                                ObjectAnimator.ofFloat(this, "scaleY", 15f),
+                                ObjectAnimator.ofFloat(this, "alpha", 0f)
+                            );
+
+                            // make sure things are still moving until the very last instant the
+                            // activity is visible
+                            s.setDuration((int)(LAUNCH_ZOOM_TIME * 1.25));
+                            s.setInterpolator(new android.view.animation.AccelerateInterpolator(3));
+                            s.start();
+                        }
+                        break;
+                }
+                return true;
+            }
+
+            public String toString() {
+                return String.format("<'%s' @ (%.1f, %.1f) v=%.1f a=%.1f dist/fuse=%.1f/%.1f>",
+                        "icon", getX(), getY(), v, angle, dist, fuse);
+            }
+
+            public void randomizeIcon() {
+                component = pick(mComponentNames);
+                setImageBitmap(mIcons.get(component));
+            }
+
+            public void randomize() {
+                v = randfrange(VMIN, VMAX);
+                angle = randfrange(0, 360f);
+                anglex = (float) Math.sin(angle / 180. * Math.PI);
+                angley = (float) Math.cos(angle / 180. * Math.PI);
+                vr = randfrange(ANGULAR_VMIN, ANGULAR_VMAX) * randsign();
+                endscale = randfrange(SCALE_MIN, SCALE_MAX);
+
+                randomizeIcon();
+            }
+            public void reset() {
+                randomize();
+                boardCenterX = (Board.this.getWidth() - getWidth()) / 2;
+                boardCenterY = (Board.this.getHeight() - getHeight()) / 2;
+                setX(boardCenterX);
+                setY(boardCenterY);
+                fuse = (float) Math.max(boardCenterX, boardCenterY);
+                setRotation(180-angle);
+                setScaleX(0f);
+                setScaleY(0f);
+                dist = 0;
+                setAlpha(0f);
+            }
+            public void update(float dt) {
+                dist += v * dt;
+                setX(getX() + anglex * v * dt);
+                setY(getY() + angley * v * dt);
+                //setRotation(getRotation() + vr * dt);
+                if (endscale > 0) {
+                    float scale = lerp(0, endscale, (float) Math.sqrt(dist / fuse));
+                        setScaleX(scale * lerp(1f, 0.75f, (float) Math.pow((v-VMIN)/(VMAX-VMIN),3)));
+                        setScaleY(scale * lerp(1f, 1.5f, (float) Math.pow((v-VMIN)/(VMAX-VMIN),3)));
+                    final float q1 = fuse*0.15f;
+                    final float q4 = fuse*0.75f;
+                    if (dist < q1) {
+                        setAlpha((float) Math.sqrt(dist/q1));
+                    } else if (dist > q4) {
+                        setAlpha((dist >= fuse) ? 0f : (1f-(float)Math.pow((dist-q4)/(fuse-q4),2)));
+                    } else {
+                        setAlpha(1f);
+                    }
+                }
+            }
+        }
+
+        public class FlyingStar extends FlyingIcon {
+            public FlyingStar(Context context, AttributeSet as) {
+                super(context, as);
+            }
+            public void randomizeIcon() {
+                setImageResource(R.drawable.widget_resize_handle_bottom);
+            }
+            public void randomize() {
+                super.randomize();
+                v = randfrange(VMAX*0.75f, VMAX*2f); // fasticate
+                endscale = randfrange(1f, 2f); // ensmallen
+            }
+        }
+
+        TimeAnimator mAnim;
+
+        public Board(Context context, AttributeSet as) {
+            super(context, as);
+
+            setBackgroundColor(0xFF000000);
+
+            LauncherApplication app = (LauncherApplication)context.getApplicationContext();
+            mIcons = app.getIconCache().getAllIcons();
+            mComponentNames = new ComponentName[mIcons.size()];
+            mComponentNames = mIcons.keySet().toArray(mComponentNames);
+        }
+
+        private void reset() {
+            removeAllViews();
+
+            final ViewGroup.LayoutParams wrap = new ViewGroup.LayoutParams(
+                        ViewGroup.LayoutParams.WRAP_CONTENT,
+                        ViewGroup.LayoutParams.WRAP_CONTENT);
+
+            if (FIXED_STARS) {
+                for(int i=0; i<20; i++) {
+                    ImageView fixedStar = new ImageView(getContext(), null);
+                    fixedStar.setImageResource(R.drawable.widget_resize_handle_bottom);
+                    final float s = randfrange(0.25f, 0.75f);
+                    fixedStar.setScaleX(s);
+                    fixedStar.setScaleY(s);
+                    fixedStar.setAlpha(0.75f);
+                    addView(fixedStar, wrap);
+                    fixedStar.setX(randfrange(0, getWidth()));
+                    fixedStar.setY(randfrange(0, getHeight()));
+                }
+            }
+
+            for(int i=0; i<NUM_ICONS*2; i++) {
+                FlyingIcon nv = (FLYING_STARS && (i < NUM_ICONS))
+                    ? new FlyingStar(getContext(), null)
+                    : new FlyingIcon(getContext(), null);
+                addView(nv, wrap);
+                nv.reset();
+            }
+
+            mAnim = new TimeAnimator();
+            mAnim.setTimeListener(new TimeAnimator.TimeListener() {
+                public void onTimeUpdate(TimeAnimator animation, long totalTime, long deltaTime) {
+                    // setRotation(totalTime * 0.01f); // not as cool as you would think
+
+                    final int START_ZOOM_TIME = 3000;
+                    if (totalTime < START_ZOOM_TIME) {
+                        final float x = totalTime/(float)START_ZOOM_TIME;
+                        final float s = 1f-(float)Math.pow(x-1, 4);
+                        setScaleX(s); setScaleY(s);
+                    } else {
+                        setScaleX(1.0f); setScaleY(1.0f);
+                    }
+
+                    if (mManeuveringThrusters) {
+                        if (mSpeedScale > MANEUVERING_THRUST_SCALE) {
+                            mSpeedScale -= (2*deltaTime/1000f);
+                        }
+                        if (mSpeedScale < MANEUVERING_THRUST_SCALE) {
+                            mSpeedScale = MANEUVERING_THRUST_SCALE;
+                        }
+                    } else {
+                        if (mSpeedScale < 1.0f) {
+                            mSpeedScale += (deltaTime/1000f);
+                        }
+                        if (mSpeedScale > 1.0f) {
+                            mSpeedScale = 1.0f;
+                        }
+                    }
+
+                    for (int i=0; i<getChildCount(); i++) {
+                        View v = getChildAt(i);
+                        if (!(v instanceof FlyingIcon)) continue;
+                        FlyingIcon nv = (FlyingIcon) v;
+                        nv.update(deltaTime / 1000f * mSpeedScale);
+                        final float scaledWidth = nv.getWidth() * nv.getScaleX();
+                        final float scaledHeight = nv.getHeight() * nv.getScaleY();
+                        if (   nv.getX() + scaledWidth < 0
+                            || nv.getX() - scaledWidth > getWidth()
+                            || nv.getY() + scaledHeight < 0 
+                            || nv.getY() - scaledHeight > getHeight())
+                        {
+                            nv.reset();
+                        }
+                    }
+                }
+            });
+        }
+
+        @Override
+        protected void onAttachedToWindow() {
+            super.onAttachedToWindow();
+            setLayerType(View.LAYER_TYPE_HARDWARE, null);
+            setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
+
+            reset();
+            mAnim.start();
+        }
+
+        protected void onSizeChanged (int w, int h, int oldw, int oldh) {
+            super.onSizeChanged(w,h,oldw,oldh);
+            mAnim.cancel();
+            reset();
+            mAnim.start();
+        }
+
+
+        @Override
+        protected void onDetachedFromWindow() {
+            super.onDetachedFromWindow();
+            mAnim.cancel();
+        }
+
+        @Override
+        public boolean isOpaque() {
+            return true;
+        }
+
+        @Override
+        public boolean onInterceptTouchEvent(MotionEvent e) {
+            // we want to eat touch events ourselves if we're in warp speed
+            return (!(ROCKET_LAUNCHER && mManeuveringThrusters));
+        }
+
+        final Runnable mEngageWarp = new Runnable() {
+            @Override
+            public void run() {
+                mManeuveringThrusters = false;
+            }
+        };
+        public void resetWarpTimer() {
+            final Handler h = getHandler();
+            h.removeCallbacks(mEngageWarp);
+            h.postDelayed(mEngageWarp, 5000);
+        }
+
+        @Override
+        public boolean onTouchEvent(MotionEvent event) {
+            if (!ROCKET_LAUNCHER) {
+                return true;
+            }
+
+            if (event.getAction() == MotionEvent.ACTION_DOWN) {
+                if (!mManeuveringThrusters) {
+                    mManeuveringThrusters = true;
+                    resetWarpTimer();
+                    return true;
+                }
+            }
+
+            return false;
+        }
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+
+        DisplayMetrics metrics = new DisplayMetrics();
+        getWindowManager().getDefaultDisplay().getMetrics(metrics);
+        final int longside = metrics.widthPixels > metrics.heightPixels 
+            ? metrics.widthPixels : metrics.heightPixels;
+
+        Board b = new Board(this, null);
+        setContentView(b, new ViewGroup.LayoutParams(longside, longside));
+        b.setX((metrics.widthPixels - longside) / 2);
+        b.setY((metrics.heightPixels - longside) / 2);
+    }
+
+    @Override
+    public void onUserInteraction() {
+        if (!ROCKET_LAUNCHER) {
+            finish();
+        }
+    }
+}
diff --git a/src/com/android/launcher2/ShortcutsAdapter.java b/src/com/android/launcher2/ShortcutsAdapter.java
deleted file mode 100644
index de73c3e..0000000
--- a/src/com/android/launcher2/ShortcutsAdapter.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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 java.util.ArrayList;
-
-import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.TextView;
-
-import com.android.launcher.R;
-
-/**
- * GridView adapter to show the list of applications and shortcuts
- */
-public class ShortcutsAdapter extends ArrayAdapter<ShortcutInfo> {
-    private final LayoutInflater mInflater;
-    private final IconCache mIconCache;
-
-    public ShortcutsAdapter(Context context, ArrayList<ShortcutInfo> apps) {
-        super(context, 0, apps);
-        mInflater = LayoutInflater.from(context);
-        mIconCache = ((LauncherApplication)context.getApplicationContext()).getIconCache();
-    }
-
-    @Override
-    public View getView(int position, View convertView, ViewGroup parent) {
-        final ShortcutInfo info = getItem(position);
-
-        if (convertView == null) {
-            convertView = mInflater.inflate(R.layout.application_boxed, parent, false);
-        }
-
-        final TextView textView = (TextView) convertView;
-        textView.setCompoundDrawablesWithIntrinsicBounds(null,
-                new FastBitmapDrawable(info.getIcon(mIconCache)), null, null);
-        textView.setText(info.title);
-
-        return convertView;
-    }
-}
diff --git a/src/com/android/launcher2/Utilities.java b/src/com/android/launcher2/Utilities.java
index ba25893..04abd77 100644
--- a/src/com/android/launcher2/Utilities.java
+++ b/src/com/android/launcher2/Utilities.java
@@ -68,28 +68,6 @@
         sCanvas.setDrawFilter(new PaintFlagsDrawFilter(Paint.DITHER_FLAG,
                 Paint.FILTER_BITMAP_FLAG));
     }
-
-    static Bitmap centerToFit(Bitmap bitmap, int width, int height, Context context) {
-        final int bitmapWidth = bitmap.getWidth();
-        final int bitmapHeight = bitmap.getHeight();
-
-        if (bitmapWidth < width || bitmapHeight < height) {
-            int color = context.getResources().getColor(R.color.window_background);
-
-            Bitmap centered = Bitmap.createBitmap(bitmapWidth < width ? width : bitmapWidth,
-                    bitmapHeight < height ? height : bitmapHeight, Bitmap.Config.RGB_565);
-            centered.setDensity(bitmap.getDensity());
-            Canvas canvas = new Canvas(centered);
-            canvas.drawColor(color);
-            canvas.drawBitmap(bitmap, (width - bitmapWidth) / 2.0f, (height - bitmapHeight) / 2.0f,
-                    null);
-
-            bitmap = centered;
-        }
-
-        return bitmap;
-    }
-
     static int sColors[] = { 0xffff0000, 0xff00ff00, 0xff0000ff };
     static int sColorIndex = 0;
 
diff --git a/tests/Android.mk b/tests/Android.mk
new file mode 100644
index 0000000..84e9559
--- /dev/null
+++ b/tests/Android.mk
@@ -0,0 +1,15 @@
+# Copyright (C) 2011 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+include $(call all-subdir-makefiles)
diff --git a/tests/stress/Android.mk b/tests/stress/Android.mk
new file mode 100644
index 0000000..da22bb9
--- /dev/null
+++ b/tests/stress/Android.mk
@@ -0,0 +1,33 @@
+# Copyright (C) 2011 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+# We only want this apk build for tests.
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_JAVA_LIBRARIES := android.test.runner
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := LauncherRotationStressTest
+
+LOCAL_CERTIFICATE := shared
+
+LOCAL_INSTRUMENTATION_FOR := Launcher2
+
+LOCAL_SDK_VERSION := current
+
+include $(BUILD_PACKAGE)
diff --git a/tests/stress/AndroidManifest.xml b/tests/stress/AndroidManifest.xml
new file mode 100644
index 0000000..ce5dbe4
--- /dev/null
+++ b/tests/stress/AndroidManifest.xml
@@ -0,0 +1,31 @@
+<?xml version="2.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.launcher.stress.launcherrotation">
+
+    <uses-sdk android:minSdkVersion="8" />
+
+    <application>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation
+        android:name="android.test.InstrumentationTestRunner"
+        android:targetPackage="com.android.launcher"
+        android:label="Rotation stress test using Launcher2">
+    </instrumentation>
+</manifest>
diff --git a/tests/stress/src/com/android/launcher2/stress/LauncherRotationStressTest.java b/tests/stress/src/com/android/launcher2/stress/LauncherRotationStressTest.java
new file mode 100644
index 0000000..3d787f2
--- /dev/null
+++ b/tests/stress/src/com/android/launcher2/stress/LauncherRotationStressTest.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher2.stress;
+
+
+import com.android.launcher2.Launcher;
+
+import android.content.pm.ActivityInfo;
+import android.os.SystemClock;
+import android.test.ActivityInstrumentationTestCase2;
+import android.test.TimedTest;
+import android.util.Log;
+
+/**
+ * Run rotation stress test using Launcher2 for 50 iterations.
+ */
+public class LauncherRotationStressTest extends ActivityInstrumentationTestCase2<Launcher> {
+
+    private static final int NUM_ITERATIONS = 50;
+    private static final String LOG_TAG = "LauncherRotationStressTest";
+
+    public LauncherRotationStressTest() {
+        super(Launcher.class);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    @TimedTest(includeDetailedStats=true)
+    public void testLauncherRotationStress() throws Exception {
+        Launcher launcher = getActivity();
+        for (int i = 0; i < NUM_ITERATIONS; i++) {
+            Log.i(LOG_TAG, "Starting LauncherRotationStressTest " + (i + 1) + " of " +
+                  NUM_ITERATIONS);
+            getInstrumentation().waitForIdleSync();
+            SystemClock.sleep(500);
+            launcher.setRequestedOrientation(
+                    ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
+            getInstrumentation().waitForIdleSync();
+            SystemClock.sleep(500);
+            launcher.setRequestedOrientation(
+                    ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+            Log.i(LOG_TAG, "Finished LauncherRotationStressTest " + (i + 1) + " of " +
+                  NUM_ITERATIONS);
+        }
+    }
+}