Merge "Fix wallpaper offsets for live wallpapers on tablet"
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index a07e4b6..60888d3 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Om \'n program te skuif, raak en hou dit."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Om \'n nuwe vouer op jou Tuisskerm te maak, stapel een program bo-op \'n ander."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Vouer oopgemaak, <xliff:g id="WIDTH">%1$d</xliff:g> by <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Raak om vouer toe te maak"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Raak om stoor te hernoem"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Vouer is gesluit"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Vouer hernoem na <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Vouer: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 38e8c71..4165189 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"መተግበሪያ ለማንቀሳቀስ፣ ንካው እና &amp; ያዘው::"</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"በመነሻ ማያህ ላይ አዲስ ዓቃፊ ለመፍጠር፣ አንዱን መተግበሪያ በሌላው ላይ ቆልል፡፡"</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"እሺ"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"አቃፊ ተከፍቷል፣ <xliff:g id="WIDTH">%1$d</xliff:g> በ <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"አቃፊን ለመዝጋት ንካ"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"ዳግም ሰይምን ለማስቀመጥ ንካ"</string>
     <string name="folder_closed" msgid="3130534551370511932">"አቃፊ ተዘግቷል"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"አቃፊ ዳግም ወደ <xliff:g id="NAME">%1$s</xliff:g> ተሰይሟል"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"አቃፊ ስም፦<xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index ec841ad..16ba2bf 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"لنقل التطبيق، المسه مع الاستمرار."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"لإنشاء مجلد جديد على الشاشة الرئيسية، يمكنك تكديس أحد التطبيقات فوق تطبيق آخر."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"موافق"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"تم فتح المجلد، بحجم <xliff:g id="WIDTH">%1$d</xliff:g> في <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"المس لإغلاق المجلد"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"المس لحفظ إعادة التسمية"</string>
     <string name="folder_closed" msgid="3130534551370511932">"تم إغلاق المجلد"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"تمت إعادة تسمية المجلد إلى <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"المجلد: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 12f1080..60ecc26 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Каб перамясціць прыкладанне, дакраніцеся дя яго і ўтрымлівайце."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Каб зрабіць новую тэчку на працоўным стале, перасуньце адно прыкладанне на другое."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"ОК"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Тэчка адкрыта, <xliff:g id="WIDTH">%1$d</xliff:g> на <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Нацiснiце, каб закрыць тэчку"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Краніце, каб захаваць новую назву"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Тэчка закрыта"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Тэчка перайменавана ў <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Тэчка <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 4271ea8..b525dcf 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Per moure una aplicació, mantén-la premuda."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Per fer una carpeta nova a la pàgina d\'inici, apila una aplicació sobre una altra."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"D\'acord"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"S\'ha obert la carpeta, <xliff:g id="WIDTH">%1$d</xliff:g> per <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Toca per tancar la carpeta"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Toca per desar el canvi de nom"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Carpeta tancada"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"S\'ha canviat el nom de la carpeta a <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Carpeta: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index a81c705..f2d972a 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -97,13 +97,10 @@
     <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_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>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <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>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Dotykem složku zavřete"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Dotykem uložíte změnu názvu"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Složka je uzavřena"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Složka přejmenována na <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Složka: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 3a8b6c0..43e0be0 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Tryk på en app, og hold den nede for at flytte den."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Du kan oprette en ny mappe på din startskærm ved at stable apps oven på hinanden."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Åben mappe, <xliff:g id="WIDTH">%1$d</xliff:g> gange <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Tryk for at lukke mappen"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Tryk for at gemme det nye navn"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Mappen er lukket"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Mappen er omdøbt til <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Mappe: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 69c112e..f4cece0 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Berühren und halten Sie eine App, um sie zu verschieben."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Stapeln Sie Apps übereinander, um einen neuen Ordner auf Ihrem Startbildschirm zu erstellen."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Ordner geöffnet, <xliff:g id="WIDTH">%1$d</xliff:g> x <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Ordner durch Berühren schließen"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Umbenennung durch Berühren speichern"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Ordner wurde geschlossen"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Ordner umbenannt in <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Ordner: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index a8e9937..9eb1e9a 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Για να μετακινήσετε μια εφαρμογή, αγγίξτε την παρατεταμένα."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Για να δημιουργήσετε ένα νέο φάκελο στην αρχική οθόνη, τοποθετήστε μια εφαρμογή πάνω σε μια άλλη."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Άνοιγμα φακέλου, <xliff:g id="WIDTH">%1$d</xliff:g> επί <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Αγγίξτε για να κλείσετε τον φάκελο"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Αγγίξτε για να αποθηκεύσετε το νέο όνομα"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Ο φάκελος έκλεισε"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Ο φάκελος μετονομάστηκε σε <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Φάκελος: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 952bcd9..8eeb9d5 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"To move an app, touch &amp; hold it."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"To make a new folder on your Home screen, stack one app on top of another."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Folder opened, <xliff:g id="WIDTH">%1$d</xliff:g> by <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Touch to close folder"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Touch to save rename"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Folder closed"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Folder renamed to <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Folder: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index b73c8f6..23b266f 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Para mover una aplicación, tócala &amp; mantenla presionada."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Para crear una carpeta nueva en tu pantalla principal, coloca una aplicación encima de la otra."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"Aceptar"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Carpeta abierta, <xliff:g id="WIDTH">%1$d</xliff:g> por <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Toca para cerrar la carpeta."</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Toca para guardar el nuevo nombre."</string>
     <string name="folder_closed" msgid="3130534551370511932">"Se cerró la carpeta."</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"El nombre de la carpeta se cambió a <xliff:g id="NAME">%1$s</xliff:g>."</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Carpeta: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index daae20a..4458782 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Para mover una aplicación, solo tienes que mantenerla pulsada."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Para crear una carpeta nueva en el escritorio, coloca una aplicación encima de otra."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"Aceptar"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Carpeta abierta, <xliff:g id="WIDTH">%1$d</xliff:g> por <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Toca para cerrar la carpeta."</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Toca para cambiar el nuevo nombre."</string>
     <string name="folder_closed" msgid="3130534551370511932">"Carpeta cerrada"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Se ha cambiado el nombre de la carpeta a <xliff:g id="NAME">%1$s</xliff:g>."</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Carpeta: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index feb7304..7193149 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Rakenduse liigutamiseks pange sõrm rakendusele ja hoidke seda."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Avakuval uue kausta tegemiseks virnastage üks rakendus teisele."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Kaust on avatud, <xliff:g id="WIDTH">%1$d</xliff:g> x <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Puudutage kausta sulgemiseks"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Puudutage uue nime salvestamiseks"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Kaust suletud"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Kausta uus nimi: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"<xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 5b4b3b1..c1670d8 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Voit siirtää sovelluksia koskettamalla sovellusta pitkään."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Voit luoda uuden kansion aloitusruutuun pinoamalla yhden sovelluksen toisen päälle."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Kansio avattu, koko <xliff:g id="WIDTH">%1$d</xliff:g> x <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Sulje kansio koskettamalla"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Tallenna uudella nimellä koskettamalla"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Kansio on suljettu"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Kansion nimeksi vaihdettiin <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Kansio: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 5f12da4..6fe1083 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Pour déplacer une application, appuyez dessus de manière prolongée."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Pour créer un dossier sur votre écran d\'accueil, superposez les applications les unes sur les autres."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Dossier ouvert, <xliff:g id="WIDTH">%1$d</xliff:g> par <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Appuyez pour fermer le dossier."</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Appuyez pour enregistrer le nouveau nom."</string>
     <string name="folder_closed" msgid="3130534551370511932">"Dossier fermé"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Nouveau nom du dossier : <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Dossier : <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index cdfdec1..d44f9c8 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"किसी एप्लिकेशन को ले जाने के लिए, उसे स्‍पर्श करके रखें."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"अपनी मुखपृष्ठ स्‍क्रीन पर कोई नया फ़ोल्डर बनाने के लिए, एक एप्लिकेशन को दूसरे के शीर्ष पर स्‍टैक करें."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"ठीक"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"फ़ोल्डर खोला गया, <xliff:g id="WIDTH">%1$d</xliff:g> गुणा <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"फ़ोल्‍डर बंद करने के लिए स्‍पर्श करें"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"परिवर्तित नाम सहेजने के लिए स्पर्श करें"</string>
     <string name="folder_closed" msgid="3130534551370511932">"फ़ोल्डर बंद किया गया"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"फ़ोल्डर का नाम बदलकर <xliff:g id="NAME">%1$s</xliff:g> किया गया"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"फ़ोल्डर: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 45af4a8..a588d5c 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Da biste premjestili aplikaciju, dodirnite je i zadržite."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Da biste napravili novu mapu na početnom zaslonu, stavite jednu aplikaciju na drugu."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"U redu"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Mapa je otvorena, <xliff:g id="WIDTH">%1$d</xliff:g> x <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Dodirnite za zatvaranje mape"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Dodirnite da biste spremili preimenovanje"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Mapa zatvorena"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Mapa je preimenovana u <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Mapa: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 53ce648..1faa884 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Ha egy alkalmazást át szeretne helyezni, érintse meg, és tartsa lenyomva."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Ha egy új mappát szeretne létrehozni a kezdőképernyőn, helyezzen egymásra két alkalmazást."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Mappa megnyitva -- szélesség: <xliff:g id="WIDTH">%1$d</xliff:g>; magasság: <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Érintse meg a mappa bezárásához"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Érintse meg az átnevezés mentéséhez"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Mappa lezárva"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Mappa új neve: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Mappa: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index a0ec60f..0e4e33a 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Untuk memindahkan apl, sentuh &amp; tahan apl tersebut."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Untuk membuat map baru di layar Utama Anda, tumpuk satu apl di atas apl yang lain."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Map dibuka, <xliff:g id="WIDTH">%1$d</xliff:g> kali <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Sentuh untuk menutup map"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Sentuh untuk menyimpan pengubahan nama"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Map ditutup"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Map diubah namanya menjadi <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Map: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index b650733..0fab2e2 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Per spostare un\'applicazione, tocca e tieni premuto."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Per creare una nuova cartella sulla schermata Home, impila un\'applicazione su un\'altra."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Cartella aperta, <xliff:g id="WIDTH">%1$d</xliff:g> per <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Tocca per chiudere la cartella"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Tocca per salvare nuovo nome"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Cartella chiusa"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Nome della cartella sostituito con <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Cartella: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 0855358..75cda09 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"כדי להעביר יישום, גע בו והחזק אותו."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"כדי ליצור תיקיה חדשה במסך דף הבית, הצב יישום אחד בערימה מעל יישום אחר."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"בסדר"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"תיקיה פתוחה, <xliff:g id="WIDTH">%1$d</xliff:g> על <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"גע כדי לסגור את התיקייה"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"גע כדי לשמור שינוי שם"</string>
     <string name="folder_closed" msgid="3130534551370511932">"התיקייה נסגרה"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"שם התיקיה שונה ל-<xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"תיקיה: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index ed2279e..87ef7c8 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"アプリを移動するにはアプリを押し続けます。"</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"ホーム画面に新しいフォルダを作成するには、アプリを他のアプリの上に重ねます。"</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"フォルダが開いています。<xliff:g id="WIDTH">%1$d</xliff:g>x<xliff:g id="HEIGHT">%2$d</xliff:g>の大きさです"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"タップしてフォルダを閉じます"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"タップして名前の変更を保存します"</string>
     <string name="folder_closed" msgid="3130534551370511932">"フォルダは閉じています"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"フォルダの名前を「<xliff:g id="NAME">%1$s</xliff:g>」に変更しました"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"フォルダ: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 9a460eb..662811e 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"앱을 이동하려면 길게 터치합니다."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"홈 화면에 새로운 폴더를 만들려면 앱 하나를 다른 앱 위에 겹쳐 놓습니다."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"확인"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"폴더 열림(<xliff:g id="WIDTH">%1$d</xliff:g>X<xliff:g id="HEIGHT">%2$d</xliff:g>)"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"터치하여 폴더를 닫음"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"터치하여 바꾼 이름을 저장"</string>
     <string name="folder_closed" msgid="3130534551370511932">"폴더 닫음"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"<xliff:g id="NAME">%1$s</xliff:g>(으)로 폴더 이름 바꿈"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"폴더: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 5af11aa..cb1d91f 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Jei norite perkelti programą, palieskite ją ir laikykite."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Jei pagrindiniame ekrane norite sukurti naują aplanką, uždėkite vieną programą ant kitos."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"Gerai"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Atidarytas aplankas, <xliff:g id="WIDTH">%1$d</xliff:g> ir <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Palieskite, kad uždarytumėte aplanką"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Palieskite, kad išsaugotumėte naują pavadinimą"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Aplankas uždarytas"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Aplankas pervardintas kaip „<xliff:g id="NAME">%1$s</xliff:g>“"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Aplankas: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 3907667..90850ae 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Lai pārvietotu lietotni, pieskarieties tai un turiet to nospiestu."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Lai sākuma ekrānā izveidotu jaunu mapi, novietojiet vienu lietotni virs citas lietotnes."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"Labi"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Atvērta mape: <xliff:g id="WIDTH">%1$d</xliff:g> x <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Pieskarieties, lai aizvērtu mapi."</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Pieskarieties, lai saglabātu pārdēvēto nosaukumu."</string>
     <string name="folder_closed" msgid="3130534551370511932">"Mape aizvērta"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Mape pārdēvēta par: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Mape: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index a53d52d..01ae1da 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Berør og hold nede en app for å flytte den."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Du kan lage en ny mappe på startsiden ved å stable én app oppå en annen."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Mappen er åpnet – <xliff:g id="WIDTH">%1$d</xliff:g> ganger <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Trykk for å lukke mappen"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Trykk for å lagre nytt navn"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Mappen ble lukket"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Mappen har endret navn til <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Mappe: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index a7c5c11..28edf47 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Als u een app wilt verplaatsen, blijft u de app aanraken."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Als u een nieuwe map op het startscherm wilt maken, stapelt u een app boven op een andere app."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Map geopend, <xliff:g id="WIDTH">%1$d</xliff:g> bij <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Raak dit aan om de map te sluiten"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Raak dit aan om naam wijzigen op te slaan"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Map gesloten"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"De naam van de map is gewijzigd in <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Map: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index b8a1a55..3340fa3 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -53,7 +53,7 @@
     <string name="delete_zone_label_all_apps" msgid="6664588234817475108">"Odinstaluj"</string>
     <string name="delete_target_label" msgid="665300185123139530">"Usuń"</string>
     <string name="delete_target_uninstall_label" msgid="748894921183769150">"Odinstaluj"</string>
-    <string name="info_target_label" msgid="4019495079517426980">"Informacje o aplikacji"</string>
+    <string name="info_target_label" msgid="4019495079517426980">"O aplikacji"</string>
     <string name="accessibility_search_button" msgid="816822994629942611">"Szukaj"</string>
     <string name="accessibility_voice_search_button" msgid="3938249215065842475">"Wyszukiwanie głosowe"</string>
     <string name="accessibility_all_apps_button" msgid="8803738611398979849">"Aplikacje"</string>
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Dotknij i przytrzymaj, aby przenieść aplikację."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Aby utworzyć nowy folder na ekranie głównym, ułóż aplikacje jedna na drugiej."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Folder otwarty, <xliff:g id="WIDTH">%1$d</xliff:g> na <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Dotknij, aby zamknąć folder"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Dotknij, aby zapisać zmianę nazwy"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Folder zamknięty"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Nazwa folderu zmieniona na <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Folder: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 941b3bc..ea407b7 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Para mover uma aplicação, toque na mesma sem largar."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Para criar uma nova pasta no Ecrã principal, empilhe uma aplicação por cima de outra."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Pasta aberta, <xliff:g id="WIDTH">%1$d</xliff:g> por <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Toque para fechar a pasta"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Toque para guardar o nome novo"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Pasta fechada"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Nome de pasta alterado para <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Pasta: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 0f10c6e..a623510 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Para mover um aplicativo, toque e mantenha-o pressionado."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Para criar uma nova pasta em sua tela inicial, coloque um aplicativo em cima do outro."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Pasta aberta, <xliff:g id="WIDTH">%1$d</xliff:g> por <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Toque para fechar a pasta"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Toque para salvar o novo nome"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Pasta fechada"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Pasta renomeada para <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Pasta: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 7ba087d..cf92bf2 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Чтобы переместить значок приложения, нажмите на него и удерживайте."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Чтобы создать папку на главном экране, перенесите одно приложение на другое."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"ОК"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Папка открыта, <xliff:g id="WIDTH">%1$d</xliff:g> на <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Нажмите, чтобы закрыть папку"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Нажмите, чтобы подтвердить переименование"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Папка закрыта"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Папка переименована в \"<xliff:g id="NAME">%1$s</xliff:g>\""</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Папка: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 337ab8b..b5f8814 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Ak chcete presunúť aplikáciu, dotknite sa jej a podržte ju."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Ak chcete vytvoriť nový priečinok na ploche, presuňte jednu aplikáciu na inú."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Otvorený priečinok, <xliff:g id="WIDTH">%1$d</xliff:g> x <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Dotykom zavriete priečinok"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Dotykom premenovanie uložíte"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Priečinok je uzavretý"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Priečinok bol premenovaný na <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Priečinok: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index e7dd6ab..c9b2e04 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Če želite premakniti program, se ga dotaknite in ga pridržite."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Če želite na začetnem zaslonu ustvariti novo mapo, postavite en program na drugega."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"V redu"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Mapa je odprta, <xliff:g id="WIDTH">%1$d</xliff:g> krat <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Dotaknite se, da zaprete mapo"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Dotaknite se, da shranite preimenovanje"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Mapa je zaprta"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Mapa je preimenovana v <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Mapa: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 039a832..5dbfeab 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Да бисте преместили апликацију, додирните је и задржите."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Да бисте направили нови директоријум на почетном екрану, поређајте апликације једну на другу."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"Потврди"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Директоријум је отворен, <xliff:g id="WIDTH">%1$d</xliff:g> пута <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Додирните да бисте затворили директоријум"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Додирните да бисте сачували промену имена"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Директоријум је затворен"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Директоријум је преименован у <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Директоријум: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index fa2ab46..3bcc144 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"หากต้องการย้ายแอปพลิเคชัน ให้แตะแอปพลิเคชันนั้นค้างไว้"</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"หากต้องการสร้างโฟลเดอร์ใหม่บนหน้าจอหลัก ให้วางแอปพลิเคชันหนึ่งซ้อนบนแอปพลิเคชันอื่น"</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"ตกลง"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"เปิดโฟลเดอร์ <xliff:g id="WIDTH">%1$d</xliff:g> x <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"แตะเพื่อปิดโฟลเดอร์"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"แตะเพื่อบัน​​ทึกการเปลี่ยนชื่อ"</string>
     <string name="folder_closed" msgid="3130534551370511932">"โฟลเดอร์ปิดอยู่"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"เปลี่ยนชื่อโฟลเดอร์เป็น <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"โฟลเดอร์: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 92ace90..e315cd8 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Upang ilipat ang isang app, pindutin ito nang matagal."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Upang gumawa ng bagong folder sa iyong home screen, magpatong ng isang app sa ibabaw ng isa pa."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Binuksan ang folder, <xliff:g id="WIDTH">%1$d</xliff:g> by <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Pindutin upang isara ang folder"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Pindutin upang i-save ang pagpapalit ng pangalan"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Nakasara ang folder"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Binago ang pangalan ng folder patungong <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Folder: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 86b461a..0ee1529 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Щоб перемістити програму, торкніться й утримуйте її."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Щоб створити нову папку на головному екрані, помістіть одну програму на іншу."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"ОК"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Папку відкрито: <xliff:g id="WIDTH">%1$d</xliff:g> х <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Торкніться, щоб закрити папку"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Торкніться, щоб зберегти перейменування"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Папку закрито"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Папку перейменовано на <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Папка: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 541aea5..544c8a4 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Để di chuyển ứng dụng, chạm &amp; giữ ứng dụng đó."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Để tạo thư mục mới trên Màn hình chính của bạn, xếp ứng dụng này lên trên ứng dụng khác."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"OK"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Đã mở thư mục, <xliff:g id="WIDTH">%1$d</xliff:g> x <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Chạm để đóng thư mục"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Chạm để lưu tên mới"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Đã đóng thư mục"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Đã đổi tên thư mục thành <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Thư mục: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 5b1c4ae..7e71289 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -97,13 +97,10 @@
     <string name="folder_cling_move_item" msgid="270598675060435169">"Ukususa insiza, thinta &amp; uyibambe."</string>
     <string name="folder_cling_create_folder" msgid="8352867485656129478">"Ukwenza ifolda entsha eskrinini sakho sasekhaya, beka insiza eyodwa phezulu kwenye."</string>
     <string name="cling_dismiss" msgid="2780907108735868381">"KULUNGILE"</string>
-    <!-- no translation found for folder_opened (1262064100943801533) -->
-    <skip />
+    <string name="folder_opened" msgid="1262064100943801533">"Ifolda ivulwe, <xliff:g id="WIDTH">%1$d</xliff:g> by <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
     <string name="folder_tap_to_close" msgid="1335478160661137579">"Thinta ukuze uvale ifolda"</string>
     <string name="folder_tap_to_rename" msgid="5201612989905472442">"Thinta ukuze ulondoloze ukuqamba kabusha"</string>
     <string name="folder_closed" msgid="3130534551370511932">"Ifolda ivaliwe"</string>
-    <!-- no translation found for folder_renamed (7951233572858053642) -->
-    <skip />
-    <!-- no translation found for folder_name_format (3051680259794759037) -->
-    <skip />
+    <string name="folder_renamed" msgid="7951233572858053642">"Ifolda ishintshwe kabusha ku-<xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="folder_name_format" msgid="3051680259794759037">"Ifolda: <xliff:g id="NAME">%1$s</xliff:g>"</string>
 </resources>
diff --git a/src/com/android/launcher2/AppWidgetResizeFrame.java b/src/com/android/launcher2/AppWidgetResizeFrame.java
index 6d132eb..c01a882 100644
--- a/src/com/android/launcher2/AppWidgetResizeFrame.java
+++ b/src/com/android/launcher2/AppWidgetResizeFrame.java
@@ -80,7 +80,7 @@
         mWorkspace = (Workspace) dragLayer.findViewById(R.id.workspace);
 
         final AppWidgetProviderInfo info = widgetView.getAppWidgetInfo();
-        int[] result = mLauncher.getMinResizeSpanForWidget(info, null);
+        int[] result = mLauncher.getMinSpanForWidget(info, null);
         mMinHSpan = result[0];
         mMinVSpan = result[1];
 
diff --git a/src/com/android/launcher2/AppsCustomizePagedView.java b/src/com/android/launcher2/AppsCustomizePagedView.java
index 2001ad9..3fcff72 100644
--- a/src/com/android/launcher2/AppsCustomizePagedView.java
+++ b/src/com/android/launcher2/AppsCustomizePagedView.java
@@ -629,6 +629,9 @@
                     spanXY[1], createWidgetInfo, true);
             createItemInfo.spanX = spanXY[0];
             createItemInfo.spanY = spanXY[1];
+            int[] minSpanXY = mLauncher.getMinSpanForWidget(createWidgetInfo, null);
+            createWidgetInfo.minSpanX = minSpanXY[0];
+            createWidgetInfo.minSpanY = minSpanXY[1];
 
             FastBitmapDrawable previewDrawable = (FastBitmapDrawable) image.getDrawable();
             float minScale = 1.25f;
diff --git a/src/com/android/launcher2/ButtonDropTarget.java b/src/com/android/launcher2/ButtonDropTarget.java
index 4ff7c96..dc34d88 100644
--- a/src/com/android/launcher2/ButtonDropTarget.java
+++ b/src/com/android/launcher2/ButtonDropTarget.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Paint;
+import android.graphics.Rect;
 import android.util.AttributeSet;
 import android.widget.TextView;
 
@@ -41,7 +42,7 @@
     protected boolean mActive;
 
     /** The paint applied to the drag view on hover */
-    protected final Paint mHoverPaint = new Paint();
+    protected int mHoverColor = 0;
 
     public ButtonDropTarget(Context context, AttributeSet attrs) {
         this(context, attrs, 0);
@@ -71,7 +72,7 @@
     }
 
     public void onDragEnter(DragObject d) {
-        d.dragView.setPaint(mHoverPaint);
+        d.dragView.setColor(mHoverColor);
     }
 
     public void onDragOver(DragObject d) {
@@ -79,7 +80,7 @@
     }
 
     public void onDragExit(DragObject d) {
-        d.dragView.setPaint(null);
+        d.dragView.setColor(0);
     }
 
     public void onDragStart(DragSource source, Object info, int dragAction) {
@@ -100,6 +101,26 @@
         outRect.bottom += mBottomDragPadding;
     }
 
+    Rect getIconRect(int itemWidth, int itemHeight, int drawableWidth, int drawableHeight) {
+        DragLayer dragLayer = mLauncher.getDragLayer();
+
+        // Find the rect to animate to (the view is center aligned)
+        Rect to = new Rect();
+        dragLayer.getViewRectRelativeToSelf(this, to);
+        int width = drawableWidth;
+        int height = drawableHeight;
+        int left = to.left + getPaddingLeft();
+        int top = to.top + (getMeasuredHeight() - height) / 2;
+        to.set(left, top, left + width, top + height);
+
+        // Center the destination rect about the trash icon
+        int xOffset = (int) -(itemWidth - width) / 2;
+        int yOffset = (int) -(itemHeight - height) / 2;
+        to.offset(xOffset, yOffset);
+
+        return to;
+    }
+
     @Override
     public DropTarget getDropTargetDelegate(DragObject d) {
         return null;
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index 5df271e..37328ef 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -34,7 +34,6 @@
 import android.graphics.PorterDuff;
 import android.graphics.PorterDuffXfermode;
 import android.graphics.Rect;
-import android.graphics.RectF;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.NinePatchDrawable;
 import android.util.AttributeSet;
@@ -53,6 +52,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
+import java.util.Stack;
 
 public class CellLayout extends ViewGroup {
     static final String TAG = "CellLayout";
@@ -109,7 +109,7 @@
 
     // These arrays are used to implement the drag visualization on x-large screens.
     // They are used as circular arrays, indexed by mDragOutlineCurrent.
-    private Point[] mDragOutlines = new Point[4];
+    private Rect[] mDragOutlines = new Rect[4];
     private float[] mDragOutlineAlphas = new float[mDragOutlines.length];
     private InterruptibleInOutAnimator[] mDragOutlineAnims =
             new InterruptibleInOutAnimator[mDragOutlines.length];
@@ -198,7 +198,7 @@
 
         mDragCell[0] = mDragCell[1] = -1;
         for (int i = 0; i < mDragOutlines.length; i++) {
-            mDragOutlines[i] = new Point(-1, -1);
+            mDragOutlines[i] = new Rect(-1, -1, -1, -1);
         }
 
         // When dragging things around the home screens, we show a green outline of
@@ -232,10 +232,7 @@
                         animation.cancel();
                     } else {
                         mDragOutlineAlphas[thisIndex] = (Float) animation.getAnimatedValue();
-                        final int left = mDragOutlines[thisIndex].x;
-                        final int top = mDragOutlines[thisIndex].y;
-                        CellLayout.this.invalidate(left, top,
-                                left + outline.getWidth(), top + outline.getHeight());
+                        CellLayout.this.invalidate(mDragOutlines[thisIndex]);
                     }
                 }
             });
@@ -419,10 +416,10 @@
         for (int i = 0; i < mDragOutlines.length; i++) {
             final float alpha = mDragOutlineAlphas[i];
             if (alpha > 0) {
-                final Point p = mDragOutlines[i];
+                final Rect r = mDragOutlines[i];
                 final Bitmap b = (Bitmap) mDragOutlineAnims[i].getTag();
                 paint.setAlpha((int)(alpha + .5f));
-                canvas.drawBitmap(b, p.x, p.y, paint);
+                canvas.drawBitmap(b, null, r, paint);
             }
         }
 
@@ -1038,11 +1035,16 @@
     }
 
     void visualizeDropLocation(View v, Bitmap dragOutline, int originX, int originY,
-            int spanX, int spanY, Point dragOffset, Rect dragRegion) {
+            int minSpanX, int minSpanY, int spanX, int spanY, Point dragOffset, Rect dragRegion) {
 
         final int oldDragCellX = mDragCell[0];
         final int oldDragCellY = mDragCell[1];
-        final int[] nearest = findNearestVacantArea(originX, originY, spanX, spanY, v, mDragCell);
+        int[] resultSpan = new int[2];
+        final int[] nearest = findNearestVacantArea(originX, originY, minSpanX, minSpanY,
+                spanX, spanY, v, mDragCell, resultSpan);
+        boolean resize = spanX > resultSpan[0] || spanY > resultSpan[1];
+        spanX = resultSpan[0];
+        spanY = resultSpan[1];
         if (v != null && dragOffset == null) {
             mDragCenter.set(originX + (v.getWidth() / 2), originY + (v.getHeight() / 2));
         } else {
@@ -1093,12 +1095,15 @@
                             - dragOutline.getHeight()) / 2;
                 }
             }
-
             final int oldIndex = mDragOutlineCurrent;
             mDragOutlineAnims[oldIndex].animateOut();
             mDragOutlineCurrent = (oldIndex + 1) % mDragOutlines.length;
+            Rect r = mDragOutlines[mDragOutlineCurrent];
+            r.set(left, top, left + dragOutline.getWidth(), top + dragOutline.getHeight());
+            if (resize) {
+                cellToRect(nearest[0], nearest[1], spanX, spanY, r);
+            }
 
-            mDragOutlines[mDragOutlineCurrent].set(left, top);
             mDragOutlineAnims[mDragOutlineCurrent].setTag(dragOutline);
             mDragOutlineAnims[mDragOutlineCurrent].animateIn();
         }
@@ -1112,8 +1117,7 @@
     public void clearDragOutlines() {
         final int oldIndex = mDragOutlineCurrent;
         mDragOutlineAnims[oldIndex].animateOut();
-        mDragCell[0] = -1;
-        mDragCell[1] = -1;
+        mDragCell[0] = mDragCell[1] = -1;
     }
 
     /**
@@ -1129,8 +1133,8 @@
      * @return The X, Y cell of a vacant area that can contain this object,
      *         nearest the requested location.
      */
-    int[] findNearestVacantArea(
-            int pixelX, int pixelY, int spanX, int spanY, int[] result) {
+    int[] findNearestVacantArea(int pixelX, int pixelY, int spanX, int spanY,
+            int[] result) {
         return findNearestVacantArea(pixelX, pixelY, spanX, spanY, null, result);
     }
 
@@ -1140,6 +1144,27 @@
      *
      * @param pixelX The X location at which you want to search for a vacant area.
      * @param pixelY The Y location at which you want to search for a vacant area.
+     * @param minSpanX The minimum horizontal span required
+     * @param minSpanY The minimum vertical span required
+     * @param spanX Horizontal span of the object.
+     * @param spanY Vertical span of the object.
+     * @param result Array in which to place the result, or null (in which case a new array will
+     *        be allocated)
+     * @return The X, Y cell of a vacant area that can contain this object,
+     *         nearest the requested location.
+     */
+    int[] findNearestVacantArea(int pixelX, int pixelY, int minSpanX, int minSpanY, int spanX,
+            int spanY, int[] result, int[] resultSpan) {
+        return findNearestVacantArea(pixelX, pixelY, minSpanX, minSpanY, spanX, spanY, null,
+                result, resultSpan);
+    }
+
+    /**
+     * Find a vacant area that will fit the given bounds nearest the requested
+     * cell location. Uses Euclidean distance to score multiple vacant areas.
+     *
+     * @param pixelX The X location at which you want to search for a vacant area.
+     * @param pixelY The Y location at which you want to search for a vacant area.
      * @param spanX Horizontal span of the object.
      * @param spanY Vertical span of the object.
      * @param ignoreOccupied If true, the result can be an occupied cell
@@ -1150,6 +1175,43 @@
      */
     int[] findNearestArea(int pixelX, int pixelY, int spanX, int spanY, View ignoreView,
             boolean ignoreOccupied, int[] result) {
+        return findNearestArea(pixelX, pixelY, spanX, spanY,
+                spanX, spanY, ignoreView, ignoreOccupied, result, null);
+    }
+
+    private final Stack<Rect> mTempRectStack = new Stack<Rect>();
+    private void lazyInitTempRectStack() {
+        if (mTempRectStack.isEmpty()) {
+            for (int i = 0; i < mCountX * mCountY; i++) {
+                mTempRectStack.push(new Rect());
+            }
+        }
+    }
+    private void recycleTempRects(Stack<Rect> used) {
+        while (!used.isEmpty()) {
+            mTempRectStack.push(used.pop());
+        }
+    }
+
+    /**
+     * Find a vacant area that will fit the given bounds nearest the requested
+     * cell location. Uses Euclidean distance to score multiple vacant areas.
+     *
+     * @param pixelX The X location at which you want to search for a vacant area.
+     * @param pixelY The Y location at which you want to search for a vacant area.
+     * @param minSpanX The minimum horizontal span required
+     * @param minSpanY The minimum vertical span required
+     * @param spanX Horizontal span of the object.
+     * @param spanY Vertical span of the object.
+     * @param ignoreOccupied If true, the result can be an occupied cell
+     * @param result Array in which to place the result, or null (in which case a new array will
+     *        be allocated)
+     * @return The X, Y cell of a vacant area that can contain this object,
+     *         nearest the requested location.
+     */
+    int[] findNearestArea(int pixelX, int pixelY, int minSpanX, int minSpanY, int spanX, int spanY,
+            View ignoreView, boolean ignoreOccupied, int[] result, int[] resultSpan) {
+        lazyInitTempRectStack();
         // mark space take by ignoreView as available (method checks if ignoreView is null)
         markCellsAsUnoccupiedForView(ignoreView);
 
@@ -1162,35 +1224,99 @@
         // Keep track of best-scoring drop area
         final int[] bestXY = result != null ? result : new int[2];
         double bestDistance = Double.MAX_VALUE;
+        final Rect bestRect = new Rect(-1, -1, -1, -1);
+        final Stack<Rect> validRegions = new Stack<Rect>();
 
         final int countX = mCountX;
         final int countY = mCountY;
         final boolean[][] occupied = mOccupied;
 
-        for (int y = 0; y < countY - (spanY - 1); y++) {
+        if (minSpanX <= 0 || minSpanY <= 0 || spanX <= 0 || spanY <= 0 ||
+                spanX < minSpanX || spanY < minSpanY) {
+            return bestXY;
+        }
+
+        for (int y = 0; y < countY - (minSpanY - 1); y++) {
             inner:
-            for (int x = 0; x < countX - (spanX - 1); x++) {
+            for (int x = 0; x < countX - (minSpanX - 1); x++) {
+                int ySize = -1;
+                int xSize = -1;
                 if (ignoreOccupied) {
-                    for (int i = 0; i < spanX; i++) {
-                        for (int j = 0; j < spanY; j++) {
+                    // First, let's see if this thing fits anywhere
+                    for (int i = 0; i < minSpanX; i++) {
+                        for (int j = 0; j < minSpanY; j++) {
                             if (occupied[x + i][y + j]) {
-                                // small optimization: we can skip to after the column we
-                                // just found an occupied cell
-                                x += i;
                                 continue inner;
                             }
                         }
                     }
+                    xSize = minSpanX;
+                    ySize = minSpanY;
+
+                    // We know that the item will fit at _some_ acceptable size, now let's see
+                    // how big we can make it. We'll alternate between incrementing x and y spans
+                    // until we hit a limit.
+                    boolean incX = true;
+                    boolean hitMaxX = xSize >= spanX;
+                    boolean hitMaxY = ySize >= spanY;
+                    while (!(hitMaxX && hitMaxY)) {
+                        if (incX && !hitMaxX) {
+                            for (int j = 0; j < ySize; j++) {
+                                if (x + xSize > countX -1 || occupied[x + xSize][y + j]) {
+                                    // We can't move out horizontally
+                                    hitMaxX = true;
+                                }
+                            }
+                            if (!hitMaxX) {
+                                xSize++;
+                            }
+                        } else if (!hitMaxY) {
+                            for (int i = 0; i < xSize; i++) {
+                                if (y + ySize > countY - 1 || occupied[x + i][y + ySize]) {
+                                    // We can't move out vertically
+                                    hitMaxY = true;
+                                }
+                            }
+                            if (!hitMaxY) {
+                                ySize++;
+                            }
+                        }
+                        hitMaxX |= xSize >= spanX;
+                        hitMaxY |= ySize >= spanY;
+                        incX = !incX;
+                    }
+                    incX = true;
+                    hitMaxX = xSize >= spanX;
+                    hitMaxY = ySize >= spanY;
                 }
                 final int[] cellXY = mTmpXY;
                 cellToCenterPoint(x, y, cellXY);
 
+                // We verify that the current rect is not a sub-rect of any of our previous
+                // candidates. In this case, the current rect is disqualified in favour of the
+                // containing rect.
+                Rect currentRect = mTempRectStack.pop();
+                currentRect.set(x, y, x + xSize, y + ySize);
+                boolean contained = false;
+                for (Rect r : validRegions) {
+                    if (r.contains(currentRect)) {
+                        contained = true;
+                        break;
+                    }
+                }
+                validRegions.push(currentRect);
                 double distance = Math.sqrt(Math.pow(cellXY[0] - pixelX, 2)
                         + Math.pow(cellXY[1] - pixelY, 2));
-                if (distance <= bestDistance) {
+                if ((distance <= bestDistance && !contained) ||
+                        currentRect.contains(bestRect)) {
                     bestDistance = distance;
                     bestXY[0] = x;
                     bestXY[1] = y;
+                    if (resultSpan != null) {
+                        resultSpan[0] = xSize;
+                        resultSpan[1] = ySize;
+                    }
+                    bestRect.set(currentRect);
                 }
             }
         }
@@ -1202,6 +1328,7 @@
             bestXY[0] = -1;
             bestXY[1] = -1;
         }
+        recycleTempRects(validRegions);
         return bestXY;
     }
 
@@ -1224,6 +1351,27 @@
     }
 
     /**
+     * Find a vacant area that will fit the given bounds nearest the requested
+     * cell location. Uses Euclidean distance to score multiple vacant areas.
+     *
+     * @param pixelX The X location at which you want to search for a vacant area.
+     * @param pixelY The Y location at which you want to search for a vacant area.
+     * @param minSpanX The minimum horizontal span required
+     * @param minSpanY The minimum vertical span required
+     * @param spanX Horizontal span of the object.
+     * @param spanY Vertical span of the object.
+     * @param ignoreView Considers space occupied by this view as unoccupied
+     * @param result Previously returned value to possibly recycle.
+     * @return The X, Y cell of a vacant area that can contain this object,
+     *         nearest the requested location.
+     */
+    int[] findNearestVacantArea(int pixelX, int pixelY, int minSpanX, int minSpanY,
+            int spanX, int spanY, View ignoreView, int[] result, int[] resultSpan) {
+        return findNearestArea(pixelX, pixelY, minSpanX, minSpanY,
+                spanX, spanY, ignoreView, true, result, resultSpan);
+    }
+
+    /**
      * Find a starting cell position that will fit the given bounds nearest the requested
      * cell location. Uses Euclidean distance to score multiple vacant areas.
      *
@@ -1390,8 +1538,7 @@
         }
 
         // Invalidate the drag data
-        mDragCell[0] = -1;
-        mDragCell[1] = -1;
+        mDragCell[0] = mDragCell[1] = -1;
         mDragOutlineAnims[mDragOutlineCurrent].animateOut();
         mDragOutlineCurrent = (mDragOutlineCurrent + 1) % mDragOutlineAnims.length;
 
@@ -1422,7 +1569,7 @@
      * @param cellVSpan Height in cells
      * @param resultRect Rect into which to put the results
      */
-    public void cellToRect(int cellX, int cellY, int cellHSpan, int cellVSpan, RectF resultRect) {
+    public void cellToRect(int cellX, int cellY, int cellHSpan, int cellVSpan, Rect resultRect) {
         final int cellWidth = mCellWidth;
         final int cellHeight = mCellHeight;
         final int widthGap = mWidthGap;
@@ -1597,10 +1744,10 @@
         }
     }
 
-    public void onMove(View view, int newCellX, int newCellY) {
+    public void onMove(View view, int newCellX, int newCellY, int newSpanX, int newSpanY) {
         LayoutParams lp = (LayoutParams) view.getLayoutParams();
         markCellsAsUnoccupiedForView(view);
-        markCellsForView(newCellX, newCellY, lp.cellHSpan, lp.cellVSpan, true);
+        markCellsForView(newCellX, newCellY, newSpanX, newSpanY, true);
     }
 
     public void markCellsAsOccupiedForView(View view) {
diff --git a/src/com/android/launcher2/DeleteDropTarget.java b/src/com/android/launcher2/DeleteDropTarget.java
index a6b2b5c..4621dea 100644
--- a/src/com/android/launcher2/DeleteDropTarget.java
+++ b/src/com/android/launcher2/DeleteDropTarget.java
@@ -20,22 +20,21 @@
 import android.content.res.ColorStateList;
 import android.content.res.Configuration;
 import android.content.res.Resources;
-import android.graphics.PorterDuff;
-import android.graphics.PorterDuffColorFilter;
 import android.graphics.Rect;
 import android.graphics.drawable.TransitionDrawable;
 import android.util.AttributeSet;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.animation.AccelerateInterpolator;
 import android.view.animation.DecelerateInterpolator;
+import android.view.animation.LinearInterpolator;
 
 import com.android.launcher.R;
 
 public class DeleteDropTarget extends ButtonDropTarget {
 
-    private static int DELETE_ANIMATION_DURATION = 250;
+    private static int DELETE_ANIMATION_DURATION = 300;
     private ColorStateList mOriginalTextColor;
-    private int mHoverColor = 0xFFFF0000;
     private TransitionDrawable mUninstallDrawable;
     private TransitionDrawable mRemoveDrawable;
     private TransitionDrawable mCurrentDrawable;
@@ -58,8 +57,6 @@
         // Get the hover color
         Resources r = getResources();
         mHoverColor = r.getColor(R.color.delete_target_hover_tint);
-        mHoverPaint.setColorFilter(new PorterDuffColorFilter(
-                mHoverColor, PorterDuff.Mode.SRC_ATOP));
         mUninstallDrawable = (TransitionDrawable) 
                 r.getDrawable(R.drawable.uninstall_target_selector);
         mRemoveDrawable = (TransitionDrawable) r.getDrawable(R.drawable.remove_target_selector);
@@ -162,32 +159,19 @@
         if (!d.dragComplete) {
             mCurrentDrawable.resetTransition();
             setTextColor(mOriginalTextColor);
+        } else {
+            // Restore the hover color if we are deleting
+            d.dragView.setColor(mHoverColor);
         }
     }
 
-    Rect getDeleteRect(int deleteItemWidth, int deleteItemHeight) {
-        DragLayer dragLayer = mLauncher.getDragLayer();
-
-        Rect to = new Rect();
-        dragLayer.getViewRectRelativeToSelf(this, to);
-        int width = mCurrentDrawable.getIntrinsicWidth();
-        int height = mCurrentDrawable.getIntrinsicHeight();
-        to.set(to.left + getPaddingLeft(), to.top + getPaddingTop(),
-                to.left + getPaddingLeft() + width, to.bottom);
-
-        // Center the destination rect about the trash icon
-        int xOffset = (int) -(deleteItemWidth - width) / 2;
-        int yOffset = (int) -(deleteItemHeight - height) / 2;
-        to.offset(xOffset, yOffset);
-
-        return to;
-    }
-
     private void animateToTrashAndCompleteDrop(final DragObject d) {
         DragLayer dragLayer = mLauncher.getDragLayer();
         Rect from = new Rect();
         dragLayer.getViewRectRelativeToSelf(d.dragView, from);
-        Rect to = getDeleteRect(d.dragView.getMeasuredWidth(), d.dragView.getMeasuredHeight());
+        Rect to = getIconRect(d.dragView.getMeasuredWidth(), d.dragView.getMeasuredHeight(),
+                mCurrentDrawable.getIntrinsicWidth(), mCurrentDrawable.getIntrinsicHeight());
+        float scale = (float) to.width() / from.width();
 
         mSearchDropTargetBar.deferOnDragEnd();
         Runnable onAnimationEndRunnable = new Runnable() {
@@ -198,9 +182,9 @@
                 completeDrop(d);
             }
         };
-        dragLayer.animateView(d.dragView, from, to, 0.1f, 1, 1, 0.1f, 0.1f,
+        dragLayer.animateView(d.dragView, from, to, scale, 1f, 1f, 0.1f, 0.1f,
                 DELETE_ANIMATION_DURATION, new DecelerateInterpolator(2),
-                new DecelerateInterpolator(1.5f), onAnimationEndRunnable,
+                new LinearInterpolator(), onAnimationEndRunnable,
                 DragLayer.ANIMATION_END_DISAPPEAR, null);
     }
 
diff --git a/src/com/android/launcher2/DragLayer.java b/src/com/android/launcher2/DragLayer.java
index 7bc9bc8..a3b389d 100644
--- a/src/com/android/launcher2/DragLayer.java
+++ b/src/com/android/launcher2/DragLayer.java
@@ -458,7 +458,7 @@
             toX -= (dragView.getMeasuredWidth() - Math.round(scale * child.getMeasuredWidth())) / 2;
         } else if (child instanceof FolderIcon) {
             // Account for holographic blur padding on the drag view
-            toY -= HolographicOutlineHelper.MAX_OUTER_BLUR_RADIUS / 2;
+            toY -= Workspace.DRAG_BITMAP_PADDING / 2;
             // Center in the x coordinate about the target's drawable
             toX -= (dragView.getMeasuredWidth() - Math.round(scale * child.getMeasuredWidth())) / 2;
         } else {
@@ -470,28 +470,19 @@
         final int fromX = r.left;
         final int fromY = r.top;
         child.setVisibility(INVISIBLE);
-        child.setAlpha(0);
         Runnable onCompleteRunnable = new Runnable() {
             public void run() {
                 child.setVisibility(VISIBLE);
-                ObjectAnimator oa = ObjectAnimator.ofFloat(child, "alpha", 0f, 1f);
-                oa.setDuration(60);
-                oa.addListener(new AnimatorListenerAdapter() {
-                    @Override
-                    public void onAnimationEnd(android.animation.Animator animation) {
-                        if (onFinishAnimationRunnable != null) {
-                            onFinishAnimationRunnable.run();
-                        }
-                    }
-                });
-                oa.start();
+                if (onFinishAnimationRunnable != null) {
+                    onFinishAnimationRunnable.run();
+                }
             }
         };
         animateViewIntoPosition(dragView, fromX, fromY, toX, toY, 1, 1, 1, scale, scale,
-                onCompleteRunnable, ANIMATION_END_FADE_OUT, duration, anchorView);
+                onCompleteRunnable, ANIMATION_END_DISAPPEAR, duration, anchorView);
     }
 
-    private void animateViewIntoPosition(final DragView view, final int fromX, final int fromY,
+    public void animateViewIntoPosition(final DragView view, final int fromX, final int fromY,
             final int toX, final int toY, float finalAlpha, float initScaleX, float initScaleY,
             float finalScaleX, float finalScaleY, Runnable onCompleteRunnable,
             int animationEndStyle, int duration, View anchorView) {
diff --git a/src/com/android/launcher2/DragView.java b/src/com/android/launcher2/DragView.java
index c3c274e..f6c16b3 100644
--- a/src/com/android/launcher2/DragView.java
+++ b/src/com/android/launcher2/DragView.java
@@ -25,6 +25,8 @@
 import android.graphics.Matrix;
 import android.graphics.Paint;
 import android.graphics.Point;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffColorFilter;
 import android.graphics.Rect;
 import android.view.View;
 import android.view.animation.DecelerateInterpolator;
@@ -199,11 +201,15 @@
         va.start();
     }
 
-    public void setPaint(Paint paint) {
-        mPaint = paint;
+    public void setColor(int color) {
         if (mPaint == null) {
             mPaint = new Paint(Paint.FILTER_BITMAP_FLAG);
         }
+        if (color != 0) {
+            mPaint.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP));
+        } else {
+            mPaint.setColorFilter(null);
+        }
         invalidate();
     }
 
diff --git a/src/com/android/launcher2/InfoDropTarget.java b/src/com/android/launcher2/InfoDropTarget.java
index 21fe8ba..2e0b5c8 100644
--- a/src/com/android/launcher2/InfoDropTarget.java
+++ b/src/com/android/launcher2/InfoDropTarget.java
@@ -21,21 +21,17 @@
 import android.content.res.ColorStateList;
 import android.content.res.Configuration;
 import android.content.res.Resources;
-import android.graphics.PorterDuff;
-import android.graphics.PorterDuffColorFilter;
 import android.graphics.drawable.TransitionDrawable;
 import android.util.AttributeSet;
 import android.view.View;
 import android.view.ViewGroup;
 
 import com.android.launcher.R;
-import com.android.launcher2.DropTarget.DragObject;
 
 public class InfoDropTarget extends ButtonDropTarget {
 
     private ColorStateList mOriginalTextColor;
     private TransitionDrawable mDrawable;
-    private int mHoverColor = 0xFF0000FF;
 
     public InfoDropTarget(Context context, AttributeSet attrs) {
         this(context, attrs, 0);
@@ -54,8 +50,6 @@
         // Get the hover color
         Resources r = getResources();
         mHoverColor = r.getColor(R.color.info_target_hover_tint);
-        mHoverPaint.setColorFilter(new PorterDuffColorFilter(
-                mHoverColor, PorterDuff.Mode.SRC_ATOP));
         mDrawable = (TransitionDrawable) getCompoundDrawables()[0];
         mDrawable.setCrossFadeEnabled(true);
 
diff --git a/src/com/android/launcher2/InstallShortcutReceiver.java b/src/com/android/launcher2/InstallShortcutReceiver.java
index 9e2067d..e04ce64 100644
--- a/src/com/android/launcher2/InstallShortcutReceiver.java
+++ b/src/com/android/launcher2/InstallShortcutReceiver.java
@@ -17,8 +17,11 @@
 package com.android.launcher2;
 
 import android.content.BroadcastReceiver;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
 import android.widget.Toast;
 
 import com.android.launcher.R;
@@ -41,12 +44,25 @@
         }
 
         final int screen = Launcher.getScreen();
-        final String name = data.getStringExtra(Intent.EXTRA_SHORTCUT_NAME);
         final Intent intent = data.getParcelableExtra(Intent.EXTRA_SHORTCUT_INTENT);
+        if (intent == null) {
+            return;
+        }
+        // This name is only used for comparisons and notifications, so fall back to activity name
+        // if not supplied
+        String name = data.getStringExtra(Intent.EXTRA_SHORTCUT_NAME);
+        if (name == null) {
+            try {
+                PackageManager pm = context.getPackageManager();
+                ActivityInfo info = pm.getActivityInfo(intent.getComponent(), 0);
+                name = info.loadLabel(pm).toString();
+            } catch (PackageManager.NameNotFoundException nnfe) {
+                return;
+            }
+        }
 
         final ArrayList<ItemInfo> items = LauncherModel.getItemsInLocalCoordinates(context);
         final boolean shortcutExists = LauncherModel.shortcutExists(context, name, intent);
-
         final String[] errorMsgs = {""};
 
         if (!installShortcut(context, data, items, name, intent, screen, shortcutExists,
diff --git a/src/com/android/launcher2/InstallWidgetReceiver.java b/src/com/android/launcher2/InstallWidgetReceiver.java
index 6b3763c..a1e9b11 100644
--- a/src/com/android/launcher2/InstallWidgetReceiver.java
+++ b/src/com/android/launcher2/InstallWidgetReceiver.java
@@ -189,7 +189,7 @@
             final PendingAddWidgetInfo createInfo = new PendingAddWidgetInfo(widgetInfo, mMimeType,
                     mClipData);
             mLauncher.addAppWidgetFromDrop(createInfo, LauncherSettings.Favorites.CONTAINER_DESKTOP,
-                    mTargetLayoutScreen, null, mTargetLayoutPos);
+                    mTargetLayoutScreen, null, null, mTargetLayoutPos);
         }
     }
 }
diff --git a/src/com/android/launcher2/ItemInfo.java b/src/com/android/launcher2/ItemInfo.java
index 8d46624..11a6c0d 100644
--- a/src/com/android/launcher2/ItemInfo.java
+++ b/src/com/android/launcher2/ItemInfo.java
@@ -77,6 +77,15 @@
     int spanY = 1;
 
     /**
+     * Indicates the minimum X cell span.
+     */
+    int minSpanX = 1;
+
+    /**
+     * Indicates the minimum Y cell span.
+     */
+    int minSpanY = 1;
+    /**
      * Indicates whether the item is a gesture.
      */
     boolean isGesture = false;
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 83ca675..d670463 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -584,9 +584,9 @@
                 }
             };
         }
-        mWorkspace.animateExternalDrop(mWidgetBeingConfigured, cellLayout,
+        mWorkspace.animateWidgetDrop(mWidgetBeingConfigured, cellLayout,
                 (DragView) mDragLayer.getAnimatedView(), onCompleteRunnable,
-                animationType);
+                animationType, mWidgetBeingConfigured.boundWidget, true);
         mWidgetBeingConfigured = null;
     }
 
@@ -959,7 +959,7 @@
         return getSpanForWidget(info.provider, info.minWidth, info.minHeight, spanXY);
     }
 
-    int[] getMinResizeSpanForWidget(AppWidgetProviderInfo info, int[] spanXY) {
+    int[] getMinSpanForWidget(AppWidgetProviderInfo info, int[] spanXY) {
         return getSpanForWidget(info.provider, info.minResizeWidth, info.minResizeHeight, spanXY);
     }
 
@@ -967,6 +967,11 @@
         return getSpanForWidget(info.componentName, info.minWidth, info.minHeight, spanXY);
     }
 
+    int[] getMinSpanForWidget(PendingAddWidgetInfo info, int[] spanXY) {
+        return getSpanForWidget(info.componentName, info.minResizeWidth,
+                info.minResizeHeight, spanXY);
+    }
+
     /**
      * Add a widget to the workspace.
      *
@@ -982,6 +987,7 @@
         // Calculate the grid spans needed to fit this widget
         CellLayout layout = getCellLayout(container, screen);
 
+        int[] minSpanXY = getMinSpanForWidget(appWidgetInfo, null);
         int[] spanXY = getSpanForWidget(appWidgetInfo, null);
 
         // Try finding open space on Launcher screen
@@ -989,18 +995,24 @@
         // if we are placing widgets on a "spring-loaded" screen
         int[] cellXY = mTmpAddItemCellCoordinates;
         int[] touchXY = mPendingAddInfo.dropPos;
+        int[] finalSpan = new int[2];
         boolean foundCellSpan = false;
         if (mPendingAddInfo.cellX >= 0 && mPendingAddInfo.cellY >= 0) {
             cellXY[0] = mPendingAddInfo.cellX;
             cellXY[1] = mPendingAddInfo.cellY;
+            spanXY[0] = mPendingAddInfo.spanX;
+            spanXY[1] = mPendingAddInfo.spanY;
             foundCellSpan = true;
         } else if (touchXY != null) {
             // when dragging and dropping, just find the closest free spot
             int[] result = layout.findNearestVacantArea(
-                    touchXY[0], touchXY[1], spanXY[0], spanXY[1], cellXY);
+                    touchXY[0], touchXY[1], minSpanXY[0], minSpanXY[1], spanXY[0],
+                    spanXY[1], cellXY, finalSpan);
+            spanXY[0] = finalSpan[0];
+            spanXY[1] = finalSpan[1];
             foundCellSpan = (result != null);
         } else {
-            foundCellSpan = layout.findCellForSpan(cellXY, spanXY[0], spanXY[1]);
+            foundCellSpan = layout.findCellForSpan(cellXY, minSpanXY[0], minSpanXY[1]);
         }
 
         if (!foundCellSpan) {
@@ -1021,6 +1033,8 @@
         LauncherAppWidgetInfo launcherInfo = new LauncherAppWidgetInfo(appWidgetId);
         launcherInfo.spanX = spanXY[0];
         launcherInfo.spanY = spanXY[1];
+        launcherInfo.minSpanX = mPendingAddInfo.minSpanX;
+        launcherInfo.minSpanY = mPendingAddInfo.minSpanY;
 
         LauncherModel.addItemToDatabase(this, launcherInfo,
                 container, screen, cellXY[0], cellXY[1], false);
@@ -1036,6 +1050,7 @@
             }
 
             launcherInfo.hostView.setTag(launcherInfo);
+            launcherInfo.hostView.setVisibility(View.VISIBLE);
             mWorkspace.addInScreen(launcherInfo.hostView, container, screen, cellXY[0], cellXY[1],
                     launcherInfo.spanX, launcherInfo.spanY, isWorkspaceLocked());
 
@@ -1465,6 +1480,7 @@
         mPendingAddInfo.screen = -1;
         mPendingAddInfo.cellX = mPendingAddInfo.cellY = -1;
         mPendingAddInfo.spanX = mPendingAddInfo.spanY = -1;
+        mPendingAddInfo.minSpanX = mPendingAddInfo.minSpanY = -1;
         mPendingAddInfo.dropPos = null;
     }
 
@@ -1556,15 +1572,22 @@
      * @param position The location on the screen where it was dropped, optional
      */
     void addAppWidgetFromDrop(PendingAddWidgetInfo info, long container, int screen,
-            int[] cell, int[] loc) {
+            int[] cell, int[] span, int[] loc) {
         resetAddInfo();
         mPendingAddInfo.container = info.container = container;
         mPendingAddInfo.screen = info.screen = screen;
         mPendingAddInfo.dropPos = loc;
+        mPendingAddInfo.minSpanX = info.minSpanX;
+        mPendingAddInfo.minSpanY = info.minSpanY;
+
         if (cell != null) {
             mPendingAddInfo.cellX = cell[0];
             mPendingAddInfo.cellY = cell[1];
         }
+        if (span != null) {
+            mPendingAddInfo.spanX = span[0];
+            mPendingAddInfo.spanY = span[1];
+        }
 
         AppWidgetHostView hostView = info.boundWidget;
         int appWidgetId;
@@ -1575,7 +1598,6 @@
             AppWidgetManager.getInstance(this).bindAppWidgetId(appWidgetId, info.componentName);
         }
         addAppWidgetImpl(appWidgetId, info);
-
     }
 
     void processShortcut(Intent intent) {
diff --git a/src/com/android/launcher2/PendingAddItemInfo.java b/src/com/android/launcher2/PendingAddItemInfo.java
index 09a8a9e..d36e217 100644
--- a/src/com/android/launcher2/PendingAddItemInfo.java
+++ b/src/com/android/launcher2/PendingAddItemInfo.java
@@ -34,6 +34,8 @@
 class PendingAddWidgetInfo extends PendingAddItemInfo {
     int minWidth;
     int minHeight;
+    int minResizeWidth;
+    int minResizeHeight;
     int previewImage;
     int icon;
     AppWidgetProviderInfo info;
@@ -50,6 +52,8 @@
         componentName = i.provider;
         minWidth = i.minWidth;
         minHeight = i.minHeight;
+        minResizeWidth = i.minResizeWidth;
+        minResizeHeight = i.minResizeHeight;
         previewImage = i.previewImage;
         icon = i.icon;
         if (dataMimeType != null && data != null) {
@@ -62,6 +66,8 @@
     public PendingAddWidgetInfo(PendingAddWidgetInfo copy) {
         minWidth = copy.minWidth;
         minHeight = copy.minHeight;
+        minResizeWidth = copy.minResizeWidth;
+        minResizeHeight = copy.minResizeHeight;
         previewImage = copy.previewImage;
         icon = copy.icon;
         info = copy.info;
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index 672a284..0624d74 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -17,6 +17,7 @@
 package com.android.launcher2;
 
 import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
 import android.animation.AnimatorSet;
 import android.animation.ObjectAnimator;
 import android.animation.TimeInterpolator;
@@ -40,7 +41,6 @@
 import android.graphics.Matrix;
 import android.graphics.Paint;
 import android.graphics.Point;
-import android.graphics.PorterDuff;
 import android.graphics.Rect;
 import android.graphics.RectF;
 import android.graphics.Region.Op;
@@ -173,6 +173,7 @@
     private final Rect mTempRect = new Rect();
     private final int[] mTempXY = new int[2];
     private float mOverscrollFade = 0;
+    public static final int DRAG_BITMAP_PADDING = 0;
 
     // Paint used to draw external drop outline
     private final Paint mExternalDragOutlinePaint = new Paint();
@@ -208,9 +209,11 @@
     final static float TOUCH_SLOP_DAMPING_FACTOR = 4;
 
     // Relating to the animation of items being dropped externally
-    public static final int ANIMATE_INTO_POSITION = 0;
-    public static final int COMPLETE_TWO_STAGE_WIDGET_DROP_ANIMATION = 1;
-    public static final int CANCEL_TWO_STAGE_WIDGET_DROP_ANIMATION = 2;
+    public static final int ANIMATE_INTO_POSITION_AND_DISAPPEAR = 0;
+    public static final int ANIMATE_INTO_POSITION_AND_REMAIN = 1;
+    public static final int ANIMATE_INTO_POSITION_AND_RESIZE = 2;
+    public static final int COMPLETE_TWO_STAGE_WIDGET_DROP_ANIMATION = 3;
+    public static final int CANCEL_TWO_STAGE_WIDGET_DROP_ANIMATION = 4;
 
     // Relating to workspace drag fade out
     private float mDragFadeOutAlpha;
@@ -326,13 +329,13 @@
     // estimate the size of a widget with spans hSpan, vSpan. return MAX_VALUE for each
     // dimension if unsuccessful
     public int[] estimateItemSize(int hSpan, int vSpan,
-            PendingAddItemInfo pendingItemInfo, boolean springLoaded) {
+            ItemInfo itemInfo, boolean springLoaded) {
         int[] size = new int[2];
         if (getChildCount() > 0) {
             CellLayout cl = (CellLayout) mLauncher.getWorkspace().getChildAt(0);
-            RectF r = estimateItemPosition(cl, pendingItemInfo, 0, 0, hSpan, vSpan);
-            size[0] = (int) r.width();
-            size[1] = (int) r.height();
+            Rect r = estimateItemPosition(cl, itemInfo, 0, 0, hSpan, vSpan);
+            size[0] = r.width();
+            size[1] = r.height();
             if (springLoaded) {
                 size[0] *= mSpringLoadedShrinkFactor;
                 size[1] *= mSpringLoadedShrinkFactor;
@@ -344,9 +347,9 @@
             return size;
         }
     }
-    public RectF estimateItemPosition(CellLayout cl, ItemInfo pendingInfo,
+    public Rect estimateItemPosition(CellLayout cl, ItemInfo pendingInfo,
             int hCell, int vCell, int hSpan, int vSpan) {
-        RectF r = new RectF();
+        Rect r = new Rect();
         cl.cellToRect(hCell, vCell, hSpan, vSpan, r);
         return r;
     }
@@ -367,10 +370,14 @@
         mLauncher.lockScreenOrientationOnLargeUI();
 
         // Fade out the workspace slightly to highlight the currently dragging item
-        animate().alpha(mDragFadeOutAlpha)
-                 .setInterpolator(new AccelerateInterpolator(1.5f))
-                 .setDuration(mDragFadeOutDuration)
-                 .start();
+        int count = getChildCount();
+        for (int i = 0; i < count; i++) {
+            CellLayout cl = (CellLayout) getPageAt(i);
+            cl.getChildrenLayout().animate().alpha(mDragFadeOutAlpha)
+                .setInterpolator(new AccelerateInterpolator(1.5f))
+                .setDuration(mDragFadeOutDuration)
+                .start();
+        }
     }
 
     public void onDragEnd() {
@@ -379,10 +386,14 @@
         mLauncher.unlockScreenOrientationOnLargeUI();
 
         // Fade the workspace back in after we have completed dragging
-        animate().alpha(1f)
-                 .setInterpolator(new DecelerateInterpolator(1.5f))
-                 .setDuration(mDragFadeOutDuration)
-                 .start();
+        int count = getChildCount();
+        for (int i = 0; i < count; i++) {
+            CellLayout cl = (CellLayout) getPageAt(i);
+            cl.getChildrenLayout().animate().alpha(1f)
+                .setInterpolator(new DecelerateInterpolator(1.5f))
+                .setDuration(mDragFadeOutDuration)
+                .start();
+        }
     }
 
     /**
@@ -1484,23 +1495,18 @@
     public void onDragStartedWithItem(View v) {
         final Canvas canvas = new Canvas();
 
-        // We need to add extra padding to the bitmap to make room for the glow effect
-        final int bitmapPadding = HolographicOutlineHelper.MAX_OUTER_BLUR_RADIUS;
-
         // The outline is used to visualize where the item will land if dropped
-        mDragOutline = createDragOutline(v, canvas, bitmapPadding);
+        mDragOutline = createDragOutline(v, canvas, DRAG_BITMAP_PADDING);
     }
 
     public void onDragStartedWithItem(PendingAddItemInfo info, Bitmap b, Paint alphaClipPaint) {
         final Canvas canvas = new Canvas();
 
-        // We need to add extra padding to the bitmap to make room for the glow effect
-        final int bitmapPadding = HolographicOutlineHelper.MAX_OUTER_BLUR_RADIUS;
-
         int[] size = estimateItemSize(info.spanX, info.spanY, info, false);
 
         // The outline is used to visualize where the item will land if dropped
-        mDragOutline = createDragOutline(b, canvas, bitmapPadding, size[0], size[1], alphaClipPaint);
+        mDragOutline = createDragOutline(b, canvas, DRAG_BITMAP_PADDING, size[0],
+                size[1], alphaClipPaint);
     }
 
     // we call this method whenever a drag and drop in Launcher finishes, even if Workspace was
@@ -1904,35 +1910,29 @@
         }
 
         mDragInfo = cellInfo;
-        child.setVisibility(GONE);
+        child.setVisibility(INVISIBLE);
 
         child.clearFocus();
         child.setPressed(false);
 
         final Canvas canvas = new Canvas();
 
-        // We need to add extra padding to the bitmap to make room for the glow effect
-        final int bitmapPadding = HolographicOutlineHelper.MAX_OUTER_BLUR_RADIUS;
-
         // The outline is used to visualize where the item will land if dropped
-        mDragOutline = createDragOutline(child, canvas, bitmapPadding);
+        mDragOutline = createDragOutline(child, canvas, DRAG_BITMAP_PADDING);
         beginDragShared(child, this);
     }
 
     public void beginDragShared(View child, DragSource source) {
         Resources r = getResources();
 
-        // We need to add extra padding to the bitmap to make room for the glow effect
-        final int bitmapPadding = HolographicOutlineHelper.MAX_OUTER_BLUR_RADIUS;
-
         // The drag bitmap follows the touch point around on the screen
-        final Bitmap b = createDragBitmap(child, new Canvas(), bitmapPadding);
+        final Bitmap b = createDragBitmap(child, new Canvas(), DRAG_BITMAP_PADDING);
 
         final int bmpWidth = b.getWidth();
 
         mLauncher.getDragLayer().getLocationInDragLayer(child, mTempXY);
         final int dragLayerX = (int) mTempXY[0] + (child.getWidth() - bmpWidth) / 2;
-        int dragLayerY = mTempXY[1] - bitmapPadding / 2;
+        int dragLayerY = mTempXY[1] - DRAG_BITMAP_PADDING / 2;
 
         Point dragVisualizeOffset = null;
         Rect dragRect = null;
@@ -1946,7 +1946,8 @@
             dragLayerY += top;
             // Note: The drag region is used to calculate drag layer offsets, but the
             // dragVisualizeOffset in addition to the dragRect (the size) to position the outline.
-            dragVisualizeOffset = new Point(-bitmapPadding / 2, iconPaddingTop - bitmapPadding / 2);
+            dragVisualizeOffset = new Point(-DRAG_BITMAP_PADDING / 2,
+                    iconPaddingTop - DRAG_BITMAP_PADDING / 2);
             dragRect = new Rect(left, top, right, bottom);
         } else if (child instanceof FolderIcon) {
             int previewSize = r.getDimensionPixelSize(R.dimen.folder_preview_size);
@@ -2018,8 +2019,15 @@
                 spanY = dragInfo.spanY;
             }
 
+            int minSpanX = spanX;
+            int minSpanY = spanY;
+            if (d.dragInfo instanceof PendingAddWidgetInfo) {
+                minSpanX = ((PendingAddWidgetInfo) d.dragInfo).minSpanX;
+                minSpanY = ((PendingAddWidgetInfo) d.dragInfo).minSpanY;
+            }
             mTargetCell = findNearestArea((int) mDragViewVisualCenter[0],
-                    (int) mDragViewVisualCenter[1], spanX, spanY, mDragTargetLayout, mTargetCell);
+                    (int) mDragViewVisualCenter[1], minSpanX, minSpanY, mDragTargetLayout,
+                    mTargetCell);
             if (willCreateUserFolder((ItemInfo) d.dragInfo, mDragTargetLayout, mTargetCell, true)) {
                 return true;
             }
@@ -2029,7 +2037,7 @@
             }
 
             // Don't accept the drop if there's no room for the item
-            if (!mDragTargetLayout.findCellForSpanIgnoring(null, spanX, spanY, ignoreView)) {
+            if (!mDragTargetLayout.findCellForSpanIgnoring(null, minSpanX, minSpanY, ignoreView)) {
                 // Don't show the message if we are dropping on the AllApps button and the hotseat
                 // is full
                 if (mTargetCell != null && mLauncher.isHotseatLayout(mDragTargetLayout)) {
@@ -2149,7 +2157,7 @@
         return false;
     }
 
-    public void onDrop(DragObject d) {
+    public void onDrop(final DragObject d) {
         mDragViewVisualCenter = getDragViewVisualCenter(d.x, d.y, d.xOffset, d.yOffset, d.dragView,
                 mDragViewVisualCenter);
 
@@ -2165,6 +2173,7 @@
         CellLayout dropTargetLayout = mDragTargetLayout;
 
         int snapScreen = -1;
+        boolean resizeOnDrop = false;
         if (d.dragSource != this) {
             final int[] touchXY = new int[] { (int) mDragViewVisualCenter[0],
                     (int) mDragViewVisualCenter[1] };
@@ -2172,6 +2181,7 @@
         } else if (mDragInfo != null) {
             final View cell = mDragInfo.cell;
 
+            Runnable resizeRunnable = null;
             if (dropTargetLayout != null) {
                 // Move internally
                 boolean hasMovedLayouts = (getParentCellLayoutForView(cell) != dropTargetLayout);
@@ -2200,29 +2210,46 @@
 
                 // Aside from the special case where we're dropping a shortcut onto a shortcut,
                 // we need to find the nearest cell location that is vacant
+                ItemInfo item = (ItemInfo) d.dragInfo;
+                int minSpanX = item.spanX;
+                int minSpanY = item.spanY;
+                if (item.minSpanX > 0 && item.minSpanY > 0) {
+                    minSpanX = item.minSpanX;
+                    minSpanY = item.minSpanY;
+                }
+                int[] resultSpan = new int[2];
                 mTargetCell = findNearestVacantArea((int) mDragViewVisualCenter[0],
-                        (int) mDragViewVisualCenter[1], mDragInfo.spanX, mDragInfo.spanY, cell,
-                        dropTargetLayout, mTargetCell);
+                        (int) mDragViewVisualCenter[1], minSpanX, minSpanY, mDragInfo.spanX,
+                        mDragInfo.spanY, cell, dropTargetLayout, mTargetCell, resultSpan);
+                boolean foundCell = mTargetCell[0] >= 0 && mTargetCell[1] >= 0;
+                if (foundCell && (resultSpan[0] != item.spanX || resultSpan[1] != item.spanY)) {
+                    resizeOnDrop = true;
+                    item.spanX = resultSpan[0];
+                    item.spanY = resultSpan[1];
+                }
 
                 if (mCurrentPage != screen && !hasMovedIntoHotseat) {
                     snapScreen = screen;
                     snapToPage(screen);
                 }
 
-                if (mTargetCell[0] >= 0 && mTargetCell[1] >= 0) {
+                if (foundCell) {
+                    final ItemInfo info = (ItemInfo) cell.getTag();
                     if (hasMovedLayouts) {
                         // Reparent the view
                         getParentCellLayoutForView(cell).removeView(cell);
                         addInScreen(cell, container, screen, mTargetCell[0], mTargetCell[1],
-                                mDragInfo.spanX, mDragInfo.spanY);
+                                info.spanX, info.spanY);
                     }
 
                     // update the item's position after drop
-                    final ItemInfo info = (ItemInfo) cell.getTag();
                     CellLayout.LayoutParams lp = (CellLayout.LayoutParams) cell.getLayoutParams();
-                    dropTargetLayout.onMove(cell, mTargetCell[0], mTargetCell[1]);
+                    dropTargetLayout.onMove(cell, mTargetCell[0], mTargetCell[1],
+                            item.spanX, item.spanY);
                     lp.cellX = mTargetCell[0];
                     lp.cellY = mTargetCell[1];
+                    lp.cellHSpan = item.spanX;
+                    lp.cellVSpan = item.spanY;
                     cell.setId(LauncherModel.getCellLayoutChildId(container, mDragInfo.screen,
                             mTargetCell[0], mTargetCell[1], mDragInfo.spanX, mDragInfo.spanY));
 
@@ -2235,18 +2262,18 @@
                         final LauncherAppWidgetHostView hostView = (LauncherAppWidgetHostView) cell;
                         AppWidgetProviderInfo pinfo = hostView.getAppWidgetInfo();
                         if (pinfo.resizeMode != AppWidgetProviderInfo.RESIZE_NONE) {
-                            final Runnable resizeRunnable = new Runnable() {
+                            final Runnable addResizeFrame = new Runnable() {
                                 public void run() {
                                     DragLayer dragLayer = mLauncher.getDragLayer();
                                     dragLayer.addResizeFrame(info, hostView, cellLayout);
                                 }
                             };
-                            post(new Runnable() {
+                            resizeRunnable = (new Runnable() {
                                 public void run() {
                                     if (!isPageMoving()) {
-                                        resizeRunnable.run();
+                                        addResizeFrame.run();
                                     } else {
-                                        mDelayedResizeRunnable = resizeRunnable;
+                                        mDelayedResizeRunnable = addResizeFrame;
                                     }
                                 }
                             });
@@ -2255,25 +2282,40 @@
 
                     LauncherModel.moveItemInDatabase(mLauncher, info, container, screen, lp.cellX,
                             lp.cellY);
+                } else {
+                    // If we can't find a drop location, we return the item to its original position
+                    CellLayout.LayoutParams lp = (CellLayout.LayoutParams) cell.getLayoutParams();
+                    mTargetCell[0] = lp.cellX;
+                    mTargetCell[1] = lp.cellY;
                 }
             }
 
             final CellLayout parent = (CellLayout) cell.getParent().getParent();
-
+            final Runnable finalResizeRunnable = resizeRunnable;
             // Prepare it to be animated into its new position
             // This must be called after the view has been re-parented
-            final Runnable disableHardwareLayersRunnable = new Runnable() {
+            final Runnable onCompleteRunnable = new Runnable() {
                 @Override
                 public void run() {
                     mAnimatingViewIntoPlace = false;
                     updateChildrenLayersEnabled();
+                    if (finalResizeRunnable != null) {
+                        finalResizeRunnable.run();
+                    }
                 }
             };
             mAnimatingViewIntoPlace = true;
             if (d.dragView.hasDrawn()) {
-                int duration = snapScreen < 0 ? -1 : ADJACENT_SCREEN_DROP_DURATION;
-                mLauncher.getDragLayer().animateViewIntoPosition(d.dragView, cell, duration,
-                        disableHardwareLayersRunnable, this);
+                final ItemInfo info = (ItemInfo) cell.getTag();
+                if (info.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET) {
+                    int animationType = resizeOnDrop ? ANIMATE_INTO_POSITION_AND_RESIZE :
+                            ANIMATE_INTO_POSITION_AND_DISAPPEAR;
+                    animateWidgetDrop(info, parent, d.dragView,
+                            onCompleteRunnable, animationType, cell, false);
+                } else {
+                    mLauncher.getDragLayer().animateViewIntoPosition(d.dragView, cell,
+                            onCompleteRunnable);
+                }
             } else {
                 d.deferDragViewCleanupPostAnimation = false;
                 cell.setVisibility(VISIBLE);
@@ -2422,19 +2464,18 @@
             // Create the drag outline
             // We need to add extra padding to the bitmap to make room for the glow effect
             final Canvas canvas = new Canvas();
-            final int bitmapPadding = HolographicOutlineHelper.MAX_OUTER_BLUR_RADIUS;
-            mDragOutline = createExternalDragOutline(canvas, bitmapPadding);
+            mDragOutline = createExternalDragOutline(canvas, DRAG_BITMAP_PADDING);
 
             // Show the current page outlines to indicate that we can accept this drop
             showOutlines();
             layout.onDragEnter();
-            layout.visualizeDropLocation(null, mDragOutline, x, y, 1, 1, null, null);
+            layout.visualizeDropLocation(null, mDragOutline, x, y, 1, 1, 1, 1, null, null);
 
             return true;
         }
         case DragEvent.ACTION_DRAG_LOCATION:
             // Visualize the drop location
-            layout.visualizeDropLocation(null, mDragOutline, x, y, 1, 1, null, null);
+            layout.visualizeDropLocation(null, mDragOutline, x, y, 1, 1, 1, 1, null, null);
             return true;
         case DragEvent.ACTION_DROP: {
             // Try and add any shortcuts
@@ -2467,7 +2508,8 @@
                         final PendingAddWidgetInfo createInfo =
                                 new PendingAddWidgetInfo(widgetInfo, mimeType, data);
                         mLauncher.addAppWidgetFromDrop(createInfo,
-                            LauncherSettings.Favorites.CONTAINER_DESKTOP, mCurrentPage, null, pos);
+                                LauncherSettings.Favorites.CONTAINER_DESKTOP, mCurrentPage,
+                                null, null, pos);
                     } else {
                         // Show the widget picker dialog if there is more than one widget
                         // that can handle this data type
@@ -2807,10 +2849,16 @@
             mLastDragOverView = dragOverView;
 
             if (!mCreateUserFolderOnDrop && !isOverFolder) {
+                int minSpanX = item.spanX;
+                int minSpanY = item.spanY;
+                if (item.minSpanX > 0 && item.minSpanY > 0) {
+                    minSpanX = item.minSpanX;
+                    minSpanY = item.minSpanY;
+                }
                 mDragTargetLayout.visualizeDropLocation(child, mDragOutline,
                         (int) mDragViewVisualCenter[0], (int) mDragViewVisualCenter[1],
-                        item.spanX, item.spanY, d.dragView.getDragVisualizeOffset(),
-                        d.dragView.getDragRegion());
+                        minSpanX, minSpanY, item.spanX, item.spanY,
+                        d.dragView.getDragVisualizeOffset(), d.dragView.getDragRegion());
             }
         }
     }
@@ -2931,9 +2979,19 @@
                     findNearestVacantCell = false;
                 }
             }
+            final ItemInfo item = (ItemInfo) d.dragInfo;
+            int minSpanX = item.spanX;
+            int minSpanY = item.spanY;
+            if (item.minSpanX > 0 && item.minSpanY > 0) {
+                minSpanX = item.minSpanX;
+                minSpanY = item.minSpanY;
+            }
             if (findNearestVacantCell) {
-                    mTargetCell = findNearestVacantArea(touchXY[0], touchXY[1], spanX, spanY, null,
-                        cellLayout, mTargetCell);
+                int[] resultSpan = new int[2];
+                mTargetCell = findNearestVacantArea(touchXY[0], touchXY[1], minSpanX, minSpanY,
+                        spanX, spanY, null, cellLayout, mTargetCell, resultSpan);
+                item.spanX = resultSpan[0];
+                item.spanY = resultSpan[1];
             }
 
             Runnable onAnimationCompleteRunnable = new Runnable() {
@@ -2943,8 +3001,11 @@
                     // widgets/shortcuts/folders in a slightly different way
                     switch (pendingInfo.itemType) {
                     case LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET:
+                        int span[] = new int[2];
+                        span[0] = item.spanX;
+                        span[1] = item.spanY;
                         mLauncher.addAppWidgetFromDrop((PendingAddWidgetInfo) pendingInfo,
-                                container, screen, mTargetCell, null);
+                                container, screen, mTargetCell, span, null);
                         break;
                     case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT:
                         mLauncher.processShortcutFromDrop(pendingInfo.componentName,
@@ -2957,9 +3018,15 @@
                     cellLayout.onDragExit();
                 }
             };
-
-            animateExternalDrop((PendingAddItemInfo) info, cellLayout, d.dragView,
-                    onAnimationCompleteRunnable, ANIMATE_INTO_POSITION);
+            View finalView = pendingInfo.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET
+                    ? ((PendingAddWidgetInfo) pendingInfo).boundWidget : null;
+            int animationStyle = ANIMATE_INTO_POSITION_AND_DISAPPEAR;
+            if (pendingInfo.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET &&
+                    ((PendingAddWidgetInfo) pendingInfo).info.configure != null) {
+                animationStyle = ANIMATE_INTO_POSITION_AND_REMAIN;
+            }
+            animateWidgetDrop(info, cellLayout, d.dragView, onAnimationCompleteRunnable,
+                    animationStyle, finalView, true);
         } else {
             // This is for other drag/drop cases, like dragging from All Apps
             View view = null;
@@ -3025,11 +3092,10 @@
         }
     }
 
-    public Bitmap createWidgetBitmap(PendingAddWidgetInfo widgetInfo) {
+    public Bitmap createWidgetBitmap(ItemInfo widgetInfo, View layout) {
         int[] unScaledSize = mLauncher.getWorkspace().estimateItemSize(widgetInfo.spanX,
                 widgetInfo.spanY, widgetInfo, false);
-        View layout = widgetInfo.boundWidget;
-        mLauncher.getDragLayer().removeView(layout);
+        int visibility = layout.getVisibility();
         layout.setVisibility(VISIBLE);
 
         int width = MeasureSpec.makeMeasureSpec(unScaledSize[0], MeasureSpec.EXACTLY);
@@ -3042,56 +3108,90 @@
         layout.layout(0, 0, unScaledSize[0], unScaledSize[1]);
         layout.draw(c);
         c.setBitmap(null);
+        layout.setVisibility(visibility);
         return b;
     }
 
-    public void animateExternalDrop(PendingAddItemInfo pendingInfo, CellLayout cellLayout,
-            DragView dragView, Runnable onCompleteRunnable, int animationType) {
+    private void getFinalPositionForDropAnimation(int[] loc, float[] scaleXY,
+            DragView dragView, CellLayout layout, ItemInfo info, int[] targetCell, View finalView,
+            boolean external) {
         // Now we animate the dragView, (ie. the widget or shortcut preview) into its final
         // location and size on the home screen.
-        int spanX = pendingInfo.spanX;
-        int spanY = pendingInfo.spanY;
-        RectF r = estimateItemPosition(cellLayout, pendingInfo,
-                mTargetCell[0], mTargetCell[1], spanX, spanY);
-        int loc[] = new int[2];
-        loc[0] = (int) r.left;
-        loc[1] = (int) r.top;
-        setFinalTransitionTransform(cellLayout);
-        float cellLayoutScale =
-                mLauncher.getDragLayer().getDescendantCoordRelativeToSelf(cellLayout, loc);
-        resetTransitionTransform(cellLayout);
+        int spanX = info.spanX;
+        int spanY = info.spanY;
 
-        float dragViewScaleX = r.width() / dragView.getMeasuredWidth();
-        float dragViewScaleY = r.height() / dragView.getMeasuredHeight();
+        Rect r = estimateItemPosition(layout, info, targetCell[0], targetCell[1], spanX, spanY);
+        loc[0] = r.left;
+        loc[1] = r.top;
+
+        setFinalTransitionTransform(layout);
+        float cellLayoutScale =
+                mLauncher.getDragLayer().getDescendantCoordRelativeToSelf(layout, loc);
+        resetTransitionTransform(layout);
+        float dragViewScaleX = (1.0f * r.width()) / dragView.getMeasuredWidth();
+        float dragViewScaleY = (1.0f * r.height()) / dragView.getMeasuredHeight();
+
         // The animation will scale the dragView about its center, so we need to center about
         // the final location.
         loc[0] -= (dragView.getMeasuredWidth() - cellLayoutScale * r.width()) / 2;
         loc[1] -= (dragView.getMeasuredHeight() - cellLayoutScale * r.height()) / 2;
 
-        float scaleX = dragViewScaleX * cellLayoutScale;
-        float scaleY = dragViewScaleY * cellLayoutScale;
+        scaleXY[0] = dragViewScaleX * cellLayoutScale;
+        scaleXY[1] = dragViewScaleY * cellLayoutScale;
+    }
+
+    public void animateWidgetDrop(ItemInfo info, CellLayout cellLayout, DragView dragView,
+            final Runnable onCompleteRunnable, int animationType, final View finalView,
+            boolean external) {
+        Rect from = new Rect();
+        mLauncher.getDragLayer().getViewRectRelativeToSelf(dragView, from);
+
+        int[] finalPos = new int[2];
+        float scaleXY[] = new float[2];
+        getFinalPositionForDropAnimation(finalPos, scaleXY, dragView, cellLayout, info, mTargetCell,
+                finalView, external);
 
         Resources res = mLauncher.getResources();
         int duration = res.getInteger(R.integer.config_dropAnimMaxDuration) - 200;
 
-        int animationEnd = DragLayer.ANIMATION_END_REMAIN_VISIBLE;
-        if (pendingInfo.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET &&
-                (((PendingAddWidgetInfo) pendingInfo).info.configure == null ||
-                animationType == COMPLETE_TWO_STAGE_WIDGET_DROP_ANIMATION)) {
-            Bitmap crossFadeBitmap = createWidgetBitmap((PendingAddWidgetInfo) pendingInfo);
+        // In the case where we've prebound the widget, we remove it from the DragLayer
+        if (finalView instanceof AppWidgetHostView && external) {
+            mLauncher.getDragLayer().removeView(finalView);
+        }
+        if ((animationType == ANIMATE_INTO_POSITION_AND_RESIZE || external) && finalView != null) {
+            Bitmap crossFadeBitmap = createWidgetBitmap(info, finalView);
             dragView.setCrossFadeBitmap(crossFadeBitmap);
             dragView.crossFade((int) (duration * 0.8f));
-            animationEnd = DragLayer.ANIMATION_END_DISAPPEAR;
-        } else {
-            scaleX = scaleY = Math.min(scaleX,  scaleY);
+        } else if (info.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET && external) {
+            scaleXY[0] = scaleXY[1] = Math.min(scaleXY[0],  scaleXY[1]);
         }
 
+        DragLayer dragLayer = mLauncher.getDragLayer();
         if (animationType == CANCEL_TWO_STAGE_WIDGET_DROP_ANIMATION) {
-            mLauncher.getDragLayer().animateViewIntoPosition(dragView, loc, 0f, 0.1f, 0.1f,
+            mLauncher.getDragLayer().animateViewIntoPosition(dragView, finalPos, 0f, 0.1f, 0.1f,
                     DragLayer.ANIMATION_END_DISAPPEAR, onCompleteRunnable, duration);
         } else {
-            mLauncher.getDragLayer().animateViewIntoPosition(dragView, loc, 1f, scaleX, scaleY,
-                animationEnd, onCompleteRunnable, duration);
+            int endStyle;
+            if (animationType == ANIMATE_INTO_POSITION_AND_REMAIN) {
+                endStyle = DragLayer.ANIMATION_END_REMAIN_VISIBLE;
+            } else {
+                endStyle = DragLayer.ANIMATION_END_DISAPPEAR;;
+            }
+
+            Runnable onComplete = new Runnable() {
+                @Override
+                public void run() {
+                    if (finalView != null) {
+                        finalView.setVisibility(VISIBLE);
+                    }
+                    if (onCompleteRunnable != null) {
+                        onCompleteRunnable.run();
+                    }
+                }
+            };
+            dragLayer.animateViewIntoPosition(dragView, from.left, from.top, finalPos[0],
+                    finalPos[1], 1, 1, 1, scaleXY[0], scaleXY[1], onComplete, endStyle,
+                    duration, this);
         }
     }
 
@@ -3151,7 +3251,19 @@
     private int[] findNearestVacantArea(int pixelX, int pixelY,
             int spanX, int spanY, View ignoreView, CellLayout layout, int[] recycle) {
         return layout.findNearestVacantArea(
-                pixelX, pixelY, spanX, spanY, ignoreView, recycle);
+                pixelX, pixelY, spanX, spanY, spanX, spanY, ignoreView, recycle, null);
+    }
+
+    /**
+     * Calculate the nearest cell where the given object would be dropped.
+     *
+     * pixelX and pixelY should be in the coordinate system of layout
+     */
+    private int[] findNearestVacantArea(int pixelX, int pixelY, int minSpanX, int minSpanY,
+            int spanX, int spanY, View ignoreView, CellLayout layout, int[] recycle,
+            int[] returnSpan) {
+        return layout.findNearestVacantArea(
+                pixelX, pixelY, minSpanX, minSpanY, spanX, spanY, ignoreView, recycle, returnSpan);
     }
 
     /**