merge in jb-release history after reset to jb-dev
diff --git a/res/drawable-hdpi/gardening_crosshairs.png b/res/drawable-hdpi/gardening_crosshairs.png
deleted file mode 100644
index d2d263c..0000000
--- a/res/drawable-hdpi/gardening_crosshairs.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/gardening_crosshairs.png b/res/drawable-mdpi/gardening_crosshairs.png
deleted file mode 100644
index 9d9f3c1..0000000
--- a/res/drawable-mdpi/gardening_crosshairs.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/ic_no_applications.png b/res/drawable-sw600dp-hdpi/ic_no_applications.png
deleted file mode 100644
index 933d091..0000000
--- a/res/drawable-sw600dp-hdpi/ic_no_applications.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/tab_selected_focused_holo.9.png b/res/drawable-sw600dp-hdpi/tab_selected_focused_holo.9.png
deleted file mode 100644
index 1ba35d5..0000000
--- a/res/drawable-sw600dp-hdpi/tab_selected_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/tab_selected_holo.9.png b/res/drawable-sw600dp-hdpi/tab_selected_holo.9.png
deleted file mode 100644
index ef913cc..0000000
--- a/res/drawable-sw600dp-hdpi/tab_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/tab_selected_pressed_focused_holo.9.png b/res/drawable-sw600dp-hdpi/tab_selected_pressed_focused_holo.9.png
deleted file mode 100644
index d7e9688..0000000
--- a/res/drawable-sw600dp-hdpi/tab_selected_pressed_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/tab_selected_pressed_holo.9.png b/res/drawable-sw600dp-hdpi/tab_selected_pressed_holo.9.png
deleted file mode 100644
index b8b1fcf..0000000
--- a/res/drawable-sw600dp-hdpi/tab_selected_pressed_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/ic_home_add_holo_dark.png b/res/drawable-sw600dp-mdpi/ic_home_add_holo_dark.png
deleted file mode 100644
index 7f04589..0000000
--- a/res/drawable-sw600dp-mdpi/ic_home_add_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/ic_no_applications.png b/res/drawable-sw600dp-mdpi/ic_no_applications.png
deleted file mode 100644
index a4f695a..0000000
--- a/res/drawable-sw600dp-mdpi/ic_no_applications.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/tab_selected_focused_holo.9.png b/res/drawable-sw600dp-mdpi/tab_selected_focused_holo.9.png
deleted file mode 100644
index 782ae35..0000000
--- a/res/drawable-sw600dp-mdpi/tab_selected_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/tab_selected_holo.9.png b/res/drawable-sw600dp-mdpi/tab_selected_holo.9.png
deleted file mode 100644
index 255d072..0000000
--- a/res/drawable-sw600dp-mdpi/tab_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/tab_selected_pressed_focused_holo.9.png b/res/drawable-sw600dp-mdpi/tab_selected_pressed_focused_holo.9.png
deleted file mode 100644
index 10152bb..0000000
--- a/res/drawable-sw600dp-mdpi/tab_selected_pressed_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/tab_selected_pressed_holo.9.png b/res/drawable-sw600dp-mdpi/tab_selected_pressed_holo.9.png
deleted file mode 100644
index 822ed51..0000000
--- a/res/drawable-sw600dp-mdpi/tab_selected_pressed_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/gardening_crosshairs.png b/res/drawable-xhdpi/gardening_crosshairs.png
deleted file mode 100644
index 3168463..0000000
--- a/res/drawable-xhdpi/gardening_crosshairs.png
+++ /dev/null
Binary files differ
diff --git a/res/layout-land/launcher.xml b/res/layout-land/launcher.xml
index 0c1a195..35f1a08 100644
--- a/res/layout-land/launcher.xml
+++ b/res/layout-land/launcher.xml
@@ -27,8 +27,10 @@
         android:id="@+id/workspace"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:paddingLeft="@dimen/qsb_bar_height"
-        android:paddingRight="@dimen/button_bar_height"
+        android:paddingLeft="@dimen/workspace_left_padding"
+        android:paddingRight="@dimen/workspace_right_padding"
+        android:paddingTop="@dimen/workspace_top_padding"
+        android:paddingBottom="@dimen/workspace_bottom_padding"
         launcher:defaultScreen="2"
         launcher:cellCountX="@integer/cell_count_x"
         launcher:cellCountY="@integer/cell_count_y"
diff --git a/res/layout-port/launcher.xml b/res/layout-port/launcher.xml
index f6ff2e8..6030382 100644
--- a/res/layout-port/launcher.xml
+++ b/res/layout-port/launcher.xml
@@ -44,8 +44,10 @@
         android:id="@+id/workspace"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:paddingTop="@dimen/qsb_bar_height_inset"
-        android:paddingBottom="@dimen/button_bar_height"
+        android:paddingLeft="@dimen/workspace_left_padding"
+        android:paddingRight="@dimen/workspace_right_padding"
+        android:paddingTop="@dimen/workspace_top_padding"
+        android:paddingBottom="@dimen/workspace_bottom_padding"
         launcher:defaultScreen="2"
         launcher:cellCountX="@integer/cell_count_x"
         launcher:cellCountY="@integer/cell_count_y"
diff --git a/res/layout-sw720dp/workspace.xml b/res/layout-sw720dp/workspace.xml
index 327afaf..5658a4b 100644
--- a/res/layout-sw720dp/workspace.xml
+++ b/res/layout-sw720dp/workspace.xml
@@ -19,7 +19,10 @@
 <com.android.launcher2.Workspace
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher"
-    android:paddingTop="@dimen/workspace_content_large_only_top_margin"
+    android:paddingLeft="@dimen/workspace_left_padding"
+    android:paddingRight="@dimen/workspace_right_padding"
+    android:paddingTop="@dimen/workspace_top_padding"
+    android:paddingBottom="@dimen/workspace_bottom_padding"
     launcher:defaultScreen="2"
     launcher:pageSpacing="@dimen/workspace_page_spacing">
       <include android:id="@+id/cell1" layout="@layout/workspace_screen" />
diff --git a/res/layout-sw720dp/workspace_screen.xml b/res/layout-sw720dp/workspace_screen.xml
deleted file mode 100644
index 52f9def..0000000
--- a/res/layout-sw720dp/workspace_screen.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<com.android.launcher2.CellLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher"
-
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:paddingLeft="@dimen/workspace_left_padding"
-    android:paddingRight="@dimen/workspace_right_padding"
-    android:paddingTop="@dimen/workspace_top_padding"
-    android:paddingBottom="@dimen/workspace_bottom_padding"
-    android:hapticFeedbackEnabled="false"
-
-    launcher:cellWidth="@dimen/workspace_cell_width"
-    launcher:cellHeight="@dimen/workspace_cell_height"
-    launcher:widthGap="@dimen/workspace_width_gap"
-    launcher:heightGap="@dimen/workspace_height_gap"
-    launcher:maxGap="@dimen/workspace_max_gap" />
diff --git a/res/layout/workspace_screen.xml b/res/layout/workspace_screen.xml
index 23e1def..d6e66f6 100644
--- a/res/layout/workspace_screen.xml
+++ b/res/layout/workspace_screen.xml
@@ -17,16 +17,17 @@
 <com.android.launcher2.CellLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher"
-    style="@style/WorkspaceScreen"
 
-    android:paddingLeft="@dimen/workspace_left_padding"
-    android:paddingRight="@dimen/workspace_right_padding"
-    android:paddingTop="@dimen/workspace_top_padding"
-    android:paddingBottom="@dimen/workspace_bottom_padding"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:paddingLeft="@dimen/cell_layout_left_padding"
+    android:paddingRight="@dimen/cell_layout_right_padding"
+    android:paddingTop="@dimen/cell_layout_top_padding"
+    android:paddingBottom="@dimen/cell_layout_bottom_padding"
     android:hapticFeedbackEnabled="false"
 
     launcher:cellWidth="@dimen/workspace_cell_width"
     launcher:cellHeight="@dimen/workspace_cell_height"
     launcher:widthGap="@dimen/workspace_width_gap"
     launcher:heightGap="@dimen/workspace_height_gap"
-    launcher:maxGap="@dimen/workspace_max_gap" />
+    launcher:maxGap="@dimen/workspace_max_gap" />
\ No newline at end of file
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 9d33b97..4d8b381 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Kortpaaie"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Legstukke"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Muurpapier"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Geen spasie op tuisskerms oor nie."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Geen meer spasie op tuisskerm nie."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Geen plek meer op die warmlaai nie."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Hierdie legstuk is te groot vir die hoofposisie."</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index d3bd40f..375ba31 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"አቋራጮች"</string>
     <string name="group_widgets" msgid="6704978494073105844">"ፍርግሞች"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"ልጣፍ"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"የመነሻ ማያ ገጾችህ ላይ ተጨማሪ ቦታ የለም።"</string>
     <string name="out_of_space" msgid="8365249326091984698">"በዚህ መነሻ ማያ ላይ ምንም ቦታ የለም።"</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"በመትከያ ቦታው ላይ ተጨማሪ ክፍል የለም።"</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"ይህ ፍርግም ለማስቀመጫው በጣም ትልቅ ነው።"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index be0f2b0..d86eeb8 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"الاختصارات"</string>
     <string name="group_widgets" msgid="6704978494073105844">"الأدوات"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"الخلفيات"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"ليس هناك مساحة أخرى في الشاشات الرئيسية."</string>
     <string name="out_of_space" msgid="8365249326091984698">"ليس هناك مساحة أخرى في هذه الشاشة الرئيسية."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"ليست هناك مساحة أخرى في منطقة الإرساء القابلة للتخصيص."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"حجم هذه الأداة كبير للغاية بحيث لا يتسع له الموقع المهم."</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index ebc4b02..d04ee34 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Хуткі доступ"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Віджэты"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Шпалеры"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"На галоўных экранах больш няма месца."</string>
     <string name="out_of_space" msgid="8365249326091984698">"На Галоўнай старонцы больш няма месца."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"На Hotseat больш няма месца."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Гэты віджэт занадта вялікі для hotseat."</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index d76931c..dc0814a 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Преки пътища"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Приспособления"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Тапети"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"На началните ви екрани няма повече място."</string>
     <string name="out_of_space" msgid="8365249326091984698">"На този начален екран няма повече място."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"В трамплина няма повече място."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Това приспособление е твърде голямо за трамплина."</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 0530068..a71b9f1 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Dreceres"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Widgets"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Empaperats"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"No queda espai a les pantalles d\'inici."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Ja no queda espai en aquesta pantalla Inici."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"No queda espai al hotseat."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Aquest widget és massa gran per al hotseat."</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index ad1ce99..fb61ec7 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Zástupce"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Widgety"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Tapety"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Na plochách již není místo."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Na této ploše již není místo."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"V části hotseat již není místo."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Widget je pro hotseat příliš velký."</string>
@@ -95,9 +94,9 @@
     <string name="workspace_cling_move_item" msgid="791013895761065070">"Sem můžete umístit své oblíbené aplikace."</string>
     <string name="workspace_cling_open_all_apps" msgid="2459977609848572588">"Chcete-li zobrazit všechny aplikace, dotkněte se kruhu."</string>
     <string name="all_apps_cling_title" msgid="2559734712581447107">"Vybrat několik aplikací"</string>
-    <string name="all_apps_cling_add_item" msgid="5665035103260318891">"Chcete-li na plochu přidat aplikaci, dotkněte se jí a podržte."</string>
+    <string name="all_apps_cling_add_item" msgid="5665035103260318891">"Chcete-li na plochu přidat aplikaci, dotkněte se jí a přidržte ji."</string>
     <string name="folder_cling_title" msgid="4308949882377840953">"Uspořádat aplikace pomocí složek"</string>
-    <string name="folder_cling_move_item" msgid="270598675060435169">"Chcete-li aplikaci přesunout, dotkněte se jí a podržte ji."</string>
+    <string name="folder_cling_move_item" msgid="270598675060435169">"Chcete-li aplikaci přesunout, dotkněte se jí a přidržte ji."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Chcete-li na ploše vytvořit novou složku, přesuňte jednu aplikaci na druhou."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
     <string name="folder_opened" msgid="1262064100943801533">"Složka otevřena, rozměry <xliff:g id="WIDTH">%1$d</xliff:g> × <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 316f989..0014d40 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Genveje"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Widgets"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Tapeter"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Der er ikke mere plads på dine startskærme."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Der er ikke mere plads på Startskærmen."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Der er ikke mere plads i hotseatet."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Denne widget er for stor til hotseat."</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 865720b..92f1809 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Verknüpfungen"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Widgets"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Hintergründe"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Auf Ihrem Startbildschirm ist kein Platz mehr vorhanden."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Auf dem Startbildschirm ist kein Platz mehr vorhanden."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Auf der App-Leiste ist kein Platz mehr vorhanden."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Dieses Widget ist zu groß für die App-Leiste."</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 9545425..2d12ca9 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Συντομεύσεις"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Γραφικά στοιχεία"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Ταπετσαρίες"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Δεν υπάρχει άλλος χώρος στις Αρχικές οθόνες σας."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Δεν υπάρχει χώρος σε αυτήν την αρχική οθόνη."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Δεν υπάρχει άλλος χώρος στο hotseat."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Αυτό το γραφικό στοιχείο είναι πολύ μεγάλο για το hotseat."</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 7005487..941fa8e 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Shortcuts"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Widgets"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Wallpaper"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"No more room on your Home screens."</string>
     <string name="out_of_space" msgid="8365249326091984698">"No more room on this Home screen."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"No more room on the hotseat."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"This widget is too large for the hot-seat."</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index f461cbd..fecbc40 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Accesos directos"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Widgets"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Papeles tapiz"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"No hay más espacio en tu pantalla principal."</string>
     <string name="out_of_space" msgid="8365249326091984698">"No hay más espacio en esta pantalla de la página principal"</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"No queda espacio en la barra de accesos directos."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Este widget es demasiado grande para el banquillo."</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 81933e3..dda1d9e 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Accesos directos"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Widgets"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Fondos de pantalla"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"No queda espacio en las pantallas del escritorio."</string>
     <string name="out_of_space" msgid="8365249326091984698">"No queda espacio en el escritorio."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"No queda espacio en la barra de accesos directos."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Este widget es demasiado grande para la barra de accesos directos."</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 46c64fa..93fd351 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Otseteed"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Vidinad"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Taustapildid"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Teie avakuvadel ei ole enam ruumi."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Sellel avalehel pole enam ruumi."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Kohandataval dokialal pole rohkem ruumi."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"See vidin on tööpunkti jaoks liiga suur."</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 51c30f2..ea42c45 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"میانبرها"</string>
     <string name="group_widgets" msgid="6704978494073105844">"ابزارک ها"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"تصاویر زمینه"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"فضای بیشتری در صفحات نمایش اصلی شما موجود نیست."</string>
     <string name="out_of_space" msgid="8365249326091984698">"اتاق دیگری در این صفحه اصلی موجود نیست."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"فضای بیشتری در صندلی داغ نیست."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"این ابزارک بیش از حد برای صندلی داغ بزرگ است."</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 7731f19..a069565 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Pikakuvakkeet"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Widgetit"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Taustakuvat"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Aloitusruuduilla ei ole enää tilaa."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Etusivulla ei ole enää tilaa."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Hotseatissa ei ole enää tilaa."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Tämä widget on liian suuri tähän paikkaan."</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 4021dbf..515ae7f 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Raccourcis"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Widgets"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Fonds d\'écran"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Vous n\'avez plus d\'espace libre sur vos écrans d\'accueil."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Plus d\'espace libre sur l\'écran d\'accueil."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Vous n\'avez plus de place sur la barre d\'accès rapide."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Ce widget est trop volumineux pour la barre d\'accès rapide."</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 8b99ed1..200382c 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"शॉर्टकट"</string>
     <string name="group_widgets" msgid="6704978494073105844">"विजेट"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"वॉलपेपर"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"आपकी मुखपृष्ठ स्‍क्रीन पर अधिक स्थान नहीं है."</string>
     <string name="out_of_space" msgid="8365249326091984698">"इस होम स्‍क्रीन पर और स्थान नहीं है."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"हॉटसीट पर अधिक स्‍थान नहीं है."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"हॉटसीट के लि‍ए यह वि‍जेट बहुत बड़ा है."</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 6a48459..4da1f90 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Prečaci"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Widgeti"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Pozadinske slike"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Na vašim početnim zaslonima više nema mjesta."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Na ovom početnom zaslonu više nema mjesta."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Na hotseatu više nema mjesta."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Ovaj je widget prevelik za hotseat."</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index a829ce2..7c5b878 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Parancsikonok"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Modulok"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Háttérképek"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Nincs több hely a Kezdőképernyőkön."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Nincs több hely ezen a főoldalon."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Nincs több hely a hotseaten."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Ez a modul túl nagy a hotseat számára."</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 5692442..f85e480 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Pintasan"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Widget"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Wallpaper"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Tidak ada ruang lagi pada layar Utama Anda."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Tidak ada ruang lagi pada layar Utama ini."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Tidak ada ruang lagi di hotseat."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Widget ini terlalu besar untuk hotseat tersebut."</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index ffad4a0..8381be2 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Scorciatoie"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Widget"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Sfondi"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Spazio nelle schermate Home esaurito."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Spazio nella schermata Home esaurito."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Spazio nell\'area hotseat esaurito."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Questo widget è troppo grande per l\'area hotseat."</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 80d795f..4978ea5 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"קיצורי דרך"</string>
     <string name="group_widgets" msgid="6704978494073105844">"רכיבי Widget"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"טפטים"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"אין יותר מקום במסכי דף הבית."</string>
     <string name="out_of_space" msgid="8365249326091984698">"אין עוד מקום במסך דף הבית הזה."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"אין יותר מקום בפס היישומים."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Widget זה גדול מדי עבור אזור העגינה."</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index ad43c34..9038cc2 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"ショートカット"</string>
     <string name="group_widgets" msgid="6704978494073105844">"ウィジェット"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"壁紙"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"ホーム画面に空きスペースがありません。"</string>
     <string name="out_of_space" msgid="8365249326091984698">"ホーム画面に空きスペースがありません。"</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"ホットシートに空きスペースがありません。"</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"このウィジェットはホットシートには大きすぎます。"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index dceb1b5..8b6e563 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"바로가기"</string>
     <string name="group_widgets" msgid="6704978494073105844">"위젯"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"배경화면"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"홈 화면에 더 이상 공간이 없습니다."</string>
     <string name="out_of_space" msgid="8365249326091984698">"홈 화면에 더 이상 공간이 없습니다."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"즐겨찾는 앱 모음에 더 이상 빈 공간이 없습니다."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"이 위젯은 핫시트에 너무 큽니다."</string>
diff --git a/res/values-land/dimens.xml b/res/values-land/dimens.xml
index 5f03510..e94d780 100644
--- a/res/values-land/dimens.xml
+++ b/res/values-land/dimens.xml
@@ -20,25 +20,28 @@
     <dimen name="toolbar_button_horizontal_padding">4dip</dimen>
 
 <!-- Workspace -->
-    <dimen name="workspace_cell_width">106dp</dimen>
-    <dimen name="workspace_cell_height">74dp</dimen>
     <dimen name="hotseat_cell_width">64dp</dimen>
     <dimen name="hotseat_cell_height">58dp</dimen>
-    <!-- Block spacing on each side of the screen -->
-    <dimen name="workspace_left_padding">0dp</dimen>
-    <dimen name="workspace_right_padding">0dp</dimen>
-    <!-- We need top/bottom padding for portals to look right, but
-         really only in spring loaded mode... -->
-    <dimen name="workspace_top_padding">0dp</dimen>
-    <dimen name="workspace_bottom_padding">0dp</dimen>
     <!-- We really want the page spacing to be the max of either the button bar
-         height or the qsb bar height -->
+     height or the qsb bar height -->
     <dimen name="workspace_page_spacing">-1dp</dimen>
     <dimen name="workspace_divider_padding_left">0dp</dimen>
     <dimen name="workspace_divider_padding_right">0dp</dimen>
     <dimen name="workspace_divider_padding_top">12dp</dimen>
     <dimen name="workspace_divider_padding_bottom">12dp</dimen>
 
+    <!-- Block spacing on each side of the screen.  And also padding
+         for the portals to look right. -->
+    <dimen name="cell_layout_left_padding">@dimen/cell_layout_left_padding_land</dimen>
+    <dimen name="cell_layout_right_padding">@dimen/cell_layout_right_padding_land</dimen>
+    <dimen name="cell_layout_top_padding">@dimen/cell_layout_top_padding_land</dimen>
+    <dimen name="cell_layout_bottom_padding">@dimen/cell_layout_bottom_padding_land</dimen>
+    <!-- Workspace padding -->
+    <dimen name="workspace_left_padding">@dimen/workspace_left_padding_land</dimen>
+    <dimen name="workspace_right_padding">@dimen/workspace_right_padding_land</dimen>
+    <dimen name="workspace_top_padding">@dimen/workspace_top_padding_land</dimen>
+    <dimen name="workspace_bottom_padding">@dimen/workspace_bottom_padding_land</dimen>
+
     <dimen name="app_icon_padding_top">6dp</dimen>
 
     <!-- height of the bottom row of controls -->
@@ -72,4 +75,10 @@
 <!-- Folders -->
     <!-- The size of the image which sits behind the preview of the folder contents -->
     <dimen name="folder_preview_size">58dp</dimen>
+
+<!-- Workspace cell size -->
+    <dimen name="workspace_cell_width">@dimen/workspace_cell_width_land</dimen>
+    <dimen name="workspace_cell_height">@dimen/workspace_cell_height_land</dimen>
+    <dimen name="workspace_width_gap">@dimen/workspace_width_gap_land</dimen>
+    <dimen name="workspace_height_gap">@dimen/workspace_height_gap_land</dimen>
 </resources>
diff --git a/res/values-land/styles.xml b/res/values-land/styles.xml
index 71ab658..f4519ab 100644
--- a/res/values-land/styles.xml
+++ b/res/values-land/styles.xml
@@ -18,12 +18,6 @@
 -->
 
 <resources>
-<!-- Workspace -->
-    <style name="WorkspaceScreen">
-        <item name="android:layout_width">wrap_content</item>
-        <item name="android:layout_height">wrap_content</item>
-    </style>
-
 <!-- Search Bar -->
     <style name="QSBBar">
         <item name="android:orientation">vertical</item>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index f1d7bca..73810a9 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Spartieji klavišai"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Valdikliai"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Darbalaukio fonai"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Pagrindiniuose ekranuose vietos nebėra."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Šiame pagrindiniame ekrane vietos nebėra."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Įtvirtintoje srityje nebėra vietos."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Šis valdiklis per didelis keliems žaidėjams."</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 6af92c5..8eaffc4 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Saīsnes"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Logrīki"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Tapetes"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Sākuma ekrānos vairs nav vietas."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Šajā sākuma ekrānā vairs nav vietas."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Režīmā Hotseat vairs nav vietas."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Šis logrīks ir pārāk liels režīmam “hotseat”."</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 361126c..b795c05 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Snarveier"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Skrivebordselementer"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Bakgrunner"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Det er ikke mer plass på startsidene dine."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Ikke nok plass på skrivebordet."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Dokksonen er full."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Denne modulen er for stor for hotseat-feltet."</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index fbd9f31..3758b55 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Sneltoetsen"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Widgets"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Achtergronden"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Er is geen ruimte meer op uw startschermen."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Er is geen ruimte meer op dit startscherm."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Er is geen ruimte meer op de hotseat."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Deze widget is te groot voor de hotseat."</string>
diff --git a/res/values-port/dimens.xml b/res/values-port/dimens.xml
index b7e8170..969d335 100644
--- a/res/values-port/dimens.xml
+++ b/res/values-port/dimens.xml
@@ -22,12 +22,18 @@
     <dimen name="qsb_padding_right">3dp</dimen>
 
 <!-- Workspace -->
-    <dimen name="workspace_left_padding">0dp</dimen>
-    <dimen name="workspace_right_padding">0dp</dimen>
     <!-- Block spacing on each side of the screen.  And also padding
          for the portals to look right. -->
-    <dimen name="workspace_top_padding">6dp</dimen>
-    <dimen name="workspace_bottom_padding">0dp</dimen>
+    <dimen name="cell_layout_left_padding">@dimen/cell_layout_left_padding_port</dimen>
+    <dimen name="cell_layout_right_padding">@dimen/cell_layout_right_padding_port</dimen>
+    <dimen name="cell_layout_top_padding">@dimen/cell_layout_top_padding_port</dimen>
+    <dimen name="cell_layout_bottom_padding">@dimen/cell_layout_bottom_padding_port</dimen>
+    <!-- Workspace padding -->
+    <dimen name="workspace_left_padding">@dimen/workspace_left_padding_port</dimen>
+    <dimen name="workspace_right_padding">@dimen/workspace_right_padding_port</dimen>
+    <dimen name="workspace_top_padding">@dimen/workspace_top_padding_port</dimen>
+    <dimen name="workspace_bottom_padding">@dimen/workspace_bottom_padding_port</dimen>
+
     <dimen name="workspace_page_spacing">-1dp</dimen>
 
 <!-- AppsCustomize -->
@@ -44,4 +50,10 @@
     <dimen name="apps_customize_widget_cell_height_gap">10dp</dimen>
     <integer name="apps_customize_widget_cell_count_x">2</integer>
     <integer name="apps_customize_widget_cell_count_y">3</integer>
+
+<!-- Workspace cell size -->
+    <dimen name="workspace_cell_width">@dimen/workspace_cell_width_port</dimen>
+    <dimen name="workspace_cell_height">@dimen/workspace_cell_height_port</dimen>
+    <dimen name="workspace_width_gap">@dimen/workspace_width_gap_port</dimen>
+    <dimen name="workspace_height_gap">@dimen/workspace_height_gap_port</dimen>
 </resources>
diff --git a/res/values-port/styles.xml b/res/values-port/styles.xml
index 20369c9..386653e 100644
--- a/res/values-port/styles.xml
+++ b/res/values-port/styles.xml
@@ -24,12 +24,6 @@
         <item name="android:paddingRight">8dp</item>
     </style>
 
-<!-- Workspace -->
-    <style name="WorkspaceScreen">
-        <item name="android:layout_width">wrap_content</item>
-        <item name="android:layout_height">wrap_content</item>
-    </style>
-
 <!-- AppsCustomize -->
     <style name="TabIndicator.AppsCustomize">
         <item name="android:maxWidth">130dp</item>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 728dbea..8f0a4f3 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Atalhos"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Widgets"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Imagens de fundo"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Sem espaço nos Ecrãs principais."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Não existe espaço suficiente neste ecrã principal."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Não existe espaço suficiente na barra personalizável."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Este widget é demasiado grande para a barra inferior."</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 2ef8d9b..e5fff9c 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Atalhos"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Widgets"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Papéis de parede"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Não há mais espaço nas telas iniciais."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Não há mais espaço nesta tela da Página inicial."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Não há mais espaço no hotseat."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Este widget é muito grande para o hotseat."</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 0fca956..957310a 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Comenzi rapide"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Obiecte widget"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Imagini de fundal"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Nu mai este loc pe ecranele de pornire."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Niciun spaţiu rămas pe acest Ecran de pornire."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Nu mai există loc în bara de lansare rapidă."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Acest widget este prea mare pentru hotseat."</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 4aa80be..f12d681 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Ярлыки"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Виджеты"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Обои"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"На главных экранах всё занято."</string>
     <string name="out_of_space" msgid="8365249326091984698">"На этом экране всё занято."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Нет свободного места в слоте."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Виджет слишком велик для слота."</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 2463869..55d2b6b 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Odkazy"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Miniaplikácie"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Tapety"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Na plochách už nie je miesto."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Na tejto ploche už nie je miesto"</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"V časti hotseat už nie je miesto."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Táto miniaplikácia je pre hotseat príliš veľká."</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 915c589..d8df7f4 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Bližnjice"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Pripomočki"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Slike za ozadje"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Na začetnih zaslonih ni več prostora."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Na tem začetnem zaslonu ni več prostora."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"V vrstici z ikonami ni več prostora."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Ta pripomoček je prevelik za podnožje."</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 808d88e..9aa5aef 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Пречице"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Виџети"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Позадине"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Нема више простора на Почетним екранима."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Нема више простора на овом почетном екрану."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Нема више простора на траци актуелности."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Овај виџет је превелики за траку актуелности."</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index b3ee3e1..46bd262 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Genvägar"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Widgetar"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Bakgrundsbilder"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Det finns inte plats för mer på dina startskärmar."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Det finns inte plats för mer på den här startsidan."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Utrymmet på Hotseat är fullt."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Denna widget är för stor för Hotseat."</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index bb8e6f7..83db081 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Njia za mkato"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Wijeti"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Mandhari"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Hakuna nafasi zaidi kwenye skrini zako za nyumbani."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Hakuna nafasi katika skrini hii ya nyumbani."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Hakuna nafasi zaidi kwenye eneo kali."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Wijeti hii ni kubwa zaidi kwa hotseat."</string>
diff --git a/res/values-sw340dp/dimens.xml b/res/values-sw340dp/dimens.xml
index 2a2dac6..42fbb47 100644
--- a/res/values-sw340dp/dimens.xml
+++ b/res/values-sw340dp/dimens.xml
@@ -18,14 +18,6 @@
     <!-- Drag padding to add to the bottom of drop targets -->
     <dimen name="drop_target_drag_padding">20dp</dimen>
 
-<!-- Workspace -->
-    <dimen name="workspace_width_gap">0dp</dimen>
-    <dimen name="workspace_height_gap">0dp</dimen>
-    <dimen name="workspace_top_padding">8dp</dimen>
-    <dimen name="workspace_bottom_padding">8dp</dimen>
-    <dimen name="workspace_left_padding">8dp</dimen>
-    <dimen name="workspace_right_padding">8dp</dimen>
-
 <!-- Hotseat -->
     <dimen name="hotseat_width_gap">0dp</dimen>
     <dimen name="hotseat_height_gap">0dp</dimen>
@@ -37,4 +29,20 @@
     <dimen name="button_bar_width_left_padding">8dp</dimen>
     <dimen name="button_bar_width_right_padding">8dp</dimen>
     <dimen name="button_bar_height_plus_padding">80dp</dimen>
+
+<!-- CellLayout padding land / port-->
+    <dimen name="cell_layout_left_padding_port">8dp</dimen>
+    <dimen name="cell_layout_left_padding_land">8dp</dimen>
+    <dimen name="cell_layout_right_padding_port">8dp</dimen>
+    <dimen name="cell_layout_right_padding_land">8dp</dimen>
+    <dimen name="cell_layout_top_padding_port">8dp</dimen>
+    <dimen name="cell_layout_top_padding_land">8dp</dimen>
+    <dimen name="cell_layout_bottom_padding_port">8dp</dimen>
+    <dimen name="cell_layout_bottom_padding_land">8dp</dimen>
+
+<!-- Workspace cell size -->
+    <dimen name="workspace_width_gap_land">0dp</dimen>
+    <dimen name="workspace_width_gap_port">0dp</dimen>
+    <dimen name="workspace_height_gap_land">0dp</dimen>
+    <dimen name="workspace_height_gap_port">0dp</dimen>
 </resources>
diff --git a/res/values-sw600dp-land/dimens.xml b/res/values-sw600dp-land/dimens.xml
index 7db0a8a..3e18417 100644
--- a/res/values-sw600dp-land/dimens.xml
+++ b/res/values-sw600dp-land/dimens.xml
@@ -22,12 +22,6 @@
 <!-- Hotseat -->
     <dimen name="hotseat_cell_width">75dp</dimen>
     <dimen name="hotseat_cell_height">75dp</dimen>
-
-<!-- Workspace -->
-    <dimen name="workspace_cell_width">96dp</dimen>
-    <dimen name="workspace_cell_height">86dp</dimen>
-    <dimen name="workspace_width_gap">32dp</dimen>
-    <dimen name="workspace_height_gap">0dp</dimen>
     <dimen name="workspace_icon_text_size">11sp</dimen>
 
 <!-- Folders -->
diff --git a/res/values-sw600dp-port/dimens.xml b/res/values-sw600dp-port/dimens.xml
index 9565992..c813725 100644
--- a/res/values-sw600dp-port/dimens.xml
+++ b/res/values-sw600dp-port/dimens.xml
@@ -17,8 +17,6 @@
 <resources>
 <!-- Workspace -->
     <integer name="app_icon_scale_percent">-1</integer>
-    <dimen name="workspace_width_gap">0dp</dimen>
-    <dimen name="workspace_height_gap">32dp</dimen>
 
 <!-- AppsCustomize -->
     <dimen name="apps_customize_cell_width">96dp</dimen>
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index a0d7ec8..0797632 100644
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -20,10 +20,6 @@
     <dimen name="app_icon_drawable_padding">3dp</dimen>
     <dimen name="app_icon_padding_top">4dp</dimen>
 
-<!-- Workspace -->
-    <dimen name="workspace_cell_width">96dp</dimen>
-    <dimen name="workspace_cell_height">96dp</dimen>
-
 <!-- Hotseat -->
     <dimen name="hotseat_width_gap">-1dp</dimen>
     <dimen name="hotseat_height_gap">-1dp</dimen>
@@ -50,4 +46,15 @@
     <dimen name="apps_customize_tab_bar_margin_top">8dp</dimen>
     <dimen name="apps_customize_widget_cell_width_gap">36dp</dimen>
     <dimen name="apps_customize_widget_cell_height_gap">36dp</dimen>
+
+<!-- Workspace cell size -->
+    <dimen name="workspace_cell_width_land">96dp</dimen>
+    <dimen name="workspace_cell_width_port">96dp</dimen>
+    <dimen name="workspace_cell_height_land">86dp</dimen>
+    <dimen name="workspace_cell_height_port">96dp</dimen>
+    <dimen name="workspace_width_gap_land">32dp</dimen>
+    <dimen name="workspace_width_gap_port">0dp</dimen>
+    <dimen name="workspace_height_gap_land">0dp</dimen>
+    <dimen name="workspace_height_gap_port">32dp</dimen>
+
 </resources>
diff --git a/res/values-sw720dp-land/dimens.xml b/res/values-sw720dp-land/dimens.xml
index e7fe32c..8252450 100644
--- a/res/values-sw720dp-land/dimens.xml
+++ b/res/values-sw720dp-land/dimens.xml
@@ -22,13 +22,6 @@
     <dimen name="apps_customize_pageLayoutPaddingRight">16dp</dimen>
 
 <!-- Workspace -->
-    <dimen name="workspace_left_padding">24dip</dimen>
-    <dimen name="workspace_right_padding">24dip</dimen>
-    <!-- We need padding on the screens for portals to look right -->
-    <dimen name="workspace_top_padding">12dip</dimen>
-    <dimen name="workspace_bottom_padding">12dip</dimen>
-    <dimen name="workspace_width_gap">32dp</dimen>
-    <dimen name="workspace_height_gap">2dp</dimen>
     <dimen name="workspace_page_spacing">50dp</dimen>
 
     <!-- the area at the edge of the screen that makes the workspace go left
diff --git a/res/values-sw720dp-port/dimens.xml b/res/values-sw720dp-port/dimens.xml
index 2e0d74a..9cf37ff 100644
--- a/res/values-sw720dp-port/dimens.xml
+++ b/res/values-sw720dp-port/dimens.xml
@@ -31,13 +31,6 @@
     <!-- the area at the edge of the screen that makes the workspace go left
          or right while you're dragging. -->
     <dimen name="scroll_zone">40dp</dimen>
-
-    <dimen name="workspace_left_padding">15dip</dimen>
-    <dimen name="workspace_right_padding">15dip</dimen>
-    <dimen name="workspace_top_padding">25dip</dimen>
-    <dimen name="workspace_bottom_padding">25dip</dimen>
-    <dimen name="workspace_width_gap">0dp</dimen>
-    <dimen name="workspace_height_gap">32dp</dimen>
     <dimen name="workspace_page_spacing">24dp</dimen>
 
     <integer name="apps_customize_cling_focused_x">2</integer>
diff --git a/res/values-sw720dp/dimens.xml b/res/values-sw720dp/dimens.xml
index 62bf9a8..37f62b8 100644
--- a/res/values-sw720dp/dimens.xml
+++ b/res/values-sw720dp/dimens.xml
@@ -24,8 +24,6 @@
     <!-- This should be @dimen/qsb_bar_height - @dimen/workspace_top_padding
          to fix the extra space given to draw portals -->
     <dimen name="workspace_content_large_only_top_margin">36dp</dimen>
-    <dimen name="workspace_cell_width">96dip</dimen>
-    <dimen name="workspace_cell_height">96dip</dimen>
 
     <dimen name="folder_cell_width">96dp</dimen>
     <dimen name="folder_cell_height">96dp</dimen>
@@ -53,4 +51,34 @@
      the drag view should be offset from the position of the original view. -->
     <dimen name="dragViewOffsetX">0dp</dimen>
     <dimen name="dragViewOffsetY">0dp</dimen>
+
+<!-- CellLayout padding land / port-->
+    <dimen name="cell_layout_left_padding_port">15dp</dimen>
+    <dimen name="cell_layout_left_padding_land">24dp</dimen>
+    <dimen name="cell_layout_right_padding_port">15dp</dimen>
+    <dimen name="cell_layout_right_padding_land">24dp</dimen>
+    <dimen name="cell_layout_top_padding_port">25dp</dimen>
+    <dimen name="cell_layout_top_padding_land">12dp</dimen>
+    <dimen name="cell_layout_bottom_padding_port">25dp</dimen>
+    <dimen name="cell_layout_bottom_padding_land">12dp</dimen>
+
+<!-- Workspace padding -->
+    <dimen name="workspace_left_padding_port">0dp</dimen>
+    <dimen name="workspace_left_padding_land">0dp</dimen>
+    <dimen name="workspace_right_padding_port">0dp</dimen>
+    <dimen name="workspace_right_padding_land">0dp</dimen>
+    <dimen name="workspace_top_padding_port">@dimen/workspace_content_large_only_top_margin</dimen>
+    <dimen name="workspace_top_padding_land">@dimen/workspace_content_large_only_top_margin</dimen>
+    <dimen name="workspace_bottom_padding_port">0dp</dimen>
+    <dimen name="workspace_bottom_padding_land">0dp</dimen>
+
+<!-- Workspace cell size -->
+    <dimen name="workspace_cell_width_land">96dp</dimen>
+    <dimen name="workspace_cell_width_port">96dp</dimen>
+    <dimen name="workspace_cell_height_land">96dp</dimen>
+    <dimen name="workspace_cell_height_port">96dp</dimen>
+    <dimen name="workspace_width_gap_land">32dp</dimen>
+    <dimen name="workspace_width_gap_port">0dp</dimen>
+    <dimen name="workspace_height_gap_land">2dp</dimen>
+    <dimen name="workspace_height_gap_port">32dp</dimen>
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 1e70ead..ba6d0c6 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"ทางลัด"</string>
     <string name="group_widgets" msgid="6704978494073105844">"วิดเจ็ต"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"วอลเปเปอร์"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"ไม่มีที่ว่างในหน้าจอหลักของคุณ"</string>
     <string name="out_of_space" msgid="8365249326091984698">"ไม่มีที่ว่างในหน้าจอหลักนี้"</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"ไม่มีที่ว่างใน hotseat"</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"วิดเจ็ตนี้มีขนาดใหญ่เกินไปสำหรับ hotseat"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 49167fa..9e79b89 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Mga Shortcut"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Mga Widget"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Mga Wallpaper"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Wala nang puwang sa iyong mga Home screen."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Wala nang lugar sa Home screen na ito."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Wala nang lugar sa hotseat."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Masyadong malaki ang widget na ito para sa hotseat."</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index da08e56..81ba10a 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Kısayollar"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Widget\'lar"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Duvar Kağıtları"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Ana ekranlarınızda başka yer kalmadı."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Bu Ana Sayfada yer yok."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Favori kısayollarda yer yok"</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Bu widget, hotseat için çok büyük."</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index a8b094d..bf8f165 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Ярлики"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Віджети"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Фонові мал."</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"На головних екранах більше немає місця."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Немає більше місця на гол. екрані."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"На гарячій панелі більше немає місця."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Цей віджет завеликий для Hotseat."</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index a777208..345e4b2 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Lối tắt"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Tiện ích"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Hình nền"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Không còn chỗ trên Màn hình chính của bạn."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Không còn khoảng trống trên Màn hình chính này."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Không còn chỗ trên vùng gắn."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Tiện ích này quá lớn cho điểm giới hạn."</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 800ceb4..e5c072e 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"捷徑"</string>
     <string name="group_widgets" msgid="6704978494073105844">"小工具"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"桌布"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"主螢幕已無空間。"</string>
     <string name="out_of_space" msgid="8365249326091984698">"主螢幕已無空間"</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"停駐區已無可用空間。"</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"這個小工具過大,超出可用的空間。"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 5f90995..ddff5b7 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -40,8 +40,7 @@
     <string name="group_shortcuts" msgid="9133529424900391877">"Izinqamuleli"</string>
     <string name="group_widgets" msgid="6704978494073105844">"Izinqunjwana"</string>
     <string name="group_wallpapers" msgid="1568191644272224858">"Amaphephadonga"</string>
-    <!-- no translation found for completely_out_of_space (1759078539443491182) -->
-    <skip />
+    <string name="completely_out_of_space" msgid="1759078539443491182">"Akusenagumbi ezikrinini zakho zekhaya."</string>
     <string name="out_of_space" msgid="8365249326091984698">"Asisekho isikhala kulesi sikrini Sasekhaya."</string>
     <string name="hotseat_out_of_space" msgid="6304886797358479361">"Akusenagumbi ku-hotseat."</string>
     <string name="invalid_hotseat_item" msgid="6545340627805449250">"Le wijethi inkulu kakhulu ukuba ibe esihlalweni esishisayo"</string>
diff --git a/res/values/config.xml b/res/values/config.xml
index 1890125..bfd2bf5 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -42,8 +42,6 @@
     <!-- The transition duration for the background of the drop targets -->
     <integer name="config_dropTargetBgTransitionDuration">0</integer>
 
-    <integer name="config_crosshairsFadeInTime">600</integer>
-
     <!-- The duration (in ms) of the fade animation on the object outlines, used when
          we are dragging objects around on the home screen. -->
     <integer name="config_dragOutlineFadeTime">900</integer>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 45e544a..d3b9c1e 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -30,10 +30,6 @@
     <dimen name="qsb_padding_left">0dp</dimen>
     <dimen name="qsb_padding_right">0dp</dimen>
     <dimen name="search_bar_height">40dp</dimen>
-    <dimen name="workspace_cell_width">80dp</dimen>
-    <dimen name="workspace_cell_height">100dp</dimen>
-    <dimen name="workspace_width_gap">-1dp</dimen>
-    <dimen name="workspace_height_gap">-1dp</dimen>
     <dimen name="workspace_max_gap">16dp</dimen>
     <dimen name="folder_cell_width">74dp</dimen>
     <dimen name="folder_cell_height">82dp</dimen>
@@ -119,4 +115,34 @@
     <dimen name="folder_name_padding">10dp</dimen>
     <dimen name="folder_width_gap">0dp</dimen>
     <dimen name="folder_height_gap">0dp</dimen>
+
+<!-- CellLayout padding -->
+    <dimen name="cell_layout_left_padding_port">0dp</dimen>
+    <dimen name="cell_layout_left_padding_land">0dp</dimen>
+    <dimen name="cell_layout_right_padding_port">0dp</dimen>
+    <dimen name="cell_layout_right_padding_land">0dp</dimen>
+    <dimen name="cell_layout_top_padding_port">6dp</dimen>
+    <dimen name="cell_layout_top_padding_land">0dp</dimen>
+    <dimen name="cell_layout_bottom_padding_port">0dp</dimen>
+    <dimen name="cell_layout_bottom_padding_land">0dp</dimen>
+
+<!-- Workspace padding -->
+    <dimen name="workspace_left_padding_port">0dp</dimen>
+    <dimen name="workspace_left_padding_land">@dimen/qsb_bar_height</dimen>
+    <dimen name="workspace_right_padding_port">0dp</dimen>
+    <dimen name="workspace_right_padding_land">@dimen/button_bar_height</dimen>
+    <dimen name="workspace_top_padding_port">@dimen/qsb_bar_height_inset</dimen>
+    <dimen name="workspace_top_padding_land">0dp</dimen>
+    <dimen name="workspace_bottom_padding_port">@dimen/button_bar_height</dimen>
+    <dimen name="workspace_bottom_padding_land">0dp</dimen>
+
+<!-- Workspace cell size -->
+    <dimen name="workspace_cell_width_land">106dp</dimen>
+    <dimen name="workspace_cell_width_port">80dp</dimen>
+    <dimen name="workspace_cell_height_land">74dp</dimen>
+    <dimen name="workspace_cell_height_port">100dp</dimen>
+    <dimen name="workspace_width_gap_land">-1dp</dimen>
+    <dimen name="workspace_width_gap_port">-1dp</dimen>
+    <dimen name="workspace_height_gap_land">-1dp</dimen>
+    <dimen name="workspace_height_gap_port">-1dp</dimen>
 </resources>
diff --git a/src/com/android/launcher2/AppsCustomizePagedView.java b/src/com/android/launcher2/AppsCustomizePagedView.java
index 00a35a5..3936e59 100644
--- a/src/com/android/launcher2/AppsCustomizePagedView.java
+++ b/src/com/android/launcher2/AppsCustomizePagedView.java
@@ -706,7 +706,7 @@
 
         // Start the drag
         alphaClipPaint = null;
-        mLauncher.lockScreenOrientationOnLargeUI();
+        mLauncher.lockScreenOrientation();
         mLauncher.getWorkspace().onDragStartedWithItem(createItemInfo, outline, alphaClipPaint);
         mDragController.startDrag(image, preview, this, createItemInfo,
                 DragController.DRAG_ACTION_COPY, null, scale);
@@ -758,11 +758,16 @@
             // drop in Workspace
             mLauncher.exitSpringLoadedDragMode();
         }
-        mLauncher.unlockScreenOrientationOnLargeUI();
+        mLauncher.unlockScreenOrientation();
     }
 
     @Override
-    public void onLauncherTransitionStart(Launcher l, boolean animated, boolean toWorkspace) {
+    public View getContent() {
+        return null;
+    }
+
+    @Override
+    public void onLauncherTransitionPrepare(Launcher l, boolean animated, boolean toWorkspace) {
         mInTransition = true;
         if (toWorkspace) {
             cancelAllTasks();
@@ -770,8 +775,7 @@
     }
 
     @Override
-    public View getContent() {
-        return null;
+    public void onLauncherTransitionStart(Launcher l, boolean animated, boolean toWorkspace) {
     }
 
     @Override
@@ -1421,7 +1425,7 @@
 
                 float alpha;
 
-                if (!LauncherApplication.isScreenLarge() || scrollProgress < 0) {
+                if (scrollProgress < 0) {
                     alpha = scrollProgress < 0 ? mAlphaInterpolator.getInterpolation(
                         1 - Math.abs(scrollProgress)) : 1.0f;
                 } else {
diff --git a/src/com/android/launcher2/AppsCustomizeTabHost.java b/src/com/android/launcher2/AppsCustomizeTabHost.java
index 34b7c09..7a2c247 100644
--- a/src/com/android/launcher2/AppsCustomizeTabHost.java
+++ b/src/com/android/launcher2/AppsCustomizeTabHost.java
@@ -164,8 +164,9 @@
     }
 
      public boolean onInterceptTouchEvent(MotionEvent ev) {
-         // If we are mid transition then intercept touch events here so we can ignore them
-         if (mInTransition) {
+         // If we are mid transitioning to the workspace, then intercept touch events here so we
+         // can ignore them, otherwise we just let all apps handle the touch events.
+         if (mInTransition && mTransitioningToWorkspace) {
              return true;
          }
          return super.onInterceptTouchEvent(ev);
@@ -173,11 +174,9 @@
 
     @Override
     public boolean onTouchEvent(MotionEvent event) {
-        // Allow touch events to fall through if we are transitioning to the workspace
-        if (mInTransition) {
-            if (mTransitioningToWorkspace) {
-                return super.onTouchEvent(event);
-            }
+        // Allow touch events to fall through to the workspace if we are transitioning there
+        if (mInTransition && mTransitioningToWorkspace) {
+            return super.onTouchEvent(event);
         }
 
         // Intercept all touch events up to the bottom of the AppsCustomizePane so they do not fall
@@ -376,8 +375,8 @@
 
     /* LauncherTransitionable overrides */
     @Override
-    public void onLauncherTransitionStart(Launcher l, boolean animated, boolean toWorkspace) {
-        mAppsCustomizePane.onLauncherTransitionStart(l, animated, toWorkspace);
+    public void onLauncherTransitionPrepare(Launcher l, boolean animated, boolean toWorkspace) {
+        mAppsCustomizePane.onLauncherTransitionPrepare(l, animated, toWorkspace);
         mInTransition = true;
         mTransitioningToWorkspace = toWorkspace;
 
@@ -404,7 +403,10 @@
             mAppsCustomizePane.reset();
             mResetAfterTransition = false;
         }
+    }
 
+    @Override
+    public void onLauncherTransitionStart(Launcher l, boolean animated, boolean toWorkspace) {
         if (animated) {
             enableAndBuildHardwareLayer();
         }
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index a19ccea..24e4047 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -58,8 +58,6 @@
     static final String TAG = "CellLayout";
 
     private Launcher mLauncher;
-    private int mOriginalCellWidth;
-    private int mOriginalCellHeight;
     private int mCellWidth;
     private int mCellHeight;
 
@@ -122,10 +120,6 @@
 
     private BubbleTextView mPressedOrFocusedIcon;
 
-    private Drawable mCrosshairsDrawable = null;
-    private InterruptibleInOutAnimator mCrosshairsAnimator = null;
-    private float mCrosshairsVisibility = 0.0f;
-
     private HashMap<CellLayout.LayoutParams, Animator> mReorderAnimators = new
             HashMap<CellLayout.LayoutParams, Animator>();
     private HashMap<View, ReorderHintAnimation>
@@ -182,10 +176,8 @@
 
         TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CellLayout, defStyle, 0);
 
-        mOriginalCellWidth =
-            mCellWidth = a.getDimensionPixelSize(R.styleable.CellLayout_cellWidth, 10);
-        mOriginalCellHeight =
-            mCellHeight = a.getDimensionPixelSize(R.styleable.CellLayout_cellHeight, 10);
+        mCellWidth = a.getDimensionPixelSize(R.styleable.CellLayout_cellWidth, 10);
+        mCellHeight = a.getDimensionPixelSize(R.styleable.CellLayout_cellHeight, 10);
         mWidthGap = mOriginalWidthGap = a.getDimensionPixelSize(R.styleable.CellLayout_widthGap, 0);
         mHeightGap = mOriginalHeightGap = a.getDimensionPixelSize(R.styleable.CellLayout_heightGap, 0);
         mMaxGap = a.getDimensionPixelSize(R.styleable.CellLayout_maxGap, 0);
@@ -227,19 +219,8 @@
 
         // Initialize the data structures used for the drag visualization.
 
-        mCrosshairsDrawable = res.getDrawable(R.drawable.gardening_crosshairs);
         mEaseOutInterpolator = new DecelerateInterpolator(2.5f); // Quint ease out
 
-        // Set up the animation for fading the crosshairs in and out
-        int animDuration = res.getInteger(R.integer.config_crosshairsFadeInTime);
-        mCrosshairsAnimator = new InterruptibleInOutAnimator(animDuration, 0.0f, 1.0f);
-        mCrosshairsAnimator.getAnimator().addUpdateListener(new AnimatorUpdateListener() {
-            public void onAnimationUpdate(ValueAnimator animation) {
-                mCrosshairsVisibility = ((Float) animation.getAnimatedValue()).floatValue();
-                invalidate();
-            }
-        });
-        mCrosshairsAnimator.getAnimator().setInterpolator(mEaseOutInterpolator);
 
         mDragCell[0] = mDragCell[1] = -1;
         for (int i = 0; i < mDragOutlines.length; i++) {
@@ -422,38 +403,6 @@
             bg.draw(canvas);
         }
 
-        if (mCrosshairsVisibility > 0.0f) {
-            final int countX = mCountX;
-            final int countY = mCountY;
-
-            final float MAX_ALPHA = 0.4f;
-            final int MAX_VISIBLE_DISTANCE = 600;
-            final float DISTANCE_MULTIPLIER = 0.002f;
-
-            final Drawable d = mCrosshairsDrawable;
-            final int width = d.getIntrinsicWidth();
-            final int height = d.getIntrinsicHeight();
-
-            int x = getPaddingLeft() - (mWidthGap / 2) - (width / 2);
-            for (int col = 0; col <= countX; col++) {
-                int y = getPaddingTop() - (mHeightGap / 2) - (height / 2);
-                for (int row = 0; row <= countY; row++) {
-                    mTmpPointF.set(x - mDragCenter.x, y - mDragCenter.y);
-                    float dist = mTmpPointF.length();
-                    // Crosshairs further from the drag point are more faint
-                    float alpha = Math.min(MAX_ALPHA,
-                            DISTANCE_MULTIPLIER * (MAX_VISIBLE_DISTANCE - dist));
-                    if (alpha > 0.0f) {
-                        d.setBounds(x, y, x + width, y + height);
-                        d.setAlpha((int) (alpha * 255 * mCrosshairsVisibility));
-                        d.draw(canvas);
-                    }
-                    y += mCellHeight + mHeightGap;
-                }
-                x += mCellWidth + mWidthGap;
-            }
-        }
-
         final Paint paint = mDragOutlinePaint;
         for (int i = 0; i < mDragOutlines.length; i++) {
             final float alpha = mDragOutlineAlphas[i];
@@ -961,6 +910,54 @@
         return r;
     }
 
+    final int LANDSCAPE = 0;
+    final int PORTRAIT = 1;
+    void getCellLayoutMetrics(int measureWidth, int measureHeight, int orientation, Rect metrics) {
+        int numWidthGaps = mCountX - 1;
+        int numHeightGaps = mCountY - 1;
+
+        int widthGap;
+        int heightGap;
+        int cellWidth;
+        int cellHeight;
+        int paddingLeft;
+        int paddingRight;
+        int paddingTop;
+        int paddingBottom;
+
+        Resources res = getContext().getResources();
+        if (orientation == LANDSCAPE) {
+            cellWidth = res.getDimensionPixelSize(R.dimen.workspace_cell_width_land);
+            cellHeight = res.getDimensionPixelSize(R.dimen.workspace_cell_height_land);
+            widthGap = res.getDimensionPixelSize(R.dimen.workspace_width_gap_land);
+            heightGap = res.getDimensionPixelSize(R.dimen.workspace_height_gap_land);
+            paddingLeft = res.getDimensionPixelSize(R.dimen.cell_layout_left_padding_land);
+            paddingRight = res.getDimensionPixelSize(R.dimen.cell_layout_right_padding_land);
+            paddingTop = res.getDimensionPixelSize(R.dimen.cell_layout_top_padding_land);
+            paddingBottom = res.getDimensionPixelSize(R.dimen.cell_layout_bottom_padding_land);
+        } else {
+            // PORTRAIT
+            cellWidth = res.getDimensionPixelSize(R.dimen.workspace_cell_width_port);
+            cellHeight = res.getDimensionPixelSize(R.dimen.workspace_cell_height_port);
+            widthGap = res.getDimensionPixelSize(R.dimen.workspace_width_gap_port);
+            heightGap = res.getDimensionPixelSize(R.dimen.workspace_height_gap_port);
+            paddingLeft = res.getDimensionPixelSize(R.dimen.cell_layout_left_padding_port);
+            paddingRight = res.getDimensionPixelSize(R.dimen.cell_layout_right_padding_port);
+            paddingTop = res.getDimensionPixelSize(R.dimen.cell_layout_top_padding_port);
+            paddingBottom = res.getDimensionPixelSize(R.dimen.cell_layout_bottom_padding_port);
+        }
+
+        if (widthGap < 0 || heightGap < 0) {
+            int hSpace = measureWidth - paddingLeft - paddingRight;
+            int vSpace = measureHeight - paddingTop - paddingBottom;
+            int hFreeSpace = hSpace - (mCountX * cellWidth);
+            int vFreeSpace = vSpace - (mCountY * cellHeight);
+            widthGap = Math.min(mMaxGap, numWidthGaps > 0 ? (hFreeSpace / numWidthGaps) : 0);
+            heightGap = Math.min(mMaxGap, numHeightGaps > 0 ? (vFreeSpace / numHeightGaps) : 0);
+        }
+        metrics.set(cellWidth, cellHeight, widthGap, heightGap);
+    }
+
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         // TODO: currently ignoring padding
@@ -979,10 +976,10 @@
         int numHeightGaps = mCountY - 1;
 
         if (mOriginalWidthGap < 0 || mOriginalHeightGap < 0) {
-            int hSpace = widthSpecSize - getPaddingLeft() - getPaddingRight();
-            int vSpace = heightSpecSize - getPaddingTop() - getPaddingBottom();
-            int hFreeSpace = hSpace - (mCountX * mOriginalCellWidth);
-            int vFreeSpace = vSpace - (mCountY * mOriginalCellHeight);
+            int hSpace = widthSpecSize - mPaddingLeft - mPaddingRight;
+            int vSpace = heightSpecSize - mPaddingTop - mPaddingBottom;
+            int hFreeSpace = hSpace - (mCountX * mCellWidth);
+            int vFreeSpace = vSpace - (mCountY * mCellHeight);
             mWidthGap = Math.min(mMaxGap, numWidthGaps > 0 ? (hFreeSpace / numWidthGaps) : 0);
             mHeightGap = Math.min(mMaxGap,numHeightGaps > 0 ? (vFreeSpace / numHeightGaps) : 0);
             mShortcutsAndWidgets.setCellDimensions(mCellWidth, mCellHeight, mWidthGap, mHeightGap);
@@ -1205,9 +1202,6 @@
         }
 
         if (dragOutline == null && v == null) {
-            if (mCrosshairsDrawable != null) {
-                invalidate();
-            }
             return;
         }
 
@@ -1262,11 +1256,6 @@
             mDragOutlineAnims[mDragOutlineCurrent].setTag(dragOutline);
             mDragOutlineAnims[mDragOutlineCurrent].animateIn();
         }
-
-        // If we are drawing crosshairs, the entire CellLayout needs to be invalidated
-        if (mCrosshairsDrawable != null) {
-            invalidate();
-        }
     }
 
     public void clearDragOutlines() {
@@ -2545,12 +2534,6 @@
      */
     void onDragEnter() {
         mDragEnforcer.onDragEnter();
-        if (!mDragging) {
-            // Fade in the drag indicators
-            if (mCrosshairsAnimator != null) {
-                mCrosshairsAnimator.animateIn();
-            }
-        }
         mDragging = true;
     }
 
@@ -2564,11 +2547,6 @@
         // Guard against that case.
         if (mDragging) {
             mDragging = false;
-
-            // Fade out the drag indicators
-            if (mCrosshairsAnimator != null) {
-                mCrosshairsAnimator.animateOut();
-            }
         }
 
         // Invalidate the drag data
diff --git a/src/com/android/launcher2/DragController.java b/src/com/android/launcher2/DragController.java
index c9bebe3..d63743f 100644
--- a/src/com/android/launcher2/DragController.java
+++ b/src/com/android/launcher2/DragController.java
@@ -517,6 +517,7 @@
             mScrollState = SCROLL_OUTSIDE_ZONE;
             mScrollRunnable.setDirection(SCROLL_RIGHT);
             mDragScroller.onExitScrollArea();
+            mLauncher.getDragLayer().onExitScrollArea();
         }
     }
 
@@ -561,6 +562,7 @@
             if (mScrollState == SCROLL_OUTSIDE_ZONE) {
                 mScrollState = SCROLL_WAITING_IN_ZONE;
                 if (mDragScroller.onEnterScrollArea(x, y, SCROLL_LEFT)) {
+                    mLauncher.getDragLayer().onEnterScrollArea(SCROLL_LEFT);
                     mScrollRunnable.setDirection(SCROLL_LEFT);
                     mHandler.postDelayed(mScrollRunnable, delay);
                 }
@@ -569,6 +571,7 @@
             if (mScrollState == SCROLL_OUTSIDE_ZONE) {
                 mScrollState = SCROLL_WAITING_IN_ZONE;
                 if (mDragScroller.onEnterScrollArea(x, y, SCROLL_RIGHT)) {
+                    mLauncher.getDragLayer().onEnterScrollArea(SCROLL_RIGHT);
                     mScrollRunnable.setDirection(SCROLL_RIGHT);
                     mHandler.postDelayed(mScrollRunnable, delay);
                 }
@@ -831,6 +834,7 @@
                 mScrollState = SCROLL_OUTSIDE_ZONE;
                 mDistanceSinceScroll = 0;
                 mDragScroller.onExitScrollArea();
+                mLauncher.getDragLayer().onExitScrollArea();
 
                 if (isDragging()) {
                     // Force an update so that we can requeue the scroller if necessary
diff --git a/src/com/android/launcher2/DragLayer.java b/src/com/android/launcher2/DragLayer.java
index 69ed053..379e599 100644
--- a/src/com/android/launcher2/DragLayer.java
+++ b/src/com/android/launcher2/DragLayer.java
@@ -23,7 +23,11 @@
 import android.animation.ValueAnimator.AnimatorUpdateListener;
 import android.content.Context;
 import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffColorFilter;
 import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.view.KeyEvent;
 import android.view.MotionEvent;
@@ -85,6 +89,9 @@
         setMotionEventSplittingEnabled(false);
         setChildrenDrawingOrderEnabled(true);
         setOnHierarchyChangeListener(this);
+
+        mLeftHoverDrawable = getResources().getDrawable(R.drawable.page_hover_left_holo);
+        mRightHoverDrawable = getResources().getDrawable(R.drawable.page_hover_right_holo);
     }
 
     public void setup(Launcher launcher, DragController controller) {
@@ -720,4 +727,44 @@
             return i;
         }
     }
+
+    private boolean mInScrollArea;
+    private Drawable mLeftHoverDrawable;
+    private Drawable mRightHoverDrawable;
+
+    void onEnterScrollArea(int direction) {
+        mInScrollArea = true;
+        invalidate();
+    }
+
+    void onExitScrollArea() {
+        mInScrollArea = false;
+        invalidate();
+    }
+
+    @Override
+    protected void dispatchDraw(Canvas canvas) {
+        super.dispatchDraw(canvas);
+
+        if (mInScrollArea && !LauncherApplication.isScreenLarge()) {
+            Workspace workspace = mLauncher.getWorkspace();
+            int width = workspace.getWidth();
+            Rect childRect = new Rect();
+            getDescendantRectRelativeToSelf(workspace.getChildAt(0), childRect);
+
+            int page = workspace.getNextPage();
+            CellLayout leftPage = (CellLayout) workspace.getChildAt(page - 1);
+            CellLayout rightPage = (CellLayout) workspace.getChildAt(page + 1);
+
+            if (leftPage != null && leftPage.getIsDragOverlapping()) {
+                mLeftHoverDrawable.setBounds(0, childRect.top,
+                        mLeftHoverDrawable.getIntrinsicWidth(), childRect.bottom);
+                mLeftHoverDrawable.draw(canvas);
+            } else if (rightPage != null && rightPage.getIsDragOverlapping()) {
+                mRightHoverDrawable.setBounds(width - mRightHoverDrawable.getIntrinsicWidth(),
+                        childRect.top, width, childRect.bottom);
+                mRightHoverDrawable.draw(canvas);
+            }
+        }
+    }
 }
diff --git a/src/com/android/launcher2/InstallShortcutReceiver.java b/src/com/android/launcher2/InstallShortcutReceiver.java
index eda82e0..66b3f5f 100644
--- a/src/com/android/launcher2/InstallShortcutReceiver.java
+++ b/src/com/android/launcher2/InstallShortcutReceiver.java
@@ -113,6 +113,10 @@
             if (intent != null) {
                 if (intent.getAction() == null) {
                     intent.setAction(Intent.ACTION_VIEW);
+                } else if (intent.getAction().equals(Intent.ACTION_MAIN) &&
+                        intent.getCategories().contains(Intent.CATEGORY_LAUNCHER)) {
+                    intent.addFlags(
+                        Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
                 }
 
                 // By default, we allow for duplicate entries (located in
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 2829e3c..fb27d02 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -568,7 +568,13 @@
         if (isWidgetDrop) {
             int appWidgetId = data != null ?
                     data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1) : -1;
-            completeTwoStageWidgetDrop(resultCode, appWidgetId);
+            if (appWidgetId < 0) {
+                Log.e(TAG, "Error: appWidgetId (EXTRA_APPWIDGET_ID) was not returned from the \\" +
+                        "widget configuration activity.");
+                completeTwoStageWidgetDrop(RESULT_CANCELED, appWidgetId);
+            } else {
+                completeTwoStageWidgetDrop(resultCode, appWidgetId);
+            }
             return;
         }
 
@@ -2166,6 +2172,12 @@
         }
     }
 
+    private void dispatchOnLauncherTransitionPrepare(View v, boolean animated, boolean toWorkspace) {
+        if (v instanceof LauncherTransitionable) {
+            ((LauncherTransitionable) v).onLauncherTransitionPrepare(this, animated, toWorkspace);
+        }
+    }
+
     private void dispatchOnLauncherTransitionStart(View v, boolean animated, boolean toWorkspace) {
         if (v instanceof LauncherTransitionable) {
             ((LauncherTransitionable) v).onLauncherTransitionStart(this, animated, toWorkspace);
@@ -2246,7 +2258,7 @@
         final int fadeDuration = res.getInteger(R.integer.config_appsCustomizeFadeInTime);
         final float scale = (float) res.getInteger(R.integer.config_appsCustomizeZoomScaleFactor);
         final View fromView = mWorkspace;
-        final View toView = mAppsCustomizeTabHost;
+        final AppsCustomizeTabHost toView = mAppsCustomizeTabHost;
         final int startDelay =
                 res.getInteger(R.integer.config_workspaceAppsCustomizeAnimationStagger);
 
@@ -2326,8 +2338,8 @@
             boolean delayAnim = false;
             final ViewTreeObserver observer;
 
-            dispatchOnLauncherTransitionStart(fromView, animated, false);
-            dispatchOnLauncherTransitionStart(toView, animated, false);
+            dispatchOnLauncherTransitionPrepare(fromView, animated, false);
+            dispatchOnLauncherTransitionPrepare(toView, animated, false);
 
             // If any of the objects being animated haven't been measured/laid out
             // yet, delay the animation until we get a layout pass
@@ -2351,6 +2363,8 @@
                                 if (mStateAnimation == stateAnimation) {
                                     // Need to update pivots for zoom if layout changed
                                     setPivotsForZoom(toView, scale);
+                                    dispatchOnLauncherTransitionStart(fromView, animated, false);
+                                    dispatchOnLauncherTransitionStart(toView, animated, false);
                                     mStateAnimation.start();
                                 }
                             }
@@ -2361,6 +2375,8 @@
                 observer.addOnGlobalLayoutListener(delayedStart);
             } else {
                 setPivotsForZoom(toView, scale);
+                dispatchOnLauncherTransitionStart(fromView, animated, false);
+                dispatchOnLauncherTransitionStart(toView, animated, false);
                 mStateAnimation.start();
             }
         } else {
@@ -2376,8 +2392,10 @@
                 mWorkspace.hideScrollingIndicator(true);
                 hideDockDivider();
             }
+            dispatchOnLauncherTransitionPrepare(fromView, animated, false);
             dispatchOnLauncherTransitionStart(fromView, animated, false);
             dispatchOnLauncherTransitionEnd(fromView, animated, false);
+            dispatchOnLauncherTransitionPrepare(toView, animated, false);
             dispatchOnLauncherTransitionStart(toView, animated, false);
             dispatchOnLauncherTransitionEnd(toView, animated, false);
             updateWallpaperVisibility(false);
@@ -2442,8 +2460,8 @@
 
             mStateAnimation = new AnimatorSet();
 
-            dispatchOnLauncherTransitionStart(fromView, animated, true);
-            dispatchOnLauncherTransitionStart(toView, animated, true);
+            dispatchOnLauncherTransitionPrepare(fromView, animated, true);
+            dispatchOnLauncherTransitionPrepare(toView, animated, true);
 
             mStateAnimation.addListener(new AnimatorListenerAdapter() {
                 @Override
@@ -2452,7 +2470,9 @@
                     fromView.setVisibility(View.GONE);
                     dispatchOnLauncherTransitionEnd(fromView, animated, true);
                     dispatchOnLauncherTransitionEnd(toView, animated, true);
-                    mWorkspace.hideScrollingIndicator(false);
+                    if (mWorkspace != null) {
+                        mWorkspace.hideScrollingIndicator(false);
+                    }
                     if (onCompleteRunnable != null) {
                         onCompleteRunnable.run();
                     }
@@ -2463,11 +2483,15 @@
             if (workspaceAnim != null) {
                 mStateAnimation.play(workspaceAnim);
             }
+            dispatchOnLauncherTransitionStart(fromView, animated, true);
+            dispatchOnLauncherTransitionStart(toView, animated, true);
             mStateAnimation.start();
         } else {
             fromView.setVisibility(View.GONE);
+            dispatchOnLauncherTransitionPrepare(fromView, animated, true);
             dispatchOnLauncherTransitionStart(fromView, animated, true);
             dispatchOnLauncherTransitionEnd(fromView, animated, true);
+            dispatchOnLauncherTransitionPrepare(toView, animated, true);
             dispatchOnLauncherTransitionStart(toView, animated, true);
             dispatchOnLauncherTransitionEnd(toView, animated, true);
             mWorkspace.hideScrollingIndicator(false);
@@ -3298,20 +3322,16 @@
         return oriMap[(d.getRotation() + indexOffset) % 4];
     }
 
-    public void lockScreenOrientationOnLargeUI() {
-        if (LauncherApplication.isScreenLarge()) {
-            setRequestedOrientation(mapConfigurationOriActivityInfoOri(getResources()
-                    .getConfiguration().orientation));
-        }
+    public void lockScreenOrientation() {
+        setRequestedOrientation(mapConfigurationOriActivityInfoOri(getResources()
+                .getConfiguration().orientation));
     }
-    public void unlockScreenOrientationOnLargeUI() {
-        if (LauncherApplication.isScreenLarge()) {
-            mHandler.postDelayed(new Runnable() {
-                public void run() {
-                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
-                }
-            }, mRestoreScreenOrientationDelay);
-        }
+    public void unlockScreenOrientation() {
+        mHandler.postDelayed(new Runnable() {
+            public void run() {
+                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
+            }
+        }, mRestoreScreenOrientationDelay);
     }
 
     /* Cling related */
@@ -3455,6 +3475,7 @@
 
 interface LauncherTransitionable {
     View getContent();
+    void onLauncherTransitionPrepare(Launcher l, boolean animated, boolean toWorkspace);
     void onLauncherTransitionStart(Launcher l, boolean animated, boolean toWorkspace);
     void onLauncherTransitionStep(Launcher l, float t);
     void onLauncherTransitionEnd(Launcher l, boolean animated, boolean toWorkspace);
diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java
index 37235e9..8f6ca4f 100644
--- a/src/com/android/launcher2/LauncherModel.java
+++ b/src/com/android/launcher2/LauncherModel.java
@@ -1070,6 +1070,15 @@
                                 info = getShortcutInfo(c, context, iconTypeIndex,
                                         iconPackageIndex, iconResourceIndex, iconIndex,
                                         titleIndex);
+
+                                // App shortcuts that used to be automatically added to Launcher
+                                // didn't always have the correct intent flags set, so do that here
+                                if (intent.getAction().equals(Intent.ACTION_MAIN) &&
+                                        intent.getCategories().contains(Intent.CATEGORY_LAUNCHER)) {
+                                    intent.addFlags(
+                                        Intent.FLAG_ACTIVITY_NEW_TASK |
+                                        Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
+                                }
                             }
 
                             if (info != null) {
diff --git a/src/com/android/launcher2/PagedView.java b/src/com/android/launcher2/PagedView.java
index 83b688d..4bcb4c7 100644
--- a/src/com/android/launcher2/PagedView.java
+++ b/src/com/android/launcher2/PagedView.java
@@ -270,6 +270,9 @@
     int getCurrentPage() {
         return mCurrentPage;
     }
+    int getNextPage() {
+        return (mNextPage != INVALID_PAGE) ? mNextPage : mCurrentPage;
+    }
 
     int getPageCount() {
         return getChildCount();
@@ -1858,9 +1861,8 @@
     }
 
     protected String getCurrentPageDescription() {
-        int page = (mNextPage != INVALID_PAGE) ? mNextPage : mCurrentPage;
         return String.format(getContext().getString(R.string.default_scroll_format),
-                page + 1, getChildCount());
+                 getNextPage() + 1, getChildCount());
     }
 
     @Override
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index dd2ced0..e9dffc5 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -38,6 +38,8 @@
 import android.graphics.Paint;
 import android.graphics.Point;
 import android.graphics.PointF;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffColorFilter;
 import android.graphics.Rect;
 import android.graphics.Region.Op;
 import android.graphics.drawable.Drawable;
@@ -174,7 +176,7 @@
     private final int[] mTempXY = new int[2];
     private float mOverscrollFade = 0;
     private boolean mOverscrollTransformsSet;
-    public static final int DRAG_BITMAP_PADDING = 0;
+    public static final int DRAG_BITMAP_PADDING = 2;
 
     // Camera and Matrix used to determine the final position of a neighboring CellLayout
     private final Matrix mMatrix = new Matrix();
@@ -375,13 +377,13 @@
     public void onDragStart(DragSource source, Object info, int dragAction) {
         mIsDragOccuring = true;
         updateChildrenLayersEnabled();
-        mLauncher.lockScreenOrientationOnLargeUI();
+        mLauncher.lockScreenOrientation();
     }
 
     public void onDragEnd() {
         mIsDragOccuring = false;
         updateChildrenLayersEnabled();
-        mLauncher.unlockScreenOrientationOnLargeUI();
+        mLauncher.unlockScreenOrientation();
     }
 
     /**
@@ -1314,38 +1316,6 @@
     }
 
     @Override
-    protected void dispatchDraw(Canvas canvas) {
-        super.dispatchDraw(canvas);
-
-        if (mInScrollArea && !LauncherApplication.isScreenLarge()) {
-            final int width = getWidth();
-            final int height = getHeight();
-            final int pageHeight = getChildAt(0).getHeight();
-
-            // Set the height of the outline to be the height of the page
-            final int offset = (height - pageHeight - getPaddingTop() - getPaddingBottom()) / 2;
-            final int paddingTop = getPaddingTop() + offset;
-            final int paddingBottom = getPaddingBottom() + offset;
-
-            final int page = (mNextPage != INVALID_PAGE ? mNextPage : mCurrentPage);
-            final CellLayout leftPage = (CellLayout) getChildAt(page - 1);
-            final CellLayout rightPage = (CellLayout) getChildAt(page + 1);
-
-            if (leftPage != null && leftPage.getIsDragOverlapping()) {
-                final Drawable d = getResources().getDrawable(R.drawable.page_hover_left_holo);
-                d.setBounds(getScrollX(), paddingTop, getScrollX() + d.getIntrinsicWidth(),
-                        height - paddingBottom);
-                d.draw(canvas);
-            } else if (rightPage != null && rightPage.getIsDragOverlapping()) {
-                final Drawable d = getResources().getDrawable(R.drawable.page_hover_right_holo);
-                d.setBounds(getScrollX() + width - d.getIntrinsicWidth(), paddingTop,
-                        getScrollX() + width, height - paddingBottom);
-                d.draw(canvas);
-            }
-        }
-    }
-
-    @Override
     protected boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) {
         if (!mLauncher.isAllAppsVisible()) {
             final Folder openFolder = getOpenFolder();
@@ -1564,7 +1534,7 @@
         AnimatorSet anim = animated ? new AnimatorSet() : null;
 
         // Stop any scrolling, move to the current page right away
-        setCurrentPage((mNextPage != INVALID_PAGE) ? mNextPage : mCurrentPage);
+        setCurrentPage(getNextPage());
 
         final State oldState = mState;
         final boolean oldStateIsNormal = (oldState == State.NORMAL);
@@ -1745,12 +1715,16 @@
     }
 
     @Override
-    public void onLauncherTransitionStart(Launcher l, boolean animated, boolean toWorkspace) {
+    public void onLauncherTransitionPrepare(Launcher l, boolean animated, boolean toWorkspace) {
         mIsSwitchingState = true;
         cancelScrollingIndicatorAnimations();
     }
 
     @Override
+    public void onLauncherTransitionStart(Launcher l, boolean animated, boolean toWorkspace) {
+    }
+
+    @Override
     public void onLauncherTransitionStep(Launcher l, float t) {
         mTransitionProgress = t;
     }
@@ -3285,7 +3259,7 @@
      * screen while a scroll is in progress.
      */
     public CellLayout getCurrentDropLayout() {
-        return (CellLayout) getChildAt(mNextPage == INVALID_PAGE ? mCurrentPage : mNextPage);
+        return (CellLayout) getChildAt(getNextPage());
     }
 
     /**
@@ -3437,7 +3411,7 @@
         if (!isSmall() && !mIsSwitchingState) {
             mInScrollArea = true;
 
-            final int page = (mNextPage != INVALID_PAGE ? mNextPage : mCurrentPage) +
+            final int page = getNextPage() +
                        (direction == DragController.SCROLL_LEFT ? -1 : 1);
 
             // We always want to exit the current layout to ensure parity of enter / exit