Reconcile with jb-release nakasi-factoryrom-release

Change-Id: I8413b3bf0524dbfee9b1d5201774e2e519e56cf8
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 47278bb..20c4a9d 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -57,6 +57,7 @@
     <uses-permission android:name="android.permission.SET_WALLPAPER_HINTS" />
     <uses-permission android:name="android.permission.VIBRATE" />
     <uses-permission android:name="android.permission.BIND_APPWIDGET" />
+    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
     <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
     <uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS" />
 
@@ -73,7 +74,7 @@
             android:stateNotNeeded="true"
             android:theme="@style/Theme"
             android:windowSoftInputMode="adjustPan"
-            android:screenOrientation="nosensor">
+            android:screenOrientation="portrait">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.HOME" />
diff --git a/CleanSpec.mk b/CleanSpec.mk
index e851820..c132395 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -48,6 +48,8 @@
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Launcher2_intermediates)
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Launcher2_intermediates)
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Launcher2_intermediates)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Launcher2_intermediates)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/Launcher2.apk)
 
 # ************************************************
 # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
diff --git a/res/drawable-hdpi/widget_container_holo.9.png b/res/drawable-hdpi/widget_container_holo.9.png
new file mode 100644
index 0000000..8c15a7c
--- /dev/null
+++ b/res/drawable-hdpi/widget_container_holo.9.png
Binary files differ
diff --git a/res/drawable-hdpi/widget_preview_tile.png b/res/drawable-hdpi/widget_preview_tile.png
new file mode 100644
index 0000000..caeddd1
--- /dev/null
+++ b/res/drawable-hdpi/widget_preview_tile.png
Binary files differ
diff --git a/res/drawable-mdpi/widget_container_holo.9.png b/res/drawable-mdpi/widget_container_holo.9.png
new file mode 100644
index 0000000..db24457
--- /dev/null
+++ b/res/drawable-mdpi/widget_container_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/widget_preview_tile.png b/res/drawable-mdpi/widget_preview_tile.png
new file mode 100644
index 0000000..9c7c4f7
--- /dev/null
+++ b/res/drawable-mdpi/widget_preview_tile.png
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_01.jpg b/res/drawable-nodpi/wallpaper_01.jpg
new file mode 100644
index 0000000..d7475b4
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_01.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_01_small.jpg b/res/drawable-nodpi/wallpaper_01_small.jpg
new file mode 100644
index 0000000..5cfe680
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_01_small.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_02.jpg b/res/drawable-nodpi/wallpaper_02.jpg
new file mode 100644
index 0000000..d9cb217
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_02.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_02_small.jpg b/res/drawable-nodpi/wallpaper_02_small.jpg
new file mode 100644
index 0000000..c33eafa
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_02_small.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_03.jpg b/res/drawable-nodpi/wallpaper_03.jpg
new file mode 100644
index 0000000..136b3fa
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_03.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_03_small.jpg b/res/drawable-nodpi/wallpaper_03_small.jpg
new file mode 100644
index 0000000..6ff2254
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_03_small.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_04.jpg b/res/drawable-nodpi/wallpaper_04.jpg
new file mode 100644
index 0000000..2ca3d05
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_04.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_04_small.jpg b/res/drawable-nodpi/wallpaper_04_small.jpg
new file mode 100644
index 0000000..9a32752
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_04_small.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_05.jpg b/res/drawable-nodpi/wallpaper_05.jpg
new file mode 100644
index 0000000..e0b3770
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_05.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_05_small.jpg b/res/drawable-nodpi/wallpaper_05_small.jpg
new file mode 100644
index 0000000..2ae4a18
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_05_small.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_08.jpg b/res/drawable-nodpi/wallpaper_08.jpg
new file mode 100644
index 0000000..0ae0eb2
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_08.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_08_small.jpg b/res/drawable-nodpi/wallpaper_08_small.jpg
new file mode 100644
index 0000000..1ca48ad
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_08_small.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_09.jpg b/res/drawable-nodpi/wallpaper_09.jpg
new file mode 100644
index 0000000..c2f5845
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_09.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_09_small.jpg b/res/drawable-nodpi/wallpaper_09_small.jpg
new file mode 100644
index 0000000..0ac4725
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_09_small.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_10.jpg b/res/drawable-nodpi/wallpaper_10.jpg
new file mode 100644
index 0000000..7dfb665
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_10.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_10_small.jpg b/res/drawable-nodpi/wallpaper_10_small.jpg
new file mode 100644
index 0000000..fedae8a
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_10_small.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_11.jpg b/res/drawable-nodpi/wallpaper_11.jpg
new file mode 100644
index 0000000..bedf167
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_11.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_11_small.jpg b/res/drawable-nodpi/wallpaper_11_small.jpg
new file mode 100644
index 0000000..76c3f7f
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_11_small.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_12.jpg b/res/drawable-nodpi/wallpaper_12.jpg
new file mode 100644
index 0000000..ab987f8
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_12.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_12_small.jpg b/res/drawable-nodpi/wallpaper_12_small.jpg
new file mode 100644
index 0000000..da3fbf7
--- /dev/null
+++ b/res/drawable-nodpi/wallpaper_12_small.jpg
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_architecture.jpg b/res/drawable-nodpi/wallpaper_architecture.jpg
deleted file mode 100644
index 82aafb7..0000000
--- a/res/drawable-nodpi/wallpaper_architecture.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_architecture_small.jpg b/res/drawable-nodpi/wallpaper_architecture_small.jpg
deleted file mode 100644
index f17d9e8..0000000
--- a/res/drawable-nodpi/wallpaper_architecture_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_bubblegum.jpg b/res/drawable-nodpi/wallpaper_bubblegum.jpg
deleted file mode 100644
index e8a717d..0000000
--- a/res/drawable-nodpi/wallpaper_bubblegum.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_bubblegum_small.jpg b/res/drawable-nodpi/wallpaper_bubblegum_small.jpg
deleted file mode 100644
index 5875810..0000000
--- a/res/drawable-nodpi/wallpaper_bubblegum_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_canyon.jpg b/res/drawable-nodpi/wallpaper_canyon.jpg
deleted file mode 100644
index 85aaba4..0000000
--- a/res/drawable-nodpi/wallpaper_canyon.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_canyon_small.jpg b/res/drawable-nodpi/wallpaper_canyon_small.jpg
deleted file mode 100644
index 72513b4..0000000
--- a/res/drawable-nodpi/wallpaper_canyon_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_chroma.jpg b/res/drawable-nodpi/wallpaper_chroma.jpg
deleted file mode 100644
index 7e92243..0000000
--- a/res/drawable-nodpi/wallpaper_chroma.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_chroma_small.jpg b/res/drawable-nodpi/wallpaper_chroma_small.jpg
deleted file mode 100644
index 781c2c7..0000000
--- a/res/drawable-nodpi/wallpaper_chroma_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_escape.jpg b/res/drawable-nodpi/wallpaper_escape.jpg
deleted file mode 100644
index ced555b..0000000
--- a/res/drawable-nodpi/wallpaper_escape.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_escape_small.jpg b/res/drawable-nodpi/wallpaper_escape_small.jpg
deleted file mode 100644
index 3a1a9c1..0000000
--- a/res/drawable-nodpi/wallpaper_escape_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_fidelity.jpg b/res/drawable-nodpi/wallpaper_fidelity.jpg
deleted file mode 100644
index 1f1eb31..0000000
--- a/res/drawable-nodpi/wallpaper_fidelity.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_fidelity_small.jpg b/res/drawable-nodpi/wallpaper_fidelity_small.jpg
deleted file mode 100644
index 01092cc..0000000
--- a/res/drawable-nodpi/wallpaper_fidelity_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_flora.jpg b/res/drawable-nodpi/wallpaper_flora.jpg
deleted file mode 100644
index 964e37c..0000000
--- a/res/drawable-nodpi/wallpaper_flora.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_flora_small.jpg b/res/drawable-nodpi/wallpaper_flora_small.jpg
deleted file mode 100644
index 7faebc9..0000000
--- a/res/drawable-nodpi/wallpaper_flora_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_kepler.jpg b/res/drawable-nodpi/wallpaper_kepler.jpg
deleted file mode 100644
index 4afee40..0000000
--- a/res/drawable-nodpi/wallpaper_kepler.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_kepler_small.jpg b/res/drawable-nodpi/wallpaper_kepler_small.jpg
deleted file mode 100644
index dad79a2..0000000
--- a/res/drawable-nodpi/wallpaper_kepler_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_leaf.jpg b/res/drawable-nodpi/wallpaper_leaf.jpg
deleted file mode 100644
index 7157ddd..0000000
--- a/res/drawable-nodpi/wallpaper_leaf.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_leaf_small.jpg b/res/drawable-nodpi/wallpaper_leaf_small.jpg
deleted file mode 100644
index f37aab9..0000000
--- a/res/drawable-nodpi/wallpaper_leaf_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_noir.jpg b/res/drawable-nodpi/wallpaper_noir.jpg
deleted file mode 100644
index 1962495..0000000
--- a/res/drawable-nodpi/wallpaper_noir.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_noir_small.jpg b/res/drawable-nodpi/wallpaper_noir_small.jpg
deleted file mode 100644
index 482a832..0000000
--- a/res/drawable-nodpi/wallpaper_noir_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_outofthebox.jpg b/res/drawable-nodpi/wallpaper_outofthebox.jpg
deleted file mode 100644
index 6049dcc..0000000
--- a/res/drawable-nodpi/wallpaper_outofthebox.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/wallpaper_outofthebox_small.jpg b/res/drawable-nodpi/wallpaper_outofthebox_small.jpg
deleted file mode 100644
index 0b4cde7..0000000
--- a/res/drawable-nodpi/wallpaper_outofthebox_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_01.jpg b/res/drawable-sw600dp-nodpi/wallpaper_01.jpg
new file mode 100644
index 0000000..6dd81b9
--- /dev/null
+++ b/res/drawable-sw600dp-nodpi/wallpaper_01.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_02.jpg b/res/drawable-sw600dp-nodpi/wallpaper_02.jpg
new file mode 100644
index 0000000..a363f0f
--- /dev/null
+++ b/res/drawable-sw600dp-nodpi/wallpaper_02.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_03.jpg b/res/drawable-sw600dp-nodpi/wallpaper_03.jpg
new file mode 100644
index 0000000..be8a8b7
--- /dev/null
+++ b/res/drawable-sw600dp-nodpi/wallpaper_03.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_04.jpg b/res/drawable-sw600dp-nodpi/wallpaper_04.jpg
new file mode 100644
index 0000000..0c9e72b
--- /dev/null
+++ b/res/drawable-sw600dp-nodpi/wallpaper_04.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_05.jpg b/res/drawable-sw600dp-nodpi/wallpaper_05.jpg
new file mode 100644
index 0000000..47013d3
--- /dev/null
+++ b/res/drawable-sw600dp-nodpi/wallpaper_05.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_08.jpg b/res/drawable-sw600dp-nodpi/wallpaper_08.jpg
new file mode 100644
index 0000000..2c3cbda
--- /dev/null
+++ b/res/drawable-sw600dp-nodpi/wallpaper_08.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_09.jpg b/res/drawable-sw600dp-nodpi/wallpaper_09.jpg
new file mode 100644
index 0000000..885ec35
--- /dev/null
+++ b/res/drawable-sw600dp-nodpi/wallpaper_09.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_10.jpg b/res/drawable-sw600dp-nodpi/wallpaper_10.jpg
new file mode 100644
index 0000000..695808f
--- /dev/null
+++ b/res/drawable-sw600dp-nodpi/wallpaper_10.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_11.jpg b/res/drawable-sw600dp-nodpi/wallpaper_11.jpg
new file mode 100644
index 0000000..94cc540
--- /dev/null
+++ b/res/drawable-sw600dp-nodpi/wallpaper_11.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_12.jpg b/res/drawable-sw600dp-nodpi/wallpaper_12.jpg
new file mode 100644
index 0000000..614498b
--- /dev/null
+++ b/res/drawable-sw600dp-nodpi/wallpaper_12.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_architecture.jpg b/res/drawable-sw720dp-nodpi/wallpaper_architecture.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_architecture.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_architecture.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_architecture_small.jpg b/res/drawable-sw720dp-nodpi/wallpaper_architecture_small.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_architecture_small.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_architecture_small.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_bubblegum.jpg b/res/drawable-sw720dp-nodpi/wallpaper_bubblegum.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_bubblegum.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_bubblegum.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_bubblegum_small.jpg b/res/drawable-sw720dp-nodpi/wallpaper_bubblegum_small.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_bubblegum_small.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_bubblegum_small.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_canyon.jpg b/res/drawable-sw720dp-nodpi/wallpaper_canyon.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_canyon.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_canyon.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_canyon_small.jpg b/res/drawable-sw720dp-nodpi/wallpaper_canyon_small.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_canyon_small.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_canyon_small.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_chroma.jpg b/res/drawable-sw720dp-nodpi/wallpaper_chroma.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_chroma.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_chroma.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_chroma_small.jpg b/res/drawable-sw720dp-nodpi/wallpaper_chroma_small.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_chroma_small.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_chroma_small.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_escape.jpg b/res/drawable-sw720dp-nodpi/wallpaper_escape.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_escape.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_escape.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_escape_small.jpg b/res/drawable-sw720dp-nodpi/wallpaper_escape_small.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_escape_small.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_escape_small.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_fidelity.jpg b/res/drawable-sw720dp-nodpi/wallpaper_fidelity.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_fidelity.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_fidelity.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_fidelity_small.jpg b/res/drawable-sw720dp-nodpi/wallpaper_fidelity_small.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_fidelity_small.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_fidelity_small.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_flora.jpg b/res/drawable-sw720dp-nodpi/wallpaper_flora.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_flora.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_flora.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_flora_small.jpg b/res/drawable-sw720dp-nodpi/wallpaper_flora_small.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_flora_small.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_flora_small.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_kepler.jpg b/res/drawable-sw720dp-nodpi/wallpaper_kepler.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_kepler.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_kepler.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_kepler_small.jpg b/res/drawable-sw720dp-nodpi/wallpaper_kepler_small.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_kepler_small.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_kepler_small.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_leaf.jpg b/res/drawable-sw720dp-nodpi/wallpaper_leaf.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_leaf.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_leaf.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_leaf_small.jpg b/res/drawable-sw720dp-nodpi/wallpaper_leaf_small.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_leaf_small.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_leaf_small.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_noir.jpg b/res/drawable-sw720dp-nodpi/wallpaper_noir.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_noir.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_noir.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_noir_small.jpg b/res/drawable-sw720dp-nodpi/wallpaper_noir_small.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_noir_small.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_noir_small.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_outofthebox.jpg b/res/drawable-sw720dp-nodpi/wallpaper_outofthebox.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_outofthebox.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_outofthebox.jpg
Binary files differ
diff --git a/res/drawable-sw600dp-nodpi/wallpaper_outofthebox_small.jpg b/res/drawable-sw720dp-nodpi/wallpaper_outofthebox_small.jpg
similarity index 100%
rename from res/drawable-sw600dp-nodpi/wallpaper_outofthebox_small.jpg
rename to res/drawable-sw720dp-nodpi/wallpaper_outofthebox_small.jpg
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_01.jpg b/res/drawable-xhdpi/wallpaper_01.jpg
new file mode 100644
index 0000000..5b8d1d5
--- /dev/null
+++ b/res/drawable-xhdpi/wallpaper_01.jpg
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_02.jpg b/res/drawable-xhdpi/wallpaper_02.jpg
new file mode 100644
index 0000000..29cba13
--- /dev/null
+++ b/res/drawable-xhdpi/wallpaper_02.jpg
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_03.jpg b/res/drawable-xhdpi/wallpaper_03.jpg
new file mode 100644
index 0000000..5c165cf
--- /dev/null
+++ b/res/drawable-xhdpi/wallpaper_03.jpg
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_04.jpg b/res/drawable-xhdpi/wallpaper_04.jpg
new file mode 100644
index 0000000..2f0da9d
--- /dev/null
+++ b/res/drawable-xhdpi/wallpaper_04.jpg
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_05.jpg b/res/drawable-xhdpi/wallpaper_05.jpg
new file mode 100644
index 0000000..4ae7bb9
--- /dev/null
+++ b/res/drawable-xhdpi/wallpaper_05.jpg
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_08.jpg b/res/drawable-xhdpi/wallpaper_08.jpg
new file mode 100644
index 0000000..d091cb7
--- /dev/null
+++ b/res/drawable-xhdpi/wallpaper_08.jpg
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_09.jpg b/res/drawable-xhdpi/wallpaper_09.jpg
new file mode 100644
index 0000000..7990d4c
--- /dev/null
+++ b/res/drawable-xhdpi/wallpaper_09.jpg
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_10.jpg b/res/drawable-xhdpi/wallpaper_10.jpg
new file mode 100644
index 0000000..1fd1388
--- /dev/null
+++ b/res/drawable-xhdpi/wallpaper_10.jpg
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_11.jpg b/res/drawable-xhdpi/wallpaper_11.jpg
new file mode 100644
index 0000000..b1609b9
--- /dev/null
+++ b/res/drawable-xhdpi/wallpaper_11.jpg
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_12.jpg b/res/drawable-xhdpi/wallpaper_12.jpg
new file mode 100644
index 0000000..ed7fa0f
--- /dev/null
+++ b/res/drawable-xhdpi/wallpaper_12.jpg
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_architecture.jpg b/res/drawable-xhdpi/wallpaper_architecture.jpg
deleted file mode 100644
index 7605f75..0000000
--- a/res/drawable-xhdpi/wallpaper_architecture.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_architecture_small.jpg b/res/drawable-xhdpi/wallpaper_architecture_small.jpg
deleted file mode 100644
index f17d9e8..0000000
--- a/res/drawable-xhdpi/wallpaper_architecture_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_bubblegum.jpg b/res/drawable-xhdpi/wallpaper_bubblegum.jpg
deleted file mode 100644
index d6c1329..0000000
--- a/res/drawable-xhdpi/wallpaper_bubblegum.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_bubblegum_small.jpg b/res/drawable-xhdpi/wallpaper_bubblegum_small.jpg
deleted file mode 100644
index 5875810..0000000
--- a/res/drawable-xhdpi/wallpaper_bubblegum_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_canyon.jpg b/res/drawable-xhdpi/wallpaper_canyon.jpg
deleted file mode 100644
index 7c3ff3a..0000000
--- a/res/drawable-xhdpi/wallpaper_canyon.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_canyon_small.jpg b/res/drawable-xhdpi/wallpaper_canyon_small.jpg
deleted file mode 100644
index 72513b4..0000000
--- a/res/drawable-xhdpi/wallpaper_canyon_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_chroma.jpg b/res/drawable-xhdpi/wallpaper_chroma.jpg
deleted file mode 100644
index 6f8c85e..0000000
--- a/res/drawable-xhdpi/wallpaper_chroma.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_chroma_small.jpg b/res/drawable-xhdpi/wallpaper_chroma_small.jpg
deleted file mode 100644
index 781c2c7..0000000
--- a/res/drawable-xhdpi/wallpaper_chroma_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_escape.jpg b/res/drawable-xhdpi/wallpaper_escape.jpg
deleted file mode 100644
index 09c9866..0000000
--- a/res/drawable-xhdpi/wallpaper_escape.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_escape_small.jpg b/res/drawable-xhdpi/wallpaper_escape_small.jpg
deleted file mode 100644
index 3a1a9c1..0000000
--- a/res/drawable-xhdpi/wallpaper_escape_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_fidelity.jpg b/res/drawable-xhdpi/wallpaper_fidelity.jpg
deleted file mode 100644
index 38b15a5..0000000
--- a/res/drawable-xhdpi/wallpaper_fidelity.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_fidelity_small.jpg b/res/drawable-xhdpi/wallpaper_fidelity_small.jpg
deleted file mode 100644
index 01092cc..0000000
--- a/res/drawable-xhdpi/wallpaper_fidelity_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_flora.jpg b/res/drawable-xhdpi/wallpaper_flora.jpg
deleted file mode 100644
index 6fdada9..0000000
--- a/res/drawable-xhdpi/wallpaper_flora.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_flora_small.jpg b/res/drawable-xhdpi/wallpaper_flora_small.jpg
deleted file mode 100644
index 7faebc9..0000000
--- a/res/drawable-xhdpi/wallpaper_flora_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_kepler.jpg b/res/drawable-xhdpi/wallpaper_kepler.jpg
deleted file mode 100644
index 45ce15c..0000000
--- a/res/drawable-xhdpi/wallpaper_kepler.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_kepler_small.jpg b/res/drawable-xhdpi/wallpaper_kepler_small.jpg
deleted file mode 100644
index dad79a2..0000000
--- a/res/drawable-xhdpi/wallpaper_kepler_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_leaf.jpg b/res/drawable-xhdpi/wallpaper_leaf.jpg
deleted file mode 100644
index c8cc7fe..0000000
--- a/res/drawable-xhdpi/wallpaper_leaf.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_leaf_small.jpg b/res/drawable-xhdpi/wallpaper_leaf_small.jpg
deleted file mode 100644
index f37aab9..0000000
--- a/res/drawable-xhdpi/wallpaper_leaf_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_noir.jpg b/res/drawable-xhdpi/wallpaper_noir.jpg
deleted file mode 100644
index 535eda8..0000000
--- a/res/drawable-xhdpi/wallpaper_noir.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_noir_small.jpg b/res/drawable-xhdpi/wallpaper_noir_small.jpg
deleted file mode 100644
index 482a832..0000000
--- a/res/drawable-xhdpi/wallpaper_noir_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_outofthebox.jpg b/res/drawable-xhdpi/wallpaper_outofthebox.jpg
deleted file mode 100644
index f3ad2ee..0000000
--- a/res/drawable-xhdpi/wallpaper_outofthebox.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/wallpaper_outofthebox_small.jpg b/res/drawable-xhdpi/wallpaper_outofthebox_small.jpg
deleted file mode 100644
index 0b4cde7..0000000
--- a/res/drawable-xhdpi/wallpaper_outofthebox_small.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/widget_container_holo.9.png b/res/drawable-xhdpi/widget_container_holo.9.png
new file mode 100644
index 0000000..1313fe7
--- /dev/null
+++ b/res/drawable-xhdpi/widget_container_holo.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/widget_preview_tile.png b/res/drawable-xhdpi/widget_preview_tile.png
new file mode 100644
index 0000000..6023867
--- /dev/null
+++ b/res/drawable-xhdpi/widget_preview_tile.png
Binary files differ
diff --git a/res/layout-land/apps_customize_application.xml b/res/layout-land/apps_customize_application.xml
index bface6b..ba95b27 100644
--- a/res/layout-land/apps_customize_application.xml
+++ b/res/layout-land/apps_customize_application.xml
@@ -25,8 +25,5 @@
     android:layout_height="match_parent"
     android:gravity="center_horizontal"
 
-    launcher:blurColor="#FF6B8CF0"
-    launcher:outlineColor="#FF8CD2FF"
-
     android:focusable="true"
     android:background="@drawable/focusable_view_bg" />
diff --git a/res/layout-land/drop_target_bar.xml b/res/layout-land/drop_target_bar.xml
index 55d9421..794a79e 100644
--- a/res/layout-land/drop_target_bar.xml
+++ b/res/layout-land/drop_target_bar.xml
@@ -22,7 +22,7 @@
         <com.android.launcher2.DeleteDropTarget
             style="@style/DropTargetButton"
             android:id="@+id/delete_target_text"
-            android:drawableTop="@drawable/info_target_selector" />
+            android:drawableTop="@drawable/remove_target_selector" />
     </FrameLayout>
     <FrameLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
diff --git a/res/layout-land/launcher.xml b/res/layout-land/launcher.xml
index 99d4181..6b65f56 100644
--- a/res/layout-land/launcher.xml
+++ b/res/layout-land/launcher.xml
@@ -76,6 +76,16 @@
         android:id="@+id/qsb_bar"
         layout="@layout/qsb_bar" />
 
+    <com.android.launcher2.DrawableStateProxyView
+        android:id="@+id/voice_button_proxy"
+        android:layout_width="@dimen/qsb_bar_height"
+        android:layout_height="@dimen/app_icon_size"
+        android:layout_gravity="bottom|left"
+        android:clickable="true"
+        android:onClick="onClickVoiceButton"
+        android:importantForAccessibility="no"
+        launcher:sourceViewId="@+id/voice_button" />
+
     <include layout="@layout/apps_customize_pane"
         android:id="@+id/apps_customize_pane"
         android:layout_width="match_parent"
diff --git a/res/layout-port/apps_customize_application.xml b/res/layout-port/apps_customize_application.xml
index 37b4185..84a8712 100644
--- a/res/layout-port/apps_customize_application.xml
+++ b/res/layout-port/apps_customize_application.xml
@@ -25,8 +25,5 @@
     android:layout_height="match_parent"
     android:gravity="center_horizontal"
 
-    launcher:blurColor="#FF6B8CF0"
-    launcher:outlineColor="#FF8CD2FF"
-
     android:focusable="true"
     android:background="@drawable/focusable_view_bg" />
diff --git a/res/layout-port/launcher.xml b/res/layout-port/launcher.xml
index f60a204..a427501 100644
--- a/res/layout-port/launcher.xml
+++ b/res/layout-port/launcher.xml
@@ -75,9 +75,9 @@
 
     <com.android.launcher2.DrawableStateProxyView
         android:id="@+id/voice_button_proxy"
-        android:layout_width="@dimen/qsb_bar_height"
+        android:layout_width="80dp"
         android:layout_height="@dimen/qsb_bar_height"
-        android:layout_gravity="right"
+        android:layout_gravity="top|right"
         android:clickable="true"
         android:onClick="onClickVoiceButton"
         android:importantForAccessibility="no"
diff --git a/res/layout/apps_customize_widget.xml b/res/layout/apps_customize_widget.xml
index 90883c5..abb7508 100644
--- a/res/layout/apps_customize_widget.xml
+++ b/res/layout/apps_customize_widget.xml
@@ -22,16 +22,27 @@
     android:layout_weight="1"
     android:orientation="vertical"
 
-    launcher:blurColor="#FF6B8CF0"
-    launcher:outlineColor="#FF8CD2FF"
-
     android:background="@drawable/focusable_view_bg"
     android:focusable="true">
 
+    <!-- The preview of the widget or shortcut. -->
+    <com.android.launcher2.PagedViewWidgetImageView
+        android:id="@+id/widget_preview"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:paddingTop="@dimen/app_widget_preview_padding_top"
+        android:paddingLeft="@dimen/app_widget_preview_padding_left"
+        android:paddingRight="@dimen/app_widget_preview_padding_right"
+        android:scaleType="matrix"
+        android:background="@drawable/widget_container_holo" />
+
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginBottom="4dp"
+        android:layout_marginTop="@dimen/app_widget_preview_label_margin_top"
+        android:layout_marginLeft="@dimen/app_widget_preview_label_margin_left"
+        android:layout_marginRight="@dimen/app_widget_preview_label_margin_right"
         android:orientation="horizontal">
         <!-- The name of the widget. -->
         <TextView xmlns:android="http://schemas.android.com/apk/res/android"
@@ -62,13 +73,5 @@
             android:textSize="12sp" />
     </LinearLayout>
 
-    <!-- The icon of the widget. -->
-    <com.android.launcher2.PagedViewWidgetImageView
-        android:id="@+id/widget_preview"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_weight="1"
-        android:paddingTop="@dimen/app_widget_preview_padding_top"
-        android:paddingLeft="@dimen/app_widget_preview_padding_left"
-        android:scaleType="matrix" />
+
 </com.android.launcher2.PagedViewWidget>
diff --git a/res/values-sw600dp-land/dimens.xml b/res/values-sw600dp-land/dimens.xml
index 9c54cf3..1093729 100644
--- a/res/values-sw600dp-land/dimens.xml
+++ b/res/values-sw600dp-land/dimens.xml
@@ -31,4 +31,10 @@
 
 <!-- QSB -->
     <dimen name="qsb_bar_height">82dp</dimen>
+
+<!-- Workspace -->
+    <dimen name="workspace_divider_padding_top">12dp</dimen>
+    <dimen name="workspace_divider_padding_bottom">12dp</dimen>
+    <dimen name="workspace_divider_padding_left">0dp</dimen>
+    <dimen name="workspace_divider_padding_right">0dp</dimen>
 </resources>
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 99e8909..bb6cbc9 100644
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -61,7 +61,9 @@
     <dimen name="apps_customize_tab_bar_margin_top">8dp</dimen>
     <dimen name="apps_customize_widget_cell_width_gap">20dp</dimen>
     <dimen name="apps_customize_widget_cell_height_gap">24dp</dimen>
-
+    <dimen name="app_widget_preview_label_margin_top">8dp</dimen>
+    <dimen name="app_widget_preview_label_margin_left">@dimen/app_widget_preview_padding_left</dimen>
+    <dimen name="app_widget_preview_label_margin_right">@dimen/app_widget_preview_padding_right</dimen>
 <!-- Workspace cell size -->
     <dimen name="workspace_cell_width_land">88dp</dimen>
     <dimen name="workspace_cell_width_port">96dp</dimen>
diff --git a/res/values-sw720dp/dimens.xml b/res/values-sw720dp/dimens.xml
index cfd76dc..7daccd0 100644
--- a/res/values-sw720dp/dimens.xml
+++ b/res/values-sw720dp/dimens.xml
@@ -40,9 +40,6 @@
     <dimen name="apps_customize_cell_height">96dp</dimen>
     <integer name="apps_customize_maxCellCountX">-1</integer>
     <integer name="apps_customize_maxCellCountY">-1</integer>
-    <dimen name="app_widget_preview_padding_left">0dp</dimen>
-    <dimen name="app_widget_preview_padding_top">10dp</dimen>
-
     <dimen name="all_apps_button_vertical_padding">4dip</dimen>
 
     <!-- roughly a status bar (for determining how many rows of icons are in home) -->
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index cd939db..224daac 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -93,24 +93,6 @@
         <attr name="sourceImageViewId" format="integer" />
     </declare-styleable>
 
-    <!-- PagedViewIcon specific attributes. These attributes are used to customize
-         a PagedViewIcon view in XML files. -->
-    <declare-styleable name="PagedViewIcon">
-        <!-- The blur color of the holographic outline -->
-        <attr name="blurColor" format="color" />
-        <!-- The outline color of the holographic outline -->
-        <attr name="outlineColor" format="color" />
-    </declare-styleable>
-
-    <!-- PagedViewWidget specific attributes. These attributes are used to
-         customize a PagedViewWidget view in XML files. -->
-    <declare-styleable name="PagedViewWidget">
-        <!-- The blur color of the holographic outline -->
-        <attr name="blurColor" />
-        <!-- The outline color of the holographic outline -->
-        <attr name="outlineColor" />
-    </declare-styleable>
-
     <!-- PagedView specific attributes. These attributes are used to customize
          a PagedView view in XML files. -->
     <declare-styleable name="PagedView">
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index e789fdf..7cc8960 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -105,9 +105,18 @@
           should be. If 0, it will not be scaled at all. -->
     <dimen name="dragViewScale">12dp</dimen>
 
-    <!-- Padding applied to AppWidgets -->
-    <dimen name="app_widget_preview_padding_left">8dp</dimen>
-    <dimen name="app_widget_preview_padding_top">8dp</dimen>
+    <!-- Padding applied to AppWidget previews -->
+    <dimen name="app_widget_preview_padding_left">16dp</dimen>
+    <dimen name="app_widget_preview_padding_right">16dp</dimen>
+    <dimen name="app_widget_preview_padding_top">32dp</dimen>
+    <dimen name="app_widget_preview_label_margin_top">4dp</dimen>
+    <dimen name="app_widget_preview_label_margin_left">2dp</dimen>
+    <dimen name="app_widget_preview_label_margin_right">2dp</dimen>
+
+    <!-- Padding applied to shortcut previews -->
+    <dimen name="shortcut_preview_padding_left">0dp</dimen>
+    <dimen name="shortcut_preview_padding_right">0dp</dimen>
+    <dimen name="shortcut_preview_padding_top">0dp</dimen>
 
 <!-- Folders -->
     <!-- The size of the image which sits behind the preview of the folder contents -->
diff --git a/res/values/wallpapers.xml b/res/values/wallpapers.xml
index fb386f4..ed56b18 100644
--- a/res/values/wallpapers.xml
+++ b/res/values/wallpapers.xml
@@ -17,16 +17,17 @@
 
 <resources>
     <string-array name="wallpapers" translatable="false">
-        <item>wallpaper_architecture</item>
-        <item>wallpaper_bubblegum</item>
-        <item>wallpaper_canyon</item>
-        <item>wallpaper_chroma</item>
-        <item>wallpaper_escape</item>
-        <item>wallpaper_fidelity</item>
-        <item>wallpaper_flora</item>
-        <item>wallpaper_kepler</item>
-        <item>wallpaper_leaf</item>
-        <item>wallpaper_noir</item>
-        <item>wallpaper_outofthebox</item>
+        <item>wallpaper_01</item>
+        <item>wallpaper_02</item>
+        <item>wallpaper_03</item>
+        <item>wallpaper_04</item>
+        <item>wallpaper_05</item>
+        <item>wallpaper_06</item>
+        <item>wallpaper_07</item>
+        <item>wallpaper_08</item>
+        <item>wallpaper_09</item>
+        <item>wallpaper_10</item>
+        <item>wallpaper_11</item>
+        <item>wallpaper_12</item>
     </string-array>
 </resources>
diff --git a/src/com/android/launcher2/AppsCustomizePagedView.java b/src/com/android/launcher2/AppsCustomizePagedView.java
index 5e0d43d..67def17 100644
--- a/src/com/android/launcher2/AppsCustomizePagedView.java
+++ b/src/com/android/launcher2/AppsCustomizePagedView.java
@@ -33,12 +33,18 @@
 import android.graphics.Bitmap;
 import android.graphics.Bitmap.Config;
 import android.graphics.Canvas;
+import android.graphics.ColorMatrix;
+import android.graphics.ColorMatrixColorFilter;
+import android.graphics.Insets;
 import android.graphics.MaskFilter;
 import android.graphics.Matrix;
 import android.graphics.Paint;
+import android.graphics.PorterDuff;
 import android.graphics.Rect;
 import android.graphics.RectF;
+import android.graphics.Shader;
 import android.graphics.TableMaskFilter;
+import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.AsyncTask;
 import android.os.Process;
@@ -54,6 +60,7 @@
 import android.view.animation.DecelerateInterpolator;
 import android.widget.GridLayout;
 import android.widget.ImageView;
+import android.widget.LinearLayout;
 import android.widget.Toast;
 
 import com.android.launcher.R;
@@ -63,6 +70,7 @@
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.lang.ref.WeakReference;
 
 /**
  * A simple callback interface which also provides the results of the task.
@@ -163,6 +171,64 @@
     int threadPriority;
 }
 
+abstract class WeakReferenceThreadLocal<T> {
+    private ThreadLocal<WeakReference<T>> mThreadLocal;
+    public WeakReferenceThreadLocal() {
+        mThreadLocal = new ThreadLocal<WeakReference<T>>();
+    }
+
+    abstract T initialValue();
+
+    public void set(T t) {
+        mThreadLocal.set(new WeakReference<T>(t));
+    }
+
+    public T get() {
+        WeakReference<T> reference = mThreadLocal.get();
+        T obj;
+        if (reference == null) {
+            obj = initialValue();
+            mThreadLocal.set(new WeakReference<T>(obj));
+            return obj;
+        } else {
+            obj = reference.get();
+            if (obj == null) {
+                obj = initialValue();
+                mThreadLocal.set(new WeakReference<T>(obj));
+            }
+            return obj;
+        }
+    }
+}
+
+class CanvasCache extends WeakReferenceThreadLocal<Canvas> {
+    @Override
+    protected Canvas initialValue() {
+        return new Canvas();
+    }
+}
+
+class PaintCache extends WeakReferenceThreadLocal<Paint> {
+    @Override
+    protected Paint initialValue() {
+        return null;
+    }
+}
+
+class BitmapCache extends WeakReferenceThreadLocal<Bitmap> {
+    @Override
+    protected Bitmap initialValue() {
+        return null;
+    }
+}
+
+class RectCache extends WeakReferenceThreadLocal<Rect> {
+    @Override
+    protected Rect initialValue() {
+        return new Rect();
+    }
+}
+
 /**
  * The Apps/Customize page that displays all the applications, widgets, and shortcuts.
  */
@@ -245,6 +311,17 @@
     private ArrayList<AsyncTaskPageData> mDeferredSyncWidgetPageItems =
         new ArrayList<AsyncTaskPageData>();
 
+    // Used for drawing shortcut previews
+    BitmapCache mCachedShortcutPreviewBitmap = new BitmapCache();
+    PaintCache mCachedShortcutPreviewPaint = new PaintCache();
+    CanvasCache mCachedShortcutPreviewCanvas = new CanvasCache();
+
+    // Used for drawing widget previews
+    CanvasCache mCachedAppWidgetPreviewCanvas = new CanvasCache();
+    RectCache mCachedAppWidgetPreviewSrcRect = new RectCache();
+    RectCache mCachedAppWidgetPreviewDestRect = new RectCache();
+    PaintCache mCachedAppWidgetPreviewPaint = new PaintCache();
+
     public AppsCustomizePagedView(Context context, AttributeSet attrs) {
         super(context, attrs);
         mLayoutInflater = LayoutInflater.from(context);
@@ -689,11 +766,11 @@
 
             FastBitmapDrawable previewDrawable = (FastBitmapDrawable) image.getDrawable();
             float minScale = 1.25f;
-            int minWidth, minHeight;
-            minWidth = Math.max((int) (previewDrawable.getIntrinsicWidth() * minScale), size[0]);
-            minHeight = Math.max((int) (previewDrawable.getIntrinsicHeight() * minScale), size[1]);
+            int maxWidth, maxHeight;
+            maxWidth = Math.min((int) (previewDrawable.getIntrinsicWidth() * minScale), size[0]);
+            maxHeight = Math.min((int) (previewDrawable.getIntrinsicHeight() * minScale), size[1]);
             preview = getWidgetPreview(createWidgetInfo.componentName, createWidgetInfo.previewImage,
-                    createWidgetInfo.icon, spanX, spanY, minWidth, minHeight);
+                    createWidgetInfo.icon, spanX, spanY, maxWidth, maxHeight);
 
             // Determine the image view drawable scale relative to the preview
             float[] mv = new float[9];
@@ -706,17 +783,15 @@
             m.getValues(mv);
             scale = (float) mv[0];
         } else {
-            // Workaround for the fact that we don't keep the original ResolveInfo associated with
-            // the shortcut around.  To get the icon, we just render the preview image (which has
-            // the shortcut icon) to a new drag bitmap that clips the non-icon space.
-            preview = Bitmap.createBitmap(mWidgetPreviewIconPaddedDimension,
-                    mWidgetPreviewIconPaddedDimension, Bitmap.Config.ARGB_8888);
-            Drawable d = image.getDrawable();
+            PendingAddShortcutInfo createShortcutInfo = (PendingAddShortcutInfo) v.getTag();
+            Drawable icon = mIconCache.getFullResIcon(createShortcutInfo.shortcutActivityInfo);
+            preview = Bitmap.createBitmap(icon.getIntrinsicWidth(),
+                    icon.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
+
             mCanvas.setBitmap(preview);
             mCanvas.save();
-            mCanvas.translate((mWidgetPreviewIconPaddedDimension - d.getIntrinsicWidth()) / 2,
-                    (mWidgetPreviewIconPaddedDimension - d.getIntrinsicHeight()) / 2);
-            d.draw(mCanvas);
+            renderDrawableToBitmap(icon, preview, 0, 0,
+                    icon.getIntrinsicWidth(), icon.getIntrinsicHeight());
             mCanvas.restore();
             mCanvas.setBitmap(null);
             createItemInfo.spanX = createItemInfo.spanY = 1;
@@ -1118,11 +1193,11 @@
     }
 
     private void renderDrawableToBitmap(Drawable d, Bitmap bitmap, int x, int y, int w, int h) {
-        renderDrawableToBitmap(d, bitmap, x, y, w, h, 1f, 0xFFFFFFFF);
+        renderDrawableToBitmap(d, bitmap, x, y, w, h, 1f);
     }
 
     private void renderDrawableToBitmap(Drawable d, Bitmap bitmap, int x, int y, int w, int h,
-            float scale, int multiplyColor) {
+            float scale) {
         if (bitmap != null) {
             Canvas c = new Canvas(bitmap);
             c.scale(scale, scale);
@@ -1133,20 +1208,60 @@
             c.setBitmap(null);
         }
     }
-    private Bitmap getShortcutPreview(ResolveInfo info) {
-        // Render the background
-        int offset = 0;
-        int bitmapSize = mAppIconSize;
-        Bitmap preview = Bitmap.createBitmap(bitmapSize, bitmapSize, Config.ARGB_8888);
 
+    private Bitmap getShortcutPreview(ResolveInfo info, int maxWidth, int maxHeight) {
+        Bitmap tempBitmap = mCachedShortcutPreviewBitmap.get();
+        final Canvas c = mCachedShortcutPreviewCanvas.get();
+        if (tempBitmap == null ||
+                tempBitmap.getWidth() != maxWidth ||
+                tempBitmap.getHeight() != maxHeight) {
+            tempBitmap = Bitmap.createBitmap(maxWidth, maxHeight, Config.ARGB_8888);
+            mCachedShortcutPreviewBitmap.set(tempBitmap);
+        } else {
+            c.setBitmap(tempBitmap);
+            c.drawColor(0, PorterDuff.Mode.CLEAR);
+            c.setBitmap(null);
+        }
         // Render the icon
         Drawable icon = mIconCache.getFullResIcon(info);
-        renderDrawableToBitmap(icon, preview, offset, offset, mAppIconSize, mAppIconSize);
+
+        int paddingTop =
+                getResources().getDimensionPixelOffset(R.dimen.shortcut_preview_padding_top);
+        int paddingLeft =
+                getResources().getDimensionPixelOffset(R.dimen.shortcut_preview_padding_left);
+        int paddingRight =
+                getResources().getDimensionPixelOffset(R.dimen.shortcut_preview_padding_right);
+
+        int scaledIconWidth = (maxWidth - paddingLeft - paddingRight);
+        float scaleSize = scaledIconWidth / (float) mAppIconSize;
+
+        renderDrawableToBitmap(
+                icon, tempBitmap, paddingLeft, paddingTop, scaledIconWidth, scaledIconWidth);
+
+        Bitmap preview = Bitmap.createBitmap(maxWidth, maxHeight, Config.ARGB_8888);
+        c.setBitmap(preview);
+        Paint p = mCachedShortcutPreviewPaint.get();
+        if (p == null) {
+            p = new Paint();
+            ColorMatrix colorMatrix = new ColorMatrix();
+            colorMatrix.setSaturation(0);
+            p.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
+            p.setAlpha((int) (255 * 0.06f));
+            //float density = 1f;
+            //p.setMaskFilter(new BlurMaskFilter(15*density, BlurMaskFilter.Blur.NORMAL));
+            mCachedShortcutPreviewPaint.set(p);
+        }
+        c.drawBitmap(tempBitmap, 0, 0, p);
+        c.setBitmap(null);
+
+        renderDrawableToBitmap(icon, preview, 0, 0, mAppIconSize, mAppIconSize);
+
         return preview;
     }
 
-    private Bitmap getWidgetPreview(ComponentName provider, int previewImage, int iconId,
-            int cellHSpan, int cellVSpan, int maxWidth, int maxHeight) {
+    private Bitmap getWidgetPreview(ComponentName provider, int previewImage,
+            int iconId, int cellHSpan, int cellVSpan, int maxWidth,
+            int maxHeight) {
         // Load the preview image if possible
         String packageName = provider.getPackageName();
         if (maxWidth < 0) maxWidth = Integer.MAX_VALUE;
@@ -1163,68 +1278,93 @@
 
         int bitmapWidth;
         int bitmapHeight;
+        Bitmap defaultPreview = null;
         boolean widgetPreviewExists = (drawable != null);
         if (widgetPreviewExists) {
             bitmapWidth = drawable.getIntrinsicWidth();
             bitmapHeight = drawable.getIntrinsicHeight();
         } else {
+            // Generate a preview image if we couldn't load one
             if (cellHSpan < 1) cellHSpan = 1;
             if (cellVSpan < 1) cellVSpan = 1;
-            // Determine the size of the bitmap for the preview image we will generate
-            // TODO: This actually uses the apps customize cell layout params, where as we make want
-            // the Workspace params for more accuracy.
-            bitmapWidth = mWidgetSpacingLayout.estimateCellWidth(cellHSpan);
-            bitmapHeight = mWidgetSpacingLayout.estimateCellHeight(cellVSpan);
-            if (cellHSpan == cellVSpan) {
-                // For square widgets, we just have a fixed size for 1x1 and larger-than-1x1
-                int minOffset = (int) (mAppIconSize * sWidgetPreviewIconPaddingPercentage);
-                if (cellHSpan <= 1) {
-                    bitmapWidth = bitmapHeight = mAppIconSize + 2 * minOffset;
-                } else {
-                    bitmapWidth = bitmapHeight = mAppIconSize + 4 * minOffset;
+
+            BitmapDrawable previewDrawable = (BitmapDrawable) getResources()
+                    .getDrawable(R.drawable.widget_preview_tile);
+            final int previewDrawableWidth = previewDrawable
+                    .getIntrinsicWidth();
+            final int previewDrawableHeight = previewDrawable
+                    .getIntrinsicHeight();
+            bitmapWidth = previewDrawableWidth * cellHSpan; // subtract 2 dips
+            bitmapHeight = previewDrawableHeight * cellVSpan;
+
+            defaultPreview = Bitmap.createBitmap(bitmapWidth, bitmapHeight,
+                    Config.ARGB_8888);
+            final Canvas c = mCachedAppWidgetPreviewCanvas.get();
+            c.setBitmap(defaultPreview);
+            previewDrawable.setBounds(0, 0, bitmapWidth, bitmapHeight);
+            previewDrawable.setTileModeXY(Shader.TileMode.REPEAT,
+                    Shader.TileMode.REPEAT);
+            previewDrawable.draw(c);
+            c.setBitmap(null);
+
+            // Draw the icon in the top left corner
+            int minOffset = (int) (mAppIconSize * sWidgetPreviewIconPaddingPercentage);
+            int smallestSide = Math.min(bitmapWidth, bitmapHeight);
+            float iconScale = Math.min((float) smallestSide
+                    / (mAppIconSize + 2 * minOffset), 1f);
+
+            try {
+                Drawable icon = null;
+                int hoffset =
+                        (int) ((previewDrawableWidth - mAppIconSize * iconScale) / 2);
+                int yoffset =
+                        (int) ((previewDrawableHeight - mAppIconSize * iconScale) / 2);
+                if (iconId > 0)
+                    icon = mIconCache.getFullResIcon(packageName, iconId);
+                Resources resources = mLauncher.getResources();
+                if (icon != null) {
+                    renderDrawableToBitmap(icon, defaultPreview, hoffset,
+                            yoffset, (int) (mAppIconSize * iconScale),
+                            (int) (mAppIconSize * iconScale));
                 }
+            } catch (Resources.NotFoundException e) {
             }
         }
 
+        // Scale to fit width only - let the widget preview be clipped in the
+        // vertical dimension
         float scale = 1f;
         if (bitmapWidth > maxWidth) {
             scale = maxWidth / (float) bitmapWidth;
         }
-        if (bitmapHeight * scale > maxHeight) {
-            scale = maxHeight / (float) bitmapHeight;
-        }
         if (scale != 1f) {
             bitmapWidth = (int) (scale * bitmapWidth);
             bitmapHeight = (int) (scale * bitmapHeight);
         }
 
-        Bitmap preview = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Config.ARGB_8888);
+        Bitmap preview = Bitmap.createBitmap(bitmapWidth, bitmapHeight,
+                Config.ARGB_8888);
 
+        // Draw the scaled preview into the final bitmap
         if (widgetPreviewExists) {
-            renderDrawableToBitmap(drawable, preview, 0, 0, bitmapWidth, bitmapHeight);
+            renderDrawableToBitmap(drawable, preview, 0, 0, bitmapWidth,
+                    bitmapHeight);
         } else {
-            // Generate a preview image if we couldn't load one
-            int minOffset = (int) (mAppIconSize * sWidgetPreviewIconPaddingPercentage);
-            int smallestSide = Math.min(bitmapWidth, bitmapHeight);
-            float iconScale = Math.min((float) smallestSide / (mAppIconSize + 2 * minOffset), 1f);
-            if (cellHSpan != 1 || cellVSpan != 1) {
-                renderDrawableToBitmap(mDefaultWidgetBackground, preview, 0, 0, bitmapWidth,
-                        bitmapHeight);
+            final Canvas c = mCachedAppWidgetPreviewCanvas.get();
+            final Rect src = mCachedAppWidgetPreviewSrcRect.get();
+            final Rect dest = mCachedAppWidgetPreviewDestRect.get();
+            c.setBitmap(preview);
+            src.set(0, 0, defaultPreview.getWidth(), defaultPreview.getHeight());
+            dest.set(0, 0, preview.getWidth(), preview.getHeight());
+
+            Paint p = mCachedAppWidgetPreviewPaint.get();
+            if (p == null) {
+                p = new Paint();
+                p.setFilterBitmap(true);
+                mCachedAppWidgetPreviewPaint.set(p);
             }
-
-            // Draw the icon in the top left corner
-            try {
-                Drawable icon = null;
-                int hoffset = (int) (bitmapWidth / 2 - mAppIconSize * iconScale / 2);
-                int yoffset = (int) (bitmapHeight / 2 - mAppIconSize * iconScale / 2);
-                if (iconId > 0) icon = mIconCache.getFullResIcon(packageName, iconId);
-                Resources resources = mLauncher.getResources();
-                if (icon == null) icon = resources.getDrawable(R.drawable.ic_launcher_application);
-
-                renderDrawableToBitmap(icon, preview, hoffset, yoffset,
-                        (int) (mAppIconSize * iconScale),
-                        (int) (mAppIconSize * iconScale));
-            } catch (Resources.NotFoundException e) {}
+            c.drawBitmap(defaultPreview, src, dest, p);
+            c.setBitmap(null);
         }
         return preview;
     }
@@ -1274,7 +1414,7 @@
             } else if (rawInfo instanceof ResolveInfo) {
                 // Fill in the shortcuts information
                 ResolveInfo info = (ResolveInfo) rawInfo;
-                createItemInfo = new PendingAddItemInfo();
+                createItemInfo = new PendingAddShortcutInfo(info.activityInfo);
                 createItemInfo.itemType = LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT;
                 createItemInfo.componentName = new ComponentName(info.activityInfo.packageName,
                         info.activityInfo.name);
@@ -1363,7 +1503,7 @@
             } else if (rawInfo instanceof ResolveInfo) {
                 // Fill in the shortcuts information
                 ResolveInfo info = (ResolveInfo) rawInfo;
-                images.add(getShortcutPreview(info));
+                images.add(getShortcutPreview(info, data.maxImageWidth, data.maxImageHeight));
             }
         }
     }
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index e4b5af3..c7ad923 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -80,7 +80,6 @@
     // return an (x, y) value from helper functions. Do NOT use them to maintain other state.
     private final int[] mTmpXY = new int[2];
     private final int[] mTmpPoint = new int[2];
-    private final PointF mTmpPointF = new PointF();
     int[] mTempLocation = new int[2];
 
     boolean[][] mOccupied;
@@ -149,7 +148,7 @@
     static final int LANDSCAPE = 0;
     static final int PORTRAIT = 1;
 
-    private static final float REORDER_HINT_MAGNITUDE = 0.10f;
+    private static final float REORDER_HINT_MAGNITUDE = 0.12f;
     private static final int REORDER_ANIMATION_DURATION = 150;
     private float mReorderHintAnimationMagnitude;
 
@@ -1903,7 +1902,6 @@
     // This method starts or changes the reorder hint animations
     private void beginOrAdjustHintAnimations(ItemConfiguration solution, View dragView, int delay) {
         int childCount = mShortcutsAndWidgets.getChildCount();
-        int timeForPriorAnimationToComplete = getMaxCompletionTime();
         for (int i = 0; i < childCount; i++) {
             View child = mShortcutsAndWidgets.getChildAt(i);
             if (child == dragView) continue;
@@ -1912,7 +1910,7 @@
             if (c != null) {
                 ReorderHintAnimation rha = new ReorderHintAnimation(child, lp.cellX, lp.cellY,
                         c.x, c.y, c.spanX, c.spanY);
-                rha.animate(timeForPriorAnimationToComplete);
+                rha.animate();
             }
         }
     }
@@ -1921,11 +1919,13 @@
     // in a temporary state, and hint at where the item will return to.
     class ReorderHintAnimation {
         View child;
-        float deltaX;
-        float deltaY;
+        float finalDeltaX;
+        float finalDeltaY;
+        float initDeltaX;
+        float initDeltaY;
+        float finalScale;
+        float initScale;
         private static final int DURATION = 300;
-        private int repeatCount;
-        private boolean cancelOnCycleComplete = false;
         ValueAnimator va;
 
         public ReorderHintAnimation(View child, int cellX0, int cellY0, int cellX1, int cellY1,
@@ -1938,69 +1938,73 @@
             final int y1 = mTmpPoint[1];
             final int dX = x1 - x0;
             final int dY = y1 - y0;
-            deltaX = 0;
-            deltaY = 0;
+            finalDeltaX = 0;
+            finalDeltaY = 0;
             if (dX == dY && dX == 0) {
             } else {
                 if (dY == 0) {
-                    deltaX = mReorderHintAnimationMagnitude;
+                    finalDeltaX = - Math.signum(dX) * mReorderHintAnimationMagnitude;
                 } else if (dX == 0) {
-                    deltaY = mReorderHintAnimationMagnitude;
+                    finalDeltaY = - Math.signum(dY) * mReorderHintAnimationMagnitude;
                 } else {
                     double angle = Math.atan( (float) (dY) / dX);
-                    deltaX = (int) (Math.cos(angle) * mReorderHintAnimationMagnitude);
-                    deltaY = (int) (Math.sin(angle) * mReorderHintAnimationMagnitude);
+                    finalDeltaX = (int) (- Math.signum(dX) *
+                            Math.abs(Math.cos(angle) * mReorderHintAnimationMagnitude));
+                    finalDeltaY = (int) (- Math.signum(dY) *
+                            Math.abs(Math.sin(angle) * mReorderHintAnimationMagnitude));
                 }
             }
+            initDeltaX = child.getTranslationX();
+            initDeltaY = child.getTranslationY();
+            finalScale = 1.0f - 4.0f / child.getWidth();
+            initScale = child.getScaleX();
+
             child.setPivotY(child.getMeasuredHeight() * 0.5f);
             child.setPivotX(child.getMeasuredWidth() * 0.5f);
             this.child = child;
         }
 
-        void animate(int delay) {
+        void animate() {
             if (mShakeAnimators.containsKey(child)) {
                 ReorderHintAnimation oldAnimation = mShakeAnimators.get(child);
-                oldAnimation.completeAnimation();
+                oldAnimation.cancel();
                 mShakeAnimators.remove(child);
             }
-            if (deltaX == 0 && deltaY == 0) {
+            if (finalDeltaX == 0 && finalDeltaY == 0) {
                 return;
             }
             va = ValueAnimator.ofFloat(0f, 1f);
             va.setRepeatMode(ValueAnimator.REVERSE);
             va.setRepeatCount(ValueAnimator.INFINITE);
-            va.setDuration((int) (DURATION * (1.0f + Math.random()*.08f)));
+            va.setDuration(DURATION);
+            va.setStartDelay((int) (Math.random() * 60));
             va.addUpdateListener(new AnimatorUpdateListener() {
                 @Override
                 public void onAnimationUpdate(ValueAnimator animation) {
                     float r = ((Float) animation.getAnimatedValue()).floatValue();
-                    float x = r * deltaX;
-                    float y = r * deltaY;
+                    float x = r * finalDeltaX + (1 - r) * initDeltaX;
+                    float y = r * finalDeltaY + (1 - r) * initDeltaY;
                     child.setTranslationX(x);
                     child.setTranslationY(y);
-                    float sf = 4.0f / child.getWidth();
-                    float s = 1.0f - r * sf;
+                    float s = r * finalScale + (1 - r) * initScale;
                     child.setScaleX(s);
                     child.setScaleY(s);
                 }
             });
             va.addListener(new AnimatorListenerAdapter() {
                 public void onAnimationRepeat(Animator animation) {
-                    repeatCount++;
                     // We make sure to end only after a full period
-                    if (cancelOnCycleComplete && repeatCount % 2 == 0) {
-                        va.cancel();
-                    }
+                    initDeltaX = 0;
+                    initDeltaY = 0;
+                    initScale = 1.0f;
                 }
             });
-            va.setStartDelay(Math.max(REORDER_ANIMATION_DURATION, delay));
             mShakeAnimators.put(child, this);
             va.start();
         }
 
-
-        private void completeAnimation() {
-            cancelOnCycleComplete = true;
+        private void cancel() {
+            va.cancel();
         }
         private void completeAnimationImmediately() {
             va.cancel();
@@ -2016,16 +2020,6 @@
             s.setInterpolator(new android.view.animation.DecelerateInterpolator(1.5f));
             s.start();
         }
-
-
-        // Returns the time required to complete the current oscillating animation
-        private int completionTime() {
-            if (repeatCount % 2 == 0) {
-                return (int) (va.getDuration() - va.getCurrentPlayTime() + DURATION);
-            } else {
-                return (int) (va.getDuration() - va.getCurrentPlayTime());
-            }
-        }
     }
 
     private void completeAndClearReorderHintAnimations() {
@@ -2035,14 +2029,6 @@
         mShakeAnimators.clear();
     }
 
-    private int getMaxCompletionTime() {
-        int maxTime = 0;
-        for (ReorderHintAnimation a: mShakeAnimators.values()) {
-            maxTime = Math.max(maxTime, a.completionTime());
-        }
-        return maxTime;
-    }
-
     private void commitTempPlacement() {
         for (int i = 0; i < mCountX; i++) {
             for (int j = 0; j < mCountY; j++) {
diff --git a/src/com/android/launcher2/Cling.java b/src/com/android/launcher2/Cling.java
index d61b988..c83ee2f 100644
--- a/src/com/android/launcher2/Cling.java
+++ b/src/com/android/launcher2/Cling.java
@@ -28,6 +28,10 @@
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
+import android.view.FocusFinder;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.accessibility.AccessibilityManager;
 import android.widget.FrameLayout;
 
 import com.android.launcher.R;
@@ -111,6 +115,10 @@
         mIsInitialized = false;
     }
 
+    public String getDrawIdentifier() {
+        return mDrawIdentifier;
+    }
+
     private int[] getPunchThroughPositions() {
         if (mDrawIdentifier.equals(WORKSPACE_PORTRAIT)) {
             return new int[]{getMeasuredWidth() / 2, getMeasuredHeight() - (mButtonBarHeight / 2)};
@@ -130,6 +138,35 @@
     }
 
     @Override
+    public View findViewToTakeAccessibilityFocusFromHover(View child, View descendant) {
+        if (descendant.includeForAccessibility()) {
+            return descendant;
+        }
+        return null;
+    }
+
+    @Override
+    public View focusSearch(int direction) {
+        return this.focusSearch(null, direction);
+    }
+
+    @Override
+    public View focusSearch(View focused, int direction) {
+        return FocusFinder.getInstance().findNextFocus(this, focused, direction);
+    }
+
+    @Override
+    public boolean onHoverEvent(MotionEvent event) {
+        return (mDrawIdentifier.equals(WORKSPACE_PORTRAIT)
+                || mDrawIdentifier.equals(WORKSPACE_LANDSCAPE)
+                || mDrawIdentifier.equals(WORKSPACE_LARGE)
+                || mDrawIdentifier.equals(ALLAPPS_PORTRAIT)
+                || mDrawIdentifier.equals(ALLAPPS_LANDSCAPE)
+                || mDrawIdentifier.equals(ALLAPPS_LARGE)
+                || mDrawIdentifier.equals(WORKSPACE_CUSTOM));
+    }
+
+    @Override
     public boolean onTouchEvent(android.view.MotionEvent event) {
         if (mDrawIdentifier.equals(WORKSPACE_PORTRAIT) ||
             mDrawIdentifier.equals(WORKSPACE_LANDSCAPE) ||
diff --git a/src/com/android/launcher2/IconCache.java b/src/com/android/launcher2/IconCache.java
index 1e42f1b..aa19545 100644
--- a/src/com/android/launcher2/IconCache.java
+++ b/src/com/android/launcher2/IconCache.java
@@ -20,6 +20,7 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.res.Resources;
@@ -94,15 +95,20 @@
     }
 
     public Drawable getFullResIcon(ResolveInfo info) {
+        return getFullResIcon(info.activityInfo);
+    }
+
+    public Drawable getFullResIcon(ActivityInfo info) {
+
         Resources resources;
         try {
             resources = mPackageManager.getResourcesForApplication(
-                    info.activityInfo.applicationInfo);
+                    info.applicationInfo);
         } catch (PackageManager.NameNotFoundException e) {
             resources = null;
         }
         if (resources != null) {
-            int iconId = info.activityInfo.getIconResource();
+            int iconId = info.getIconResource();
             if (iconId != 0) {
                 return getFullResIcon(resources, iconId);
             }
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index e6c25cb..d01de9c 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -17,6 +17,8 @@
 
 package com.android.launcher2;
 
+import android.accounts.Account;
+import android.accounts.AccountManager;
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.AnimatorSet;
@@ -1869,6 +1871,7 @@
                 intent.setPackage(activityName.getPackageName());
             }
             startActivity(null, intent, "onClickVoiceButton");
+            overridePendingTransition(R.anim.fade_in_fast, R.anim.fade_out_fast);
         } catch (ActivityNotFoundException e) {
             Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH);
             intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
@@ -3466,6 +3469,7 @@
             cling.init(this, positionData);
             cling.setVisibility(View.VISIBLE);
             cling.setLayerType(View.LAYER_TYPE_HARDWARE, null);
+            cling.requestAccessibilityFocus();
             if (animate) {
                 cling.buildLayer();
                 cling.setAlpha(0f);
@@ -3514,10 +3518,23 @@
             });
         }
     }
+
+    private boolean skipCustomClingIfNoAccounts() {
+        Cling cling = (Cling) findViewById(R.id.workspace_cling);
+        boolean customCling = cling.getDrawIdentifier().equals("workspace_custom");
+        if (customCling) {
+            AccountManager am = AccountManager.get(this);
+            Account[] accounts = am.getAccountsByType("com.google");
+            return accounts.length == 0;
+        }
+        return false;
+    }
+
     public void showFirstRunWorkspaceCling() {
         // Enable the clings only if they have not been dismissed before
         if (isClingsEnabled() &&
-                !mSharedPrefs.getBoolean(Cling.WORKSPACE_CLING_DISMISSED_KEY, false)) {
+                !mSharedPrefs.getBoolean(Cling.WORKSPACE_CLING_DISMISSED_KEY, false) &&
+                !skipCustomClingIfNoAccounts() ) {
             initCling(R.id.workspace_cling, null, false, 0);
         } else {
             removeCling(R.id.workspace_cling);
diff --git a/src/com/android/launcher2/PagedViewWidget.java b/src/com/android/launcher2/PagedViewWidget.java
index e894142..66b7080 100644
--- a/src/com/android/launcher2/PagedViewWidget.java
+++ b/src/com/android/launcher2/PagedViewWidget.java
@@ -43,6 +43,7 @@
     ShortPressListener mShortPressListener = null;
     boolean mShortPressTriggered = false;
     static PagedViewWidget sShortpressTarget = null;
+    boolean mIsAppWidget;
 
     public PagedViewWidget(Context context) {
         this(context, null);
@@ -84,6 +85,7 @@
 
     public void applyFromAppWidgetProviderInfo(AppWidgetProviderInfo info,
             int maxWidth, int[] cellSpan) {
+        mIsAppWidget = true;
         final ImageView image = (ImageView) findViewById(R.id.widget_preview);
         if (maxWidth > -1) {
             image.setMaxWidth(maxWidth);
@@ -100,6 +102,7 @@
     }
 
     public void applyFromResolveInfo(PackageManager pm, ResolveInfo info) {
+        mIsAppWidget = false;
         CharSequence label = info.loadLabel(pm);
         final ImageView image = (ImageView) findViewById(R.id.widget_preview);
         image.setContentDescription(label);
@@ -115,16 +118,25 @@
         final ImageView i = (ImageView) findViewById(R.id.widget_preview);
         int[] maxSize = new int[2];
         maxSize[0] = i.getWidth() - i.getPaddingLeft() - i.getPaddingRight();
-        maxSize[1] = i.getHeight() - i.getPaddingBottom() - i.getPaddingTop();
+        maxSize[1] = i.getHeight() - i.getPaddingTop();
         return maxSize;
     }
 
     void applyPreview(FastBitmapDrawable preview, int index) {
         final PagedViewWidgetImageView image =
-                (PagedViewWidgetImageView) findViewById(R.id.widget_preview);
+            (PagedViewWidgetImageView) findViewById(R.id.widget_preview);
         if (preview != null) {
             image.mAllowRequestLayout = false;
             image.setImageDrawable(preview);
+            if (mIsAppWidget) {
+                // center horizontally
+                int[] imageSize = getPreviewSize();
+                int centerAmount = (imageSize[0] - preview.getIntrinsicWidth()) / 2;
+                image.setPadding(image.getPaddingLeft() + centerAmount,
+                        image.getPaddingTop(),
+                        image.getPaddingRight(),
+                        image.getPaddingBottom());
+            }
             image.setAlpha(1f);
             image.mAllowRequestLayout = true;
         }
diff --git a/src/com/android/launcher2/PagedViewWidgetImageView.java b/src/com/android/launcher2/PagedViewWidgetImageView.java
index 844b337..22db0ab 100644
--- a/src/com/android/launcher2/PagedViewWidgetImageView.java
+++ b/src/com/android/launcher2/PagedViewWidgetImageView.java
@@ -17,6 +17,8 @@
 package com.android.launcher2;
 
 import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Insets;
 import android.util.AttributeSet;
 import android.widget.ImageView;
 
@@ -34,4 +36,22 @@
             super.requestLayout();
         }
     }
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+
+        Insets insets = Insets.NONE;
+        if (getBackground() != null) {
+            insets = getBackground().getLayoutInsets();
+        }
+        canvas.save();
+        canvas.clipRect(getScrollX() + getPaddingLeft() + insets.left,
+                getScrollY() + getPaddingTop() + insets.top,
+                getScrollX() + getRight() - getLeft() - getPaddingRight() - insets.right,
+                getScrollY() + getBottom() - getTop() - getPaddingBottom() - insets.bottom);
+
+        super.onDraw(canvas);
+        canvas.restore();
+
+    }
 }
diff --git a/src/com/android/launcher2/PendingAddItemInfo.java b/src/com/android/launcher2/PendingAddItemInfo.java
index 26e946e..eaa2e4d 100644
--- a/src/com/android/launcher2/PendingAddItemInfo.java
+++ b/src/com/android/launcher2/PendingAddItemInfo.java
@@ -19,6 +19,7 @@
 import android.appwidget.AppWidgetHostView;
 import android.appwidget.AppWidgetProviderInfo;
 import android.content.ComponentName;
+import android.content.pm.ActivityInfo;
 import android.os.Parcelable;
 
 /**
@@ -31,6 +32,15 @@
     ComponentName componentName;
 }
 
+class PendingAddShortcutInfo extends PendingAddItemInfo {
+
+    ActivityInfo shortcutActivityInfo;
+
+    public PendingAddShortcutInfo(ActivityInfo activityInfo) {
+        shortcutActivityInfo = activityInfo;
+    }
+}
+
 class PendingAddWidgetInfo extends PendingAddItemInfo {
     int minWidth;
     int minHeight;
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index 905ad8a..f562cbc 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -2194,6 +2194,9 @@
                     resizeOnDrop = true;
                     item.spanX = resultSpan[0];
                     item.spanY = resultSpan[1];
+                    AppWidgetHostView awhv = (AppWidgetHostView) cell;
+                    AppWidgetResizeFrame.updateWidgetSizeRanges(awhv, mLauncher, resultSpan[0],
+                            resultSpan[1]);
                 }
 
                 if (mCurrentPage != screen && !hasMovedIntoHotseat) {
@@ -2767,7 +2770,8 @@
             ItemInfo info = (ItemInfo) d.dragInfo;
 
             mTargetCell = findNearestArea((int) mDragViewVisualCenter[0],
-                    (int) mDragViewVisualCenter[1], 1, 1, mDragTargetLayout, mTargetCell);
+                    (int) mDragViewVisualCenter[1], item.spanX, item.spanY,
+                    mDragTargetLayout, mTargetCell);
 
             setCurrentDropOverCell(mTargetCell[0], mTargetCell[1]);
 
@@ -2787,11 +2791,6 @@
                 minSpanY = item.minSpanY;
             }
 
-            int[] reorderPosition = new int[2];
-            reorderPosition = findNearestArea((int) mDragViewVisualCenter[0],
-                    (int) mDragViewVisualCenter[1], item.spanX, item.spanY, mDragTargetLayout,
-                    reorderPosition);
-
             boolean nearestDropOccupied = mDragTargetLayout.isNearestDropLocationOccupied((int)
                     mDragViewVisualCenter[0], (int) mDragViewVisualCenter[1], item.spanX,
                     item.spanY, child, mTargetCell);
@@ -2802,8 +2801,9 @@
                         mTargetCell[0], mTargetCell[1], item.spanX, item.spanY, false,
                         d.dragView.getDragVisualizeOffset(), d.dragView.getDragRegion());
             } else if ((mDragMode == DRAG_MODE_NONE || mDragMode == DRAG_MODE_REORDER)
-                    && !mReorderAlarm.alarmPending() && (mLastReorderX != reorderPosition[0] ||
-                    mLastReorderY != reorderPosition[1])) {
+                    && !mReorderAlarm.alarmPending() && (mLastReorderX != mTargetCell[0] ||
+                    mLastReorderY != mTargetCell[1])) {
+
                 // Otherwise, if we aren't adding to or creating a folder and there's no pending
                 // reorder, then we schedule a reorder
                 ReorderAlarmListener listener = new ReorderAlarmListener(mDragViewVisualCenter,