[automerger skipped] Merge mainline-release 6664920 to master - DO NOT MERGE am: 9e38564f2b am: 6014b0b027 -s ours am: d203ef1ccf -s ours am: ae70011679 -s ours

am skip reason: Change-Id I4de70efc16082e16f7d336d5612357560ab2cc2c with SHA-1 cb99ab0cd2 is in history

Original change: https://android-review.googlesource.com/c/platform/packages/apps/WallpaperPicker2/+/1430120

Change-Id: Ieca03abb175ae70ce0fc7bcc204a6cdfb377cf90
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index d0b03a1..f0f7024 100755
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -53,6 +53,19 @@
       </intent-filter>
     </activity>
 
+    <activity android:name="com.android.wallpaper.picker.DeepLinkActivity"
+        android:theme="@style/WallpaperTheme.NoBackground">
+        <intent-filter android:autoVerify="true">
+            <action android:name="android.intent.action.VIEW" />
+            <category android:name="android.intent.category.DEFAULT" />
+            <category android:name="android.intent.category.BROWSABLE" />
+            <data
+                android:host="g.co"
+                android:pathPrefix="/wallpaper"
+                android:scheme="https" />
+        </intent-filter>
+    </activity>
+
     <activity-alias
         android:name="com.android.wallpaper.picker.CategoryPickerActivity"
         android:targetActivity="com.android.wallpaper.picker.TopLevelPickerActivity"
@@ -67,10 +80,6 @@
         android:theme="@style/WallpaperTheme"
         android:resizeableActivity="false"
         android:parentActivityName="com.android.wallpaper.picker.TopLevelPickerActivity">
-      <intent-filter>
-        <action android:name="com.android.wallpaper.picker.DEEP_LINK" />
-        <category android:name="android.intent.category.DEFAULT" />
-      </intent-filter>
     </activity>
 
     <activity android:name="com.android.wallpaper.picker.PreviewActivity"
diff --git a/res/layout/fragment_individual_picker.xml b/res/layout/fragment_individual_picker.xml
index b315464..e0875c2 100755
--- a/res/layout/fragment_individual_picker.xml
+++ b/res/layout/fragment_individual_picker.xml
@@ -40,4 +40,13 @@
 
     </LinearLayout>
 
+    <androidx.core.widget.ContentLoadingProgressBar
+        android:id="@+id/loading_indicator"
+        style="@android:style/Widget.DeviceDefault.ProgressBar"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="75dp"
+        android:layout_gravity="center_horizontal|top"
+        android:indeterminate="true"/>
+
 </FrameLayout>
diff --git a/res/layout/wallpaper_info_view.xml b/res/layout/wallpaper_info_view.xml
index 5237ef8..66b72e5 100644
--- a/res/layout/wallpaper_info_view.xml
+++ b/res/layout/wallpaper_info_view.xml
@@ -54,8 +54,8 @@
         android:layout_marginTop="@dimen/wallpaper_info_pane_subtitle2_top_margin"
         android:lineHeight="16dp"
         android:gravity="center"
-        android:textColor="@color/action_bar_bottom_sheet_text_color"
-        android:textSize="12sp"
+        android:textColor="@color/action_bar_bottom_sheet_subtitle2_text_color"
+        android:textSize="14sp"
         android:visibility="gone" />
 
     <Button
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 2ca2d03..34efae7 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Vorige"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Muurpapier"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Muurpapiervoorskou"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Die versameling bestaan nie"</string>
 </resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 1bace37..1b0e681 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"ቀዳሚ"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"ልጣፍ"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"የልጣፍ ቅድመ-እይታ"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"ስብስቡ የለም"</string>
 </resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 7648f0d..9f03248 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"الصفحة السابقة"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"الخلفية"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"معاينة عرض الشرائح"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"المجموعة غير متوفرة."</string>
 </resources>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 9303e2f..29e044e 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"পূৰ্বৱৰ্তী"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"ৱালপেপাৰ"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ৱালপেপাৰৰ পূৰ্বদৰ্শন"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"এই সংগ্ৰহটোৰ অস্তিত্ব নাই"</string>
 </resources>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index f02e72e..bfb4432 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Əvvəlki"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Divar kağızı"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Divar Kağızı önizləməsi"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Kolleksiya mövcud deyil"</string>
 </resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index f9f63d7..96fbf05 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Prethodna"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Pozadina"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pregled pozadine"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Kolekcija ne postoji"</string>
 </resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 16bdadc..99af4c8 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Назад"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Шпалеры"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Перадпрагляд шпалер"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Калекцыя не існуе"</string>
 </resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 6f57003..97c6ee3 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Назад"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Тапет"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Визуализация на тапета"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Колекцията не съществува"</string>
 </resources>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 8f60442..15f19e3 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"আগের"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"ওয়ালপেপার"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ওয়ালপেপার প্রিভিউ করুন"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"কালেকশন উপলভ্য নেই"</string>
 </resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 275b194..c813e77 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Nazad"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Pozadinska slika"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pregled pozadinske slike"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Kolekcija ne postoji"</string>
 </resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 278b23e..6518a87 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Anterior"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Fons de pantalla"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Previsualitz. fons de pantalla"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"La col·lecció no existeix"</string>
 </resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 1fb0701..1dbf0f8 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Předchozí"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Tapeta"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Náhled prezentace"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Sbírka neexistuje"</string>
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 184a25b..6b3b32a 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Forrige"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Baggrund"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Forhåndsvisning af baggrund"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Samlingen eksisterer ikke"</string>
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index efcd22c..40aa64a 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Zurück"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Hintergrund"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Hintergrundvorschau"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Die Sammlung existiert nicht"</string>
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index c078327..98a3468 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Προηγούμενη"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Ταπετσαρία"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Προεπισκόπηση ταπετσαρίας"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Η συλλογή δεν υπάρχει."</string>
 </resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index cae6b88..4313b9f 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Previous"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Wallpaper"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Wallpaper preview"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"The collection doesn\'t exist"</string>
 </resources>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index cae6b88..4313b9f 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Previous"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Wallpaper"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Wallpaper preview"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"The collection doesn\'t exist"</string>
 </resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index cae6b88..4313b9f 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Previous"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Wallpaper"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Wallpaper preview"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"The collection doesn\'t exist"</string>
 </resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index cae6b88..4313b9f 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Previous"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Wallpaper"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Wallpaper preview"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"The collection doesn\'t exist"</string>
 </resources>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 041d2f4..2144ec1 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‏‎‏‏‏‎‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎Previous‎‏‎‎‏‎"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‎‎‏‎‏‎‏‎‎‎Wallpaper‎‏‎‎‏‎"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎‏‎‎‏‎‏‏‎‎‎‎Wallpaper preview‎‏‎‎‏‎"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‏‎‏‎‏‏‏‏‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‎‏‎‎The collection doesn\'t exist‎‏‎‎‏‎"</string>
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index f9e3498..bb14b25 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Anterior"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Fondo de pantalla"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Vista previa del fondo"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"La colección no existe"</string>
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index e8f37df..e343d82 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Anterior"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Fondo de pantalla"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Vista previa de fondo"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"La colección no existe"</string>
 </resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 50a3118..7ed36e7 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Eelmine"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Taustapilt"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Taustapildi eelvaade"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Kogu pole olemas"</string>
 </resources>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 122391d..2f41165 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Aurrekoa"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Horma-papera"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Horma-paperaren aurrebista"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Ez dago bildumarik"</string>
 </resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index a13dba1..a2ad653 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"قبلی"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"کاغذدیواری"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"پیش‌نمایش کاغذدیواری"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"مجموعه وجود ندارد"</string>
 </resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 1914f1b..ad8bd1d 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Edellinen"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Taustakuva"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Taustakuvan esikatselu"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Kyseistä kokoelmaa ei ole olemassa"</string>
 </resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index d31d006..fd32602 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Précédent"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Fond d\'écran"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Aperçu du fond d\'écran"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"La collection n\'existe pas"</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index f92dae4..fa92a24 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Précédente"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Fond d\'écran"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Aperçu du fond d\'écran"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Cette collection n\'existe pas"</string>
 </resources>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 6791ddd..a61b3cb 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Anterior"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Fondo de pantalla"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Vista previa do fondo"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"A colección non existe"</string>
 </resources>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 9aea1a3..b7e3791 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"પાછળ"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"વૉલપેપર"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"વૉલપેપરનો પ્રીવ્યૂ કરો"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"સંગ્રહ અસ્તિત્વમાં નથી"</string>
 </resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 927e71b..dda9af5 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"पीछे जाएं"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"वॉलपेपर"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"वॉलपेपर की झलक देखें"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"वॉलपेपर का संग्रह मौजूद नहीं है"</string>
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index dae9eaa..7fc8820 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Prethodno"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Pozadina"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pregled pozadine"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Zbirka ne postoji"</string>
 </resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index c1ffc67..668f13d 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Előző"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Háttérkép"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Háttérkép előnézete"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Nincs ilyen gyűjtemény"</string>
 </resources>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 3bedcc2..6c042bb 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Հետ"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Պաստառ"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Պաստառի նախադիտում"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Հավաքածուն գոյություն չունի"</string>
 </resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index c86abd5..1a51734 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Sebelumnya"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Wallpaper"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pratinjau wallpaper"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Koleksi tidak ada"</string>
 </resources>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 60764e1..876517d 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Fyrri"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Veggfóður"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Forskoðun veggfóðurs"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Safnið er ekki til"</string>
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index f3fc99f..c838a98 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Indietro"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Sfondo"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Anteprima sfondo"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"La raccolta non esiste"</string>
 </resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 5213a6c..ef79aec 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"הקודם"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"טפט"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"תצוגה מקדימה של הטפט"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"האוסף לא קיים"</string>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 3178ee3..9f83264 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"前へ"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"壁紙"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"壁紙のプレビュー"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"コレクションは存在しません"</string>
 </resources>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 238ab1f..b527549 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"წინა"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"ფონი"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ფონის გადახედვა"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"კოლექცია არ არსებობს"</string>
 </resources>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index f681d0c..48d0911 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Алдыңғы"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Тұсқағаз"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Тұсқағазды алдын ала қарау"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Жинақ жоқ."</string>
 </resources>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index eff70f8..25debf9 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"មុន"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"ផ្ទាំងរូបភាព"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ការមើលផ្ទាំង​រូបភាពសាកល្បង"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"បណ្ដុំមិនមានទេ"</string>
 </resources>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 2a51162..232641c 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"ಹಿಂದಕ್ಕೆ"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"ವಾಲ್‌ಪೇಪರ್‌"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ವಾಲ್‌ಪೇಪರ್ ಪೂರ್ವವೀಕ್ಷಣೆ"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"ಸಂಗ್ರಹಣೆ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ"</string>
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 18db06f..2be0992 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"이전"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"배경화면"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"배경화면 미리보기"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"컬렉션이 없습니다."</string>
 </resources>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 3de5668..8e02782 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Мурунку"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Тушкагаз"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Тушкагазды алдын ала көрүү"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Мындай жыйнак жок"</string>
 </resources>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index ebf8ec2..f3cbe2b 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"ກ່ອນໜ້າ"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"ຮູບພື້ນຫຼັງ"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ຕົວຢ່າງຮູບພື້ນຫຼັງ"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"ບໍ່ມິຄໍເລັກຊັນ"</string>
 </resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 17852fb..a03226e 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Ankstesnis"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Ekrano fonas"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Ekrano fono peržiūra"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Rinkinio nėra"</string>
 </resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 1e7c1d7..f7778a9 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Atpakaļ"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Fona tapete"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Fona tapetes priekšskatījums"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Kolekcija nepastāv"</string>
 </resources>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 7efd41a..c4dea2f 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Претходна"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Тапет"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Преглед на тапет"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Збирката не постои"</string>
 </resources>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index cdd63ef..ffef7b2 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"മുമ്പത്തെ"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"വാൾപേപ്പർ"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"വാൾപേപ്പർ പ്രിവ്യൂ"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"ശേഖരം നിലവിലില്ല"</string>
 </resources>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index ee4f411..9d3515d 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Өмнөх"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Ханын зураг"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Ханын зургийг урьдчилан үзэх"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Ийм цуглуулга байхгүй"</string>
 </resources>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 7dd041f..f70ede7 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"मागील"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"वॉलपेपर"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"वॉलपेपर पूर्वावलोकन"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"संग्रह अस्तित्वात नाही"</string>
 </resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index b67e3a1..929a694 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Sebelumnya"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Kertas dinding"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pratonton kertas dinding"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Koleksi tersebut tidak wujud"</string>
 </resources>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 2213288..9297a26 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"ယခင်"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"နောက်ခံ"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"နောက်ခံပုံ အစမ်းကြည့်ရှုခြင်း"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"ဤစုစည်းမှု မရှိပါ"</string>
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 84bf46e..af24134 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Forrige"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Bakgrunn"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Forhåndsvisning av bakgrunn"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Samlingen eksisterer ikke"</string>
 </resources>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index c4fef19..3d5366a 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -70,8 +70,8 @@
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"यन्त्रका वालपेपर"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android वालपेपर"</string>
     <string name="live_wallpapers_category_title" msgid="1814374812192366349">"लाइभ वालपेपरहरू"</string>
-    <string name="my_photos_category_title" msgid="4294567122144565273">"मेरा तस्बिरहरू"</string>
-    <string name="my_photos_generic_wallpaper_title" msgid="7002867526154631172">"मेरो तस्बिर"</string>
+    <string name="my_photos_category_title" msgid="4294567122144565273">"मेरा फोटोहरू"</string>
+    <string name="my_photos_generic_wallpaper_title" msgid="7002867526154631172">"मेरो फोटो"</string>
     <string name="fallback_wallpaper_title" msgid="6154655421012506001">"वालपेपर"</string>
     <string name="app_not_found" msgid="4431461707854088231">"एप स्थापित छैन।"</string>
     <string name="center_wallpaper_position" msgid="4166894762352288883">"मध्यभाग"</string>
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"अघिल्लो"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"वालपेपर"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"वालपेपरको प्रिभ्यु"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"यो सङ्ग्रह छैन"</string>
 </resources>
diff --git a/res/values-night/colors.xml b/res/values-night/colors.xml
index 2c379ae..f54283d 100644
--- a/res/values-night/colors.xml
+++ b/res/values-night/colors.xml
@@ -23,5 +23,6 @@
     <color name="bottom_bar_background_color">@color/google_grey900</color>
     <color name="bottom_bar_icon_unchecked_color">@color/white_54_alpha</color>
     <color name="action_bar_bottom_sheet_text_color">@color/material_white_100</color>
+    <color name="action_bar_bottom_sheet_subtitle2_text_color">@color/white_87_alpha</color>
     <color name="selected_check_color">@color/material_black_100</color>
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 4a7cb49..569c089 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Vorige"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Achtergrond"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Achtergrondvoorbeeld"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"De collectie bestaat niet"</string>
 </resources>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index fcf6a75..54d485e 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"ପୂର୍ବବର୍ତ୍ତୀ"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"ୱାଲପେପର୍"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ୱାଲପେପରର ପ୍ରିଭ୍ୟୁ"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"ସଂଗ୍ରହ ଉପଲବ୍ଧ ନାହିଁ"</string>
 </resources>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 763afa5..87a1f04 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"ਪਿੱਛੇ ਜਾਓ"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"ਵਾਲਪੇਪਰ"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"ਵਾਲਪੇਪਰ ਦੀ ਪੂਰਵ-ਝਲਕ"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"ਸੰਗ੍ਰਹਿ ਮੌਜੂਦ ਨਹੀਂ ਹੈ"</string>
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 54dfb14..a62fdc5 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Wstecz"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Tapeta"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Podgląd tapety"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Taka kolekcja nie istnieje"</string>
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index ea3c288..ace4431 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Anterior"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Imagem de fundo"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pré-visual. da imagem de fundo"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"A coleção não existe."</string>
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index f3a072c..6b8ea55 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Anterior"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Plano de fundo"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Visualização do plano de fundo"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"A coleção não existe"</string>
 </resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 4982b64..8a9c44d 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Înapoi"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Imagine de fundal"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Previzualizarea imaginii de fundal"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Colecția nu există"</string>
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 7f8e37b..d807ba7 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Предыдущая страница"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Обои"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Предварительный просмотр обоев"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Такой подборки не существует."</string>
 </resources>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index e63a2d2..2a6288e 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"පෙර"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"වෝල්පේපරය"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"වෝල්පේපර පෙරදසුන"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"එකතුව නොපවතී"</string>
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 1da2c15..a77c513 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Späť"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Tapeta"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Ukážka tapety"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Zbierka neexistuje"</string>
 </resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index e56b978..abb8ee8 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Nazaj"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Zaslonsko ozadje"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Predogled zaslonskih ozadij"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Zbirka ne obstaja"</string>
 </resources>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index a92579f..03ed073 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Pas"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Imazhi i sfondit"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Pamja paraprake e imazhit të sfondit"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Koleksioni nuk ekziston"</string>
 </resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 447f00e..6f7cda6 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Претходна"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Позадина"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Преглед позадине"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Колекција не постоји"</string>
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index c03d38b..c496885 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Föregående"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Bakgrund"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Förhandsgranska bakgrunden"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Samlingen finns inte"</string>
 </resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 71beaf9..ff90209 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Uliotangulia"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Mandhari"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Onyesho la kukagua mandhari"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Mkusanyiko huu haupo"</string>
 </resources>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index c0e601c..09478ba 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"முந்தைய பக்கத்திற்குச் செல்வதற்கான பட்டன்"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"வால்பேப்பர்"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"வால்பேப்பர் மாதிரிக்காட்சி"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"இந்தத் தொகுப்பு இல்லை"</string>
 </resources>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 1ad45d2..f371db9 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"మునుపటి"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"వాల్‌పేపర్"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"వాల్‌పేపర్ ప్రివ్యూ"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"ఈ సేకరణ అందుబాటులో లేదు"</string>
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 53b3b16..494a5c7 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"ก่อนหน้า"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"วอลเปเปอร์"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"พรีวิววอลเปเปอร์"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"ไม่มีคอลเล็กชัน"</string>
 </resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index a24647a..4e13333 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Nauna"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Wallpaper"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Preview ng wallpaper"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Wala ang koleksyon"</string>
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 782483b..2b78d20 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Önceki"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Duvar kağıdı"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Duvar kağıdı ön izleme"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Koleksiyon mevcut değil"</string>
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 341f50c..73b1c5a 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Назад"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Фоновий малюнок"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Перегляд фонового малюнка"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Колекція не існує"</string>
 </resources>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 50f7791..6c7552b 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"گزشتہ"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"وال پیپر"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"وال پیپر کا پیش منظر"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"مجموعہ موجود نہیں ہے"</string>
 </resources>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index d66df05..a906905 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Avvalgisi"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Fon rasmi"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Fon rasmiga razm solish"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Bunday terma mavjud emas"</string>
 </resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index d8f314c..199cca2 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Trước"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Hình nền"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Xem trước hình nền"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Bộ sưu tập không tồn tại"</string>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 82aa3e5..7c9404b 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"上一页"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"壁纸"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"壁纸预览"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"该集合不存在"</string>
 </resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index fcd8ecd..4382f14 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"返回"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"桌布"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"預覽桌布"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"桌布集不存在"</string>
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index c602491..e191907 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"上一頁"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"桌布"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"桌布預覽"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"這個系列不存在"</string>
 </resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 5966df3..00df6c0 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -93,4 +93,5 @@
     <string name="previous_page_content_description" msgid="1138597031571078429">"Okwangaphambilini"</string>
     <string name="wallpaper_title" msgid="6754214682228331092">"Isithombe sangemuva"</string>
     <string name="wallpaper_preview_card_content_description" msgid="6049261033541034584">"Ukubuka kuqala kwesithombe sangemuva"</string>
+    <string name="collection_not_exist_msg" msgid="3504852962885064842">"Uqoqo alutholakali"</string>
 </resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index f468718..ad51cf0 100755
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -47,6 +47,7 @@
     <color name="bottom_bar_background_color">@color/material_white_100</color>
     <color name="bottom_bar_icon_unchecked_color">@color/material_grey600</color>
     <color name="action_bar_bottom_sheet_text_color">@color/black_87_alpha</color>
+    <color name="action_bar_bottom_sheet_subtitle2_text_color">@color/black_54_alpha</color>
 
     <color name="selected_check_color">@color/material_white_100</color>
     <color name="smartspace_preview_shadow_color_dark">#B0000000</color>
diff --git a/res/values/picker_colors.xml b/res/values/picker_colors.xml
index 5c67345..59f98c0 100755
--- a/res/values/picker_colors.xml
+++ b/res/values/picker_colors.xml
@@ -33,6 +33,7 @@
     <color name="white_67_alpha">#ABFFFFFF</color>
     <color name="white_70_alpha">#B3FFFFFF</color>
     <color name="white_80_alpha">#CCFFFFFF</color>
+    <color name="white_87_alpha">#DEFFFFFF</color>
     <color name="white_88_alpha">#E0FFFFFF</color>
 
     <!-- Dark scrollbar thumb color (26% of black) -->
diff --git a/res/values/strings.xml b/res/values/strings.xml
index fdac56d..9ec0118 100755
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -341,4 +341,7 @@
 
     <!-- Content description of wallpaper preview card. [CHAR_LIMIT=40]-->
     <string name="wallpaper_preview_card_content_description">Wallpaper preview</string>
+
+    <!-- Error message of the wallpaper's collection doesn't exist. [CHAR_LIMIT=NONE] -->
+    <string name="collection_not_exist_msg">The collection doesn\'t exist</string>
 </resources>
diff --git a/src/com/android/wallpaper/model/CategoryProvider.java b/src/com/android/wallpaper/model/CategoryProvider.java
index 3977d89..ceef6b4 100755
--- a/src/com/android/wallpaper/model/CategoryProvider.java
+++ b/src/com/android/wallpaper/model/CategoryProvider.java
@@ -54,4 +54,9 @@
      */
     @Nullable
     Category getCategory(String collectionId);
+
+    /**
+     * Checks if the categories are fetched.
+     */
+    boolean isCategoriesFetched();
 }
diff --git a/src/com/android/wallpaper/module/DefaultCategoryProvider.java b/src/com/android/wallpaper/module/DefaultCategoryProvider.java
index 43341d5..e9b6955 100755
--- a/src/com/android/wallpaper/module/DefaultCategoryProvider.java
+++ b/src/com/android/wallpaper/module/DefaultCategoryProvider.java
@@ -122,6 +122,11 @@
         return null;
     }
 
+    @Override
+    public boolean isCategoriesFetched() {
+        return mFetchedCategories;
+    }
+
     protected void doFetch(final CategoryReceiver receiver, boolean forceRefresh) {
         CategoryReceiver delegatingReceiver = new CategoryReceiver() {
             @Override
diff --git a/src/com/android/wallpaper/module/Injector.java b/src/com/android/wallpaper/module/Injector.java
index 13ed9d8..0abb531 100755
--- a/src/com/android/wallpaper/module/Injector.java
+++ b/src/com/android/wallpaper/module/Injector.java
@@ -16,6 +16,8 @@
 package com.android.wallpaper.module;
 
 import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
 
 import androidx.fragment.app.Fragment;
 
@@ -82,4 +84,6 @@
     LiveWallpaperInfoFactory getLiveWallpaperInfoFactory(Context context);
 
     DrawableLayerResolver getDrawableLayerResolver();
+
+    Intent getDeepLinkRedirectIntent(Context context, Uri uri);
 }
diff --git a/src/com/android/wallpaper/picker/BaseActivity.java b/src/com/android/wallpaper/picker/BaseActivity.java
index 7f2ea60..25a2b2a 100755
--- a/src/com/android/wallpaper/picker/BaseActivity.java
+++ b/src/com/android/wallpaper/picker/BaseActivity.java
@@ -21,7 +21,7 @@
  * Base activity that keeps track of whether fragment transactions are safe to commit given the
  * activity's current lifecycle state.
  */
-public class BaseActivity extends AppCompatActivity {
+public class BaseActivity extends AppCompatActivity implements FragmentTransactionChecker {
 
     private boolean mIsSafeToCommitFragmentTransaction;
 
@@ -37,6 +37,7 @@
         mIsSafeToCommitFragmentTransaction = false;
     }
 
+    @Override
     public boolean isSafeToCommitFragmentTransaction() {
         return mIsSafeToCommitFragmentTransaction;
     }
diff --git a/src/com/android/wallpaper/picker/CategoryFragment.java b/src/com/android/wallpaper/picker/CategoryFragment.java
index db60c5f..42566eb 100755
--- a/src/com/android/wallpaper/picker/CategoryFragment.java
+++ b/src/com/android/wallpaper/picker/CategoryFragment.java
@@ -15,9 +15,6 @@
  */
 package com.android.wallpaper.picker;
 
-import static android.view.View.MeasureSpec.EXACTLY;
-import static android.view.View.MeasureSpec.makeMeasureSpec;
-
 import static com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_COLLAPSED;
 import static com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDED;
 
@@ -31,10 +28,8 @@
 import android.os.Bundle;
 import android.provider.Settings;
 import android.service.wallpaper.WallpaperService;
+import android.text.TextUtils;
 import android.view.LayoutInflater;
-import android.view.Surface;
-import android.view.SurfaceControlViewHost;
-import android.view.SurfaceHolder;
 import android.view.SurfaceView;
 import android.view.View;
 import android.view.ViewGroup;
@@ -47,7 +42,6 @@
 import androidx.appcompat.app.AlertDialog;
 import androidx.cardview.widget.CardView;
 import androidx.constraintlayout.widget.ConstraintLayout;
-import androidx.core.content.ContextCompat;
 import androidx.fragment.app.Fragment;
 import androidx.viewpager.widget.PagerAdapter;
 import androidx.viewpager.widget.ViewPager;
@@ -70,9 +64,11 @@
 import com.android.wallpaper.picker.individual.IndividualPickerFragment;
 import com.android.wallpaper.picker.individual.IndividualPickerFragment.ThumbnailUpdater;
 import com.android.wallpaper.picker.individual.IndividualPickerFragment.WallpaperDestinationCallback;
+import com.android.wallpaper.util.DeepLinkUtils;
 import com.android.wallpaper.util.SizeCalculator;
 import com.android.wallpaper.util.WallpaperConnection;
 import com.android.wallpaper.util.WallpaperConnection.WallpaperConnectionListener;
+import com.android.wallpaper.util.WallpaperSurfaceCallback;
 import com.android.wallpaper.widget.BottomActionBar;
 import com.android.wallpaper.widget.LiveTileOverlay;
 import com.android.wallpaper.widget.LockScreenPreviewer;
@@ -94,13 +90,8 @@
  */
 public class CategoryFragment extends AppbarFragment
         implements CategorySelectorFragmentHost, ThumbnailUpdater, WallpaperDestinationCallback,
-        WallpaperPickerRecyclerViewAccessibilityDelegate.BottomSheetHost {
-
-    private final Rect mPreviewLocalRect = new Rect();
-    private final Rect mPreviewGlobalRect = new Rect();
-    private final int[] mLivePreviewLocation = new int[2];
-    private final WallpaperSurfaceCallback mWallpaperSurfaceCallback =
-            new WallpaperSurfaceCallback();
+        WallpaperPickerRecyclerViewAccessibilityDelegate.BottomSheetHost,
+        IndividualPickerFragment.IndividualPickerFragmentHost {
 
     /**
      * Interface to be implemented by an Activity hosting a {@link CategoryFragment}
@@ -116,6 +107,8 @@
         void show(String collectionId);
 
         boolean isNavigationTabsContained();
+
+        void fetchCategories();
     }
 
     public static CategoryFragment newInstance(CharSequence title) {
@@ -135,6 +128,7 @@
     private SurfaceView mWorkspaceSurface;
     private WorkspaceSurfaceHolderCallback mWorkspaceSurfaceCallback;
     private SurfaceView mWallpaperSurface;
+    private WallpaperSurfaceCallback mWallpaperSurfaceCallback;
     private ImageView mLockscreenPreview;
     private PreviewPager mPreviewPager;
     private List<View> mWallPaperPreviews;
@@ -151,13 +145,13 @@
     // The wallpaper information which is currently shown on the lock preview.
     private WallpaperInfo mLockPreviewWallpaperInfo;
 
-    // Home workspace surface is behind the app window, and so must the home image wallpaper like
-    // the live wallpaper. This view is rendered on mWallpaperSurface for home image wallpaper.
-    private ImageView mHomeImageWallpaper;
-    private boolean mIsCollapsingByUserSelecting;
     private LockScreenPreviewer mLockScreenPreviewer;
     private View mRootContainer;
 
+    private final Rect mPreviewLocalRect = new Rect();
+    private final Rect mPreviewGlobalRect = new Rect();
+    private final int[] mLivePreviewLocation = new int[2];
+
     public CategoryFragment() {
         mCategorySelectorFragment = new CategorySelectorFragment();
     }
@@ -176,6 +170,8 @@
         mWorkspaceSurfaceCallback = new WorkspaceSurfaceHolderCallback(
                 mWorkspaceSurface, getContext());
         mWallpaperSurface = homePreviewCard.findViewById(R.id.wallpaper_surface);
+        mWallpaperSurfaceCallback = new WallpaperSurfaceCallback(getContext(), mHomePreview,
+                mWallpaperSurface);
         mWallPaperPreviews.add(homePreviewCard);
 
         CardView lockscreenPreviewCard = (CardView) inflater.inflate(
@@ -287,6 +283,22 @@
                 .beginTransaction()
                 .replace(R.id.category_fragment_container, mCategorySelectorFragment)
                 .commitNow();
+
+        // Deep link case
+        Intent intent = getActivity().getIntent();
+        String deepLinkCollectionId = DeepLinkUtils.getCollectionId(intent);
+        if (!TextUtils.isEmpty(deepLinkCollectionId)) {
+            mIndividualPickerFragment = InjectorProvider.getInjector()
+                    .getIndividualPickerFragment(deepLinkCollectionId);
+            mIndividualPickerFragment.highlightAppliedWallpaper(mWallpaperIndex);
+            getChildFragmentManager()
+                    .beginTransaction()
+                    .replace(R.id.category_fragment_container, mIndividualPickerFragment)
+                    .addToBackStack(null)
+                    .commit();
+            getChildFragmentManager().executePendingTransactions();
+            intent.setData(null);
+        }
         return view;
     }
 
@@ -409,7 +421,6 @@
             mIndividualPickerFragment.resizeLayout(mBottomSheetBehavior.getPeekHeight());
             mIndividualPickerFragment.scrollToPosition(position);
             if (mBottomSheetBehavior.getState() != STATE_COLLAPSED) {
-                mIsCollapsingByUserSelecting = true;
                 mBottomSheetBehavior.setState(STATE_COLLAPSED);
             }
         });
@@ -427,6 +438,16 @@
     }
 
     @Override
+    public void moveToPreviousFragment() {
+        getChildFragmentManager().popBackStack();
+    }
+
+    @Override
+    public void fetchCategories() {
+        getFragmentHost().fetchCategories();
+    }
+
+    @Override
     public void expandBottomSheet() {
         if (mBottomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
             mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
@@ -647,34 +668,37 @@
         if (mWallpaperConnection != null) {
             mWallpaperConnection.disconnect();
         }
-        ImageView previewView = mWallpaperIndex == 0 ? mHomePreview : mLockscreenPreview;
-        previewView.getLocationOnScreen(mLivePreviewLocation);
-        mPreviewGlobalRect.set(0, 0, previewView.getMeasuredWidth(),
-                previewView.getMeasuredHeight());
-        mPreviewLocalRect.set(mPreviewGlobalRect);
-        mPreviewGlobalRect.offset(mLivePreviewLocation[0], mLivePreviewLocation[1]);
 
-        mWallpaperConnection = new WallpaperConnection(
-                getWallpaperIntent(homeWallpaper.getWallpaperComponent()), activity,
-                new WallpaperConnectionListener() {
-                    @Override
-                    public void onWallpaperColorsChanged(WallpaperColors colors, int displayId) {
-                        if (mLockPreviewWallpaperInfo instanceof LiveWallpaperInfo) {
-                            mLockScreenPreviewer.setColor(colors);
+        if (WallpaperConnection.isPreviewAvailable()) {
+            ImageView previewView = mWallpaperIndex == 0 ? mHomePreview : mLockscreenPreview;
+            previewView.getLocationOnScreen(mLivePreviewLocation);
+            mPreviewGlobalRect.set(0, 0, previewView.getMeasuredWidth(),
+                    previewView.getMeasuredHeight());
+            mPreviewLocalRect.set(mPreviewGlobalRect);
+            mPreviewGlobalRect.offset(mLivePreviewLocation[0], mLivePreviewLocation[1]);
+            mWallpaperConnection = new WallpaperConnection(
+                    getWallpaperIntent(homeWallpaper.getWallpaperComponent()), activity,
+                    new WallpaperConnectionListener() {
+                        @Override
+                        public void onWallpaperColorsChanged(WallpaperColors colors,
+                                int displayId) {
+                            if (mLockPreviewWallpaperInfo instanceof LiveWallpaperInfo) {
+                                mLockScreenPreviewer.setColor(colors);
+                            }
                         }
-                    }
-                }, mPreviewGlobalRect);
+                    }, mPreviewGlobalRect);
 
-        LiveTileOverlay.INSTANCE.update(new RectF(mPreviewLocalRect),
-                ((CardView) previewView.getParent()).getRadius());
+            LiveTileOverlay.INSTANCE.update(new RectF(mPreviewLocalRect),
+                    ((CardView) previewView.getParent()).getRadius());
 
-        mWallpaperConnection.setVisibility(true);
-        previewView.post(() -> {
-            if (mWallpaperConnection != null && !mWallpaperConnection.connect()) {
-                mWallpaperConnection = null;
-                LiveTileOverlay.INSTANCE.detach(previewView.getOverlay());
-            }
-        });
+            mWallpaperConnection.setVisibility(true);
+            previewView.post(() -> {
+                if (mWallpaperConnection != null && !mWallpaperConnection.connect()) {
+                    mWallpaperConnection = null;
+                    LiveTileOverlay.INSTANCE.detach(previewView.getOverlay());
+                }
+            });
+        }
     }
 
     private void updateThumbnail(WallpaperInfo wallpaperInfo, ImageView thumbnailView,
@@ -696,7 +720,8 @@
 
         boolean renderInImageWallpaperSurface =
                 !(wallpaperInfo instanceof LiveWallpaperInfo) && isHomeWallpaper;
-        ImageView imageView = renderInImageWallpaperSurface ? mHomeImageWallpaper : thumbnailView;
+        ImageView imageView = renderInImageWallpaperSurface
+                ? mWallpaperSurfaceCallback.getHomeImageWallpaper() : thumbnailView;
         if (imageView != null) {
             wallpaperInfo.getThumbAsset(activity.getApplicationContext())
                     .loadPreviewImage(activity, imageView,
@@ -706,9 +731,9 @@
         if (isHomeWallpaper) {
             LiveTileOverlay.INSTANCE.detach(thumbnailView.getOverlay());
             if (wallpaperInfo instanceof LiveWallpaperInfo) {
-                if(mHomeImageWallpaper != null) {
+                if (mWallpaperSurfaceCallback.getHomeImageWallpaper() != null) {
                     wallpaperInfo.getThumbAsset(activity.getApplicationContext()).loadPreviewImage(
-                            activity, mHomeImageWallpaper,
+                            activity, mWallpaperSurfaceCallback.getHomeImageWallpaper(),
                             getResources().getColor(R.color.secondary_color));
                 }
                 setUpLiveWallpaperPreview(wallpaperInfo);
@@ -720,7 +745,8 @@
             }
         } else {
             // lock screen wallpaper
-            if (wallpaperInfo instanceof LiveWallpaperInfo) {
+            if (wallpaperInfo instanceof LiveWallpaperInfo
+                    && WallpaperConnection.isPreviewAvailable()) {
                 LiveTileOverlay.INSTANCE.attach(thumbnailView.getOverlay());
             } else {
                 LiveTileOverlay.INSTANCE.detach(thumbnailView.getOverlay());
@@ -747,45 +773,6 @@
         mWorkspaceSurface.getHolder().addCallback(mWorkspaceSurfaceCallback);
     }
 
-    private class WallpaperSurfaceCallback implements SurfaceHolder.Callback {
-
-        private Surface mLastSurface;
-        private SurfaceControlViewHost mHost;
-
-        @Override
-        public void surfaceCreated(SurfaceHolder holder) {
-            if (mLastSurface != holder.getSurface()) {
-                mLastSurface = holder.getSurface();
-                mHomeImageWallpaper = new ImageView(getContext());
-                mHomeImageWallpaper.setBackgroundColor(
-                        ContextCompat.getColor(getContext(), R.color.primary_color));
-                mHomeImageWallpaper.measure(makeMeasureSpec(mHomePreview.getWidth(), EXACTLY),
-                        makeMeasureSpec(mHomePreview.getHeight(), EXACTLY));
-                mHomeImageWallpaper.layout(0, 0, mHomePreview.getWidth(), mHomePreview.getHeight());
-
-                cleanUp();
-                mHost = new SurfaceControlViewHost(getContext(),
-                        getContext().getDisplay(), mWallpaperSurface.getHostToken());
-                mHost.setView(mHomeImageWallpaper, mHomeImageWallpaper.getWidth(),
-                        mHomeImageWallpaper.getHeight());
-                mWallpaperSurface.setChildSurfacePackage(mHost.getSurfacePackage());
-            }
-        }
-
-        @Override
-        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { }
-
-        @Override
-        public void surfaceDestroyed(SurfaceHolder holder) { }
-
-        public void cleanUp() {
-            if (mHost != null) {
-                mHost.release();
-                mHost = null;
-            }
-        }
-    };
-
     private static class PreviewPagerAdapter extends PagerAdapter {
 
         private List<View> mPages;
diff --git a/src/com/android/wallpaper/picker/CategorySelectorFragment.java b/src/com/android/wallpaper/picker/CategorySelectorFragment.java
index 98e739b..887eb92 100644
--- a/src/com/android/wallpaper/picker/CategorySelectorFragment.java
+++ b/src/com/android/wallpaper/picker/CategorySelectorFragment.java
@@ -45,6 +45,7 @@
 import com.android.wallpaper.model.Category;
 import com.android.wallpaper.module.InjectorProvider;
 import com.android.wallpaper.module.UserEventLogger;
+import com.android.wallpaper.util.DeepLinkUtils;
 import com.android.wallpaper.util.DisplayMetricsRetriever;
 import com.android.wallpaper.util.SizeCalculator;
 import com.android.wallpaper.widget.WallpaperPickerRecyclerViewAccessibilityDelegate;
@@ -88,6 +89,11 @@
          * Sets the title in the toolbar.
          */
         void setToolbarTitle(CharSequence title);
+
+        /**
+         * Fetches the wallpaper categories.
+         */
+        void fetchCategories();
     }
 
     private RecyclerView mImageGrid;
@@ -121,6 +127,10 @@
                         mImageGrid, (BottomSheetHost) getParentFragment(), getNumColumns()));
         getCategorySelectorFragmentHost().setToolbarTitle(getText(R.string.wallpaper_title));
 
+        if (!DeepLinkUtils.isDeepLink(getActivity().getIntent())) {
+            getCategorySelectorFragmentHost().fetchCategories();
+        }
+
         return view;
     }
 
@@ -246,7 +256,6 @@
             }
 
             getCategorySelectorFragmentHost().show(mCategory);
-            getCategorySelectorFragmentHost().setToolbarTitle(mCategory.getTitle());
         }
 
         /**
diff --git a/src/com/android/wallpaper/picker/DeepLinkActivity.java b/src/com/android/wallpaper/picker/DeepLinkActivity.java
new file mode 100644
index 0000000..9c4afb4
--- /dev/null
+++ b/src/com/android/wallpaper/picker/DeepLinkActivity.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.wallpaper.picker;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import androidx.annotation.Nullable;
+
+import com.android.wallpaper.module.InjectorProvider;
+
+/**
+ * An intermediate activity to redirect to a brand new target activity when the user clicks
+ * the url link to deep link.
+ */
+public class DeepLinkActivity extends Activity {
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        startActivity(InjectorProvider.getInjector().getDeepLinkRedirectIntent(
+                this, getIntent().getData()));
+        finish();
+    }
+}
diff --git a/src/com/android/wallpaper/picker/FragmentTransactionChecker.java b/src/com/android/wallpaper/picker/FragmentTransactionChecker.java
new file mode 100644
index 0000000..c25a41f
--- /dev/null
+++ b/src/com/android/wallpaper/picker/FragmentTransactionChecker.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.wallpaper.picker;
+
+/**
+ * An interface for a class to keep track of whether fragment transactions are safe to commit given
+ * the activity's current lifecycle state.
+ */
+public interface FragmentTransactionChecker {
+    /**
+     * Checks if the fragment transactions are safe to commit
+     *
+     * @return {@code true} if it is safe; {@code false} otherwise.
+     */
+    boolean isSafeToCommitFragmentTransaction();
+}
diff --git a/src/com/android/wallpaper/picker/ImagePreviewFragment.java b/src/com/android/wallpaper/picker/ImagePreviewFragment.java
index b1153bb..308e907 100755
--- a/src/com/android/wallpaper/picker/ImagePreviewFragment.java
+++ b/src/com/android/wallpaper/picker/ImagePreviewFragment.java
@@ -52,6 +52,7 @@
 
 import com.android.wallpaper.R;
 import com.android.wallpaper.asset.Asset;
+import com.android.wallpaper.asset.CurrentWallpaperAssetVN;
 import com.android.wallpaper.model.WallpaperInfo;
 import com.android.wallpaper.module.WallpaperPersister.Destination;
 import com.android.wallpaper.module.WallpaperPersister.SetWallpaperCallback;
@@ -314,7 +315,8 @@
                         // Set page bitmap.
                         mFullResImageView.setImage(ImageSource.bitmap(pageBitmap));
 
-                        setDefaultWallpaperZoomAndScroll();
+                        setDefaultWallpaperZoomAndScroll(
+                                mWallpaperAsset instanceof CurrentWallpaperAssetVN);
                         crossFadeInMosaicView();
                     }
                     getActivity().invalidateOptionsMenu();
@@ -370,14 +372,20 @@
      *
      * <p>This method is called once in the Fragment lifecycle after the wallpaper asset has loaded
      * and rendered to the layout.
+     *
+     * @param offsetToFarLeft {@code true} if we want to offset the visible rectangle to far left of
+     *                                    the raw wallpaper; {@code false} otherwise.
      */
-    private void setDefaultWallpaperZoomAndScroll() {
+    private void setDefaultWallpaperZoomAndScroll(boolean offsetToFarLeft) {
         // Determine minimum zoom to fit maximum visible area of wallpaper on crop surface.
         int cropWidth = mWorkspaceSurface.getMeasuredWidth();
         int cropHeight = mWorkspaceSurface.getMeasuredHeight();
         Point crop = new Point(cropWidth, cropHeight);
         Rect visibleRawWallpaperRect =
                 WallpaperCropUtils.calculateVisibleRect(mRawWallpaperSize, crop);
+        if (offsetToFarLeft) {
+            visibleRawWallpaperRect.offsetTo(/* newLeft= */ 0, visibleRawWallpaperRect.top);
+        }
 
         final PointF centerPosition = WallpaperCropUtils.calculateDefaultCenter(requireContext(),
                 mRawWallpaperSize, visibleRawWallpaperRect);
diff --git a/src/com/android/wallpaper/picker/LivePreviewFragment.java b/src/com/android/wallpaper/picker/LivePreviewFragment.java
index 7af31ac..d207809 100644
--- a/src/com/android/wallpaper/picker/LivePreviewFragment.java
+++ b/src/com/android/wallpaper/picker/LivePreviewFragment.java
@@ -69,10 +69,12 @@
 import com.android.wallpaper.util.ScreenSizeCalculator;
 import com.android.wallpaper.util.SizeCalculator;
 import com.android.wallpaper.util.WallpaperConnection;
+import com.android.wallpaper.util.WallpaperSurfaceCallback;
 import com.android.wallpaper.widget.BottomActionBar;
 import com.android.wallpaper.widget.BottomActionBar.AccessibilityCallback;
 import com.android.wallpaper.widget.LiveTileOverlay;
 import com.android.wallpaper.widget.LockScreenPreviewer;
+import com.android.wallpaper.widget.WallpaperColorsLoader;
 import com.android.wallpaper.widget.WallpaperInfoView;
 
 import com.google.android.material.tabs.TabLayout;
@@ -115,9 +117,11 @@
     private ViewGroup mPreviewContainer;
     private TouchForwardingLayout mTouchForwardingLayout;
     private SurfaceView mWorkspaceSurface;
+    private SurfaceView mWallpaperSurface;
     private ViewGroup mLockPreviewContainer;
     private LockScreenPreviewer mLockScreenPreviewer;
     private WorkspaceSurfaceHolderCallback mWorkspaceSurfaceCallback;
+    private WallpaperSurfaceCallback mWallpaperSurfaceCallback;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -190,9 +194,13 @@
         mLockPreviewContainer = mPreviewContainer.findViewById(R.id.lock_screen_preview_container);
         mLockScreenPreviewer = new LockScreenPreviewer(getLifecycle(), activity,
                 mLockPreviewContainer);
+        mWallpaperSurface = mHomePreviewCard.findViewById(R.id.wallpaper_surface);
         mWorkspaceSurface = mHomePreviewCard.findViewById(R.id.workspace_surface);
+
         mWorkspaceSurfaceCallback = new WorkspaceSurfaceHolderCallback(
                 mWorkspaceSurface, getContext());
+        mWallpaperSurfaceCallback = new WallpaperSurfaceCallback(getContext(),
+                mHomePreview, mWallpaperSurface);
 
         TabLayout tabs = inflater.inflate(R.layout.full_preview_tabs,
                 view.findViewById(R.id.toolbar_tabs_container))
@@ -231,10 +239,15 @@
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
+        updateWallpaperSurface();
         setupCurrentWallpaperPreview();
         renderWorkspaceSurface();
     }
 
+    private void updateWallpaperSurface() {
+        mWallpaperSurface.getHolder().addCallback(mWallpaperSurfaceCallback);
+    }
+
     private void updateScreenPreview(boolean isHomeSelected) {
         mWorkspaceSurface.setVisibility(isHomeSelected ? View.VISIBLE : View.INVISIBLE);
         mLockPreviewContainer.setVisibility(isHomeSelected ? View.INVISIBLE : View.VISIBLE);
@@ -289,13 +302,19 @@
             mWallpaperConnection = null;
         }
         mWorkspaceSurfaceCallback.cleanUp();
+        mWorkspaceSurface.getHolder().removeCallback(mWorkspaceSurfaceCallback);
+        mWallpaperSurfaceCallback.cleanUp();
+        mWallpaperSurface.getHolder().removeCallback(mWallpaperSurfaceCallback);
     }
 
     private void previewLiveWallpaper(ImageView thumbnailView) {
         thumbnailView.post(() -> {
-            mWallpaper.getThumbAsset(requireActivity().getApplicationContext()).loadPreviewImage(
-                    requireActivity(), thumbnailView,
-                    getResources().getColor(R.color.secondary_color));
+            if (mWallpaperSurfaceCallback.getHomeImageWallpaper() != null) {
+                mWallpaper.getThumbAsset(requireActivity().getApplicationContext())
+                        .loadPreviewImage(requireActivity(),
+                                mWallpaperSurfaceCallback.getHomeImageWallpaper(),
+                                getResources().getColor(R.color.secondary_color));
+            }
             LiveTileOverlay.INSTANCE.detach(thumbnailView.getOverlay());
 
             setUpLiveWallpaperPreview(mWallpaper, thumbnailView,
@@ -317,18 +336,25 @@
             thumbnail.setBounds(previewView.getLeft(), previewView.getTop(), previewView.getRight(),
                     previewView.getBottom());
         }
-        repositionPreview(previewView);
 
-        mWallpaperConnection = new WallpaperConnection(
-                getWallpaperIntent(homeWallpaper.getWallpaperComponent()),
-                activity,
-                /* listener= */ this,
-                mPreviewGlobalRect);
+        if (WallpaperConnection.isPreviewAvailable()) {
+            repositionPreview(previewView);
+            mWallpaperConnection = new WallpaperConnection(
+                    getWallpaperIntent(homeWallpaper.getWallpaperComponent()),
+                    activity,
+                    /* listener= */ this,
+                    mPreviewGlobalRect);
 
-        LiveTileOverlay.INSTANCE.update(new RectF(mPreviewLocalRect),
-                ((CardView) previewView.getParent()).getRadius());
+            LiveTileOverlay.INSTANCE.update(new RectF(mPreviewLocalRect),
+                    ((CardView) previewView.getParent()).getRadius());
 
-        mWallpaperConnection.setVisibility(true);
+            mWallpaperConnection.setVisibility(true);
+        } else {
+            WallpaperColorsLoader.getWallpaperColors(
+                    activity,
+                    homeWallpaper.getThumbAsset(activity),
+                    mLockScreenPreviewer::setColor);
+        }
         mLoadingScrim.post(() -> mLoadingScrim.animate()
                 .alpha(0f)
                 .setStartDelay(50)
diff --git a/src/com/android/wallpaper/picker/PreviewFragment.java b/src/com/android/wallpaper/picker/PreviewFragment.java
index 8963d60..c5c95ec 100755
--- a/src/com/android/wallpaper/picker/PreviewFragment.java
+++ b/src/com/android/wallpaper/picker/PreviewFragment.java
@@ -313,7 +313,10 @@
     protected abstract void setCurrentWallpaper(@Destination int destination);
 
     protected void finishActivity(boolean success) {
-        Activity activity = requireActivity();
+        Activity activity = getActivity();
+        if (activity == null) {
+            return;
+        }
         if (success) {
             try {
                 Toast.makeText(activity,
diff --git a/src/com/android/wallpaper/picker/TopLevelPickerActivity.java b/src/com/android/wallpaper/picker/TopLevelPickerActivity.java
index 36e8bbf..40627b5 100755
--- a/src/com/android/wallpaper/picker/TopLevelPickerActivity.java
+++ b/src/com/android/wallpaper/picker/TopLevelPickerActivity.java
@@ -305,8 +305,6 @@
                     .add(R.id.fragment_container, newFragment)
                     .commit();
         }
-
-        mDelegate.initialize(shouldForceRefresh);
     }
 
     private void initializeDesktop(Bundle savedInstanceState) {
@@ -803,6 +801,11 @@
     }
 
     @Override
+    public void fetchCategories() {
+        mDelegate.initialize(!mDelegate.getCategoryProvider().isCategoriesFetched());
+    }
+
+    @Override
     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                            @NonNull int[] grantResults) {
         mDelegate.onRequestPermissionsResult(requestCode, permissions, grantResults);
diff --git a/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java b/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java
index 53617f5..260d121 100755
--- a/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java
+++ b/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java
@@ -44,6 +44,7 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.core.widget.ContentLoadingProgressBar;
 import androidx.fragment.app.DialogFragment;
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
@@ -77,6 +78,7 @@
 import com.android.wallpaper.picker.BaseActivity;
 import com.android.wallpaper.picker.BottomActionBarFragment;
 import com.android.wallpaper.picker.CurrentWallpaperBottomSheetPresenter;
+import com.android.wallpaper.picker.FragmentTransactionChecker;
 import com.android.wallpaper.picker.MyPhotosStarter.MyPhotosStarterProvider;
 import com.android.wallpaper.picker.PreviewActivity;
 import com.android.wallpaper.picker.RotationStarter;
@@ -169,6 +171,21 @@
         void onWallpaperSelected(int position);
     }
 
+    /**
+     * Interface to be implemented by a Fragment hosting a {@link IndividualPickerFragment}
+     */
+    public interface IndividualPickerFragmentHost {
+        /**
+         * Sets the title in the toolbar.
+         */
+        void setToolbarTitle(CharSequence title);
+
+        /**
+         * Moves to the previous fragment.
+         */
+        void moveToPreviousFragment();
+    }
+
     WallpaperPersister mWallpaperPersister;
     WallpaperPreferences mWallpaperPreferences;
     WallpaperChangedNotifier mWallpaperChangedNotifier;
@@ -185,6 +202,7 @@
 
     Handler mHandler;
     Random mRandom;
+    boolean mIsWallpapersReceived;
 
     WallpaperChangedNotifier.Listener mWallpaperChangedListener =
             new WallpaperChangedNotifier.Listener() {
@@ -218,6 +236,7 @@
     private boolean mTestingMode;
     private CurrentWallpaperBottomSheetPresenter mCurrentWallpaperBottomSheetPresenter;
     private SetIndividualHolder mPendingSetIndividualHolder;
+    private ContentLoadingProgressBar mLoading;
 
     /**
      * Staged error dialog fragments that were unable to be shown when the activity didn't allow
@@ -357,7 +376,9 @@
 
                     // The absence of this category in the CategoryProvider indicates a broken
                     // state, see b/38030129. Hence, finish the activity and return.
-                    getActivity().finish();
+                    getIndividualPickerFragmentHost().moveToPreviousFragment();
+                    Toast.makeText(getContext(), R.string.collection_not_exist_msg,
+                            Toast.LENGTH_SHORT).show();
                     return;
                 }
                 onCategoryLoaded();
@@ -365,7 +386,9 @@
         }, false);
     }
 
+
     protected void onCategoryLoaded() {
+        getIndividualPickerFragmentHost().setToolbarTitle(mCategory.getTitle());
         mWallpaperRotationInitializer = mCategory.getWallpaperRotationInitializer();
         // Avoids the "rotation" action is not shown correctly
         // in a rare case : onCategoryLoaded() is called after onBottomActionBarReady().
@@ -391,9 +414,13 @@
 
     void fetchWallpapers(boolean forceReload) {
         mWallpapers.clear();
+        mIsWallpapersReceived = false;
+        updateLoading();
         mCategory.fetchWallpapers(getActivity().getApplicationContext(), new WallpaperReceiver() {
             @Override
             public void onWallpapersReceived(List<WallpaperInfo> wallpapers) {
+                mIsWallpapersReceived = true;
+                updateLoading();
                 for (WallpaperInfo wallpaper : wallpapers) {
                     mWallpapers.add(wallpaper);
                 }
@@ -421,6 +448,18 @@
         }, forceReload);
     }
 
+    void updateLoading() {
+        if (mLoading == null) {
+            return;
+        }
+
+        if (mIsWallpapersReceived) {
+            mLoading.hide();
+        } else {
+            mLoading.show();
+        }
+    }
+
     @Override
     public void onSaveInstanceState(@NonNull Bundle outState) {
         super.onSaveInstanceState(outState);
@@ -446,6 +485,8 @@
         mImageGrid.setAccessibilityDelegateCompat(
                 new WallpaperPickerRecyclerViewAccessibilityDelegate(
                         mImageGrid, (BottomSheetHost) getParentFragment(), getNumColumns()));
+        mLoading = view.findViewById(R.id.loading_indicator);
+        updateLoading();
         maybeSetUpImageGrid();
         setUpBottomSheet();
         return view;
@@ -468,6 +509,10 @@
                 gridPaddingPx, gridPaddingPx, 0, paddingBottomPx);
     }
 
+    private IndividualPickerFragmentHost getIndividualPickerFragmentHost() {
+        return (IndividualPickerFragmentHost) getParentFragment();
+    }
+
     private void maybeSetUpImageGrid() {
         // Skip if mImageGrid been initialized yet
         if (mImageGrid == null) {
@@ -772,7 +817,7 @@
     }
 
     private void showStartRotationErrorDialog(@NetworkPreference int networkPreference) {
-        BaseActivity activity = (BaseActivity) getActivity();
+        FragmentTransactionChecker activity = (FragmentTransactionChecker) getActivity();
         if (activity != null) {
             StartRotationErrorDialogFragment startRotationErrorDialogFragment =
                     StartRotationErrorDialogFragment.newInstance(networkPreference);
diff --git a/src/com/android/wallpaper/util/DeepLinkUtils.java b/src/com/android/wallpaper/util/DeepLinkUtils.java
new file mode 100644
index 0000000..604b64a
--- /dev/null
+++ b/src/com/android/wallpaper/util/DeepLinkUtils.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.wallpaper.util;
+
+import android.content.Intent;
+import android.net.Uri;
+
+/** Util class for deep link. */
+public class DeepLinkUtils {
+    private static final String KEY_COLLECTION_ID = "collection_id";
+    private static final String SCHEME = "https";
+    private static final String SCHEME_SPECIFIC_PART_PREFIX = "//g.co/wallpaper";
+
+    /**
+     * Checks if it is the deep link case.
+     */
+    public static boolean isDeepLink(Intent intent) {
+        Uri data = intent.getData();
+        return data != null && SCHEME.equals(data.getScheme())
+                && data.getSchemeSpecificPart().startsWith(SCHEME_SPECIFIC_PART_PREFIX);
+    }
+
+    /**
+     * Gets the wallpaper collection which wants to deep link to.
+     *
+     * @return the wallpaper collection id
+     */
+    public static String getCollectionId(Intent intent) {
+        return isDeepLink(intent) ? intent.getData().getQueryParameter(KEY_COLLECTION_ID) : null;
+    }
+}
diff --git a/src/com/android/wallpaper/util/WallpaperConnection.java b/src/com/android/wallpaper/util/WallpaperConnection.java
index 1b5bdae..27b02ee 100644
--- a/src/com/android/wallpaper/util/WallpaperConnection.java
+++ b/src/com/android/wallpaper/util/WallpaperConnection.java
@@ -42,6 +42,13 @@
  */
 public class WallpaperConnection extends IWallpaperConnection.Stub implements ServiceConnection {
 
+    /**
+     * Returns whether live preview is available in framework.
+     */
+    public static boolean isPreviewAvailable() {
+        return WallpaperEngineCompat.supportsScalePreview();
+    }
+
     private static final String TAG = "WallpaperConnection";
     private final Activity mActivity;
     private final Intent mIntent;
diff --git a/src/com/android/wallpaper/util/WallpaperSurfaceCallback.java b/src/com/android/wallpaper/util/WallpaperSurfaceCallback.java
new file mode 100644
index 0000000..64f13bd
--- /dev/null
+++ b/src/com/android/wallpaper/util/WallpaperSurfaceCallback.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.wallpaper.util;
+
+import static android.view.View.MeasureSpec.EXACTLY;
+import static android.view.View.MeasureSpec.makeMeasureSpec;
+
+import android.content.Context;
+import android.view.Surface;
+import android.view.SurfaceControlViewHost;
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
+import android.widget.ImageView;
+
+import androidx.annotation.Nullable;
+import androidx.core.content.ContextCompat;
+
+import com.android.wallpaper.R;
+
+/**
+ * Default implementation of {@link SurfaceHolder.Callback} to render a static wallpaper when the
+ * surface has been created.
+ */
+public class WallpaperSurfaceCallback implements SurfaceHolder.Callback {
+
+    /**
+     * Listener used to be notified when this surface is created
+     */
+    public interface SurfaceListener {
+        /**
+         * Called when {@link WallpaperSurfaceCallback#surfaceCreated(SurfaceHolder)} is called.
+         */
+        void onSurfaceCreated();
+    }
+
+    private Surface mLastSurface;
+    private SurfaceControlViewHost mHost;
+    // Home workspace surface is behind the app window, and so must the home image wallpaper like
+    // the live wallpaper. This view is rendered on here for home image wallpaper.
+    private ImageView mHomeImageWallpaper;
+    private final Context mContext;
+    private final ImageView mHomePreview;
+    private final SurfaceView mWallpaperSurface;
+    @Nullable
+    private final SurfaceListener mListener;
+
+    public WallpaperSurfaceCallback(Context context, ImageView homePreview,
+            SurfaceView wallpaperSurface, @Nullable  SurfaceListener listener) {
+        mContext = context;
+        mHomePreview = homePreview;
+        mWallpaperSurface = wallpaperSurface;
+        mListener = listener;
+    }
+
+    public WallpaperSurfaceCallback(Context context, ImageView homePreview,
+            SurfaceView wallpaperSurface) {
+        this(context, homePreview, wallpaperSurface, null);
+    }
+
+    @Override
+    public void surfaceCreated(SurfaceHolder holder) {
+        if (mLastSurface != holder.getSurface()) {
+            mLastSurface = holder.getSurface();
+            mHomeImageWallpaper = new ImageView(mContext);
+            mHomeImageWallpaper.setBackgroundColor(
+                    ContextCompat.getColor(mContext, R.color.primary_color));
+            mHomeImageWallpaper.measure(makeMeasureSpec(mHomePreview.getWidth(), EXACTLY),
+                    makeMeasureSpec(mHomePreview.getHeight(), EXACTLY));
+            mHomeImageWallpaper.layout(0, 0, mHomePreview.getWidth(),
+                    mHomePreview.getHeight());
+
+            cleanUp();
+            mHost = new SurfaceControlViewHost(mContext,
+                    mContext.getDisplay(), mWallpaperSurface.getHostToken());
+            mHost.setView(mHomeImageWallpaper, mHomeImageWallpaper.getWidth(),
+                    mHomeImageWallpaper.getHeight());
+            mWallpaperSurface.setChildSurfacePackage(mHost.getSurfacePackage());
+        }
+        if (mListener != null) {
+            mListener.onSurfaceCreated();
+        }
+    }
+
+    @Override
+    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { }
+
+    @Override
+    public void surfaceDestroyed(SurfaceHolder holder) { }
+
+    /**
+     * Call to release resources.
+     */
+    public void cleanUp() {
+        if (mHost != null) {
+            mHost.release();
+            mHost = null;
+        }
+    }
+
+    @Nullable
+    public ImageView getHomeImageWallpaper() {
+        return mHomeImageWallpaper;
+    }
+}
diff --git a/src_override/com/android/wallpaper/module/WallpapersInjector.java b/src_override/com/android/wallpaper/module/WallpapersInjector.java
index 124dfc4..fa846a9 100755
--- a/src_override/com/android/wallpaper/module/WallpapersInjector.java
+++ b/src_override/com/android/wallpaper/module/WallpapersInjector.java
@@ -16,6 +16,8 @@
 package com.android.wallpaper.module;
 
 import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
 
 import androidx.fragment.app.Fragment;
 
@@ -23,6 +25,7 @@
 import com.android.wallpaper.model.WallpaperInfo;
 import com.android.wallpaper.monitor.PerformanceMonitor;
 import com.android.wallpaper.picker.ImagePreviewFragment;
+import com.android.wallpaper.picker.TopLevelPickerActivity;
 
 /**
  * A concrete, real implementation of the dependency provider.
@@ -75,6 +78,15 @@
     }
 
     @Override
+    public Intent getDeepLinkRedirectIntent(Context context, Uri uri) {
+        Intent intent = new Intent();
+        intent.setClass(context, TopLevelPickerActivity.class);
+        intent.setData(uri);
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+        return intent;
+    }
+
+    @Override
     public synchronized PerformanceMonitor getPerformanceMonitor() {
         if (mPerformanceMonitor == null) {
             mPerformanceMonitor = new PerformanceMonitor() {
diff --git a/tests/src/com/android/wallpaper/testing/TestCategoryProvider.java b/tests/src/com/android/wallpaper/testing/TestCategoryProvider.java
index 310840c..c7d7c95 100644
--- a/tests/src/com/android/wallpaper/testing/TestCategoryProvider.java
+++ b/tests/src/com/android/wallpaper/testing/TestCategoryProvider.java
@@ -87,6 +87,11 @@
         return null;
     }
 
+    @Override
+    public boolean isCategoriesFetched() {
+        return false;
+    }
+
     /** Returns a list of test Category objects used by this TestCategoryProvider. */
     public List<Category> getTestCategories() {
         return mCategories;
diff --git a/tests/src/com/android/wallpaper/testing/TestInjector.java b/tests/src/com/android/wallpaper/testing/TestInjector.java
index 8dffdca..9b7927f 100644
--- a/tests/src/com/android/wallpaper/testing/TestInjector.java
+++ b/tests/src/com/android/wallpaper/testing/TestInjector.java
@@ -16,6 +16,8 @@
 package com.android.wallpaper.testing;
 
 import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
 
 import androidx.fragment.app.Fragment;
 
@@ -236,6 +238,11 @@
     }
 
     @Override
+    public Intent getDeepLinkRedirectIntent(Context context, Uri uri) {
+        return null;
+    }
+
+    @Override
     public PerformanceMonitor getPerformanceMonitor() {
         if (mPerformanceMonitor == null) {
             mPerformanceMonitor = new TestPerformanceMonitor();