Merge ab/6749736 in stage.

Bug: 167233921
Merged-In: I02e0a07805d23b955069fad93b61b4476e5e364e
Change-Id: I4bf7c621ed032b045b5b3fb19e7b01024639a24f
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index cdd1c59..d0b03a1 100755
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -19,6 +19,15 @@
   <uses-permission
       android:name="com.android.wallpaper.NOTIFY_ROTATING_WALLPAPER_CHANGED" />
 
+  <queries>
+    <intent>
+      <action android:name="com.android.launcher3.action.PARTNER_CUSTOMIZATION"/>
+    </intent>
+    <intent>
+      <action android:name="android.service.wallpaper.WallpaperService"/>
+    </intent>
+  </queries>
+
   <application
       tools:replace="android:icon,android:name"
       android:allowBackup="true"
diff --git a/res/color/bottom_action_button_color_tint.xml b/res/color/bottom_action_button_color_tint.xml
new file mode 100644
index 0000000..26f91df
--- /dev/null
+++ b/res/color/bottom_action_button_color_tint.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2019 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:state_selected="false"
+        android:color="@color/bottom_bar_icon_unchecked_color" />
+    <item
+        android:state_selected="true"
+        android:color="?android:colorAccent" />
+</selector>
\ No newline at end of file
diff --git a/res/drawable-hdpi/check_circle_blue.png b/res/drawable-hdpi/check_circle_blue.png
deleted file mode 100755
index 3a47764..0000000
--- a/res/drawable-hdpi/check_circle_blue.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/check_circle_blue.png b/res/drawable-mdpi/check_circle_blue.png
deleted file mode 100755
index 2a841c8..0000000
--- a/res/drawable-mdpi/check_circle_blue.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/check_circle_blue.png b/res/drawable-xhdpi/check_circle_blue.png
deleted file mode 100755
index bc21e8f..0000000
--- a/res/drawable-xhdpi/check_circle_blue.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/check_circle_blue.png b/res/drawable-xxhdpi/check_circle_blue.png
deleted file mode 100755
index a0c8f66..0000000
--- a/res/drawable-xxhdpi/check_circle_blue.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/check_circle_blue.png b/res/drawable-xxxhdpi/check_circle_blue.png
deleted file mode 100755
index 2ec729c..0000000
--- a/res/drawable-xxxhdpi/check_circle_blue.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/bottom_sheet_background.xml b/res/drawable/bottom_sheet_background.xml
index 38214fb..7a09584 100644
--- a/res/drawable/bottom_sheet_background.xml
+++ b/res/drawable/bottom_sheet_background.xml
@@ -17,7 +17,7 @@
 -->
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
         android:shape="rectangle">
-    <solid android:color="?android:colorPrimary"/>
+    <solid android:color="@color/bottom_bar_background_color"/>
     <corners
         android:bottomLeftRadius="0dp"
         android:bottomRightRadius="0dp"
diff --git a/res/drawable/btn_transparent_background.xml b/res/drawable/btn_transparent_background.xml
index 9eb3bfc..7ddff6b 100644
--- a/res/drawable/btn_transparent_background.xml
+++ b/res/drawable/btn_transparent_background.xml
@@ -15,12 +15,13 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
-    <item>
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+    android:color="?android:colorControlHighlight">
+
+    <item android:id="@android:id/mask">
         <shape android:shape="rectangle">
-            <stroke android:width="1dp" android:color="@android:color/white"/>
+            <solid android:color="@android:color/white"/>
             <corners android:radius="?android:attr/buttonCornerRadius"/>
         </shape>
     </item>
-    <item android:drawable="?selectableItemBackground"/>
-</layer-list>
\ No newline at end of file
+</ripple>
diff --git a/res/drawable/check_circle_accent_24dp.xml b/res/drawable/check_circle_accent_24dp.xml
new file mode 100644
index 0000000..01723d9
--- /dev/null
+++ b/res/drawable/check_circle_accent_24dp.xml
@@ -0,0 +1,24 @@
+<!--
+     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.
+-->
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <shape android:shape="oval">
+            <size android:width="24dp" android:height="24dp" />
+            <solid android:color="?android:colorAccent" />
+        </shape>
+    </item>
+    <item android:drawable="@drawable/ic_check_24dp" android:gravity="fill" />
+</layer-list>
diff --git a/res/drawable/ic_check_24dp.xml b/res/drawable/ic_check_24dp.xml
new file mode 100644
index 0000000..826d34a
--- /dev/null
+++ b/res/drawable/ic_check_24dp.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+  <path
+      android:fillColor="@color/selected_check_color"
+      android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41L9,16.17z"/>
+</vector>
diff --git a/res/drawable/ic_delete_24px.xml b/res/drawable/ic_delete_24px.xml
index bc83f36..f82e18d 100644
--- a/res/drawable/ic_delete_24px.xml
+++ b/res/drawable/ic_delete_24px.xml
@@ -19,12 +19,12 @@
     android:viewportWidth="24"
     android:viewportHeight="24">
   <path
-      android:fillColor="@android:color/white"
+      android:fillColor="#FF000000"
       android:pathData="M15,4V3H9v1H4v2h1v13c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2V6h1V4H15zM17,19H7V6h10V19z"/>
   <path
-      android:fillColor="@android:color/white"
+      android:fillColor="#FF000000"
       android:pathData="M9,8h2v9h-2z"/>
   <path
-      android:fillColor="@android:color/white"
+      android:fillColor="#FF000000"
       android:pathData="M13,8h2v9h-2z"/>
 </vector>
diff --git a/res/drawable/option_border.xml b/res/drawable/option_border.xml
index 6ce76c7..ff03ed0 100644
--- a/res/drawable/option_border.xml
+++ b/res/drawable/option_border.xml
@@ -18,7 +18,7 @@
     <item android:id="@android:id/mask">
         <shape android:shape="rectangle">
             <solid android:color="@android:color/white"/>
-            <corners android:radius="4dp" />
+            <corners android:radius="?android:dialogCornerRadius" />
         </shape>
     </item>
     <item android:drawable="@drawable/option_border_edge" />
diff --git a/res/drawable/option_border_edge.xml b/res/drawable/option_border_edge.xml
index 943920e..6d633c3 100644
--- a/res/drawable/option_border_edge.xml
+++ b/res/drawable/option_border_edge.xml
@@ -20,7 +20,7 @@
             <stroke
                 android:color="@color/option_border_color"
                 android:width="@dimen/option_selected_border_width" />
-            <corners android:radius="4dp" />
+            <corners android:radius="?android:dialogCornerRadius" />
         </shape>
     </item>
     <item android:state_activated="false">
@@ -28,7 +28,7 @@
             <stroke
                 android:color="@color/option_border_color"
                 android:width="@dimen/option_border_width" />
-            <corners android:radius="4dp" />
+            <corners android:radius="?android:dialogCornerRadius" />
         </shape>
     </item>
 </selector>
diff --git a/res/drawable/wallpaper_option_border.xml b/res/drawable/wallpaper_option_border.xml
new file mode 100644
index 0000000..0e0db00
--- /dev/null
+++ b/res/drawable/wallpaper_option_border.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+     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.
+-->
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+    android:color="?android:attr/colorControlHighlight">
+    <item android:id="@android:id/mask">
+        <shape android:shape="rectangle">
+            <solid android:color="@android:color/white"/>
+            <corners android:radius="?android:dialogCornerRadius" />
+        </shape>
+    </item>
+    <item android:drawable="@drawable/wallpaper_option_border_edge" />
+</ripple>
diff --git a/res/drawable/wallpaper_option_border_edge.xml b/res/drawable/wallpaper_option_border_edge.xml
new file mode 100644
index 0000000..d6e6ab3
--- /dev/null
+++ b/res/drawable/wallpaper_option_border_edge.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_activated="true">
+        <shape android:shape="rectangle">
+            <stroke
+                android:color="@color/option_border_color"
+                android:width="@dimen/option_selected_border_width" />
+            <corners android:radius="?android:dialogCornerRadius" />
+        </shape>
+    </item>
+</selector>
diff --git a/res/layout/activity_individual_picker.xml b/res/layout/activity_individual_picker.xml
index f476c7c..c79b06d 100755
--- a/res/layout/activity_individual_picker.xml
+++ b/res/layout/activity_individual_picker.xml
@@ -14,9 +14,9 @@
      limitations under the License.
 -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent"
-              android:orientation="vertical">
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
 
     <com.google.android.material.appbar.AppBarLayout
         android:layout_width="match_parent"
@@ -32,11 +32,16 @@
     </com.google.android.material.appbar.AppBarLayout>
 
     <FrameLayout
-        android:id="@+id/fragment_container"
         android:layout_width="match_parent"
         android:layout_height="0dp"
-        android:layout_weight="1"/>
+        android:layout_weight="1">
 
-    <include layout="@layout/bottom_action_bar" />
+        <FrameLayout
+            android:id="@+id/fragment_container"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_marginBottom="@dimen/bottom_navbar_height"/>
 
+        <include layout="@layout/bottom_action_bar" />
+    </FrameLayout>
 </LinearLayout>
diff --git a/res/layout/activity_top_level_picker.xml b/res/layout/activity_top_level_picker.xml
index 21ced7f..101cee1 100755
--- a/res/layout/activity_top_level_picker.xml
+++ b/res/layout/activity_top_level_picker.xml
@@ -13,16 +13,15 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:orientation="vertical">
+    android:background="?android:colorPrimary">
 
     <FrameLayout
         android:id="@+id/fragment_container"
         android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1" />
+        android:layout_height="match_parent" />
 
     <include layout="@layout/bottom_action_bar" />
-</LinearLayout>
+</FrameLayout>
diff --git a/res/layout/bottom_action_bar_preview_info.xml b/res/layout/bottom_action_bar_preview_info.xml
deleted file mode 100644
index 6baf5fb..0000000
--- a/res/layout/bottom_action_bar_preview_info.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-
-     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.
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/page_info"
-    android:layout_height="wrap_content"
-    android:layout_width="match_parent"
-    android:orientation="vertical"
-    android:paddingHorizontal="@dimen/preview_attribution_pane_horizontal_padding"
-    android:paddingVertical="@dimen/bottom_action_bar_padding_vertical"
-    android:theme="@style/WallpaperPicker.BottomPaneStyle">
-
-  <TextView
-      android:id="@+id/preview_attribution_pane_title"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:minHeight="@dimen/preview_attribution_pane_title_height"
-      android:ellipsize="end"
-      android:gravity="center"
-      android:lineHeight="24dp"
-      android:singleLine="true"
-      android:textAppearance="@style/TitleTextAppearance"
-      android:textColor="@color/action_bar_bottom_sheet_text_color"/>
-
-  <TextView
-      android:id="@+id/preview_attribution_pane_subtitle1"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:gravity="center"
-      android:layout_marginTop="@dimen/preview_attribution_pane_inner_spacer_height"
-      android:textAppearance="@style/SubtitleTextAppearance"
-      android:textColor="@color/action_bar_bottom_sheet_text_color"
-      android:lineHeight="16dp"
-      android:visibility="gone"/>
-
-  <TextView
-      android:id="@+id/preview_attribution_pane_subtitle2"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:gravity="center_horizontal"
-      android:textAppearance="@android:style/TextAppearance.DeviceDefault.Small"
-      android:textSize="14dp"
-      android:lineHeight="16dp"
-      android:textColor="@color/action_bar_bottom_sheet_text_color"
-      android:visibility="gone"/>
-</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/bottom_actions_layout.xml b/res/layout/bottom_actions_layout.xml
index 14bea38..58ba195 100644
--- a/res/layout/bottom_actions_layout.xml
+++ b/res/layout/bottom_actions_layout.xml
@@ -13,17 +13,19 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<LinearLayout
+<RelativeLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:orientation="vertical">
+    android:clipChildren="false">
 
     <!--  Bottom Sheet  -->
     <androidx.coordinatorlayout.widget.CoordinatorLayout
         android:layout_width="match_parent"
-        android:layout_height="wrap_content">
+        android:layout_height="wrap_content"
+        android:layout_above="@id/action_tabs"
+        android:elevation="@dimen/bottom_action_bar_elevation">
         <!-- Bottom sheet view should be a child view of CoordinatorLayout -->
         <FrameLayout
             android:id="@+id/action_bottom_sheet"
@@ -31,36 +33,63 @@
             android:layout_height="wrap_content"
             android:background="@drawable/bottom_sheet_background"
             android:theme="@style/WallpaperPicker.BottomPaneStyle"
+            android:clickable="true"
+            android:elevation="@dimen/bottom_action_bar_elevation"
             app:behavior_peekHeight="@dimen/preview_attribution_pane_collapsed_height"
-            app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
-            <include layout="@layout/bottom_action_bar_preview_info"/>
-        </FrameLayout>
+            app:layout_behavior="com.android.wallpaper.widget.BottomActionBar$QueueStateBottomSheetBehavior" />
     </androidx.coordinatorlayout.widget.CoordinatorLayout>
 
     <!--  Bottom Tabs  -->
     <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/action_tabs"
         android:layout_width="match_parent"
         android:layout_height="@dimen/bottom_navbar_height"
         android:paddingHorizontal="@dimen/bottom_action_bar_padding_horizontal"
         android:clickable="true"
-        android:background="?android:colorPrimary"
-        android:theme="@style/BottomActionItemStyle">
+        android:elevation="@dimen/bottom_action_bar_elevation"
+        android:background="@color/bottom_bar_background_color"
+        android:theme="@style/BottomActionItemStyle"
+        android:layout_alignParentBottom="true"
+        android:layoutDirection="locale">
 
         <ImageView
             android:id="@+id/action_cancel"
             android:layout_width="wrap_content"
             android:layout_height="match_parent"
             android:src="@drawable/ic_close_gm2_24px"
+            android:background="?android:attr/selectableItemBackgroundBorderless"
+            android:contentDescription="@string/bottom_action_bar_back"
+            android:tint="@color/bottom_action_button_color_tint"
+            app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintEnd_toStartOf="@id/action_rotation"
             app:layout_constraintHorizontal_chainStyle="spread_inside"
             app:layout_constraintStart_toStartOf="parent" />
 
         <ImageView
             android:id="@+id/action_rotation"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:src="@drawable/ic_rotation_gm2_24px"
+            android:layout_width="@dimen/bottom_action_button_size"
+            android:layout_height="@dimen/bottom_action_button_size"
+            android:padding="@dimen/bottom_action_button_padding"
+            android:src="@drawable/ic_slideshow_24dp"
+            android:background="?android:attr/selectableItemBackgroundBorderless"
+            android:contentDescription="@string/bottom_action_bar_slideshow_wallpaper"
+            android:tint="@color/bottom_action_button_color_tint"
             android:visibility="gone"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintEnd_toStartOf="@id/action_delete"
+            app:layout_constraintStart_toEndOf="@id/action_back" />
+
+        <ImageView
+            android:id="@+id/action_delete"
+            android:layout_width="@dimen/bottom_action_button_size"
+            android:layout_height="@dimen/bottom_action_button_size"
+            android:padding="@dimen/bottom_action_button_padding"
+            android:src="@drawable/ic_delete_24px"
+            android:background="?android:attr/selectableItemBackgroundBorderless"
+            android:contentDescription="@string/delete_live_wallpaper"
+            android:tint="@color/bottom_action_button_color_tint"
+            android:visibility="gone"
+            app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintEnd_toStartOf="@id/action_information"
             app:layout_constraintStart_toEndOf="@id/action_cancel" />
 
@@ -69,16 +98,62 @@
             android:layout_width="wrap_content"
             android:layout_height="match_parent"
             android:src="@drawable/ic_info_gm2_24px"
+            android:background="?android:attr/selectableItemBackgroundBorderless"
+            android:contentDescription="@string/tab_info"
+            android:tint="@color/bottom_action_button_color_tint"
             android:visibility="gone"
             app:layout_constraintEnd_toStartOf="@id/action_edit"
             app:layout_constraintStart_toEndOf="@id/action_rotation" />
 
         <ImageView
             android:id="@+id/action_edit"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:src="@drawable/ic_mode_edit_gm2_24px"
+            android:layout_width="@dimen/bottom_action_button_size"
+            android:layout_height="@dimen/bottom_action_button_size"
+            android:padding="@dimen/bottom_action_button_padding"
+            android:src="@drawable/ic_pan_zoom_24dp"
+            android:background="?android:attr/selectableItemBackgroundBorderless"
+            android:contentDescription="@string/bottom_action_bar_edit"
+            android:tint="@color/bottom_action_button_color_tint"
             android:visibility="gone"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintEnd_toStartOf="@id/action_customize"
+            app:layout_constraintStart_toEndOf="@id/action_information" />
+
+        <ImageView
+            android:id="@+id/action_customize"
+            android:layout_width="@dimen/bottom_action_button_size"
+            android:layout_height="@dimen/bottom_action_button_size"
+            android:padding="@dimen/bottom_action_button_padding"
+            android:src="@drawable/ic_tune_black_24dp"
+            android:background="?android:attr/selectableItemBackgroundBorderless"
+            android:contentDescription="@string/tab_customize"
+            android:tint="@color/bottom_action_button_color_tint"
+            android:visibility="gone"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintEnd_toStartOf="@id/action_download"
+            app:layout_constraintStart_toEndOf="@id/action_edit" />
+
+        <ImageView
+            android:id="@+id/action_download"
+            android:layout_width="@dimen/bottom_action_button_size"
+            android:layout_height="@dimen/bottom_action_button_size"
+            android:padding="@dimen/bottom_action_button_padding"
+            android:src="@drawable/ic_file_download_gm2_24px"
+            android:background="?android:attr/selectableItemBackgroundBorderless"
+            android:contentDescription="@string/bottom_action_bar_download"
+            android:tint="@color/bottom_action_button_color_tint"
+            android:visibility="gone"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintEnd_toStartOf="@id/action_progress"
+            app:layout_constraintStart_toEndOf="@id/action_customize" />
+
+        <ProgressBar
+            android:id="@+id/action_progress"
+            android:layout_width="@dimen/bottom_action_button_size"
+            android:layout_height="@dimen/bottom_action_button_size"
+            android:padding="@dimen/bottom_action_button_padding"
+            android:visibility="gone"
+            app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintEnd_toStartOf="@id/action_apply"
             app:layout_constraintStart_toEndOf="@id/action_information" />
 
@@ -87,9 +162,12 @@
             android:layout_width="wrap_content"
             android:layout_height="match_parent"
             android:src="@drawable/ic_done_gm2_24px"
+            android:background="?android:attr/selectableItemBackgroundBorderless"
+            android:contentDescription="@string/bottom_action_bar_apply"
+            android:tint="@color/bottom_action_button_color_tint"
             android:visibility="gone"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toEndOf="@id/action_edit" />
 
     </androidx.constraintlayout.widget.ConstraintLayout>
-</LinearLayout>
+</RelativeLayout>
diff --git a/res/layout/fragment_category_picker.xml b/res/layout/fragment_category_picker.xml
index 83f6d1d..8da7e2f 100755
--- a/res/layout/fragment_category_picker.xml
+++ b/res/layout/fragment_category_picker.xml
@@ -22,32 +22,53 @@
 
     <include layout="@layout/section_header" />
 
-    <androidx.coordinatorlayout.widget.CoordinatorLayout
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/content_section"
         android:layout_width="match_parent"
         android:layout_height="0dp"
-        android:layout_weight="1"
-        android:background="?android:colorPrimary">
+        android:layout_weight="1">
 
         <com.android.wallpaper.widget.PreviewPager
             android:id="@+id/wallpaper_preview_pager"
             android:layout_width="match_parent"
-            android:layout_height="@dimen/preview_pager_height"
+            android:layout_height="0dp"
             android:background="@color/preview_pager_background"
-            app:card_style="screen_aspect_ratio" />
+            app:card_style="screen_aspect_ratio"
+            app:layout_constrainedHeight="true"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintHeight_max="@dimen/preview_pager_max_height"
+            app:layout_constraintHeight_percent="@dimen/preview_pager_maximum_height_ratio"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
 
         <include
             android:id="@+id/permission_needed"
             layout="@layout/grid_item_permission_needed"
             android:layout_width="match_parent"
-            android:layout_height="@dimen/preview_pager_height"
-            android:visibility="gone" />
+            android:layout_height="0dp"
+            android:visibility="gone"
+            app:layout_constrainedHeight="true"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintHeight_max="@dimen/preview_pager_max_height"
+            app:layout_constraintHeight_percent="@dimen/preview_pager_maximum_height_ratio"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
 
-        <FrameLayout
-            android:id="@+id/category_fragment_container"
+        <androidx.coordinatorlayout.widget.CoordinatorLayout
+            android:id="@+id/root_container"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:background="?android:colorPrimary"
-            app:layout_behavior="@string/bottom_sheet_behavior" />
+            android:background="@android:color/transparent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent">
 
-    </androidx.coordinatorlayout.widget.CoordinatorLayout>
+            <FrameLayout
+                android:id="@+id/category_fragment_container"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:background="?android:colorPrimary"
+                app:layout_behavior="@string/bottom_sheet_behavior" />
+        </androidx.coordinatorlayout.widget.CoordinatorLayout>
+    </androidx.constraintlayout.widget.ConstraintLayout>
 </LinearLayout>
diff --git a/res/layout/fragment_category_scalable_picker.xml b/res/layout/fragment_category_scalable_picker.xml
deleted file mode 100644
index 8ec9b5e..0000000
--- a/res/layout/fragment_category_scalable_picker.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><!--
-     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.
--->
-<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="?android:colorPrimary">
-
-    <include layout="@layout/section_header" />
-
-    <FrameLayout
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        app:layout_behavior="@string/scalable_container_behavior">
-
-        <com.android.wallpaper.widget.PreviewPager
-            android:id="@+id/wallpaper_preview_pager"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:background="@color/preview_pager_background" />
-
-        <include
-            android:id="@+id/permission_needed"
-            layout="@layout/grid_item_permission_needed"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:visibility="gone" />
-
-    </FrameLayout>
-
-    <FrameLayout
-        android:id="@+id/scalable_content_container"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/content_container_maximum_height"
-        app:behavior_peekHeight="@dimen/content_container_minimum_height"
-        app:layout_behavior="@string/bottom_sheet_behavior">
-
-        <androidx.recyclerview.widget.RecyclerView
-            android:id="@+id/category_grid"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:paddingHorizontal="@dimen/grid_edge_space"
-            android:paddingTop="@dimen/grid_padding"
-            android:scrollbarSize="@dimen/grid_padding"
-            android:scrollbarStyle="outsideOverlay"
-            android:scrollbarThumbVertical="@color/scrollbar_thumb_color_dark"
-            android:scrollbars="vertical" />
-
-    </FrameLayout>
-</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/res/layout/fragment_category_selector.xml b/res/layout/fragment_category_selector.xml
index 6f74eb4..4fed92f 100644
--- a/res/layout/fragment_category_selector.xml
+++ b/res/layout/fragment_category_selector.xml
@@ -17,9 +17,10 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/category_grid"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
+    android:layout_height="match_parent"
     android:clipToPadding="false"
-    android:fitsSystemWindows="true"
+    android:paddingTop="@dimen/category_grid_padding_top"
+    android:paddingBottom="@dimen/category_grid_padding_bottom"
     android:paddingHorizontal="@dimen/grid_edge_space"
     android:scrollbarSize="@dimen/grid_padding"
     android:scrollbarStyle="outsideOverlay"
diff --git a/res/layout/fragment_image_preview.xml b/res/layout/fragment_image_preview.xml
deleted file mode 100755
index a7273fb..0000000
--- a/res/layout/fragment_image_preview.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2019 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-             xmlns:app="http://schemas.android.com/apk/res-auto"
-             android:layout_width="match_parent"
-             android:layout_height="match_parent"
-             android:fitsSystemWindows="false">
-
-  <ImageView
-    android:id="@+id/low_res_image"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:scaleType="centerCrop"
-    android:background="@android:color/black"/>
-
-  <com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
-      android:id="@+id/full_res_image"
-      android:layout_width="match_parent"
-      android:layout_height="match_parent" />
-
-  <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_gravity="center"
-      android:indeterminate="true"/>
-
-  <FrameLayout
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true">
-
-      <androidx.coordinatorlayout.widget.CoordinatorLayout
-          android:id="@+id/coordinator_layout"
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          android:layout_gravity="bottom">
-
-        <FrameLayout
-            android:id="@+id/bottom_sheet"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:background="@drawable/preview_bottom_sheet_background"
-            android:theme="@style/WallpaperPicker.BottomPaneStyle"
-            app:behavior_peekHeight="@dimen/preview_attribution_pane_collapsed_height"
-            app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
-          <include
-              layout="@layout/preview_page_info"
-              android:layout_width="match_parent"
-              android:layout_height="wrap_content"/>
-        </FrameLayout>
-
-    </androidx.coordinatorlayout.widget.CoordinatorLayout>
-
-    <View
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/preview_gradient_background_height"
-        android:layout_gravity="top"
-        android:background="@drawable/gradient_background"/>
-    <androidx.appcompat.widget.Toolbar
-        android:id="@+id/toolbar"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="top"
-        style="@style/TranslucentToolbarStyle"/>
-
-  </FrameLayout>
-
-</FrameLayout>
diff --git a/res/layout/fragment_image_preview_v2.xml b/res/layout/fragment_image_preview_v2.xml
new file mode 100644
index 0000000..7f6b81c
--- /dev/null
+++ b/res/layout/fragment_image_preview_v2.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="?android:colorPrimary">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_marginBottom="@dimen/bottom_navbar_height"
+        android:orientation="vertical">
+
+        <include layout="@layout/section_header" />
+
+        <FrameLayout
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="1"
+            android:orientation="vertical">
+
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent">
+
+                <ImageView
+                    android:id="@+id/low_res_image"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:scaleType="centerCrop"
+                    android:background="@android:color/black" />
+
+                <com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
+                    android:id="@+id/full_res_image"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent" />
+
+                <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_gravity="center"
+                    android:indeterminate="true"/>
+            </FrameLayout>
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:id="@+id/container"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:paddingVertical="@dimen/full_preview_page_default_padding_top"
+                android:clipChildren="false"
+                android:clipToPadding="false"
+                android:background="@color/fullscreen_preview_background">
+
+                <com.android.wallpaper.picker.TouchForwardingLayout
+                    android:id="@+id/touch_forwarding_layout"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="parent"
+                    app:layout_constraintBottom_toBottomOf="parent">
+                    <include layout="@layout/wallpaper_preview_card" />
+                </com.android.wallpaper.picker.TouchForwardingLayout>
+            </androidx.constraintlayout.widget.ConstraintLayout>
+        </FrameLayout>
+    </LinearLayout>
+
+    <include layout="@layout/bottom_action_bar" />
+
+</FrameLayout>
diff --git a/res/layout/fragment_individual_picker.xml b/res/layout/fragment_individual_picker.xml
index 05bcb18..b315464 100755
--- a/res/layout/fragment_individual_picker.xml
+++ b/res/layout/fragment_individual_picker.xml
@@ -28,11 +28,11 @@
         <androidx.recyclerview.widget.RecyclerView
             android:id="@+id/wallpaper_grid"
             android:layout_width="match_parent"
-            android:layout_height="wrap_content"
+            android:layout_height="match_parent"
             android:clipToPadding="false"
-            android:fitsSystemWindows="true"
             android:paddingHorizontal="@dimen/grid_edge_space"
-            android:paddingTop="@dimen/grid_padding"
+            android:paddingTop="@dimen/wallpaper_grid_padding_top"
+            android:paddingBottom="@dimen/wallpaper_grid_padding_bottom"
             android:scrollbarSize="@dimen/grid_padding"
             android:scrollbarStyle="outsideOverlay"
             android:scrollbarThumbVertical="@color/scrollbar_thumb_color_dark"
diff --git a/res/layout/fragment_live_preview.xml b/res/layout/fragment_live_preview.xml
deleted file mode 100755
index 0185272..0000000
--- a/res/layout/fragment_live_preview.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2019 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-             xmlns:app="http://schemas.android.com/apk/res-auto"
-             android:layout_width="match_parent"
-             android:layout_height="match_parent">
-
-      <FrameLayout
-          android:id="@+id/loading"
-          android:layout_width="match_parent"
-          android:layout_height="match_parent"
-          android:background="@android:color/black"
-          android:forceHasOverlappingRendering="false">
-
-          <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_gravity="center"
-              android:indeterminate="true"/>
-
-    </FrameLayout>
-
-    <FrameLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:fitsSystemWindows="true">
-
-        <androidx.coordinatorlayout.widget.CoordinatorLayout
-            android:id="@+id/coordinator_layout"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_gravity="bottom">
-
-            <LinearLayout
-                android:id="@+id/bottom_sheet"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:orientation="vertical"
-                android:background="@drawable/preview_bottom_sheet_background"
-                android:theme="@style/WallpaperPicker.BottomPaneStyle"
-                app:behavior_peekHeight="@dimen/preview_attribution_pane_collapsed_height"
-                app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
-
-                <com.google.android.material.tabs.TabLayout
-                    android:id="@+id/tablayout"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    app:tabTextAppearance="@style/WallpaperPicker.Preview.TextAppearance.NoAllCaps"
-                    app:tabIndicatorColor="?android:attr/textColorPrimary"
-                    android:visibility="gone"/>
-
-                <com.android.wallpaper.widget.ConstraintViewPager
-                    android:id="@+id/viewpager"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content" />
-
-            </LinearLayout>
-
-        </androidx.coordinatorlayout.widget.CoordinatorLayout>
-
-        <View
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/preview_gradient_background_height"
-            android:layout_gravity="top"
-            android:background="@drawable/gradient_background"/>
-
-        <androidx.appcompat.widget.Toolbar
-            android:id="@+id/toolbar"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_gravity="top"
-            style="@style/TranslucentToolbarStyle"/>
-
-    </FrameLayout>
-
-</FrameLayout>
diff --git a/res/layout/fragment_live_preview_v2.xml b/res/layout/fragment_live_preview_v2.xml
new file mode 100644
index 0000000..6011ddd
--- /dev/null
+++ b/res/layout/fragment_live_preview_v2.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="?android:colorPrimary">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_marginBottom="@dimen/bottom_navbar_height"
+        android:orientation="vertical">
+
+        <include layout="@layout/section_header" />
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/live_wallpaper_preview"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="1"
+            android:layout_gravity="center"
+            android:clipChildren="false"
+            android:clipToPadding="false"
+            android:background="@color/fullscreen_preview_background"
+            android:paddingVertical="@dimen/full_preview_page_default_padding_top">
+
+            <com.android.wallpaper.picker.TouchForwardingLayout
+                android:id="@+id/touch_forwarding_layout"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintBottom_toBottomOf="parent">
+
+                <include
+                    android:id="@+id/wallpaper_full_preview_card"
+                    layout="@layout/wallpaper_preview_card" />
+            </com.android.wallpaper.picker.TouchForwardingLayout>
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+    </LinearLayout>
+
+    <FrameLayout
+        android:id="@+id/loading"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:forceHasOverlappingRendering="false">
+
+        <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_gravity="center"
+            android:indeterminate="true" />
+    </FrameLayout>
+
+    <include layout="@layout/bottom_action_bar" />
+</FrameLayout>
diff --git a/res/layout/full_preview_tabs.xml b/res/layout/full_preview_tabs.xml
new file mode 100644
index 0000000..2dd72d3
--- /dev/null
+++ b/res/layout/full_preview_tabs.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
+<com.google.android.material.tabs.TabLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/full_preview_tabs"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    app:tabIndicatorColor="?android:colorAccent"
+    app:tabIndicatorFullWidth="false"
+    app:tabRippleColor="?android:colorControlHighlight"
+    app:tabSelectedTextColor="?android:colorAccent"
+    app:tabTextAppearance="@android:style/TextAppearance.Material.Body2"
+    app:tabTextColor="@color/full_preview_tab_unselected_text_color"
+    app:tabUnboundedRipple="true">
+
+    <com.google.android.material.tabs.TabItem
+        android:id="@+id/home"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/home_screen_message" />
+
+    <com.google.android.material.tabs.TabItem
+        android:id="@+id/lock"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/lock_screen_message" />
+</com.google.android.material.tabs.TabLayout>
diff --git a/res/layout/fullscreen_wallpaper_preview.xml b/res/layout/fullscreen_wallpaper_preview.xml
new file mode 100644
index 0000000..3f430f8
--- /dev/null
+++ b/res/layout/fullscreen_wallpaper_preview.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content">
+
+    <ImageView
+        android:id="@+id/low_res_image"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:scaleType="centerCrop"
+        android:background="@color/fullscreen_preview_background" />
+
+    <com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
+        android:id="@+id/full_res_image"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/grid_item_image.xml b/res/layout/grid_item_image.xml
index d4ab12b..45a327c 100755
--- a/res/layout/grid_item_image.xml
+++ b/res/layout/grid_item_image.xml
@@ -13,76 +13,83 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/tile"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:layout_marginTop="8dp"
-    android:contentDescription="@string/wallpaper_thumbnail"
-    app:cardCornerRadius="?android:dialogCornerRadius"
-    app:cardElevation="0dp">
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:paddingTop="@dimen/grid_item_individual_padding_top">
 
-    <RelativeLayout xmlns:tools="http://schemas.android.com/tools"
-        android:id="@+id/tile"
-        android:layout_width="wrap_content"
+    <TextView
+        android:id="@+id/title"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:padding="@dimen/option_border_width"
-        android:background="@drawable/option_border"
-        android:clickable="true"
-        android:focusable="true"
-        android:foreground="?attr/selectableItemBackground">
+        android:layout_marginTop="@dimen/grid_item_individual_label_padding_top"
+        android:layout_marginBottom="@dimen/grid_item_individual_label_padding_bottom"
+        android:background="@color/category_title_scrim_color"
+        android:ellipsize="end"
+        android:gravity="center"
+        android:maxLines="1"
+        android:minHeight="@dimen/grid_item_category_label_minimum_height"
+        android:textAppearance="@style/OptionTitleTextAppearance"
+        android:visibility="gone"
+        tools:text="Wallpaper" />
 
-        <ImageView
-            android:id="@+id/thumbnail"
+    <androidx.cardview.widget.CardView
+        android:id="@+id/wallpaper_container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:contentDescription="@string/wallpaper_thumbnail"
+        app:cardCornerRadius="?android:dialogCornerRadius"
+        app:cardElevation="0dp">
+
+        <RelativeLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:background="@color/secondary_color"
-            android:scaleType="centerCrop" />
+            android:foreground="@drawable/wallpaper_option_border">
+
+            <ImageView
+                android:id="@+id/thumbnail"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:background="@color/secondary_color"
+                android:scaleType="centerCrop" />
+
+            <ImageView
+                android:id="@+id/overlay_icon"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_centerInParent="true" />
+
+            <FrameLayout
+                android:id="@+id/loading_indicator_container"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:background="@color/black_67_alpha"
+                android:visibility="gone">
+
+                <ProgressBar
+                    android:id="@+id/loading_indicator"
+                    android:layout_width="@dimen/tile_desktop_progress_bar_size"
+                    android:layout_height="@dimen/tile_desktop_progress_bar_size"
+                    android:layout_gravity="center"
+                    android:indeterminate="true"
+                    android:indeterminateTint="@color/accent_color" />
+
+            </FrameLayout>
+        </RelativeLayout>
 
         <ImageView
-            android:id="@+id/overlay_icon"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_centerInParent="true" />
+            android:id="@+id/check_circle"
+            android:layout_width="@dimen/grid_item_individual_wallpaper_check_circle_size"
+            android:layout_height="@dimen/grid_item_individual_wallpaper_check_circle_size"
+            android:layout_gravity="bottom|right"
+            android:layout_marginEnd="@dimen/grid_item_individual_wallpaper_check_circle_offset"
+            android:layout_marginBottom="@dimen/grid_item_individual_wallpaper_check_circle_offset"
+            android:src="@drawable/check_circle_accent_24dp"
+            android:visibility="gone" />
 
-        <TextView
-            android:id="@+id/title"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_alignParentBottom="true"
-            android:background="@color/individual_tile_title_scrim_color"
-            android:padding="@dimen/grid_item_category_label_padding"
-            android:textColor="@color/individual_tile_title_text_color"
-            android:textSize="@dimen/abc_text_size_subhead_material"
-            android:visibility="gone"
-            tools:text="Wallpaper" />
-
-        <FrameLayout
-            android:id="@+id/loading_indicator_container"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:background="@color/black_67_alpha"
-            android:visibility="gone">
-
-            <ProgressBar
-                android:id="@+id/loading_indicator"
-                android:layout_width="@dimen/tile_desktop_progress_bar_size"
-                android:layout_height="@dimen/tile_desktop_progress_bar_size"
-                android:layout_gravity="center"
-                android:indeterminate="true"
-                android:indeterminateTint="@color/accent_color" />
-
-        </FrameLayout>
-    </RelativeLayout>
-
-    <ImageView
-        android:id="@+id/check_circle"
-        android:layout_width="@dimen/grid_item_individual_wallpaper_check_circle_size"
-        android:layout_height="@dimen/grid_item_individual_wallpaper_check_circle_size"
-        android:layout_gravity="bottom|right"
-        android:layout_marginEnd="@dimen/grid_item_individual_wallpaper_check_circle_offset"
-        android:layout_marginBottom="@dimen/grid_item_individual_wallpaper_check_circle_offset"
-        android:src="@drawable/check_circle_blue"
-        android:visibility="gone" />
-
-</androidx.cardview.widget.CardView>
+    </androidx.cardview.widget.CardView>
+</LinearLayout>
diff --git a/res/layout/grid_item_rotation.xml b/res/layout/grid_item_rotation.xml
deleted file mode 100755
index a255fc8..0000000
--- a/res/layout/grid_item_rotation.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><!--
-     Copyright (C) 2017 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.
--->
-<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/daily_refresh"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:layout_marginTop="8dp"
-    android:background="@color/secondary_color"
-    android:clickable="true"
-    android:focusable="true"
-    android:foreground="?attr/selectableItemBackground"
-    android:paddingEnd="@dimen/rotation_tile_padding_right"
-    android:paddingLeft="@dimen/rotation_tile_padding_left"
-    android:paddingRight="@dimen/rotation_tile_padding_right"
-    android:paddingStart="@dimen/rotation_tile_padding_left"
-    app:cardCornerRadius="?android:dialogCornerRadius"
-    app:cardElevation="0dp">
-
-    <LinearLayout
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="bottom|center_horizontal"
-        android:layout_marginBottom="@dimen/rotation_tile_textarea_margin_bottom"
-        android:orientation="vertical">
-
-        <TextView
-            android:id="@+id/rotation_tile_title"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginBottom="@dimen/rotation_tile_textarea_title_margin_bottom"
-            android:text="@string/daily_refresh_tile_title"
-            android:textColor="@color/rotation_tile_enabled_title_text_color"
-            android:textSize="@dimen/rotation_tile_title_size" />
-
-        <LinearLayout
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal">
-
-            <ImageView
-                android:id="@+id/rotation_tile_refresh_icon"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_marginLeft="@dimen/rotation_tile_refresh_icon_offset"
-                android:layout_marginStart="@dimen/rotation_tile_refresh_icon_offset"
-                android:src="@drawable/ic_refresh_18px" />
-
-            <TextView
-                android:id="@+id/rotation_tile_message"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_marginLeft="@dimen/rotation_tile_textarea_subtitle_margin_left"
-                android:layout_marginStart="@dimen/rotation_tile_textarea_subtitle_margin_left"
-                android:text="@string/daily_refresh_tile_subtitle"
-                android:textColor="@color/rotation_tile_enabled_subtitle_text_color"
-                android:textSize="@dimen/abc_text_size_caption_material" />
-
-        </LinearLayout>
-
-    </LinearLayout>
-
-</androidx.cardview.widget.CardView>
diff --git a/res/layout/grid_item_rotation_desktop.xml b/res/layout/grid_item_rotation_desktop.xml
index 3395b8b..6e6df84 100755
--- a/res/layout/grid_item_rotation_desktop.xml
+++ b/res/layout/grid_item_rotation_desktop.xml
@@ -75,7 +75,7 @@
         android:layout_height="@dimen/grid_item_individual_wallpaper_check_circle_size"
         android:layout_marginStart="@dimen/grid_item_individual_wallpaper_check_circle_offset"
         android:layout_marginTop="@dimen/grid_item_individual_wallpaper_check_circle_offset"
-        android:src="@drawable/check_circle_blue"
+        android:src="@drawable/check_circle_accent_24dp"
         android:visibility="gone" />
 
 </FrameLayout>
diff --git a/res/layout/lock_screen_preview.xml b/res/layout/lock_screen_preview.xml
new file mode 100644
index 0000000..f625883
--- /dev/null
+++ b/res/layout/lock_screen_preview.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+     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.
+-->
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/lock_overlay"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/black_24_alpha">
+
+    <ImageView
+        android:id="@+id/lock_icon"
+        android:layout_width="@dimen/lock_screen_preview_lock_icon_size"
+        android:layout_height="@dimen/lock_screen_preview_lock_icon_size"
+        android:src="@drawable/ic_lock_outline_24px"
+        android:tint="@color/white_88_alpha"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintVertical_bias="0.1" />
+
+    <TextView
+        android:id="@+id/lock_time"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:textAppearanceListItemSmall"
+        android:textColor="@color/white_88_alpha"
+        android:textSize="@dimen/lock_screen_preview_time_text_size"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintVertical_bias="0.3" />
+
+    <TextView
+        android:id="@+id/lock_date"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:textAppearanceListItemSmall"
+        android:textColor="@color/white_88_alpha"
+        android:textSize="@dimen/lock_screen_preview_date_text_size"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/lock_time" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/res/layout/preview_customize_settings.xml b/res/layout/preview_customize_settings.xml
new file mode 100644
index 0000000..2a11495
--- /dev/null
+++ b/res/layout/preview_customize_settings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     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.
+-->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:gravity="center_horizontal"
+    android:orientation="vertical"
+    android:paddingHorizontal="@dimen/preview_attribution_pane_horizontal_padding"
+    android:theme="@style/WallpaperPicker.CustomizationPaneStyle">
+
+    <androidx.slice.widget.SliceView
+        android:id="@+id/settings_slice"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"/>
+</LinearLayout>
diff --git a/res/layout/section_header.xml b/res/layout/section_header.xml
index 9cdeaee..a0943d0 100644
--- a/res/layout/section_header.xml
+++ b/res/layout/section_header.xml
@@ -35,4 +35,9 @@
             android:textAppearance="@style/TitleTextAppearance"/>
     </androidx.appcompat.widget.Toolbar>
 
+    <FrameLayout
+        android:id="@+id/toolbar_tabs_container"
+        android:layout_height="wrap_content"
+        android:layout_width="match_parent" />
+
 </com.google.android.material.appbar.AppBarLayout>
\ No newline at end of file
diff --git a/res/layout/wallpaper_info_view.xml b/res/layout/wallpaper_info_view.xml
new file mode 100644
index 0000000..5237ef8
--- /dev/null
+++ b/res/layout/wallpaper_info_view.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+
+     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.
+-->
+<com.android.wallpaper.widget.WallpaperInfoView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:gravity="center_horizontal"
+    android:orientation="vertical"
+    android:paddingHorizontal="@dimen/wallpaper_info_pane_horizontal_padding"
+    android:paddingTop="@dimen/wallpaper_info_pane_top_padding"
+    android:paddingBottom="@dimen/wallpaper_info_pane_bottom_padding"
+    android:theme="@style/WallpaperPicker.BottomPaneStyle">
+
+    <TextView
+        android:id="@+id/wallpaper_info_title"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:ellipsize="end"
+        android:gravity="center"
+        android:lineHeight="24dp"
+        android:singleLine="true"
+        android:textAppearance="@style/TitleTextAppearance"
+        android:textColor="@color/action_bar_bottom_sheet_text_color" />
+
+    <TextView
+        android:id="@+id/wallpaper_info_subtitle1"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="@dimen/wallpaper_info_pane_subtitle1_top_margin"
+        android:lineHeight="20dp"
+        android:gravity="center"
+        android:textColor="@color/action_bar_bottom_sheet_text_color"
+        android:textSize="16sp"
+        android:visibility="gone" />
+
+    <TextView
+        android:id="@+id/wallpaper_info_subtitle2"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        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:visibility="gone" />
+
+    <Button
+        android:id="@+id/wallpaper_info_explore_button"
+        style="@style/OutlinedButtonStyle"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="@dimen/wallpaper_info_pane_explore_button_top_margin"
+        android:text="@string/explore"
+        android:visibility="gone" />
+</com.android.wallpaper.widget.WallpaperInfoView>
\ No newline at end of file
diff --git a/res/layout/wallpaper_preview_card.xml b/res/layout/wallpaper_preview_card.xml
index f9e36da..67bd04d 100644
--- a/res/layout/wallpaper_preview_card.xml
+++ b/res/layout/wallpaper_preview_card.xml
@@ -16,7 +16,8 @@
 <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
     style="@style/FullContentPreviewCard"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:contentDescription="@string/wallpaper_preview_card_content_description">
 
     <ImageView
         android:id="@+id/wallpaper_preview_image"
@@ -25,12 +26,26 @@
         android:background="@color/primary_color" />
 
     <SurfaceView
-        android:id="@+id/workspace_surface"
+        android:id="@+id/wallpaper_surface"
         android:layout_width="match_parent"
         android:layout_height="match_parent" />
 
     <SurfaceView
-        android:id="@+id/wallpaper_surface"
+        android:id="@+id/workspace_surface"
         android:layout_width="match_parent"
-        android:layout_height="match_parent" />
+        android:layout_height="match_parent"
+        android:importantForAccessibility="noHideDescendants" />
+
+    <FrameLayout
+        android:id="@+id/lock_screen_preview_container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:importantForAccessibility="noHideDescendants" />
+
+    <View
+        android:id="@+id/fade_cover"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:alpha="0"
+        android:background="@color/preview_pager_background" />
 </androidx.cardview.widget.CardView>
\ No newline at end of file
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index ea86de2..2ca2d03 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Herlaai daaglikse muurpapier"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Herlaai tans daaglikse muurpapier …"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Kon nie daaglikse muurpapier herlaai nie. Gaan jou netwerkverbinding na en probeer weer."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Vou muurpapierinligtingpaneel in"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Vou muurpapierinligtingpaneel uit"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Muurpapiere op toestel"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Op toestel"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android-muurpapier"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Gesentreerde snoei"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Rek"</string>
     <string name="preview" msgid="1774602101743861071">"Voorskou"</string>
+    <string name="tab_info" msgid="818614080690111416">"Inligting"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Pasmaak"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Instellings …"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Vee uit"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Vee hierdie muurpapier op jou foon uit?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Terug"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Wysig"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Laai af"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Skyfievertoningmuurpapier"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Pas toe"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Bladsy <xliff:g id="ID_1">%1$d</xliff:g> van <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Volgende"</string>
+    <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>
 </resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index bca3e97..1bace37 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"ዕለታዊ ልጣፍን ያድሱ"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"ዕለታዊ ልጣፍን በማደስ ላይ…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"ዕለታዊ ልጣፍን ማደስ አልተሳካም። እባክዎ የእርስዎን የአውታረ መረብ ግንኙነት ይፈትሹ እና እንደገና ይሞክሩ።"</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"የልጣፍ መረጃ ፓነልን ሰብስብ"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"የልጣፍ መረጃ ፓነልን ዘርጋ"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"የመሣሪያ ላይ ልጣፎች"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"በመሣሪያ ላይ"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"የAndroid ልጣፍ"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"መሃል ላይ ከርክም"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"ወጥር"</string>
     <string name="preview" msgid="1774602101743861071">"ቅድመ-እይታ"</string>
+    <string name="tab_info" msgid="818614080690111416">"መረጃ"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"ብጁ አድርግ"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"ቅንብሮች…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"ሰርዝ"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"ይህ ልጣፍ ከስልክዎ ይሰረዝ?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"ተመለስ"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"አርትዕ"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"አውርድ"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"የተንሸራታች ትዕይንት ልጣፍ"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"ተግብር"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"ገጽ <xliff:g id="ID_1">%1$d</xliff:g> ከ<xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"ቀጣይ"</string>
+    <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>
 </resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 2a6c183..7648f0d 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -28,14 +28,14 @@
     <string name="load_wallpaper_error_message" msgid="7913278480467707374">"يتعذّر تحميل الخلفية. قد تكون الصورة تالفة أو غير متاحة."</string>
     <string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"الخلفية المختارة حاليًا"</string>
     <string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"خلفية يومية"</string>
-    <string name="wallpaper_destination_both" msgid="1124197176741944063">"الشاشة الرئيسية وشاشة التأمين"</string>
+    <string name="wallpaper_destination_both" msgid="1124197176741944063">"الشاشة الرئيسية وشاشة القفل"</string>
     <string name="home_screen_message" msgid="106444102822522813">"الشاشة الرئيسية"</string>
-    <string name="lock_screen_message" msgid="1534506081955058013">"شاشة التأمين"</string>
-    <string name="home_and_lock_short_label" msgid="2937922943541927983">"الشاشة الرئيسية وشاشة التأمين"</string>
+    <string name="lock_screen_message" msgid="1534506081955058013">"شاشة القفل"</string>
+    <string name="home_and_lock_short_label" msgid="2937922943541927983">"الشاشة الرئيسية وشاشة القفل"</string>
     <string name="set_wallpaper_dialog_message" msgid="6114951028768599417">"تعيين كخلفية"</string>
     <string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"الشاشة الرئيسية"</string>
-    <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"شاشة التأمين"</string>
-    <string name="set_wallpaper_both_destination" msgid="6967226064958263939">"الشاشة الرئيسية وشاشة التأمين"</string>
+    <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"شاشة القفل"</string>
+    <string name="set_wallpaper_both_destination" msgid="6967226064958263939">"الشاشة الرئيسية وشاشة القفل"</string>
     <string name="no_backup_image_wallpaper_label" msgid="6316627676107284851">"خلفية الصور التي يتم عرضها بالتناوب"</string>
     <string name="permission_needed_explanation" msgid="139166837541426823">"لعرض الخلفية الحالية هنا، يحتاج تطبيق <xliff:g id="APP_NAME">%1$s</xliff:g> إلى الوصول إلى مساحة تخزين الجهاز."</string>
     <string name="permission_needed_explanation_go_to_settings" msgid="3923551582092599609">"لعرض الخلفية الحالية هنا، يحتاج تطبيق \"الخلفيات\" إلى الدخول إلى مساحة تخزين جهازك.\n\nلتغيير هذا الإعداد، انتقل إلى \"منطقة الأذونات\" في المعلومات التي يقدّمها تطبيق \"الخلفيات\"."</string>
@@ -57,17 +57,15 @@
     <string name="wallpaper_set_successfully_message" msgid="2958998799111688578">"تم تعيين الخلفية بنجاح."</string>
     <string name="wallpapers_unavailable_offline_message" msgid="8136405438621689532">"يلزمك الاتصال بالإنترنت للاطّلاع على الخلفيات. يُرجى الاتصال وإعادة المحاولة."</string>
     <string name="currently_set_home_wallpaper_thumbnail" msgid="4022381436821898917">"صورة مصغَّرة لخلفية الشاشة الرئيسية المعيَّنة حاليًا"</string>
-    <string name="currently_set_lock_wallpaper_thumbnail" msgid="2094209303934569997">"صورة مصغَّرة لخلفية شاشة التأمين المعيَّنة حاليًا"</string>
+    <string name="currently_set_lock_wallpaper_thumbnail" msgid="2094209303934569997">"صورة مصغَّرة لخلفية شاشة القفل المعيَّنة حاليًا"</string>
     <string name="currently_set_wallpaper_thumbnail" msgid="8651887838745545107">"صورة مصغَّرة لخلفية الشاشة المعيَّنة حاليًا"</string>
     <string name="wallpaper_thumbnail" msgid="569931475923605974">"صورة مصغَّرة للخلفية"</string>
     <string name="explore_home_screen" msgid="8756346794535765482">"استكشاف خلفية الشاشة الرئيسية"</string>
-    <string name="explore_lock_screen" msgid="268938342103703665">"استكشاف خلفية شاشة التأمين"</string>
-    <string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"تحديث خلفية الشاشة الرئيسية اليومية"</string>
-    <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"تحديث الخلفية اليومية"</string>
-    <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"جارٍ تحديث الخلفية اليومية…"</string>
-    <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"تعذّر تحديث الخلفية اليومية. يُرجى التحقق من اتصالك بالشبكة وإعادة المحاولة."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"تصغير لوحة معلومات الخلفية"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"توسيع لوحة معلومات الخلفية"</string>
+    <string name="explore_lock_screen" msgid="268938342103703665">"استكشاف خلفية شاشة القفل"</string>
+    <string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"إعادة تحميل خلفية الشاشة الرئيسية اليومية"</string>
+    <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"إعادة تحميل الخلفية اليومية"</string>
+    <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"تجري إعادة تحميل الخلفية اليومية…"</string>
+    <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"تعذّرت إعادة تحميل الخلفية اليومية. يُرجى التحقق من اتصالك بالشبكة وإعادة المحاولة."</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"خلفيات على الجهاز"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"على الجهاز"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"‏خلفية Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"توسيط مع اقتصاص المساحة الزائدة"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"توسيع للعرض بملء الشاشة"</string>
     <string name="preview" msgid="1774602101743861071">"معاينة"</string>
+    <string name="tab_info" msgid="818614080690111416">"معلومات"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"تخصيص"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"الإعدادات…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"حذف"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"هل تريد حذف هذه الخلفية من هاتفك؟"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"رجوع"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"تعديل"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"تنزيل"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"خلفية عرض الشرائح"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"تطبيق"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"الصفحة <xliff:g id="ID_1">%1$d</xliff:g> من <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"الصفحة التالية"</string>
+    <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>
 </resources>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 95a66fd..9303e2f 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"দৈনিক ৱালপেপাৰ ৰিফ্ৰে\'শ্ব কৰক"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"দৈনিক ৱালপেপাৰ ৰিফ্ৰে\'শ্ব কৰি থকা হৈছে …"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"দৈনিক ৱালপেপাৰ ৰিফ্ৰে\'শ্ব কৰিব পৰা নগ\'ল। অনুগ্ৰহ কৰি আপোনাৰ নেটৱর্ক সংযোগ পৰীক্ষা কৰক আৰু আকৌ চেষ্টা কৰক।"</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"ৱালপেপাৰ সম্পৰ্কীয় তথ্যৰ পেনেল সংকুচিত কৰক"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"ৱালপেপাৰ সম্পৰ্কীয় তথ্যৰ পেনেল বিস্তাৰ কৰক"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"ডিভাইচত থকা ৱালপেপাৰ"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"ডিভাইচত থকা"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android ৱালপেপাৰ"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"মধ্য অংশৰ পৰা কৰা ক্ৰপ"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"প্ৰসাৰিত"</string>
     <string name="preview" msgid="1774602101743861071">"পূৰ্বদৰ্শন"</string>
+    <string name="tab_info" msgid="818614080690111416">"তথ্য"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"কাষ্টমাইজ কৰক"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"ছেটিংসমূহ…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"মচক"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"এই ৱালপেপাৰখন আপোনাৰ ফ’নটোৰ পৰা মচিবনে?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"উভতি যাওক"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"সম্পাদনা কৰক"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"ডাউনল’ড কৰক"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"ৱালপেপাৰৰ শ্লাইডশ্ব’ দেখুৱাওক"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"প্ৰয়োগ কৰক"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"পৃষ্ঠা <xliff:g id="ID_2">%2$d</xliff:g>ৰ <xliff:g id="ID_1">%1$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"পৰৱৰ্তী"</string>
+    <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>
 </resources>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 162d0c9..f02e72e 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Divar kağızını gündəlik yeniləyin"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Günlük divar kağızı yenilənir..."</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Gündəlik divar kağızını yeniləmək olmadı. Şəbəkəni yoxlayın və yenidən cəhd edin."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Divar kağızı məlumat panelini yiğcamlaşdırın"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Divar kağızı məlumat panelini genişləndirin"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Cihazdakı divar kağızları"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Cihazda"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android divar kağızı"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Mərkəzi kəsim"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Dartın"</string>
     <string name="preview" msgid="1774602101743861071">"Önizləmə"</string>
+    <string name="tab_info" msgid="818614080690111416">"Məlumat"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Fərdiləşdirin"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Ayarlar…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Silin"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Bu divar kağızı telefondan silinsin?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Geri"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Düzəliş"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Endirin"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Divar Kağızı Slaydşou"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Tətbiq edin"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Səhifə <xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Növbəti"</string>
+    <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>
 </resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index b005851..f9f63d7 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Osveži dnevnu pozadinu"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Dnevna pozadina se osvežava…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Osvežavanje dnevne pozadine nije uspelo. Proverite mrežnu vezu i probajte ponovo."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Skupi tablu sa informacijama o pozadini"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Proširi tablu sa informacijama o pozadini"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Pozadine na uređaju"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Na uređaju"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android pozadina"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Opseci u centru"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Razvuci"</string>
     <string name="preview" msgid="1774602101743861071">"Pregled"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informacije"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Prilagodite"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Podešavanja…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Izbriši"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Želite da izbrišete ovu pozadinu sa telefona?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Nazad"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Izmeni"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Preuzmi"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Projekcija slajdova u pozadini"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Primeni"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_1">%1$d</xliff:g>. stranica od <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Sledeća"</string>
+    <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>
 </resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index bfb434f..16bdadc 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Абнавіць шпалеры на кожны дзень"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Абнаўленне шпалер на кожны дзень…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Не атрымалася абнавіць шпалеры на кожны дзень. Спраўдзіце падключэнне да сеткі і паўтарыце спробу."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Згарнуць панэль інфармацыі пра шпалеры"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Разгарнуць панэль інфармацыі пра шпалеры"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Шпалеры на прыладзе"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"На прыладзе"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Шпалеры Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Запоўніць"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Расцягнуць"</string>
     <string name="preview" msgid="1774602101743861071">"Перадпрагляд"</string>
+    <string name="tab_info" msgid="818614080690111416">"Інфармацыя"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Наладка"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Налады…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Выдаліць"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Выдаліць гэтыя шпалеры з тэлефона?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Назад"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Змяніць"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Спампаваць"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Паказаць шпалеры як слайд-шоу"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Ужыць"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Старонка <xliff:g id="ID_1">%1$d</xliff:g> з <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Далей"</string>
+    <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>
 </resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 4953524..6f57003 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Опресняване на тапета за деня"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Тапетът за деня се опреснява…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Опресняването на тапета за деня не бе успешно. Моля, проверете връзката си с мрежата и опитайте отново."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Свиване на панела с информация за тапета"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Разгъване на панела с информация за тапета"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Тапети, съхранявани на у-вото"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"На устройството"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Тапет на Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Центриране с подрязване"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Разтегляне"</string>
     <string name="preview" msgid="1774602101743861071">"Визуализация"</string>
+    <string name="tab_info" msgid="818614080690111416">"Информация"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Персонализиране"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Настройки…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Изтриване"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Да се изтрие ли този тапет от телефона ви?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Назад"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Редактиране"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Изтегляне"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Тапет със слайдшоу"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Прилагане"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Страница <xliff:g id="ID_1">%1$d</xliff:g> от <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Напред"</string>
+    <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>
 </resources>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index d51734f..8f60442 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"প্রতিদিনের ওয়ালপেপার রিফ্রেশ করুন"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"প্রতিদিনের ওয়ালপেপার রিফ্রশ করা হচ্ছে…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"প্রতিদিনের ওয়ালপেপার রিফ্রেশ করা গেল না। অনুগ্রহ করে আপনার কানেকশন যাচাই করে আবার চেষ্টা করুন।"</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"ওয়ালপেপার তথ্যের প্যানেলকে আড়াল করুন"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"ওয়ালপেপার তথ্যের প্যানেলকে বড় করুন"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"ডিভাইসে থাকা ওয়ালপেপার"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"ডিভাইসে রয়েছে"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android-এর ওয়ালপেপার"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"সীমানার দিকে কাটছাঁট করা"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"প্রসারিত"</string>
     <string name="preview" msgid="1774602101743861071">"প্রিভিউ"</string>
+    <string name="tab_info" msgid="818614080690111416">"তথ্য"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"কাস্টমাইজ করুন"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"সেটিংস…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"মুছে দিন"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"আপনার ফোন থেকে এই ওয়ালপেপার মুছে ফেলতে চান?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"ফিরে যান"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"এডিট করুন"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"ডাউনলোড করুন"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"ওয়ালপেপার স্লাইডশো দেখুন"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"প্রয়োগ করুন"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_2">%2$d</xliff:g>টি পৃষ্ঠার মধ্যে <xliff:g id="ID_1">%1$d</xliff:g> নম্বর"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"পরের"</string>
+    <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>
 </resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 167b77f..275b194 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Osvježite dnevnu pozadinsku sliku"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Osvježavanje dnevne pozadinske slike…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Osvježavanje dnevne pozadinske slike nije uspjelo. Provjerite vezu s mrežom i pokušajte ponovo."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Suzite podatke o pozadinskoj slici"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Prikažite podatke o pozadinskoj slici"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Pozadinske slike na uređaju"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Na uređaju"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android pozadinska slika"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Sredina s odrezanim rubovima"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Razvučeno"</string>
     <string name="preview" msgid="1774602101743861071">"Pregled"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informacije"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Prilagođavanje"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Postavke…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Izbriši"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Izbrisati ovu pozadinsku sliku s telefona?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Nazad"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Uredi"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Preuzmi"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Pozadinska slika prezentacije"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Primijeni"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_1">%1$d</xliff:g>. stranica od <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Naprijed"</string>
+    <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>
 </resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index b2fd98d..278b23e 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -42,7 +42,7 @@
     <string name="permission_needed_allow_access_button_label" msgid="1943133660612924306">"Permet l\'accés"</string>
     <string name="no_backup_image_wallpaper_description" msgid="8303268619408738057">"Servei de fons de pantalla animats per a fons de pantalla rotatius"</string>
     <string name="daily_refresh_tile_title" msgid="3270456074558525091">"Fons de pantalla diari"</string>
-    <string name="daily_refresh_tile_subtitle" msgid="3976682014885446443">"Toca per activar la funció"</string>
+    <string name="daily_refresh_tile_subtitle" msgid="3976682014885446443">"Toca per activar"</string>
     <string name="start_rotation_dialog_body_live_wallpaper_needed" msgid="5132580257563846082">"El fons de pantalla canviarà automàticament cada dia. Per completar la configuració, toca &lt;strong&gt;Estableix el fons de pantalla&lt;/strong&gt; a la pantalla següent."</string>
     <string name="start_rotation_dialog_wifi_only_option_message" msgid="3126269859713666225">"Baixa els propers fons de pantalla només per Wi-Fi"</string>
     <string name="start_rotation_dialog_continue" msgid="276678987852274872">"Continua"</string>
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Actualitza el fons de pantalla diari"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"S\'està actualitzant el fons de pantalla diari…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"No s\'ha pogut actualitzar el fons de pantalla diari. Comprova la connexió a la xarxa i torna-ho a provar."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Replega el tauler d\'informació sobre el fons de pantalla"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Desplega el tauler d\'informació sobre el fons de pantalla"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Fons de pantalla del dispositiu"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Al dispositiu"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Fons de pantalla d\'Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Centra i retalla"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Amplia"</string>
     <string name="preview" msgid="1774602101743861071">"Previsualitza"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informació"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Personalitza"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Configuració…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Suprimeix"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Vols suprimir aquest fons de pantalla del telèfon?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Enrere"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Edita"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Baixa"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Fons de pantalla de diapositives"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Aplica"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Pàgina <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Següent"</string>
+    <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>
 </resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index cebf392..1fb0701 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Obnovit denní tapetu"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Obnovování denní tapety…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Denní tapetu se nepodařilo obnovit. Zkontrolujte připojení k síti a zkuste to znovu."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Sbalit informační panel tapety"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Rozbalit informační panel tapety"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Tapety v zařízení"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"V zařízení"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Tapeta Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Vycentrovat a oříznout"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Roztáhnout"</string>
     <string name="preview" msgid="1774602101743861071">"Náhled"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informace"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Přizpůsobení"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Nastavení…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Smazat"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Smazat tapetu z telefonu?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Zpět"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Upravit"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Stáhnout"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Tapeta prezentace"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Použít"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Strana <xliff:g id="ID_1">%1$d</xliff:g> z <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Další"</string>
+    <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>
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 049affe..184a25b 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Opdater daglig baggrund"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Opdaterer daglig baggrund…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Opdateringen af din daglige baggrund mislykkedes. Tjek din netværksforbindelse, og prøv igen."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Skjul panelet med oplysninger om baggrunden"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Udvid panelet med oplysninger om baggrunden"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Baggrunde på enheden"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"På enheden"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android-baggrund"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Centrer og beskær"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Stræk"</string>
     <string name="preview" msgid="1774602101743861071">"Forhåndsvisning"</string>
+    <string name="tab_info" msgid="818614080690111416">"Oplysninger"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Tilpas"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Indstillinger…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Slet"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Vil du slette denne baggrund på din telefon?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Tilbage"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Rediger"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Download"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Baggrund med diasshow"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Anvend"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Side <xliff:g id="ID_1">%1$d</xliff:g> af <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Næste"</string>
+    <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>
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 48bb948..efcd22c 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Täglichen Hintergrund aktualisieren"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Täglicher Hintergrund wird aktualisiert…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Aktualisierung des täglichen Hintergrunds fehlgeschlagen. Prüfe die Netzwerkverbindung und versuche es noch einmal."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Infofeld für Hintergrund minimieren"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Infofeld für Hintergrund maximieren"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Hintergründe auf dem Gerät"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Auf dem Gerät"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android-Hintergrund"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Zentriert anpassen"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Strecken"</string>
     <string name="preview" msgid="1774602101743861071">"Vorschau"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informationen"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Anpassen"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Einstellungen…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Löschen"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Diesen Hintergrund von deinem Smartphone löschen?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Zurück"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Bearbeiten"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Herunterladen"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Diashowhintergrund"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Übernehmen"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Seite <xliff:g id="ID_1">%1$d</xliff:g> von <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Weiter"</string>
+    <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>
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index d14cc2b..c078327 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Ανανέωση ημερήσιας ταπετσαρίας"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Ανανέωση ημερήσιας ταπετσαρίας…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Αποτυχία ανανέωσης ημερήσιας ταπετσαρίας. Ελέγξτε τη σύνδεση δικτύου σας και δοκιμάστε ξανά."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Σύμπτυξη πλαισίου πληροφοριών ταπετσαρίας"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Ανάπτυξη πλαισίου πληροφοριών ταπετσαρίας"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Ταπετσαρίες στη συσκευή"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Στη συσκευή"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Ταπετσαρία Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Περικοπή στο κέντρο"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Τέντωμα"</string>
     <string name="preview" msgid="1774602101743861071">"Προεπισκόπηση"</string>
+    <string name="tab_info" msgid="818614080690111416">"Πληροφορίες"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Προσαρμογή"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Ρυθμίσεις…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Διαγραφή"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Διαγραφή αυτής της ταπετσαρίας από το τηλέφωνό σας;"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Πίσω"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Επεξεργασία"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Λήψη"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Ταπετσαρία: Προβολή διαφανειών"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Εφαρμογή"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Σελίδα <xliff:g id="ID_1">%1$d</xliff:g> από <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Επόμενη"</string>
+    <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>
 </resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 158ce10..cae6b88 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Refresh daily wallpaper"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Refreshing daily wallpaper…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Failed to refresh daily wallpaper. Please check your network connection and try again."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Collapse wallpaper info panel"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Expand wallpaper info panel"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"On-device wallpapers"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"On device"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android wallpaper"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Centre crop"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Stretch"</string>
     <string name="preview" msgid="1774602101743861071">"Preview"</string>
+    <string name="tab_info" msgid="818614080690111416">"Info"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Customise"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Settings…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Delete"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Delete this wallpaper from your phone?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Back"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Edit"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Download"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Slideshow wallpaper"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Apply"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Page <xliff:g id="ID_1">%1$d</xliff:g> of <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Next"</string>
+    <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>
 </resources>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..cae6b88
--- /dev/null
+++ b/res/values-en-rCA/strings.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+     Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="wallpaper_app_name" msgid="1719889291772891695">"Wallpapers"</string>
+    <!-- no translation found for app_name (8773648973927541493) -->
+    <skip />
+    <string name="select_wallpaper_label" msgid="6989581259339646085">"Wallpaper categories"</string>
+    <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Set Wallpaper"</string>
+    <string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Setting wallpaper…"</string>
+    <string name="try_again" msgid="8278874823700921234">"Try again"</string>
+    <string name="set_wallpaper_error_message" msgid="6819986999041085130">"Unable to set wallpaper."</string>
+    <string name="load_wallpaper_error_message" msgid="7913278480467707374">"Unable to load wallpaper. The image is either corrupted or unavailable."</string>
+    <string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Currently set"</string>
+    <string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Daily wallpaper"</string>
+    <string name="wallpaper_destination_both" msgid="1124197176741944063">"Home &amp; Lock screen"</string>
+    <string name="home_screen_message" msgid="106444102822522813">"Home screen"</string>
+    <string name="lock_screen_message" msgid="1534506081955058013">"Lock screen"</string>
+    <string name="home_and_lock_short_label" msgid="2937922943541927983">"Home &amp; Lock"</string>
+    <string name="set_wallpaper_dialog_message" msgid="6114951028768599417">"Set wallpaper"</string>
+    <string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"Home screen"</string>
+    <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"Lock screen"</string>
+    <string name="set_wallpaper_both_destination" msgid="6967226064958263939">"Home screen and lock screen"</string>
+    <string name="no_backup_image_wallpaper_label" msgid="6316627676107284851">"Rotating Image Wallpaper"</string>
+    <string name="permission_needed_explanation" msgid="139166837541426823">"To display the current wallpaper here, <xliff:g id="APP_NAME">%1$s</xliff:g> needs access to your device\'s storage."</string>
+    <string name="permission_needed_explanation_go_to_settings" msgid="3923551582092599609">"To display the current wallpaper here, Wallpapers needs access to your device’s storage.\n\nTo change this setting, go to the Permissions area of the Wallpapers’ app info."</string>
+    <string name="permission_needed_allow_access_button_label" msgid="1943133660612924306">"Allow access"</string>
+    <string name="no_backup_image_wallpaper_description" msgid="8303268619408738057">"Live wallpaper service for rotating wallpapers"</string>
+    <string name="daily_refresh_tile_title" msgid="3270456074558525091">"Daily wallpaper"</string>
+    <string name="daily_refresh_tile_subtitle" msgid="3976682014885446443">"Tap to turn on"</string>
+    <string name="start_rotation_dialog_body_live_wallpaper_needed" msgid="5132580257563846082">"Wallpaper will change automatically every day. To finish setup, tap &lt;strong&gt;Set wallpaper&lt;/strong&gt; on the next screen."</string>
+    <string name="start_rotation_dialog_wifi_only_option_message" msgid="3126269859713666225">"Download future wallpapers on Wi-Fi only"</string>
+    <string name="start_rotation_dialog_continue" msgid="276678987852274872">"Continue"</string>
+    <string name="start_rotation_progress_message" msgid="7872623873682262083">"Downloading first wallpaper…"</string>
+    <string name="start_rotation_error_message" msgid="3053799836719618972">"Unable to download first wallpaper. Please check your network settings and try again."</string>
+    <string name="start_rotation_dialog_body" msgid="7903554799046364916">"Wallpaper will change automatically every day"</string>
+    <string name="settings_button_label" msgid="8724734130079207955">"Settings"</string>
+    <string name="explore" msgid="7468719504199497281">"Explore"</string>
+    <string name="next_wallpaper" msgid="3911873152952596232">"Next wallpaper"</string>
+    <string name="wallpaper_disabled_message" msgid="7309484130562148185">"Setting a wallpaper is disabled on this device"</string>
+    <string name="wallpaper_disabled_by_administrator_message" msgid="1551430406714747884">"Setting a wallpaper is disabled by your device administrator"</string>
+    <string name="wallpaper_set_successfully_message" msgid="2958998799111688578">"Wallpaper set successfully"</string>
+    <string name="wallpapers_unavailable_offline_message" msgid="8136405438621689532">"You need an Internet connection to view wallpapers. Please connect and try again."</string>
+    <string name="currently_set_home_wallpaper_thumbnail" msgid="4022381436821898917">"Currently set home screen wallpaper thumbnail"</string>
+    <string name="currently_set_lock_wallpaper_thumbnail" msgid="2094209303934569997">"Currently set lock screen wallpaper thumbnail"</string>
+    <string name="currently_set_wallpaper_thumbnail" msgid="8651887838745545107">"Currently set wallpaper thumbnail"</string>
+    <string name="wallpaper_thumbnail" msgid="569931475923605974">"Wallpaper thumbnail"</string>
+    <string name="explore_home_screen" msgid="8756346794535765482">"Explore home screen wallpaper"</string>
+    <string name="explore_lock_screen" msgid="268938342103703665">"Explore lock screen wallpaper"</string>
+    <string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Refresh daily home screen wallpaper"</string>
+    <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Refresh daily wallpaper"</string>
+    <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Refreshing daily wallpaper…"</string>
+    <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Failed to refresh daily wallpaper. Please check your network connection and try again."</string>
+    <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"On-device wallpapers"</string>
+    <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"On device"</string>
+    <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android wallpaper"</string>
+    <string name="live_wallpapers_category_title" msgid="1814374812192366349">"Live wallpapers"</string>
+    <string name="my_photos_category_title" msgid="4294567122144565273">"My photos"</string>
+    <string name="my_photos_generic_wallpaper_title" msgid="7002867526154631172">"My photo"</string>
+    <string name="fallback_wallpaper_title" msgid="6154655421012506001">"Wallpaper"</string>
+    <string name="app_not_found" msgid="4431461707854088231">"App isn\'t installed."</string>
+    <string name="center_wallpaper_position" msgid="4166894762352288883">"Centre"</string>
+    <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Centre crop"</string>
+    <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Stretch"</string>
+    <string name="preview" msgid="1774602101743861071">"Preview"</string>
+    <string name="tab_info" msgid="818614080690111416">"Info"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Customise"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Settings…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Delete"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Delete this wallpaper from your phone?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Back"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Edit"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Download"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Slideshow wallpaper"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Apply"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Page <xliff:g id="ID_1">%1$d</xliff:g> of <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Next"</string>
+    <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>
+</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 158ce10..cae6b88 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Refresh daily wallpaper"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Refreshing daily wallpaper…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Failed to refresh daily wallpaper. Please check your network connection and try again."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Collapse wallpaper info panel"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Expand wallpaper info panel"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"On-device wallpapers"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"On device"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android wallpaper"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Centre crop"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Stretch"</string>
     <string name="preview" msgid="1774602101743861071">"Preview"</string>
+    <string name="tab_info" msgid="818614080690111416">"Info"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Customise"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Settings…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Delete"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Delete this wallpaper from your phone?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Back"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Edit"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Download"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Slideshow wallpaper"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Apply"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Page <xliff:g id="ID_1">%1$d</xliff:g> of <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Next"</string>
+    <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>
 </resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 158ce10..cae6b88 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Refresh daily wallpaper"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Refreshing daily wallpaper…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Failed to refresh daily wallpaper. Please check your network connection and try again."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Collapse wallpaper info panel"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Expand wallpaper info panel"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"On-device wallpapers"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"On device"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android wallpaper"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Centre crop"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Stretch"</string>
     <string name="preview" msgid="1774602101743861071">"Preview"</string>
+    <string name="tab_info" msgid="818614080690111416">"Info"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Customise"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Settings…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Delete"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Delete this wallpaper from your phone?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Back"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Edit"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Download"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Slideshow wallpaper"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Apply"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Page <xliff:g id="ID_1">%1$d</xliff:g> of <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Next"</string>
+    <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>
 </resources>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..041d2f4
--- /dev/null
+++ b/res/values-en-rXC/strings.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+     Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="wallpaper_app_name" msgid="1719889291772891695">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‎‏‎‎‎‏‏‏‏‏‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎Wallpapers‎‏‎‎‏‎"</string>
+    <!-- no translation found for app_name (8773648973927541493) -->
+    <skip />
+    <string name="select_wallpaper_label" msgid="6989581259339646085">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎‏‎‏‎Wallpaper categories‎‏‎‎‏‎"</string>
+    <string name="set_wallpaper_button_text" msgid="4426286890442731310">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‎‏‎‏‎‎‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‎‏‏‎‎‏‏‏‎‏‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‎Set Wallpaper‎‏‎‎‏‎"</string>
+    <string name="set_wallpaper_progress_message" msgid="7986528287618716715">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‏‏‎‏‏‎‎‏‎‎‏‎‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‎‏‎‏‏‎Setting wallpaper…‎‏‎‎‏‎"</string>
+    <string name="try_again" msgid="8278874823700921234">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‎‏‏‏‏‎‎‎‏‏‎‎‏‎‎‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‎‏‎‎‏‎‎Try again‎‏‎‎‏‎"</string>
+    <string name="set_wallpaper_error_message" msgid="6819986999041085130">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‏‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‎‎Unable to set wallpaper.‎‏‎‎‏‎"</string>
+    <string name="load_wallpaper_error_message" msgid="7913278480467707374">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‏‏‎‏‏‎‏‎‎‎‎‎‎‏‎‏‎‎‎‎‎‏‎‏‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎Unable to load wallpaper. The image is either corrupted or unavailable.‎‏‎‎‏‎"</string>
+    <string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‎‎‏‎‏‎‎‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‎‎‏‎‏‎‎Currently set‎‏‎‎‏‎"</string>
+    <string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‎‎‏‎‏‎‎‎‏‏‎‎‏‎‎‎‎‏‎‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎Daily wallpaper‎‏‎‎‏‎"</string>
+    <string name="wallpaper_destination_both" msgid="1124197176741944063">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‎‎‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‎Home &amp; Lock screen‎‏‎‎‏‎"</string>
+    <string name="home_screen_message" msgid="106444102822522813">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‏‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎Home screen‎‏‎‎‏‎"</string>
+    <string name="lock_screen_message" msgid="1534506081955058013">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‎‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎‎‏‎‎‏‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‏‎Lock screen‎‏‎‎‏‎"</string>
+    <string name="home_and_lock_short_label" msgid="2937922943541927983">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‎‎‏‎‏‏‎‎‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‎‏‎‎‏‎‏‏‎‎‎‎‎‎‎‏‎‏‏‏‏‎Home &amp; Lock‎‏‎‎‏‎"</string>
+    <string name="set_wallpaper_dialog_message" msgid="6114951028768599417">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‏‏‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‎‎‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‎‏‎Set wallpaper‎‏‎‎‏‎"</string>
+    <string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‏‏‎‎‎‏‏‎‏‏‎‏‎‏‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‏‎‏‎‏‎‎Home screen‎‏‎‎‏‎"</string>
+    <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‎‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‎‎‏‎‎‏‎‏‏‎‎‏‎Lock screen‎‏‎‎‏‎"</string>
+    <string name="set_wallpaper_both_destination" msgid="6967226064958263939">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‎‏‎‎‎‏‏‏‏‎‎‏‏‎‎‎‏‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‏‎‎‏‎‏‎‎‎‎‎‏‏‎Home screen and lock screen‎‏‎‎‏‎"</string>
+    <string name="no_backup_image_wallpaper_label" msgid="6316627676107284851">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‏‎‏‏‎‎‏‏‏‏‎‎‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‏‎‎‎‎‏‎‏‏‏‎‎‏‏‎Rotating Image Wallpaper‎‏‎‎‏‎"</string>
+    <string name="permission_needed_explanation" msgid="139166837541426823">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‎‎‎‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‎‏‏‏‏‎‏‎‏‏‎‏‎‎‎‎‏‏‏‎To display the current wallpaper here, ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ needs access to your device\'s storage.‎‏‎‎‏‎"</string>
+    <string name="permission_needed_explanation_go_to_settings" msgid="3923551582092599609">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‎‏‏‎‎‎‎‎‎‏‎‎‎‏‎‎‏‎‎‎‏‏‎‏‎‎‏‎‎‎‎‏‎‎‏‏‏‎‎‏‎To display the current wallpaper here, Wallpapers needs access to your device’s storage.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎To change this setting, go to the Permissions area of Wallpapers’ app info.‎‏‎‎‏‎"</string>
+    <string name="permission_needed_allow_access_button_label" msgid="1943133660612924306">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‎‏‎‎‏‏‏‎‎‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‏‏‏‎‎‏‎‎‏‎‎Allow access‎‏‎‎‏‎"</string>
+    <string name="no_backup_image_wallpaper_description" msgid="8303268619408738057">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‏‎‎‎‏‎‎‎‏‎‏‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‏‎‎‎‎‏‎‎‏‎Live wallpaper service for rotating wallpapers‎‏‎‎‏‎"</string>
+    <string name="daily_refresh_tile_title" msgid="3270456074558525091">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‎‏‏‏‎‎‎‎‏‏‎‎‏‎‏‎‎‎‏‎‎‏‏‏‎‏‎‏‎‎‎‏‏‎Daily wallpaper‎‏‎‎‏‎"</string>
+    <string name="daily_refresh_tile_subtitle" msgid="3976682014885446443">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‏‏‎‎‏‎‏‎‏‏‎Tap to turn on‎‏‎‎‏‎"</string>
+    <string name="start_rotation_dialog_body_live_wallpaper_needed" msgid="5132580257563846082">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‎‏‎‏‎‎‏‎‏‏‎‏‎‎‎‏‏‎‎‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‎‏‎‎‏‎‏‏‏‎‎‎‎‏‎‎Wallpaper will change automatically every day. To finish setup, tap &lt;strong&gt;Set wallpaper&lt;/strong&gt; on the next screen.‎‏‎‎‏‎"</string>
+    <string name="start_rotation_dialog_wifi_only_option_message" msgid="3126269859713666225">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‎‎‏‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‎‏‏‎‎‎‏‎Download future wallpapers on Wi-Fi only‎‏‎‎‏‎"</string>
+    <string name="start_rotation_dialog_continue" msgid="276678987852274872">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‎‏‏‎‏‎‎‏‏‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‎‎‎‎Continue‎‏‎‎‏‎"</string>
+    <string name="start_rotation_progress_message" msgid="7872623873682262083">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎‎‎‏‎‎‏‎‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎Downloading first wallpaper…‎‏‎‎‏‎"</string>
+    <string name="start_rotation_error_message" msgid="3053799836719618972">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‎‎‏‎‏‎‎‎‏‏‎‏‏‎‎‎‏‎‏‏‎‎‏‎‎‏‎‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‏‏‎‎‏‏‏‎‎‎Unable to download first wallpaper. Please check your network settings and try again.‎‏‎‎‏‎"</string>
+    <string name="start_rotation_dialog_body" msgid="7903554799046364916">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‏‏‎‏‎‎‎Wallpaper will change automatically every day‎‏‎‎‏‎"</string>
+    <string name="settings_button_label" msgid="8724734130079207955">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‎‎‏‏‏‏‎‏‏‎‏‏‏‎‏‏‏‎‎‏‏‎‏‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‎‎‎‏‎‎‏‏‎Settings‎‏‎‎‏‎"</string>
+    <string name="explore" msgid="7468719504199497281">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‏‎‎‎‏‏‎‏‎‎‎‏‎‏‏‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‎‏‎Explore‎‏‎‎‏‎"</string>
+    <string name="next_wallpaper" msgid="3911873152952596232">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎‎‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‏‏‎‎‎‎‏‎‎‎‎Next wallpaper‎‏‎‎‏‎"</string>
+    <string name="wallpaper_disabled_message" msgid="7309484130562148185">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‏‎‏‏‎‏‏‏‎‎‏‎‏‏‎‎‎‎‎‏‏‎‎‎‎‎‏‏‏‎‏‎‏‏‎‎‏‎Setting a wallpaper is disabled on this device‎‏‎‎‏‎"</string>
+    <string name="wallpaper_disabled_by_administrator_message" msgid="1551430406714747884">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‏‎‎‎‎‏‎‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‏‏‎‎‎Setting a wallpaper is disabled by your device administrator‎‏‎‎‏‎"</string>
+    <string name="wallpaper_set_successfully_message" msgid="2958998799111688578">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‏‎‎‎‎‎‏‏‏‏‎‎‏‏‎‏‏‏‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‏‎‎‎‎‎‏‎‎Wallpaper set successfully‎‏‎‎‏‎"</string>
+    <string name="wallpapers_unavailable_offline_message" msgid="8136405438621689532">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‏‎‎‏‎‏‎‎‎‏‏‎‏‎‎‎‏‏‎‏‎‎‏‏‎‏‏‎‎‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‏‏‎‎‎You need an Internet connection to view wallpapers. Please connect and try again.‎‏‎‎‏‎"</string>
+    <string name="currently_set_home_wallpaper_thumbnail" msgid="4022381436821898917">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‏‏‏‎‏‎‎‏‏‎‏‎‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎‎‏‎‏‎Currently set home screen wallpaper thumbnail‎‏‎‎‏‎"</string>
+    <string name="currently_set_lock_wallpaper_thumbnail" msgid="2094209303934569997">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‏‎‎‎‎‏‎‏‏‏‎‎‏‎‏‎‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‏‎‏‎Currently set lock screen wallpaper thumbnail‎‏‎‎‏‎"</string>
+    <string name="currently_set_wallpaper_thumbnail" msgid="8651887838745545107">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‎‏‏‏‎‎‎‏‎‎‏‏‎‎‏‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‎‎‏‎‎‏‏‎Currently set wallpaper thumbnail‎‏‎‎‏‎"</string>
+    <string name="wallpaper_thumbnail" msgid="569931475923605974">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‏‎‏‎‏‎‎‎‎‏‏‎‎‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‏‎‏‎‏‏‎‎Wallpaper thumbnail‎‏‎‎‏‎"</string>
+    <string name="explore_home_screen" msgid="8756346794535765482">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎‎‏‎‏‏‎‎‎‎‎‏‎‎‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‏‎‏‎‎Explore home screen wallpaper‎‏‎‎‏‎"</string>
+    <string name="explore_lock_screen" msgid="268938342103703665">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‎‎‏‎‏‏‏‎‎‎‎‎‎‏‏‏‎‎‎‏‎Explore lock screen wallpaper‎‏‎‎‏‎"</string>
+    <string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‏‎‎‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‎‏‎‏‏‏‎‏‏‎‎‏‎‏‎‎‎‏‏‎Refresh daily home screen wallpaper‎‏‎‎‏‎"</string>
+    <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‎‎‎‏‏‎‏‎‎‎‏‎‏‏‎‏‎‎‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‎‎‏‏‎‏‏‏‏‏‏‎Refresh daily wallpaper‎‏‎‎‏‎"</string>
+    <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‎‎‎‏‏‏‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎‏‎Refreshing daily wallpaper…‎‏‎‎‏‎"</string>
+    <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‏‎‏‎‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‏‏‎‏‏‏‎‎Failed to refresh daily wallpaper. Please check your network connection and try again.‎‏‎‎‏‎"</string>
+    <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‏‏‎‏‏‎‏‏‎‎‎‎‎‏‏‎‏‎‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‎‎‎‎‏‎‏‏‎‏‎‎‏‎‏‏‎‎‎On-device wallpapers‎‏‎‎‏‎"</string>
+    <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‎‎‏‎‏‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‏‎On device‎‏‎‎‏‎"</string>
+    <string name="on_device_wallpaper_title" msgid="5262564748034629524">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‎‏‎‏‏‎‎‎‎‎‏‏‎‎‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‏‎‎‎Android wallpaper‎‏‎‎‏‎"</string>
+    <string name="live_wallpapers_category_title" msgid="1814374812192366349">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‏‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‎‎‎‏‏‎‏‎Live wallpapers‎‏‎‎‏‎"</string>
+    <string name="my_photos_category_title" msgid="4294567122144565273">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‎‏‏‎‎‏‎My photos‎‏‎‎‏‎"</string>
+    <string name="my_photos_generic_wallpaper_title" msgid="7002867526154631172">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‎‏‎‎‏‏‎‎‏‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‎‎‏‎‎‎My photo‎‏‎‎‏‎"</string>
+    <string name="fallback_wallpaper_title" msgid="6154655421012506001">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‎‎‏‏‎‏‏‏‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‏‎‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎‎‏‎Wallpaper‎‏‎‎‏‎"</string>
+    <string name="app_not_found" msgid="4431461707854088231">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‎‏‎‎‎‏‏‎‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‎‎‏‏‏‎App isn\'t installed.‎‏‎‎‏‎"</string>
+    <string name="center_wallpaper_position" msgid="4166894762352288883">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‏‎‎‏‏‏‏‎‎‏‎‎‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎‏‏‎‏‎‎‏‎‎‎‏‏‏‎‎‏‏‎Center‎‏‎‎‏‎"</string>
+    <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‏‏‎‎‏‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‎‎‎‎‏‏‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‎‎‎Center crop‎‏‎‎‏‎"</string>
+    <string name="stretch_wallpaper_position" msgid="5002680983147456935">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‏‏‎‏‎‎‏‏‏‎Stretch‎‏‎‎‏‎"</string>
+    <string name="preview" msgid="1774602101743861071">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‏‎‎‏‏‏‎‎‏‏‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎‏‏‏‏‎‏‎‏‎‎‏‏‏‏‎Preview‎‏‎‎‏‎"</string>
+    <string name="tab_info" msgid="818614080690111416">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‏‏‎‎‎‏‎‎‏‏‎‏‎‎‏‎‏‎‏‏‎‏‎‎‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‏‏‏‎‏‏‏‎‎‎‎Info‎‏‎‎‏‎"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‏‎‎‏‏‎‏‎‏‏‎‎‎‎‎‎‎‏‏‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‎‏‏‏‎‏‏‏‎‏‎‏‏‎‎‎‎Customize‎‏‎‎‏‎"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‎‏‏‎‏‎‏‎‏‏‎‏‏‎‎‏‏‏‏‎‎‏‎‎‎‏‎‏‏‎‏‏‏‏‎‎‏‏‎‏‏‎‏‎Settings…‎‏‎‎‏‎"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‎‏‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎‎‏‏‎‏‎‎‏‎‎‎‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎Delete‎‏‎‎‏‎"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‎‎‎‎‎‏‏‏‎‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎‎‎‏‎‎Delete this wallpaper from your phone?‎‏‎‎‏‎"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‏‎‎‏‏‎‎‎‏‎‏‎‏‎‎‏‏‏‏‎‎‏‎‏‎Back‎‏‎‎‏‎"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎‎‎‎‏‏‏‎‎‎‏‏‎‎‏‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‏‎‏‎‎Edit‎‏‎‎‏‎"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‏‎‏‎‏‎‎‏‏‎‏‏‏‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‏‎‏‎Download‎‏‎‎‏‎"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‎‏‏‎‎‎‏‎‎‎‏‏‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‎‎‏‎‎Slideshow Wallpaper‎‏‎‎‏‎"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎Apply‎‏‎‎‏‎"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‏‎‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‏‏‎Page ‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$d</xliff:g>‎‏‎‎‏‏‏‎ of ‎‏‎‎‏‏‎<xliff:g id="ID_2">%2$d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‏‏‏‏‎‎‏‎‏‎‏‏‎‎‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‏‏‎‎‏‏‎‎‎‎Next‎‏‎‎‏‎"</string>
+    <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>
+</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index d96971c..f9e3498 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Actualiza el fondo de pantalla diario"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Actualizando fondo de pantalla diario…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"No se pudo actualizar el fondo de pantalla diario. Comprueba tu conexión de red y vuelve a intentarlo."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Contraer panel de información del fondo de pantalla"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Expandir panel de información del fondo de pantalla"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Fondos del dispositivo"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"En dispositivo"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Fondo de pantalla de Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Recortar y centrar"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Estirar"</string>
     <string name="preview" msgid="1774602101743861071">"Vista previa"</string>
+    <string name="tab_info" msgid="818614080690111416">"Información"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Personalizar"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Configuración…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Borrar"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"¿Quieres borrar este fondo de pantalla del teléfono?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Atrás"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Editar"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Descargar"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Fondo de diapositivas"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Aplicar"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Página <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Siguiente"</string>
+    <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>
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index f28956d..e8f37df 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -26,7 +26,7 @@
     <string name="try_again" msgid="8278874823700921234">"Reintentar"</string>
     <string name="set_wallpaper_error_message" msgid="6819986999041085130">"No se puede establecer el fondo de pantalla."</string>
     <string name="load_wallpaper_error_message" msgid="7913278480467707374">"No se puede cargar el fondo de pantalla. La imagen no está disponible o está dañada."</string>
-    <string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Configurado actualmente"</string>
+    <string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Establecido actualmente"</string>
     <string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Fondo de pantalla diario"</string>
     <string name="wallpaper_destination_both" msgid="1124197176741944063">"Pantalla de inicio y bloqueo"</string>
     <string name="home_screen_message" msgid="106444102822522813">"Pantalla de inicio"</string>
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Actualizar el fondo de pantalla diario"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Actualizando el fondo de pantalla diario…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"No se ha podido actualizar el fondo de pantalla diario. Comprueba tu conexión a Internet y vuelve a intentarlo."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Ocultar el panel de información del fondo de pantalla"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Mostrar el panel de información del fondo de pantalla"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Fondos pantalla en dispositivo"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"En el dispositivo"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Fondo de pantalla de Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Recortar el centro"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Expandir"</string>
     <string name="preview" msgid="1774602101743861071">"Vista previa"</string>
+    <string name="tab_info" msgid="818614080690111416">"Información"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Personalizar"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Ajustes…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Eliminar"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"¿Eliminar este fondo de pantalla de tu teléfono?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Volver"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Editar"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Descargar"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Fondo de diapositivas"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Aplicar"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Página <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Siguiente"</string>
+    <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>
 </resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 8216c44..50a3118 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Päeva taustapildi värskendamine"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Päeva taustapildi värskendamine …"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Päeva taustapildi värskendamine ebaõnnestus. Kontrollige võrguühendust ja proovige uuesti."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Taustapildi teabepaneeli ahendamine"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Taustapildi teabepaneeli laiendamine"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Seadmes olevad taustapildid"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Seadmes"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Androidi taustapilt"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Keskele kärpimine"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Venitamine"</string>
     <string name="preview" msgid="1774602101743861071">"Eelvaade"</string>
+    <string name="tab_info" msgid="818614080690111416">"Teave"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Kohandamine"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Seaded …"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Kustuta"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Kas soovite taustapildi telefonist kustutada?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Tagasi"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Muuda"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Laadi alla"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Taustapiltide slaidiseanss"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Rakenda"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_1">%1$d</xliff:g>. leht <xliff:g id="ID_2">%2$d</xliff:g>-st"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Järgmine"</string>
+    <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>
 </resources>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index ef4d945..122391d 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Freskatu eguneko horma-papera"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Eguneko horma-papera freskatzen…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Ezin izan da freskatu eguneko horma-papera. Egiaztatu sarera konektatuta zaudela eta saiatu berriro."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Tolestu horma-paperari buruzko informazioaren panela"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Zabaldu horma-paperari buruzko informazioaren panela"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Gailuko horma-paperak"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Gailukoak"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android horma-papera"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Erdian, moztuta"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Pantailara egokituta"</string>
     <string name="preview" msgid="1774602101743861071">"Aurreikusi"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informazioa"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Pertsonalizatu"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Ezarpenak…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Ezabatu"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Telefonotik ezabatu nahi duzu horma-papera?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Atzera"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Editatu"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Deskargatu"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Diapositiba-aurkezpenaren horma-papera"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Aplikatu"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g> orria"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Hurrengoa"</string>
+    <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>
 </resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 898c514..a13dba1 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"بازخوانی کاغذدیواری روزانه"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"درحال بازخوانی کاغذدیواری روزانه…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"کاغذدیواری روزانه بازخوانی نشد. لطفاً اتصال شبکه‌تان را بررسی و دوباره امتحان کنید."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"کوچک کردن پانل اطلاعات کاغذ‌دیواری"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"بزرگ کردن پانل اطلاعات کاغذ‌دیواری"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"کاغذدیواری‌های موجود در دستگاه"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"در دستگاه"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"‏کاغذ‌دیواری Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"برش از مرکز برای پر کردن صفحه."</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"کشیدن برای پر کردن صفحه"</string>
     <string name="preview" msgid="1774602101743861071">"پیش‌نمایش"</string>
+    <string name="tab_info" msgid="818614080690111416">"اطلاعات"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"سفارشی کردن"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"تنظیمات…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"حذف"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"این کاغذدیواری از تلفن حذف شود؟"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"برگشت"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"ویرایش"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"بارگیری"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"نمایش اسلاید کاغذدیواری"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"اِعمال"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"صفحه <xliff:g id="ID_1">%1$d</xliff:g> از <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"بعدی"</string>
+    <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>
 </resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 2a5d754..1914f1b 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Siirry seuraavaan taustakuvaan"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Päivitetään päivän taustakuvaa…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Päivän taustakuvan päivittäminen epäonnistui. Tarkista verkkoasetukset ja yritä uudelleen."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Tiivistä taustakuvan tietopaneeli"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Laajenna taustakuvan tietopaneeli"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Laitteella olevat taustakuvat"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Laitteella"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android-taustakuva"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Keskirajaus"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Venytä"</string>
     <string name="preview" msgid="1774602101743861071">"Esikatselu"</string>
+    <string name="tab_info" msgid="818614080690111416">"Tiedot"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Personoi"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Asetukset…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Poista"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Poistetaanko tämä taustakuva puhelimelta?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Takaisin"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Muokkaa"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Lataa"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Diasarja taustakuvana"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Käytä"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Sivu <xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Seuraava"</string>
+    <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>
 </resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 539256a..d31d006 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Actualiser le fond d\'écran quotidien"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Actualisation du fond d\'écran quotidien en cours…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Échec de l\'actualisation du fond d\'écran quotidien. Veuillez vérifier votre connexion réseau, puis réessayer."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Réduire le panneau d\'information du fond d\'écran"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Développer le panneau d\'information du fond d\'écran"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Fonds d\'écran sur l\'appareil"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Sur l\'appareil"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Fond d\'écran Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Rogné au centre"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Étiré"</string>
     <string name="preview" msgid="1774602101743861071">"Aperçu"</string>
+    <string name="tab_info" msgid="818614080690111416">"Info"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Personnaliser"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Paramètres…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Supprimer"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Supprimer ce fond d\'écran de votre téléphone?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Retour"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Modifier"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Télécharger"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Fond d\'écran diaporama"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Appliquer"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Page <xliff:g id="ID_1">%1$d</xliff:g> sur <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Suivant"</string>
+    <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>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index f075e19..f92dae4 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Actualiser le fond d\'écran quotidien"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Actualisation du fond d\'écran quotidien…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Échec de l\'actualisation du fond d\'écran quotidien. Veuillez vérifier votre connexion réseau, puis réessayer."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Réduire le panneau d\'information du fond d\'écran"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Développer le panneau d\'information du fond d\'écran"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Fonds d\'écran sur l\'appareil"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Sur l\'appareil"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Fond d\'écran Android"</string>
@@ -79,5 +77,20 @@
     <string name="center_wallpaper_position" msgid="4166894762352288883">"Centrer"</string>
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Recadrer et centrer"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Étirer"</string>
-    <string name="preview" msgid="1774602101743861071">"Prévisualiser"</string>
+    <string name="preview" msgid="1774602101743861071">"Aperçu"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informations"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Personnaliser"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Paramètres…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Supprimer"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Supprimer ce fond d\'écran de votre téléphone ?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Retour"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Modifier"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Télécharger"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Fond d\'écran diaporama"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Appliquer"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Page <xliff:g id="ID_1">%1$d</xliff:g> sur <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Suivante"</string>
+    <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>
 </resources>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index fc49812..6791ddd 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Actualiza o fondo de pantalla diario"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Actualizando fondo de pantalla diario…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Produciuse un erro ao actualizar o fondo de pantalla diario. Comproba a conexión de rede e téntao de novo."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Contrae o panel de información do fondo de pantalla"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Desprega o panel de información do fondo de pantalla"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Fondos no dispositivo"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"No dispositivo"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Fondo de pantalla de Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Recortar no centro"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Estirar"</string>
     <string name="preview" msgid="1774602101743861071">"Mostrar vista previa"</string>
+    <string name="tab_info" msgid="818614080690111416">"Información"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Personalizar"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Configuración…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Eliminar"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Queres eliminar este fondo de pantalla do teu teléfono?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Atrás"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Editar"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Descargar"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Fondo: diapositivas"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Aplicar"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Páxina <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Seguinte"</string>
+    <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>
 </resources>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index e9fcf97..9aea1a3 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"દૈનિક વૉલપેપર રિફ્રેશ કરો"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"દૈનિક વૉલપેપર રિફ્રેશ કરી રહ્યાં છીએ…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"દૈનિક વૉલપેપર રિફ્રેશ કરવામાં નિષ્ફળ રહ્યાં. કૃપા કરીને તમારું નેટવર્ક કનેક્શન ચેક કરો અને ફરી પ્રયાસ કરો."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"વૉલપેપર માહિતી પૅનલ સંકુચિત કરો"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"વૉલપેપર માહિતી પૅનલ વિસ્તૃત કરો"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"ઉપકરણ પરના વૉલપેપર"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"ઉપકરણ પર"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android વૉલપેપર"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"મધ્યમાંથી કાપેલ"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"ખેંચેલ"</string>
     <string name="preview" msgid="1774602101743861071">"પ્રીવ્યૂ કરો"</string>
+    <string name="tab_info" msgid="818614080690111416">"માહિતી"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"કસ્ટમાઇઝ કરો"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"સેટિંગ…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"ડિલીટ કરો"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"તમારા ફોનમાંથી આ વૉલપેપર ડિલીટ કરીએ?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"પાછળ"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"ફેરફાર કરો"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"ડાઉનલોડ કરો"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"વૉલપેપરનો સ્લાઇડશો"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"લાગુ કરો"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_2">%2$d</xliff:g>માંથી <xliff:g id="ID_1">%1$d</xliff:g> પેજ"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"આગળ"</string>
+    <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>
 </resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 453ecb0..927e71b 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"रोज़ बदलने वाला वॉलपेपर रीफ़्रेश करें"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"रोज़ बदलने वाला वॉलपेपर रीफ़्रेश हो रहा है…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"रोज़ बदलने वाला वॉलपेपर रीफ़्रेश नहीं हो पा रहा है. कृपया अपना इंटरनेट कनेक्शन जाँचें और फिर से कोशिश करें."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"वॉलपेपर सूचना पैनल को छोटा करें"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"वॉलपेपर सूचना पैनल को बड़ा करें"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"डिवाइस पर पहले से मौजूद वॉलपेपर"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"डिवाइस पर मौजूद वॉलपेपर"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android वॉलपेपर"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"बीच का हिस्सा रखें"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"स्क्रीन के हिसाब से खींचें"</string>
     <string name="preview" msgid="1774602101743861071">"झलक"</string>
+    <string name="tab_info" msgid="818614080690111416">"जानकारी"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"पसंद के मुताबिक बनाएं"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"सेटिंग…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"मिटाएं"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"क्या आप अपने फ़ोन से यह वॉलपेपर मिटाना चाहते हैं?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"वापस जाएं"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"बदलाव करें"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"डाउनलोड करें"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"वॉलपेपर का स्लाइड शो देखें"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"लागू करें"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"पेज <xliff:g id="ID_2">%2$d</xliff:g> का <xliff:g id="ID_1">%1$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"आगे बढ़ें"</string>
+    <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>
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index baa985b..dae9eaa 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Osvježi dnevnu pozadinu"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Osvježavanje dnevne pozadine…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Osvježavanje dnevne pozadine nije uspjelo. Provjerite mrežnu vezu i pokušajte ponovo."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Sažmi ploču s podacima o pozadini"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Proširi ploču s podacima o pozadini"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Pozadine na uređaju"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Na uređaju"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android pozadina"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Centriranje s obrezivanjem"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Rastezanje"</string>
     <string name="preview" msgid="1774602101743861071">"Pregled"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informacije"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Prilagodba"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Postavke…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Izbriši"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Želite li izbrisati tu pozadinu s telefona?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Natrag"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Uredi"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Preuzmi"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Pozadina s prezentacijom"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Primijeni"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Stranica <xliff:g id="ID_1">%1$d</xliff:g> od <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Sljedeće"</string>
+    <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>
 </resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index de05be5..c1ffc67 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Napi háttérkép frissítése"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Napi háttérkép frissítése…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Nem sikerült frissíteni a napi háttérképet. Ellenőrizze hálózati kapcsolatát, majd próbálkozzon újra."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Háttérkép információs panelének összecsukása"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Háttérkép információs panelének kibontása"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Eszközön lévő háttérképek"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Az eszközön"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android-háttérkép"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Középre igazítás körülvágással"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Nyújtás"</string>
     <string name="preview" msgid="1774602101743861071">"Előnézet"</string>
+    <string name="tab_info" msgid="818614080690111416">"Információ"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Személyre szabás"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Beállítások…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Törlés"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Törli ezt a háttérképet a telefonjáról?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Vissza"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Módosítás"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Letöltés"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Háttérkép diavetítése"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Alkalmaz"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_2">%2$d</xliff:g>/<xliff:g id="ID_1">%1$d</xliff:g>. oldal"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Következő"</string>
+    <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>
 </resources>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 9ea0696..3bedcc2 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Թարմացնել օրվա պաստառը"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Օրվա պաստառը թարմացվում է…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Չհաջողվեց թարմացնել օրվա պաստառը: Ստուգեք ինտերնետ կապը և նորից փորձեք:"</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Թաքցնել պաստառի տվյալների վահանակը"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Ընդարձակել պաստառի տվյալների վահանակը"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Սարքում պահված պաստառներ"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Սարքում պահված"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android պաստառ"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Կենտրոնում, կտրած"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Ձգել"</string>
     <string name="preview" msgid="1774602101743861071">"Նախադիտել"</string>
+    <string name="tab_info" msgid="818614080690111416">"Տեղեկություն"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Կարգավորել"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Կարգավորումներ"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Ջնջել"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Ջնջե՞լ այս պաստառը հեռախոսից։"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Հետ"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Փոփոխել"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Ներբեռնել"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Պատկերահանդեսի պաստառ"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Կիրառել"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Էջ <xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Առաջ"</string>
+    <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>
 </resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index afe8069..c86abd5 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Muat ulang wallpaper harian"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Memuat ulang wallpaper harian…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Gagal memuat ulang wallpaper harian. Harap periksa koneksi jaringan Anda dan coba lagi."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Ciutkan panel info wallpaper"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Luaskan panel info wallpaper"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Wallpaper di perangkat"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Di perangkat"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Wallpaper Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Crop tengah"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Regang"</string>
     <string name="preview" msgid="1774602101743861071">"Pratinjau"</string>
+    <string name="tab_info" msgid="818614080690111416">"Info"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Sesuaikan"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Setelan…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Hapus"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Hapus wallpaper ini dari ponsel Anda?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Kembali"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Edit"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Download"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Wallpaper Slideshow"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Terapkan"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Halaman <xliff:g id="ID_1">%1$d</xliff:g> dari <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Berikutnya"</string>
+    <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>
 </resources>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 7a1d53f..60764e1 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Uppfæra daglegt veggfóður"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Uppfærir daglegt veggfóður…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Ekki tókst að endurnýja daglegt veggfóður. Athugaðu nettenginguna og reyndu aftur."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Loka upplýsingasvæði veggfóðurs"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Stækka upplýsingasvæði veggfóðurs"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Veggfóður í tækinu"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Í tækinu"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android veggfóður"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Miðjuskurður"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Teygja"</string>
     <string name="preview" msgid="1774602101743861071">"Forskoða"</string>
+    <string name="tab_info" msgid="818614080690111416">"Upplýsingar"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Sérsníða"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Stillingar…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Eyða"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Viltu eyða þessu veggfóðri úr símanum?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Til baka"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Breyta"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Sækja"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Veggfóður með skyggnusýningu"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Nota"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Síða <xliff:g id="ID_1">%1$d</xliff:g> af <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Áfram"</string>
+    <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>
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 2d8cc15..f3fc99f 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Aggiorna lo sfondo giornaliero"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Aggiornamento dello sfondo giornaliero…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Impossibile aggiornare lo sfondo giornaliero. Controlla la connessione di rete e riprova."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Comprime il riquadro informazioni dello sfondo"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Espande il riquadro informazioni dello sfondo"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Sfondi sul dispositivo"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Sul dispositivo"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Sfondo Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Ritaglia al centro"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Allunga"</string>
     <string name="preview" msgid="1774602101743861071">"Anteprima"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informazioni"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Personalizza"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Impostazioni…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Elimina"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Vuoi eliminare questo sfondo dal telefono?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Indietro"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Modifica"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Scarica"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Sfondo slideshow"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Applica"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Pagina <xliff:g id="ID_1">%1$d</xliff:g> di <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Avanti"</string>
+    <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>
 </resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index d8a697f..5213a6c 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"רענון הטפט היומי"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"מרענן את הטפט היומי..."</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"רענון הטפט היומי נכשל. יש לבדוק את החיבור לרשת ולנסות שוב."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"כיווץ החלונית של פרטי הטפט"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"הרחבה של חלונית פרטי הטפט"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"טפטים במכשיר"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"במכשיר"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"‏טפט ל-Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"ממורכז וחתוך"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"מתוח"</string>
     <string name="preview" msgid="1774602101743861071">"תצוגה מקדימה"</string>
+    <string name="tab_info" msgid="818614080690111416">"מידע"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"התאמה אישית"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"הגדרות…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"מחיקה"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"למחוק את הטפט הזה מהטלפון?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"חזרה"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"עריכה"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"הורדה"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"טפט עם מצגת"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"אישור"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"דף <xliff:g id="ID_1">%1$d</xliff:g> מתוך <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"הבא"</string>
+    <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>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index bc84a91..3178ee3 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -27,7 +27,7 @@
     <string name="set_wallpaper_error_message" msgid="6819986999041085130">"壁紙を設定できませんでした。"</string>
     <string name="load_wallpaper_error_message" msgid="7913278480467707374">"壁紙を読み込めません。画像が破損しているか、使用できません。"</string>
     <string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"現在の設定"</string>
-    <string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"毎日の壁紙"</string>
+    <string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"日替り壁紙"</string>
     <string name="wallpaper_destination_both" msgid="1124197176741944063">"ホーム画面とロック画面"</string>
     <string name="home_screen_message" msgid="106444102822522813">"ホーム画面"</string>
     <string name="lock_screen_message" msgid="1534506081955058013">"ロック画面"</string>
@@ -41,7 +41,7 @@
     <string name="permission_needed_explanation_go_to_settings" msgid="3923551582092599609">"現在の壁紙をここに表示するには、壁紙にデバイスのストレージへのアクセス権限を許可する必要があります。\n\nこの設定を変更するには、壁紙のアプリ情報の [権限] に移動してください。"</string>
     <string name="permission_needed_allow_access_button_label" msgid="1943133660612924306">"アクセスを許可"</string>
     <string name="no_backup_image_wallpaper_description" msgid="8303268619408738057">"画像が切り替わるライブ壁紙サービス"</string>
-    <string name="daily_refresh_tile_title" msgid="3270456074558525091">"毎日の壁紙"</string>
+    <string name="daily_refresh_tile_title" msgid="3270456074558525091">"日替わり壁紙"</string>
     <string name="daily_refresh_tile_subtitle" msgid="3976682014885446443">"タップすると有効になります"</string>
     <string name="start_rotation_dialog_body_live_wallpaper_needed" msgid="5132580257563846082">"毎日、壁紙が自動的に変わります。設定を完了するには、次の画面で [&lt;strong&gt;壁紙を設定&lt;/strong&gt;] をタップします。"</string>
     <string name="start_rotation_dialog_wifi_only_option_message" msgid="3126269859713666225">"今後、Wi-Fi 接続時のみ壁紙をダウンロードする"</string>
@@ -62,12 +62,10 @@
     <string name="wallpaper_thumbnail" msgid="569931475923605974">"壁紙のサムネイル"</string>
     <string name="explore_home_screen" msgid="8756346794535765482">"ホーム画面の壁紙の詳細"</string>
     <string name="explore_lock_screen" msgid="268938342103703665">"ロック画面の壁紙の詳細"</string>
-    <string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"ホーム画面の毎日の壁紙を更新"</string>
+    <string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"ホーム画面の日替り壁紙を更新"</string>
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"毎日の壁紙を更新"</string>
-    <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"毎日の壁紙を更新しています…"</string>
-    <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"毎日の壁紙を更新できませんでした。ネットワーク接続を確認してからもう一度お試しください。"</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"壁紙の情報パネルを折りたたむ"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"壁紙の情報パネルを展開"</string>
+    <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"日替り壁紙を更新しています…"</string>
+    <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"日替り壁紙を更新できませんでした。ネットワーク接続を確認してからもう一度お試しください。"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"デバイスに保存されている壁紙"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"デバイス上"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android の壁紙"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"中央で切り抜き"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"拡大"</string>
     <string name="preview" msgid="1774602101743861071">"プレビュー"</string>
+    <string name="tab_info" msgid="818614080690111416">"情報"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"カスタマイズ"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"設定…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"削除"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"スマートフォンからこの壁紙を削除しますか?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"戻る"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"編集"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"ダウンロード"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"スライドショーの壁紙"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"適用"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g> ページ目"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"次へ"</string>
+    <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>
 </resources>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 9a41fc9..238ab1f 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"ყოველდღიური ფონის განახლება"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"მიმდინარეობს ყოველდღიური ფონის განახლება…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"ყოველდღიური ფონი ვერ განახლდა. გთხოვთ, შეამოწმოთ ქსელის კავშირი და ხელახლა ცადოთ."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"ფონის ინფორმაციის პანელის ჩაკეცვა"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"ფონის ინფორმაციის პანელის გაშლა"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"მოწყობილობაზე შენახული ფონები"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"მოწყობილობიდან"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android ფონი"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"ცენტრში ჩამოჭრა"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"გადაჭიმვა"</string>
     <string name="preview" msgid="1774602101743861071">"გადახედვა"</string>
+    <string name="tab_info" msgid="818614080690111416">"ინფორმაცია"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"მორგება"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"პარამეტრები..."</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"წაშლა"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"წაიშალოს ეს ფონი თქვენი ტელეფონიდან?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"უკან"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"რედაქტირება"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"ჩამოტვირთვა"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"ფონების სლაიდშოუ"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"მისადაგება"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"გვერდი <xliff:g id="ID_1">%1$d</xliff:g> / <xliff:g id="ID_2">%2$d</xliff:g>-დან"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"შემდეგი"</string>
+    <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>
 </resources>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 03094c0..f681d0c 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -21,7 +21,7 @@
     <!-- no translation found for app_name (8773648973927541493) -->
     <skip />
     <string name="select_wallpaper_label" msgid="6989581259339646085">"Тұсқағаз санаттары"</string>
-    <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Тұсқағаз орнату"</string>
+    <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Тұсқағаз етіп орнату"</string>
     <string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Тұсқағаз орнатылуда…"</string>
     <string name="try_again" msgid="8278874823700921234">"Қайталау"</string>
     <string name="set_wallpaper_error_message" msgid="6819986999041085130">"Тұсқағаз орнатылмады."</string>
@@ -32,7 +32,7 @@
     <string name="home_screen_message" msgid="106444102822522813">"Негізгі экран"</string>
     <string name="lock_screen_message" msgid="1534506081955058013">"Құлыпталған экран"</string>
     <string name="home_and_lock_short_label" msgid="2937922943541927983">"Негізгі және құлыпталған экран"</string>
-    <string name="set_wallpaper_dialog_message" msgid="6114951028768599417">"Тұсқағаз орнату"</string>
+    <string name="set_wallpaper_dialog_message" msgid="6114951028768599417">"Тұсқағаз етіп орнату"</string>
     <string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"Негізгі экран"</string>
     <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"Құлыпталған экран"</string>
     <string name="set_wallpaper_both_destination" msgid="6967226064958263939">"Негізгі экран және құлыпталған экран"</string>
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Күнделікті тұсқағазды ауыстыру"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Күнделікті тұсқағаз ауыстырылуда…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Күнделікті тұсқағаз ауыстырылмады. Желі байланысын тексеріп, әрекетті қайталаңыз."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Тұсқағаздың ақпарат панелін жию"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Тұсқағаздың ақпарат панелін жаю"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Құрылғыдағы тұсқағаздар"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Құрылғыда"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android тұсқағазы"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Ортасынан қию"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Созу"</string>
     <string name="preview" msgid="1774602101743861071">"Алдын ала қарау"</string>
+    <string name="tab_info" msgid="818614080690111416">"Ақпарат"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Реттеу"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Параметрлер…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Жою"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Бұл тұсқағаз телефоннан жойылсын ба?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Артқа"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Өзгерту"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Жүктеп алу"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Слайдшоу тұсқағазы"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Қолдану"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g> бет"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Келесі"</string>
+    <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>
 </resources>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index dba3d35..eff70f8 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -42,7 +42,7 @@
     <string name="permission_needed_allow_access_button_label" msgid="1943133660612924306">"ផ្តល់សិទិ្ធ​ចូលប្រើ"</string>
     <string name="no_backup_image_wallpaper_description" msgid="8303268619408738057">"សេវាកម្មផ្ទាំងរូបភាពរស់រវើកសម្រាប់បង្វិលផ្ទាំងរូបភាព"</string>
     <string name="daily_refresh_tile_title" msgid="3270456074558525091">"ផ្ទាំងរូបភាពប្រចាំថ្ងៃ"</string>
-    <string name="daily_refresh_tile_subtitle" msgid="3976682014885446443">"ប៉ះដើម្បីបើក"</string>
+    <string name="daily_refresh_tile_subtitle" msgid="3976682014885446443">"ចុចដើម្បីបើក"</string>
     <string name="start_rotation_dialog_body_live_wallpaper_needed" msgid="5132580257563846082">"Wallpaper នឹង​ផ្លាស់​ប្ដូរ​ដោយស្វ័យ​ប្រវត្តិ​ជារៀងរាល់ថ្ងៃ។ ដើម្បី​បញ្ចប់​ការ​រៀបចំ សូម​ចុច &lt;strong&gt;កំណត់​ផ្ទាំងរូបភាព&lt;/strong&gt; នៅលើ​អេក្រង់​បន្ទាប់។"</string>
     <string name="start_rotation_dialog_wifi_only_option_message" msgid="3126269859713666225">"ទាញយកផ្ទាំងរូបភាពនៅពេលក្រោយតាមរយៈ Wi-Fi តែប៉ុណ្ណោះ"</string>
     <string name="start_rotation_dialog_continue" msgid="276678987852274872">"បន្ត"</string>
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"ផ្ទុកផ្ទាំងរូបភាពប្រចាំថ្ងៃឡើងវិញ"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"កំពុងផ្ទុកផ្ទាំងរូបភាពប្រចាំថ្ងៃឡើងវិញ…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"បានបរាជ័យក្នុងការផ្ទុកផ្ទាំងរូបភាពប្រចាំថ្ងៃឡើងវិញ។ សូមពិនិត្យការតភ្ជាប់បណ្តាញរបស់អ្នក ហើយព្យាយាមម្តងទៀត។"</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"បង្រួមផ្ទាំងព័ត៌មានផ្ទាំងរូបភាព"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"ពង្រីកផ្ទាំងព័ត៌មានផ្ទាំងរូបភាព"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"ផ្ទាំងរូបភាពនៅលើឧបករណ៍"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"នៅ​លើ​ឧបករណ៍"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"ផ្ទាំងរូបភាព Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"ច្រឹប​កណ្តាល"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"ទាញ"</string>
     <string name="preview" msgid="1774602101743861071">"មើលសាកល្បង"</string>
+    <string name="tab_info" msgid="818614080690111416">"ព័ត៌មាន"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"ប្ដូរ​តាម​បំណង"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"ការកំណត់…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"លុប"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"លុប​ផ្ទាំងរូបភាពនេះ​ពី​ទូរសព្ទរបស់អ្នកដែរទេ?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"ថយក្រោយ"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"កែ"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"ទាញយក"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"ផ្ទាំងរូបភាព​បញ្ចាំងស្លាយ"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"ប្រើ"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"ទំព័រ <xliff:g id="ID_1">%1$d</xliff:g> នៃ <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"បន្ទាប់"</string>
+    <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>
 </resources>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index c6cf1d4..2a51162 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"ದಿನನಿತ್ಯದ ವಾಲ್‌ಪೇಪರ್ ಅನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡಿ"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"ದೈನಂದಿನ ವಾಲ್‌ಪೇಪರ್ ಅನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡಲಾಗುತ್ತಿದೆ…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"ಪ್ರತಿದಿನದ ವಾಲ್‌ಪೇಪರ್ ರಿಫ್ರೆಶ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ. ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"ವಾಲ್‌ಪೇಪರ್ ಮಾಹಿತಿ ಫಲಕ ಸಂಕುಚಿಸಿ"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"ವಾಲ್‌ಪೇಪರ್ ಮಾಹಿತಿ ಫಲಕ ವಿಸ್ತರಿಸಿ"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"ಸಾಧನದಲ್ಲಿನ ವಾಲ್‌ಪೇಪರ್‌ಗಳು"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"ಸಾಧನದಲ್ಲಿ"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android ವಾಲ್‌ಪೇಪರ್"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"ಮಧ್ಯಕ್ಕೆ ಕ್ರಾಪ್ ಮಾಡಿ"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"ವಿಸ್ತರಿಸಿ"</string>
     <string name="preview" msgid="1774602101743861071">"ಪೂರ್ವವೀಕ್ಷಣೆ"</string>
+    <string name="tab_info" msgid="818614080690111416">"ಮಾಹಿತಿ"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"ಕಸ್ಟಮೈಜ್‌ ಮಾಡಿ"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು..."</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"ಅಳಿಸಿ"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"ನಿಮ್ಮ ಫೋನ್‌ನಿಂದ ಈ ವಾಲ್‌ಪೇಪರ್ ಅನ್ನು ಅಳಿಸುವುದೇ?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"ಹಿಂದೆ"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"ಎಡಿಟ್ ಮಾಡಿ"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"ಡೌನ್‌ಲೋಡ್"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"ಸ್ಲೈಡ್‌ಶೋ ವಾಲ್‌ಪೇಪರ್"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"ಅನ್ವಯಿಸಿ"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"ಪುಟ <xliff:g id="ID_2">%2$d</xliff:g> ರಲ್ಲಿ <xliff:g id="ID_1">%1$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"ಮುಂದಕ್ಕೆ"</string>
+    <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>
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 6f10f4f..18db06f 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"일일 배경화면 새로고침"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"일일 배경화면 새로고침 중..."</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"일일 배경화면을 새로고침할 수 없습니다. 네트워크 연결을 확인한 후 다시 시도해 주세요."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"배경화면 정보 패널 접기"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"배경화면 정보 패널 펼치기"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"기기 배경화면"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"기기에 보관"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android 배경화면"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"중앙 자르기"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"확대"</string>
     <string name="preview" msgid="1774602101743861071">"미리보기"</string>
+    <string name="tab_info" msgid="818614080690111416">"정보"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"맞춤설정"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"설정…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"삭제"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"휴대전화에서 이 배경화면을 삭제하시겠습니까?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"뒤로"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"수정"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"다운로드"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"배경화면 슬라이드쇼"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"적용"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_2">%2$d</xliff:g>페이지 중 <xliff:g id="ID_1">%1$d</xliff:g>페이지"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"다음"</string>
+    <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>
 </resources>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index b56b372..3de5668 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -47,7 +47,7 @@
     <string name="start_rotation_dialog_wifi_only_option_message" msgid="3126269859713666225">"Келечекте тушкагаздар Wi-Fi аркылуу гана жүктөлүп алынсын"</string>
     <string name="start_rotation_dialog_continue" msgid="276678987852274872">"Улантуу"</string>
     <string name="start_rotation_progress_message" msgid="7872623873682262083">"Биринчи тушкагаз жүктөлүп алынууда…"</string>
-    <string name="start_rotation_error_message" msgid="3053799836719618972">"Биринчи тушкагаз жүктөлүп алынбай жатат. Тармак жөндөөлөрүңүздү текшерип, кайра аракет кылыңыз."</string>
+    <string name="start_rotation_error_message" msgid="3053799836719618972">"Биринчи тушкагаз жүктөлүп алынбай жатат. Тармак жөндөөлөрүңүздү текшерип, кайталап көрүңүз."</string>
     <string name="start_rotation_dialog_body" msgid="7903554799046364916">"Тушкагаз күн сайын автоматтык түрдө алмашып турат"</string>
     <string name="settings_button_label" msgid="8724734130079207955">"Жөндөөлөр"</string>
     <string name="explore" msgid="7468719504199497281">"Изилдөө"</string>
@@ -55,7 +55,7 @@
     <string name="wallpaper_disabled_message" msgid="7309484130562148185">"Бул түзмөктө тушкагазды жөндөө өчүрүлгөн"</string>
     <string name="wallpaper_disabled_by_administrator_message" msgid="1551430406714747884">"Тушкагазды жөндөө администраторуңуз тарабынан өчүрүлгөн"</string>
     <string name="wallpaper_set_successfully_message" msgid="2958998799111688578">"Тушкагаз ийгиликтүү орнотулду"</string>
-    <string name="wallpapers_unavailable_offline_message" msgid="8136405438621689532">"Тушкагаздарды көрүү үчүн Интернетке туташуу керек. Интернетке туташып туруп, кайра аракет кылыңыз."</string>
+    <string name="wallpapers_unavailable_offline_message" msgid="8136405438621689532">"Тушкагаздарды көрүү үчүн Интернетке туташуу керек. Интернетке туташып туруп, кайталап көрүңүз."</string>
     <string name="currently_set_home_wallpaper_thumbnail" msgid="4022381436821898917">"Башкы экрандын учурда коюлган тушкагаз эскизи"</string>
     <string name="currently_set_lock_wallpaper_thumbnail" msgid="2094209303934569997">"Кулпуланган экрандын учурда коюлган тушкагаз эскизи"</string>
     <string name="currently_set_wallpaper_thumbnail" msgid="8651887838745545107">"Учурда коюлган тушкагаз эскизи"</string>
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Күнүмдүк тушкагазды жаңыртуу"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Күнүмдүк тушкагаз жаңыртылууда…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Күнүмдүк тушкагаз жаңыртылбай калды. Интернетке туташууңузду текшерип, дагы бир жолу аракет кылыңыз."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Тушкагаздын маалымат панелин жыйыштыруу"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Тушкагаздын маалымат панелин жайып көрсөтүү"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Түзмөктөгү тушкагаздар"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Түзмөктө"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android тушкагазы"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Ортосуна тууралап кесүү"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Чоюу"</string>
     <string name="preview" msgid="1774602101743861071">"Алдын ала көрүү"</string>
+    <string name="tab_info" msgid="818614080690111416">"Маалымат"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Ыңгайлаштыруу"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Жөндөөлөр…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Жок кылуу"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Бул тушкагаз телефонуңуздан өчүрүлсүнбү?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Артка"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Түзөтүү"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Жүктөп алуу"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Тушкагазды слайдшоу катары көрсөтүү"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Колдонуу"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_2">%2$d</xliff:g> ичинен <xliff:g id="ID_1">%1$d</xliff:g>-барак"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Кийинки"</string>
+    <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>
 </resources>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 1f5bc34..ebf8ec2 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"ໂຫຼດຮູບພື້ນຫຼັງຄືນໃໝ່ທຸກມື້"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"ກຳລັງໂຫຼດຂໍ້ມູນຮູບພື້ນຫຼັງປະຈຳວັນຄືນໃໝ່…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"ໂຫຼດຮູບພື້ນຫຼັງຄືນໃໝ່ທຸກມື້ບໍ່ສຳເລັດ. ກະລຸນາກວດສອບການເຊື່ອມຕໍ່ອິນເຕີເນັດຂອງທ່ານແລ້ວລອງໃໝ່ອີກຄັ້ງ."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"ຫຍໍ້ແຖບຂໍ້ມູນຮູບພື້ນຫຼັງ"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"ຂະຫຍາຍແຖບຂໍ້ມູນຮູບພື້ນຫຼັງ"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"ຮູບພື້ນຫຼັງໃນເຄື່ອງ"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"ໃນ​ອຸ​ປະ​ກອນ"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"ຮູບພື້ນຫຼັງ Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"ຕັດເຄິ່ງກາງ"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"ຍືດ"</string>
     <string name="preview" msgid="1774602101743861071">"ຕົວຢ່າງ"</string>
+    <string name="tab_info" msgid="818614080690111416">"ຂໍ້ມູນ"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"ປັບແຕ່ງ"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"ການຕັ້ງຄ່າ…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"ລຶບອອກ"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"ລຶບຮູບພື້ນຫຼັງນີ້ອອກຈາກໂທລະສັບຂອງທ່ານບໍ?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"ກັບຄືນ"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"ແກ້ໄຂ"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"ດາວໂຫຼດ"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"ຮູບພື້ນຫຼັງສະໄລ້ໂຊ"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"ນຳໃຊ້"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"ໜ້າທີ <xliff:g id="ID_1">%1$d</xliff:g> ຈາກທັງໝົດ <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"ຕໍ່ໄປ"</string>
+    <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>
 </resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 80fa37e..17852fb 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Atnaujinti dienos ekrano foną"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Atnaujinamas dienos ekrano fonas…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Nepavyko atnaujinti dienos ekrano fono. Patikrinkite tinklo ryšį ir bandykite dar kartą."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Sutraukti ekrano fono informacijos skydelį"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Išskleisti ekrano fono informacijos skydelį"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Ekrano fonai įrenginyje"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Įrenginyje"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"„Android“ ekrano fonas"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Apkirpti centre"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Ištempti"</string>
     <string name="preview" msgid="1774602101743861071">"Peržiūra"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informacija"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Tinkinimas"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Nustatymai…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Ištrinti"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Ištrinti šį ekrano foną iš telefono?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Atgal"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Redaguoti"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Atsisiųsti"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Ekrano fono skaidrių demonstr."</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Taikyti"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_1">%1$d</xliff:g> psl. iš <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Kitas"</string>
+    <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>
 </resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 318c0f8..1e7c1d7 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Atsvaidzināt dienas fona tapeti"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Notiek dienas fona tapetes atsvaidzināšana…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Neizdevās atsvaidzināt dienas fona tapeti. Lūdzu, pārbaudiet tīkla savienojumu un mēģiniet vēlreiz."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Sakļaut fona tapetes informācijas paneli"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Izvērst fona tapetes informācijas paneli"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Fona tapetes ierīcē"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Ierīcē"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android fona tapete"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Apgriezt centrā"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Pielāgot"</string>
     <string name="preview" msgid="1774602101743861071">"Priekšskatīt"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informācija"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Pielāgošana"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Iestatījumi…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Dzēst"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Vai dzēst šo fona tapeti no tālruņa?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Atpakaļ"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Rediģēt"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Lejupielādēt"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Fona tapešu slaidrāde"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Lietot"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_1">%1$d</xliff:g>. lapa no <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Tālāk"</string>
+    <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>
 </resources>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 9f2901f..7efd41a 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Освежи го дневниот тапет"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Се освежува дневниот тапет…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Освежувањето на дневниот тапет не успеа. Проверете ја мрежната врска и обидете се повторно."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Собери ја информациската табла на тапетот"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Прошири ја информациската табла на тапетот"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Тапети на уредот"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"На уредот"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Тапет од Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Исечи централно"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Растегни"</string>
     <string name="preview" msgid="1774602101743861071">"Преглед"</string>
+    <string name="tab_info" msgid="818614080690111416">"Информации"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Приспособување"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Поставки…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Избриши"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Да се избрише тапетов од телефонот?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Назад"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Измени"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Преземи"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Тапет со приказ на слајдови"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Примени"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Страница <xliff:g id="ID_1">%1$d</xliff:g> од <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Следнa"</string>
+    <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>
 </resources>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index f70fbf0..cdd63ef 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -21,7 +21,7 @@
     <!-- no translation found for app_name (8773648973927541493) -->
     <skip />
     <string name="select_wallpaper_label" msgid="6989581259339646085">"വാൾപേപ്പർ വിഭാഗങ്ങൾ"</string>
-    <string name="set_wallpaper_button_text" msgid="4426286890442731310">"വാൾപേപ്പർ സജ്ജമാക്കുക"</string>
+    <string name="set_wallpaper_button_text" msgid="4426286890442731310">"വാൾപേപ്പർ സജ്ജീകരിക്കൂ"</string>
     <string name="set_wallpaper_progress_message" msgid="7986528287618716715">"വാൾപേപ്പർ സജ്ജമാക്കുന്നു…"</string>
     <string name="try_again" msgid="8278874823700921234">"വീണ്ടും ശ്രമിക്കുക"</string>
     <string name="set_wallpaper_error_message" msgid="6819986999041085130">"വാൾപേപ്പർ സജ്ജമാക്കാനാവുന്നില്ല."</string>
@@ -32,7 +32,7 @@
     <string name="home_screen_message" msgid="106444102822522813">"ഹോം സ്‌ക്രീൻ"</string>
     <string name="lock_screen_message" msgid="1534506081955058013">"ലോക്ക് സ്‌ക്രീൻ"</string>
     <string name="home_and_lock_short_label" msgid="2937922943541927983">"ഹോമും ലോക്ക് സ്‌ക്രീനും"</string>
-    <string name="set_wallpaper_dialog_message" msgid="6114951028768599417">"വാൾപേപ്പർ സജ്ജമാക്കുക"</string>
+    <string name="set_wallpaper_dialog_message" msgid="6114951028768599417">"വാൾപേപ്പർ സജ്ജീകരിക്കൂ"</string>
     <string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"ഹോം സ്‌ക്രീൻ"</string>
     <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"ലോക്ക് സ്‌ക്രീൻ"</string>
     <string name="set_wallpaper_both_destination" msgid="6967226064958263939">"ഹോം സ്ക്രീനും ലോക്ക് സ്ക്രീനും"</string>
@@ -42,7 +42,7 @@
     <string name="permission_needed_allow_access_button_label" msgid="1943133660612924306">"ആക്‌സസ്സ് അനുവദിക്കുക"</string>
     <string name="no_backup_image_wallpaper_description" msgid="8303268619408738057">"വാൾപേപ്പറുകൾ തിരിക്കുന്നതിനുള്ള സജീവ വാൾപേപ്പർ സേവനം"</string>
     <string name="daily_refresh_tile_title" msgid="3270456074558525091">"പ്രതിദിന വാൾപേപ്പർ"</string>
-    <string name="daily_refresh_tile_subtitle" msgid="3976682014885446443">"ഓണാക്കാൻ ടാപ്പുചെയ്യുക"</string>
+    <string name="daily_refresh_tile_subtitle" msgid="3976682014885446443">"ഓണാക്കാൻ ടാപ്പ് ചെയ്യുക"</string>
     <string name="start_rotation_dialog_body_live_wallpaper_needed" msgid="5132580257563846082">"എല്ലാ ദിവസവും വാൾപേപ്പർ സ്വമേധയാ മാറും. സജ്ജീകരണം പൂർത്തിയാക്കാൻ, അടുത്ത സ്ക്രീനിലെ &lt;strong&gt;വാൾപേപ്പർ സജ്ജീകരിക്കുക&lt;/strong&gt; എന്നതിൽ ടാപ്പ് ചെയ്യുക."</string>
     <string name="start_rotation_dialog_wifi_only_option_message" msgid="3126269859713666225">"ഭാവി വാൾപേപ്പറുകൾ വൈഫൈയിൽ മാത്രം ഡൗൺലോഡ് ചെയ്യുക"</string>
     <string name="start_rotation_dialog_continue" msgid="276678987852274872">"തുടരുക"</string>
@@ -50,7 +50,7 @@
     <string name="start_rotation_error_message" msgid="3053799836719618972">"ആദ്യ വാൾപേപ്പർ ഡൗൺലോഡ് ചെയ്യാനാവുന്നില്ല. നിങ്ങളുടെ നെറ്റ്‌വർക്ക് ക്രമീകരണം പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക."</string>
     <string name="start_rotation_dialog_body" msgid="7903554799046364916">"ദിവസവും സ്വയമേവ വാൾപേപ്പർ മാറും"</string>
     <string name="settings_button_label" msgid="8724734130079207955">"ക്രമീകരണം"</string>
-    <string name="explore" msgid="7468719504199497281">"അടുത്തറിയൽ"</string>
+    <string name="explore" msgid="7468719504199497281">"അടുത്തറിയൂ"</string>
     <string name="next_wallpaper" msgid="3911873152952596232">"അടുത്ത വാൾപേപ്പർ"</string>
     <string name="wallpaper_disabled_message" msgid="7309484130562148185">"വാൾപേപ്പർ സജ്ജമാക്കുന്നത് ഈ ഉപകരണത്തിൽ പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു"</string>
     <string name="wallpaper_disabled_by_administrator_message" msgid="1551430406714747884">"വാൾപേപ്പർ ക്രമീകരിക്കുന്നത് നിങ്ങളുടെ ഉപകരണ അഡ്മിനിസ്ട്രേറ്റർ പ്രവർത്തനരഹിതമാക്കി"</string>
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"പ്രതിദിന വാൾപേപ്പർ പുതുക്കുക"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"പ്രതിദിന വാൾപേപ്പർ പുതുക്കുന്നു…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"പ്രതിദിന വാൾപേപ്പർ പുതുക്കിയെടുക്കുന്നത് പരാജയപ്പെട്ടു. നിങ്ങളുടെ നെറ്റ്‌വർക്ക് കണക്ഷൻ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"വാൾപേപ്പർ വിവര പാനൽ ചുരുക്കുക"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"വാൾപേപ്പർ വിവര പാനൽ വികസിപ്പിക്കുക"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"ഉപകരണത്തിലെ വാൾപേപ്പറുകൾ"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"ഉപകരണത്തിൽ"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android വാൾപേപ്പർ"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"നടുവിൽ വലുപ്പം മാറ്റുക"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"വലിച്ചുനീട്ടുക"</string>
     <string name="preview" msgid="1774602101743861071">"പ്രിവ്യൂ"</string>
+    <string name="tab_info" msgid="818614080690111416">"വിവരം"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"ഇഷ്‌ടാനുസൃതമാക്കുക"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"ക്രമീകരണം…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"ഇല്ലാതാക്കുക"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"നിങ്ങളുടെ ഫോണിൽ നിന്ന് ഈ വാൾപേപ്പർ ഇല്ലാതാക്കണോ?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"മടങ്ങുക"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"എഡിറ്റ് ചെയ്യുക"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"ഡൗൺലോഡ് ചെയ്യുക"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"സ്ലൈഡ്‌ഷോ വാൾപേപ്പർ"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"പ്രയോഗിക്കുക"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"ആകെ <xliff:g id="ID_2">%2$d</xliff:g> പേജുകളിൽ <xliff:g id="ID_1">%1$d</xliff:g>-ാമത്തെ പേജ്"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"അടുത്തത്"</string>
+    <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>
 </resources>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 7352b7c..ee4f411 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Өдөр тутмын ханын зургийг сэргээх"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Өдөр тутмын ханын зургийг сэргээж байна…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Өдөр тутмын ханын зургийг сэргээж чадсангүй. Сүлжээний холболтоо шалгаад дахин оролдоно уу."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Ханын зургийн мэдээллийн самбарыг буулгах"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Ханын зургийн мэдээллийн самбарыг дэлгэх"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Төхөөрөмжийн ханын зураг"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Төхөөрөмжид хадгалсан"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Андройдын ханын зураг"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Голлуулж тайрах"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Сунгах"</string>
     <string name="preview" msgid="1774602101743861071">"Урьдчилан үзэх"</string>
+    <string name="tab_info" msgid="818614080690111416">"Мэдээлэл"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Өөрчлөх"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Тохиргоо…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Устгах"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Энэ ханын зургийг утаснаасаа устгах уу?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Буцах"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Засах"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Татах"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Слайдаар харуулах ханын зураг"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Хэрэгжүүлэх"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Хуудас <xliff:g id="ID_2">%2$d</xliff:g>-н <xliff:g id="ID_1">%1$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Дараах"</string>
+    <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>
 </resources>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index bc7de36..7dd041f 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -37,12 +37,12 @@
     <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"लॉक स्क्रीन"</string>
     <string name="set_wallpaper_both_destination" msgid="6967226064958263939">"होम स्क्रीन आणि लॉक स्क्रीन"</string>
     <string name="no_backup_image_wallpaper_label" msgid="6316627676107284851">"फिरती इमेज वॉलपेपर"</string>
-    <string name="permission_needed_explanation" msgid="139166837541426823">"येथे सध्याचा वॉलपेपर दाखवण्यासाठी, <xliff:g id="APP_NAME">%1$s</xliff:g> ला तुमच्या डिव्हाइसच्या स्टोरेजचा अॅक्सेस हवा आहे."</string>
-    <string name="permission_needed_explanation_go_to_settings" msgid="3923551582092599609">"येथे सध्याचा वॉलपेपर दाखवण्यासाठी, वॉलपेपरला तुमच्या डिव्हाइसच्या स्टोरेजचा अॅक्सेस हवा आहे.\n\nहे सेटिंग बदलण्यासाठी, वॉलपेपरच्या ॲप माहितीच्या परवानग्या भागावर जा."</string>
-    <string name="permission_needed_allow_access_button_label" msgid="1943133660612924306">"अॅक्सेस द्या"</string>
+    <string name="permission_needed_explanation" msgid="139166837541426823">"येथे सध्याचा वॉलपेपर दाखवण्यासाठी, <xliff:g id="APP_NAME">%1$s</xliff:g> ला तुमच्या डिव्हाइसच्या स्टोरेजचा ॲक्सेस हवा आहे."</string>
+    <string name="permission_needed_explanation_go_to_settings" msgid="3923551582092599609">"येथे सध्याचा वॉलपेपर दाखवण्यासाठी, वॉलपेपरला तुमच्या डिव्हाइसच्या स्टोरेजचा ॲक्सेस हवा आहे.\n\nहे सेटिंग बदलण्यासाठी, वॉलपेपरच्या ॲप माहितीच्या परवानग्या भागावर जा."</string>
+    <string name="permission_needed_allow_access_button_label" msgid="1943133660612924306">"ॲक्सेस द्या"</string>
     <string name="no_backup_image_wallpaper_description" msgid="8303268619408738057">"फिरत्या वॉलपेपरसाठी लाइव्ह वॉलपेपर सेवा"</string>
     <string name="daily_refresh_tile_title" msgid="3270456074558525091">"दैनिक वॉलपेपर"</string>
-    <string name="daily_refresh_tile_subtitle" msgid="3976682014885446443">"चालू करण्यासाठी टॅप करा"</string>
+    <string name="daily_refresh_tile_subtitle" msgid="3976682014885446443">"सुरू करण्यासाठी टॅप करा"</string>
     <string name="start_rotation_dialog_body_live_wallpaper_needed" msgid="5132580257563846082">"वॉलपेपर दररोज आपोआप बदलेल. सेटअप पूर्ण करण्यासाठी, पुढील स्क्रीनवर &lt;strong&gt;वॉलपेपर सेट करा&lt;/strong&gt; वर टॅप करा."</string>
     <string name="start_rotation_dialog_wifi_only_option_message" msgid="3126269859713666225">"भविष्यातील वॉलपेपर फक्त वाय-फायवरून डाउनलोड करा"</string>
     <string name="start_rotation_dialog_continue" msgid="276678987852274872">"सुरू ठेवा"</string>
@@ -53,7 +53,7 @@
     <string name="explore" msgid="7468719504199497281">"एक्सप्लोर करा"</string>
     <string name="next_wallpaper" msgid="3911873152952596232">"पुढील वॉलपेपर"</string>
     <string name="wallpaper_disabled_message" msgid="7309484130562148185">"या डिव्हाइसवर वॉलपेपर सेट करणे बंद केलेले आहे"</string>
-    <string name="wallpaper_disabled_by_administrator_message" msgid="1551430406714747884">"तुमच्या डिव्हाइस अॅडमिनिस्ट्रेटरने वॉलपेपर सेट करणे बंद केले आहे"</string>
+    <string name="wallpaper_disabled_by_administrator_message" msgid="1551430406714747884">"तुमच्या डिव्हाइस ॲडमिनिस्ट्रेटरने वॉलपेपर सेट करणे बंद केले आहे"</string>
     <string name="wallpaper_set_successfully_message" msgid="2958998799111688578">"वॉलपेपर यशस्वीरीत्या सेट झाला"</string>
     <string name="wallpapers_unavailable_offline_message" msgid="8136405438621689532">"वॉलपेपर पाहण्यासाठी तुमच्याकडे इंटरनेट कनेक्शन असणे गरजेचे आहे. कृपया कनेक्ट करा आणि पुन्हा प्रयत्न करा."</string>
     <string name="currently_set_home_wallpaper_thumbnail" msgid="4022381436821898917">"सध्या होम स्क्रीन वॉलपेपर थंबनेल सेट केले आहे"</string>
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"दैनिक वॉलपेपर रिफ्रेश करा"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"दैनिक वॉलपेपर रिफ्रेश करत आहे…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"दैनिक वॉलपेपर रिफ्रेश करता आला नाही. कृपया तुमचे नेटवर्क कनेक्शन तपासा आणि पुन्हा प्रयत्न करा."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"वॉलपेपर माहिती पॅनल कोलॅप्स करा"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"वॉलपेपर माहिती पॅनल विस्तृत करा"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"डिव्हाइसवरील वॉलपेपर"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"डिव्हाइसवरील"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android वॉलपेपर"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"मध्यभागी क्रॉप केलेले"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"ताणा"</string>
     <string name="preview" msgid="1774602101743861071">"पूर्वावलोकन करा"</string>
+    <string name="tab_info" msgid="818614080690111416">"माहिती"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"कस्टमाइझ करा"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"सेटिंग्ज…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"हटवा"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"तुमच्या फोनवरून हा वॉलपेपर हटवायचा आहे का?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"मागे जा"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"संपादित करा"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"डाउनलोड करा"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"स्लाइडशो वॉलपेपर"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"लागू करा"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_2">%2$d</xliff:g> पैकी <xliff:g id="ID_1">%1$d</xliff:g> पेज"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"पुढील"</string>
+    <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>
 </resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index d10b20d..b67e3a1 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Muat semula kertas dinding harian"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Memuat semula kertas dinding harian…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Gagal memuat semula kertas dinding harian. Sila semak sambungan rangkaian anda dan cuba lagi."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Runtuhkan panel maklumat kertas dinding"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Kembangkan panel maklumat kertas dinding"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Kertas dinding pada peranti"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Pada peranti"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Kertas dinding Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Pangkas ke tengah"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Regang"</string>
     <string name="preview" msgid="1774602101743861071">"Pratonton"</string>
+    <string name="tab_info" msgid="818614080690111416">"Maklumat"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Sesuaikan"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Tetapan..."</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Padam"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Padamkan kertas dinding ini daripada telefon anda?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Kembali"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Edit"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Muat turun"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Kertas Dinding Tayangan Slaid"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Gunakan"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Halaman <xliff:g id="ID_1">%1$d</xliff:g> daripada <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Seterusnya"</string>
+    <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>
 </resources>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index b5d4855..2213288 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"နေ့စဉ်နောက်ခံကို ပြန်လည် စတင်ရန်"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"နေ့စဉ်နောက်ခံကို ပြန်လည်စတင်နေသည်…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"နေ့စဉ် နောက်ခံကို ပြန်လည် စတင်ခြင်း မအောင်မြင်ပါ။ ကွန်ရက်ချိတ်ဆက်မှုကို စစ်ဆေးပြီး ထပ်စမ်းကြည့်ပါ။"</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"နောက်ခံအချက်အလက် အကန့်ကို လျှော့ပြရန်"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"နောက်ခံအချက်အလက် အကန့်ကို ချဲ့ပြရန်"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"စက်ပေါ်ရှိ နောက်ခံများ"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"စက်ပေါ်ရှိ"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android နောက်ခံ"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"အလယ်တွင် ဖြတ်ညှိရန်"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"ဆွဲဆန့်ရန်"</string>
     <string name="preview" msgid="1774602101743861071">"အစမ်းကြည့်ရန်"</string>
+    <string name="tab_info" msgid="818614080690111416">"အချက်အလက်"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"စိတ်ကြိုက်ပြုလုပ်ရန်"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"ဆက်တင်များ…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"ဖျက်ရန်"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"ဤနောက်ခံပုံကို သင့်ပင်မစာမျက်နှာမှ ဖျက်ပစ်မလား။"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"နောက်သို့"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"ပြင်ဆင်ရန်"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"ဒေါင်းလုဒ်လုပ်ရန်"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"နောက်ခံ စလိုက်ရှိုး"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"အသုံးပြုရန်"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"စာမျက်နှာ <xliff:g id="ID_2">%2$d</xliff:g> အနက် စာမျက်နှာ <xliff:g id="ID_1">%1$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"ရှေ့သို့"</string>
+    <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>
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 2028c9d..84bf46e 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Oppdater daglig bakgrunn"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Oppdaterer daglig bakgrunn …"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Kunne ikke oppdatere den daglige bakgrunnen. Sjekk nettverkstilkoblingen din, og prøv igjen."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Skjul informasjonspanelet for bakgrunnen"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Vis informasjonspanelet for bakgrunnen"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Bakgrunner på enheten"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"På enheten"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android-bakgrunn"</string>
@@ -79,5 +77,20 @@
     <string name="center_wallpaper_position" msgid="4166894762352288883">"Midtstilt"</string>
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Midtstilt beskjæring"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Strekk"</string>
-    <string name="preview" msgid="1774602101743861071">"Ta en forhåndskikk"</string>
+    <string name="preview" msgid="1774602101743861071">"Se forhåndsvisning"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informasjon"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Tilpass"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Innstillinger"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Slett"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Vil du slette denne bakgrunnen fra telefonen din?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Tilbake"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Endre"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Last ned"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Bakgrunn med lysbildevisning"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Bruk"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Side <xliff:g id="ID_1">%1$d</xliff:g> av <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Neste"</string>
+    <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>
 </resources>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 28a1052..c4fef19 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"दैनिक वालपेपर पुनः ताजा गर्नुहोस्"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"दैनिक वालपेपर पुनः ताजा गर्दै…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"दैनिक वालपेपर पुनः ताजा गर्न सकिएन। कृपया आफ्नो नेटवर्कको जडान जाँच गरी फेरि प्रयास गर्नुहोस्।"</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"वालपेपरसम्बन्धी जानकारीको प्यानललाई संक्षिप्त गर्नुहोस्"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"वालपेपरसम्बन्धी जानकारीको प्यानललाई विस्तृत गर्नुहोस्"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"यन्त्रमा रहेका वालपेपरहरू"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"यन्त्रका वालपेपर"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android वालपेपर"</string>
@@ -75,9 +73,24 @@
     <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="app_not_found" msgid="4431461707854088231">"एप स्थापित छैन।"</string>
     <string name="center_wallpaper_position" msgid="4166894762352288883">"मध्यभाग"</string>
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"मध्यभागमा क्रप गरिएको"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"तन्काइएको"</string>
     <string name="preview" msgid="1774602101743861071">"पूर्वावलोकन"</string>
+    <string name="tab_info" msgid="818614080690111416">"जानकारी"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"आफू अनुकूल पार्नुहोस्"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"सेटिङ…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"मेट्नुहोस्"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"तपाईंको फोनबाट यो वालपेपर मेटाउने हो?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"पछाडि फर्कनुहोस्"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"सम्पादन गर्नुहोस्"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"डाउनलोड गर्नुहोस्"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"स्लाइड सो वालपेपर"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"लागू गर्नुहोस्"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_2">%2$d</xliff:g> मध्ये पृष्ठ <xliff:g id="ID_1">%1$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"अर्को"</string>
+    <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>
 </resources>
diff --git a/res/values-night/colors.xml b/res/values-night/colors.xml
index 25d083e..2c379ae 100644
--- a/res/values-night/colors.xml
+++ b/res/values-night/colors.xml
@@ -17,6 +17,11 @@
 -->
 <resources>
     <color name="preview_pager_background">@color/google_grey900</color>
+    <color name="fullscreen_preview_background">@color/material_black_100</color>
     <color name="edit_background_base">@color/material_white_100</color>
+    <color name="full_preview_tab_unselected_text_color">@color/white_54_alpha</color>
+    <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="selected_check_color">@color/material_black_100</color>
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 543e654..4a7cb49 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -28,14 +28,14 @@
     <string name="load_wallpaper_error_message" msgid="7913278480467707374">"Kan achtergrond niet laden. De afbeelding is beschadigd of is niet beschikbaar."</string>
     <string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Momenteel ingesteld"</string>
     <string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Dagelijkse achtergrond"</string>
-    <string name="wallpaper_destination_both" msgid="1124197176741944063">"Start- en vergrendelingsscherm"</string>
+    <string name="wallpaper_destination_both" msgid="1124197176741944063">"Start- en vergrendelscherm"</string>
     <string name="home_screen_message" msgid="106444102822522813">"Startscherm"</string>
-    <string name="lock_screen_message" msgid="1534506081955058013">"Scherm vergrendelen"</string>
-    <string name="home_and_lock_short_label" msgid="2937922943541927983">"Home- en vergrendelingsscherm"</string>
+    <string name="lock_screen_message" msgid="1534506081955058013">"Vergrendelscherm"</string>
+    <string name="home_and_lock_short_label" msgid="2937922943541927983">"Home- en vergrendelscherm"</string>
     <string name="set_wallpaper_dialog_message" msgid="6114951028768599417">"Achtergrond instellen"</string>
     <string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"Startscherm"</string>
-    <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"Scherm vergrendelen"</string>
-    <string name="set_wallpaper_both_destination" msgid="6967226064958263939">"Startscherm en vergrendelingsscherm"</string>
+    <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"Vergrendelscherm"</string>
+    <string name="set_wallpaper_both_destination" msgid="6967226064958263939">"Startscherm en vergrendelscherm"</string>
     <string name="no_backup_image_wallpaper_label" msgid="6316627676107284851">"Achtergrond met roulerende afbeelding"</string>
     <string name="permission_needed_explanation" msgid="139166837541426823">"<xliff:g id="APP_NAME">%1$s</xliff:g> heeft toegang nodig tot de opslag van je apparaat om de huidige achtergrond hier weer te geven."</string>
     <string name="permission_needed_explanation_go_to_settings" msgid="3923551582092599609">"Achtergronden heeft toegang nodig tot de opslag van je apparaat om de huidige achtergrond hier weer te geven.\n\nAls je deze instelling wilt wijzigen, ga je naar het gedeelte Rechten in de app-informatie van Achtergronden."</string>
@@ -57,17 +57,15 @@
     <string name="wallpaper_set_successfully_message" msgid="2958998799111688578">"Achtergrond is ingesteld"</string>
     <string name="wallpapers_unavailable_offline_message" msgid="8136405438621689532">"Je hebt verbinding met internet nodig om achtergronden te bekijken. Maak verbinding en probeer het opnieuw."</string>
     <string name="currently_set_home_wallpaper_thumbnail" msgid="4022381436821898917">"Thumbnail van momenteel ingestelde achtergrond voor startscherm"</string>
-    <string name="currently_set_lock_wallpaper_thumbnail" msgid="2094209303934569997">"Thumbnail van momenteel ingestelde achtergrond voor vergrendelingsscherm"</string>
+    <string name="currently_set_lock_wallpaper_thumbnail" msgid="2094209303934569997">"Thumbnail van momenteel ingestelde achtergrond voor vergrendelscherm"</string>
     <string name="currently_set_wallpaper_thumbnail" msgid="8651887838745545107">"Thumbnail van momenteel ingestelde achtergrond"</string>
     <string name="wallpaper_thumbnail" msgid="569931475923605974">"Thumbnail van achtergrond"</string>
     <string name="explore_home_screen" msgid="8756346794535765482">"Achtergrond van startscherm verkennen"</string>
-    <string name="explore_lock_screen" msgid="268938342103703665">"Achtergrond van vergrendelingsscherm verkennen"</string>
+    <string name="explore_lock_screen" msgid="268938342103703665">"Achtergrond van vergrendelscherm verkennen"</string>
     <string name="refresh_daily_wallpaper_home_content_description" msgid="2770445044556164259">"Dagelijkse startschermachtergrond vernieuwen"</string>
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Dagelijkse achtergrond vernieuwen"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Dagelijkse achtergrond vernieuwen…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Dagelijkse achtergrond kan niet worden vernieuwd. Controleer je netwerkverbinding en probeer het opnieuw."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Informatievenster van achtergrond samenvouwen"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Informatievenster van achtergrond uitvouwen"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Achtergronden op apparaat"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Op apparaat"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android-apparaat"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Gecentreerd bijsnijden"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Uitrekken"</string>
     <string name="preview" msgid="1774602101743861071">"Voorbeeld"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informatie"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Aanpassen"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Instellingen…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Verwijderen"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Wil je deze achtergrond verwijderen van je telefoon?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Terug"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Bewerken"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Downloaden"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Diavoorstellingsachtergrond"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Toepassen"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Pagina <xliff:g id="ID_1">%1$d</xliff:g> van <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Volgende"</string>
+    <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>
 </resources>
diff --git a/res/values-notnight-v26/picker_colors.xml b/res/values-notnight-v26/picker_colors.xml
index 0cadb67..9b8150d 100755
--- a/res/values-notnight-v26/picker_colors.xml
+++ b/res/values-notnight-v26/picker_colors.xml
@@ -37,15 +37,6 @@
 
     <color name="select_wallpaper_header_text_color">@color/textColorSecondary</color>
 
-    <color name="rotation_tile_enabled_background_color">@color/accent_color</color>
-    <color name="rotation_tile_enabled_title_text_color">@color/material_white_text</color>
-    <color name="rotation_tile_enabled_subtitle_text_color">@color/white_70_alpha</color>
-    <color name="rotation_tile_enabled_refresh_icon_color">@color/white_70_alpha</color>
-    <color name="rotation_tile_not_enabled_background_color">@color/secondary_color</color>
-    <color name="rotation_tile_not_enabled_title_text_color">@color/accent_color</color>
-    <color name="rotation_tile_not_enabled_subtitle_text_color">@color/black_54_alpha</color>
-    <color name="rotation_tile_not_enabled_refresh_icon_color">@color/black_54_alpha</color>
-
     <color name="individual_tile_title_scrim_color">@color/white_80_alpha</color>
     <color name="individual_tile_title_text_color">@color/textColorPrimary</color>
 
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 32e791e..fcf6a75 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -49,7 +49,7 @@
     <string name="start_rotation_progress_message" msgid="7872623873682262083">"ପ୍ରଥମ ୱାଲପେପର୍ ଡାଉନଲୋଡ୍ ହେଉଛି…"</string>
     <string name="start_rotation_error_message" msgid="3053799836719618972">"ପ୍ରଥମ ୱାଲପେପର୍‌କୁ ଡାଉନଲୋଡ୍ କରିବାରେ ଅସମର୍ଥ। ଦୟାକରି ଆପଣଙ୍କର ନେଟୱର୍କ ସେଟିଙ୍ଗକୁ ଯାଞ୍ଚ କରିବା ସହିତ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
     <string name="start_rotation_dialog_body" msgid="7903554799046364916">"ସ୍ଵଚାଳିତ ଭାବେ ପ୍ରତିଦିନ ୱାଲପେପର୍ ପରିବର୍ତ୍ତନ ହେବ"</string>
-    <string name="settings_button_label" msgid="8724734130079207955">"ସେଟିଙ୍ଗ"</string>
+    <string name="settings_button_label" msgid="8724734130079207955">"ସେଟିଂସ୍"</string>
     <string name="explore" msgid="7468719504199497281">"ଖୋଜନ୍ତୁ"</string>
     <string name="next_wallpaper" msgid="3911873152952596232">"ପରବର୍ତ୍ତୀ ୱାଲପେପର୍"</string>
     <string name="wallpaper_disabled_message" msgid="7309484130562148185">"ଏହି ଡିଭାଇସ୍‌ରେ ୱାଲପେପର୍‌ର ସେଟିଙ୍ଗକୁ ଅକ୍ଷମ କରାଯାଇଛି"</string>
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"ଦୈନିକ ୱାଲପେପର୍‌କୁ ରିଫ୍ରେଶ୍ କରନ୍ତୁ"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"ଦୈନିକ ୱାଲପେପର୍ ରିଫ୍ରେଶ୍ ହେଉଛି…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"ଦୈନିକ ୱାଲପେପର୍‌କୁ ରିଫ୍ରେଶ କରିବାରେ ବିଫଳ ହୋଇଛି। ଦୟାକରି ଆପଣଙ୍କର ନେଟୱର୍କ କନେକ୍ସନ୍‍କୁ ଯାଞ୍ଚ କରିବା ସହିତ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"ୱାଲପେପର୍‌ ସୂଚନା ପ୍ୟାନେଲକୁ ସଂକୁଚିତ କରନ୍ତୁ"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"ୱାଲପେପର୍‌ ସୂଚନା ପ୍ୟାନେଲ୍‌‍କୁ ବଢ଼ାନ୍ତୁ"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"ଅନ୍-ଡିଭାଇସ୍ ୱାଲପେପର୍"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"ଡିଭାଇସ୍‌ରେ"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android ୱାଲପେପର୍"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"ସେଣ୍ଟର୍ କ୍ରପ୍"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"ପ୍ରସାରିତ କରନ୍ତୁ"</string>
     <string name="preview" msgid="1774602101743861071">"ପ୍ରିଭ୍ୟୁ"</string>
+    <string name="tab_info" msgid="818614080690111416">"ସୂଚନା"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"କଷ୍ଟମାଇଜ୍ କରନ୍ତୁ"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"ସେଟିଂସ୍..."</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"ଡିଲିଟ୍ କରନ୍ତୁ"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"ଆପଣଙ୍କର ଫୋନ୍‌ରୁ ଏହି ୱାଲ୍‌ପେପର୍‌କୁ ଡିଲିଟ୍ କରିବେ କି?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"ପଛକୁ ଫେରନ୍ତୁ"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"ସମ୍ପାଦନ କରନ୍ତୁ"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"ଡାଉନଲୋଡ୍ କରନ୍ତୁ"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"ୱାଲପେପରର ସ୍ଲାଇଡଶୋ"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"ଲାଗୁ କରନ୍ତୁ"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_2">%2$d</xliff:g> ମଧ୍ୟରୁ <xliff:g id="ID_1">%1$d</xliff:g> ପୃଷ୍ଠା"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"ପରବର୍ତ୍ତୀ"</string>
+    <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>
 </resources>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 9d8f5f7..763afa5 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"ਰੋਜ਼ਾਨਾ ਵਾਲਪੇਪਰ ਰਿਫ੍ਰੈਸ਼ ਕਰੋ"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"ਰੋਜ਼ਾਨਾ ਵਾਲਪੇਪਰ ਰਿਫ੍ਰੈਸ਼ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..."</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"ਰੋਜ਼ਾਨਾ ਵਾਲਪੇਪਰ ਰਿਫ੍ਰੈਸ਼ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ। ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਨੈੱਟਵਰਕ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"ਵਾਲਪੇਪਰ ਦੀ ਜਾਣਕਾਰੀ ਵਾਲਾ ਪੈਨਲ ਸਮੇਟੋ"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"ਵਾਲਪੇਪਰ ਦੀ ਜਾਣਕਾਰੀ ਵਾਲੇ ਪੈਨਲ ਦਾ ਵਿਸਤਾਰ ਕਰੋ"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"ਡੀਵਾਈਸ ਵਿੱਚ ਮੌਜੂਦ ਵਾਲਪੇਪਰ"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"ਡੀਵਾਈਸ ਵਿੱਚ ਮੌਜੂਦ"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android ਵਾਲਪੇਪਰ"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"ਵਿਚਕਾਰੋਂ ਕਾਂਟ-ਛਾਂਟ ਕਰੋ"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"ਫੈਲਾਓ"</string>
     <string name="preview" msgid="1774602101743861071">"ਪੂਰਵ-ਝਲਕ"</string>
+    <string name="tab_info" msgid="818614080690111416">"ਜਾਣਕਾਰੀ"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"ਵਿਉਂਤਬੱਧ ਕਰੋ"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"ਸੈਟਿੰਗਾਂ…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"ਮਿਟਾਓ"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"ਕੀ ਇਹ ਵਾਲਪੇਪਰ ਤੁਹਾਡੇ ਫ਼ੋਨ ਤੋਂ ਮਿਟਾਉਣਾ ਹੈ?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"ਪਿੱਛੇ"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"ਸੰਪਾਦਨ ਕਰੋ"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"ਡਾਊਨਲੋਡ ਕਰੋ"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"ਸਲਾਈਡਸ਼ੋਅ ਵਾਲਪੇਪਰ"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"ਲਾਗੂ ਕਰੋ"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_2">%2$d</xliff:g> ਵਿੱਚੋਂ ਪੰਨਾ <xliff:g id="ID_1">%1$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"ਅੱਗੇ ਵਧੋ"</string>
+    <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>
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 82d7408..54dfb14 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Odśwież codzienną tapetę"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Odświeżam codzienną tapetę…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Nie udało się odświeżyć codziennej tapety. Sprawdź połączenie sieciowe i spróbuj ponownie."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Zwiń panel informacyjny tapety"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Rozwiń panel informacyjny tapety"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Tapety na urządzeniu"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Na urządzeniu"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Tapety Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Przycięta na środku"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Rozciągnięcie"</string>
     <string name="preview" msgid="1774602101743861071">"Podgląd"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informacje"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Dostosuj"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Ustawienia…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Usuń"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Usunąć tę tapetę z telefonu?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Wstecz"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Edytuj"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Pobierz"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Tapeta z pokazem slajdów"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Zastosuj"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Strona <xliff:g id="ID_1">%1$d</xliff:g> z <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Dalej"</string>
+    <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>
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 3ba961d..ea3c288 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Atualizar a imagem de fundo diária"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"A atualizar a imagem de fundo diária…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Falha ao atualizar a imagem de fundo diária. Verifique a sua ligação de rede e tente novamente."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Reduzir o painel de informações da imagem de fundo"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Expandir o painel de informações da imagem de fundo"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Imagens de fundo no disposit."</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"No dispositivo"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Imagem de fundo do Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Recortar e centrar"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Esticar"</string>
     <string name="preview" msgid="1774602101743861071">"Pré-visualizar"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informações"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Personalizar"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Definições…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Eliminar"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Pretende eliminar esta imagem de fundo do telemóvel?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Anterior"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Editar"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Transferir"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Imag. de fundo da apres. diap."</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Aplicar"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Página <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Seguinte"</string>
+    <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>
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index f26164b..f3a072c 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -26,7 +26,7 @@
     <string name="try_again" msgid="8278874823700921234">"Tentar novamente"</string>
     <string name="set_wallpaper_error_message" msgid="6819986999041085130">"Não foi possível definir o plano de fundo."</string>
     <string name="load_wallpaper_error_message" msgid="7913278480467707374">"Não foi possível carregar o plano de fundo. A imagem está corrompida ou indisponível."</string>
-    <string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Definido no momento"</string>
+    <string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Atual"</string>
     <string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Plano de fundo diário"</string>
     <string name="wallpaper_destination_both" msgid="1124197176741944063">"Tela inicial e de bloqueio"</string>
     <string name="home_screen_message" msgid="106444102822522813">"Tela inicial"</string>
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Atualizar o plano de fundo diário"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Atualizando plano de fundo diário…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Falha na atualização do plano de fundo diário. Verifique sua conexão de rede e tente novamente."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Recolher painel de informações de plano de fundo"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Expandir painel de informações de plano de fundo"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Planos de fundo no dispositivo"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"No dispositivo"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Plano de fundo do Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Corte central"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Expandir"</string>
     <string name="preview" msgid="1774602101743861071">"Visualizar"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informações"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Personalizar"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Configurações…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Excluir"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Excluir esse plano de fundo do seu smartphone?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Voltar"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Editar"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Fazer o download"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Fundo da apresent. de slides"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Aplicar"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Página <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Próxima"</string>
+    <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>
 </resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 0766d1a..4982b64 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Actualizați imaginea de fundal zilnică"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Se actualizează imaginea de fundal zilnică…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Nu s-a putut actualiza imaginea de fundal zilnică. Verificați conexiunea la rețea și încercați din nou."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Restrângeți panoul de informații al imaginii de fundal"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Extindeți panoul de informații al imaginii de fundal"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Imagini fundal pe dispozitiv"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Pe dispozitiv"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Imagine de fundal Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Decupare în centru"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Extindeți"</string>
     <string name="preview" msgid="1774602101743861071">"Previzualizați"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informații"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Personalizați"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Setări…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Ștergeți"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Ștergeți această imagine de fundal de pe telefon?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Înapoi"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Editați"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Descărcați"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Imagine de fundal din slideshow"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Aplicați"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Pagina <xliff:g id="ID_1">%1$d</xliff:g> din <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Înainte"</string>
+    <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>
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 1421a1b..7f8e37b 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -28,7 +28,7 @@
     <string name="load_wallpaper_error_message" msgid="7913278480467707374">"Не удалось загрузить обои. Изображение повреждено или недоступно."</string>
     <string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Установлено как обои"</string>
     <string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Обои на каждый день"</string>
-    <string name="wallpaper_destination_both" msgid="1124197176741944063">"Главный и заблокированный экраны"</string>
+    <string name="wallpaper_destination_both" msgid="1124197176741944063">"Главный экран и заблокированный экран"</string>
     <string name="home_screen_message" msgid="106444102822522813">"Главный экран"</string>
     <string name="lock_screen_message" msgid="1534506081955058013">"Заблокированный экран"</string>
     <string name="home_and_lock_short_label" msgid="2937922943541927983">"Оба экрана"</string>
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Обновить ежедневные обои"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Обновление ежедневных обоев…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Не удалось обновить обои. Проверьте подключение к Интернету и повторите попытку."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Свернуть панель с информацией об обоях"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Развернуть панель с информацией об обоях"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Сохраненные на устройстве"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"На устройстве"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Обои для Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Заполнить"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Растянуть"</string>
     <string name="preview" msgid="1774602101743861071">"Предварительный просмотр"</string>
+    <string name="tab_info" msgid="818614080690111416">"Информация"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Настройка"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Настройки…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Удалить"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Удалить эти обои с телефона?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Назад"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Изменить"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Скачать"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Начать слайд-шоу обоев"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Применить"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Страница <xliff:g id="ID_1">%1$d</xliff:g> из <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Следующая страница"</string>
+    <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>
 </resources>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 8022ce9..e63a2d2 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"දිනපතා වෝල්පේපරය නැවුම් කරන්න"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"දෛනික වෝල්පේපරය නැවුම් කරමින්…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"දෛනික වෝල්පේපරය යළි නැවුම් කිරීම අසාර්ථක විය. කරුණාකර ඔබගේ ජාල සම්බන්ධතාව පරික්ෂා කර නැවත උත්සාහ කරන්න."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"වෝල්පේපර තතු පැනලය හකුළුවන්න"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"වෝල්පේපර තතු පැනලය දිග හරින්න"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"උපාංගය-මත වෝල්පේපර"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"උපාංගයේ"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android වෝල්පේපරය"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"මැද කප්පාදු කිරීම"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"අදින්න"</string>
     <string name="preview" msgid="1774602101743861071">"පෙරදසුන"</string>
+    <string name="tab_info" msgid="818614080690111416">"තතු"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"අභිරුචිකරණය කරන්න"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"සැකසීම්…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"මකන්න"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"මෙම බිතුපත ඔබේ දුරකථනයෙන් මකන්නද?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"ආපසු යන්න"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"සංස්කරණය කරන්න"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"බාගන්න"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"වෝල්පේපර ස්ලයිඩ දර්ශනය"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"යොදන්න"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_2">%2$d</xliff:g> න් <xliff:g id="ID_1">%1$d</xliff:g> පිටුව"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"ඊළඟ"</string>
+    <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>
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index d12ddd0..1da2c15 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Obnoviť dennú tapetu"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Obnovuje sa denná tapeta…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Dennú tapetu sa nepodarilo obnoviť. Skontrolujte pripojenie k sieti a skúste to znova."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Zbaliť informačný panel tapety"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Rozbaliť informačný panel tapety"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Tapety v zariadení"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"V zariadení"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Tapeta pre Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Vycentrovať a orezať"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Roztiahnuť"</string>
     <string name="preview" msgid="1774602101743861071">"Zobraziť ukážku"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informácie"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Prispôsobenie"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Nastavenia…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Odstrániť"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Chcete túto tapetu odstrániť z telefónu?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Späť"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Upraviť"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Stiahnuť"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Spustiť prezentáciu tapiet"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Použiť"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_1">%1$d</xliff:g>. strana z <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Ďalej"</string>
+    <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>
 </resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index dae44d7..e56b978 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Osvežitev dnevnega ozadja"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Osvežitev dnevnega ozadja …"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Dnevnega ozadja ni bilo mogoče osvežiti. Preverite omrežno povezavo in poskusite znova."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Strnitev podokna z informacijami o ozadju"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Razširitev podokna z informacijami o ozadju"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Ozadja v napravi"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"V napravi"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Ozadje Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Na sredini obrezano"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Raztegnjeno"</string>
     <string name="preview" msgid="1774602101743861071">"Predogled"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informacije"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Prilagajanje"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Nastavitve …"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Izbriši"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Ali želite to ozadje izbrisati iz telefona?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Nazaj"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Urejanje"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Prenos"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Diaprojekcija zaslonsk. ozadij"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Uporaba"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_1">%1$d</xliff:g>. stran od <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Naprej"</string>
+    <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>
 </resources>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index e35ad48..a92579f 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -21,7 +21,7 @@
     <!-- no translation found for app_name (8773648973927541493) -->
     <skip />
     <string name="select_wallpaper_label" msgid="6989581259339646085">"Kategoritë e imazheve të sfondit"</string>
-    <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Cakto imazhin e sfondit"</string>
+    <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Caktoje si imazh sfondi"</string>
     <string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Po cakton imazhin e sfondit..."</string>
     <string name="try_again" msgid="8278874823700921234">"Provo sërish"</string>
     <string name="set_wallpaper_error_message" msgid="6819986999041085130">"Nuk mund të caktojë imazhin e sfondit"</string>
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Rifresko imazhin e përditshëm të sfondit"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Po rifreskon imazhin e përditshëm të sfondit..."</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Rifreskimi i imazhit të përditshëm të sfondit dështoi. Kontrollo lidhjen e rrjetit dhe provo përsëri."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Palos panelin e informacionit të imazhit të sfondit"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Zgjero panelin e informacionit të imazhit të sfondit"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Imazhet e sfondit në pajisje"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Në pajisje"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Imazhi i sfondit Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Prerje qendrore"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"E tendosur"</string>
     <string name="preview" msgid="1774602101743861071">"Shiko paraprakisht"</string>
+    <string name="tab_info" msgid="818614080690111416">"Informacione"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Personalizo"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Cilësimet…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Fshi"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Do ta fshish këtë imazh sfondi nga telefoni?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Pas"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Modifiko"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Shkarko"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Imazhi i sfondit të diafilmit"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Zbato"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Faqja <xliff:g id="ID_1">%1$d</xliff:g> nga <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Para"</string>
+    <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>
 </resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 6c26b0a..447f00e 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Освежи дневну позадину"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Дневна позадина се освежава…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Освежавање дневне позадине није успело. Проверите мрежну везу и пробајте поново."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Скупи таблу са информацијама о позадини"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Прошири таблу са информацијама о позадини"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Позадине на уређају"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"На уређају"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android позадина"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Опсеци у центру"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Развуци"</string>
     <string name="preview" msgid="1774602101743861071">"Преглед"</string>
+    <string name="tab_info" msgid="818614080690111416">"Информације"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Прилагодите"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Подешавања…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Избриши"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Желите да избришете ову позадину са телефона?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Назад"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Измени"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Преузми"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Пројекција слајдова у позадини"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Примени"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_1">%1$d</xliff:g>. страница од <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Следећа"</string>
+    <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>
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 54bc2cb..c03d38b 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Uppdatera dagens bakgrund"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Dagens bakgrund uppdateras …"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Det gick inte att uppdatera dagens bakgrund. Kontrollera nätverksanslutningen och försök igen."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Komprimera bakgrundens informationspanel"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Utöka bakgrundens informationspanel"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Bakgrunder på enheten"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"På enheten"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android-bakgrund"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Centrera och beskär"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Dra ut"</string>
     <string name="preview" msgid="1774602101743861071">"Förhandsgranska"</string>
+    <string name="tab_info" msgid="818614080690111416">"Information"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Anpassa"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Inställningar…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Radera"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Vill du radera den här bakgrunden från mobilen?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Tillbaka"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Redigera"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Ladda ned"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Bakgrund med bildspel"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Använd"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Sida <xliff:g id="ID_1">%1$d</xliff:g> av <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Nästa"</string>
+    <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>
 </resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 17734e1..71beaf9 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Onyesha upya mandhari ya kila siku"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Inaonyesha upya mandhari ya kila siku..."</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Imeshindwa kuonyesha upya mandhari ya kila siku. Tafadhali kagua muunganisho wako kisha ujaribu tena."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Kunja kidirisha cha maelezo ya mandhari"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Panua kidirisha cha maelezo ya mandhari"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Mandhari yaliyo kwenye kifaa"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Kwenye kifaa"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Mandhari ya Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Punguza katikati"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Panua"</string>
     <string name="preview" msgid="1774602101743861071">"Kagua kwanza"</string>
+    <string name="tab_info" msgid="818614080690111416">"Maelezo"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Weka mapendeleo"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Mipangilio…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Futa"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Je, ungependa kufuta mandhari haya kwenye simu yako?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Nyuma"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Badilisha"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Pakua"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Mandhari ya Onyesho la Slaidi"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Tumia"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Ukurasa wa <xliff:g id="ID_1">%1$d</xliff:g> kati ya <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Unaofuata"</string>
+    <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>
 </resources>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 5be8064..c0e601c 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"தினசரி வால்பேப்பரைப் புதுப்பிக்கும் பட்டன்"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"தினசரி வால்பேப்பரைப் புதுப்பிக்கிறது…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"தினசரி வால்பேப்பரைப் புதுப்பிக்க முடியவில்லை. நெட்வொர்க் இணைப்பைச் சரிபார்த்து, மீண்டும் முயலவும்."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"வால்பேப்பரின் தகவல் பேனலைச் சுருக்கும் பட்டன்"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"வால்பேப்பரின் தகவல் பேனலை விரிவாக்கும் பட்டன்"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"சாதனத்திலுள்ள வால்பேப்பர்கள்"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"சாதனத்தில் சேமித்தவை"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android வால்பேப்பர்"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"மையமாகச் செதுக்கு"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"திரையில் பொருந்தும்படி விரி"</string>
     <string name="preview" msgid="1774602101743861071">"மாதிரிக்காட்சி"</string>
+    <string name="tab_info" msgid="818614080690111416">"தகவல்"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"பிரத்தியேகமாக்கு"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"அமைப்புகள்…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"நீக்கு"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"மொபைலில் இருந்து இந்த வால்பேப்பரை நீக்கவா?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"பின்செல்வதற்கான பட்டன்"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"திருத்துவதற்கான பட்டன்"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"பதிவிறக்குவதற்கான பட்டன்"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"ஸ்லைடுகாட்சி வால்பேப்பர்"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"பயன்படுத்துவதற்கான பட்டன்"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"பக்கம் <xliff:g id="ID_1">%1$d</xliff:g> / <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"அடுத்த பக்கத்திற்குச் செல்வதற்கான பட்டன்"</string>
+    <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>
 </resources>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 3db68b3..1ad45d2 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"రోజువారీ వాల్‌పేపర్‌ను రిఫ్రెష్ చేస్తుంది"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"రోజువారీ వాల్‌పేపర్‌ను రిఫ్రెష్ చేస్తోంది…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"రోజువారీ వాల్‌పేపర్‌ను రిఫ్రెష్ చేయడంలో విఫలమైంది. దయచేసి మీ నెట్‌వర్క్ కనెక్షన్‌ను తనిఖీ చేసుకొని, ఆపై మళ్లీ ప్రయత్నించండి."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"వాల్‌పేపర్ సమాచార ప్యానెల్‌ను కుదిస్తుంది"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"వాల్‌పేపర్ సమాచార ప్యానెల్‌ను విస్తరింపజేస్తుంది"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"పరికరంలో వాల్‌పేపర్‌లు"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"పరికరంలో"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android వాల్‌పేపర్"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"మధ్యన కత్తిరించు"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"విస్తరించు"</string>
     <string name="preview" msgid="1774602101743861071">"ప్రివ్యూ చూపు"</string>
+    <string name="tab_info" msgid="818614080690111416">"సమాచారం"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"అనుకూలీకరించండి"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"సెట్టింగ్‌లు…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"తొలగించు"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"మీ ఫోన్ నుండి ఈ వాల్‌పేపర్‌ను తొలగించాలా?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"వెనుకకు"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"ఎడిట్‌"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"డౌన్‌లోడ్"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"స్లయిడ్ షో వాల్‌పేపర్"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"వర్తింపజేయి"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_2">%2$d</xliff:g>లో <xliff:g id="ID_1">%1$d</xliff:g>వ పేజీ"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"తర్వాత"</string>
+    <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>
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 0aaa891..53b3b16 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"รีเฟรชวอลเปเปอร์รายวัน"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"กำลังรีเฟรชวอลเปเปอร์รายวัน…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"รีเฟรชวอลเปเปอร์รายวันไม่ได้ โปรดตรวจสอบการเชื่อมต่อเครือข่าย แล้วลองใหม่อีกครั้ง"</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"ยุบแผงข้อมูลวอลเปเปอร์"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"ขยายแผงข้อมูลวอลเปเปอร์"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"วอลเปเปอร์บนอุปกรณ์"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"ในอุปกรณ์"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"วอลเปเปอร์ Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"ครอบตัดกึ่งกลาง"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"ยืด"</string>
     <string name="preview" msgid="1774602101743861071">"แสดงพรีวิว"</string>
+    <string name="tab_info" msgid="818614080690111416">"ข้อมูล"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"ปรับแต่ง"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"การตั้งค่า…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"ลบ"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"ลบวอลเปเปอร์นี้ออกจากโทรศัพท์ไหม"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"กลับ"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"แก้ไข"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"ดาวน์โหลด"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"วอลเปเปอร์ภาพสไลด์"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"ใช้"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"หน้า <xliff:g id="ID_1">%1$d</xliff:g> จาก <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"ถัดไป"</string>
+    <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>
 </resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 7232a7e..a24647a 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"I-refresh ang pang-araw-araw na wallpaper"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Nire-refresh ang pang-araw-araw na wallpaper…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Hindi na-refresh ang pang-araw-araw na wallpaper. Pakitingnan ang iyong koneksyon sa network at subukang muli."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"I-collapse ang panel ng impormasyon ng wallpaper"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Palawakin ang panel ng impormasyon ng wallpaper"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Mga nasa device na wallpaper"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Nasa device"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Wallpaper ng Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"I-crop sa gitna"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"I-stretch"</string>
     <string name="preview" msgid="1774602101743861071">"I-preview"</string>
+    <string name="tab_info" msgid="818614080690111416">"Impormasyon"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"I-customize"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Mga Setting…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"I-delete"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"I-delete ang wallpaper na ito sa iyong telepono?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Bumalik"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"I-edit"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"I-download"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Slideshow na Wallpaper"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Ilapat"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Page <xliff:g id="ID_1">%1$d</xliff:g> ng <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Susunod"</string>
+    <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>
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 1600f69..782483b 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Günlük duvar kağıdını yenile"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Günlük duvar kağıdı yenileniyor…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Günlük duvar kağıdı yenilenemedi. Lütfen ağ bağlantınızı kontrol edip tekrar deneyin."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Duvar kağıdı bilgi panelini daralt"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Duvar kağıdı bilgi panelini genişlet"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Cihazdaki duvar kağıtları"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Cihazda"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android duvar kağıdı"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Ortalayarak kırp"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Genişlet"</string>
     <string name="preview" msgid="1774602101743861071">"Önizle"</string>
+    <string name="tab_info" msgid="818614080690111416">"Bilgi"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Özelleştir"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Ayarlar…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Sil"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Bu duvar kağıdı telefonunuzdan silinsin mi?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Geri"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Düzenle"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"İndir"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Duvar Kağıdı Slayt Gösterisi"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Uygula"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Sayfa <xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Sonraki"</string>
+    <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>
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 0d4fd12..341f50c 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Оновити щоденний фоновий малюнок"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Оновлення щоденного фонового малюнка…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Не вдалось оновити щоденний фоновий малюнок. Перевірте з’єднання з мережею й повторіть спробу."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Згорнути панель з інформацією про фоновий малюнок"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Розгорнути панель з інформацією про фоновий малюнок"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Фонові малюнки на пристрої"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"На пристрої"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Фоновий малюнок Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Обрізати відносно центру"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Розтягнути"</string>
     <string name="preview" msgid="1774602101743861071">"Переглянути"</string>
+    <string name="tab_info" msgid="818614080690111416">"Інформація"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Налаштування"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Налаштування…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Видалити"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Видалити цей фоновий малюнок із телефона?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Назад"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Змінити"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Завантажити"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Фоновий малюнок слайд-шоу"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Застосувати"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Стор. <xliff:g id="ID_1">%1$d</xliff:g> з <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Далі"</string>
+    <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>
 </resources>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index b4a5043..50f7791 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"روزانہ وال پیپر ریفریش کریں"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"روزانہ وال پیپر ریفریش ہو رہا ہے…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"روزانہ وال پیپر ریفریش کرنے میں ناکام۔ براہ کرم اپنا نیٹ ورک کنکشن چیک کر کے دوبارہ کوشش کریں۔"</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"وال پیپر کے معلوماتی پینل کو سکیڑیں"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"وال پیپر کا معلوماتی پینل پھیلائیں"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"آلہ میں اسٹور کردہ وال پیپرز"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"آلہ پر اسٹور کردہ"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"‏Android وال پیپر"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"مرکزی تراش"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"پھیلائیں"</string>
     <string name="preview" msgid="1774602101743861071">"پیش منظر"</string>
+    <string name="tab_info" msgid="818614080690111416">"معلومات"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"حسب ضرورت بنائیں"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"ترتیبات…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"حذف کریں"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"اس وال پیپر کو آپ کے فون سے حذف کریں؟"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"واپس جائیں"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"ترمیم کریں"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"ڈاؤن لوڈ کریں"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"سلائیڈ شو وال پیپر"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"لاگو کریں"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"صفحہ <xliff:g id="ID_1">%1$d</xliff:g> از <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"آگے"</string>
+    <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>
 </resources>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index ede76e6..d66df05 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -21,18 +21,18 @@
     <!-- no translation found for app_name (8773648973927541493) -->
     <skip />
     <string name="select_wallpaper_label" msgid="6989581259339646085">"Fon rasmi turkumlari"</string>
-    <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Fonga rasm o‘rnatish"</string>
+    <string name="set_wallpaper_button_text" msgid="4426286890442731310">"Fon rasmi qilish"</string>
     <string name="set_wallpaper_progress_message" msgid="7986528287618716715">"Fonga rasm o‘rnatilmoqda…"</string>
     <string name="try_again" msgid="8278874823700921234">"Qaytadan"</string>
     <string name="set_wallpaper_error_message" msgid="6819986999041085130">"Fonga rasm o‘rnatib bo‘lmadi."</string>
     <string name="load_wallpaper_error_message" msgid="7913278480467707374">"Fon rasmi yuklanmadi. Rasm buzilgan yoki mavjud emas."</string>
-    <string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Hozirda o‘rnatilgan"</string>
+    <string name="static_wallpaper_presentation_mode_message" msgid="417940227049360906">"Hozirda tanlangan"</string>
     <string name="rotating_wallpaper_presentation_mode_message" msgid="3361676041605733288">"Kunlik fon rasmi"</string>
     <string name="wallpaper_destination_both" msgid="1124197176741944063">"Bosh ekran va ekran qulfi"</string>
     <string name="home_screen_message" msgid="106444102822522813">"Bosh ekran"</string>
     <string name="lock_screen_message" msgid="1534506081955058013">"Ekran qulfi"</string>
     <string name="home_and_lock_short_label" msgid="2937922943541927983">"Bosh ekran va ekran qulfi"</string>
-    <string name="set_wallpaper_dialog_message" msgid="6114951028768599417">"Fonga rasm o‘rnatish"</string>
+    <string name="set_wallpaper_dialog_message" msgid="6114951028768599417">"Fonga rasm tanlash"</string>
     <string name="set_wallpaper_home_screen_destination" msgid="7315594722013109354">"Bosh ekran"</string>
     <string name="set_wallpaper_lock_screen_destination" msgid="6224685559375417945">"Ekran qulfi"</string>
     <string name="set_wallpaper_both_destination" msgid="6967226064958263939">"Bosh ekran va qulf ekrani"</string>
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Kunlik fon rasmini yangilash"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Kunlik fon rasmi yangilanmoqda…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Kunlik fon rasmi yangilanmadi. Internet aloqasini tekshiring va qaytadan urining."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Fon rasmi haqidagi axborot panelini yopish"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Fon rasmi haqidagi axborot panelini ochish"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Qurilmadagi fon rasmlari"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Qurilmadagi"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android fon rasmi"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Markazlab qirqish"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Yoyish"</string>
     <string name="preview" msgid="1774602101743861071">"Razm solish"</string>
+    <string name="tab_info" msgid="818614080690111416">"Axborot"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Sozlash"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Sozlamalar…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Oʻchirish"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Bu fon rasmi telefoningizdan oʻchirib tashlansinmi?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Orqaga"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Tahrirlash"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Yuklab olish"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Fon rasmlaridan slayd-shou"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Tatbiq etish"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Sahifa: <xliff:g id="ID_1">%1$d</xliff:g> / <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Keyingi"</string>
+    <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>
 </resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index f0c0176..d8f314c 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Làm mới hình nền hàng ngày"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Đang làm mới hình nền hàng ngày…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Không thể làm mới hình nền hàng ngày. Vui lòng kiểm tra kết nối mạng của bạn và thử lại."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Thu gọn bảng thông tin hình nền"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Mở rộng bảng thông tin hình nền"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Hình nền trên thiết bị"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Trên thiết bị"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Hình nền Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Cắt giữa"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Kéo dài"</string>
     <string name="preview" msgid="1774602101743861071">"Xem trước"</string>
+    <string name="tab_info" msgid="818614080690111416">"Thông tin"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Tùy chỉnh"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Cài đặt…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Xóa"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Bạn muốn xóa hình nền này khỏi điện thoại của mình?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Quay lại"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Chỉnh sửa"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Tải xuống"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Hình nền theo kiểu trình chiếu"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Áp dụng"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Trang <xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Tiếp theo"</string>
+    <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>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 3795c39..82aa3e5 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"刷新每日壁纸"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"正在刷新每日壁纸…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"无法刷新每日壁纸。请检查您的网络连接状况,然后重试。"</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"收起壁纸信息面板"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"展开壁纸信息面板"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"设备上的壁纸"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"设备上的壁纸"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android 壁纸"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"居中裁剪"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"拉伸"</string>
     <string name="preview" msgid="1774602101743861071">"预览"</string>
+    <string name="tab_info" msgid="818614080690111416">"信息"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"自定义"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"设置…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"删除"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"要从您的手机上删除此壁纸吗?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"返回"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"修改"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"下载"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"幻灯片壁纸"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"应用"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"第 <xliff:g id="ID_1">%1$d</xliff:g> 页,共 <xliff:g id="ID_2">%2$d</xliff:g> 页"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"下一页"</string>
+    <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>
 </resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index f9ecc62..fcd8ecd 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -21,7 +21,7 @@
     <!-- no translation found for app_name (8773648973927541493) -->
     <skip />
     <string name="select_wallpaper_label" msgid="6989581259339646085">"桌布類別"</string>
-    <string name="set_wallpaper_button_text" msgid="4426286890442731310">"設定「桌布」"</string>
+    <string name="set_wallpaper_button_text" msgid="4426286890442731310">"設定桌布"</string>
     <string name="set_wallpaper_progress_message" msgid="7986528287618716715">"正在設定桌布…"</string>
     <string name="try_again" msgid="8278874823700921234">"再試一次"</string>
     <string name="set_wallpaper_error_message" msgid="6819986999041085130">"無法設定桌布。"</string>
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"重新整理每日桌布"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"正在重新整理每日桌布…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"無法重新整理每日桌布。請檢查您的網絡連線,然後再試一次。"</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"收合桌布資訊面板"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"展開桌布資訊面板"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"裝置上的桌布"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"在裝置上"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android 桌布"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"裁剪中間部分"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"延展"</string>
     <string name="preview" msgid="1774602101743861071">"預覽"</string>
+    <string name="tab_info" msgid="818614080690111416">"資訊"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"自訂"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"設定…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"刪除"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"要從手機中刪除此桌布嗎?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"返回"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"編輯"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"下載"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"幻燈片放映桌布"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"套用"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"<xliff:g id="ID_2">%2$d</xliff:g> 頁中嘅第 <xliff:g id="ID_1">%1$d</xliff:g> 頁"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"繼續"</string>
+    <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>
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index f6e67cf..c602491 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"重新整理每日桌布"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"正在重新整理每日桌布…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"無法重新整理每日桌布。請檢查你的網路連線,然後再試一次。"</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"收合桌布資訊面板"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"展開桌布資訊面板"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"裝置桌布"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"裝置上"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Android 桌布"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"置中裁剪"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"延伸"</string>
     <string name="preview" msgid="1774602101743861071">"預覽"</string>
+    <string name="tab_info" msgid="818614080690111416">"資訊"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"自訂"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"設定…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"刪除"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"要從手機中刪除這張桌布嗎?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"返回"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"編輯"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"下載"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"投影播放桌布"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"套用"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"第 <xliff:g id="ID_1">%1$d</xliff:g> 頁,共 <xliff:g id="ID_2">%2$d</xliff:g> 頁"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"下一頁"</string>
+    <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>
 </resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 2db2a33..5966df3 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -66,8 +66,6 @@
     <string name="refresh_daily_wallpaper_content_description" msgid="4362142658237147583">"Vuselela isithombe sangemuva sansuku zonke"</string>
     <string name="refreshing_daily_wallpaper_dialog_message" msgid="1975910873362855761">"Ivuselela isithombe sangemuva sansuku zonke…"</string>
     <string name="refresh_daily_wallpaper_failed_message" msgid="4749879993812557166">"Yehlulekile ukuvuselela isithombe sangemuva sansuku zonke. Sicela uhlole ukuxhumeka kwakho kwenethiwekhi uphinde uzame futhi."</string>
-    <string name="collapse_attribution_panel" msgid="4367971404848122275">"Goqa iphaneli yolwazi lwesithombe sangemuva"</string>
-    <string name="expand_attribution_panel" msgid="6975094181456095915">"Nweba iphaneli yolwazi yesithombe sangemuva"</string>
     <string name="on_device_wallpapers_category_title" msgid="805819102071369004">"Izithombe zangemuva ezikudivayisi"</string>
     <string name="on_device_wallpapers_category_title_desktop" msgid="316919420410065369">"Kudivayisi"</string>
     <string name="on_device_wallpaper_title" msgid="5262564748034629524">"Isithombe sangemuva se-Android"</string>
@@ -80,4 +78,19 @@
     <string name="center_crop_wallpaper_position" msgid="1681980019815343348">"Nqampuna phakathi kwendawo"</string>
     <string name="stretch_wallpaper_position" msgid="5002680983147456935">"Nweba"</string>
     <string name="preview" msgid="1774602101743861071">"Buka kuqala"</string>
+    <string name="tab_info" msgid="818614080690111416">"Ulwazi"</string>
+    <string name="tab_customize" msgid="2533745409174959960">"Enza ngendlela oyifisayo"</string>
+    <string name="configure_wallpaper" msgid="849882179182976621">"Izilungiselelo…"</string>
+    <string name="delete_live_wallpaper" msgid="589212696102662329">"Susa"</string>
+    <string name="delete_wallpaper_confirmation" msgid="33790318361863778">"Landa lesi sithombe esingemuva kusukela kufoni yakho?"</string>
+    <string name="bottom_action_bar_back" msgid="8237013112999946725">"Emuva"</string>
+    <string name="bottom_action_bar_edit" msgid="1214742990893082138">"Hlela"</string>
+    <string name="bottom_action_bar_download" msgid="3983122338076389421">"Landa"</string>
+    <string name="bottom_action_bar_slideshow_wallpaper" msgid="509770525179533154">"Isithombe sangemuva sombukiso wesilayidi"</string>
+    <string name="bottom_action_bar_apply" msgid="2983308349819178932">"Faka"</string>
+    <string name="accessibility_preview_pager" msgid="1839869637405028575">"Ikhasi elingu-<xliff:g id="ID_1">%1$d</xliff:g> kwangu-<xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="next_page_content_description" msgid="6268461446679584152">"Okulandelayo"</string>
+    <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>
 </resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index c8599c9..f468718 100755
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -16,6 +16,7 @@
 <resources>
 
     <color name="material_white_text">#ffffff</color>
+    <color name="material_grey600">#757575</color>
     <color name="material_grey500">#9e9e9e</color>
     <color name="material_grey200">#eeeeee</color>
     <color name="material_white_100">#ffffff</color>
@@ -36,10 +37,18 @@
 
     <color name="preview_pager_arrow_disabled">@android:color/darker_gray</color>
     <color name="preview_pager_background">@color/secondary_color</color>
+    <color name="fullscreen_preview_background">@color/secondary_color</color>
     <color name="google_grey900">#202124</color>
 
     <color name="google_grey700">#5f6368</color>
     <color name="edit_background_base">@color/google_grey700</color>
     <color name="option_border_default">@color/edit_background_base</color>
+    <color name="full_preview_tab_unselected_text_color">@color/black_55_alpha</color>
+    <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="selected_check_color">@color/material_white_100</color>
+    <color name="smartspace_preview_shadow_color_dark">#B0000000</color>
+    <color name="smartspace_preview_shadow_color_transparent">@android:color/transparent</color>
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index b43d350..c037cb9 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -30,11 +30,18 @@
     <dimen name="grid_tile_aspect_height">340dp</dimen>
     <dimen name="grid_tile_aspect_width">182dp</dimen>
     <dimen name="grid_edge_space">8dp</dimen>
+    <dimen name="category_grid_padding_top">4dp</dimen>
+    <dimen name="category_grid_padding_bottom">16dp</dimen>
 
     <!-- Dimensions for individual wallpaper tiles. -->
     <dimen name="grid_item_individual_wallpaper_selected_inset">14dp</dimen>
     <dimen name="grid_item_individual_wallpaper_check_circle_offset">4dp</dimen>
     <dimen name="grid_item_individual_wallpaper_check_circle_size">24dp</dimen>
+    <dimen name="grid_item_individual_padding_top">8dp</dimen>
+    <dimen name="grid_item_individual_label_padding_top">4dp</dimen>
+    <dimen name="grid_item_individual_label_padding_bottom">4dp</dimen>
+    <dimen name="wallpaper_grid_padding_top">16dp</dimen>
+    <dimen name="wallpaper_grid_padding_bottom">24dp</dimen>
 
     <!-- Dimensions for "single metadata card" configuration. -->
     <dimen name="single_metadata_card_elevation">2dp</dimen>
@@ -86,15 +93,6 @@
     <dimen name="select_wallpaper_header_height">48dp</dimen>
     <dimen name="select_wallpaper_header_margin_left">12dp</dimen>
 
-    <!-- Dimensions for "daily refresh" rotation tile in individual picker. -->
-    <dimen name="rotation_tile_padding_left">16dp</dimen>
-    <dimen name="rotation_tile_padding_right">16dp</dimen>
-    <dimen name="rotation_tile_title_size">14sp</dimen>
-    <dimen name="rotation_tile_textarea_margin_bottom">16dp</dimen>
-    <dimen name="rotation_tile_textarea_title_margin_bottom">2dp</dimen>
-    <dimen name="rotation_tile_textarea_subtitle_margin_left">4dp</dimen>
-    <dimen name="rotation_tile_refresh_icon_offset">-3dp</dimen>
-
     <!-- Dimensions for wallpaper tiles in individual picker when in desktop mode. -->
     <dimen name="tile_desktop_progress_bar_size">40dp</dimen>
 
@@ -197,7 +195,7 @@
     <dimen name="indicator_arrow_container_margin_horizontal">4dp</dimen>
     <dimen name="preview_page_gap">16dp</dimen>
     <dimen name="preview_page_horizontal_margin">56dp</dimen>
-    <dimen name="preview_page_top_margin">16dp</dimen>
+    <dimen name="preview_page_top_margin">30dp</dimen>
     <dimen name="preview_page_bottom_margin">2dp</dimen>
     <dimen name="preview_card_padding">20dp</dimen>
     <dimen name="preview_pager_max_height">450dp</dimen>
@@ -207,13 +205,32 @@
     <!-- The maximum height ratio of PreviewPager and its parent view. -->
     <item name="preview_pager_maximum_height_ratio" format="float" type="dimen">0.7</item>
 
+    <!-- Dimensions for full preview page -->
+    <dimen name="full_preview_page_default_padding_top">24dp</dimen>
+    <dimen name="full_preview_page_default_padding_bottom">32dp</dimen>
+
     <!-- Dimensions for the bottom bar. -->
     <dimen name="bottom_navbar_height">56dp</dimen>
     <dimen name="bottom_action_bar_padding_horizontal">16dp</dimen>
     <dimen name="bottom_action_bar_padding_vertical">20dp</dimen>
     <dimen name="bottom_action_bar_elevation">10dp</dimen>
 
+    <dimen name="wallpaper_info_pane_top_padding">20dp</dimen>
+    <dimen name="wallpaper_info_pane_bottom_padding">24dp</dimen>
+    <dimen name="wallpaper_info_pane_horizontal_padding">24dp</dimen>
+    <dimen name="wallpaper_info_pane_subtitle1_top_margin">14dp</dimen>
+    <dimen name="wallpaper_info_pane_subtitle2_top_margin">4dp</dimen>
+    <dimen name="wallpaper_info_pane_explore_button_top_margin">12dp</dimen>
+    <dimen name="wallpaper_info_pane_title_height">48dp</dimen>
+
     <dimen name="option_border_width">2dp</dimen>
     <dimen name="option_selected_border_width">3dp</dimen>
     <dimen name="option_title_font_text_size">12sp</dimen>
+    <dimen name="option_title_line_height">16dp</dimen>
+
+    <!-- The size of lock screen widget on the full screen. -->
+    <dimen name="lock_screen_preview_lock_icon_size">42dp</dimen>
+    <dimen name="lock_screen_preview_time_text_size">54dp</dimen>
+    <dimen name="lock_screen_preview_date_text_size">18dp</dimen>
+    <dimen name="smartspace_preview_key_ambient_shadow_blur">1.5dp</dimen>
 </resources>
diff --git a/res/values/picker_colors.xml b/res/values/picker_colors.xml
index 3780a30..5c67345 100755
--- a/res/values/picker_colors.xml
+++ b/res/values/picker_colors.xml
@@ -17,6 +17,7 @@
     <color name="black_24_alpha">#3D000000</color>
     <color name="black_38_alpha">#61000000</color>
     <color name="black_54_alpha">#8A000000</color>
+    <color name="black_55_alpha">#8C000000</color>
     <color name="black_67_alpha">#AB000000</color>
     <color name="black_87_alpha">#DE000000</color>
     <color name="translucent_black_lighter">#59000000</color>
@@ -27,6 +28,7 @@
 
     <color name="light_grey">#d8d8d8</color>
     <color name="white_34_alpha">#57FFFFFF</color>
+    <color name="white_54_alpha">#8AFFFFFF</color>
     <color name="white_60_alpha">#99FFFFFF</color>
     <color name="white_67_alpha">#ABFFFFFF</color>
     <color name="white_70_alpha">#B3FFFFFF</color>
@@ -56,15 +58,6 @@
 
     <color name="select_wallpaper_header_text_color">@color/white_60_alpha</color>
 
-    <color name="rotation_tile_enabled_background_color">@color/accent_color</color>
-    <color name="rotation_tile_enabled_title_text_color">@color/material_white_100</color>
-    <color name="rotation_tile_enabled_subtitle_text_color">@color/white_88_alpha</color>
-    <color name="rotation_tile_enabled_refresh_icon_color">@color/white_88_alpha</color>
-    <color name="rotation_tile_not_enabled_background_color">@color/secondary_color</color>
-    <color name="rotation_tile_not_enabled_title_text_color">@color/material_white_100</color>
-    <color name="rotation_tile_not_enabled_subtitle_text_color">@color/white_88_alpha</color>
-    <color name="rotation_tile_not_enabled_refresh_icon_color">@color/white_88_alpha</color>
-
     <color name="individual_tile_title_scrim_color">@color/translucent_black</color>
     <color name="individual_tile_title_text_color">@color/material_white_100</color>
 
diff --git a/res/values/strings.xml b/res/values/strings.xml
index c61d80d..fdac56d 100755
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -240,14 +240,6 @@
         Failed to refresh daily wallpaper. Please check your network connection and try again.
     </string>
 
-    <!-- Content description for a button letting the user collapse a visual panel showing info
-         about the wallpaper being previewed. [CHAR LIMIT=none] -->
-    <string name="collapse_attribution_panel">Collapse wallpaper info panel</string>
-
-    <!-- Content description for a button letting the user expand a visual panel showing info about
-         the wallpaper being previewed. [CHAR LIMIT=none] -->
-    <string name="expand_attribution_panel">Expand wallpaper info panel</string>
-
     <!-- Content -->
     <!-- Title of the collection of wallpapers stored on the device itself. [CHAR LIMIT=30] -->
     <string name="on_device_wallpapers_category_title">On-device wallpapers</string>
@@ -316,8 +308,21 @@
     <!-- Confirmation dialog. Shown after user selects to delete one wallpaper. [CHAR LIMIT=NONE] -->
     <string name="delete_wallpaper_confirmation">Delete this wallpaper from your phone?</string>
 
-    <!-- The class name for the ScaleBehavior -->
-    <string name="scalable_container_behavior" translatable="false">com.android.wallpaper.picker.ScaleBehavior</string>
+    <!-- Content description of back button on the bottom action bar. [CHAR LIMIT=30] -->
+    <string name="bottom_action_bar_back">Back</string>
+
+    <!-- Content description of edit button on the bottom action bar. [CHAR LIMIT=30] -->
+    <string name="bottom_action_bar_edit">Edit</string>
+
+    <!-- TODO(b/154299462): Separate downloadable related actions from WallpaperPicker. -->
+    <!-- Content description of download button on the bottom action bar. [CHAR LIMIT=30] -->
+    <string name="bottom_action_bar_download">Download</string>
+
+    <!-- Content description of "slideshow wallpaper" button on the bottom action bar. [CHAR LIMIT=50] -->
+    <string name="bottom_action_bar_slideshow_wallpaper">Slideshow Wallpaper</string>
+
+    <!-- Content description of apply button on the bottom action bar. [CHAR LIMIT=30] -->
+    <string name="bottom_action_bar_apply">Apply</string>
 
     <!-- Accessibility label for paging indicator in theme picker preview [CHAR LIMIT=NONE] -->
     <string name="accessibility_preview_pager" msgid="3548503287402185430">Page <xliff:g name="current_page" example="1">%1$d</xliff:g> of <xliff:g name="num_pages" example="2">%2$d</xliff:g></string>
@@ -330,4 +335,10 @@
     corresponding to a ContentProvider in launcher to provide available grids and
     allow for changing them -->
     <string name="grid_control_metadata_name" translatable="false">com.android.launcher3.grid.control</string>
+
+    <!-- Title of the tool bar in the wallpaper picker. [CHAR LIMIT=19] -->
+    <string name="wallpaper_title">Wallpaper</string>
+
+    <!-- Content description of wallpaper preview card. [CHAR_LIMIT=40]-->
+    <string name="wallpaper_preview_card_content_description">Wallpaper preview</string>
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 3cf2dbc..ac125bc 100755
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -125,7 +125,7 @@
 
     <style name="OutlinedButtonStyle"  parent="@android:style/Widget.DeviceDefault.Button">
         <item name="android:background">@drawable/btn_transparent</item>
-        <item name="android:textColor">@android:color/white</item>
+        <item name="android:textColor">?android:attr/colorAccent</item>
     </style>
 
     <style name="ActionBarCheckboxStyle" parent="@android:style/Widget.DeviceDefault.CompoundButton.CheckBox">
@@ -152,6 +152,14 @@
         <item name="tabMaxWidth">0dp</item>
     </style>
 
+    <!-- Preview customization pane styles -->
+    <style name="WallpaperPicker.CustomizationPaneStyle" parent="@android:style/Theme.DeviceDefault.Settings">
+        <item name="tabTextAppearance">@style/WallpaperPicker.Preview.TextAppearance.NoAllCaps</item>
+        <item name="tabIndicatorColor">?android:attr/textColorPrimary</item>
+        <item name="tabGravity">fill</item>
+        <item name="tabMaxWidth">0dp</item>
+    </style>
+
     <style name="preview_attribution_pane_title">
         <item name="android:textColor">@color/material_white_text</item>
         <item name="android:textSize">@dimen/abc_text_size_subhead_material</item>
@@ -176,6 +184,7 @@
     <!-- Set wallpaper destination item -->
     <style name="set_wallpaper_destination_item">
         <item name="android:minHeight">@dimen/set_wallpaper_dialog_item_min_height</item>
+        <item name="android:textAlignment">viewStart</item>
         <item name="android:textAppearance">?attr/textAppearanceListItemSmall</item>
         <item name="android:textColor">?android:attr/textColorPrimary</item>
         <item name="android:textSize">@dimen/abc_text_size_subhead_material</item>
diff --git a/src/com/android/wallpaper/asset/Asset.java b/src/com/android/wallpaper/asset/Asset.java
index 80e2196..b0efcce 100755
--- a/src/com/android/wallpaper/asset/Asset.java
+++ b/src/com/android/wallpaper/asset/Asset.java
@@ -279,6 +279,10 @@
         void onDrawableLoaded();
     }
 
+    protected void adjustCropRect(Context context, Point assetDimensions, Rect cropRect) {
+        WallpaperCropUtils.adjustCropRect(context, cropRect, true /* zoomIn */);
+    }
+
     /**
      * Custom AsyncTask which returns a copy of the given bitmap which is center cropped and scaled
      * to fit in the given ImageView.
diff --git a/src/com/android/wallpaper/asset/CurrentWallpaperAssetVN.java b/src/com/android/wallpaper/asset/CurrentWallpaperAssetVN.java
index 70c729e..d7460d6 100755
--- a/src/com/android/wallpaper/asset/CurrentWallpaperAssetVN.java
+++ b/src/com/android/wallpaper/asset/CurrentWallpaperAssetVN.java
@@ -17,6 +17,8 @@
 
 import android.app.WallpaperManager;
 import android.content.Context;
+import android.graphics.Point;
+import android.graphics.Rect;
 import android.os.ParcelFileDescriptor;
 import android.os.ParcelFileDescriptor.AutoCloseInputStream;
 import android.util.Log;
@@ -24,6 +26,8 @@
 
 import com.android.wallpaper.compat.WallpaperManagerCompat;
 import com.android.wallpaper.compat.WallpaperManagerCompat.WallpaperLocation;
+import com.android.wallpaper.util.WallpaperCropUtils;
+
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.load.Key;
 import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
@@ -95,6 +99,12 @@
                 .into(imageView);
     }
 
+    @Override
+    protected void adjustCropRect(Context context, Point assetDimensions, Rect cropRect) {
+        cropRect.offsetTo(0, 0);
+        WallpaperCropUtils.adjustCurrentWallpaperCropRect(context, assetDimensions, cropRect);
+    }
+
     public Key getKey() {
         return new CurrentWallpaperVNKey(mWallpaperManager, mWallpaperManagerFlag);
     }
diff --git a/src/com/android/wallpaper/asset/NexusStaticAsset.java b/src/com/android/wallpaper/asset/SystemStaticAsset.java
similarity index 83%
rename from src/com/android/wallpaper/asset/NexusStaticAsset.java
rename to src/com/android/wallpaper/asset/SystemStaticAsset.java
index 730bbac..5c585bc 100755
--- a/src/com/android/wallpaper/asset/NexusStaticAsset.java
+++ b/src/com/android/wallpaper/asset/SystemStaticAsset.java
@@ -20,16 +20,16 @@
 import com.bumptech.glide.load.Key;
 
 /**
- * Image asset representing a Nexus stub APK resource.
+ * Image asset representing a Partner stub APK resource.
  */
-public final class NexusStaticAsset extends ResourceAsset {
+public final class SystemStaticAsset extends ResourceAsset {
     private final String mResName;
 
     /**
      * @param res   Resources containing the asset.
      * @param resId Resource ID referencing the asset.
      */
-    public NexusStaticAsset(Resources res, int resId, String resName) {
+    public SystemStaticAsset(Resources res, int resId, String resName) {
         super(res, resId);
         mResName = resName;
     }
@@ -43,12 +43,12 @@
     }
 
     /**
-     * Glide caching key for resources from Nexus stub APK.
+     * Glide caching key for resources from System stub APK.
      */
     private static class PackageResourceKey extends ResourceAsset.PackageResourceKey {
         private String mResName;
 
-        public PackageResourceKey(Resources res, int resId, String resName) {
+        PackageResourceKey(Resources res, int resId, String resName) {
             super(res, resId);
             mResName = resName;
         }
diff --git a/src/com/android/wallpaper/asset/NexusStaticAssetLoader.java b/src/com/android/wallpaper/asset/SystemStaticAssetLoader.java
similarity index 60%
rename from src/com/android/wallpaper/asset/NexusStaticAssetLoader.java
rename to src/com/android/wallpaper/asset/SystemStaticAssetLoader.java
index f75154b..e0a1e97 100755
--- a/src/com/android/wallpaper/asset/NexusStaticAssetLoader.java
+++ b/src/com/android/wallpaper/asset/SystemStaticAssetLoader.java
@@ -15,6 +15,8 @@
  */
 package com.android.wallpaper.asset;
 
+import androidx.annotation.Nullable;
+
 import com.android.wallpaper.asset.ResourceAssetLoader.ResourceAssetFetcher;
 
 import com.bumptech.glide.load.Options;
@@ -24,36 +26,36 @@
 
 import java.io.InputStream;
 
-import androidx.annotation.Nullable;
-
 /**
- * Glide ModelLoader which loads InputStreams from NexusStaticAssets.
+ * Glide ModelLoader which loads InputStreams from PartnerStaticAssets.
  */
-public class NexusStaticAssetLoader implements ModelLoader<NexusStaticAsset, InputStream> {
+public class SystemStaticAssetLoader implements ModelLoader<SystemStaticAsset, InputStream> {
 
     @Override
-    public boolean handles(NexusStaticAsset nexusStaticAsset) {
+    public boolean handles(SystemStaticAsset systemStaticAsset) {
         return true;
     }
 
     @Nullable
     @Override
-    public LoadData<InputStream> buildLoadData(NexusStaticAsset nexusStaticAsset, int unusedWidth,
+    public LoadData<InputStream> buildLoadData(SystemStaticAsset systemStaticAsset, int unusedWidth,
                                                int unusedHeight, Options options) {
-        return new LoadData<>(nexusStaticAsset.getKey(), new ResourceAssetFetcher(nexusStaticAsset));
+        return new LoadData<>(systemStaticAsset.getKey(),
+                new ResourceAssetFetcher(systemStaticAsset));
     }
 
     /**
-     * Factory that constructs {@link NexusStaticAssetLoader} instances.
+     * Factory that constructs {@link SystemStaticAssetLoader} instances.
      */
-    public static class NexusStaticAssetLoaderFactory
-            implements ModelLoaderFactory<NexusStaticAsset, InputStream> {
-        public NexusStaticAssetLoaderFactory() {
+    public static class SystemStaticAssetLoaderFactory
+            implements ModelLoaderFactory<SystemStaticAsset, InputStream> {
+        public SystemStaticAssetLoaderFactory() {
         }
 
         @Override
-        public ModelLoader<NexusStaticAsset, InputStream> build(MultiModelLoaderFactory multiFactory) {
-            return new NexusStaticAssetLoader();
+        public ModelLoader<SystemStaticAsset, InputStream> build(
+                MultiModelLoaderFactory multiFactory) {
+            return new SystemStaticAssetLoader();
         }
 
         @Override
diff --git a/src/com/android/wallpaper/asset/WallpaperGlideModule.java b/src/com/android/wallpaper/asset/WallpaperGlideModule.java
index 6a5e560..26f64c6 100755
--- a/src/com/android/wallpaper/asset/WallpaperGlideModule.java
+++ b/src/com/android/wallpaper/asset/WallpaperGlideModule.java
@@ -5,8 +5,8 @@
 
 import com.android.wallpaper.asset.CurrentWallpaperAssetVNLoader.CurrentWallpaperAssetVNLoaderFactory;
 import com.android.wallpaper.asset.LiveWallpaperThumbAssetLoader.LiveWallpaperThumbAssetLoaderFactory;
-import com.android.wallpaper.asset.NexusStaticAssetLoader.NexusStaticAssetLoaderFactory;
 import com.android.wallpaper.asset.ResourceAssetLoader.ResourceAssetLoaderFactory;
+import com.android.wallpaper.asset.SystemStaticAssetLoader.SystemStaticAssetLoaderFactory;
 import com.android.wallpaper.asset.WallpaperModelLoader.WallpaperModelLoaderFactory;
 
 import com.bumptech.glide.Glide;
@@ -51,7 +51,8 @@
     public void registerComponents(Context context, Glide glide, Registry registry) {
         registry.append(WallpaperModel.class, Drawable.class, new WallpaperModelLoaderFactory());
         registry.append(ResourceAsset.class, InputStream.class, new ResourceAssetLoaderFactory());
-        registry.append(NexusStaticAsset.class, InputStream.class, new NexusStaticAssetLoaderFactory());
+        registry.append(SystemStaticAsset.class, InputStream.class,
+                new SystemStaticAssetLoaderFactory());
         registry.append(LiveWallpaperThumbAsset.class, Drawable.class,
                 new LiveWallpaperThumbAssetLoaderFactory());
         registry.append(CurrentWallpaperAssetVN.class, InputStream.class,
diff --git a/src/com/android/wallpaper/model/LiveWallpaperInfo.java b/src/com/android/wallpaper/model/LiveWallpaperInfo.java
index 891adfc..0bc467f 100755
--- a/src/com/android/wallpaper/model/LiveWallpaperInfo.java
+++ b/src/com/android/wallpaper/model/LiveWallpaperInfo.java
@@ -26,6 +26,8 @@
 import android.net.Uri;
 import android.os.Parcel;
 import android.service.wallpaper.WallpaperService;
+import android.text.TextUtils;
+import android.util.AttributeSet;
 import android.util.Log;
 
 import androidx.annotation.Nullable;
@@ -48,6 +50,7 @@
 import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 
 /**
  * Represents a live wallpaper from the system.
@@ -65,10 +68,70 @@
                     return new LiveWallpaperInfo[size];
                 }
             };
+
+    public static final String TAG_NAME = "live-wallpaper";
+
     private static final String TAG = "LiveWallpaperInfo";
+    public static final String ATTR_ID = "id";
+    public static final String ATTR_PACKAGE = "package";
+    public static final String ATTR_SERVICE = "service";
+
+    /**
+     * Create a new {@link LiveWallpaperInfo} from an XML {@link AttributeSet}
+     * @param context used to construct the {@link android.app.WallpaperInfo} associated with the
+     *                new {@link LiveWallpaperInfo}
+     * @param categoryId Id of the category the new wallpaper will belong to
+     * @param attrs {@link AttributeSet} to parse
+     * @return a newly created {@link LiveWallpaperInfo} or {@code null} if one couldn't be created.
+     */
+    @Nullable
+    public static LiveWallpaperInfo fromAttributeSet(Context context, String categoryId,
+            AttributeSet attrs) {
+        String wallpaperId = attrs.getAttributeValue(null, ATTR_ID);
+        if (TextUtils.isEmpty(wallpaperId)) {
+            Log.w(TAG, "Live wallpaper declaration without id in category " + categoryId);
+            return null;
+        }
+        String packageName = attrs.getAttributeValue(null, ATTR_PACKAGE);
+        String serviceName = attrs.getAttributeValue(null, ATTR_SERVICE);
+        if (TextUtils.isEmpty(serviceName)) {
+            Log.w(TAG, "Live wallpaper declaration without service: " + wallpaperId);
+            return null;
+        }
+
+        Intent intent = new Intent(WallpaperService.SERVICE_INTERFACE);
+        if (TextUtils.isEmpty(packageName)) {
+            String [] parts = serviceName.split("/");
+            if (parts != null && parts.length == 2) {
+                packageName = parts[0];
+                serviceName = parts[1];
+            } else {
+                Log.w(TAG, "Live wallpaper declaration with invalid service: " + wallpaperId);
+                return null;
+            }
+        }
+        intent.setClassName(packageName, serviceName);
+        List<ResolveInfo> resolveInfos = context.getPackageManager().queryIntentServices(intent,
+                PackageManager.GET_META_DATA);
+        if (resolveInfos.isEmpty()) {
+            Log.w(TAG, "Couldn't find live wallpaper for " + serviceName);
+            return null;
+        }
+        android.app.WallpaperInfo wallpaperInfo;
+        try {
+            wallpaperInfo = new android.app.WallpaperInfo(context, resolveInfos.get(0));
+        } catch (XmlPullParserException | IOException e) {
+            Log.w(TAG, "Skipping wallpaper " + resolveInfos.get(0).serviceInfo, e);
+            return null;
+        }
+
+        return new LiveWallpaperInfo(wallpaperInfo, false, categoryId);
+    }
+
     protected android.app.WallpaperInfo mInfo;
     protected LiveWallpaperThumbAsset mThumbAsset;
     private boolean mVisibleTitle;
+    @Nullable private final String mCollectionId;
 
     /**
      * Constructs a LiveWallpaperInfo wrapping the given system WallpaperInfo object, representing
@@ -77,21 +140,24 @@
      * @param info
      */
     public LiveWallpaperInfo(android.app.WallpaperInfo info) {
-        this(info, true);
+        this(info, true, null);
     }
 
     /**
      * Constructs a LiveWallpaperInfo wrapping the given system WallpaperInfo object, representing
      * a particular live wallpaper.
      */
-    public LiveWallpaperInfo(android.app.WallpaperInfo info, boolean visibleTitle) {
+    public LiveWallpaperInfo(android.app.WallpaperInfo info, boolean visibleTitle,
+            @Nullable String collectionId) {
         mInfo = info;
         mVisibleTitle = visibleTitle;
+        mCollectionId = collectionId;
     }
 
     LiveWallpaperInfo(Parcel in) {
         mInfo = in.readParcelable(android.app.WallpaperInfo.class.getClassLoader());
         mVisibleTitle = in.readInt() == 1;
+        mCollectionId = in.readString();
     }
 
     /**
@@ -99,7 +165,7 @@
      * the package names in excludedPackageNames.
      */
     public static List<WallpaperInfo> getAll(Context context,
-                                             @Nullable List<String> excludedPackageNames) {
+                                             @Nullable Set<String> excludedPackageNames) {
         List<ResolveInfo> resolveInfos = getAllOnDevice(context);
         List<WallpaperInfo> wallpaperInfos = new ArrayList<>();
         LiveWallpaperInfoFactory factory =
@@ -109,10 +175,7 @@
             android.app.WallpaperInfo wallpaperInfo;
             try {
                 wallpaperInfo = new android.app.WallpaperInfo(context, resolveInfo);
-            } catch (XmlPullParserException e) {
-                Log.w(TAG, "Skipping wallpaper " + resolveInfo.serviceInfo, e);
-                continue;
-            } catch (IOException e) {
+            } catch (XmlPullParserException | IOException e) {
                 Log.w(TAG, "Skipping wallpaper " + resolveInfo.serviceInfo, e);
                 continue;
             }
@@ -167,7 +230,7 @@
                 continue;
             }
 
-            wallpaperInfos.add(factory.getLiveWallpaperInfo(wallpaperInfo, shouldShowTitle));
+            wallpaperInfos.add(factory.getLiveWallpaperInfo(wallpaperInfo, shouldShowTitle, null));
         }
 
         return wallpaperInfos;
@@ -347,6 +410,7 @@
     public void writeToParcel(Parcel parcel, int i) {
         parcel.writeParcelable(mInfo, 0 /* flags */);
         parcel.writeInt(mVisibleTitle ? 1 : 0);
+        parcel.writeString(mCollectionId);
     }
 
     @Override
@@ -356,7 +420,9 @@
 
     @Override
     public String getCollectionId(Context context) {
-        return context.getString(R.string.live_wallpaper_collection_id);
+        return TextUtils.isEmpty(mCollectionId)
+                ? context.getString(R.string.live_wallpaper_collection_id)
+                : mCollectionId;
     }
 
     @Override
diff --git a/src/com/android/wallpaper/model/EmptyCategory.java b/src/com/android/wallpaper/model/PlaceholderCategory.java
similarity index 90%
rename from src/com/android/wallpaper/model/EmptyCategory.java
rename to src/com/android/wallpaper/model/PlaceholderCategory.java
index d37da90..55186ea 100644
--- a/src/com/android/wallpaper/model/EmptyCategory.java
+++ b/src/com/android/wallpaper/model/PlaceholderCategory.java
@@ -24,14 +24,14 @@
  * A placeholder {@link Category} with only id and title (and no content).
  * Typically used to display partially loaded categories.
  */
-public class EmptyCategory extends Category {
+public class PlaceholderCategory extends Category {
 
     /**
      * Constructs an EmptyCategory object.
      *
      * @see Category#Category(String, String, int)
      */
-    public EmptyCategory(String title, String collectionId, int priority) {
+    public PlaceholderCategory(String title, String collectionId, int priority) {
         super(title, collectionId, priority);
     }
 
diff --git a/src/com/android/wallpaper/model/SystemStaticWallpaperInfo.java b/src/com/android/wallpaper/model/SystemStaticWallpaperInfo.java
new file mode 100755
index 0000000..db34abb
--- /dev/null
+++ b/src/com/android/wallpaper/model/SystemStaticWallpaperInfo.java
@@ -0,0 +1,305 @@
+/*
+ * 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.model;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.os.Parcel;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.util.Log;
+
+import androidx.annotation.Nullable;
+
+import com.android.wallpaper.asset.Asset;
+import com.android.wallpaper.asset.ResourceAsset;
+import com.android.wallpaper.asset.SystemStaticAsset;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Represents a wallpaper coming from the resources of the partner static wallpaper
+ * container APK.
+ */
+public class SystemStaticWallpaperInfo extends WallpaperInfo {
+    public static final Creator<SystemStaticWallpaperInfo> CREATOR =
+            new Creator<SystemStaticWallpaperInfo>() {
+                @Override
+                public SystemStaticWallpaperInfo createFromParcel(Parcel in) {
+                    return new SystemStaticWallpaperInfo(in);
+                }
+
+                @Override
+                public SystemStaticWallpaperInfo[] newArray(int size) {
+                    return new SystemStaticWallpaperInfo[size];
+                }
+            };
+    public static final String TAG_NAME = "static-wallpaper";
+
+    private static final String TAG = "PartnerStaticWPInfo";
+    private static final String DRAWABLE_DEF_TYPE = "drawable";
+    private static final String STRING_DEF_TYPE = "string";
+    private static final String INTEGER_DEF_TYPE = "integer";
+    private static final String ARRAY_DEF_TYPE = "array";
+    private static final String WALLPAPERS_RES_SUFFIX = "_wallpapers";
+    private static final String TITLE_RES_SUFFIX = "_title";
+    private static final String SUBTITLE1_RES_SUFFIX = "_subtitle1";
+    private static final String SUBTITLE2_RES_SUFFIX = "_subtitle2";
+    private static final String ACTION_TYPE_RES_SUFFIX = "_action_type";
+    private static final String ACTION_URL_RES_SUFFIX = "_action_url";
+
+    // Xml parsing attribute names
+    public static final String ATTR_ID = "id";
+    public static final String ATTR_SRC = "src";
+    public static final String ATTR_TITLE_RES = "title";
+    public static final String ATTR_SUBTITLE1_RES = "subtitle1";
+    public static final String ATTR_SUBTITLE2_RES = "subtitle2";
+    public static final String ATTR_ACTION_URL_RES = "actionUrl";
+
+    /**
+     * Create and return a new {@link SystemStaticWallpaperInfo} from the information in the given
+     * XML's {@link AttributeSet}
+     * @param packageName name of the package where the resources are read from
+     * @param categoryId id of the category the new wallpaper will belong to
+     * @param attrs {@link AttributeSet} from the XML with the information for the new wallpaper
+     *                                  info
+     * @return a new {@link SystemStaticWallpaperInfo} or {@code null} if no id could be found in
+     * the given {@link AttributeSet}
+     */
+    @Nullable
+    public static SystemStaticWallpaperInfo fromAttributeSet(String packageName,
+            String categoryId, AttributeSet attrs) {
+        String wallpaperId = attrs.getAttributeValue(null, ATTR_ID);
+        if (TextUtils.isEmpty(wallpaperId)) {
+            return null;
+        }
+        int drawableResId = attrs.getAttributeResourceValue(null, ATTR_SRC, 0);
+        int wallpaperTitleResId = attrs.getAttributeResourceValue(null, ATTR_TITLE_RES, 0);
+        int wallpaperSubtitle1ResId = attrs.getAttributeResourceValue(null, ATTR_SUBTITLE1_RES, 0);
+        int wallpaperSubtitle2ResId = attrs.getAttributeResourceValue(null, ATTR_SUBTITLE2_RES, 0);
+        int actionUrlResId = attrs.getAttributeResourceValue(null, ATTR_ACTION_URL_RES, 0);
+
+        return new SystemStaticWallpaperInfo(packageName, wallpaperId,
+                categoryId, drawableResId, wallpaperTitleResId, wallpaperSubtitle1ResId,
+                wallpaperSubtitle2ResId, 0, actionUrlResId);
+    }
+
+    /**
+     * Read from the given stub apk the available static categories and wallpapers
+     * @deprecated this is left for backwards compatibility with legacy stub format,
+     * use {@link #fromAttributeSet(String, String, AttributeSet)} instead for
+     * the new stub format.
+     */
+    @Deprecated
+    public static List<WallpaperInfo> getAll(String partnerStubPackageName,
+            Resources stubApkResources, String categoryId) {
+        ArrayList<WallpaperInfo> wallpapers = new ArrayList<>();
+
+        int listResId = stubApkResources.getIdentifier(categoryId + WALLPAPERS_RES_SUFFIX,
+                ARRAY_DEF_TYPE, partnerStubPackageName);
+        String[] wallpaperResNames = stubApkResources.getStringArray(listResId);
+
+        for (String wallpaperResName : wallpaperResNames) {
+            int drawableResId = stubApkResources.getIdentifier(wallpaperResName, DRAWABLE_DEF_TYPE,
+                    partnerStubPackageName);
+            int wallpaperTitleResId = stubApkResources.getIdentifier(
+                    wallpaperResName + TITLE_RES_SUFFIX, STRING_DEF_TYPE, partnerStubPackageName);
+            int wallpaperSubtitle1ResId = stubApkResources.getIdentifier(
+                    wallpaperResName + SUBTITLE1_RES_SUFFIX, STRING_DEF_TYPE,
+                    partnerStubPackageName);
+            int wallpaperSubtitle2ResId = stubApkResources.getIdentifier(
+                    wallpaperResName + SUBTITLE2_RES_SUFFIX, STRING_DEF_TYPE,
+                    partnerStubPackageName);
+            int actionTypeResId = stubApkResources.getIdentifier(
+                    wallpaperResName + ACTION_TYPE_RES_SUFFIX, INTEGER_DEF_TYPE,
+                    partnerStubPackageName);
+            int actionUrlResId = stubApkResources.getIdentifier(
+                    wallpaperResName + ACTION_URL_RES_SUFFIX, STRING_DEF_TYPE,
+                    partnerStubPackageName);
+
+            SystemStaticWallpaperInfo wallpaperInfo = new SystemStaticWallpaperInfo(
+                    partnerStubPackageName, wallpaperResName, categoryId,
+                    drawableResId, wallpaperTitleResId, wallpaperSubtitle1ResId,
+                    wallpaperSubtitle2ResId, actionTypeResId, actionUrlResId);
+            wallpapers.add(wallpaperInfo);
+        }
+
+        return wallpapers;
+    }
+
+    private final int mDrawableResId;
+    private final String mWallpaperId;
+    private final String mCollectionId;
+    private final int mTitleResId;
+    private final int mSubtitle1ResId;
+    private final int mSubtitle2ResId;
+    private final int mActionTypeResId;
+    private final int mActionUrlResId;
+    private ResourceAsset mAsset;
+    private Resources mResources;
+    private final String mPackageName;
+    private List<String> mAttributions;
+    private String mActionUrl;
+    private int mActionType;
+
+    /**
+     * Constructs a new Nexus static wallpaper model object.
+     *
+     * @param resName        The unique name of the wallpaper resource, e.g. "z_wp001".
+     * @param collectionId   Unique name of the collection this wallpaper belongs in;
+     *                       used for logging.
+     * @param drawableResId  Resource ID of the raw wallpaper image.
+     * @param titleResId     Resource ID of the string for the title attribution.
+     * @param subtitle1ResId Resource ID of the string for the first subtitle attribution.
+     * @param subtitle2ResId Resource ID of the string for the second subtitle attribution.
+     */
+    public SystemStaticWallpaperInfo(String packageName, String resName, String collectionId,
+            int drawableResId, int titleResId, int subtitle1ResId, int subtitle2ResId,
+            int actionTypeResId, int actionUrlResId) {
+        mPackageName = packageName;
+        mWallpaperId = resName;
+        mCollectionId = collectionId;
+        mDrawableResId = drawableResId;
+        mTitleResId = titleResId;
+        mSubtitle1ResId = subtitle1ResId;
+        mSubtitle2ResId = subtitle2ResId;
+        mActionTypeResId = actionTypeResId;
+        mActionUrlResId = actionUrlResId;
+    }
+
+    private SystemStaticWallpaperInfo(Parcel in) {
+        mPackageName = in.readString();
+        mWallpaperId = in.readString();
+        mCollectionId = in.readString();
+        mDrawableResId = in.readInt();
+        mTitleResId = in.readInt();
+        mSubtitle1ResId = in.readInt();
+        mSubtitle2ResId = in.readInt();
+        mActionTypeResId = in.readInt();
+        mActionUrlResId = in.readInt();
+    }
+
+    @Override
+    public Asset getAsset(Context context) {
+        if (mAsset == null) {
+            Resources res = getPackageResources(context);
+            mAsset = new SystemStaticAsset(res, mDrawableResId, mWallpaperId);
+        }
+
+        return mAsset;
+    }
+
+    @Override
+    public Asset getThumbAsset(Context context) {
+        return getAsset(context);
+    }
+
+    @Override
+    public List<String> getAttributions(Context context) {
+        if (mAttributions == null) {
+            Resources res = getPackageResources(context);
+            mAttributions = new ArrayList<>();
+            if (mTitleResId != 0) {
+                mAttributions.add(res.getString(mTitleResId));
+            }
+            if (mSubtitle1ResId != 0) {
+                mAttributions.add(res.getString(mSubtitle1ResId));
+            }
+            if (mSubtitle2ResId != 0) {
+                mAttributions.add(res.getString(mSubtitle2ResId));
+            }
+        }
+
+        return mAttributions;
+    }
+
+    @Override
+    public String getActionUrl(Context context) {
+        if (mActionUrl == null && mActionUrlResId != 0) {
+            mActionUrl = getPackageResources(context).getString(mActionUrlResId);
+        }
+        return mActionUrl;
+    }
+
+    @Override
+    public int getActionLabelRes(Context context) {
+        return WallpaperInfo.getDefaultActionLabel();
+    }
+
+    @Override
+    public int getActionIconRes(Context context) {
+        return WallpaperInfo.getDefaultActionIcon();
+    }
+
+    @Override
+    public void showPreview(Activity srcActivity, InlinePreviewIntentFactory factory,
+                            int requestCode) {
+        srcActivity.startActivityForResult(factory.newIntent(srcActivity, this), requestCode);
+    }
+
+    @Override
+    public String getCollectionId(Context unused) {
+        return mCollectionId;
+    }
+
+    @Override
+    public String getWallpaperId() {
+        return mWallpaperId;
+    }
+
+    public String getResName() {
+        return mWallpaperId;
+    }
+
+    private int getActionType(Context context) {
+        if (mActionType == 0 && mActionTypeResId != 0) {
+            mActionType = getPackageResources(context).getInteger(mActionTypeResId);
+        }
+        return mActionType;
+    }
+
+    /**
+     * Returns the {@link Resources} instance for the Nexus static wallpapers stub APK.
+     */
+    private Resources getPackageResources(Context context) {
+        if (mResources != null) {
+            return mResources;
+        }
+
+        try {
+            mResources = context.getPackageManager().getResourcesForApplication(mPackageName);
+        } catch (PackageManager.NameNotFoundException e) {
+            Log.e(TAG, "Could not get app resources");
+        }
+        return mResources;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(mPackageName);
+        dest.writeString(mWallpaperId);
+        dest.writeString(mCollectionId);
+        dest.writeInt(mDrawableResId);
+        dest.writeInt(mTitleResId);
+        dest.writeInt(mSubtitle1ResId);
+        dest.writeInt(mSubtitle2ResId);
+        dest.writeInt(mActionTypeResId);
+        dest.writeInt(mActionUrlResId);
+    }
+}
diff --git a/src/com/android/wallpaper/model/LiveWallpaperCategory.java b/src/com/android/wallpaper/model/ThirdPartyLiveWallpaperCategory.java
similarity index 78%
rename from src/com/android/wallpaper/model/LiveWallpaperCategory.java
rename to src/com/android/wallpaper/model/ThirdPartyLiveWallpaperCategory.java
index 253e11d..0ad1fb7 100644
--- a/src/com/android/wallpaper/model/LiveWallpaperCategory.java
+++ b/src/com/android/wallpaper/model/ThirdPartyLiveWallpaperCategory.java
@@ -18,18 +18,22 @@
 import android.content.Context;
 import android.os.AsyncTask;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import androidx.annotation.Nullable;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
 
-public class LiveWallpaperCategory extends WallpaperCategory {
+/**
+ * Category listing third party live wallpapers the user might have installed.
+ */
+public class ThirdPartyLiveWallpaperCategory extends WallpaperCategory {
 
-    private final List<String> mExcludedPackages;
+    private final Set<String> mExcludedPackages;
 
-    public LiveWallpaperCategory(String title, String collectionId, List<WallpaperInfo> wallpapers,
-        int priority, @Nullable List<String> excludedLiveWallpaperPackageNames) {
+    public ThirdPartyLiveWallpaperCategory(String title, String collectionId,
+            List<WallpaperInfo> wallpapers,
+            int priority, @Nullable Set<String> excludedLiveWallpaperPackageNames) {
         super(title, collectionId, wallpapers, priority);
         mExcludedPackages = excludedLiveWallpaperPackageNames;
     }
@@ -68,13 +72,13 @@
 
     private class FetchLiveWallpapersTask extends AsyncTask<Void, Void, Void> {
 
-        final private Context mContext;
-        final private List<WallpaperInfo> mCategoryWallpapers;
-        @Nullable final private List<String> mExcludedPackages;
-        @Nullable final private WallpaperReceiver mReceiver;
+        private final Context mContext;
+        private final List<WallpaperInfo> mCategoryWallpapers;
+        @Nullable private final Set<String> mExcludedPackages;
+        @Nullable private final WallpaperReceiver mReceiver;
 
-        public FetchLiveWallpapersTask(Context context, List<WallpaperInfo> wallpapers,
-                @Nullable List<String> excludedPackages, @Nullable WallpaperReceiver receiver) {
+        FetchLiveWallpapersTask(Context context, List<WallpaperInfo> wallpapers,
+                @Nullable Set<String> excludedPackages, @Nullable WallpaperReceiver receiver) {
             mContext = context;
             mCategoryWallpapers = wallpapers;
             mExcludedPackages = excludedPackages;
diff --git a/src/com/android/wallpaper/model/WallpaperCategory.java b/src/com/android/wallpaper/model/WallpaperCategory.java
index fc0921a..858d19f 100755
--- a/src/com/android/wallpaper/model/WallpaperCategory.java
+++ b/src/com/android/wallpaper/model/WallpaperCategory.java
@@ -17,10 +17,17 @@
 
 import android.app.Activity;
 import android.content.Context;
+import android.content.res.Resources;
+import android.util.AttributeSet;
+
+import androidx.annotation.IdRes;
+import androidx.annotation.StringRes;
 
 import com.android.wallpaper.asset.Asset;
+import com.android.wallpaper.asset.ResourceAsset;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -28,6 +35,8 @@
  */
 public class WallpaperCategory extends Category {
 
+    public static final String TAG_NAME = "category";
+
     protected final Object mWallpapersLock;
     private final List<WallpaperInfo> mWallpapers;
     private Asset mThumbAsset;
@@ -46,6 +55,14 @@
         mFeaturedThumbnailIndex = featuredThumbnailIndex;
     }
 
+    public WallpaperCategory(String title, String collectionId, Asset thumbAsset,
+            List<WallpaperInfo> wallpapers, int priority) {
+        super(title, collectionId, priority);
+        mWallpapers = wallpapers;
+        mWallpapersLock = new Object();
+        mThumbAsset = thumbAsset;
+    }
+
     /**
      * Fetches wallpapers for this category and passes them to the receiver. Subclasses may use a
      * context to fetch wallpaper info.
@@ -74,6 +91,13 @@
         return mWallpapers;
     }
 
+    /**
+     * Returns an unmodifiable view the list of wallpapers in this WallpaperCategory.
+     */
+    public List<WallpaperInfo> getUnmodifiableWallpapers() {
+        return Collections.unmodifiableList(mWallpapers);
+    }
+
     @Override
     public Asset getThumbnail(Context context) {
         synchronized (mWallpapersLock) {
@@ -93,4 +117,79 @@
     public boolean containsThirdParty(String packageName) {
         return false;
     }
+
+    /**
+     * Builder used to construct a {@link WallpaperCategory} object from an XML's
+     * {@link AttributeSet}.
+     */
+    public static class Builder {
+        private final List<WallpaperInfo> mWallpapers = new ArrayList<>();
+        private final Resources mPartnerRes;
+        private String mId;
+        private String mTitle;
+        private int mPriority;
+        private String mFeaturedId;
+        @IdRes private int mThumbResId;
+
+        public Builder(Resources partnerRes, AttributeSet attrs) {
+            mPartnerRes = partnerRes;
+            mId = attrs.getAttributeValue(null, "id");
+            @StringRes int titleResId = attrs.getAttributeResourceValue(null, "title", 0);
+            mTitle = titleResId != 0 ? mPartnerRes.getString(titleResId) : "";
+            mFeaturedId = attrs.getAttributeValue(null, "featured");
+            mPriority = attrs.getAttributeIntValue(null, "priority", -1);
+            mThumbResId = attrs.getAttributeResourceValue(null, "thumbnail", 0);
+        }
+
+        /**
+         * Add the given {@link WallpaperInfo} to this category
+         * @return this for chaining
+         */
+        public Builder addWallpaper(WallpaperInfo info) {
+            mWallpapers.add(info);
+            return this;
+        }
+
+        /**
+         * If no priority was parsed from the XML attributes for this category, set the priority to
+         * the given value.
+         * @return this for chaining
+         */
+        public Builder setPriorityIfEmpty(int priority) {
+            if (mPriority < 0) {
+                mPriority = priority;
+            }
+            return this;
+        }
+
+        /**
+         * Build a {@link WallpaperCategory} with this builder's information
+         */
+        public WallpaperCategory build() {
+            if (mThumbResId != 0) {
+                return new WallpaperCategory(mTitle, mId,
+                        new ResourceAsset(mPartnerRes, mThumbResId), mWallpapers, mPriority);
+            } else {
+                int featuredIndex = 0;
+                for (int i = 0; i < mWallpapers.size(); i++) {
+                    if (mWallpapers.get(i).getWallpaperId().equals(mFeaturedId)) {
+                        featuredIndex = i;
+                        break;
+                    }
+                }
+                return new WallpaperCategory(mTitle, mId, featuredIndex, mWallpapers, mPriority);
+            }
+        }
+
+        /**
+         * Build a {@link PlaceholderCategory} with this builder's information.
+         */
+        public Category buildPlaceholder() {
+            return new PlaceholderCategory(mTitle, mId, mPriority);
+        }
+
+        public String getId() {
+            return mId;
+        }
+    }
 }
diff --git a/src/com/android/wallpaper/module/DailyLoggingAlarmReceiver.java b/src/com/android/wallpaper/module/DailyLoggingAlarmReceiver.java
index ba925b4..20d57f2 100755
--- a/src/com/android/wallpaper/module/DailyLoggingAlarmReceiver.java
+++ b/src/com/android/wallpaper/module/DailyLoggingAlarmReceiver.java
@@ -58,6 +58,7 @@
         logger.logNumDailyWallpaperRotationsInLastWeek();
         logger.logNumDailyWallpaperRotationsPreviousDay();
         logger.logWallpaperPresentationMode();
+        logger.logSnapshot();
 
         preferences.setLastDailyLogTimestamp(System.currentTimeMillis());
 
diff --git a/src/com/android/wallpaper/module/DefaultCategoryProvider.java b/src/com/android/wallpaper/module/DefaultCategoryProvider.java
index ee7b0cb..43341d5 100755
--- a/src/com/android/wallpaper/module/DefaultCategoryProvider.java
+++ b/src/com/android/wallpaper/module/DefaultCategoryProvider.java
@@ -17,7 +17,13 @@
 
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.content.res.XmlResourceParser;
 import android.os.AsyncTask;
+import android.util.Log;
+import android.util.Xml;
+
+import androidx.annotation.XmlRes;
 
 import com.android.wallpaper.R;
 import com.android.wallpaper.model.Category;
@@ -27,31 +33,44 @@
 import com.android.wallpaper.model.DesktopCustomCategory;
 import com.android.wallpaper.model.ImageCategory;
 import com.android.wallpaper.model.LegacyPartnerWallpaperInfo;
-import com.android.wallpaper.model.LiveWallpaperCategory;
 import com.android.wallpaper.model.LiveWallpaperInfo;
 import com.android.wallpaper.model.PartnerWallpaperInfo;
+import com.android.wallpaper.model.SystemStaticWallpaperInfo;
 import com.android.wallpaper.model.ThirdPartyAppCategory;
+import com.android.wallpaper.model.ThirdPartyLiveWallpaperCategory;
 import com.android.wallpaper.model.WallpaperCategory;
 import com.android.wallpaper.model.WallpaperInfo;
 import com.android.wallpaper.module.FormFactorChecker.FormFactor;
 
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * Default implementation of CategoryProvider.
  */
 public class DefaultCategoryProvider implements CategoryProvider {
 
+    private static final String TAG = "DefaultCategoryProvider";
+
     /**
      * Relative category priorities. Lower numbers correspond to higher priorities (i.e., should
      * appear higher in the categories list).
      */
-    private static final int PRIORITY_MY_PHOTOS = 100;
+    private static final int PRIORITY_MY_PHOTOS = 1;
+    private static final int PRIORITY_SYSTEM = 100;
     private static final int PRIORITY_ON_DEVICE = 200;
     private static final int PRIORITY_LIVE = 300;
     private static final int PRIORITY_THIRD_PARTY = 400;
+    protected static List<Category> sSystemCategories;
 
     protected final Context mAppContext;
     protected ArrayList<Category> mCategories;
@@ -128,10 +147,13 @@
     protected static class FetchCategoriesTask extends AsyncTask<Void, Category, Void> {
         private CategoryReceiver mReceiver;
         protected final Context mAppContext;
+        protected final PartnerProvider mPartnerProvider;
 
         public FetchCategoriesTask(CategoryReceiver receiver, Context context) {
             mReceiver = receiver;
             mAppContext = context.getApplicationContext();
+            mPartnerProvider = InjectorProvider.getInjector().getPartnerProvider(
+                    mAppContext);
         }
 
         @Override
@@ -143,7 +165,10 @@
             // "My photos" wallpapers
             publishProgress(getMyPhotosCategory(formFactor));
 
-            publishDeviceCategories(formFactor);
+            publishDeviceCategories();
+
+            // Legacy On-device wallpapers. Only show if on mobile.
+            publishProgress(getOnDeviceCategory());
 
             // Live wallpapers -- if the device supports them.
             if (mAppContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LIVE_WALLPAPER)) {
@@ -151,7 +176,7 @@
                         mAppContext, getExcludedLiveWallpaperPackageNames());
                 if (liveWallpapers.size() > 0) {
                     publishProgress(
-                            new LiveWallpaperCategory(
+                            new ThirdPartyLiveWallpaperCategory(
                                     mAppContext.getString(R.string.live_wallpapers_category_title),
                                     mAppContext.getString(R.string.live_wallpaper_collection_id),
                                     liveWallpapers,
@@ -175,15 +200,29 @@
         /**
          * Publishes the device categories.
          */
-        protected void publishDeviceCategories(@FormFactor int formFactor) {
-            if (formFactor == FormFactorChecker.FORM_FACTOR_MOBILE) {
-                // On-device wallpapers. Only show if on mobile.
-                publishProgress(getOnDeviceCategory());
+        private void publishDeviceCategories() {
+            if (sSystemCategories != null) {
+                for (int i = 0; i < sSystemCategories.size(); i++) {
+                    publishProgress(sSystemCategories.get(i));
+                }
+                return;
             }
+            sSystemCategories = getSystemCategories();
         }
 
-        public List<String> getExcludedLiveWallpaperPackageNames() {
-            return new ArrayList<String>();
+        public Set<String> getExcludedLiveWallpaperPackageNames() {
+            Set<String> excluded = new HashSet<>();
+            if (sSystemCategories != null) {
+                excluded.addAll(sSystemCategories.stream()
+                        .filter(c -> c instanceof WallpaperCategory)
+                        .flatMap(c -> ((WallpaperCategory) c).getUnmodifiableWallpapers().stream()
+                                .filter(wallpaperInfo -> wallpaperInfo instanceof LiveWallpaperInfo)
+                                .map(wallpaperInfo ->
+                                        ((LiveWallpaperInfo) wallpaperInfo).getWallpaperComponent()
+                                                .getPackageName()))
+                        .collect(Collectors.toSet()));
+            }
+            return excluded;
         }
 
         protected List<String> getExcludedThirdPartyPackageNames() {
@@ -201,15 +240,80 @@
             return null;
         }
 
+        protected List<Category> getSystemCategories() {
+            Resources partnerRes = mPartnerProvider.getResources();
+            String packageName = mPartnerProvider.getPackageName();
+            List<Category> categories = new ArrayList<>();
+            if (partnerRes == null || packageName == null) {
+                return categories;
+            }
+
+            @XmlRes int wallpapersResId = partnerRes.getIdentifier(PartnerProvider.WALLPAPER_RES_ID,
+                    "xml", packageName);
+            // Certain partner configurations don't have wallpapers provided, so need to check;
+            // return early if they are missing.
+            if (wallpapersResId == 0) {
+                return categories;
+            }
+
+            try (XmlResourceParser parser = partnerRes.getXml(wallpapersResId)) {
+                final int depth = parser.getDepth();
+                int type;
+                int priorityTracker = 0;
+                while (((type = parser.next()) != XmlPullParser.END_TAG
+                        || parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) {
+                    if ((type == XmlPullParser.START_TAG)
+                            && WallpaperCategory.TAG_NAME.equals(parser.getName())) {
+
+                        WallpaperCategory.Builder categoryBuilder =
+                                new WallpaperCategory.Builder(mPartnerProvider.getResources(),
+                                        Xml.asAttributeSet(parser));
+                        categoryBuilder.setPriorityIfEmpty(PRIORITY_SYSTEM + priorityTracker++);
+                        final int categoryDepth = parser.getDepth();
+                        boolean publishedPlaceholder = false;
+                        while (((type = parser.next()) != XmlPullParser.END_TAG
+                                || parser.getDepth() > categoryDepth)
+                                && type != XmlPullParser.END_DOCUMENT) {
+                            if (type == XmlPullParser.START_TAG) {
+                                if (!publishedPlaceholder) {
+                                    publishProgress(categoryBuilder.buildPlaceholder());
+                                    publishedPlaceholder = true;
+                                }
+                                WallpaperInfo wallpaper = null;
+                                if (SystemStaticWallpaperInfo.TAG_NAME.equals(parser.getName())) {
+                                    wallpaper = SystemStaticWallpaperInfo
+                                            .fromAttributeSet(mPartnerProvider.getPackageName(),
+                                                    categoryBuilder.getId(),
+                                                    Xml.asAttributeSet(parser));
+
+                                } else if (LiveWallpaperInfo.TAG_NAME.equals(parser.getName())) {
+                                    wallpaper = LiveWallpaperInfo.fromAttributeSet(mAppContext,
+                                            categoryBuilder.getId(), Xml.asAttributeSet(parser));
+                                }
+                                if (wallpaper != null) {
+                                    categoryBuilder.addWallpaper(wallpaper);
+                                }
+                            }
+                        }
+                        WallpaperCategory category = categoryBuilder.build();
+                        categories.add(category);
+                        publishProgress(category);
+                    }
+                }
+            } catch (IOException | XmlPullParserException e) {
+                Log.w(TAG, "Couldn't read system wallpapers definition", e);
+                return Collections.emptyList();
+            }
+            return categories;
+        }
+
         /**
          * Returns a category which incorporates both GEL and bundled wallpapers.
          */
-        private Category getOnDeviceCategory() {
+        protected Category getOnDeviceCategory() {
             List<WallpaperInfo> onDeviceWallpapers = new ArrayList<>();
 
-            PartnerProvider partnerProvider = InjectorProvider.getInjector().getPartnerProvider(
-                    mAppContext);
-            if (!partnerProvider.shouldHideDefaultWallpaper()) {
+            if (!mPartnerProvider.shouldHideDefaultWallpaper()) {
                 DefaultWallpaperInfo defaultWallpaperInfo = new DefaultWallpaperInfo();
                 onDeviceWallpapers.add(defaultWallpaperInfo);
             }
@@ -226,7 +330,7 @@
                 onDeviceWallpapers.addAll(privateWallpapers);
             }
 
-            return new WallpaperCategory(
+            return onDeviceWallpapers.isEmpty() ? null : new WallpaperCategory(
                     mAppContext.getString(R.string.on_device_wallpapers_category_title),
                     mAppContext.getString(R.string.on_device_wallpaper_collection_id),
                     onDeviceWallpapers,
@@ -265,7 +369,9 @@
 
             for (int i = 0; i < values.length; i++) {
                 Category category = values[i];
-                mReceiver.onCategoryReceived(category);
+                if (category != null) {
+                    mReceiver.onCategoryReceived(category);
+                }
             }
         }
 
diff --git a/src/com/android/wallpaper/module/DefaultLiveWallpaperInfoFactory.java b/src/com/android/wallpaper/module/DefaultLiveWallpaperInfoFactory.java
index 774ad89..67b79d8 100644
--- a/src/com/android/wallpaper/module/DefaultLiveWallpaperInfoFactory.java
+++ b/src/com/android/wallpaper/module/DefaultLiveWallpaperInfoFactory.java
@@ -15,6 +15,8 @@
  */
 package com.android.wallpaper.module;
 
+import androidx.annotation.Nullable;
+
 import com.android.wallpaper.model.LiveWallpaperInfo;
 import com.android.wallpaper.model.WallpaperInfo;
 
@@ -31,7 +33,7 @@
 
     @Override
     public WallpaperInfo getLiveWallpaperInfo(android.app.WallpaperInfo info,
-            boolean shouldShowTitle) {
-        return new LiveWallpaperInfo(info, shouldShowTitle);
+            boolean shouldShowTitle, @Nullable String collectionId) {
+        return new LiveWallpaperInfo(info, shouldShowTitle, collectionId);
     }
 }
diff --git a/src/com/android/wallpaper/module/DefaultPartnerProvider.java b/src/com/android/wallpaper/module/DefaultPartnerProvider.java
index 385af77..91d6b35 100755
--- a/src/com/android/wallpaper/module/DefaultPartnerProvider.java
+++ b/src/com/android/wallpaper/module/DefaultPartnerProvider.java
@@ -25,8 +25,9 @@
 import android.util.Log;
 import android.util.Pair;
 
-import java.io.File;
+import androidx.annotation.Nullable;
 
+import java.io.File;
 
 /**
  * Provides content from the partner customization apk on the device (if there is one).
@@ -54,7 +55,8 @@
      * @return Pair of the package name and the Resources for the APK, or null if the APK isn't found
      * on the device.
      */
-    private static Pair<String, Resources> findSystemApk(PackageManager pm) {
+    @Nullable
+    protected Pair<String, Resources> findSystemApk(PackageManager pm) {
         final Intent intent = new Intent(PartnerProvider.ACTION_PARTNER_CUSTOMIZATION);
         for (ResolveInfo info : pm.queryBroadcastReceivers(intent, 0)) {
             if (info.activityInfo != null
diff --git a/src/com/android/wallpaper/module/DefaultWallpaperPersister.java b/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
index 54393af..b888049 100755
--- a/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
+++ b/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
@@ -19,10 +19,12 @@
 import android.app.Activity;
 import android.app.WallpaperManager;
 import android.content.Context;
+import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.Bitmap.CompressFormat;
 import android.graphics.BitmapFactory;
 import android.graphics.Point;
+import android.graphics.PointF;
 import android.graphics.Rect;
 import android.graphics.drawable.BitmapDrawable;
 import android.os.AsyncTask;
@@ -45,6 +47,7 @@
 import com.android.wallpaper.module.BitmapCropper.Callback;
 import com.android.wallpaper.util.BitmapTransformer;
 import com.android.wallpaper.util.ScreenSizeCalculator;
+import com.android.wallpaper.util.WallpaperCropUtils;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -342,7 +345,7 @@
 
     @Override
     public int setWallpaperBitmapInNextRotation(Bitmap wallpaperBitmap) {
-        return setWallpaperBitmapInRotationStatic(wallpaperBitmap);
+        return cropAndSetWallpaperBitmapInRotationStatic(wallpaperBitmap);
     }
 
     @Override
@@ -359,7 +362,7 @@
      */
     private boolean setWallpaperInRotationStatic(Bitmap wallpaperBitmap, List<String> attributions,
             String actionUrl, int actionLabelRes, int actionIconRes, String collectionId) {
-        final int wallpaperId = setWallpaperBitmapInRotationStatic(wallpaperBitmap);
+        final int wallpaperId = cropAndSetWallpaperBitmapInRotationStatic(wallpaperBitmap);
 
         if (wallpaperId == 0) {
             return false;
@@ -423,7 +426,46 @@
      *
      * @return wallpaper ID for the wallpaper bitmap.
      */
-    private int setWallpaperBitmapInRotationStatic(Bitmap wallpaperBitmap) {
+    private int cropAndSetWallpaperBitmapInRotationStatic(Bitmap wallpaperBitmap) {
+        // Calculate crop and scale of the wallpaper to match the default one used in preview
+        Point wallpaperSize = new Point(wallpaperBitmap.getWidth(), wallpaperBitmap.getHeight());
+        WindowManager windowManager =
+                (WindowManager) mAppContext.getSystemService(Context.WINDOW_SERVICE);
+        Resources resources = mAppContext.getResources();
+        Point defaultCropSurfaceSize = WallpaperCropUtils.getDefaultCropSurfaceSize(
+                resources, windowManager.getDefaultDisplay());
+        Point screenSize = ScreenSizeCalculator.getInstance().getScreenSize(
+                windowManager.getDefaultDisplay());
+
+        // Determine minimum zoom to fit maximum visible area of wallpaper on crop surface.
+        float minWallpaperZoom =
+                WallpaperCropUtils.calculateMinZoom(wallpaperSize, screenSize);
+
+        PointF centerPosition = WallpaperCropUtils.calculateDefaultCenter(mAppContext,
+                wallpaperSize, WallpaperCropUtils.calculateVisibleRect(wallpaperSize, screenSize));
+
+        Point scaledCenter = new Point((int) (minWallpaperZoom * centerPosition.x),
+                (int) (minWallpaperZoom * centerPosition.y));
+
+        int offsetX = Math.max(0, -(screenSize.x / 2 - scaledCenter.x));
+        int offsetY = Math.max(0, -(screenSize.y / 2 - scaledCenter.y));
+
+        Rect cropRect = WallpaperCropUtils.calculateCropRect(mAppContext, minWallpaperZoom,
+                wallpaperSize, defaultCropSurfaceSize, screenSize, offsetX, offsetY);
+
+        Rect scaledCropRect = new Rect(
+                Math.round((float) cropRect.left / minWallpaperZoom),
+                Math.round((float) cropRect.top / minWallpaperZoom),
+                Math.round((float) cropRect.right / minWallpaperZoom),
+                Math.round((float) cropRect.bottom / minWallpaperZoom));
+
+        // Scale and crop the bitmap
+        wallpaperBitmap = Bitmap.createBitmap(wallpaperBitmap,
+                scaledCropRect.left,
+                scaledCropRect.top,
+                scaledCropRect.width(),
+                scaledCropRect.height());
+
         // Set wallpaper to home-only instead of both home and lock if there's a distinct lock-only
         // static wallpaper set so we don't override the lock wallpaper.
         boolean isLockWallpaperSet = isSeparateLockScreenWallpaperSet();
@@ -491,8 +533,8 @@
     @Override
     public void onLiveWallpaperSet() {
         android.app.WallpaperInfo currentWallpaperComponent = mWallpaperManager.getWallpaperInfo();
-        android.app.WallpaperInfo previewedWallpaperComponent =
-                mWallpaperInfoInPreview.getWallpaperComponent();
+        android.app.WallpaperInfo previewedWallpaperComponent = mWallpaperInfoInPreview != null
+                ? mWallpaperInfoInPreview.getWallpaperComponent() : null;
 
         // If there is no live wallpaper set on the WallpaperManager or it doesn't match the
         // WallpaperInfo which was last previewed, then do nothing and nullify last previewed
@@ -545,6 +587,8 @@
                 .setHomeWallpaperAttributions(mWallpaperInfoInPreview.getAttributions(mAppContext));
         mWallpaperPreferences.setHomeWallpaperPackageName(
                 previewedWallpaperComponent.getPackageName());
+        mWallpaperPreferences.setHomeWallpaperServiceName(
+                previewedWallpaperComponent.getServiceName());
         mWallpaperPreferences.setHomeWallpaperCollectionId(
                 mWallpaperInfoInPreview.getCollectionId(mAppContext));
         mWallpaperPreferences.setWallpaperPresentationMode(
diff --git a/src/com/android/wallpaper/module/DefaultWallpaperPreferences.java b/src/com/android/wallpaper/module/DefaultWallpaperPreferences.java
index b040ebb..a9a6619 100755
--- a/src/com/android/wallpaper/module/DefaultWallpaperPreferences.java
+++ b/src/com/android/wallpaper/module/DefaultWallpaperPreferences.java
@@ -22,19 +22,24 @@
 import android.text.TextUtils;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
+import com.android.wallpaper.module.WallpaperPersister.Destination;
 import com.android.wallpaper.module.WallpaperPreferenceKeys.NoBackupKeys;
 
 import org.json.JSONArray;
 import org.json.JSONException;
 
 import java.io.File;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
+import java.util.Locale;
+import java.util.TimeZone;
 
 /**
  * Default implementation that writes to and reads from SharedPreferences.
@@ -151,6 +156,10 @@
             editor.putString(NoBackupKeys.KEY_HOME_WALLPAPER_PACKAGE_NAME,
                     mSharedPrefs.getString(NoBackupKeys.KEY_HOME_WALLPAPER_PACKAGE_NAME, null));
         }
+        if (mSharedPrefs.contains(NoBackupKeys.KEY_HOME_WALLPAPER_SERVICE_NAME)) {
+            editor.putString(NoBackupKeys.KEY_HOME_WALLPAPER_SERVICE_NAME,
+                    mSharedPrefs.getString(NoBackupKeys.KEY_HOME_WALLPAPER_SERVICE_NAME, null));
+        }
 
         editor.apply();
     }
@@ -317,6 +326,7 @@
                 .remove(NoBackupKeys.KEY_HOME_WALLPAPER_PACKAGE_NAME)
                 .remove(NoBackupKeys.KEY_HOME_WALLPAPER_MANAGER_ID)
                 .remove(NoBackupKeys.KEY_HOME_WALLPAPER_REMOTE_ID)
+                .remove(NoBackupKeys.KEY_HOME_WALLPAPER_SERVICE_NAME)
                 .remove(NoBackupKeys.KEY_HOME_WALLPAPER_BASE_IMAGE_URL)
                 .remove(NoBackupKeys.KEY_HOME_WALLPAPER_BACKING_FILE)
                 .apply();
@@ -336,6 +346,20 @@
     }
 
     @Override
+    public String getHomeWallpaperServiceName() {
+        return mNoBackupPrefs.getString(
+                NoBackupKeys.KEY_HOME_WALLPAPER_SERVICE_NAME, null);
+    }
+
+    @Override
+    public void setHomeWallpaperServiceName(@NonNull String serviceName) {
+        mNoBackupPrefs.edit().putString(
+                NoBackupKeys.KEY_HOME_WALLPAPER_SERVICE_NAME, serviceName)
+                .apply();
+        setFirstWallpaperApplyDateIfNeeded();
+    }
+
+    @Override
     public int getHomeWallpaperManagerId() {
         return mNoBackupPrefs.getInt(
                 NoBackupKeys.KEY_HOME_WALLPAPER_MANAGER_ID, 0);
@@ -360,6 +384,7 @@
         mNoBackupPrefs.edit().putString(
                 NoBackupKeys.KEY_HOME_WALLPAPER_REMOTE_ID, wallpaperRemoteId)
                 .apply();
+        setFirstWallpaperApplyDateIfNeeded();
     }
 
     @Override
@@ -465,6 +490,20 @@
     }
 
     @Override
+    public String getLockWallpaperRemoteId() {
+        return mNoBackupPrefs.getString(
+                NoBackupKeys.KEY_LOCK_WALLPAPER_REMOTE_ID, null);
+    }
+
+    @Override
+    public void setLockWallpaperRemoteId(String wallpaperRemoteId) {
+        mNoBackupPrefs.edit().putString(
+                NoBackupKeys.KEY_LOCK_WALLPAPER_REMOTE_ID, wallpaperRemoteId)
+                .apply();
+        setFirstWallpaperApplyDateIfNeeded();
+    }
+
+    @Override
     public long getLockWallpaperHashCode() {
         return mSharedPrefs.getLong(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_HASH_CODE, 0);
     }
@@ -489,12 +528,14 @@
                 .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_URL)
                 .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_LABEL_RES)
                 .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_ACTION_ICON_RES)
+                .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_COLLECTION_ID)
                 .remove(WallpaperPreferenceKeys.KEY_LOCK_WALLPAPER_HASH_CODE)
                 .apply();
 
         mNoBackupPrefs.edit()
                 .remove(NoBackupKeys.KEY_LOCK_WALLPAPER_MANAGER_ID)
                 .remove(NoBackupKeys.KEY_LOCK_WALLPAPER_BACKING_FILE)
+                .remove(NoBackupKeys.KEY_LOCK_WALLPAPER_REMOTE_ID)
                 .apply();
     }
 
@@ -798,4 +839,75 @@
                 .putInt(NoBackupKeys.KEY_NUM_DAYS_DAILY_ROTATION_NOT_ATTEMPTED, 0)
                 .apply();
     }
+
+    @Override
+    public int getAppLaunchCount() {
+        return mNoBackupPrefs.getInt(NoBackupKeys.KEY_APP_LAUNCH_COUNT, 0);
+    }
+
+    private void setAppLaunchCount(int count) {
+        mNoBackupPrefs.edit().putInt(NoBackupKeys.KEY_APP_LAUNCH_COUNT, count).apply();
+    }
+
+    @Override
+    public int getFirstLaunchDateSinceSetup() {
+        return mNoBackupPrefs.getInt(NoBackupKeys.KEY_FIRST_LAUNCH_DATE_SINCE_SETUP, 0);
+    }
+
+    private void setFirstLaunchDateSinceSetup(int firstLaunchDate) {
+        mNoBackupPrefs.edit().putInt(NoBackupKeys.KEY_FIRST_LAUNCH_DATE_SINCE_SETUP,
+                firstLaunchDate).apply();
+    }
+
+    @Override
+    public int getFirstWallpaperApplyDateSinceSetup() {
+        return mNoBackupPrefs.getInt(NoBackupKeys.KEY_FIRST_WALLPAPER_APPLY_DATE_SINCE_SETUP, 0);
+    }
+
+    private void setFirstWallpaperApplyDateSinceSetup(int firstApplyDate) {
+        mNoBackupPrefs.edit().putInt(NoBackupKeys.KEY_FIRST_WALLPAPER_APPLY_DATE_SINCE_SETUP,
+                firstApplyDate).apply();
+    }
+
+    @Override
+    public void incrementAppLaunched() {
+        if (getFirstLaunchDateSinceSetup() == 0) {
+            setFirstLaunchDateSinceSetup(getCurrentDate());
+        }
+
+        int appLaunchCount = getAppLaunchCount();
+        if (appLaunchCount < Integer.MAX_VALUE) {
+            setAppLaunchCount(appLaunchCount + 1);
+        }
+    }
+
+    private void setFirstWallpaperApplyDateIfNeeded() {
+        if (getFirstWallpaperApplyDateSinceSetup() == 0) {
+            setFirstWallpaperApplyDateSinceSetup(getCurrentDate());
+        }
+    }
+
+    @Override
+    public void updateDailyWallpaperSet(@Destination int destination, String collectionId,
+            String wallpaperId) {
+        // Assign wallpaper info by destination.
+        if (destination == WallpaperPersister.DEST_HOME_SCREEN) {
+            setHomeWallpaperCollectionId(collectionId);
+            setHomeWallpaperRemoteId(wallpaperId);
+        } else if (destination == WallpaperPersister.DEST_LOCK_SCREEN) {
+            setLockWallpaperCollectionId(collectionId);
+            setLockWallpaperRemoteId(wallpaperId);
+        } else if (destination == WallpaperPersister.DEST_BOTH) {
+            setHomeWallpaperCollectionId(collectionId);
+            setHomeWallpaperRemoteId(wallpaperId);
+            setLockWallpaperCollectionId(collectionId);
+            setLockWallpaperRemoteId(wallpaperId);
+        }
+    }
+
+    private int getCurrentDate() {
+        Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd", Locale.US);
+        return Integer.parseInt(format.format(calendar.getTime()));
+    }
 }
diff --git a/src/com/android/wallpaper/module/Injector.java b/src/com/android/wallpaper/module/Injector.java
index ca64b9d..13ed9d8 100755
--- a/src/com/android/wallpaper/module/Injector.java
+++ b/src/com/android/wallpaper/module/Injector.java
@@ -69,10 +69,11 @@
     WallpaperRotationRefresher getWallpaperRotationRefresher();
 
     Fragment getPreviewFragment(
-        Context context,
-        WallpaperInfo wallpaperInfo,
-        @PreviewMode int mode,
-        boolean testingModeEnabled);
+            Context context,
+            WallpaperInfo wallpaperInfo,
+            @PreviewMode int mode,
+            boolean viewAsHome,
+            boolean testingModeEnabled);
 
     PackageStatusNotifier getPackageStatusNotifier(Context context);
 
diff --git a/src/com/android/wallpaper/module/LiveWallpaperInfoFactory.java b/src/com/android/wallpaper/module/LiveWallpaperInfoFactory.java
index 838bbb6..e2d2e2e 100644
--- a/src/com/android/wallpaper/module/LiveWallpaperInfoFactory.java
+++ b/src/com/android/wallpaper/module/LiveWallpaperInfoFactory.java
@@ -15,6 +15,9 @@
  */
 package com.android.wallpaper.module;
 
+import androidx.annotation.Nullable;
+
+import com.android.wallpaper.model.LiveWallpaperInfo;
 import com.android.wallpaper.model.WallpaperInfo;
 
 /**
@@ -22,7 +25,14 @@
  */
 public interface LiveWallpaperInfoFactory {
 
+    /**
+     * @see LiveWallpaperInfo#LiveWallpaperInfo(android.app.WallpaperInfo)
+     */
     WallpaperInfo getLiveWallpaperInfo(android.app.WallpaperInfo info);
 
-    WallpaperInfo getLiveWallpaperInfo(android.app.WallpaperInfo info, boolean shouldShowTitle);
+    /**
+     * @see LiveWallpaperInfo#LiveWallpaperInfo(android.app.WallpaperInfo, boolean, String)
+     */
+    WallpaperInfo getLiveWallpaperInfo(android.app.WallpaperInfo info, boolean shouldShowTitle,
+            @Nullable String collectionId);
 }
diff --git a/src/com/android/wallpaper/module/NoOpUserEventLogger.java b/src/com/android/wallpaper/module/NoOpUserEventLogger.java
index 8d725f5..e0559a6 100755
--- a/src/com/android/wallpaper/module/NoOpUserEventLogger.java
+++ b/src/com/android/wallpaper/module/NoOpUserEventLogger.java
@@ -65,6 +65,10 @@
     }
 
     @Override
+    public void logSnapshot() {
+    }
+
+    @Override
     public void logWallpaperSet(String collectionId, String wallpaperId) {
     }
 
diff --git a/src/com/android/wallpaper/module/PartnerProvider.java b/src/com/android/wallpaper/module/PartnerProvider.java
index 8af4727..0463f77 100755
--- a/src/com/android/wallpaper/module/PartnerProvider.java
+++ b/src/com/android/wallpaper/module/PartnerProvider.java
@@ -17,6 +17,8 @@
 
 import android.content.res.Resources;
 
+import androidx.annotation.Nullable;
+
 import java.io.File;
 
 /**
@@ -27,18 +29,18 @@
     /**
      * Marker action used to discover partner.
      */
-    public static final String ACTION_PARTNER_CUSTOMIZATION =
+    String ACTION_PARTNER_CUSTOMIZATION =
             "com.android.launcher3.action.PARTNER_CUSTOMIZATION";
 
     /**
      * The resource ID in the partner APK for its list of wallpapers.
      */
-    public static final String WALLPAPER_RES_ID = "partner_wallpapers";
+    String WALLPAPER_RES_ID = "wallpapers";
 
     /**
      * Directory for system wallpapers in legacy versions of the partner APK.
      */
-    public static final String RES_LEGACY_SYSTEM_WALLPAPER_DIR = "system_wallpaper_directory";
+    String RES_LEGACY_SYSTEM_WALLPAPER_DIR = "system_wallpaper_directory";
 
     /**
      * Boolean indicating the OEM does not want the picker to show the built-in Android system
@@ -46,31 +48,32 @@
      * NOTE: The typo here "wallpapper" is intentional. The typo was made in legacy versions of the
      * customization scheme so we can't fix it without breaking existing devices.
      */
-    public static final String RES_DEFAULT_WALLPAPER_HIDDEN = "default_wallpapper_hidden";
+    String RES_DEFAULT_WALLPAPER_HIDDEN = "default_wallpapper_hidden";
 
     /**
      * Returns the Resources object for the partner APK, or null if there is no partner APK on the
      * device.
      */
-    public Resources getResources();
+    @Nullable
+    Resources getResources();
 
     /**
      * Returns the directory containing wallpapers, or null if the directory is not found on the
      * device. The directory is only present and populated in legacy versions of the partner
      * customization scheme.
      */
-    public File getLegacyWallpaperDirectory();
+    File getLegacyWallpaperDirectory();
 
     /**
      * Returns the package name of the partner APK, or null if there is no partner APK on the
      * device.
      */
-    public String getPackageName();
+    @Nullable String getPackageName();
 
     /**
      * Returns whether the OEM has specified that the built-in system default wallpaper should be
      * hidden (because OEM has provided their own wallpaper). If no partner customization exists on
      * the device, returns false.
      */
-    public boolean shouldHideDefaultWallpaper();
+    boolean shouldHideDefaultWallpaper();
 }
diff --git a/src/com/android/wallpaper/module/UserEventLogger.java b/src/com/android/wallpaper/module/UserEventLogger.java
index 5a77649..5ff404d 100755
--- a/src/com/android/wallpaper/module/UserEventLogger.java
+++ b/src/com/android/wallpaper/module/UserEventLogger.java
@@ -76,6 +76,11 @@
      */
     void logLiveWallpaperCustomizeSelected(String collectionId, String wallpaperId);
 
+    /**
+     * Log current existing snapshot data.
+     */
+    void logSnapshot();
+
     void logWallpaperSet(String collectionId, String wallpaperId);
 
     void logWallpaperSetResult(@WallpaperSetResult int result);
diff --git a/src/com/android/wallpaper/module/WallpaperPreferenceKeys.java b/src/com/android/wallpaper/module/WallpaperPreferenceKeys.java
index e4c6588..a31063c 100755
--- a/src/com/android/wallpaper/module/WallpaperPreferenceKeys.java
+++ b/src/com/android/wallpaper/module/WallpaperPreferenceKeys.java
@@ -43,6 +43,11 @@
      * Preferences with these keys should not be backed up
      */
     public interface NoBackupKeys {
+        public static final String KEY_APP_LAUNCH_COUNT = "app_launch_count";
+        public static final String KEY_FIRST_LAUNCH_DATE_SINCE_SETUP =
+                "first_launch_date_since_setup";
+        public static final String KEY_FIRST_WALLPAPER_APPLY_DATE_SINCE_SETUP =
+                "first_wallpaper_apply_date_since_setup";
         public static final String KEY_HOME_WALLPAPER_BASE_IMAGE_URL =
                 "home_wallpaper_base_image_url";
         public static final String KEY_HOME_WALLPAPER_MANAGER_ID = "home_wallpaper_id";
@@ -68,5 +73,6 @@
         public static final String KEY_NUM_DAYS_DAILY_ROTATION_NOT_ATTEMPTED =
                 "num_days_daily_rotation_not_attempted";
         public static final String KEY_HOME_WALLPAPER_PACKAGE_NAME = "home_wallpaper_package_name";
+        public static final String KEY_HOME_WALLPAPER_SERVICE_NAME = "home_wallpaper_service_name";
     }
 }
diff --git a/src/com/android/wallpaper/module/WallpaperPreferences.java b/src/com/android/wallpaper/module/WallpaperPreferences.java
index f009f59..8afe566 100755
--- a/src/com/android/wallpaper/module/WallpaperPreferences.java
+++ b/src/com/android/wallpaper/module/WallpaperPreferences.java
@@ -21,6 +21,8 @@
 import androidx.annotation.IntDef;
 import androidx.annotation.Nullable;
 
+import com.android.wallpaper.module.WallpaperPersister.Destination;
+
 import java.util.List;
 
 /**
@@ -143,6 +145,16 @@
     void setHomeWallpaperPackageName(String packageName);
 
     /**
+     * Gets the home wallpaper's service name, which is present for live wallpapers.
+     */
+    String getHomeWallpaperServiceName();
+
+    /**
+     * Sets the home wallpaper's service name, which is present for live wallpapers.
+     */
+    void setHomeWallpaperServiceName(String serviceName);
+
+    /**
      * Gets the home wallpaper's ID, which is provided by WallpaperManager for static wallpapers.
      */
     @TargetApi(Build.VERSION_CODES.N)
@@ -433,6 +445,36 @@
     void resetNumDaysDailyRotationNotAttempted();
 
     /**
+     * Return the count of wallpaper picker launch.
+     */
+    int getAppLaunchCount();
+
+    /**
+     * Return the date for the first time to launch wallpaper picker.
+     */
+    int getFirstLaunchDateSinceSetup();
+
+    /**
+     * Increments the number of wallpaper picker launch.
+     */
+    void incrementAppLaunched();
+
+    /**
+     * Returns the date for the first time to apply a wallpaper.
+     */
+    int getFirstWallpaperApplyDateSinceSetup();
+
+    /**
+     * Update currently set daily wallpaper info.
+     *
+     * @param destination  The wallpaper destination, 1: home, 2: lockscreen, 3: both.
+     * @param collectionId wallpaper category.
+     * @param wallpaperId  wallpaper id.
+     */
+    void updateDailyWallpaperSet(@Destination int destination, String collectionId,
+            String wallpaperId);
+
+    /**
      * The possible wallpaper presentation modes, i.e., either "static" or "rotating".
      */
     @IntDef({
diff --git a/src/com/android/wallpaper/picker/BasePreviewActivity.java b/src/com/android/wallpaper/picker/BasePreviewActivity.java
index 915604a..a70c2f9 100755
--- a/src/com/android/wallpaper/picker/BasePreviewActivity.java
+++ b/src/com/android/wallpaper/picker/BasePreviewActivity.java
@@ -15,12 +15,30 @@
  */
 package com.android.wallpaper.picker;
 
+import android.content.pm.ActivityInfo;
+import android.graphics.PixelFormat;
+import android.os.Bundle;
+
+import androidx.annotation.Nullable;
+
+import com.android.wallpaper.R;
+
 /**
  * Abstract base class for a wallpaper full-screen preview activity.
  */
 public abstract class BasePreviewActivity extends BaseActivity {
     public static final String EXTRA_WALLPAPER_INFO =
             "com.android.wallpaper.picker.wallpaper_info";
+    public static final String EXTRA_VIEW_AS_HODE =
+            "com.android.wallpaper.picker.view_as_home";
     public static final String EXTRA_TESTING_MODE_ENABLED =
             "com.android.wallpaper.picker.testing_mode_enabled";
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        getWindow().setColorMode(ActivityInfo.COLOR_MODE_WIDE_COLOR_GAMUT);
+        setTheme(R.style.WallpaperTheme);
+        getWindow().setFormat(PixelFormat.TRANSLUCENT);
+    }
 }
diff --git a/src/com/android/wallpaper/picker/BottomActionBarFragment.java b/src/com/android/wallpaper/picker/BottomActionBarFragment.java
new file mode 100644
index 0000000..099741b
--- /dev/null
+++ b/src/com/android/wallpaper/picker/BottomActionBarFragment.java
@@ -0,0 +1,91 @@
+/*
+ * 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 android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+
+import com.android.wallpaper.R;
+import com.android.wallpaper.widget.BottomActionBar;
+import com.android.wallpaper.widget.BottomActionBar.BottomActionBarHost;
+
+/**
+ * Base class for Fragments that own a {@link BottomActionBar} widget.
+ *
+ * <p>A Fragment extending this class is expected to have a {@link BottomActionBar} in its activity
+ * which is a {@link BottomActionBarHost}, which can handle lifecycle management of
+ * {@link BottomActionBar} for extending fragment.
+ *
+ * <p>Or helping some fragments that own a {@link BottomActionBar} in fragment view to setup the
+ * common behavior for {@link BottomActionBar}.
+ */
+public class BottomActionBarFragment extends Fragment {
+
+    @Nullable private BottomActionBar mBottomActionBar;
+
+    @Override
+    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        mBottomActionBar = findBottomActionBar();
+        if (mBottomActionBar != null) {
+            mBottomActionBar.bindBackButtonToSystemBackKey(getActivity());
+            onBottomActionBarReady(mBottomActionBar);
+        }
+    }
+
+    @Override
+    public void onDestroyView() {
+        if (mBottomActionBar != null) {
+            mBottomActionBar.reset();
+            mBottomActionBar = null;
+        }
+        super.onDestroyView();
+    }
+
+    /** Returns {@code true} if the fragment would handle the event. */
+    public boolean onBackPressed() {
+        if (mBottomActionBar != null && mBottomActionBar.isVisible()) {
+            mBottomActionBar.hide();
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Gets called when {@link #onViewCreated} finished. For extending fragment, this is the only
+     * one interface to get {@link BottomActionBar}.
+     */
+    protected void onBottomActionBarReady(BottomActionBar bottomActionBar) {}
+
+    @Nullable
+    private BottomActionBar findBottomActionBar() {
+        Activity activity = getActivity();
+        if (activity instanceof BottomActionBarHost) {
+            return ((BottomActionBarHost) activity).getBottomActionBar();
+        }
+
+        View root = getView();
+        if (root != null) {
+            return root.findViewById(R.id.bottom_actionbar);
+        }
+        return null;
+    }
+}
diff --git a/src/com/android/wallpaper/picker/CategoryFragment.java b/src/com/android/wallpaper/picker/CategoryFragment.java
index 13ebef0..39c44e0 100755
--- a/src/com/android/wallpaper/picker/CategoryFragment.java
+++ b/src/com/android/wallpaper/picker/CategoryFragment.java
@@ -18,37 +18,27 @@
 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;
+
 import android.app.Activity;
-import android.app.ProgressDialog;
-import android.content.Context;
+import android.app.WallpaperColors;
 import android.content.Intent;
 import android.content.pm.PackageManager;
-import android.graphics.Point;
-import android.graphics.PorterDuff.Mode;
 import android.graphics.Rect;
 import android.graphics.RectF;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
 import android.net.Uri;
-import android.os.Build.VERSION;
-import android.os.Build.VERSION_CODES;
 import android.os.Bundle;
 import android.provider.Settings;
 import android.service.wallpaper.WallpaperService;
-import android.util.DisplayMetrics;
-import android.util.Log;
-import android.view.Display;
 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.View.OnClickListener;
 import android.view.ViewGroup;
-import android.view.animation.AnimationUtils;
 import android.widget.Button;
-import android.widget.FrameLayout;
-import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.TextView;
 
@@ -56,53 +46,61 @@
 import androidx.annotation.Nullable;
 import androidx.appcompat.app.AlertDialog;
 import androidx.cardview.widget.CardView;
+import androidx.constraintlayout.widget.ConstraintLayout;
 import androidx.core.content.ContextCompat;
-import androidx.recyclerview.widget.RecyclerView;
+import androidx.fragment.app.Fragment;
 import androidx.viewpager.widget.PagerAdapter;
 import androidx.viewpager.widget.ViewPager;
 
-import com.android.systemui.shared.system.SurfaceViewRequestUtils;
 import com.android.wallpaper.R;
-import com.android.wallpaper.config.Flags;
 import com.android.wallpaper.model.Category;
 import com.android.wallpaper.model.LiveWallpaperInfo;
+import com.android.wallpaper.model.WallpaperCategory;
 import com.android.wallpaper.model.WallpaperInfo;
 import com.android.wallpaper.module.CurrentWallpaperInfoFactory;
 import com.android.wallpaper.module.CurrentWallpaperInfoFactory.WallpaperInfoCallback;
-import com.android.wallpaper.module.ExploreIntentChecker;
 import com.android.wallpaper.module.InjectorProvider;
-import com.android.wallpaper.module.LockWallpaperStatusChecker;
 import com.android.wallpaper.module.UserEventLogger;
+import com.android.wallpaper.module.WallpaperPersister;
 import com.android.wallpaper.module.WallpaperPreferences;
 import com.android.wallpaper.module.WallpaperPreferences.PresentationMode;
-import com.android.wallpaper.module.WallpaperRotationRefresher;
-import com.android.wallpaper.module.WallpaperRotationRefresher.Listener;
 import com.android.wallpaper.picker.CategorySelectorFragment.CategorySelectorFragmentHost;
 import com.android.wallpaper.picker.MyPhotosStarter.MyPhotosStarterProvider;
 import com.android.wallpaper.picker.MyPhotosStarter.PermissionChangedListener;
+import com.android.wallpaper.picker.individual.IndividualPickerFragment;
 import com.android.wallpaper.picker.individual.IndividualPickerFragment.ThumbnailUpdater;
-import com.android.wallpaper.util.DisplayMetricsRetriever;
-import com.android.wallpaper.util.PreviewUtils;
-import com.android.wallpaper.util.ScreenSizeCalculator;
-import com.android.wallpaper.util.TileSizeCalculator;
+import com.android.wallpaper.picker.individual.IndividualPickerFragment.WallpaperDestinationCallback;
+import com.android.wallpaper.util.SizeCalculator;
 import com.android.wallpaper.util.WallpaperConnection;
 import com.android.wallpaper.util.WallpaperConnection.WallpaperConnectionListener;
+import com.android.wallpaper.widget.BottomActionBar;
 import com.android.wallpaper.widget.LiveTileOverlay;
+import com.android.wallpaper.widget.LockScreenPreviewer;
 import com.android.wallpaper.widget.PreviewPager;
+import com.android.wallpaper.widget.WallpaperColorsLoader;
+import com.android.wallpaper.widget.WallpaperPickerRecyclerViewAccessibilityDelegate;
 
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.MemoryCategory;
 import com.google.android.material.bottomsheet.BottomSheetBehavior;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
 /**
  * Displays the Main UI for picking a category of wallpapers to choose from.
  */
-public class CategoryFragment extends ToolbarFragment
-        implements CategorySelectorFragmentHost, ThumbnailUpdater {
+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();
 
     /**
      * Interface to be implemented by an Activity hosting a {@link CategoryFragment}
@@ -113,7 +111,11 @@
 
         boolean isReadExternalStoragePermissionGranted();
 
-        void showViewOnlyPreview(WallpaperInfo wallpaperInfo);
+        void showViewOnlyPreview(WallpaperInfo wallpaperInfo, boolean isViewAsHome);
+
+        void show(String collectionId);
+
+        boolean isNavigationTabsContained();
     }
 
     public static CategoryFragment newInstance(CharSequence title) {
@@ -123,34 +125,38 @@
     }
 
     private static final String TAG = "CategoryFragment";
-    private static final int MAX_ALPHA = 255;
-
-    // The number of ViewHolders that don't pertain to category tiles.
-    // Currently 2: one for the metadata section and one for the "Select wallpaper" header.
-    private static final int NUM_NON_CATEGORY_VIEW_HOLDERS = 0;
 
     private static final int SETTINGS_APP_INFO_REQUEST_CODE = 1;
 
     private static final String PERMISSION_READ_WALLPAPER_INTERNAL =
             "android.permission.READ_WALLPAPER_INTERNAL";
 
-    private ProgressDialog mRefreshWallpaperProgressDialog;
-    private boolean mTestingMode;
     private ImageView mHomePreview;
     private SurfaceView mWorkspaceSurface;
+    private WorkspaceSurfaceHolderCallback mWorkspaceSurfaceCallback;
     private SurfaceView mWallpaperSurface;
     private ImageView mLockscreenPreview;
     private PreviewPager mPreviewPager;
     private List<View> mWallPaperPreviews;
     private WallpaperConnection mWallpaperConnection;
     private CategorySelectorFragment mCategorySelectorFragment;
+    private IndividualPickerFragment mIndividualPickerFragment;
     private boolean mShowSelectedWallpaper;
-    private BottomSheetBehavior mBottomSheetBehavior;
-    private PreviewUtils mPreviewUtils;
+    private BottomSheetBehavior<View> mBottomSheetBehavior;
+    // The index of Destination#DEST_HOME_SCREEN or Destination#DEST_LOCK_SCREEN
+    private int mWallpaperIndex;
+
+    // The wallpaper information which is currently shown on the home preview.
+    private WallpaperInfo mHomePreviewWallpaperInfo;
+    // 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;
 
     public CategoryFragment() {
         mCategorySelectorFragment = new CategorySelectorFragment();
@@ -160,46 +166,75 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {
         View view = inflater.inflate(
-                ADD_SCALABLE_HEADER
-                ? R.layout.fragment_category_scalable_picker
-                : R.layout.fragment_category_picker, container, /* attachToRoot= */ false);
+                R.layout.fragment_category_picker, container, /* attachToRoot= */ false);
 
         mWallPaperPreviews = new ArrayList<>();
         CardView homePreviewCard = (CardView) inflater.inflate(
                 R.layout.wallpaper_preview_card, null);
         mHomePreview = homePreviewCard.findViewById(R.id.wallpaper_preview_image);
         mWorkspaceSurface = homePreviewCard.findViewById(R.id.workspace_surface);
+        mWorkspaceSurfaceCallback = new WorkspaceSurfaceHolderCallback(
+                mWorkspaceSurface, getContext());
         mWallpaperSurface = homePreviewCard.findViewById(R.id.wallpaper_surface);
         mWallPaperPreviews.add(homePreviewCard);
 
-        if (LockWallpaperStatusChecker.isLockWallpaperSet(getContext())) {
-            CardView lockscreenPreviewCard = (CardView) inflater.inflate(
-                    R.layout.wallpaper_preview_card, null);
-            mLockscreenPreview = lockscreenPreviewCard.findViewById(R.id.wallpaper_preview_image);
-            lockscreenPreviewCard.findViewById(R.id.workspace_surface).setVisibility(View.GONE);
-            lockscreenPreviewCard.findViewById(R.id.wallpaper_surface).setVisibility(View.GONE);
-            mWallPaperPreviews.add(lockscreenPreviewCard);
-        }
+        CardView lockscreenPreviewCard = (CardView) inflater.inflate(
+                R.layout.wallpaper_preview_card, null);
+        mLockscreenPreview = lockscreenPreviewCard.findViewById(R.id.wallpaper_preview_image);
+        lockscreenPreviewCard.findViewById(R.id.workspace_surface).setVisibility(View.GONE);
+        lockscreenPreviewCard.findViewById(R.id.wallpaper_surface).setVisibility(View.GONE);
+        ViewGroup lockPreviewContainer = lockscreenPreviewCard.findViewById(
+                R.id.lock_screen_preview_container);
+        lockPreviewContainer.setVisibility(View.VISIBLE);
+        mLockScreenPreviewer = new LockScreenPreviewer(getLifecycle(), getActivity(),
+                lockPreviewContainer);
+        mWallPaperPreviews.add(lockscreenPreviewCard);
 
         mPreviewPager = view.findViewById(R.id.wallpaper_preview_pager);
+        if (mPreviewPager.isRtl()) {
+            Collections.reverse(mWallPaperPreviews);
+        }
         mPreviewPager.setAdapter(new PreviewPagerAdapter(mWallPaperPreviews));
         mPreviewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
-            int[] mLocation = new int[2];
-            Rect mHomePreviewRect = new Rect();
             @Override
             public void onPageScrolled(int position, float positionOffset,
                     int positionOffsetPixels) {
-                if (mWallpaperConnection != null) {
-                    mHomePreview.getLocationOnScreen(mLocation);
-                    mHomePreviewRect.set(0, 0, mHomePreview.getMeasuredWidth(),
-                            mHomePreview.getMeasuredHeight());
-                    mHomePreviewRect.offset(mLocation[0], mLocation[1]);
-                    mWallpaperConnection.updatePreviewPosition(mHomePreviewRect);
+                // For live wallpaper, show its thumbnail when scrolling.
+                if (mWallpaperConnection != null && mWallpaperConnection.isEngineReady()
+                        && mHomePreviewWallpaperInfo instanceof LiveWallpaperInfo) {
+                    if (positionOffset == 0.0f || positionOffset == 1.0f
+                            || positionOffsetPixels == 0) {
+                        // The page is not moved. Show live wallpaper.
+                        mWallpaperSurface.setZOrderMediaOverlay(false);
+                    } else {
+                        // The page is moving. Show live wallpaper's thumbnail.
+                        mWallpaperSurface.setZOrderMediaOverlay(true);
+                    }
+                }
+
+                if (mWallpaperConnection != null && mWallpaperConnection.isEngineReady()
+                        && mLockPreviewWallpaperInfo instanceof LiveWallpaperInfo) {
+                    if (positionOffset == 0.0f || positionOffset == 1.0f
+                            || positionOffsetPixels == 0) {
+                        // The page is not moved. Show live wallpaper.
+                        LiveTileOverlay.INSTANCE.attach(mLockscreenPreview.getOverlay());
+                    } else {
+                        // The page is moving. Show live wallpaper's thumbnail.
+                        LiveTileOverlay.INSTANCE.detach(mLockscreenPreview.getOverlay());
+                    }
+                } else {
+                    LiveTileOverlay.INSTANCE.detach(mLockscreenPreview.getOverlay());
                 }
             }
 
             @Override
             public void onPageSelected(int i) {
+                mWallpaperIndex = mPreviewPager.isRtl()
+                        ? (mWallPaperPreviews.size() - 1) - i
+                        : i;
+                if (mIndividualPickerFragment != null && mIndividualPickerFragment.isVisible()) {
+                    mIndividualPickerFragment.highlightAppliedWallpaper(mWallpaperIndex);
+                }
             }
 
             @Override
@@ -208,20 +243,43 @@
         });
         setupCurrentWallpaperPreview(view);
 
-        View fragmentContainer = view.findViewById(R.id.category_fragment_container);
+        ViewGroup fragmentContainer = view.findViewById(R.id.category_fragment_container);
         mBottomSheetBehavior = BottomSheetBehavior.from(fragmentContainer);
-        fragmentContainer.addOnLayoutChangeListener((containerView, left, top, right, bottom,
-                                                     oldLeft, oldTop, oldRight, oldBottom) -> {
-            int minimumHeight = containerView.getHeight() - mPreviewPager.getMeasuredHeight();
-            mBottomSheetBehavior.setPeekHeight(minimumHeight);
-            containerView.setMinimumHeight(minimumHeight);
-            ((CardView) mHomePreview.getParent())
-                    .setRadius(TileSizeCalculator.getPreviewCornerRadius(
-                            getActivity(), homePreviewCard.getMeasuredWidth()));
-        });
+        mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
+            @Override
+            public void onStateChanged(@NonNull View bottomSheet, int newState) {
+                // Update preview pager's accessibility param since it will be blocked by the
+                // bottom sheet when expanded.
+                mPreviewPager.setImportantForAccessibility(newState == STATE_EXPANDED
+                        ? View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
+                        : View.IMPORTANT_FOR_ACCESSIBILITY_YES);
+            }
 
-        mPreviewUtils = new PreviewUtils(getContext(),
-                getString(R.string.grid_control_metadata_name));
+            @Override
+            public void onSlide(@NonNull View bottomSheet, float slideOffset) {}
+        });
+        mRootContainer = view.findViewById(R.id.root_container);
+        fragmentContainer.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
+            @Override
+            public void onLayoutChange(View containerView, int left, int top, int right,
+                    int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
+                int minimumHeight = mRootContainer.getHeight() - mPreviewPager.getMeasuredHeight();
+                mBottomSheetBehavior.setPeekHeight(minimumHeight);
+                containerView.setMinimumHeight(minimumHeight);
+                ((CardView) mHomePreview.getParent())
+                        .setRadius(SizeCalculator.getPreviewCornerRadius(
+                                getActivity(), homePreviewCard.getMeasuredWidth()));
+                if (mLockscreenPreview != null) {
+                    ((CardView) mLockscreenPreview.getParent())
+                            .setRadius(SizeCalculator.getPreviewCornerRadius(
+                                    getActivity(), mLockscreenPreview.getMeasuredWidth()));
+                }
+            }});
+        fragmentContainer.setOnApplyWindowInsetsListener((v, windowInsets) -> {
+            v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(),
+                    windowInsets.getSystemWindowInsetBottom());
+            return windowInsets;
+        });
 
         setUpToolbar(view);
 
@@ -234,11 +292,27 @@
 
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
         updateWallpaperSurface();
         updateWorkspaceSurface();
     }
 
     @Override
+    protected void onBottomActionBarReady(BottomActionBar bottomActionBar) {
+        if (getFragmentHost().isNavigationTabsContained()) {
+            return;
+        }
+        int bottomActionBarHeight = getResources()
+                .getDimensionPixelSize(R.dimen.bottom_navbar_height);
+        ConstraintLayout.LayoutParams layoutParams =
+                (ConstraintLayout.LayoutParams) mRootContainer.getLayoutParams();
+        if (layoutParams != null) {
+            bottomActionBar.addVisibilityChangeListener(isVisible ->
+                    layoutParams.bottomMargin = isVisible ? bottomActionBarHeight : 0);
+        }
+    }
+
+    @Override
     public CharSequence getDefaultTitle() {
         return getContext().getString(R.string.app_name);
     }
@@ -257,7 +331,7 @@
         // The wallpaper may have been set while this fragment was paused, so force refresh the current
         // wallpapers and presentation mode.
         if (!mShowSelectedWallpaper) {
-            refreshCurrentWallpapers(/* MetadataHolder= */ null, /* forceRefresh= */ true);
+            refreshCurrentWallpapers(/* forceRefresh= */ true);
         }
         if (mWallpaperConnection != null) {
             mWallpaperConnection.setVisibility(true);
@@ -273,8 +347,8 @@
     }
 
     @Override
-    public void onDestroyView() {
-        super.onDestroyView();
+    public void onStop() {
+        super.onStop();
         if (mWallpaperConnection != null) {
             mWallpaperConnection.disconnect();
             mWallpaperConnection = null;
@@ -282,15 +356,28 @@
     }
 
     @Override
+    public void onDestroyView() {
+        super.onDestroyView();
+        LiveTileOverlay.INSTANCE.detach(mHomePreview.getOverlay());
+        LiveTileOverlay.INSTANCE.detach(mLockscreenPreview.getOverlay());
+        mWallpaperSurfaceCallback.cleanUp();
+        mWorkspaceSurfaceCallback.cleanUp();
+        if (mWallpaperConnection != null) {
+            mWallpaperConnection.disconnect();
+            mWallpaperConnection = null;
+        }
+        mPreviewPager.setAdapter(null);
+        mWallPaperPreviews.forEach(view -> ((ViewGroup) view).removeAllViews());
+        mWallPaperPreviews.clear();
+    }
+
+    @Override
     public void onDestroy() {
         super.onDestroy();
         if (mWallpaperConnection != null) {
             mWallpaperConnection.disconnect();
             mWallpaperConnection = null;
         }
-        if (mRefreshWallpaperProgressDialog != null) {
-            mRefreshWallpaperProgressDialog.dismiss();
-        }
     }
 
     @Override
@@ -306,7 +393,26 @@
     }
 
     @Override
-    public void show(String collectionId) {
+    public void show(Category category) {
+        if (!(category instanceof WallpaperCategory)) {
+            getFragmentHost().show(category.getCollectionId());
+            return;
+        }
+        mIndividualPickerFragment = InjectorProvider.getInjector()
+                .getIndividualPickerFragment(category.getCollectionId());
+        mIndividualPickerFragment.highlightAppliedWallpaper(mWallpaperIndex);
+        mIndividualPickerFragment.setOnWallpaperSelectedListener(position -> {
+            // Scroll to the selected wallpaper and collapse the sheet if needed.
+            // Resize and scroll here because we want to let the RecyclerView's scrolling and
+            // BottomSheet's collapsing can be executed together instead of scrolling
+            // the RecyclerView after the BottomSheet is collapsed.
+            mIndividualPickerFragment.resizeLayout(mBottomSheetBehavior.getPeekHeight());
+            mIndividualPickerFragment.scrollToPosition(position);
+            if (mBottomSheetBehavior.getState() != STATE_COLLAPSED) {
+                mIsCollapsingByUserSelecting = true;
+                mBottomSheetBehavior.setState(STATE_COLLAPSED);
+            }
+        });
         getChildFragmentManager()
                 .beginTransaction()
                 .replace(R.id.category_fragment_container,
@@ -317,6 +423,23 @@
     }
 
     @Override
+    public void setToolbarTitle(CharSequence title) {
+        setTitle(title);
+    }
+
+    @Override
+    public void expandBottomSheet() {
+        if (mBottomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
+            mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
+        }
+    }
+
+    @Override
+    public int getBottomSheetState() {
+        return mBottomSheetBehavior.getState();
+    }
+
+    @Override
     public void updateThumbnail(WallpaperInfo wallpaperInfo) {
         new android.os.Handler().post(() -> {
             // A config change may have destroyed the activity since the refresh started, so check
@@ -325,8 +448,10 @@
                 return;
             }
 
-            updateThumbnail(wallpaperInfo, mHomePreview, true);
-            updateThumbnail(wallpaperInfo, mLockscreenPreview, false);
+            mHomePreviewWallpaperInfo = wallpaperInfo;
+            mLockPreviewWallpaperInfo = wallpaperInfo;
+            updateThumbnail(mHomePreviewWallpaperInfo, mHomePreview, true);
+            updateThumbnail(mLockPreviewWallpaperInfo, mLockscreenPreview, false);
             mShowSelectedWallpaper = true;
             mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
         });
@@ -334,10 +459,26 @@
 
     @Override
     public void restoreThumbnails() {
-        refreshCurrentWallpapers(/* MetadataHolder= */ null, /* forceRefresh= */ true);
+        refreshCurrentWallpapers(/* forceRefresh= */ true);
         mShowSelectedWallpaper = false;
     }
 
+    @Override
+    public void onDestinationSet(@WallpaperPersister.Destination int destination) {
+        if (destination == WallpaperPersister.DEST_BOTH) {
+            return;
+        }
+        mPreviewPager.switchPreviewPage(destination);
+    }
+
+    @Override
+    public boolean onBackPressed() {
+        Fragment childFragment = getChildFragmentManager().findFragmentById(
+                R.id.category_fragment_container);
+        return childFragment instanceof BottomActionBarFragment
+                && ((BottomActionBarFragment) childFragment).onBackPressed();
+    }
+
     /**
      * Pops the child fragment from the stack if {@link CategoryFragment} is visible to the users.
      *
@@ -374,15 +515,6 @@
         mCategorySelectorFragment.doneFetchingCategories();
     }
 
-    /**
-     * Enable a test mode of operation -- in which certain UI features are disabled to allow for
-     * UI tests to run correctly. Works around issue in ProgressDialog currently where the dialog
-     * constantly keeps the UI thread alive and blocks a test forever.
-     */
-    void setTestingMode(boolean testingMode) {
-        mTestingMode = testingMode;
-    }
-
     private boolean canShowCurrentWallpaper() {
         Activity activity = getActivity();
         CategoryFragmentHost host = getFragmentHost();
@@ -395,8 +527,10 @@
     }
 
     private void showCurrentWallpaper(View rootView, boolean show) {
+        // The category/wallpaper tiles page depends on the height of the preview pager.
+        // So if we want to hide the preview pager, we should use INVISIBLE instead of GONE.
         rootView.findViewById(R.id.wallpaper_preview_pager)
-                .setVisibility(show ? View.VISIBLE : View.GONE);
+                .setVisibility(show ? View.VISIBLE : View.INVISIBLE);
         rootView.findViewById(R.id.permission_needed)
                 .setVisibility(show ? View.GONE : View.VISIBLE);
     }
@@ -466,13 +600,12 @@
         return new Intent(WallpaperService.SERVICE_INTERFACE)
                 .setClassName(info.getPackageName(), info.getServiceName());
     }
+
     /**
-     * Obtains the {@link WallpaperInfo} object(s) representing the wallpaper(s) currently set to the
-     * device from the {@link CurrentWallpaperInfoFactory} and binds them to the provided
-     * {@link MetadataHolder}.
+     * Obtains the {@link WallpaperInfo} object(s) representing the wallpaper(s) currently set to
+     * the device from the {@link CurrentWallpaperInfoFactory}.
      */
-    private void refreshCurrentWallpapers(@Nullable final MetadataHolder holder,
-                                          boolean forceRefresh) {
+    private void refreshCurrentWallpapers(boolean forceRefresh) {
         CurrentWallpaperInfoFactory factory = InjectorProvider.getInjector()
                 .getCurrentWallpaperFactory(getActivity().getApplicationContext());
 
@@ -497,22 +630,18 @@
                             return;
                         }
 
-                        updateThumbnail(homeWallpaper, mHomePreview, true);
-                        updateThumbnail(lockWallpaper, mLockscreenPreview, false);
-
-                        // The MetadataHolder may be null if the RecyclerView has not yet created the view
-                        // holder.
-                        if (holder != null) {
-                            holder.bindWallpapers(homeWallpaper, lockWallpaper, presentationMode);
-                        }
+                        mHomePreviewWallpaperInfo = homeWallpaper;
+                        mLockPreviewWallpaperInfo =
+                                lockWallpaper == null ? homeWallpaper : lockWallpaper;
+                        updateThumbnail(mHomePreviewWallpaperInfo, mHomePreview, true);
+                        updateThumbnail(mLockPreviewWallpaperInfo, mLockscreenPreview, false);
                     }
                 });
             }
         }, forceRefresh);
     }
 
-    private void setUpLiveWallpaperPreview(WallpaperInfo homeWallpaper, ImageView previewView,
-            Drawable thumbnail) {
+    private void setUpLiveWallpaperPreview(WallpaperInfo homeWallpaper) {
         Activity activity = getActivity();
         if (activity == null) {
             return;
@@ -520,38 +649,21 @@
         if (mWallpaperConnection != null) {
             mWallpaperConnection.disconnect();
         }
-        if (thumbnail != null) {
-            thumbnail.setBounds(previewView.getLeft(), previewView.getTop(), previewView.getRight(),
-                    previewView.getBottom());
-        }
+        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]);
 
-        Rect previewLocalRect = new Rect();
-        Rect previewGlobalRect = new Rect();
-        previewView.getLocalVisibleRect(previewLocalRect);
-        previewView.getGlobalVisibleRect(previewGlobalRect);
         mWallpaperConnection = new WallpaperConnection(
                 getWallpaperIntent(homeWallpaper.getWallpaperComponent()), activity,
                 new WallpaperConnectionListener() {
                     @Override
-                    public void onEngineShown() {
-                        final Drawable placeholder = previewView.getDrawable() == null
-                                ? new ColorDrawable(getResources().getColor(R.color.secondary_color,
-                                    activity.getTheme()))
-                                : previewView.getDrawable();
-                        LiveTileOverlay.INSTANCE.setForegroundDrawable(placeholder);
-                        LiveTileOverlay.INSTANCE.attach(previewView.getOverlay());
-                        previewView.animate()
-                                .setStartDelay(400)
-                                .setDuration(400)
-                                .setInterpolator(AnimationUtils.loadInterpolator(getContext(),
-                                        android.R.interpolator.fast_out_linear_in))
-                                .setUpdateListener(value -> placeholder.setAlpha(
-                                        (int) (MAX_ALPHA * (1 - value.getAnimatedFraction()))))
-                                .withEndAction(() -> {
-                                    LiveTileOverlay.INSTANCE.setForegroundDrawable(null);
-
-                                }).start();
-
+                    public void onWallpaperColorsChanged(WallpaperColors colors, int displayId) {
+                        if (mLockPreviewWallpaperInfo instanceof LiveWallpaperInfo) {
+                            mLockScreenPreviewer.setColor(colors);
+                        }
                     }
                 }, previewGlobalRect);
 
@@ -560,94 +672,13 @@
 
         mWallpaperConnection.setVisibility(true);
         previewView.post(() -> {
-            if (!mWallpaperConnection.connect()) {
+            if (mWallpaperConnection != null && !mWallpaperConnection.connect()) {
                 mWallpaperConnection = null;
                 LiveTileOverlay.INSTANCE.detach(previewView.getOverlay());
             }
         });
     }
 
-    /**
-     * Returns the width to use for the home screen wallpaper in the "single metadata" configuration.
-     */
-    private int getSingleWallpaperImageWidth() {
-        Point screenSize = ScreenSizeCalculator.getInstance()
-                .getScreenSize(getActivity().getWindowManager().getDefaultDisplay());
-
-        int height = getResources().getDimensionPixelSize(R.dimen.single_metadata_card_layout_height);
-        return height * screenSize.x / screenSize.y;
-    }
-
-    /**
-     * Refreshes the current wallpaper in a daily wallpaper rotation.
-     */
-    private void refreshDailyWallpaper() {
-        // ProgressDialog endlessly updates the UI thread, keeping it from going idle which therefore
-        // causes Espresso to hang once the dialog is shown.
-        if (!mTestingMode) {
-            int themeResId;
-            if (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP) {
-                themeResId = R.style.ProgressDialogThemePreL;
-            } else {
-                themeResId = R.style.LightDialogTheme;
-            }
-            mRefreshWallpaperProgressDialog = new ProgressDialog(getActivity(), themeResId);
-            mRefreshWallpaperProgressDialog.setTitle(null);
-            mRefreshWallpaperProgressDialog.setMessage(
-                    getResources().getString(R.string.refreshing_daily_wallpaper_dialog_message));
-            mRefreshWallpaperProgressDialog.setIndeterminate(true);
-            mRefreshWallpaperProgressDialog.setCancelable(false);
-            mRefreshWallpaperProgressDialog.show();
-        }
-
-        WallpaperRotationRefresher wallpaperRotationRefresher =
-                InjectorProvider.getInjector().getWallpaperRotationRefresher();
-        wallpaperRotationRefresher.refreshWallpaper(getContext(), new Listener() {
-            @Override
-            public void onRefreshed() {
-                // If the fragment is detached from the activity there's nothing to do here and the UI will
-                // update when the fragment is resumed.
-                if (getActivity() == null) {
-                    return;
-                }
-
-                if (mRefreshWallpaperProgressDialog != null) {
-                    mRefreshWallpaperProgressDialog.dismiss();
-                }
-            }
-
-            @Override
-            public void onError() {
-                if (getActivity() == null) {
-                    return;
-                }
-
-                if (mRefreshWallpaperProgressDialog != null) {
-                    mRefreshWallpaperProgressDialog.dismiss();
-                }
-
-                AlertDialog errorDialog = new AlertDialog.Builder(getActivity(), R.style.LightDialogTheme)
-                        .setMessage(R.string.refresh_daily_wallpaper_failed_message)
-                        .setPositiveButton(android.R.string.ok, null /* onClickListener */)
-                        .create();
-                errorDialog.show();
-            }
-        });
-    }
-
-    /**
-     * Returns the width to use for the home and lock screen wallpapers in the "both metadata"
-     * configuration.
-     */
-    private int getBothWallpaperImageWidth() {
-        DisplayMetrics metrics = DisplayMetricsRetriever.getInstance().getDisplayMetrics(getResources(),
-                getActivity().getWindowManager().getDefaultDisplay());
-
-        // In the "both metadata" configuration, wallpaper images minus the gutters account for the full
-        // width of the device's screen.
-        return metrics.widthPixels - (3 * getResources().getDimensionPixelSize(R.dimen.grid_padding));
-    }
-
     private void updateThumbnail(WallpaperInfo wallpaperInfo, ImageView thumbnailView,
                                  boolean isHomeWallpaper) {
         if (wallpaperInfo == null) {
@@ -667,25 +698,44 @@
 
         boolean renderInImageWallpaperSurface =
                 !(wallpaperInfo instanceof LiveWallpaperInfo) && isHomeWallpaper;
-        wallpaperInfo.getThumbAsset(activity.getApplicationContext())
-                .loadDrawable(activity,
-                        renderInImageWallpaperSurface ? mHomeImageWallpaper : thumbnailView,
-                        getResources().getColor(R.color.secondary_color));
+        ImageView imageView = renderInImageWallpaperSurface ? mHomeImageWallpaper : thumbnailView;
+        if (imageView != null) {
+            wallpaperInfo.getThumbAsset(activity.getApplicationContext())
+                    .loadPreviewImage(activity, imageView,
+                            getResources().getColor(R.color.secondary_color));
+        }
+
         if (isHomeWallpaper) {
             LiveTileOverlay.INSTANCE.detach(thumbnailView.getOverlay());
             if (wallpaperInfo instanceof LiveWallpaperInfo) {
-                setUpLiveWallpaperPreview(wallpaperInfo, thumbnailView,
-                        new ColorDrawable(getResources().getColor(
-                                R.color.secondary_color, activity.getTheme())));
+                if(mHomeImageWallpaper != null) {
+                    wallpaperInfo.getThumbAsset(activity.getApplicationContext()).loadPreviewImage(
+                            activity, mHomeImageWallpaper,
+                            getResources().getColor(R.color.secondary_color));
+                }
+                setUpLiveWallpaperPreview(wallpaperInfo);
             } else {
                 if (mWallpaperConnection != null) {
                     mWallpaperConnection.disconnect();
                     mWallpaperConnection = null;
                 }
             }
+        } else {
+            // lock screen wallpaper
+            if (wallpaperInfo instanceof LiveWallpaperInfo) {
+                LiveTileOverlay.INSTANCE.attach(thumbnailView.getOverlay());
+            } else {
+                LiveTileOverlay.INSTANCE.detach(thumbnailView.getOverlay());
+                // Load wallpaper color from thumbnail for static wallpaper.
+                WallpaperColorsLoader.getWallpaperColors(
+                        activity,
+                        wallpaperInfo.getThumbAsset(activity),
+                        mLockScreenPreviewer::setColor);
+            }
         }
-        thumbnailView.setOnClickListener(view -> {
-            getFragmentHost().showViewOnlyPreview(wallpaperInfo);
+
+        ((View) thumbnailView.getParent()).setOnClickListener(view -> {
+            getFragmentHost().showViewOnlyPreview(wallpaperInfo, isHomeWallpaper);
             eventLogger.logCurrentWallpaperPreviewed();
         });
     }
@@ -699,7 +749,10 @@
         mWorkspaceSurface.getHolder().addCallback(mWorkspaceSurfaceCallback);
     }
 
-    private final SurfaceHolder.Callback mWallpaperSurfaceCallback = new SurfaceHolder.Callback() {
+    private class WallpaperSurfaceCallback implements SurfaceHolder.Callback {
+
+        private Surface mLastSurface;
+        private SurfaceControlViewHost mHost;
 
         @Override
         public void surfaceCreated(@NonNull SurfaceHolder surfaceHolder) {
@@ -711,29 +764,12 @@
                         makeMeasureSpec(mHomePreview.getHeight(), EXACTLY));
                 mHomeImageWallpaper.layout(0, 0, mHomePreview.getWidth(), mHomePreview.getHeight());
 
-                SurfaceControlViewHost host = new SurfaceControlViewHost(getContext(),
+                cleanUp();
+                mHost = new SurfaceControlViewHost(getContext(),
                         getContext().getDisplay(), mWallpaperSurface.getHostToken());
-                host.setView(mHomeImageWallpaper, mHomeImageWallpaper.getWidth(),
+                mHost.setView(mHomeImageWallpaper, mHomeImageWallpaper.getWidth(),
                         mHomeImageWallpaper.getHeight());
-                mWallpaperSurface.setChildSurfacePackage(host.getSurfacePackage());
-            }
-        }
-
-        @Override
-        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
-        }
-
-        @Override
-        public void surfaceDestroyed(@NonNull SurfaceHolder surfaceHolder) {
-        }
-    };
-
-    private final SurfaceHolder.Callback mWorkspaceSurfaceCallback = new SurfaceHolder.Callback() {
-        @Override
-        public void surfaceCreated(SurfaceHolder holder) {
-            Bundle bundle = SurfaceViewRequestUtils.createSurfaceBundle(mWorkspaceSurface);
-            if (mPreviewUtils.supportsPreview()) {
-                mPreviewUtils.renderPreview(bundle);
+                mWallpaperSurface.setChildSurfacePackage(mHost.getSurfacePackage());
             }
         }
 
@@ -742,398 +778,16 @@
 
         @Override
         public void surfaceDestroyed(SurfaceHolder holder) { }
+
+        public void cleanUp() {
+            if (mHost != null) {
+                mHost.release();
+                mHost = null;
+            }
+        }
     };
 
-    private interface MetadataHolder {
-        /**
-         * Binds {@link WallpaperInfo} objects representing the currently-set wallpapers to the
-         * ViewHolder layout.
-         */
-        void bindWallpapers(WallpaperInfo homeWallpaper, WallpaperInfo lockWallpaper,
-                            @PresentationMode int presentationMode);
-    }
-
-    private static class SelectWallpaperHeaderHolder extends RecyclerView.ViewHolder {
-        public SelectWallpaperHeaderHolder(View headerView) {
-            super(headerView);
-        }
-    }
-
-    /**
-     * ViewHolder subclass for a metadata "card" at the beginning of the RecyclerView.
-     */
-    private class SingleWallpaperMetadataHolder extends RecyclerView.ViewHolder
-            implements MetadataHolder {
-        private WallpaperInfo mWallpaperInfo;
-        private ImageView mWallpaperImage;
-        private TextView mWallpaperPresentationModeSubtitle;
-        private TextView mWallpaperTitle;
-        private TextView mWallpaperSubtitle;
-        private TextView mWallpaperSubtitle2;
-        private ImageButton mWallpaperExploreButtonNoText;
-        private ImageButton mSkipWallpaperButton;
-
-        public SingleWallpaperMetadataHolder(View metadataView) {
-            super(metadataView);
-
-            mWallpaperImage = metadataView.findViewById(R.id.wallpaper_image);
-            mWallpaperImage.getLayoutParams().width = getSingleWallpaperImageWidth();
-
-            mWallpaperPresentationModeSubtitle =
-                    metadataView.findViewById(R.id.wallpaper_presentation_mode_subtitle);
-            mWallpaperTitle = metadataView.findViewById(R.id.wallpaper_title);
-            mWallpaperSubtitle = metadataView.findViewById(R.id.wallpaper_subtitle);
-            mWallpaperSubtitle2 = metadataView.findViewById(R.id.wallpaper_subtitle2);
-
-            mWallpaperExploreButtonNoText =
-                    metadataView.findViewById(R.id.wallpaper_explore_button_notext);
-
-            mSkipWallpaperButton = metadataView.findViewById(R.id.skip_wallpaper_button);
-        }
-
-        /**
-         * Binds home screen wallpaper to the ViewHolder layout.
-         */
-        @Override
-        public void bindWallpapers(WallpaperInfo homeWallpaper, WallpaperInfo lockWallpaper,
-                @PresentationMode int presentationMode) {
-            mWallpaperInfo = homeWallpaper;
-
-            bindWallpaperAsset();
-            bindWallpaperText(presentationMode);
-            bindWallpaperActionButtons(presentationMode);
-        }
-
-        private void bindWallpaperAsset() {
-            final UserEventLogger eventLogger =
-                    InjectorProvider.getInjector().getUserEventLogger(getActivity());
-
-            mWallpaperInfo.getThumbAsset(getActivity().getApplicationContext()).loadDrawable(
-                    getActivity(), mWallpaperImage, getResources().getColor(R.color.secondary_color));
-
-            mWallpaperImage.setOnClickListener(new OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    getFragmentHost().showViewOnlyPreview(mWallpaperInfo);
-                    eventLogger.logCurrentWallpaperPreviewed();
-                }
-            });
-        }
-
-        private void bindWallpaperText(@PresentationMode int presentationMode) {
-            Context appContext = getActivity().getApplicationContext();
-
-            mWallpaperPresentationModeSubtitle.setText(
-                    AttributionFormatter.getHumanReadableWallpaperPresentationMode(
-                            appContext, presentationMode));
-
-            List<String> attributions = mWallpaperInfo.getAttributions(appContext);
-            if (!attributions.isEmpty()) {
-                mWallpaperTitle.setText(attributions.get(0));
-            }
-            if (attributions.size() > 1) {
-                mWallpaperSubtitle.setText(attributions.get(1));
-            } else {
-                mWallpaperSubtitle.setVisibility(View.INVISIBLE);
-            }
-            if (attributions.size() > 2) {
-                mWallpaperSubtitle2.setText(attributions.get(2));
-            } else {
-                mWallpaperSubtitle2.setVisibility(View.INVISIBLE);
-            }
-        }
-
-        private void bindWallpaperActionButtons(@PresentationMode int presentationMode) {
-            final Context appContext = getActivity().getApplicationContext();
-
-            final String actionUrl = mWallpaperInfo.getActionUrl(appContext);
-            if (actionUrl != null && !actionUrl.isEmpty()) {
-
-                Uri exploreUri = Uri.parse(actionUrl);
-
-                ExploreIntentChecker intentChecker =
-                        InjectorProvider.getInjector().getExploreIntentChecker(appContext);
-                intentChecker.fetchValidActionViewIntent(exploreUri, (@Nullable Intent exploreIntent) -> {
-                    if (getActivity() == null) {
-                        return;
-                    }
-
-                    updateExploreSectionVisibility(presentationMode, exploreIntent);
-                });
-            } else {
-                updateExploreSectionVisibility(presentationMode, null /* exploreIntent */);
-            }
-        }
-
-        /**
-         * Shows or hides appropriate elements in the "Explore section" (containing the Explore button
-         * and the Next Wallpaper button) depending on the current wallpaper.
-         *
-         * @param presentationMode The presentation mode of the current wallpaper.
-         * @param exploreIntent    An optional explore intent for the current wallpaper.
-         */
-        private void updateExploreSectionVisibility(
-                @PresentationMode int presentationMode, @Nullable Intent exploreIntent) {
-
-            final Context appContext = getActivity().getApplicationContext();
-            final UserEventLogger eventLogger =
-                    InjectorProvider.getInjector().getUserEventLogger(appContext);
-
-            boolean showSkipWallpaperButton = Flags.skipDailyWallpaperButtonEnabled
-                    && presentationMode == WallpaperPreferences.PRESENTATION_MODE_ROTATING;
-
-            if (exploreIntent != null) {
-                mWallpaperExploreButtonNoText.setImageDrawable(getContext().getDrawable(
-                                mWallpaperInfo.getActionIconRes(appContext)));
-                mWallpaperExploreButtonNoText.setContentDescription(
-                                getString(mWallpaperInfo.getActionLabelRes(appContext)));
-                mWallpaperExploreButtonNoText.setColorFilter(
-                                getResources().getColor(R.color.currently_set_explore_button_color,
-                                        getContext().getTheme()),
-                                Mode.SRC_IN);
-                mWallpaperExploreButtonNoText.setVisibility(View.VISIBLE);
-                mWallpaperExploreButtonNoText.setOnClickListener((View view) -> {
-                    eventLogger.logActionClicked(mWallpaperInfo.getCollectionId(appContext),
-                           mWallpaperInfo.getActionLabelRes(appContext));
-                    startActivity(exploreIntent);
-                });
-            }
-
-            if (showSkipWallpaperButton) {
-                mSkipWallpaperButton.setVisibility(View.VISIBLE);
-                mSkipWallpaperButton.setOnClickListener((View view) -> refreshDailyWallpaper());
-            }
-        }
-    }
-
-    /**
-     * ViewHolder subclass for a metadata "card" at the beginning of the RecyclerView that shows
-     * both home screen and lock screen wallpapers.
-     */
-    private class TwoWallpapersMetadataHolder extends RecyclerView.ViewHolder
-            implements MetadataHolder {
-        private WallpaperInfo mHomeWallpaperInfo;
-        private ImageView mHomeWallpaperImage;
-        private TextView mHomeWallpaperPresentationMode;
-        private TextView mHomeWallpaperTitle;
-        private TextView mHomeWallpaperSubtitle1;
-        private TextView mHomeWallpaperSubtitle2;
-
-        private ImageButton mHomeWallpaperExploreButton;
-        private ImageButton mSkipWallpaperButton;
-        private ViewGroup mHomeWallpaperPresentationSection;
-
-        private WallpaperInfo mLockWallpaperInfo;
-        private ImageView mLockWallpaperImage;
-        private TextView mLockWallpaperTitle;
-        private TextView mLockWallpaperSubtitle1;
-        private TextView mLockWallpaperSubtitle2;
-
-        private ImageButton mLockWallpaperExploreButton;
-
-        public TwoWallpapersMetadataHolder(View metadataView) {
-            super(metadataView);
-
-            // Set the min width of the metadata panel to be the screen width minus space for the
-            // 2 gutters on the sides. This ensures the RecyclerView's GridLayoutManager gives it
-            // a wide-enough initial width to fill up the width of the grid prior to the view being
-            // fully populated.
-            final Display display = getActivity().getWindowManager().getDefaultDisplay();
-            Point screenSize = ScreenSizeCalculator.getInstance().getScreenSize(display);
-            metadataView.setMinimumWidth(
-                    screenSize.x - 2 * getResources().getDimensionPixelSize(R.dimen.grid_padding));
-
-            int bothWallpaperImageWidth = getBothWallpaperImageWidth();
-
-            FrameLayout homeWallpaperSection = metadataView.findViewById(
-                    R.id.home_wallpaper_section);
-            homeWallpaperSection.setMinimumWidth(bothWallpaperImageWidth);
-            mHomeWallpaperImage = metadataView.findViewById(R.id.home_wallpaper_image);
-
-            mHomeWallpaperPresentationMode =
-                    metadataView.findViewById(R.id.home_wallpaper_presentation_mode);
-            mHomeWallpaperTitle = metadataView.findViewById(R.id.home_wallpaper_title);
-            mHomeWallpaperSubtitle1 = metadataView.findViewById(R.id.home_wallpaper_subtitle1);
-            mHomeWallpaperSubtitle2 = metadataView.findViewById(R.id.home_wallpaper_subtitle2);
-            mHomeWallpaperPresentationSection = metadataView.findViewById(
-                    R.id.home_wallpaper_presentation_section);
-            mHomeWallpaperExploreButton =
-                    metadataView.findViewById(R.id.home_wallpaper_explore_button);
-            mSkipWallpaperButton = metadataView.findViewById(R.id.skip_home_wallpaper);
-
-            FrameLayout lockWallpaperSection = metadataView.findViewById(
-                    R.id.lock_wallpaper_section);
-            lockWallpaperSection.setMinimumWidth(bothWallpaperImageWidth);
-            mLockWallpaperImage = metadataView.findViewById(R.id.lock_wallpaper_image);
-
-            mLockWallpaperTitle = metadataView.findViewById(R.id.lock_wallpaper_title);
-            mLockWallpaperSubtitle1 = metadataView.findViewById(R.id.lock_wallpaper_subtitle1);
-            mLockWallpaperSubtitle2 = metadataView.findViewById(R.id.lock_wallpaper_subtitle2);
-            mLockWallpaperExploreButton =
-                    metadataView.findViewById(R.id.lock_wallpaper_explore_button);
-        }
-
-        @Override
-        public void bindWallpapers(WallpaperInfo homeWallpaper, WallpaperInfo lockWallpaper,
-                @PresentationMode int presentationMode) {
-            bindHomeWallpaper(homeWallpaper, presentationMode);
-            bindLockWallpaper(lockWallpaper);
-        }
-
-        private void bindHomeWallpaper(WallpaperInfo homeWallpaper,
-                                       @PresentationMode int presentationMode) {
-            final Context appContext = getActivity().getApplicationContext();
-            final UserEventLogger eventLogger =
-                    InjectorProvider.getInjector().getUserEventLogger(appContext);
-
-            mHomeWallpaperInfo = homeWallpaper;
-
-            homeWallpaper.getThumbAsset(appContext).loadDrawable(
-                    getActivity(), mHomeWallpaperImage,
-                    getResources().getColor(R.color.secondary_color, getContext().getTheme()));
-
-            mHomeWallpaperPresentationMode.setText(
-                    AttributionFormatter.getHumanReadableWallpaperPresentationMode(
-                            appContext, presentationMode));
-
-            List<String> attributions = homeWallpaper.getAttributions(appContext);
-            if (!attributions.isEmpty()) {
-                mHomeWallpaperTitle.setText(attributions.get(0));
-            }
-            if (attributions.size() > 1) {
-                mHomeWallpaperSubtitle1.setText(attributions.get(1));
-            }
-            if (attributions.size() > 2) {
-                mHomeWallpaperSubtitle2.setText(attributions.get(2));
-            }
-
-            final String homeActionUrl = homeWallpaper.getActionUrl(appContext);
-
-            if (homeActionUrl != null && !homeActionUrl.isEmpty()) {
-                Uri homeExploreUri = Uri.parse(homeActionUrl);
-
-                ExploreIntentChecker intentChecker =
-                        InjectorProvider.getInjector().getExploreIntentChecker(appContext);
-
-                intentChecker.fetchValidActionViewIntent(
-                    homeExploreUri, (@Nullable Intent exploreIntent) -> {
-                        if (exploreIntent == null || getActivity() == null) {
-                            return;
-                        }
-
-                        mHomeWallpaperExploreButton.setVisibility(View.VISIBLE);
-                        mHomeWallpaperExploreButton.setImageDrawable(getContext().getDrawable(
-                                homeWallpaper.getActionIconRes(appContext)));
-                        mHomeWallpaperExploreButton.setContentDescription(getString(homeWallpaper
-                                .getActionLabelRes(appContext)));
-                        mHomeWallpaperExploreButton.setColorFilter(
-                                getResources().getColor(R.color.currently_set_explore_button_color,
-                                        getContext().getTheme()),
-                                Mode.SRC_IN);
-                        mHomeWallpaperExploreButton.setOnClickListener(v -> {
-                            eventLogger.logActionClicked(
-                                    mHomeWallpaperInfo.getCollectionId(appContext),
-                                    mHomeWallpaperInfo.getActionLabelRes(appContext));
-                            startActivity(exploreIntent);
-                        });
-                    });
-            } else {
-                mHomeWallpaperExploreButton.setVisibility(View.GONE);
-            }
-
-            if (presentationMode == WallpaperPreferences.PRESENTATION_MODE_ROTATING) {
-                mHomeWallpaperPresentationSection.setVisibility(View.VISIBLE);
-                if (Flags.skipDailyWallpaperButtonEnabled) {
-                    mSkipWallpaperButton.setVisibility(View.VISIBLE);
-                    mSkipWallpaperButton.setColorFilter(
-                            getResources().getColor(R.color.currently_set_explore_button_color,
-                                    getContext().getTheme()), Mode.SRC_IN);
-                    mSkipWallpaperButton.setOnClickListener(view -> refreshDailyWallpaper());
-                } else {
-                    mSkipWallpaperButton.setVisibility(View.GONE);
-                }
-            } else {
-                mHomeWallpaperPresentationSection.setVisibility(View.GONE);
-            }
-
-            mHomeWallpaperImage.setOnClickListener(v -> {
-                eventLogger.logCurrentWallpaperPreviewed();
-                getFragmentHost().showViewOnlyPreview(mHomeWallpaperInfo);
-            });
-        }
-
-        private void bindLockWallpaper(WallpaperInfo lockWallpaper) {
-            if (lockWallpaper == null) {
-                Log.e(TAG, "TwoWallpapersMetadataHolder bound without a lock screen wallpaper.");
-                return;
-            }
-
-            final Context appContext = getActivity().getApplicationContext();
-            final UserEventLogger eventLogger =
-                    InjectorProvider.getInjector().getUserEventLogger(getActivity());
-
-            mLockWallpaperInfo = lockWallpaper;
-
-            lockWallpaper.getThumbAsset(appContext).loadDrawable(
-                    getActivity(), mLockWallpaperImage, getResources().getColor(R.color.secondary_color));
-
-            List<String> lockAttributions = lockWallpaper.getAttributions(appContext);
-            if (!lockAttributions.isEmpty()) {
-                mLockWallpaperTitle.setText(lockAttributions.get(0));
-            }
-            if (lockAttributions.size() > 1) {
-                mLockWallpaperSubtitle1.setText(lockAttributions.get(1));
-            }
-            if (lockAttributions.size() > 2) {
-                mLockWallpaperSubtitle2.setText(lockAttributions.get(2));
-            }
-
-            final String lockActionUrl = lockWallpaper.getActionUrl(appContext);
-
-            if (lockActionUrl != null && !lockActionUrl.isEmpty()) {
-                Uri lockExploreUri = Uri.parse(lockActionUrl);
-
-                ExploreIntentChecker intentChecker =
-                        InjectorProvider.getInjector().getExploreIntentChecker(appContext);
-                intentChecker.fetchValidActionViewIntent(
-                        lockExploreUri, (@Nullable Intent exploreIntent) -> {
-                            if (exploreIntent == null || getActivity() == null) {
-                                return;
-                            }
-                            mLockWallpaperExploreButton.setImageDrawable(getContext().getDrawable(
-                                    lockWallpaper.getActionIconRes(appContext)));
-                            mLockWallpaperExploreButton.setContentDescription(getString(
-                                    lockWallpaper.getActionLabelRes(appContext)));
-                            mLockWallpaperExploreButton.setVisibility(View.VISIBLE);
-                            mLockWallpaperExploreButton.setColorFilter(
-                                    getResources().getColor(
-                                            R.color.currently_set_explore_button_color),
-                                    Mode.SRC_IN);
-                            mLockWallpaperExploreButton.setOnClickListener(new OnClickListener() {
-                                @Override
-                                public void onClick(View v) {
-                                    eventLogger.logActionClicked(
-                                            mLockWallpaperInfo.getCollectionId(appContext),
-                                            mLockWallpaperInfo.getActionLabelRes(appContext));
-                                    startActivity(exploreIntent);
-                                }
-                            });
-                        });
-            } else {
-                mLockWallpaperExploreButton.setVisibility(View.GONE);
-            }
-
-            mLockWallpaperImage.setOnClickListener(new OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    eventLogger.logCurrentWallpaperPreviewed();
-                    getFragmentHost().showViewOnlyPreview(mLockWallpaperInfo);
-                }
-            });
-        }
-    }
-
-    private class PreviewPagerAdapter extends PagerAdapter {
+    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 4094cda..98e739b 100644
--- a/src/com/android/wallpaper/picker/CategorySelectorFragment.java
+++ b/src/com/android/wallpaper/picker/CategorySelectorFragment.java
@@ -46,7 +46,9 @@
 import com.android.wallpaper.module.InjectorProvider;
 import com.android.wallpaper.module.UserEventLogger;
 import com.android.wallpaper.util.DisplayMetricsRetriever;
-import com.android.wallpaper.util.TileSizeCalculator;
+import com.android.wallpaper.util.SizeCalculator;
+import com.android.wallpaper.widget.WallpaperPickerRecyclerViewAccessibilityDelegate;
+import com.android.wallpaper.widget.WallpaperPickerRecyclerViewAccessibilityDelegate.BottomSheetHost;
 
 import com.bumptech.glide.Glide;
 
@@ -78,9 +80,14 @@
         /**
          * Shows the wallpaper page of the specific category.
          *
-         * @param collectionId the id of the category
+         * @param category the wallpaper's {@link Category}
          */
-        void show(String collectionId);
+        void show(Category category);
+
+        /**
+         * Sets the title in the toolbar.
+         */
+        void setToolbarTitle(CharSequence title);
     }
 
     private RecyclerView mImageGrid;
@@ -99,17 +106,20 @@
                              @Nullable Bundle savedInstanceState) {
         View view = inflater.inflate(R.layout.fragment_category_selector, container,
                 /* attachToRoot= */ false);
-
         mImageGrid = view.findViewById(R.id.category_grid);
         mImageGrid.addItemDecoration(new GridPaddingDecoration(
                 getResources().getDimensionPixelSize(R.dimen.grid_padding)));
 
-        mTileSizePx = TileSizeCalculator.getCategoryTileSize(getActivity());
+        mTileSizePx = SizeCalculator.getCategoryTileSize(getActivity());
 
         mImageGrid.setAdapter(mAdapter);
 
         GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), getNumColumns());
         mImageGrid.setLayoutManager(gridLayoutManager);
+        mImageGrid.setAccessibilityDelegateCompat(
+                new WallpaperPickerRecyclerViewAccessibilityDelegate(
+                        mImageGrid, (BottomSheetHost) getParentFragment(), getNumColumns()));
+        getCategorySelectorFragmentHost().setToolbarTitle(getText(R.string.wallpaper_title));
 
         return view;
     }
@@ -184,7 +194,7 @@
 
     private int getNumColumns() {
         Activity activity = getActivity();
-        return activity == null ? 0 : TileSizeCalculator.getNumCategoryColumns(activity);
+        return activity == null ? 1 : SizeCalculator.getNumCategoryColumns(activity);
     }
 
 
@@ -235,7 +245,8 @@
                 return;
             }
 
-            getCategorySelectorFragmentHost().show(mCategory.getCollectionId());
+            getCategorySelectorFragmentHost().show(mCategory);
+            getCategorySelectorFragmentHost().setToolbarTitle(mCategory.getTitle());
         }
 
         /**
diff --git a/src/com/android/wallpaper/picker/ImagePreviewFragment.java b/src/com/android/wallpaper/picker/ImagePreviewFragment.java
index 4620954..b1153bb 100755
--- a/src/com/android/wallpaper/picker/ImagePreviewFragment.java
+++ b/src/com/android/wallpaper/picker/ImagePreviewFragment.java
@@ -15,24 +15,39 @@
  */
 package com.android.wallpaper.picker;
 
+import static android.view.View.MeasureSpec.EXACTLY;
+import static android.view.View.MeasureSpec.makeMeasureSpec;
+
+import static com.android.wallpaper.widget.BottomActionBar.BottomAction.APPLY;
+import static com.android.wallpaper.widget.BottomActionBar.BottomAction.EDIT;
+import static com.android.wallpaper.widget.BottomActionBar.BottomAction.INFORMATION;
+
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.app.Activity;
 import android.content.Context;
+import android.content.res.Resources;
 import android.graphics.Bitmap;
-import android.graphics.Bitmap.Config;
 import android.graphics.Color;
 import android.graphics.Point;
 import android.graphics.PointF;
 import android.graphics.Rect;
 import android.os.Bundle;
-import android.view.Display;
 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;
 import android.widget.ImageView;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.cardview.widget.CardView;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.constraintlayout.widget.ConstraintSet;
+import androidx.core.content.ContextCompat;
 import androidx.fragment.app.FragmentActivity;
 
 import com.android.wallpaper.R;
@@ -41,13 +56,21 @@
 import com.android.wallpaper.module.WallpaperPersister.Destination;
 import com.android.wallpaper.module.WallpaperPersister.SetWallpaperCallback;
 import com.android.wallpaper.util.ScreenSizeCalculator;
+import com.android.wallpaper.util.SizeCalculator;
 import com.android.wallpaper.util.WallpaperCropUtils;
+import com.android.wallpaper.widget.BottomActionBar;
+import com.android.wallpaper.widget.BottomActionBar.AccessibilityCallback;
+import com.android.wallpaper.widget.LockScreenPreviewer;
+import com.android.wallpaper.widget.WallpaperColorsLoader;
+import com.android.wallpaper.widget.WallpaperInfoView;
 
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.MemoryCategory;
 import com.davemorrissey.labs.subscaleview.ImageSource;
 import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
-import com.google.android.material.bottomsheet.BottomSheetBehavior;
+import com.google.android.material.tabs.TabLayout;
+
+import java.util.Locale;
 
 /**
  * Fragment which displays the UI for previewing an individual static wallpaper and its attribution
@@ -57,13 +80,22 @@
 
     private static final float DEFAULT_WALLPAPER_MAX_ZOOM = 8f;
 
+    private final WallpaperSurfaceCallback mWallpaperSurfaceCallback =
+            new WallpaperSurfaceCallback();
+
     private SubsamplingScaleImageView mFullResImageView;
     private Asset mWallpaperAsset;
-    private Point mDefaultCropSurfaceSize;
     private Point mScreenSize;
     private Point mRawWallpaperSize; // Native size of wallpaper image.
     private ImageView mLowResImageView;
-    private InfoPageController mInfoPageController;
+    private TouchForwardingLayout mTouchForwardingLayout;
+    private ConstraintLayout mContainer;
+    private SurfaceView mWorkspaceSurface;
+    private WorkspaceSurfaceHolderCallback mWorkspaceSurfaceCallback;
+    private SurfaceView mWallpaperSurface;
+    private ViewGroup mLockPreviewContainer;
+    private LockScreenPreviewer mLockScreenPreviewer;
+    private WallpaperInfoView mWallpaperInfoView;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -73,12 +105,7 @@
 
     @Override
     protected int getLayoutResId() {
-        return R.layout.fragment_image_preview;
-    }
-
-
-    protected int getBottomSheetResId() {
-        return R.id.bottom_sheet;
+        return R.layout.fragment_image_preview_v2;
     }
 
     @Override
@@ -92,54 +119,73 @@
         View view = super.onCreateView(inflater, container, savedInstanceState);
 
         Activity activity = requireActivity();
-
-        mFullResImageView = view.findViewById(R.id.full_res_image);
-
-        mInfoPageController = new InfoPageController(view.findViewById(R.id.page_info),
-                mPreviewMode);
-
-        mLowResImageView = view.findViewById(R.id.low_res_image);
-
-        // Trim some memory from Glide to make room for the full-size image in this fragment.
-        Glide.get(activity).setMemoryCategory(MemoryCategory.LOW);
-
-        mDefaultCropSurfaceSize = WallpaperCropUtils.getDefaultCropSurfaceSize(
-                getResources(), activity.getWindowManager().getDefaultDisplay());
         mScreenSize = ScreenSizeCalculator.getInstance().getScreenSize(
                 activity.getWindowManager().getDefaultDisplay());
 
-        // Load a low-res placeholder image if there's a thumbnail available from the asset that can
-        // be shown to the user more quickly than the full-sized image.
-        if (mWallpaperAsset.hasLowResDataSource()) {
-            mWallpaperAsset.loadLowResDrawable(activity, mLowResImageView, Color.BLACK,
-                    new WallpaperPreviewBitmapTransformation(activity.getApplicationContext(),
-                            isRtl()));
-        }
+        // TODO: Consider moving some part of this to the base class when live preview is ready.
+        view.findViewById(R.id.low_res_image).setVisibility(View.GONE);
+        view.findViewById(R.id.full_res_image).setVisibility(View.GONE);
+        mLoadingProgressBar.hide();
+        mContainer = view.findViewById(R.id.container);
+        mTouchForwardingLayout = mContainer.findViewById(R.id.touch_forwarding_layout);
 
-        mWallpaperAsset.decodeRawDimensions(getActivity(), dimensions -> {
-            // Don't continue loading the wallpaper if the Fragment is detached.
-            if (getActivity() == null) {
-                return;
+        // Set aspect ratio on the preview card dynamically.
+        ConstraintSet set = new ConstraintSet();
+        set.clone(mContainer);
+        String ratio = String.format(Locale.US, "%d:%d", mScreenSize.x, mScreenSize.y);
+        set.setDimensionRatio(mTouchForwardingLayout.getId(), ratio);
+        set.applyTo(mContainer);
+
+        mWorkspaceSurface = mContainer.findViewById(R.id.workspace_surface);
+        mWorkspaceSurfaceCallback = new WorkspaceSurfaceHolderCallback(mWorkspaceSurface,
+                getContext());
+        mWallpaperSurface = mContainer.findViewById(R.id.wallpaper_surface);
+        mLockPreviewContainer = mContainer.findViewById(R.id.lock_screen_preview_container);
+        mLockScreenPreviewer = new LockScreenPreviewer(getLifecycle(), getActivity(),
+                mLockPreviewContainer);
+
+        TabLayout tabs = inflater.inflate(R.layout.full_preview_tabs,
+                view.findViewById(R.id.toolbar_tabs_container))
+                .findViewById(R.id.full_preview_tabs);
+        tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
+            @Override
+            public void onTabSelected(TabLayout.Tab tab) {
+                updateScreenPreview(tab.getPosition() == 0);
             }
 
-            // Return early and show a dialog if dimensions are null (signaling a decoding error).
-            if (dimensions == null) {
-                showLoadWallpaperErrorDialog();
-                return;
-            }
+            @Override
+            public void onTabUnselected(TabLayout.Tab tab) {}
 
-            mRawWallpaperSize = dimensions;
-            setUpExploreIntent(ImagePreviewFragment.this::initFullResView);
+            @Override
+            public void onTabReselected(TabLayout.Tab tab) {}
         });
 
-        setUpLoadingIndicator();
+        // The TabLayout only contains below tabs, see: full_preview_tabs.xml
+        // 0. Home tab
+        // 1. Lock tab
+        tabs.getTabAt(mViewAsHome ? 0 : 1).select();
+        updateScreenPreview(mViewAsHome);
 
+        view.measure(makeMeasureSpec(mScreenSize.x, EXACTLY),
+                makeMeasureSpec(mScreenSize.y, EXACTLY));
+        ((CardView) mWorkspaceSurface.getParent())
+                .setRadius(SizeCalculator.getPreviewCornerRadius(
+                        activity, mContainer.getMeasuredWidth()));
+        renderImageWallpaper();
+        renderWorkspaceSurface();
+
+        // Trim some memory from Glide to make room for the full-size image in this fragment.
+        Glide.get(activity).setMemoryCategory(MemoryCategory.LOW);
+        setUpLoadingIndicator();
         return view;
     }
 
     @Override
-    protected void setUpBottomSheetView(ViewGroup bottomSheet) {
-        // Nothing needed here.
+    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        WallpaperColorsLoader.getWallpaperColors(getContext(),
+                mWallpaper.getThumbAsset(getContext()),
+                mLockScreenPreviewer::setColor);
     }
 
     @Override
@@ -162,24 +208,66 @@
             mLoadingProgressBar.hide();
         }
         mFullResImageView.recycle();
+
+        mWallpaperSurfaceCallback.cleanUp();
+        mWorkspaceSurfaceCallback.cleanUp();
     }
 
     @Override
-    public void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
+    protected void onBottomActionBarReady(BottomActionBar bottomActionBar) {
+        super.onBottomActionBarReady(bottomActionBar);
 
-        final BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(mBottomSheet);
-        outState.putInt(KEY_BOTTOM_SHEET_STATE, bottomSheetBehavior.getState());
-    }
+        mWallpaperInfoView = (WallpaperInfoView)
+                LayoutInflater.from(getContext()).inflate(
+                        R.layout.wallpaper_info_view, /* root= */null);
+        mBottomActionBar.attachViewToBottomSheetAndBindAction(mWallpaperInfoView, INFORMATION);
+        mBottomActionBar.showActionsOnly(INFORMATION, EDIT, APPLY);
+        mBottomActionBar.setActionClickListener(EDIT, v ->
+                setEditingEnabled(mBottomActionBar.isActionSelected(EDIT))
+        );
+        mBottomActionBar.setActionSelectedListener(EDIT, this::setEditingEnabled);
+        mBottomActionBar.setActionClickListener(APPLY, this::onSetWallpaperClicked);
 
-    @Override
-    protected void setBottomSheetContentAlpha(float alpha) {
-        mInfoPageController.setContentAlpha(alpha);
-    }
+        // Update target view's accessibility param since it will be blocked by the bottom sheet
+        // when expanded.
+        mBottomActionBar.setAccessibilityCallback(new AccessibilityCallback() {
+            @Override
+            public void onBottomSheetCollapsed() {
+                mContainer.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
+            }
 
-    @Override
-    protected CharSequence getExploreButtonLabel(Context context) {
-        return context.getString(mWallpaper.getActionLabelRes(context));
+            @Override
+            public void onBottomSheetExpanded() {
+                mContainer.setImportantForAccessibility(
+                        View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
+            }
+        });
+
+        // Will trigger onActionSelected callback to update the editing state.
+        mBottomActionBar.setDefaultSelectedButton(EDIT);
+        mBottomActionBar.show();
+
+        mBottomActionBar.disableActions();
+        mWallpaperAsset.decodeRawDimensions(getActivity(), dimensions -> {
+            if (mBottomActionBar != null) {
+                mBottomActionBar.enableActions();
+            }
+
+            // Don't continue loading the wallpaper if the Fragment is detached.
+            if (getActivity() == null) {
+                return;
+            }
+
+            // Return early and show a dialog if dimensions are null (signaling a decoding error).
+            if (dimensions == null) {
+                showLoadWallpaperErrorDialog();
+                return;
+            }
+
+            mRawWallpaperSize = dimensions;
+
+            setUpExploreIntentAndLabel(ImagePreviewFragment.this::initFullResView);
+        });
     }
 
     /**
@@ -187,14 +275,19 @@
      * initializing a zoom-scroll observer and click listener.
      */
     private void initFullResView() {
-        mFullResImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP);
+        // Minimum scale will only be respected under this scale type.
+        mFullResImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CUSTOM);
+        // When we set a minimum scale bigger than the scale with which the full image is shown,
+        // disallow user to pan outside the view we show the wallpaper in.
+        mFullResImageView.setPanLimit(SubsamplingScaleImageView.PAN_LIMIT_INSIDE);
 
         // Set a solid black "page bitmap" so MosaicView draws a black background while waiting
         // for the image to load or a transparent one if a thumbnail already loaded.
-        Bitmap blackBitmap = Bitmap.createBitmap(1, 1, Config.ARGB_8888);
-        int color = (mLowResImageView.getDrawable() == null) ? Color.BLACK : Color.TRANSPARENT;
-        blackBitmap.setPixel(0, 0, color);
-        mFullResImageView.setImage(ImageSource.bitmap(blackBitmap));
+        Bitmap backgroundBitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
+        int preColor = ContextCompat.getColor(getContext(), R.color.fullscreen_preview_background);
+        int color = (mLowResImageView.getDrawable() == null) ? preColor : Color.TRANSPARENT;
+        backgroundBitmap.setPixel(0, 0, color);
+        mFullResImageView.setImage(ImageSource.bitmap(backgroundBitmap));
 
         // Then set a fallback "page bitmap" to cover the whole MosaicView, which is an actual
         // (lower res) version of the image to be displayed.
@@ -226,7 +319,10 @@
                     }
                     getActivity().invalidateOptionsMenu();
 
-                    populateInfoPage(mInfoPageController);
+                    if (mWallpaperInfoView != null && mWallpaper != null) {
+                        mWallpaperInfoView.populateWallpaperInfo(mWallpaper, mActionLabel,
+                                mExploreIntent, this::onExploreClicked);
+                    }
                 });
     }
 
@@ -277,32 +373,54 @@
      */
     private void setDefaultWallpaperZoomAndScroll() {
         // Determine minimum zoom to fit maximum visible area of wallpaper on crop surface.
-        float defaultWallpaperZoom =
-                WallpaperCropUtils.calculateMinZoom(mRawWallpaperSize, mDefaultCropSurfaceSize);
-        float minWallpaperZoom =
-                WallpaperCropUtils.calculateMinZoom(mRawWallpaperSize, mScreenSize);
+        int cropWidth = mWorkspaceSurface.getMeasuredWidth();
+        int cropHeight = mWorkspaceSurface.getMeasuredHeight();
+        Point crop = new Point(cropWidth, cropHeight);
+        Rect visibleRawWallpaperRect =
+                WallpaperCropUtils.calculateVisibleRect(mRawWallpaperSize, crop);
+
+        final PointF centerPosition = WallpaperCropUtils.calculateDefaultCenter(requireContext(),
+                mRawWallpaperSize, visibleRawWallpaperRect);
+
+        Point visibleRawWallpaperSize = new Point(visibleRawWallpaperRect.width(),
+                visibleRawWallpaperRect.height());
+
+        final float defaultWallpaperZoom = WallpaperCropUtils.calculateMinZoom(
+                visibleRawWallpaperSize, crop);
+        final float minWallpaperZoom = defaultWallpaperZoom;
+
 
         // Set min wallpaper zoom and max zoom on MosaicView widget.
         mFullResImageView.setMaxScale(Math.max(DEFAULT_WALLPAPER_MAX_ZOOM, defaultWallpaperZoom));
         mFullResImageView.setMinScale(minWallpaperZoom);
 
         // Set center to composite positioning between scaled wallpaper and screen.
-        PointF centerPosition = new PointF(
-                mRawWallpaperSize.x / 2f,
-                mRawWallpaperSize.y / 2f);
-
         mFullResImageView.setScaleAndCenter(minWallpaperZoom, centerPosition);
     }
 
     private Rect calculateCropRect() {
         float wallpaperZoom = mFullResImageView.getScale();
         Context context = requireContext().getApplicationContext();
-        Display defaultDisplay = requireActivity().getWindowManager().getDefaultDisplay();
-        Rect rect = new Rect();
-        mFullResImageView.visibleFileRect(rect);
 
-        return WallpaperCropUtils.calculateCropRect(context, defaultDisplay, mRawWallpaperSize,
-                rect, wallpaperZoom);
+        Rect visibleFileRect = new Rect();
+        mFullResImageView.visibleFileRect(visibleFileRect);
+
+        int cropWidth = mWorkspaceSurface.getMeasuredWidth();
+        int cropHeight = mWorkspaceSurface.getMeasuredHeight();
+        int maxCrop = Math.max(cropWidth, cropHeight);
+        int minCrop = Math.min(cropWidth, cropHeight);
+        Point hostViewSize = new Point(cropWidth, cropHeight);
+
+        Resources res = context.getResources();
+        Point cropSurfaceSize = WallpaperCropUtils.calculateCropSurfaceSize(res, maxCrop, minCrop);
+        WallpaperCropUtils.scaleSize(context, hostViewSize);
+        WallpaperCropUtils.scaleSize(context, cropSurfaceSize);
+
+        WallpaperCropUtils.adjustCropRect(context, visibleFileRect, false);
+
+        Rect cropRect = WallpaperCropUtils.calculateCropRect(context, hostViewSize,
+                cropSurfaceSize, mRawWallpaperSize, visibleFileRect, wallpaperZoom);
+        return cropRect;
     }
 
     @Override
@@ -312,7 +430,7 @@
                 new SetWallpaperCallback() {
                     @Override
                     public void onSuccess(WallpaperInfo wallpaperInfo) {
-                        finishActivityWithResultOk();
+                        finishActivity(/* success= */ true);
                     }
 
                     @Override
@@ -321,4 +439,76 @@
                     }
                 });
     }
+
+    private void renderWorkspaceSurface() {
+        mWorkspaceSurface.setZOrderMediaOverlay(true);
+        mWorkspaceSurface.getHolder().addCallback(mWorkspaceSurfaceCallback);
+    }
+
+    private void renderImageWallpaper() {
+        mWallpaperSurface.getHolder().addCallback(mWallpaperSurfaceCallback);
+    }
+
+    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();
+                if (mFullResImageView != null) {
+                    mFullResImageView.recycle();
+                }
+                View wallpaperPreviewContainer = LayoutInflater.from(getContext()).inflate(
+                        R.layout.fullscreen_wallpaper_preview, null);
+                mFullResImageView = wallpaperPreviewContainer.findViewById(R.id.full_res_image);
+                mLowResImageView = wallpaperPreviewContainer.findViewById(R.id.low_res_image);
+                // Load a low-res placeholder image if there's a thumbnail available from the asset
+                // that can be shown to the user more quickly than the full-sized image.
+                if (mWallpaperAsset.hasLowResDataSource()) {
+                    Activity activity = requireActivity();
+                    mWallpaperAsset.loadLowResDrawable(activity, mLowResImageView, Color.BLACK,
+                            new WallpaperPreviewBitmapTransformation(
+                                    activity.getApplicationContext(), isRtl()));
+                }
+                wallpaperPreviewContainer.measure(
+                        makeMeasureSpec(mWallpaperSurface.getWidth(), EXACTLY),
+                        makeMeasureSpec(mWallpaperSurface.getHeight(), EXACTLY));
+                wallpaperPreviewContainer.layout(0, 0, mWallpaperSurface.getWidth(),
+                        mWallpaperSurface.getHeight());
+                mTouchForwardingLayout.setTargetView(mFullResImageView);
+
+                cleanUp();
+                mHost = new SurfaceControlViewHost(getContext(),
+                        getContext().getDisplay(), mWallpaperSurface.getHostToken());
+                mHost.setView(wallpaperPreviewContainer, wallpaperPreviewContainer.getWidth(),
+                        wallpaperPreviewContainer.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 void setEditingEnabled(boolean enabled) {
+        mTouchForwardingLayout.setForwardingEnabled(enabled);
+    }
+
+    private void updateScreenPreview(boolean isHomeSelected) {
+        mWorkspaceSurface.setVisibility(isHomeSelected ? View.VISIBLE : View.INVISIBLE);
+        mLockPreviewContainer.setVisibility(isHomeSelected ? View.INVISIBLE : View.VISIBLE);
+    }
 }
diff --git a/src/com/android/wallpaper/picker/LivePreviewFragment.java b/src/com/android/wallpaper/picker/LivePreviewFragment.java
index 0a3003d..68da4e5 100644
--- a/src/com/android/wallpaper/picker/LivePreviewFragment.java
+++ b/src/com/android/wallpaper/picker/LivePreviewFragment.java
@@ -15,54 +15,69 @@
  */
 package com.android.wallpaper.picker;
 
+import static com.android.wallpaper.widget.BottomActionBar.BottomAction.APPLY;
+import static com.android.wallpaper.widget.BottomActionBar.BottomAction.CUSTOMIZE;
+import static com.android.wallpaper.widget.BottomActionBar.BottomAction.DELETE;
+import static com.android.wallpaper.widget.BottomActionBar.BottomAction.INFORMATION;
+
 import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.app.AlertDialog;
+import android.app.WallpaperColors;
 import android.app.WallpaperInfo;
 import android.app.WallpaperManager;
 import android.content.ComponentName;
-import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ServiceInfo;
+import android.graphics.Point;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Bundle;
+import android.os.RemoteException;
 import android.service.wallpaper.IWallpaperConnection;
 import android.service.wallpaper.WallpaperService;
 import android.service.wallpaper.WallpaperSettingsActivity;
 import android.text.TextUtils;
 import android.util.Log;
-import android.util.Pair;
-import android.view.ContextThemeWrapper;
 import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
+import android.view.MotionEvent;
+import android.view.SurfaceView;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.animation.AnimationUtils;
+import android.widget.ImageView;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.cardview.widget.CardView;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.constraintlayout.widget.ConstraintSet;
 import androidx.lifecycle.LiveData;
 import androidx.slice.Slice;
 import androidx.slice.widget.SliceLiveData;
 import androidx.slice.widget.SliceView;
-import androidx.viewpager.widget.PagerAdapter;
-import androidx.viewpager.widget.ViewPager;
 
 import com.android.wallpaper.R;
 import com.android.wallpaper.compat.BuildCompat;
-import com.android.wallpaper.model.LiveWallpaperInfo;
 import com.android.wallpaper.module.WallpaperPersister.SetWallpaperCallback;
+import com.android.wallpaper.util.ScreenSizeCalculator;
+import com.android.wallpaper.util.SizeCalculator;
 import com.android.wallpaper.util.WallpaperConnection;
+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.WallpaperInfoView;
 
 import com.google.android.material.tabs.TabLayout;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Locale;
 
 /**
  * Fragment which displays the UI for previewing an individual live wallpaper, its attribution
@@ -82,30 +97,34 @@
      * @see IWallpaperConnection
      */
     protected WallpaperConnection mWallpaperConnection;
+    protected WallpaperInfoView mWallpaperInfoView;
+    protected CardView mHomePreviewCard;
+    protected ImageView mHomePreview;
 
-    private Intent mWallpaperIntent;
+    private final int[] mLivePreviewLocation = new int[2];
+    private final Rect mPreviewLocalRect = new Rect();
+    private final Rect mPreviewGlobalRect = new Rect();
+
     private Intent mDeleteIntent;
     private Intent mSettingsIntent;
 
-    private List<Pair<String, View>> mPages;
-    private ViewPager mViewPager;
-    private TabLayout mTabLayout;
     private SliceView mSettingsSliceView;
     private LiveData<Slice> mSettingsLiveData;
     private View mLoadingScrim;
-    private InfoPageController mInfoPageController;
+    private Point mScreenSize;
+    private ViewGroup mPreviewContainer;
+    private TouchForwardingLayout mTouchForwardingLayout;
+    private SurfaceView mWorkspaceSurface;
+    private ViewGroup mLockPreviewContainer;
+    private LockScreenPreviewer mLockScreenPreviewer;
+    private WorkspaceSurfaceHolderCallback mWorkspaceSurfaceCallback;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         android.app.WallpaperInfo info = mWallpaper.getWallpaperComponent();
-        mWallpaperIntent = getWallpaperIntent(info);
-        setUpExploreIntent(null);
 
-        android.app.WallpaperInfo currentWallpaper =
-                WallpaperManager.getInstance(requireContext()).getWallpaperInfo();
-        String deleteAction = getDeleteAction(info, currentWallpaper);
-
+        String deleteAction = getDeleteAction(info);
         if (!TextUtils.isEmpty(deleteAction)) {
             mDeleteIntent = new Intent(deleteAction);
             mDeleteIntent.setPackage(info.getPackageName());
@@ -140,136 +159,286 @@
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
-        mPages = new ArrayList<>();
         View view = super.onCreateView(inflater, container, savedInstanceState);
-        if (view == null) {
-            return null;
-        }
-
-        Activity activity = requireActivity();
 
         mLoadingScrim = view.findViewById(R.id.loading);
         setUpLoadingIndicator();
 
-        mWallpaperConnection = new WallpaperConnection(mWallpaperIntent, activity,
-                this, null);
-        container.post(() -> {
-            if (!mWallpaperConnection.connect()) {
-                mWallpaperConnection = null;
+        Activity activity = requireActivity();
+        mScreenSize = ScreenSizeCalculator.getInstance().getScreenSize(
+                activity.getWindowManager().getDefaultDisplay());
+
+        mWallpaperInfoView = (WallpaperInfoView) LayoutInflater.from(getContext())
+                .inflate(R.layout.wallpaper_info_view, /* root= */ null);
+        setUpExploreIntentAndLabel(
+                () -> mWallpaperInfoView.populateWallpaperInfo(mWallpaper, mActionLabel,
+                                mExploreIntent, this::onExploreClicked));
+
+        mPreviewContainer = view.findViewById(R.id.live_wallpaper_preview);
+        mTouchForwardingLayout = view.findViewById(R.id.touch_forwarding_layout);
+        // Set aspect ratio on the preview card.
+        ConstraintSet set = new ConstraintSet();
+        set.clone((ConstraintLayout) mPreviewContainer);
+        String ratio = String.format(Locale.US, "%d:%d", mScreenSize.x, mScreenSize.y);
+        set.setDimensionRatio(mTouchForwardingLayout.getId(), ratio);
+        set.applyTo((ConstraintLayout) mPreviewContainer);
+
+        mHomePreviewCard = mPreviewContainer.findViewById(R.id.wallpaper_full_preview_card);
+        mHomePreview = mHomePreviewCard.findViewById(R.id.wallpaper_preview_image);
+        mTouchForwardingLayout.setTargetView(mHomePreview);
+        mTouchForwardingLayout.setForwardingEnabled(true);
+        mLockPreviewContainer = mPreviewContainer.findViewById(R.id.lock_screen_preview_container);
+        mLockScreenPreviewer = new LockScreenPreviewer(getLifecycle(), activity,
+                mLockPreviewContainer);
+        mWorkspaceSurface = mHomePreviewCard.findViewById(R.id.workspace_surface);
+        mWorkspaceSurfaceCallback = new WorkspaceSurfaceHolderCallback(
+                mWorkspaceSurface, getContext());
+
+        TabLayout tabs = inflater.inflate(R.layout.full_preview_tabs,
+                view.findViewById(R.id.toolbar_tabs_container))
+                .findViewById(R.id.full_preview_tabs);
+        tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
+            @Override
+            public void onTabSelected(TabLayout.Tab tab) {
+                updateScreenPreview(tab.getPosition() == 0);
             }
+
+            @Override
+            public void onTabUnselected(TabLayout.Tab tab) {}
+
+            @Override
+            public void onTabReselected(TabLayout.Tab tab) {}
         });
 
+        // The TabLayout only contains below tabs, see: full_preview_tabs.xml
+        // 0. Home tab
+        // 1. Lock tab
+        tabs.getTabAt(mViewAsHome ? 0 : 1).select();
+        updateScreenPreview(mViewAsHome);
+
+        view.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
+            @Override
+            public void onLayoutChange(View thisView, int left, int top, int right, int bottom,
+                    int oldLeft, int oldTop, int oldRight, int oldBottom) {
+                mHomePreviewCard.setRadius(SizeCalculator.getPreviewCornerRadius(activity,
+                        mHomePreviewCard.getMeasuredWidth()));
+                view.removeOnLayoutChangeListener(this);
+            }
+        });
         return view;
     }
 
     @Override
+    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        setupCurrentWallpaperPreview();
+        renderWorkspaceSurface();
+    }
+
+    private void updateScreenPreview(boolean isHomeSelected) {
+        mWorkspaceSurface.setVisibility(isHomeSelected ? View.VISIBLE : View.INVISIBLE);
+        mLockPreviewContainer.setVisibility(isHomeSelected ? View.INVISIBLE : View.VISIBLE);
+    }
+
+    private void repositionPreview(ImageView previewView) {
+        previewView.getLocationOnScreen(mLivePreviewLocation);
+        mPreviewGlobalRect.set(0, 0, previewView.getMeasuredWidth(),
+                previewView.getMeasuredHeight());
+        mPreviewLocalRect.set(mPreviewGlobalRect);
+        mPreviewGlobalRect.offset(mLivePreviewLocation[0], mLivePreviewLocation[1]);
+    }
+
+    private void setupCurrentWallpaperPreview() {
+        mHomePreview.setOnTouchListener((v, ev) -> {
+            if (mWallpaperConnection != null && mWallpaperConnection.getEngine() != null) {
+                int action = ev.getActionMasked();
+                if (action == MotionEvent.ACTION_DOWN) {
+                    mBottomActionBar.collapseBottomSheetIfExpanded();
+                }
+                MotionEvent dup = MotionEvent.obtainNoHistory(ev);
+                try {
+                    mWallpaperConnection.getEngine().dispatchPointer(dup);
+                    if (action == MotionEvent.ACTION_UP) {
+                        mWallpaperConnection.getEngine().dispatchWallpaperCommand(
+                                WallpaperManager.COMMAND_TAP,
+                                (int) ev.getX(), (int) ev.getY(), 0, null);
+                    } else if (action == MotionEvent.ACTION_POINTER_UP) {
+                        int pointerIndex = ev.getActionIndex();
+                        mWallpaperConnection.getEngine().dispatchWallpaperCommand(
+                                WallpaperManager.COMMAND_SECONDARY_TAP,
+                                (int) ev.getX(pointerIndex), (int) ev.getY(pointerIndex), 0, null);
+                    }
+                } catch (RemoteException e) {
+                    Log.e(TAG, "Remote exception of wallpaper connection");
+                }
+            }
+            return false;
+        });
+    }
+
+    @Override
     public void onDestroyView() {
         super.onDestroyView();
         if (mSettingsLiveData != null && mSettingsLiveData.hasObservers()) {
             mSettingsLiveData.removeObserver(mSettingsSliceView);
             mSettingsLiveData = null;
         }
+        LiveTileOverlay.INSTANCE.detach(mHomePreview.getOverlay());
+        if (mWallpaperConnection != null) {
+            mWallpaperConnection.disconnect();
+            mWallpaperConnection = null;
+        }
+        mWorkspaceSurfaceCallback.cleanUp();
+    }
+
+    private void previewLiveWallpaper(ImageView thumbnailView) {
+        thumbnailView.post(() -> {
+            mWallpaper.getThumbAsset(requireActivity().getApplicationContext()).loadPreviewImage(
+                    requireActivity(), thumbnailView,
+                    getResources().getColor(R.color.secondary_color));
+            LiveTileOverlay.INSTANCE.detach(thumbnailView.getOverlay());
+
+            setUpLiveWallpaperPreview(mWallpaper, thumbnailView,
+                    new ColorDrawable(getResources().getColor(
+                            R.color.secondary_color, getActivity().getTheme())));
+        });
+    }
+
+    private void setUpLiveWallpaperPreview(com.android.wallpaper.model.WallpaperInfo homeWallpaper,
+            ImageView previewView, Drawable thumbnail) {
+        Activity activity = getActivity();
+        if (activity == null || activity.isFinishing()) {
+            return;
+        }
         if (mWallpaperConnection != null) {
             mWallpaperConnection.disconnect();
         }
-        mWallpaperConnection = null;
-        super.onDestroy();
+        if (thumbnail != null) {
+            thumbnail.setBounds(previewView.getLeft(), previewView.getTop(), previewView.getRight(),
+                    previewView.getBottom());
+        }
+        repositionPreview(previewView);
+
+        mWallpaperConnection = new WallpaperConnection(
+                getWallpaperIntent(homeWallpaper.getWallpaperComponent()),
+                activity,
+                /* listener= */ this,
+                mPreviewGlobalRect);
+
+        LiveTileOverlay.INSTANCE.update(new RectF(mPreviewLocalRect),
+                ((CardView) previewView.getParent()).getRadius());
+
+        mWallpaperConnection.setVisibility(true);
+        mLoadingScrim.post(() -> mLoadingScrim.animate()
+                .alpha(0f)
+                .setStartDelay(50)
+                .setDuration(250)
+                .setInterpolator(AnimationUtils.loadInterpolator(getContext(),
+                        android.R.interpolator.fast_out_linear_in))
+                .withEndAction(() -> {
+                    if (mWallpaperConnection != null && !mWallpaperConnection.connect()) {
+                        mWallpaperConnection = null;
+                        LiveTileOverlay.INSTANCE.detach(previewView.getOverlay());
+                    }
+                }));
+    }
+
+    private void renderWorkspaceSurface() {
+        mWorkspaceSurface.setZOrderMediaOverlay(true);
+        mWorkspaceSurface.getHolder().addCallback(mWorkspaceSurfaceCallback);
     }
 
     @Override
-    protected void setUpBottomSheetView(ViewGroup bottomSheet) {
+    protected void onBottomActionBarReady(BottomActionBar bottomActionBar) {
+        super.onBottomActionBarReady(bottomActionBar);
+        mBottomActionBar.showActionsOnly(INFORMATION, DELETE, CUSTOMIZE, APPLY);
+        mBottomActionBar.setActionClickListener(APPLY, unused -> onSetWallpaperClicked(null));
+        mBottomActionBar.attachViewToBottomSheetAndBindAction(mWallpaperInfoView, INFORMATION);
 
-        initInfoPage();
-        initSettingsPage();
-
-        mViewPager = bottomSheet.findViewById(R.id.viewpager);
-        mTabLayout = bottomSheet.findViewById(R.id.tablayout);
-
-        // Create PagerAdapter
-        final PagerAdapter pagerAdapter = new PagerAdapter() {
+        // Update target view's accessibility param since it will be blocked by the bottom sheet
+        // when expanded.
+        mBottomActionBar.setAccessibilityCallback(new AccessibilityCallback() {
             @Override
-            public Object instantiateItem(ViewGroup container, int position) {
-                final View page = mPages.get(position).second;
-                container.addView(page);
-                return page;
+            public void onBottomSheetCollapsed() {
+                mPreviewContainer.setImportantForAccessibility(
+                        View.IMPORTANT_FOR_ACCESSIBILITY_YES);
             }
 
             @Override
-            public void destroyItem(@NonNull ViewGroup container, int position,
-                    @NonNull Object object) {
-                if (object instanceof View) {
-                    container.removeView((View) object);
-                }
-            }
-
-            @Override
-            public int getCount() {
-                return mPages.size();
-            }
-
-            @Override
-            public CharSequence getPageTitle(int position) {
-                try {
-                    return mPages.get(position).first;
-                } catch (IndexOutOfBoundsException e) {
-                    return null;
-                }
-            }
-
-            @Override
-            public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
-                return (view == object);
-            }
-        };
-
-        // Add OnPageChangeListener to re-measure ViewPager's height
-        mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
-            @Override
-            public void onPageSelected(int position) {
-                mViewPager.requestLayout();
-                logLiveWallpaperPageSelected(position);
+            public void onBottomSheetExpanded() {
+                mPreviewContainer.setImportantForAccessibility(
+                        View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
             }
         });
-
-        // Set PagerAdapter
-        mViewPager.setAdapter(pagerAdapter);
-
-        // Make TabLayout visible if there are more than one page
-        if (mPages.size() > 1) {
-            mTabLayout.setVisibility(View.VISIBLE);
-            mTabLayout.setupWithViewPager(mViewPager);
+        final Uri uriSettingsSlice = getSettingsSliceUri(mWallpaper.getWallpaperComponent());
+        if (uriSettingsSlice != null) {
+            View previewPage = LayoutInflater.from(getContext())
+                    .inflate(R.layout.preview_customize_settings, null);
+            mSettingsSliceView = previewPage.findViewById(R.id.settings_slice);
+            mSettingsSliceView.setMode(SliceView.MODE_LARGE);
+            mSettingsSliceView.setScrollable(false);
+            mSettingsLiveData = SliceLiveData.fromUri(requireContext(), uriSettingsSlice);
+            mSettingsLiveData.observeForever(mSettingsSliceView);
+            mBottomActionBar.attachViewToBottomSheetAndBindAction(previewPage, CUSTOMIZE);
+        } else {
+            if (mSettingsIntent != null) {
+                mBottomActionBar.setActionClickListener(CUSTOMIZE, listener ->
+                        startActivity(mSettingsIntent));
+            } else {
+                mBottomActionBar.hideActions(CUSTOMIZE);
+            }
         }
-        mViewPager.setCurrentItem(0);
-    }
 
-    private void logLiveWallpaperPageSelected(int position) {
-        switch (position) {
-            case 0:
-                mUserEventLogger.logLiveWallpaperInfoSelected(
-                        mWallpaper.getCollectionId(getActivity()), mWallpaper.getWallpaperId());
-                break;
-            case 1:
-                mUserEventLogger.logLiveWallpaperCustomizeSelected(
-                        mWallpaper.getCollectionId(getActivity()), mWallpaper.getWallpaperId());
-                break;
+        final String deleteAction = getDeleteAction(mWallpaper.getWallpaperComponent());
+        if (TextUtils.isEmpty(deleteAction)) {
+            mBottomActionBar.hideActions(DELETE);
+        } else {
+            mBottomActionBar.setActionClickListener(DELETE, listener ->
+                    showDeleteConfirmDialog());
         }
+        mBottomActionBar.show();
     }
 
     @Override
     public void onEngineShown() {
+        Activity activity = getActivity();
+        if (activity == null) {
+            return;
+        }
+
         mLoadingScrim.post(() -> mLoadingScrim.animate()
                 .alpha(0f)
-                .setDuration(220)
-                .setStartDelay(300)
-                .setInterpolator(AnimationUtils.loadInterpolator(getActivity(),
+                .setDuration(250)
+                .setStartDelay(200)
+                .setInterpolator(AnimationUtils.loadInterpolator(activity,
                         android.R.interpolator.fast_out_linear_in))
                 .withEndAction(() -> {
                     if (mLoadingProgressBar != null) {
                         mLoadingProgressBar.hide();
                     }
-                    mLoadingScrim.setVisibility(View.INVISIBLE);
-                    populateInfoPage(mInfoPageController);
+                    mLoadingScrim.setVisibility(View.GONE);
                 }));
+        final Drawable placeholder = mHomePreview.getDrawable() == null
+                ? new ColorDrawable(getResources().getColor(R.color.secondary_color,
+                activity.getTheme()))
+                : mHomePreview.getDrawable();
+        LiveTileOverlay.INSTANCE.setForegroundDrawable(placeholder);
+        LiveTileOverlay.INSTANCE.attach(mHomePreview.getOverlay());
+        mHomePreview.animate()
+                .setStartDelay(0)
+                .setDuration(150)
+                .setInterpolator(AnimationUtils.loadInterpolator(activity,
+                        android.R.interpolator.fast_out_linear_in))
+                .setUpdateListener(value -> placeholder.setAlpha(
+                        (int) (255 * (1 - value.getAnimatedFraction()))))
+                .withEndAction(() -> {
+                    LiveTileOverlay.INSTANCE.setForegroundDrawable(null);
+                }).start();
+    }
+
+    @Override
+    public void onWallpaperColorsChanged(WallpaperColors colors, int displayId) {
+        mLockScreenPreviewer.setColor(colors);
     }
 
     @Override
@@ -277,44 +446,6 @@
         return mWallpaperConnection != null && mWallpaperConnection.isEngineReady();
     }
 
-    private void initInfoPage() {
-        View pageInfo = InfoPageController.createView(getLayoutInflater());
-        mInfoPageController = new InfoPageController(pageInfo, mPreviewMode);
-        mPages.add(Pair.create(getString(R.string.tab_info), pageInfo));
-    }
-
-    private void initSettingsPage() {
-        final Uri uriSettingsSlice = getSettingsSliceUri(mWallpaper.getWallpaperComponent());
-        if (uriSettingsSlice == null) {
-            return;
-        }
-
-        final View pageSettings = getLayoutInflater().inflate(R.layout.preview_page_settings,
-                null /* root */);
-
-        mSettingsSliceView = pageSettings.findViewById(R.id.settings_slice);
-        mSettingsSliceView.setMode(SliceView.MODE_LARGE);
-        mSettingsSliceView.setScrollable(false);
-
-        // Set LiveData for SliceView
-        mSettingsLiveData = SliceLiveData.fromUri(requireContext() /* context */, uriSettingsSlice);
-        mSettingsLiveData.observeForever(mSettingsSliceView);
-
-        pageSettings.findViewById(R.id.preview_settings_pane_set_wallpaper_button)
-                .setOnClickListener(this::onSetWallpaperClicked);
-
-        mPages.add(Pair.create(getResources().getString(R.string.tab_customize), pageSettings));
-    }
-
-    @Override
-    protected CharSequence getExploreButtonLabel(Context context) {
-        CharSequence exploreLabel = ((LiveWallpaperInfo) mWallpaper).getActionDescription(context);
-        if (TextUtils.isEmpty(exploreLabel)) {
-            exploreLabel = context.getString(mWallpaper.getActionLabelRes(context));
-        }
-        return exploreLabel;
-    }
-
     @SuppressLint("NewApi") //Already checking with isAtLeastQ
     protected Uri getSettingsSliceUri(android.app.WallpaperInfo info) {
         if (BuildCompat.isAtLeastQ()) {
@@ -325,12 +456,7 @@
 
     @Override
     protected int getLayoutResId() {
-        return R.layout.fragment_live_preview;
-    }
-
-    @Override
-    protected int getBottomSheetResId() {
-        return R.id.bottom_sheet;
+        return R.layout.fragment_live_preview_v2;
     }
 
     @Override
@@ -344,7 +470,7 @@
                 destination, 0, null, new SetWallpaperCallback() {
                     @Override
                     public void onSuccess(com.android.wallpaper.model.WallpaperInfo wallpaperInfo) {
-                        finishActivityWithResultOk();
+                        finishActivity(/* success= */ true);
                     }
 
                     @Override
@@ -354,15 +480,10 @@
                 });
     }
 
-    @Override
-    protected void setBottomSheetContentAlpha(float alpha) {
-        mInfoPageController.setContentAlpha(alpha);
-    }
-
-
     @Nullable
-    protected String getDeleteAction(android.app.WallpaperInfo wallpaperInfo,
-            @Nullable android.app.WallpaperInfo currentInfo) {
+    protected String getDeleteAction(android.app.WallpaperInfo wallpaperInfo) {
+        android.app.WallpaperInfo currentInfo =
+                WallpaperManager.getInstance(requireContext()).getWallpaperInfo();
         ServiceInfo serviceInfo = wallpaperInfo.getServiceInfo();
         if (!isPackagePreInstalled(serviceInfo.applicationInfo)) {
             Log.d(TAG, "This wallpaper is not pre-installed: " + serviceInfo.name);
@@ -383,6 +504,12 @@
     }
 
     @Override
+    public void onStart() {
+        super.onStart();
+        previewLiveWallpaper(mHomePreview);
+    }
+
+    @Override
     public void onResume() {
         super.onResume();
         if (mWallpaperConnection != null) {
@@ -399,31 +526,18 @@
     }
 
     @Override
-    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
-        super.onCreateOptionsMenu(menu, inflater);
-        menu.findItem(R.id.configure).setVisible(mSettingsIntent != null);
-        menu.findItem(R.id.delete_wallpaper).setVisible(mDeleteIntent != null);
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        int id = item.getItemId();
-        if (id == R.id.configure) {
-            if (getActivity() != null) {
-                startActivity(mSettingsIntent);
-                return true;
-            }
-        } else if (id == R.id.delete_wallpaper) {
-            showDeleteConfirmDialog();
-            return true;
+    public void onStop() {
+        super.onStop();
+        if (mWallpaperConnection != null) {
+            mWallpaperConnection.disconnect();
+            mWallpaperConnection = null;
         }
-        return super.onOptionsItemSelected(item);
     }
 
     private void showDeleteConfirmDialog() {
-        final AlertDialog alertDialog = new AlertDialog.Builder(
-                new ContextThemeWrapper(getContext(), getDeviceDefaultTheme()))
+        final AlertDialog alertDialog = new AlertDialog.Builder(getContext())
                 .setMessage(R.string.delete_wallpaper_confirmation)
+                .setOnDismissListener(dialog -> mBottomActionBar.deselectAction(DELETE))
                 .setPositiveButton(R.string.delete_live_wallpaper,
                         (dialog, which) -> deleteLiveWallpaper())
                 .setNegativeButton(android.R.string.cancel, null /* listener */)
@@ -434,14 +548,11 @@
     private void deleteLiveWallpaper() {
         if (mDeleteIntent != null) {
             requireContext().startService(mDeleteIntent);
-            finishActivityWithResultOk();
+            finishActivity(/* success= */ false);
         }
     }
 
     private boolean isPackagePreInstalled(ApplicationInfo info) {
-        if (info != null && (info.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
-            return true;
-        }
-        return false;
+        return info != null && (info.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
     }
 }
diff --git a/src/com/android/wallpaper/picker/PreviewActivity.java b/src/com/android/wallpaper/picker/PreviewActivity.java
index 6785afe..721ed0c 100755
--- a/src/com/android/wallpaper/picker/PreviewActivity.java
+++ b/src/com/android/wallpaper/picker/PreviewActivity.java
@@ -18,7 +18,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
-import android.view.View;
 
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentManager;
@@ -47,10 +46,6 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_preview);
-        getWindow().getDecorView().setSystemUiVisibility(
-                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
-                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
-                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
 
         FragmentManager fm = getSupportFragmentManager();
         Fragment fragment = fm.findFragmentById(R.id.fragment_container);
@@ -58,11 +53,13 @@
         if (fragment == null) {
             Intent intent = getIntent();
             WallpaperInfo wallpaper = intent.getParcelableExtra(EXTRA_WALLPAPER_INFO);
+            boolean viewAsHome = intent.getBooleanExtra(EXTRA_VIEW_AS_HODE, true);
             boolean testingModeEnabled = intent.getBooleanExtra(EXTRA_TESTING_MODE_ENABLED, false);
             fragment = InjectorProvider.getInjector().getPreviewFragment(
                     /* context */ this,
                     wallpaper,
                     PreviewFragment.MODE_CROP_AND_SET_WALLPAPER,
+                    viewAsHome,
                     testingModeEnabled);
             fm.beginTransaction()
                     .add(R.id.fragment_container, fragment)
diff --git a/src/com/android/wallpaper/picker/PreviewFragment.java b/src/com/android/wallpaper/picker/PreviewFragment.java
index 7c29e9d..8963d60 100755
--- a/src/com/android/wallpaper/picker/PreviewFragment.java
+++ b/src/com/android/wallpaper/picker/PreviewFragment.java
@@ -15,8 +15,7 @@
  */
 package com.android.wallpaper.picker;
 
-import static com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_COLLAPSED;
-import static com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDED;
+import static com.android.wallpaper.widget.BottomActionBar.BottomAction.APPLY;
 
 import android.app.Activity;
 import android.content.Context;
@@ -24,23 +23,12 @@
 import android.content.res.ColorStateList;
 import android.content.res.Resources.NotFoundException;
 import android.content.res.TypedArray;
-import android.graphics.Insets;
-import android.graphics.drawable.GradientDrawable;
-import android.net.Uri;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.ContextThemeWrapper;
 import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
 import android.view.View;
-import android.view.View.OnClickListener;
 import android.view.ViewGroup;
-import android.view.WindowInsets;
-import android.widget.Button;
-import android.widget.CheckBox;
-import android.widget.TextView;
 import android.widget.Toast;
 
 import androidx.annotation.CallSuper;
@@ -48,26 +36,19 @@
 import androidx.annotation.IntDef;
 import androidx.annotation.LayoutRes;
 import androidx.annotation.Nullable;
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.Toolbar;
-import androidx.core.view.ViewCompat;
 import androidx.core.widget.ContentLoadingProgressBar;
-import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentActivity;
 
 import com.android.wallpaper.R;
 import com.android.wallpaper.model.LiveWallpaperInfo;
 import com.android.wallpaper.model.WallpaperInfo;
-import com.android.wallpaper.module.ExploreIntentChecker;
 import com.android.wallpaper.module.Injector;
 import com.android.wallpaper.module.InjectorProvider;
 import com.android.wallpaper.module.UserEventLogger;
 import com.android.wallpaper.module.WallpaperPersister.Destination;
 import com.android.wallpaper.module.WallpaperPreferences;
 import com.android.wallpaper.module.WallpaperSetter;
-
-import com.google.android.material.bottomsheet.BottomSheetBehavior;
-import com.google.android.material.bottomsheet.BottomSheetBehavior.State;
+import com.android.wallpaper.widget.BottomActionBar;
 
 import java.util.Date;
 import java.util.List;
@@ -75,7 +56,7 @@
 /**
  * Base Fragment to display the UI for previewing an individual wallpaper
  */
-public abstract class PreviewFragment extends Fragment implements
+public abstract class PreviewFragment extends AppbarFragment implements
         SetWallpaperDialogFragment.Listener, SetWallpaperErrorDialogFragment.Listener,
         LoadWallpaperErrorDialogFragment.Listener {
 
@@ -102,23 +83,23 @@
 
     public static final String ARG_WALLPAPER = "wallpaper";
     public static final String ARG_PREVIEW_MODE = "preview_mode";
+    public static final String ARG_VIEW_AS_HOME = "view_as_home";
     public static final String ARG_TESTING_MODE_ENABLED = "testing_mode_enabled";
 
     /**
      * Creates and returns new instance of {@link ImagePreviewFragment} with the provided wallpaper
      * set as an argument.
      */
-    public static PreviewFragment newInstance(
-            WallpaperInfo wallpaperInfo, @PreviewMode int mode, boolean testingModeEnabled) {
-
-        boolean isLive = wallpaperInfo instanceof LiveWallpaperInfo;
-
+    public static PreviewFragment newInstance(WallpaperInfo wallpaperInfo, @PreviewMode int mode,
+            boolean viewAsHome, boolean testingModeEnabled) {
         Bundle args = new Bundle();
         args.putParcelable(ARG_WALLPAPER, wallpaperInfo);
         args.putInt(ARG_PREVIEW_MODE, mode);
+        args.putBoolean(ARG_VIEW_AS_HOME, viewAsHome);
         args.putBoolean(ARG_TESTING_MODE_ENABLED, testingModeEnabled);
 
-        PreviewFragment fragment = isLive ? new LivePreviewFragment() : new ImagePreviewFragment();
+        PreviewFragment fragment = wallpaperInfo instanceof LiveWallpaperInfo
+                ? new LivePreviewFragment() : new ImagePreviewFragment();
         fragment.setArguments(args);
         return fragment;
     }
@@ -129,11 +110,12 @@
             "set_wallpaper_error_dialog";
     private static final int UNUSED_REQUEST_CODE = 1;
     private static final String TAG = "PreviewFragment";
-    static final String KEY_BOTTOM_SHEET_STATE = "key_bottom_sheet_state";
 
     @PreviewMode
     protected int mPreviewMode;
 
+    protected boolean mViewAsHome;
+
     /**
      * When true, enables a test mode of operation -- in which certain UI features are disabled to
      * allow for UI tests to run correctly. Works around issue in ProgressDialog currently where the
@@ -144,16 +126,11 @@
     protected WallpaperInfo mWallpaper;
     protected WallpaperSetter mWallpaperSetter;
     protected UserEventLogger mUserEventLogger;
-    protected ViewGroup mBottomSheet;
+    protected BottomActionBar mBottomActionBar;
     protected ContentLoadingProgressBar mLoadingProgressBar;
 
-    protected CheckBox mPreview;
-
-    @SuppressWarnings("RestrictTo")
-    @State
-    protected int mBottomSheetInitialState;
-
     protected Intent mExploreIntent;
+    protected CharSequence mActionLabel;
 
     /**
      * Staged error dialog fragments that were unable to be shown when the hosting activity didn't
@@ -172,8 +149,6 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-
-        Activity activity = getActivity();
         Context appContext = getContext().getApplicationContext();
         Injector injector = InjectorProvider.getInjector();
 
@@ -182,12 +157,14 @@
 
         //noinspection ResourceType
         mPreviewMode = getArguments().getInt(ARG_PREVIEW_MODE);
+        mViewAsHome = getArguments().getBoolean(ARG_VIEW_AS_HOME);
         mTestingModeEnabled = getArguments().getBoolean(ARG_TESTING_MODE_ENABLED);
         mWallpaperSetter = new WallpaperSetter(injector.getWallpaperPersister(appContext),
                 injector.getPreferences(appContext), mUserEventLogger, mTestingModeEnabled);
 
         setHasOptionsMenu(true);
 
+        Activity activity = getActivity();
         List<String> attributions = getAttributions(activity);
         if (attributions.size() > 0 && attributions.get(0) != null) {
             activity.setTitle(attributions.get(0));
@@ -199,111 +176,26 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {
         View view = inflater.inflate(getLayoutResId(), container, false);
-
-        // Set toolbar as the action bar.
-        Toolbar toolbar = view.findViewById(R.id.toolbar);
-        AppCompatActivity activity = (AppCompatActivity) requireActivity();
-        activity.setSupportActionBar(toolbar);
-        activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
-        activity.getSupportActionBar().setDisplayShowTitleEnabled(false);
-
-        toolbar.getNavigationIcon().setTint(getAttrColor(activity, android.R.attr.colorPrimary));
-        toolbar.getNavigationIcon().setAutoMirrored(true);
-
-        ViewCompat.setPaddingRelative(toolbar,
-        /* start */ getResources().getDimensionPixelSize(
-                        R.dimen.preview_toolbar_up_button_start_padding),
-        /* top */ 0,
-        /* end */ getResources().getDimensionPixelSize(
-                        R.dimen.preview_toolbar_set_wallpaper_button_end_padding),
-        /* bottom */ 0);
+        setUpToolbar(view);
 
         mLoadingProgressBar = view.findViewById(getLoadingIndicatorResId());
         mLoadingProgressBar.show();
-
-        mBottomSheet = view.findViewById(getBottomSheetResId());
-        setUpBottomSheetView(mBottomSheet);
-
-        // Workaround as we don't have access to bottomDialogCornerRadius, mBottomSheet radii are
-        // set to dialogCornerRadius by default.
-        GradientDrawable bottomSheetBackground = (GradientDrawable) mBottomSheet.getBackground();
-        float[] radii = bottomSheetBackground.getCornerRadii();
-        for (int i = 0; i < radii.length; i++) {
-            radii[i]*=2f;
-        }
-        bottomSheetBackground = ((GradientDrawable)bottomSheetBackground.mutate());
-        bottomSheetBackground.setCornerRadii(radii);
-        mBottomSheet.setBackground(bottomSheetBackground);
-
-        mBottomSheetInitialState = (savedInstanceState == null) ? STATE_EXPANDED
-                : savedInstanceState.getInt(KEY_BOTTOM_SHEET_STATE, STATE_EXPANDED);
-        setUpBottomSheetListeners();
-
-        view.setOnApplyWindowInsetsListener((v, windowInsets) -> {
-            toolbar.setPadding(toolbar.getPaddingLeft(),
-                    toolbar.getPaddingTop() + windowInsets.getSystemWindowInsetTop(),
-                    toolbar.getPaddingRight(), toolbar.getPaddingBottom());
-            mBottomSheet.setPadding(mBottomSheet.getPaddingLeft(),
-                    mBottomSheet.getPaddingTop(), mBottomSheet.getPaddingRight(),
-                    mBottomSheet.getPaddingBottom() + windowInsets.getSystemWindowInsetBottom());
-            WindowInsets.Builder builder = new WindowInsets.Builder(windowInsets);
-            builder.setSystemWindowInsets(Insets.of(windowInsets.getSystemWindowInsetLeft(),
-                    0, windowInsets.getStableInsetRight(), 0));
-            return builder.build();
-        });
-
         return view;
     }
 
-    protected void populateInfoPage(InfoPageController infoPage) {
-        Context context = requireContext();
-
-        BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(mBottomSheet);
-
-        List<String> attributions = getAttributions(context);
-        boolean showMetadata = shouldShowMetadataInPreview();
-        CharSequence exploreLabel = getExploreButtonLabel(context);
-
-        infoPage.populate(attributions, showMetadata, this::onSetWallpaperClicked,
-                exploreLabel,
-                (showMetadata && mExploreIntent != null) ? this::onExploreClicked : null);
-
-        mBottomSheet.setVisibility(View.VISIBLE);
-
-        // Initialize the state of the BottomSheet based on the current state because if the initial
-        // and current state are the same, the state change listener won't fire and set the correct
-        // arrow asset and text alpha.
-        if (mBottomSheetInitialState == STATE_EXPANDED) {
-            setPreviewChecked(false);
-            infoPage.setContentAlpha(1f);
-        } else {
-            setPreviewChecked(true);
-            infoPage.setContentAlpha(0f);
-        }
-
-        bottomSheetBehavior.setState(mBottomSheetInitialState);
+    @Override
+    protected void onBottomActionBarReady(BottomActionBar bottomActionBar) {
+        mBottomActionBar = bottomActionBar;
+        // TODO: Extract the common code here.
     }
 
     protected List<String> getAttributions(Context context) {
         return mWallpaper.getAttributions(context);
     }
 
-    protected boolean shouldShowMetadataInPreview() {
-        android.app.WallpaperInfo wallpaperComponent = mWallpaper.getWallpaperComponent();
-        return wallpaperComponent == null || wallpaperComponent.getShowMetadataInPreview();
-    }
-
-    @Nullable
-    protected abstract CharSequence getExploreButtonLabel(Context context);
-
     @LayoutRes
     protected abstract int getLayoutResId();
 
-    protected abstract void setUpBottomSheetView(ViewGroup bottomSheet);
-
-    @IdRes
-    protected abstract int getBottomSheetResId();
-
     @IdRes
     protected abstract int getLoadingIndicatorResId();
 
@@ -334,85 +226,21 @@
         }
     }
 
-    @Override
-    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
-        super.onCreateOptionsMenu(menu, inflater);
-        inflater.inflate(R.menu.preview_menu, menu);
-    }
-
-    @Override
-    public void onPrepareOptionsMenu(Menu menu) {
-        super.onPrepareOptionsMenu(menu);
-        setupPreviewMenu(menu);
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        int id = item.getItemId();
-        if (id == android.R.id.home) {
-            // The Preview screen has multiple entry points. It could be opened from either
-            // the IndividualPreviewActivity, the "My photos" selection (by way of
-            // TopLevelPickerActivity), or from a system "crop and set wallpaper" intent.
-            // Therefore, handle the Up button as a global Back.
-            requireActivity().onBackPressed();
-            return true;
-        }
-
-        return false;
-    }
-
-    private void setupPreviewMenu(Menu menu) {
-        mPreview = (CheckBox) menu.findItem(R.id.preview).getActionView();
-        mPreview.setChecked(mBottomSheetInitialState == STATE_COLLAPSED);
-        mPreview.setOnClickListener(this::setPreviewBehavior);
-    }
-
-    protected void setPreviewChecked(boolean checked) {
-        if (mPreview != null) {
-            mPreview.setChecked(checked);
-            int resId = checked ? R.string.expand_attribution_panel
-                    : R.string.collapse_attribution_panel;
-            mPreview.setContentDescription(getResources().getString(resId));
-        }
-    }
-
-    private void setPreviewBehavior(View v) {
-        CheckBox checkbox = (CheckBox) v;
-        BottomSheetBehavior<?> behavior = BottomSheetBehavior.from(mBottomSheet);
-
-        if (checkbox.isChecked()) {
-            behavior.setState(STATE_COLLAPSED);
-        } else {
-            behavior.setState(STATE_EXPANDED);
-        }
-    }
-
-    protected void setUpExploreIntent(@Nullable Runnable callback) {
+    protected void setUpExploreIntentAndLabel(@Nullable Runnable callback) {
         Context context = getContext();
         if (context == null) {
             return;
         }
-        String actionUrl = mWallpaper.getActionUrl(context);
-        if (actionUrl != null && !actionUrl.isEmpty()) {
-            Uri exploreUri = Uri.parse(mWallpaper.getActionUrl(context));
-            ExploreIntentChecker intentChecker =
-                    InjectorProvider.getInjector().getExploreIntentChecker(context);
 
-            intentChecker.fetchValidActionViewIntent(exploreUri, exploreIntent -> {
-                if (getActivity() == null) {
-                    return;
+        WallpaperInfoHelper.loadExploreIntent(context, mWallpaper,
+                (actionLabel, exploreIntent) -> {
+                    mActionLabel = actionLabel;
+                    mExploreIntent = exploreIntent;
+                    if (callback != null) {
+                        callback.run();
+                    }
                 }
-
-                mExploreIntent = exploreIntent;
-                if (callback != null) {
-                    callback.run();
-                }
-            });
-        } else {
-            if (callback != null) {
-                callback.run();
-            }
-        }
+        );
     }
 
     /**
@@ -433,6 +261,11 @@
     }
 
     @Override
+    public void onDialogDismissed(boolean withItemSelected) {
+        mBottomActionBar.deselectAction(APPLY);
+    }
+
+    @Override
     public void onClickTryAgain(@Destination int wallpaperDestination) {
         setCurrentWallpaper(wallpaperDestination);
     }
@@ -452,11 +285,8 @@
     }
 
     @Override
-    public void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-
-        final BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(mBottomSheet);
-        outState.putInt(KEY_BOTTOM_SHEET_STATE, bottomSheetBehavior.getState());
+    public CharSequence getDefaultTitle() {
+        return getContext().getString(R.string.preview);
     }
 
     protected void onSetWallpaperClicked(View button) {
@@ -464,7 +294,7 @@
                 mWallpaper instanceof LiveWallpaperInfo);
     }
 
-    private void onExploreClicked(View button) {
+    protected void onExploreClicked(View button) {
         if (getContext() == null) {
             return;
         }
@@ -475,47 +305,6 @@
         startActivity(mExploreIntent);
     }
 
-    private void setUpBottomSheetListeners() {
-        final BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(mBottomSheet);
-
-        bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
-            @Override
-            public void onStateChanged(View bottomSheet, int newState) {
-                // Don't respond to lingering state change events occurring after the fragment has
-                // already been detached from the activity. Else, IllegalStateException may occur
-                // when trying to fetch resources.
-                if (getActivity() == null) {
-                    return;
-                }
-                switch (newState) {
-                    case STATE_COLLAPSED:
-                        setPreviewChecked(true /* checked */);
-                        break;
-                    case STATE_EXPANDED:
-                        setPreviewChecked(false /* checked */);
-                        break;
-                    default:
-                        Log.v(TAG, "Ignoring BottomSheet state: " + newState);
-                }
-            }
-
-            @Override
-            public void onSlide(View bottomSheet, float slideOffset) {
-                float alpha;
-                if (slideOffset >= 0) {
-                    alpha = slideOffset;
-                } else {
-                    alpha = 1f - slideOffset;
-                }
-                setBottomSheetContentAlpha(alpha);
-            }
-        });
-    }
-
-    protected void setBottomSheetContentAlpha(float alpha) {
-
-    }
-
     /**
      * Sets current wallpaper to the device based on current zoom and scroll state.
      *
@@ -523,16 +312,18 @@
      */
     protected abstract void setCurrentWallpaper(@Destination int destination);
 
-    protected void finishActivityWithResultOk() {
+    protected void finishActivity(boolean success) {
         Activity activity = requireActivity();
-        try {
-            Toast.makeText(activity,
-                    R.string.wallpaper_set_successfully_message, Toast.LENGTH_SHORT).show();
-        } catch (NotFoundException e) {
-            Log.e(TAG, "Could not show toast " + e);
+        if (success) {
+            try {
+                Toast.makeText(activity,
+                        R.string.wallpaper_set_successfully_message, Toast.LENGTH_SHORT).show();
+            } catch (NotFoundException e) {
+                Log.e(TAG, "Could not show toast " + e);
+            }
+            activity.setResult(Activity.RESULT_OK);
         }
         activity.overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
-        activity.setResult(Activity.RESULT_OK);
         activity.finish();
     }
 
@@ -579,94 +370,4 @@
         return getResources().getConfiguration().getLayoutDirection()
                     == View.LAYOUT_DIRECTION_RTL;
     }
-
-    protected static class InfoPageController {
-
-        public static View createView(LayoutInflater inflater) {
-            return inflater.inflate(R.layout.preview_page_info, null /* root */);
-        }
-
-        private final int mPreviewMode;
-        private final View mInfoPage;
-        private final TextView mAttributionTitle;
-        private final TextView mAttributionSubtitle1;
-        private final TextView mAttributionSubtitle2;
-        private final Button mExploreButton;
-        private final Button mSetWallpaperButton;
-        private final View mSpacer;
-
-        public InfoPageController(View infoPage, int previewMode) {
-            mInfoPage = infoPage;
-            mPreviewMode = previewMode;
-
-            mAttributionTitle = mInfoPage.findViewById(R.id.preview_attribution_pane_title);
-            mAttributionSubtitle1 = mInfoPage.findViewById(R.id.preview_attribution_pane_subtitle1);
-            mAttributionSubtitle2 = mInfoPage.findViewById(R.id.preview_attribution_pane_subtitle2);
-            mSpacer = mInfoPage.findViewById(R.id.spacer);
-
-            mExploreButton = mInfoPage.findViewById(R.id.preview_attribution_pane_explore_button);
-            mSetWallpaperButton = mInfoPage.findViewById(
-                    R.id.preview_attribution_pane_set_wallpaper_button);
-        }
-
-        public void populate(List<String> attributions, boolean showMetadata,
-                OnClickListener setWallpaperOnClickListener,
-                CharSequence exploreButtonLabel,
-                @Nullable OnClickListener exploreOnClickListener) {
-            if (attributions.size() > 0 && attributions.get(0) != null) {
-                mAttributionTitle.setText(attributions.get(0));
-            }
-
-            if (showMetadata) {
-                if (attributions.size() > 1 && attributions.get(1) != null) {
-                    mAttributionSubtitle1.setVisibility(View.VISIBLE);
-                    mAttributionSubtitle1.setText(attributions.get(1));
-                }
-
-                if (attributions.size() > 2 && attributions.get(2) != null) {
-                    mAttributionSubtitle2.setVisibility(View.VISIBLE);
-                    mAttributionSubtitle2.setText(attributions.get(2));
-                }
-            }
-            setUpSetWallpaperButton(setWallpaperOnClickListener);
-
-            setUpExploreButton(exploreButtonLabel, exploreOnClickListener);
-
-            if (mExploreButton.getVisibility() == View.VISIBLE
-                    && mSetWallpaperButton.getVisibility() == View.VISIBLE) {
-                mSpacer.setVisibility(View.VISIBLE);
-            } else {
-                mSpacer.setVisibility(View.GONE);
-            }
-        }
-
-        public void setContentAlpha(float alpha) {
-            mSetWallpaperButton.setAlpha(alpha);
-            mExploreButton.setAlpha(alpha);
-            mAttributionTitle.setAlpha(alpha);
-            mAttributionSubtitle1.setAlpha(alpha);
-            mAttributionSubtitle2.setAlpha(alpha);
-        }
-
-        private void setUpSetWallpaperButton(OnClickListener setWallpaperOnClickListener) {
-            if (mPreviewMode == MODE_VIEW_ONLY) {
-                mSetWallpaperButton.setVisibility(View.GONE);
-            } else {
-                mSetWallpaperButton.setVisibility(View.VISIBLE);
-                mSetWallpaperButton.setOnClickListener(setWallpaperOnClickListener);
-            }
-        }
-
-        private void setUpExploreButton(CharSequence label,
-                @Nullable OnClickListener exploreOnClickListener) {
-            mExploreButton.setVisibility(View.GONE);
-            if (exploreOnClickListener == null) {
-                return;
-            }
-            mExploreButton.setVisibility(View.VISIBLE);
-            mExploreButton.setText(label);
-
-            mExploreButton.setOnClickListener(exploreOnClickListener);
-        }
-    }
 }
diff --git a/src/com/android/wallpaper/picker/ScaleBehavior.java b/src/com/android/wallpaper/picker/ScaleBehavior.java
deleted file mode 100644
index af0db6a..0000000
--- a/src/com/android/wallpaper/picker/ScaleBehavior.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * 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.content.Context;
-import android.util.AttributeSet;
-import android.util.TypedValue;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-import androidx.coordinatorlayout.widget.CoordinatorLayout;
-
-import com.android.wallpaper.R;
-
-/**
- * A {@link CoordinatorLayout.Behavior<View>} which can resize the child view
- * when the height of the dependency view is changed.
- */
-public class ScaleBehavior extends CoordinatorLayout.Behavior<View> {
-
-    private Context mContext;
-
-    public ScaleBehavior(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        mContext = context;
-    }
-
-    @Override
-    public boolean layoutDependsOn(@NonNull CoordinatorLayout parent,
-                                   @NonNull View child, @NonNull View dependency) {
-        return dependency.getId() == R.id.scalable_content_container;
-    }
-
-    @Override
-    public boolean onDependentViewChanged(@NonNull CoordinatorLayout parent,
-                                          @NonNull View child, @NonNull View dependency) {
-        float expectedChildHeight = dependency.getY() - getToolbarHeight();
-        float originalChildHeight = child.getMeasuredHeight();
-        float scale = expectedChildHeight / originalChildHeight;
-        float heightDiff = expectedChildHeight - originalChildHeight;
-        child.setScaleX(scale);
-        child.setScaleY(scale);
-        child.setTranslationY(heightDiff / 2);
-        return true;
-    }
-
-    @Override
-    public boolean onLayoutChild(@NonNull CoordinatorLayout parent,
-                                 @NonNull View child, int layoutDirection) {
-        int top = getToolbarHeight();
-        child.layout(0, top, child.getMeasuredWidth(), top + child.getMeasuredHeight());
-        return true;
-    }
-
-    @Override
-    public boolean onMeasureChild(@NonNull CoordinatorLayout parent,
-                                  @NonNull View child, int parentWidthMeasureSpec, int widthUsed,
-                                  int parentHeightMeasureSpec, int heightUsed) {
-        int availableWidth = View.MeasureSpec.getSize(parentWidthMeasureSpec);
-        int availableHeight = View.MeasureSpec.getSize(parentHeightMeasureSpec);
-        int contentContainerMinimumHeight = mContext.getResources()
-                .getDimensionPixelOffset(R.dimen.content_container_minimum_height);
-        int childWidth = availableWidth;
-        int childHeight = availableHeight - contentContainerMinimumHeight - getToolbarHeight();
-        int widthMeasureSpec =
-                View.MeasureSpec.makeMeasureSpec(childWidth, View.MeasureSpec.EXACTLY);
-        int heightMeasureSpec =
-                View.MeasureSpec.makeMeasureSpec(childHeight, View.MeasureSpec.EXACTLY);
-
-        child.measure(widthMeasureSpec, heightMeasureSpec);
-
-        return true;
-    }
-
-    private int getToolbarHeight() {
-        TypedValue typedValue = new TypedValue();
-        if (mContext.getTheme().resolveAttribute(android.R.attr.actionBarSize, typedValue, true)) {
-            return TypedValue.complexToDimensionPixelSize(
-                    typedValue.data, mContext.getResources().getDisplayMetrics());
-        }
-        return 0;
-    }
-}
diff --git a/src/com/android/wallpaper/picker/StandalonePreviewActivity.java b/src/com/android/wallpaper/picker/StandalonePreviewActivity.java
index 5d87df8..ee30e66 100755
--- a/src/com/android/wallpaper/picker/StandalonePreviewActivity.java
+++ b/src/com/android/wallpaper/picker/StandalonePreviewActivity.java
@@ -23,16 +23,16 @@
 import android.os.Bundle;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+
 import com.android.wallpaper.R;
 import com.android.wallpaper.model.ImageWallpaperInfo;
 import com.android.wallpaper.model.WallpaperInfo;
 import com.android.wallpaper.module.InjectorProvider;
 import com.android.wallpaper.module.UserEventLogger;
 
-import androidx.annotation.NonNull;
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentManager;
-
 /**
  * Activity that displays a preview of a specific wallpaper and provides the ability to set the
  * wallpaper as the user's current wallpaper. It's "standalone" meaning it doesn't reside in the
@@ -123,6 +123,7 @@
                 /* context */ this,
                 wallpaper,
                 PreviewFragment.MODE_CROP_AND_SET_WALLPAPER,
+                /* viewAsHome= */ true,
                 testingModeEnabled);
         getSupportFragmentManager().beginTransaction()
                 .add(R.id.fragment_container, fragment)
diff --git a/src/com/android/wallpaper/picker/StartRotationDialogFragment.java b/src/com/android/wallpaper/picker/StartRotationDialogFragment.java
index f0e4dcd..cfa19fb 100755
--- a/src/com/android/wallpaper/picker/StartRotationDialogFragment.java
+++ b/src/com/android/wallpaper/picker/StartRotationDialogFragment.java
@@ -20,6 +20,7 @@
 
 import android.app.AlertDialog;
 import android.app.Dialog;
+import android.content.DialogInterface;
 import android.os.Bundle;
 import android.text.Html;
 import android.view.LayoutInflater;
@@ -99,6 +100,12 @@
         outState.putBoolean(KEY_IS_WIFI_ONLY_CHECKED, mIsWifiOnlyChecked);
     }
 
+    @Override
+    public void onDismiss(@NonNull DialogInterface dialog) {
+        super.onDismiss(dialog);
+        ((Listener) getTargetFragment()).onStartRotationDialogDismiss(dialog);
+    }
+
     private int getBodyTextResourceId() {
         return R.string.start_rotation_dialog_body;
     }
@@ -106,4 +113,10 @@
     private int getPositiveButtonTextResourceId() {
         return android.R.string.ok;
     }
+
+    /** An interface for receiving this DialogFragment dismissed event. */
+    public interface Listener {
+        /** Gets called when the DialogFragment is dismissed. */
+        void onStartRotationDialogDismiss(@NonNull DialogInterface dialog);
+    }
 }
diff --git a/src/com/android/wallpaper/picker/ToolbarFragment.java b/src/com/android/wallpaper/picker/ToolbarFragment.java
index 488d49e..81ab239 100644
--- a/src/com/android/wallpaper/picker/ToolbarFragment.java
+++ b/src/com/android/wallpaper/picker/ToolbarFragment.java
@@ -44,10 +44,6 @@
 
     private static final String ARG_TITLE = "ToolbarFragment.title";
 
-    // This is a temporary flag to hide the incomplete scalable feature.
-    // TODO(b/147780560): Remove this flag when the scalable feature is complete.
-    protected static final boolean ADD_SCALABLE_HEADER = false;
-
     /**
      * Returns a newly created {@link Bundle} containing the given title as an argument.
      * If set as a ToolbarFragment's arguments bundle, this will be used to set up the title of
@@ -102,7 +98,7 @@
         return null;
     }
 
-    private void setTitle(CharSequence title) {
+    protected void setTitle(CharSequence title) {
         if (mToolbar == null) {
             return;
         }
@@ -112,6 +108,11 @@
         } else {
             mToolbar.setTitle(title);
         }
+
+        // Set Activity title to make TalkBack announce title after updating toolbar title.
+        if (getActivity() != null) {
+            getActivity().setTitle(title);
+        }
     }
 
     @Override
diff --git a/src/com/android/wallpaper/picker/TopLevelPickerActivity.java b/src/com/android/wallpaper/picker/TopLevelPickerActivity.java
index 1d0d8f0..8fc846a 100755
--- a/src/com/android/wallpaper/picker/TopLevelPickerActivity.java
+++ b/src/com/android/wallpaper/picker/TopLevelPickerActivity.java
@@ -21,7 +21,6 @@
 import android.content.Intent;
 import android.graphics.Color;
 import android.graphics.Insets;
-import android.graphics.Point;
 import android.graphics.PorterDuff.Mode;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
@@ -107,6 +106,7 @@
     private NetworkStatusNotifier mNetworkStatusNotifier;
     private NetworkStatusNotifier.Listener mNetworkStatusListener;
     private WallpaperPersister mWallpaperPersister;
+    private WallpaperPreferences mWallpaperPreferences;
     private boolean mWasCustomPhotoWallpaperSet;
     @WallpaperPosition
     private int mCustomPhotoWallpaperPosition;
@@ -164,6 +164,7 @@
         mUserEventLogger = injector.getUserEventLogger(this);
         mNetworkStatusNotifier = injector.getNetworkStatusNotifier(this);
         mWallpaperPersister = injector.getWallpaperPersister(this);
+        mWallpaperPreferences = injector.getPreferences(this);
         mWasCustomPhotoWallpaperSet = false;
 
         @WallpaperSupportLevel int wallpaperSupportLevel = mDelegate.getWallpaperSupportLevel();
@@ -227,6 +228,12 @@
 
     @Override
     public void onBackPressed() {
+        Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
+        if (fragment instanceof BottomActionBarFragment
+                && ((BottomActionBarFragment) fragment).onBackPressed()) {
+            return;
+        }
+
         CategoryFragment categoryFragment = getCategoryFragment();
         if (categoryFragment != null && categoryFragment.popChildFragment()) {
             return;
@@ -257,8 +264,8 @@
                 getWindow().getDecorView().getSystemUiVisibility()
                         | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                         | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
-        findViewById(R.id.fragment_container)
-                .setOnApplyWindowInsetsListener((view, windowInsets) -> {
+        View fragmentContainer = findViewById(R.id.fragment_container);
+        fragmentContainer.setOnApplyWindowInsetsListener((view, windowInsets) -> {
             view.setPadding(view.getPaddingLeft(), windowInsets.getSystemWindowInsetTop(),
                     view.getPaddingRight(), view.getPaddingBottom());
             // Consume only the top inset (status bar), to let other content in the Activity consume
@@ -287,6 +294,7 @@
         if (fragment == null) {
             // App launch specific logic: log the "app launched" event and set up daily logging.
             mUserEventLogger.logAppLaunched();
+            mWallpaperPreferences.incrementAppLaunched();
             DailyLoggingAlarmScheduler.setAlarm(getApplicationContext());
 
             CategoryFragment newFragment = CategoryFragment.newInstance(
@@ -349,6 +357,7 @@
         if (fragment == null) {
             // App launch specific logic: log the "app launched" event and set up daily logging.
             mUserEventLogger.logAppLaunched();
+            mWallpaperPreferences.incrementAppLaunched();
             DailyLoggingAlarmScheduler.setAlarm(getApplicationContext());
         }
 
@@ -439,12 +448,12 @@
      * Returns the width (in physical px) to use for the "currently set wallpaper" thumbnail.
      */
     private int getSingleWallpaperImageWidthPx() {
-        Point screenSize = ScreenSizeCalculator.getInstance().getScreenSize(
-                getWindowManager().getDefaultDisplay());
+        final float screenAspectRatio =
+                ScreenSizeCalculator.getInstance().getScreenAspectRatio(this);
 
         int height = getResources().getDimensionPixelSize(
                 R.dimen.current_wallpaper_bottom_sheet_thumb_height);
-        return height * screenSize.x / screenSize.y;
+        return (int) (height / screenAspectRatio);
     }
 
     /**
@@ -777,8 +786,18 @@
     /**
      * Shows the view-only preview activity for the given wallpaper.
      */
-    public void showViewOnlyPreview(WallpaperInfo wallpaperInfo) {
-        mDelegate.showViewOnlyPreview(wallpaperInfo);
+    public void showViewOnlyPreview(WallpaperInfo wallpaperInfo, boolean isViewAsHome) {
+        mDelegate.showViewOnlyPreview(wallpaperInfo, isViewAsHome);
+    }
+
+    @Override
+    public void show(String collectionId) {
+        mDelegate.show(collectionId);
+    }
+
+    @Override
+    public boolean isNavigationTabsContained() {
+        return false;
     }
 
     @Override
diff --git a/src/com/android/wallpaper/picker/TouchForwardingLayout.java b/src/com/android/wallpaper/picker/TouchForwardingLayout.java
new file mode 100644
index 0000000..2cb692d
--- /dev/null
+++ b/src/com/android/wallpaper/picker/TouchForwardingLayout.java
@@ -0,0 +1,50 @@
+/*
+ * 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.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.FrameLayout;
+
+/** A frame layout that listens to touch events and routes them to another view. */
+public class TouchForwardingLayout extends FrameLayout {
+
+    private View mView;
+    private boolean mForwardingEnabled;
+
+    public TouchForwardingLayout(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    public boolean dispatchTouchEvent(MotionEvent ev) {
+        if (mView != null && mForwardingEnabled) {
+            mView.dispatchTouchEvent(ev);
+        }
+        return true;
+    }
+
+    /** Set the view that the touch events are routed to */
+    public void setTargetView(View view) {
+        mView = view;
+    }
+
+    public void setForwardingEnabled(boolean forwardingEnabled) {
+        mForwardingEnabled = forwardingEnabled;
+    }
+}
diff --git a/src/com/android/wallpaper/picker/ViewOnlyPreviewActivity.java b/src/com/android/wallpaper/picker/ViewOnlyPreviewActivity.java
index f10cc51..006789e 100755
--- a/src/com/android/wallpaper/picker/ViewOnlyPreviewActivity.java
+++ b/src/com/android/wallpaper/picker/ViewOnlyPreviewActivity.java
@@ -19,14 +19,14 @@
 import android.content.Intent;
 import android.os.Bundle;
 
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+
 import com.android.wallpaper.R;
 import com.android.wallpaper.model.InlinePreviewIntentFactory;
 import com.android.wallpaper.model.WallpaperInfo;
 import com.android.wallpaper.module.InjectorProvider;
 
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentManager;
-
 /**
  * Activity that displays a view-only preview of a specific wallpaper.
  */
@@ -40,6 +40,11 @@
                 .putExtra(EXTRA_WALLPAPER_INFO, wallpaper);
     }
 
+    protected static Intent newIntent(Context context, WallpaperInfo wallpaper,
+            boolean isVewAsHome) {
+        return newIntent(context, wallpaper).putExtra(EXTRA_VIEW_AS_HODE, isVewAsHome);
+    }
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -57,10 +62,12 @@
             Intent intent = getIntent();
             WallpaperInfo wallpaper = intent.getParcelableExtra(EXTRA_WALLPAPER_INFO);
             boolean testingModeEnabled = intent.getBooleanExtra(EXTRA_TESTING_MODE_ENABLED, false);
+            boolean viewAsHome = intent.getBooleanExtra(EXTRA_VIEW_AS_HODE, true);
             fragment = InjectorProvider.getInjector().getPreviewFragment(
                     /* context */ this,
                     wallpaper,
                     PreviewFragment.MODE_VIEW_ONLY,
+                    viewAsHome,
                     testingModeEnabled);
             fm.beginTransaction()
                     .add(R.id.fragment_container, fragment)
@@ -72,9 +79,20 @@
      * Implementation that provides an intent to start a PreviewActivity.
      */
     public static class ViewOnlyPreviewActivityIntentFactory implements InlinePreviewIntentFactory {
+        private boolean mIsHomeAndLockPreviews;
+        private boolean mIsViewAsHome;
+
         @Override
         public Intent newIntent(Context context, WallpaperInfo wallpaper) {
+            if (mIsHomeAndLockPreviews) {
+                return ViewOnlyPreviewActivity.newIntent(context, wallpaper, mIsViewAsHome);
+            }
             return ViewOnlyPreviewActivity.newIntent(context, wallpaper);
         }
+
+        protected void setAsHomePreview(boolean isHomeAndLockPreview, boolean isViewAsHome) {
+            mIsHomeAndLockPreviews = isHomeAndLockPreview;
+            mIsViewAsHome = isViewAsHome;
+        }
     }
 }
diff --git a/src/com/android/wallpaper/picker/WallpaperInfoHelper.java b/src/com/android/wallpaper/picker/WallpaperInfoHelper.java
new file mode 100644
index 0000000..fc70718
--- /dev/null
+++ b/src/com/android/wallpaper/picker/WallpaperInfoHelper.java
@@ -0,0 +1,70 @@
+/*
+ * 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.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.text.TextUtils;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.android.wallpaper.model.LiveWallpaperInfo;
+import com.android.wallpaper.model.WallpaperInfo;
+import com.android.wallpaper.module.ExploreIntentChecker;
+import com.android.wallpaper.module.InjectorProvider;
+
+/** A helper class for wallpaper info. */
+public class WallpaperInfoHelper {
+
+    /** A callback for receiving explore Intent. */
+    public interface ExploreIntentReceiver {
+        /** Gets called when received explore Intent. */
+        void onReceiveExploreIntent(CharSequence actionLabel, @Nullable Intent exploreIntent);
+    }
+
+    /** Loads the explore Intent from the specific wallpaper. */
+    public static void loadExploreIntent(
+            Context context,
+            @NonNull WallpaperInfo wallpaperInfo,
+            @NonNull ExploreIntentReceiver callback) {
+        String actionUrl = wallpaperInfo.getActionUrl(context);
+        CharSequence actionLabel = getActionLabel(context, wallpaperInfo);
+        if (actionUrl != null && !actionUrl.isEmpty()) {
+            Uri exploreUri = Uri.parse(wallpaperInfo.getActionUrl(context));
+            ExploreIntentChecker intentChecker =
+                    InjectorProvider.getInjector().getExploreIntentChecker(context);
+            intentChecker.fetchValidActionViewIntent(exploreUri,
+                    intent -> callback.onReceiveExploreIntent(actionLabel, intent));
+        } else {
+            callback.onReceiveExploreIntent(actionLabel, null);
+        }
+    }
+
+    private static CharSequence getActionLabel(Context context, WallpaperInfo wallpaperInfo) {
+        CharSequence exploreLabel = null;
+        if (wallpaperInfo instanceof LiveWallpaperInfo) {
+            exploreLabel = ((LiveWallpaperInfo) wallpaperInfo).getActionDescription(context);
+        }
+        if (TextUtils.isEmpty(exploreLabel)) {
+            exploreLabel = context.getString(wallpaperInfo.getActionLabelRes(context));
+        }
+        return exploreLabel;
+    }
+
+    private WallpaperInfoHelper() {}
+}
diff --git a/src/com/android/wallpaper/picker/WallpaperPickerDelegate.java b/src/com/android/wallpaper/picker/WallpaperPickerDelegate.java
index 5f8436d..bcc5ef8 100644
--- a/src/com/android/wallpaper/picker/WallpaperPickerDelegate.java
+++ b/src/com/android/wallpaper/picker/WallpaperPickerDelegate.java
@@ -314,7 +314,9 @@
     /**
      * Shows the view-only preview activity for the given wallpaper.
      */
-    public void showViewOnlyPreview(WallpaperInfo wallpaperInfo) {
+    public void showViewOnlyPreview(WallpaperInfo wallpaperInfo, boolean isViewAsHome) {
+        ((ViewOnlyPreviewActivityIntentFactory) mViewOnlyPreviewIntentFactory).setAsHomePreview(
+                /* isHomeAndLockPreviews= */ true, isViewAsHome);
         wallpaperInfo.showPreview(
                 mActivity, mViewOnlyPreviewIntentFactory,
                 VIEW_ONLY_PREVIEW_WALLPAPER_REQUEST_CODE);
@@ -452,7 +454,10 @@
                 imageWallpaper.showPreview(mActivity, getPreviewIntentFactory(),
                         PREVIEW_WALLPAPER_REQUEST_CODE);
                 return false;
+            case VIEW_ONLY_PREVIEW_WALLPAPER_REQUEST_CODE:
+                // Fall through.
             case PREVIEW_WALLPAPER_REQUEST_CODE:
+                // Fall through.
             case PREVIEW_LIVE_WALLPAPER_REQUEST_CODE:
                 // User previewed and selected a wallpaper, so finish this activity.
                 mWallpaperPersister.onLiveWallpaperSet();
diff --git a/src/com/android/wallpaper/picker/WorkspaceSurfaceHolderCallback.java b/src/com/android/wallpaper/picker/WorkspaceSurfaceHolderCallback.java
new file mode 100644
index 0000000..91aae6a
--- /dev/null
+++ b/src/com/android/wallpaper/picker/WorkspaceSurfaceHolderCallback.java
@@ -0,0 +1,92 @@
+/*
+ * 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.content.Context;
+import android.os.Bundle;
+import android.os.Message;
+import android.os.RemoteException;
+import android.view.Surface;
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
+
+import com.android.wallpaper.R;
+import com.android.wallpaper.util.PreviewUtils;
+import com.android.wallpaper.util.SurfaceViewUtils;
+
+/** A surface holder callback that renders user's workspace on the passed in surface view. */
+public class WorkspaceSurfaceHolderCallback implements SurfaceHolder.Callback {
+
+    private final SurfaceView mWorkspaceSurface;
+    private final PreviewUtils mPreviewUtils;
+
+    private Surface mLastSurface;
+    private Message mCallback;
+
+    private boolean mNeedsToCleanUp;
+
+    public WorkspaceSurfaceHolderCallback(SurfaceView workspaceSurface, Context context) {
+        mWorkspaceSurface = workspaceSurface;
+        mPreviewUtils = new PreviewUtils(context,
+                context.getString(R.string.grid_control_metadata_name));
+    }
+
+    @Override
+    public void surfaceCreated(SurfaceHolder holder) {
+        if (mPreviewUtils.supportsPreview() && mLastSurface != holder.getSurface()) {
+            mLastSurface = holder.getSurface();
+            Bundle result = renderPreview(mWorkspaceSurface);
+            if (result != null) {
+                mWorkspaceSurface.setChildSurfacePackage(
+                        SurfaceViewUtils.getSurfacePackage(result));
+                mCallback = SurfaceViewUtils.getCallback(result);
+
+                if (mNeedsToCleanUp) {
+                    cleanUp();
+                }
+            }
+        }
+    }
+
+    @Override
+    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { }
+
+    @Override
+    public void surfaceDestroyed(SurfaceHolder holder) { }
+
+    public void cleanUp() {
+        if (mCallback != null) {
+            try {
+                mCallback.replyTo.send(mCallback);
+            } catch (RemoteException e) {
+                e.printStackTrace();
+            } finally {
+                mCallback = null;
+            }
+        } else {
+            mNeedsToCleanUp = true;
+        }
+    }
+
+    public void resetLastSurface() {
+        mLastSurface = null;
+    }
+
+    protected Bundle renderPreview(SurfaceView workspaceSurface) {
+        return mPreviewUtils.renderPreview(
+                SurfaceViewUtils.createSurfaceViewRequest(workspaceSurface));
+    }
+}
diff --git a/src/com/android/wallpaper/picker/individual/CheckmarkSelectionAnimator.java b/src/com/android/wallpaper/picker/individual/CheckmarkSelectionAnimator.java
index 0f44587..db33857 100755
--- a/src/com/android/wallpaper/picker/individual/CheckmarkSelectionAnimator.java
+++ b/src/com/android/wallpaper/picker/individual/CheckmarkSelectionAnimator.java
@@ -149,7 +149,8 @@
         int insetPx = mAppContext.getResources().getDimensionPixelSize(
                 R.dimen.grid_item_individual_wallpaper_selected_inset);
         mTile.setPadding(insetPx, insetPx, insetPx, insetPx);
-        mCheckCircle.setImageDrawable(mAppContext.getDrawable(R.drawable.check_circle_blue));
+        mCheckCircle.setImageDrawable(
+                mAppContext.getDrawable(R.drawable.check_circle_accent_24dp));
         mCheckCircle.setVisibility(View.VISIBLE);
         mCheckCircle.setAlpha(1f);
         mLoadingIndicatorContainer.setVisibility(View.GONE);
@@ -182,7 +183,8 @@
         ObjectAnimator paddingAnimator = ObjectAnimator.ofMultiInt(mTile, "padding", values);
         ObjectAnimator checkCircleAlphaAnimator = ObjectAnimator.ofFloat(mCheckCircle, "alpha", 0f, 1f);
 
-        mCheckCircle.setImageDrawable(mAppContext.getDrawable(R.drawable.check_circle_blue));
+        mCheckCircle.setImageDrawable(
+                mAppContext.getDrawable(R.drawable.check_circle_accent_24dp));
 
         AnimatorSet animatorSet = new AnimatorSet();
         animatorSet.playTogether(paddingAnimator, checkCircleAlphaAnimator);
diff --git a/src/com/android/wallpaper/picker/individual/IndividualHolder.java b/src/com/android/wallpaper/picker/individual/IndividualHolder.java
index 5ef61c3..294efa8 100755
--- a/src/com/android/wallpaper/picker/individual/IndividualHolder.java
+++ b/src/com/android/wallpaper/picker/individual/IndividualHolder.java
@@ -19,22 +19,22 @@
 import android.graphics.drawable.Drawable;
 import android.view.View;
 import android.widget.ImageView;
-import android.widget.RelativeLayout;
 import android.widget.TextView;
 
+import androidx.recyclerview.widget.RecyclerView.ViewHolder;
+
 import com.android.wallpaper.R;
 import com.android.wallpaper.model.WallpaperInfo;
 
 import java.util.List;
 
-import androidx.recyclerview.widget.RecyclerView.ViewHolder;
-
 /**
  * Base class for ViewHolders for individual wallpaper tiles.
  */
 abstract class IndividualHolder extends ViewHolder {
     protected Activity mActivity;
-    protected RelativeLayout mTileLayout;
+    protected View mTileLayout;
+    protected View mWallpaperContainer;
     protected ImageView mThumbnailView;
     protected ImageView mOverlayIconView;
     protected TextView mTitleView;
@@ -44,13 +44,13 @@
         super(itemView);
 
         mActivity = hostActivity;
-        mTileLayout = (RelativeLayout) itemView.findViewById(R.id.tile);
+        mTileLayout = itemView.findViewById(R.id.tile);
         mThumbnailView = (ImageView) itemView.findViewById(R.id.thumbnail);
         mOverlayIconView = (ImageView) itemView.findViewById(R.id.overlay_icon);
         mTitleView = (TextView) itemView.findViewById(R.id.title);
+        mWallpaperContainer = itemView.findViewById(R.id.wallpaper_container);
 
-        mTileLayout.getLayoutParams().height = tileHeightPx;
-        itemView.getLayoutParams().height = tileHeightPx;
+        mWallpaperContainer.getLayoutParams().height = tileHeightPx;
     }
 
     /**
diff --git a/src/com/android/wallpaper/picker/individual/IndividualPickerActivity.java b/src/com/android/wallpaper/picker/individual/IndividualPickerActivity.java
index beb8a75..c629f7f 100755
--- a/src/com/android/wallpaper/picker/individual/IndividualPickerActivity.java
+++ b/src/com/android/wallpaper/picker/individual/IndividualPickerActivity.java
@@ -22,12 +22,9 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources.NotFoundException;
-import android.graphics.Insets;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.MenuItem;
-import android.view.View;
-import android.view.WindowInsets;
 import android.widget.Toast;
 
 import androidx.appcompat.widget.Toolbar;
@@ -35,7 +32,6 @@
 import androidx.fragment.app.FragmentManager;
 
 import com.android.wallpaper.R;
-import com.android.wallpaper.compat.BuildCompat;
 import com.android.wallpaper.model.Category;
 import com.android.wallpaper.model.CategoryProvider;
 import com.android.wallpaper.model.CategoryReceiver;
@@ -147,38 +143,6 @@
         toolbar.getNavigationIcon().setTint(getColor(R.color.toolbar_icon_color));
         toolbar.getNavigationIcon().setAutoMirrored(true);
 
-        getWindow().getDecorView().setSystemUiVisibility(
-                getWindow().getDecorView().getSystemUiVisibility()
-                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
-                        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
-        ((View) findViewById(R.id.fragment_container).getParent())
-                .setOnApplyWindowInsetsListener((view, windowInsets) -> {
-                    view.setPadding(
-                            view.getPaddingLeft(),
-                            windowInsets.getSystemWindowInsetTop(),
-                            view.getPaddingRight(),
-                            view.getPaddingBottom());
-                    // Consume only the top inset (status bar),
-                    // to let other content in the Activity consume the nav bar
-                    // (ie, by using "fitSystemWindows")
-                    if (BuildCompat.isAtLeastQ()) {
-                        WindowInsets.Builder builder = new WindowInsets.Builder(windowInsets);
-                        builder.setSystemWindowInsets(
-                                Insets.of(
-                                        windowInsets.getSystemWindowInsetLeft(),
-                                        /* top= */ 0,
-                                        windowInsets.getStableInsetRight(),
-                                        windowInsets.getSystemWindowInsetBottom()));
-                        return builder.build();
-                    } else {
-                        return windowInsets.replaceSystemWindowInsets(
-                                windowInsets.getSystemWindowInsetLeft(),
-                                /* top= */ 0,
-                                windowInsets.getStableInsetRight(),
-                                windowInsets.getSystemWindowInsetBottom());
-                    }
-                });
-
         if (fragment == null) {
             fragment = InjectorProvider.getInjector()
                     .getIndividualPickerFragment(mCategoryCollectionId);
diff --git a/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java b/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java
index 4392ca8..7d4b107 100755
--- a/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java
+++ b/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java
@@ -15,18 +15,21 @@
  */
 package com.android.wallpaper.picker.individual;
 
+import static com.android.wallpaper.picker.WallpaperPickerDelegate.PREVIEW_WALLPAPER_REQUEST_CODE;
 import static com.android.wallpaper.widget.BottomActionBar.BottomAction.APPLY;
-import static com.android.wallpaper.widget.BottomActionBar.BottomAction.CANCEL;
+import static com.android.wallpaper.widget.BottomActionBar.BottomAction.EDIT;
 import static com.android.wallpaper.widget.BottomActionBar.BottomAction.INFORMATION;
 import static com.android.wallpaper.widget.BottomActionBar.BottomAction.ROTATION;
 
 import android.app.Activity;
 import android.app.ProgressDialog;
+import android.app.WallpaperManager;
 import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
 import android.content.res.Configuration;
 import android.content.res.Resources.NotFoundException;
 import android.graphics.Point;
-import android.graphics.PorterDuff.Mode;
 import android.graphics.Rect;
 import android.os.Build.VERSION;
 import android.os.Build.VERSION_CODES;
@@ -37,13 +40,10 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
 import android.widget.Toast;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.cardview.widget.CardView;
 import androidx.fragment.app.DialogFragment;
 import androidx.fragment.app.Fragment;
 import androidx.recyclerview.widget.GridLayoutManager;
@@ -54,7 +54,6 @@
 import com.android.wallpaper.R;
 import com.android.wallpaper.asset.Asset;
 import com.android.wallpaper.asset.Asset.DrawableLoadedListener;
-import com.android.wallpaper.config.Flags;
 import com.android.wallpaper.model.Category;
 import com.android.wallpaper.model.CategoryProvider;
 import com.android.wallpaper.model.CategoryReceiver;
@@ -65,12 +64,12 @@
 import com.android.wallpaper.model.WallpaperRotationInitializer;
 import com.android.wallpaper.model.WallpaperRotationInitializer.Listener;
 import com.android.wallpaper.model.WallpaperRotationInitializer.NetworkPreference;
-import com.android.wallpaper.model.WallpaperRotationInitializer.RotationInitializationState;
 import com.android.wallpaper.module.FormFactorChecker;
 import com.android.wallpaper.module.FormFactorChecker.FormFactor;
 import com.android.wallpaper.module.Injector;
 import com.android.wallpaper.module.InjectorProvider;
 import com.android.wallpaper.module.PackageStatusNotifier;
+import com.android.wallpaper.module.UserEventLogger;
 import com.android.wallpaper.module.WallpaperChangedNotifier;
 import com.android.wallpaper.module.WallpaperPersister;
 import com.android.wallpaper.module.WallpaperPersister.Destination;
@@ -79,16 +78,21 @@
 import com.android.wallpaper.picker.BaseActivity;
 import com.android.wallpaper.picker.CurrentWallpaperBottomSheetPresenter;
 import com.android.wallpaper.picker.MyPhotosStarter.MyPhotosStarterProvider;
+import com.android.wallpaper.picker.PreviewActivity;
 import com.android.wallpaper.picker.RotationStarter;
 import com.android.wallpaper.picker.SetWallpaperDialogFragment;
 import com.android.wallpaper.picker.SetWallpaperErrorDialogFragment;
 import com.android.wallpaper.picker.StartRotationDialogFragment;
 import com.android.wallpaper.picker.StartRotationErrorDialogFragment;
+import com.android.wallpaper.picker.WallpaperInfoHelper;
 import com.android.wallpaper.picker.WallpapersUiContainer;
 import com.android.wallpaper.picker.individual.SetIndividualHolder.OnSetListener;
 import com.android.wallpaper.util.DiskBasedLogger;
-import com.android.wallpaper.util.TileSizeCalculator;
+import com.android.wallpaper.util.SizeCalculator;
 import com.android.wallpaper.widget.BottomActionBar;
+import com.android.wallpaper.widget.WallpaperInfoView;
+import com.android.wallpaper.widget.WallpaperPickerRecyclerViewAccessibilityDelegate;
+import com.android.wallpaper.widget.WallpaperPickerRecyclerViewAccessibilityDelegate.BottomSheetHost;
 
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.MemoryCategory;
@@ -105,7 +109,9 @@
 public class IndividualPickerFragment extends Fragment
         implements RotationStarter, StartRotationErrorDialogFragment.Listener,
         CurrentWallpaperBottomSheetPresenter.RefreshListener,
-        SetWallpaperErrorDialogFragment.Listener, SetWallpaperDialogFragment.Listener {
+        SetWallpaperErrorDialogFragment.Listener, SetWallpaperDialogFragment.Listener,
+        StartRotationDialogFragment.Listener {
+
     /**
      * Position of a special tile that doesn't belong to an individual wallpaper of the category,
      * such as "my photos" or "daily rotation".
@@ -143,6 +149,32 @@
         void restoreThumbnails();
     }
 
+    /**
+     * An interface for receiving the destination of the new applied wallpaper.
+     */
+    public interface WallpaperDestinationCallback {
+        /**
+         * Called when the destination of the wallpaper is set.
+         *
+         * @param destination the destination which a wallpaper may be set.
+         *                    See {@link Destination} for more details.
+         */
+        void onDestinationSet(@Destination int destination);
+    }
+
+    /**
+     * The listener which will be notified when the wallpaper is selected.
+     */
+    public interface WallpaperSelectedListener {
+        /**
+         * Called when the wallpaper is selected.
+         *
+         * @param position the position of the selected wallpaper
+         */
+        void onWallpaperSelected(int position);
+    }
+
+    WallpaperPersister mWallpaperPersister;
     WallpaperPreferences mWallpaperPreferences;
     WallpaperChangedNotifier mWallpaperChangedNotifier;
     RecyclerView mImageGrid;
@@ -182,7 +214,11 @@
         }
     };
     PackageStatusNotifier.Listener mAppStatusListener;
+    BottomActionBar mBottomActionBar;
+    WallpaperInfoView mWallpaperInfoView;
+    @Nullable WallpaperInfo mSelectedWallpaperInfo;
 
+    private UserEventLogger mUserEventLogger;
     private ProgressDialog mProgressDialog;
     private boolean mTestingMode;
     private CurrentWallpaperBottomSheetPresenter mCurrentWallpaperBottomSheetPresenter;
@@ -227,9 +263,10 @@
 
     private BottomActionBar mBottomActionBar;
     private WallpaperSetter mWallpaperSetter;
-    private WallpaperPersister mWallpaperPersister;
-    @Nullable private WallpaperInfo mSelectedWallpaperInfo;
     private WallpaperInfo mAppliedWallpaperInfo;
+    private WallpaperManager mWallpaperManager;
+    private int mWallpaperDestination;
+    private WallpaperSelectedListener mWallpaperSelectedListener;
 
     public static IndividualPickerFragment newInstance(String collectionId) {
         Bundle args = new Bundle();
@@ -240,17 +277,18 @@
         return fragment;
     }
 
-    private static int getResIdForRotationState(@RotationInitializationState int rotationState) {
-        switch (rotationState) {
-            case WallpaperRotationInitializer.ROTATION_NOT_INITIALIZED:
-                return R.string.daily_refresh_tile_subtitle;
-            case WallpaperRotationInitializer.ROTATION_HOME_ONLY:
-                return R.string.home_screen_message;
-            case WallpaperRotationInitializer.ROTATION_HOME_AND_LOCK:
-                return R.string.home_and_lock_short_label;
-            default:
-                Log.e(TAG, "Unknown rotation intialization state: " + rotationState);
-                return R.string.home_screen_message;
+    /**
+     * Highlights the applied wallpaper (if it exists) according to the destination a wallpaper
+     * would be set.
+     *
+     * @param wallpaperDestination the destination a wallpaper would be set.
+     *                             It will be either {@link Destination#DEST_HOME_SCREEN}
+     *                             or {@link Destination#DEST_LOCK_SCREEN}.
+     */
+    public void highlightAppliedWallpaper(@Destination int wallpaperDestination) {
+        mWallpaperDestination = wallpaperDestination;
+        if (mWallpapers != null) {
+            refreshAppliedWallpaper();
         }
     }
 
@@ -284,10 +322,14 @@
         mWallpaperChangedNotifier = WallpaperChangedNotifier.getInstance();
         mWallpaperChangedNotifier.registerListener(mWallpaperChangedListener);
 
+        mWallpaperManager = WallpaperManager.getInstance(appContext);
+
         mFormFactor = injector.getFormFactorChecker(appContext).getFormFactor();
 
         mPackageStatusNotifier = injector.getPackageStatusNotifier(appContext);
 
+        mUserEventLogger = injector.getUserEventLogger(appContext);
+
         mWallpaperPersister = injector.getWallpaperPersister(appContext);
         mWallpaperSetter = new WallpaperSetter(
                 mWallpaperPersister,
@@ -331,6 +373,12 @@
 
     protected void onCategoryLoaded() {
         mWallpaperRotationInitializer = mCategory.getWallpaperRotationInitializer();
+        // Avoids the "rotation" action is not shown correctly
+        // in a rare case : onCategoryLoaded() is called after onBottomActionBarReady().
+        if (isRotationEnabled() && mBottomActionBar != null
+                && !mBottomActionBar.areActionsShown(ROTATION)) {
+            mBottomActionBar.showActions(ROTATION);
+        }
         fetchWallpapers(false);
 
         if (mCategory.supportsThirdParty()) {
@@ -391,7 +439,7 @@
                              Bundle savedInstanceState) {
         View view = inflater.inflate(R.layout.fragment_individual_picker, container, false);
 
-        mTileSizePx = TileSizeCalculator.getIndividualTileSize(getActivity());
+        mTileSizePx = SizeCalculator.getIndividualTileSize(getActivity());
 
         mImageGrid = (RecyclerView) view.findViewById(R.id.wallpaper_grid);
         if (mFormFactor == FormFactorChecker.FORM_FACTOR_DESKTOP) {
@@ -401,52 +449,15 @@
         }
         mImageGrid.addItemDecoration(new GridPaddingDecoration(
                 getResources().getDimensionPixelSize(R.dimen.grid_padding)));
-
+        mImageGrid.setAccessibilityDelegateCompat(
+                new WallpaperPickerRecyclerViewAccessibilityDelegate(
+                        mImageGrid, (BottomSheetHost) getParentFragment(), getNumColumns()));
         maybeSetUpImageGrid();
-
         setUpBottomSheet();
-
-        if (TEMP_BOTTOM_ACTION_BAR_FEATURE) {
-            mBottomActionBar = getActivity().findViewById(R.id.bottom_actionbar);
-
-            mBottomActionBar.setActionClickListener(CANCEL, unused -> {
-                if (mSelectedWallpaperInfo != null) {
-                    onWallpaperSelected(null);
-                    return;
-                }
-                getActivity().onBackPressed();
-            });
-            mBottomActionBar.setActionClickListener(ROTATION, unused -> {
-                DialogFragment startRotationDialogFragment = new StartRotationDialogFragment();
-                startRotationDialogFragment.setTargetFragment(
-                        IndividualPickerFragment.this, UNUSED_REQUEST_CODE);
-                startRotationDialogFragment.show(getFragmentManager(), TAG_START_ROTATION_DIALOG);
-            });
-            mBottomActionBar.setActionClickListener(APPLY, unused -> {
-                mBottomActionBar.disableActions();
-                mWallpaperSetter.requestDestination(getActivity(), getFragmentManager(), this,
-                        mSelectedWallpaperInfo instanceof LiveWallpaperInfo);
-            });
-
-            mBottomActionBar.show();
-            mBottomActionBar.showActionsOnly(
-                    isRotationEnabled() ? EnumSet.of(CANCEL, ROTATION) : EnumSet.of(CANCEL));
-        }
-
         return view;
     }
 
     @Override
-    public void onDestroyView() {
-        if (TEMP_BOTTOM_ACTION_BAR_FEATURE) {
-            mBottomActionBar.hide();
-            mBottomActionBar.clearActionClickListeners();
-            updateThumbnail(null);
-        }
-        super.onDestroyView();
-    }
-
-    @Override
     public void onClickTryAgain(@Destination int unused) {
         if (mPendingSetIndividualHolder != null) {
             mPendingSetIndividualHolder.setWallpaper();
@@ -519,6 +530,36 @@
     }
 
     @Override
+    protected void onBottomActionBarReady(BottomActionBar bottomActionBar) {
+        mBottomActionBar = bottomActionBar;
+        if (isRotationEnabled()) {
+            mBottomActionBar.showActionsOnly(ROTATION);
+        }
+        mBottomActionBar.setActionClickListener(ROTATION, unused -> {
+            DialogFragment startRotationDialogFragment = new StartRotationDialogFragment();
+            startRotationDialogFragment.setTargetFragment(
+                    IndividualPickerFragment.this, UNUSED_REQUEST_CODE);
+            startRotationDialogFragment.show(getFragmentManager(), TAG_START_ROTATION_DIALOG);
+        });
+        mBottomActionBar.setActionClickListener(APPLY, unused -> {
+            mBottomActionBar.disableActions();
+            mWallpaperSetter.requestDestination(getActivity(), getFragmentManager(), this,
+                    mSelectedWallpaperInfo instanceof LiveWallpaperInfo);
+        });
+
+        mWallpaperInfoView = (WallpaperInfoView) LayoutInflater.from(getContext())
+                .inflate(R.layout.wallpaper_info_view, /* root= */ null);
+        mBottomActionBar.attachViewToBottomSheetAndBindAction(mWallpaperInfoView, INFORMATION);
+        mBottomActionBar.setActionClickListener(EDIT, unused -> {
+            mWallpaperPersister.setWallpaperInfoInPreview(mSelectedWallpaperInfo);
+            mSelectedWallpaperInfo.showPreview(getActivity(),
+                    new PreviewActivity.PreviewActivityIntentFactory(),
+                    PREVIEW_WALLPAPER_REQUEST_CODE);
+        });
+        mBottomActionBar.show();
+    }
+
+    @Override
     public void onResume() {
         super.onResume();
 
@@ -548,27 +589,11 @@
             mStagedSetWallpaperErrorDialogFragment = null;
         }
 
-        if (isRotationEnabled()) {
-            if (mFormFactor == FormFactorChecker.FORM_FACTOR_MOBILE) {
-                // Refresh the state of the "start rotation" in case something changed the current daily
-                // rotation while this fragment was paused.
-                RotationHolder rotationHolder = (RotationHolder) mImageGrid
-                        .findViewHolderForAdapterPosition(
-                                SPECIAL_FIXED_TILE_ADAPTER_POSITION);
-                // The RotationHolder may be null if the RecyclerView has not created the view
-                // holder yet.
-                if (rotationHolder != null && Flags.dynamicStartRotationTileEnabled) {
-                    refreshRotationHolder(rotationHolder);
-                }
-            } else if (mFormFactor == FormFactorChecker.FORM_FACTOR_DESKTOP) {
-                if (mWasUpdateRunnableRun && !mWallpapers.isEmpty()) {
-                    // Must be resuming from a previously stopped state, so re-schedule the update of the
-                    // daily wallpapers tile thumbnail.
-                    mUpdateDailyWallpaperThumbRunnable.run();
-                }
-            }
+        if (shouldShowRotationTile() && mWasUpdateRunnableRun && !mWallpapers.isEmpty()) {
+            // Must be resuming from a previously stopped state, so re-schedule the update of the
+            // daily wallpapers tile thumbnail.
+            mUpdateDailyWallpaperThumbRunnable.run();
         }
-
     }
 
     @Override
@@ -591,6 +616,17 @@
     }
 
     @Override
+    public void onStartRotationDialogDismiss(@NonNull DialogInterface dialog) {
+        // TODO(b/159310028): Refactor fragment layer to make it able to restore from config change.
+        // This is to handle config change with StartRotationDialog popup,  the StartRotationDialog
+        // still holds a reference to the destroyed Fragment and is calling
+        // onStartRotationDialogDismissed on that destroyed Fragment.
+        if (mBottomActionBar != null) {
+            mBottomActionBar.deselectAction(ROTATION);
+        }
+    }
+
+    @Override
     public void retryStartRotation(@NetworkPreference int networkPreference) {
         startRotation(networkPreference);
     }
@@ -615,31 +651,6 @@
         mTestingMode = testingMode;
     }
 
-    /**
-     * Asynchronously fetches the refreshed rotation initialization state that is up to date with the
-     * state of the user's device and binds the state of the current category's rotation to the "start
-     * rotation" tile.
-     */
-    private void refreshRotationHolder(RotationHolder rotationHolder) {
-        mWallpaperRotationInitializer.fetchRotationInitializationState(getContext(),
-                rotationState -> {
-                    // Update the UI state of the "start rotation" tile displayed on screen.
-                    // Do this in a Handler so it is scheduled at the end of the message queue.
-                    // This is necessary to ensure we do not remove or add data from the adapter
-                    // while the layout is still being computed. RecyclerView documentation
-                    // therefore recommends performing such changes in a Handler.
-                    new Handler().post(() -> {
-                        // A config change may have destroyed the activity since the refresh
-                        // started, so check for that to avoid an NPE.
-                        if (getActivity() == null) {
-                            return;
-                        }
-
-                        rotationHolder.bindRotationInitializationState(rotationState);
-                    });
-                });
-    }
-
     @Override
     public void startRotation(@NetworkPreference final int networkPreference) {
         if (!isRotationEnabled()) {
@@ -753,7 +764,7 @@
 
     int getNumColumns() {
         Activity activity = getActivity();
-        return activity == null ? 0 : TileSizeCalculator.getNumIndividualColumns(activity);
+        return activity == null ? 1 : SizeCalculator.getNumIndividualColumns(activity);
     }
 
     /**
@@ -768,7 +779,6 @@
         mCurrentWallpaperBottomSheetPresenter.setCurrentWallpapersExpanded(true);
     }
 
-
     @Override
     public void onSet(int destination) {
         if (mSelectedWallpaperInfo == null) {
@@ -790,13 +800,11 @@
             new WallpaperPersister.SetWallpaperCallback() {
                 @Override
                 public void onSuccess(WallpaperInfo wallpaperInfo) {
-                    // TODO(b/150913705): Show the snack bar.
-                    mBottomActionBar.enableActions();
-                    updateAppliedStatus(mAppliedWallpaperInfo, false);
-                    updateAppliedStatus(wallpaperInfo, true);
-                    mAppliedWallpaperInfo = wallpaperInfo;
-
                     mWallpaperPersister.onLiveWallpaperSet();
+                    Toast.makeText(getActivity(), R.string.wallpaper_set_successfully_message,
+                            Toast.LENGTH_SHORT).show();
+                    getActivity().overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
+                    getActivity().finish();
                 }
 
                 @Override
@@ -828,11 +836,12 @@
         }
     }
 
-    private void updateBottomActions(boolean hasWallpaperSelected) {
-        mBottomActionBar.showActions(
-                hasWallpaperSelected ? EnumSet.of(APPLY, INFORMATION) : EnumSet.of(ROTATION));
-        mBottomActionBar.hideActions(
-                hasWallpaperSelected ? EnumSet.of(ROTATION) : EnumSet.of(APPLY, INFORMATION));
+    void updateBottomActions(boolean hasWallpaperSelected) {
+        if (hasWallpaperSelected) {
+            mBottomActionBar.showActionsOnly(INFORMATION, EDIT, APPLY);
+        } else {
+            mBottomActionBar.showActionsOnly(ROTATION);
+        }
     }
 
     private void updateThumbnail(WallpaperInfo selectedWallpaperInfo) {
@@ -862,12 +871,31 @@
         mSelectedWallpaperInfo = newSelectedWallpaperInfo;
         updateBottomActions(mSelectedWallpaperInfo != null);
         updateThumbnail(mSelectedWallpaperInfo);
-        // Populate wallpaper info to bottom sheet page.
-        if (mSelectedWallpaperInfo != null) {
-            mBottomActionBar.populateInfoPage(
-                mSelectedWallpaperInfo.getAttributions(getContext()),
-                shouldShowMetadataInPreview(mSelectedWallpaperInfo));
+        // Populate wallpaper info into view.
+        if (mSelectedWallpaperInfo != null && mWallpaperInfoView != null) {
+            WallpaperInfoHelper.loadExploreIntent(
+                    getContext(),
+                    mSelectedWallpaperInfo,
+                    (actionLabel, exploreIntent) ->
+                            mWallpaperInfoView.populateWallpaperInfo(
+                                    mSelectedWallpaperInfo, actionLabel, exploreIntent,
+                                    v -> onExploreClicked(exploreIntent)));
         }
+
+        if (mWallpaperSelectedListener != null) {
+            mWallpaperSelectedListener.onWallpaperSelected(position);
+        }
+    }
+
+    private void onExploreClicked(Intent exploreIntent) {
+        if (getContext() == null) {
+            return;
+        }
+        Context context = getContext();
+        mUserEventLogger.logActionClicked(mSelectedWallpaperInfo.getCollectionId(context),
+                mSelectedWallpaperInfo.getActionLabelRes(context));
+
+        startActivity(exploreIntent);
     }
 
     private void updateActivatedStatus(WallpaperInfo wallpaperInfo, boolean isActivated) {
@@ -875,7 +903,7 @@
             return;
         }
         int index = mWallpapers.indexOf(wallpaperInfo);
-        index = (isRotationEnabled() || mCategory.supportsCustomPhotos())
+        index = (shouldShowRotationTile() || mCategory.supportsCustomPhotos())
                 ? index + 1 : index;
         ViewHolder holder = mImageGrid.findViewHolderForAdapterPosition(index);
         if (holder != null) {
@@ -891,7 +919,7 @@
             return;
         }
         int index = mWallpapers.indexOf(wallpaperInfo);
-        index = (isRotationEnabled() || mCategory.supportsCustomPhotos())
+        index = (shouldShowRotationTile() || mCategory.supportsCustomPhotos())
                 ? index + 1 : index;
         ViewHolder holder = mImageGrid.findViewHolderForAdapterPosition(index);
         if (holder != null) {
@@ -903,95 +931,47 @@
         }
     }
 
-    private static boolean shouldShowMetadataInPreview(WallpaperInfo wallpaperInfo) {
-        android.app.WallpaperInfo wallpaperComponent = wallpaperInfo.getWallpaperComponent();
-        return wallpaperComponent == null || wallpaperComponent.getShowMetadataInPreview();
+    private void refreshAppliedWallpaper() {
+        // Clear the check mark and blue border(if it shows) of the old applied wallpaper.
+        showCheckMarkAndBorderForAppliedWallpaper(false);
+
+        // Update to the new applied wallpaper.
+        String appliedWallpaperId = getAppliedWallpaperId();
+        Optional<WallpaperInfo> wallpaperInfoOptional = mWallpapers
+                .stream()
+                .filter(wallpaper -> wallpaper.getWallpaperId() != null)
+                .filter(wallpaper -> wallpaper.getWallpaperId().equals(appliedWallpaperId))
+                .findFirst();
+        mAppliedWallpaperInfo = wallpaperInfoOptional.orElse(null);
+
+        // Set the check mark and blue border(if user doesn't select) of the new applied wallpaper.
+        showCheckMarkAndBorderForAppliedWallpaper(true);
     }
 
-    /**
-     * ViewHolder subclass for "daily refresh" tile in the RecyclerView, only shown if rotation is
-     * enabled for this category.
-     */
-    private class RotationHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
+    private String getAppliedWallpaperId() {
+        WallpaperPreferences prefs =
+                InjectorProvider.getInjector().getPreferences(getContext());
+        android.app.WallpaperInfo wallpaperInfo = mWallpaperManager.getWallpaperInfo();
+        boolean isDestinationBoth =
+                mWallpaperManager.getWallpaperId(WallpaperManager.FLAG_LOCK) < 0;
 
-        private CardView mTileLayout;
-        private TextView mRotationMessage;
-        private TextView mRotationTitle;
-        private ImageView mRefreshIcon;
-
-        RotationHolder(View itemView) {
-            super(itemView);
-            itemView.setOnClickListener(this);
-
-            mTileLayout = itemView.findViewById(R.id.daily_refresh);
-            mRotationMessage = itemView.findViewById(R.id.rotation_tile_message);
-            mRotationTitle = itemView.findViewById(R.id.rotation_tile_title);
-            mRefreshIcon = itemView.findViewById(R.id.rotation_tile_refresh_icon);
-            mTileLayout.getLayoutParams().height = mTileSizePx.y;
-
-            // If the feature flag for "dynamic start rotation tile" is not enabled, fall back to the
-            // static UI with a blue accent color background and "Tap to turn on" text.
-            if (!Flags.dynamicStartRotationTileEnabled) {
-                mTileLayout.setBackgroundColor(
-                        getResources().getColor(R.color.rotation_tile_enabled_background_color));
-                mRotationMessage.setText(R.string.daily_refresh_tile_subtitle);
-                mRotationTitle.setTextColor(
-                        getResources().getColor(R.color.rotation_tile_enabled_title_text_color));
-                mRotationMessage.setTextColor(
-                        getResources().getColor(R.color.rotation_tile_enabled_subtitle_text_color));
-                mRefreshIcon.setColorFilter(
-                        getResources().getColor(R.color.rotation_tile_enabled_refresh_icon_color),
-                        Mode.SRC_IN);
-                return;
-            }
-
-            // Initialize the state of the "start rotation" tile (i.e., whether it is gray or blue to
-            // indicate if rotation is turned on for the current category) with last-known rotation state
-            // that could be stale. The last-known rotation state is correct in most cases and is a good
-            // starting point but may not be accurate if the user set a wallpaper through a 3rd party app
-            // while this app was paused.
-            int rotationState = mWallpaperRotationInitializer.getRotationInitializationStateDirty(
-                    getContext());
-            bindRotationInitializationState(rotationState);
+        if (isDestinationBoth || mWallpaperDestination == WallpaperPersister.DEST_HOME_SCREEN) {
+            return wallpaperInfo != null
+                    ? wallpaperInfo.getServiceName() : prefs.getHomeWallpaperRemoteId();
+        } else {
+            return prefs.getLockWallpaperRemoteId();
         }
+    }
 
-        @Override
-        public void onClick(View v) {
-            DialogFragment startRotationDialogFragment = new StartRotationDialogFragment();
-            startRotationDialogFragment.setTargetFragment(
-                    IndividualPickerFragment.this, UNUSED_REQUEST_CODE);
-            startRotationDialogFragment.show(getFragmentManager(), TAG_START_ROTATION_DIALOG);
+    private void showCheckMarkAndBorderForAppliedWallpaper(boolean show) {
+        updateAppliedStatus(mAppliedWallpaperInfo, show);
+        if (mSelectedWallpaperInfo == null) {
+            updateActivatedStatus(mAppliedWallpaperInfo, show);
         }
+    }
 
-        /**
-         * Binds the provided rotation initialization state to the RotationHolder and updates the tile's
-         * UI to be in sync with the state (i.e., message and color appropriately reflect the state to
-         * the user).
-         */
-        void bindRotationInitializationState(@RotationInitializationState int rotationState) {
-            int newBackgroundColor =
-                    (rotationState == WallpaperRotationInitializer.ROTATION_NOT_INITIALIZED)
-                            ? getResources().getColor(R.color.rotation_tile_not_enabled_background_color)
-                            : getResources().getColor(R.color.rotation_tile_enabled_background_color);
-            int newTitleTextColor =
-                    (rotationState == WallpaperRotationInitializer.ROTATION_NOT_INITIALIZED)
-                            ? getResources().getColor(R.color.rotation_tile_not_enabled_title_text_color)
-                            : getResources().getColor(R.color.rotation_tile_enabled_title_text_color);
-            int newSubtitleTextColor =
-                    (rotationState == WallpaperRotationInitializer.ROTATION_NOT_INITIALIZED)
-                            ? getResources().getColor(R.color.rotation_tile_not_enabled_subtitle_text_color)
-                            : getResources().getColor(R.color.rotation_tile_enabled_subtitle_text_color);
-            int newRefreshIconColor =
-                    (rotationState == WallpaperRotationInitializer.ROTATION_NOT_INITIALIZED)
-                            ? getResources().getColor(R.color.rotation_tile_not_enabled_refresh_icon_color)
-                            : getResources().getColor(R.color.rotation_tile_enabled_refresh_icon_color);
-
-            mTileLayout.setCardBackgroundColor(newBackgroundColor);
-            mRotationTitle.setTextColor(newTitleTextColor);
-            mRotationMessage.setText(getResIdForRotationState(rotationState));
-            mRotationMessage.setTextColor(newSubtitleTextColor);
-            mRefreshIcon.setColorFilter(newRefreshIconColor, Mode.SRC_IN);
-        }
+    private boolean shouldShowRotationTile() {
+        return mFormFactor == FormFactorChecker.FORM_FACTOR_DESKTOP && isRotationEnabled();
     }
 
     /**
@@ -1030,7 +1010,7 @@
 
         @Override
         public int getItemViewType(int position) {
-            if (isRotationEnabled() && position == SPECIAL_FIXED_TILE_ADAPTER_POSITION) {
+            if (shouldShowRotationTile() && position == SPECIAL_FIXED_TILE_ADAPTER_POSITION) {
                 return ITEM_VIEW_TYPE_ROTATION;
             }
 
@@ -1065,34 +1045,23 @@
 
         @Override
         public int getItemCount() {
-            return (isRotationEnabled() || mCategory.supportsCustomPhotos())
+            return (shouldShowRotationTile() || mCategory.supportsCustomPhotos())
                     ? mWallpapers.size() + 1
                     : mWallpapers.size();
         }
 
         private ViewHolder createRotationHolder(ViewGroup parent) {
             LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
-            View view;
-
-            if (mFormFactor == FormFactorChecker.FORM_FACTOR_DESKTOP) {
-                view = layoutInflater.inflate(R.layout.grid_item_rotation_desktop, parent, false);
-                SelectionAnimator selectionAnimator =
-                        new CheckmarkSelectionAnimator(getActivity(), view);
-                return new DesktopRotationHolder(
-                        getActivity(), mTileSizePx.y, view, selectionAnimator,
-                        IndividualPickerFragment.this);
-            } else { // MOBILE
-                view = layoutInflater.inflate(R.layout.grid_item_rotation, parent, false);
-                return new RotationHolder(view);
-            }
+            View view = layoutInflater.inflate(R.layout.grid_item_rotation_desktop, parent, false);
+            SelectionAnimator selectionAnimator =
+                    new CheckmarkSelectionAnimator(getActivity(), view);
+            return new DesktopRotationHolder(getActivity(), mTileSizePx.y, view, selectionAnimator,
+                    IndividualPickerFragment.this);
         }
 
         private ViewHolder createIndividualHolder(ViewGroup parent) {
             LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
             View view = layoutInflater.inflate(R.layout.grid_item_image, parent, false);
-            if (!TEMP_BOTTOM_ACTION_BAR_FEATURE) {
-                view.findViewById(R.id.tile).setPadding(0, 0, 0, 0);
-            }
 
             if (mFormFactor == FormFactorChecker.FORM_FACTOR_DESKTOP) {
                 SelectionAnimator selectionAnimator =
@@ -1235,7 +1204,7 @@
         }
 
         void onBindIndividualHolder(ViewHolder holder, int position) {
-            int wallpaperIndex = (isRotationEnabled() || mCategory.supportsCustomPhotos())
+            int wallpaperIndex = (shouldShowRotationTile() || mCategory.supportsCustomPhotos())
                     ? position - 1 : position;
             WallpaperInfo wallpaper = mWallpapers.get(wallpaperIndex);
             ((IndividualHolder) holder).bindWallpaper(wallpaper);
@@ -1250,14 +1219,10 @@
                 mAppliedWallpaperInfo = wallpaper;
             }
 
-            if (TEMP_BOTTOM_ACTION_BAR_FEATURE) {
-                holder.itemView.setActivated(
-                        (isWallpaperApplied && !hasUserSelectedWallpaper) || isWallpaperSelected);
-                holder.itemView.findViewById(R.id.check_circle).setVisibility(
-                        isWallpaperApplied ? View.VISIBLE : View.GONE);
-                holder.itemView.findViewById(R.id.tile).setOnClickListener(
-                        view -> onWallpaperSelected(wallpaper));
-            }
+            holder.itemView.setActivated(
+                    (isWallpaperApplied && !hasUserSelectedWallpaper) || isWallpaperSelected);
+            holder.itemView.findViewById(R.id.check_circle).setVisibility(
+                    isWallpaperApplied ? View.VISIBLE : View.GONE);
         }
     }
 
diff --git a/src/com/android/wallpaper/util/ScreenSizeCalculator.java b/src/com/android/wallpaper/util/ScreenSizeCalculator.java
index d55cf99..d206e55 100755
--- a/src/com/android/wallpaper/util/ScreenSizeCalculator.java
+++ b/src/com/android/wallpaper/util/ScreenSizeCalculator.java
@@ -15,6 +15,7 @@
  */
 package com.android.wallpaper.util;
 
+import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.Point;
@@ -22,6 +23,7 @@
 import android.os.Build.VERSION_CODES;
 import android.util.Log;
 import android.view.Display;
+import android.view.WindowManager;
 
 /**
  * Calculates the size of the device's screen.
@@ -70,6 +72,17 @@
         }
     }
 
+    /**
+     * Calculates the device's aspect ratio (height/width).
+     *
+     * Note: The screen size is getting from {@link #getScreenSize}.
+     */
+    public float getScreenAspectRatio(Context context) {
+        final WindowManager windowManager = context.getSystemService(WindowManager.class);
+        final Point screenSize = getScreenSize(windowManager.getDefaultDisplay());
+        return (float) screenSize.y / screenSize.x;
+    }
+
     private Point getPortraitScreenSize(Display display) {
         if (mPortraitScreenSize == null) {
             mPortraitScreenSize = new Point();
diff --git a/src/com/android/wallpaper/util/TileSizeCalculator.java b/src/com/android/wallpaper/util/SizeCalculator.java
similarity index 83%
rename from src/com/android/wallpaper/util/TileSizeCalculator.java
rename to src/com/android/wallpaper/util/SizeCalculator.java
index ffc799e..89f4318 100755
--- a/src/com/android/wallpaper/util/TileSizeCalculator.java
+++ b/src/com/android/wallpaper/util/SizeCalculator.java
@@ -19,8 +19,10 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Point;
+import android.graphics.drawable.GradientDrawable;
 import android.util.DisplayMetrics;
 import android.view.Display;
+import android.view.View;
 import android.view.WindowManager;
 
 import androidx.annotation.NonNull;
@@ -33,9 +35,10 @@
 
 
 /**
- * Simple utility class that calculates tile sizes relative to the size of the display.
+ * Simple utility class that calculates various sizes relative to the display or current
+ * configuration.
  */
-public class TileSizeCalculator {
+public class SizeCalculator {
     private static final int COLUMN_COUNT_THRESHOLD_DP = 732;
 
     /**
@@ -61,13 +64,13 @@
     private static final int INDIVIDUAL_MORE_COLUMNS = 4;
 
     // Suppress default constructor for noninstantiability.
-    private TileSizeCalculator() {
-        throw new AssertionError("Can't initialize a TileSizeCalculator.");
+    private SizeCalculator() {
+        throw new AssertionError("Can't initialize a SizeCalculator.");
     }
 
     /**
-     * Returns the number of columns for a grid of category tiles. Selects from fewer and more columns
-     * based on the width of the activity.
+     * Returns the number of columns for a grid of category tiles. Selects from fewer and more
+     * columns based on the width of the activity.
      */
     public static int getNumCategoryColumns(@NonNull Activity activity) {
         int windowWidthPx = getActivityWindowWidthPx(activity);
@@ -84,7 +87,8 @@
     }
 
     private static int getNumCategoryColumns(Activity activity, int windowWidthPx) {
-        return getNumColumns(activity, windowWidthPx, CATEGORY_FEWER_COLUMNS, CATEGORY_MORE_COLUMNS);
+        return getNumColumns(activity, windowWidthPx, CATEGORY_FEWER_COLUMNS,
+                CATEGORY_MORE_COLUMNS);
     }
 
     private static int getNumIndividualColumns(Activity activity, int windowWidthPx) {
@@ -94,7 +98,8 @@
 
     private static int getNumColumns(
             Context context, int windowWidthPx, int fewerCount, int moreCount) {
-        WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
+        WindowManager windowManager = (WindowManager)
+                context.getSystemService(Context.WINDOW_SERVICE);
         Display display = windowManager.getDefaultDisplay();
 
         DisplayMetrics metrics = DisplayMetricsRetriever.getInstance()
@@ -138,8 +143,9 @@
      * individual tile size when an activity takes up the entire screen's width.
      */
     public static Point getSuggestedThumbnailSize(@NonNull Context appContext) {
-        // Category tiles are larger than individual tiles, so get the number of columns for categories
-        // and then calculate a tile size for when the app window takes up the entire display.
+        // Category tiles are larger than individual tiles, so get the number of columns for
+        // categories and then calculate a tile size for when the app window takes up the entire
+        // display.
         int windowWidthPx = getDeviceDisplayWidthPx(appContext);
         int columnCount = getNumColumns(
                 appContext, windowWidthPx, INDIVIDUAL_FEWER_COLUMNS, INDIVIDUAL_MORE_COLUMNS);
@@ -178,8 +184,8 @@
             gridPaddingPx = res.getDimensionPixelSize(R.dimen.grid_padding_desktop);
         }
 
-        // Note: don't need to multiply by density because getting the dimension from resources already
-        // does that.
+        // Note: don't need to multiply by density because getting the dimension from resources
+        // already does that.
         int guttersWidthPx = (columnCount + 1) * gridPaddingPx;
         int availableWidthPx = windowWidthPx - guttersWidthPx;
 
@@ -234,4 +240,29 @@
 
         return outPoint.x;
     }
+
+    /**
+     * Adjusts the corner radius of the given view by doubling their current values
+     *
+     * @param view whose background is set to a GradientDrawable
+     */
+    public static void adjustBackgroundCornerRadius(View view) {
+        GradientDrawable background = (GradientDrawable) view.getBackground();
+        // Using try/catch because currently GradientDrawable has a bug where when the radii array
+        // is null, instead of getCornerRadii returning null, it throws NPE.
+        try {
+            float[] radii = background.getCornerRadii();
+            if (radii == null) {
+                return;
+            }
+            for (int i = 0; i < radii.length; i++) {
+                radii[i] *= 2f;
+            }
+            background = ((GradientDrawable) background.mutate());
+            background.setCornerRadii(radii);
+            view.setBackground(background);
+        } catch (NullPointerException e) {
+            //Ignore in this case, since it means the radius was 0.
+        }
+    }
 }
diff --git a/src/com/android/wallpaper/util/TimeUtils.java b/src/com/android/wallpaper/util/TimeUtils.java
new file mode 100644
index 0000000..5b3334c
--- /dev/null
+++ b/src/com/android/wallpaper/util/TimeUtils.java
@@ -0,0 +1,85 @@
+/*
+ * 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.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.text.format.DateFormat;
+
+import androidx.annotation.Nullable;
+
+import java.util.Calendar;
+
+/** Utility class for clock time preview. */
+public class TimeUtils {
+
+    private static final String CLOCK_FORMAT_12HOUR = "h:mm";
+    private static final String CLOCK_FORMAT_24HOUR = "H:mm";
+
+    /** Returns the clock formatted time. For 12-hour format, there's no AM/PM field displayed. */
+    public static CharSequence getFormattedTime(Context context, Calendar calendar) {
+        return DateFormat.format(
+                DateFormat.is24HourFormat(context)
+                        ? CLOCK_FORMAT_24HOUR
+                        : CLOCK_FORMAT_12HOUR,
+                calendar);
+    }
+
+    /**
+     * BroadcastReceiver that can notify a listener when the system time (minutes) changes.
+     * Use {@link #registerNewReceiver(Context, TimeListener)} to create a new instance that will be
+     * automatically registered using the given Context.
+     */
+    public static class TimeTicker extends BroadcastReceiver {
+
+        /**
+         * Listener for the system time's change.
+         */
+        public interface TimeListener {
+            /**
+             * Called when the system time (minutes) changes.
+             */
+            void onCurrentTimeChanged();
+        }
+
+        /**
+         * Registers a broadcast receiver for time tick.
+         */
+        public static TimeTicker registerNewReceiver(Context context,
+                                                     @Nullable TimeListener listener) {
+            TimeTicker receiver = new TimeTicker(listener);
+            // Register broadcast receiver for time tick
+            final IntentFilter filter = new IntentFilter(Intent.ACTION_TIME_TICK);
+            context.registerReceiver(receiver, filter);
+            return receiver;
+        }
+
+        private TimeListener mListener;
+
+        private TimeTicker(@Nullable TimeListener listener) {
+            mListener = listener;
+        }
+
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (mListener != null) {
+                mListener.onCurrentTimeChanged();
+            }
+        }
+    }
+}
diff --git a/src/com/android/wallpaper/util/WallpaperConnection.java b/src/com/android/wallpaper/util/WallpaperConnection.java
index ed12095..1b5bdae 100644
--- a/src/com/android/wallpaper/util/WallpaperConnection.java
+++ b/src/com/android/wallpaper/util/WallpaperConnection.java
@@ -34,6 +34,8 @@
 
 import androidx.annotation.Nullable;
 
+import com.android.systemui.shared.system.WallpaperEngineCompat;
+
 /**
  * Implementation of {@link IWallpaperConnection} that handles communication with a
  * {@link android.service.wallpaper.WallpaperService}
@@ -51,6 +53,7 @@
     private boolean mIsVisible;
     private boolean mIsEngineVisible;
     private boolean mEngineReady;
+    private WallpaperEngineCompat mEngineCompat;
 
     /**
      * @param intent used to bind the wallpaper service
@@ -84,6 +87,11 @@
 
             mConnected = true;
         }
+
+        if (mListener != null) {
+            mListener.onConnected();
+        }
+
         return true;
     }
 
@@ -100,6 +108,7 @@
                     // Ignore
                 }
                 mEngine = null;
+                mEngineCompat = null;
             }
             try {
                 mActivity.unbindService(this);
@@ -138,6 +147,7 @@
     public void onServiceDisconnected(ComponentName name) {
         mService = null;
         mEngine = null;
+        mEngineCompat = null;
         Log.w(TAG, "Wallpaper service gone: " + name);
     }
 
@@ -148,10 +158,19 @@
         synchronized (this) {
             if (mConnected) {
                 mEngine = engine;
+                mEngineCompat = new WallpaperEngineCompat(mEngine);
                 updateEnginePosition();
                 if (mIsVisible) {
                     setEngineVisibility(true);
                 }
+
+                // Some wallpapers don't trigger #onWallpaperColorsChanged from remote. Requesting
+                // wallpaper color here to ensure the #onWallpaperColorsChanged would get called.
+                try {
+                    mEngine.requestWallpaperColors();
+                } catch (RemoteException e) {
+                    Log.w(TAG, "Failed requesting wallpaper colors", e);
+                }
             } else {
                 try {
                     engine.destroy();
@@ -163,19 +182,8 @@
     }
 
     private void updateEnginePosition() {
-        if (mWallpaperPreviewRect != null) {
-            // TODO(santie): replace with proper surface resizing when the API is available
-            View decorView = mActivity.getWindow().getDecorView();
-            int availw = decorView.getWidth();
-            int availh = decorView.getHeight();
-            try {
-                mEngine.setDisplayPadding(
-                        new Rect(-mWallpaperPreviewRect.left, -mWallpaperPreviewRect.top,
-                                mWallpaperPreviewRect.right - availw,
-                                mWallpaperPreviewRect.bottom - availh));
-            } catch (RemoteException e) {
-                Log.e(TAG, "Couldn't set preview padding", e);
-            }
+        if (mWallpaperPreviewRect != null && mEngineCompat != null) {
+            mEngineCompat.scalePreview(mWallpaperPreviewRect);
         }
     }
 
@@ -195,7 +203,11 @@
 
     @Override
     public void onWallpaperColorsChanged(WallpaperColors colors, int displayId) {
-
+        mActivity.runOnUiThread(() -> {
+            if (mListener != null) {
+                mListener.onWallpaperColorsChanged(colors, displayId);
+            }
+        });
     }
 
     @Override
@@ -213,9 +225,7 @@
      */
     public void updatePreviewPosition(Rect positionGlobalRect) {
         mWallpaperPreviewRect = positionGlobalRect;
-        if (mEngine != null) {
-            updateEnginePosition();
-        }
+        updateEnginePosition();
     }
 
     /**
@@ -236,7 +246,7 @@
     private void setEngineVisibility(boolean visible) {
         if (mEngine != null && visible != mIsEngineVisible) {
             try {
-                mEngine.setVisibility(true);
+                mEngine.setVisibility(visible);
                 mIsEngineVisible = visible;
             } catch (RemoteException e) {
                 Log.w(TAG, "Failure setting wallpaper visibility ", e);
@@ -262,5 +272,10 @@
          * Called after the wallpaper has been rendered for the first time.
          */
         default void onEngineShown() {}
+
+        /**
+         * Called after the wallpaper color is available or updated.
+         */
+        default void onWallpaperColorsChanged(WallpaperColors colors, int displayId) {}
     }
 }
diff --git a/src/com/android/wallpaper/util/WallpaperCropUtils.java b/src/com/android/wallpaper/util/WallpaperCropUtils.java
index 3e751b8..a13ed55 100755
--- a/src/com/android/wallpaper/util/WallpaperCropUtils.java
+++ b/src/com/android/wallpaper/util/WallpaperCropUtils.java
@@ -25,6 +25,8 @@
 import android.view.Display;
 import android.view.View;
 
+import com.android.systemui.shared.system.WallpaperManagerCompat;
+
 /**
  * Static utility methods for wallpaper cropping operations.
  */
@@ -82,6 +84,14 @@
             minDim = Math.min(realSize.x, realSize.y);
         }
 
+        return calculateCropSurfaceSize(resources, maxDim, minDim);
+    }
+
+    /**
+     * Calculates ideal crop surface size for a surface of dimensions maxDim x minDim such that
+     * there is room for parallax in both* landscape and portrait screen orientations.
+     */
+    public static Point calculateCropSurfaceSize(Resources resources, int maxDim, int minDim) {
         final int defaultWidth, defaultHeight;
         if (resources.getConfiguration().smallestScreenWidthDp >= 720) {
             defaultWidth = (int) (maxDim * wallpaperTravelToScreenWidthRatio(maxDim, minDim));
@@ -146,6 +156,80 @@
         return minZoom;
     }
 
+
+    /**
+     * Calculates the center position of a wallpaper of the given size, based on a "crop surface"
+     * (with extra width to account for parallax) superimposed on the screen. Trying to show as
+     * much of the wallpaper as possible on the crop surface and align screen to crop surface such
+     * that the centered wallpaper matches what would be seen by the user in the left-most home
+     * screen.
+     *
+     * @param wallpaperSize full size of the wallpaper
+     * @param visibleWallpaperRect visible area available for the wallpaper
+     * @return a point corresponding to the position of wallpaper that should be in the center
+     *      of the screen.
+     */
+    public static PointF calculateDefaultCenter(Context context, Point wallpaperSize,
+            Rect visibleWallpaperRect) {
+
+        WallpaperCropUtils.adjustCurrentWallpaperCropRect(context, wallpaperSize,
+                visibleWallpaperRect);
+
+        return new PointF(visibleWallpaperRect.centerX(),
+                visibleWallpaperRect.centerY());
+    }
+
+    /**
+     * Calculates the rectangle to crop a wallpaper of the given size, and considering the given
+     * scrollX and scrollY offsets
+     * @param wallpaperZoom zoom applied to the raw wallpaper image
+     * @param wallpaperSize full ("raw") wallpaper size
+     * @param defaultCropSurfaceSize @see #getDefaultCropSurfaceSize(Resources, Display)
+     * @param targetHostSize target size where the wallpaper will be rendered (eg, the display size)
+     * @param scrollX x-axis offset the cropping area from the wallpaper's 0,0 position
+     * @param scrollY y-axis offset the cropping area from the wallpaper's 0,0 position
+     * @return a Rect representing the area of the wallpaper to crop.
+     */
+    public static Rect calculateCropRect(Context context, float wallpaperZoom, Point wallpaperSize,
+            Point defaultCropSurfaceSize, Point targetHostSize, int scrollX, int scrollY) {
+        // Calculate Rect of wallpaper in physical pixel terms (i.e., scaled to current zoom).
+        int scaledWallpaperWidth = (int) (wallpaperSize.x * wallpaperZoom);
+        int scaledWallpaperHeight = (int) (wallpaperSize.y * wallpaperZoom);
+        Rect rect = new Rect();
+        rect.set(0, 0, scaledWallpaperWidth, scaledWallpaperHeight);
+
+        // Crop rect should start off as the visible screen and then include extra width and height
+        // if available within wallpaper at the current zoom.
+        Rect cropRect = new Rect(scrollX, scrollY, scrollX + targetHostSize.x,
+                scrollY + targetHostSize.y);
+
+        int extraWidth = defaultCropSurfaceSize.x - targetHostSize.x;
+        int extraHeightTopAndBottom = (int) ((defaultCropSurfaceSize.y - targetHostSize.y) / 2f);
+
+        // Try to increase size of screenRect to include extra width depending on the layout
+        // direction.
+        if (isRtl(context)) {
+            cropRect.left = Math.max(cropRect.left - extraWidth, rect.left);
+        } else {
+            cropRect.right = Math.min(cropRect.right + extraWidth, rect.right);
+        }
+
+        // Try to increase the size of the cropRect to to include extra height.
+        int availableExtraHeightTop = cropRect.top - Math.max(
+                rect.top,
+                cropRect.top - extraHeightTopAndBottom);
+        int availableExtraHeightBottom = Math.min(
+                rect.bottom,
+                cropRect.bottom + extraHeightTopAndBottom) - cropRect.bottom;
+
+        int availableExtraHeightTopAndBottom =
+                Math.min(availableExtraHeightTop, availableExtraHeightBottom);
+        cropRect.top -= availableExtraHeightTopAndBottom;
+        cropRect.bottom += availableExtraHeightTopAndBottom;
+
+        return cropRect;
+    }
+
     /**
      * Calculates the center area of the outer rectangle which is visible in the inner rectangle
      * after applying the minimum zoom.
@@ -168,55 +252,64 @@
         }
     }
 
+    public static void adjustCurrentWallpaperCropRect(Context context, Point assetDimensions,
+            Rect cropRect) {
+        adjustCropRect(context, cropRect, true /* zoomIn */);
+    }
+
+    /** Adjust the crop rect by zooming in with systemWallpaperMaxScale. */
+    public static void adjustCropRect(Context context, Rect cropRect, boolean zoomIn) {
+        float centerX = cropRect.centerX();
+        float centerY = cropRect.centerY();
+        float width = cropRect.width();
+        float height = cropRect.height();
+        float systemWallpaperMaxScale = getSystemWallpaperMaximumScale(context);
+        float scale = zoomIn ? systemWallpaperMaxScale : 1.0f / systemWallpaperMaxScale;
+
+        // Adjust the rect according to the system wallpaper's maximum scale.
+        int left = (int) (centerX - (width / 2) / scale);
+        int top = (int) (centerY - (height / 2) / scale);
+        int right = (int) (centerX + (width / 2) / scale);
+        int bottom = (int) (centerY + (height / 2) / scale);
+        cropRect.set(left, top, right, bottom);
+    }
+
+    /** Adjust the given Point, representing a size by  systemWallpaperMaxScale. */
+    public static void scaleSize(Context context, Point size) {
+        float systemWallpaperMaxScale = getSystemWallpaperMaximumScale(context);
+        size.set((int) (size.x * systemWallpaperMaxScale),
+                (int) (size.y * systemWallpaperMaxScale));
+    }
+    /**
+     * Calculates {@link Rect} of the wallpaper which we want to crop to in physical pixel terms
+     * (i.e., scaled to current zoom) when the wallpaper is laid on a fullscreen view.
+     */
+    public static Rect calculateCropRect(Context context, Display display, Point rawWallpaperSize,
+            Rect visibleRawWallpaperRect, float wallpaperZoom) {
+        Point screenSize = ScreenSizeCalculator.getInstance().getScreenSize(display);
+        Point defaultCropSize = WallpaperCropUtils.getDefaultCropSurfaceSize(
+                context.getResources(), display);
+        return calculateCropRect(context, screenSize, defaultCropSize, rawWallpaperSize,
+                visibleRawWallpaperRect, wallpaperZoom);
+    }
+
     /**
      * Calculates {@link Rect} of the wallpaper which we want to crop to in physical pixel terms
      * (i.e., scaled to current zoom).
      *
+     * @param hostViewSize            the size of the view hosting the wallpaper as a Point (x,y).
+     * @param cropSize                the default size of the crop as a Point (x,y).
      * @param rawWallpaperSize        the size of the raw wallpaper as a Point (x,y).
      * @param visibleRawWallpaperRect the area of the raw wallpaper which is expected to see.
      * @param wallpaperZoom           the factor which is used to scale the raw wallpaper.
      */
-    public static Rect calculateCropRect(Context context, Display display, Point rawWallpaperSize,
-                                         Rect visibleRawWallpaperRect, float wallpaperZoom) {
-        int scaledWallpaperWidth = (int) (rawWallpaperSize.x * wallpaperZoom);
-        int scaledWallpaperHeight = (int) (rawWallpaperSize.y * wallpaperZoom);
+    public static Rect calculateCropRect(Context context, Point hostViewSize, Point cropSize,
+            Point rawWallpaperSize, Rect visibleRawWallpaperRect, float wallpaperZoom) {
         int scrollX = (int) (visibleRawWallpaperRect.left * wallpaperZoom);
         int scrollY = (int) (visibleRawWallpaperRect.top * wallpaperZoom);
 
-        visibleRawWallpaperRect.set(0, 0, scaledWallpaperWidth, scaledWallpaperHeight);
-
-        Point screenSize = ScreenSizeCalculator.getInstance().getScreenSize(display);
-        // Crop rect should start off as the visible screen and then include extra width and height
-        // if available within wallpaper at the current zoom.
-        Rect cropRect = new Rect(scrollX, scrollY, scrollX + screenSize.x, scrollY + screenSize.y);
-
-        Point defaultCropSurfaceSize = WallpaperCropUtils.getDefaultCropSurfaceSize(
-                context.getResources(), display);
-        int extraWidth = defaultCropSurfaceSize.x - screenSize.x;
-        int extraHeightTopAndBottom = (int) ((defaultCropSurfaceSize.y - screenSize.y) / 2f);
-
-        // Try to increase size of screenRect to include extra width depending on the layout
-        // direction.
-        if (isRtl(context)) {
-            cropRect.left = Math.max(cropRect.left - extraWidth, visibleRawWallpaperRect.left);
-        } else {
-            cropRect.right = Math.min(cropRect.right + extraWidth, visibleRawWallpaperRect.right);
-        }
-
-        // Try to increase the size of the cropRect to to include extra height.
-        int availableExtraHeightTop = cropRect.top - Math.max(
-                visibleRawWallpaperRect.top,
-                cropRect.top - extraHeightTopAndBottom);
-        int availableExtraHeightBottom = Math.min(
-                visibleRawWallpaperRect.bottom,
-                cropRect.bottom + extraHeightTopAndBottom) - cropRect.bottom;
-
-        int availableExtraHeightTopAndBottom =
-                Math.min(availableExtraHeightTop, availableExtraHeightBottom);
-        cropRect.top -= availableExtraHeightTopAndBottom;
-        cropRect.bottom += availableExtraHeightTopAndBottom;
-
-        return cropRect;
+        return calculateCropRect(context, wallpaperZoom, rawWallpaperSize, cropSize, hostViewSize,
+                scrollX, scrollY);
     }
 
     /**
@@ -244,6 +337,13 @@
     }
 
     /**
+     * Get the system wallpaper's maximum scale value.
+     */
+    public static float getSystemWallpaperMaximumScale(Context context) {
+        return WallpaperManagerCompat.getWallpaperZoomOutMaxScale(context);
+    }
+
+    /**
      * Returns whether layout direction is RTL (or false for LTR). Since native RTL layout support
      * was added in API 17, returns false for versions lower than 17.
      */
diff --git a/src/com/android/wallpaper/widget/BottomActionBar.java b/src/com/android/wallpaper/widget/BottomActionBar.java
index ee68b81..c6dc61a 100644
--- a/src/com/android/wallpaper/widget/BottomActionBar.java
+++ b/src/com/android/wallpaper/widget/BottomActionBar.java
@@ -18,85 +18,157 @@
 import static com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_COLLAPSED;
 import static com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDED;
 
+import android.app.Activity;
 import android.content.Context;
-import android.graphics.drawable.GradientDrawable;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.TextView;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
 import com.android.wallpaper.R;
+import com.android.wallpaper.util.SizeCalculator;
 
 import com.google.android.material.bottomsheet.BottomSheetBehavior;
 import com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback;
 
+import java.util.ArrayDeque;
+import java.util.Arrays;
+import java.util.Deque;
 import java.util.EnumMap;
-import java.util.EnumSet;
-import java.util.List;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 
 /** A {@code ViewGroup} which provides the specific actions for the user to interact with. */
 public class BottomActionBar extends FrameLayout {
 
-    /** The action items in the bottom action bar. */
-    public enum BottomAction {
-        CANCEL, ROTATION, INFORMATION, EDIT, APPLY,
+    /**
+     * Interface to be implemented by an Activity hosting a {@link BottomActionBar}
+     */
+    public interface BottomActionBarHost {
+        /** Gets {@link BottomActionBar}. */
+        BottomActionBar getBottomActionBar();
     }
 
-    private final Map<BottomAction, View> mActionList = new EnumMap<>(BottomAction.class);
-    private final BottomSheetBehavior<ViewGroup> mBottomSheetBehavior;
-    private final TextView mAttributionTitle;
-    private final TextView mAttributionSubtitle1;
-    private final TextView mAttributionSubtitle2;
+    /**
+     * The listener for {@link BottomActionBar} visibility change notification.
+     */
+    public interface VisibilityChangeListener {
+        /**
+         * Called when {@link BottomActionBar} visibility changes.
+         *
+         * @param isVisible {@code true} if it's visible; {@code false} otherwise.
+         */
+        void onVisibilityChange(boolean isVisible);
+    }
+
+    /** This listens to changes to an action view's selected state. */
+    public interface OnActionSelectedListener {
+
+        /**
+         * This is called when an action view's selected state changes.
+         * @param selected whether the action view is selected.
+         */
+        void onActionSelected(boolean selected);
+    }
+
+    /**
+     *  A Callback to notify the registrant to change it's accessibility param when
+     *  {@link BottomActionBar} state changes.
+     */
+    public interface AccessibilityCallback {
+        /**
+         * Called when {@link BottomActionBar} collapsed.
+         */
+        void onBottomSheetCollapsed();
+
+        /**
+         * Called when {@link BottomActionBar} expanded.
+         */
+        void onBottomSheetExpanded();
+    }
+
+    // TODO(b/154299462): Separate downloadable related actions from WallpaperPicker.
+    /** The action items in the bottom action bar. */
+    public enum BottomAction {
+        ROTATION, DELETE, INFORMATION, EDIT, CUSTOMIZE, DOWNLOAD, PROGRESS, APPLY
+    }
+
+    private final Map<BottomAction, View> mActionMap = new EnumMap<>(BottomAction.class);
+    private final Map<BottomAction, View> mContentViewMap = new EnumMap<>(BottomAction.class);
+    private final Map<BottomAction, OnActionSelectedListener> mActionSelectedListeners =
+            new EnumMap<>(BottomAction.class);
+
+    private final ViewGroup mBottomSheetView;
+    private final QueueStateBottomSheetBehavior<ViewGroup> mBottomSheetBehavior;
+    private final Set<VisibilityChangeListener> mVisibilityChangeListeners = new HashSet<>();
+
+    // The current selected action in the BottomActionBar, can be null when no action is selected.
+    @Nullable private BottomAction mSelectedAction;
+    @Nullable private AccessibilityCallback mAccessibilityCallback;
 
     public BottomActionBar(@NonNull Context context, @Nullable AttributeSet attrs) {
         super(context, attrs);
         LayoutInflater.from(context).inflate(R.layout.bottom_actions_layout, this, true);
 
-        mAttributionTitle = findViewById(R.id.preview_attribution_pane_title);
-        mAttributionSubtitle1 = findViewById(R.id.preview_attribution_pane_subtitle1);
-        mAttributionSubtitle2 = findViewById(R.id.preview_attribution_pane_subtitle2);
+        mActionMap.put(BottomAction.ROTATION, findViewById(R.id.action_rotation));
+        mActionMap.put(BottomAction.DELETE, findViewById(R.id.action_delete));
+        mActionMap.put(BottomAction.INFORMATION, findViewById(R.id.action_information));
+        mActionMap.put(BottomAction.EDIT, findViewById(R.id.action_edit));
+        mActionMap.put(BottomAction.CUSTOMIZE, findViewById(R.id.action_customize));
+        mActionMap.put(BottomAction.DOWNLOAD, findViewById(R.id.action_download));
+        mActionMap.put(BottomAction.PROGRESS, findViewById(R.id.action_progress));
+        mActionMap.put(BottomAction.APPLY, findViewById(R.id.action_apply));
 
-        mActionList.put(BottomAction.CANCEL, findViewById(R.id.action_cancel));
-        mActionList.put(BottomAction.ROTATION, findViewById(R.id.action_rotation));
-        mActionList.put(BottomAction.INFORMATION, findViewById(R.id.action_information));
-        mActionList.put(BottomAction.EDIT, findViewById(R.id.action_edit));
-        mActionList.put(BottomAction.APPLY, findViewById(R.id.action_apply));
+        mBottomSheetView = findViewById(R.id.action_bottom_sheet);
+        SizeCalculator.adjustBackgroundCornerRadius(mBottomSheetView);
 
-        ViewGroup bottomSheet = findViewById(R.id.action_bottom_sheet);
-        mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
+        mBottomSheetBehavior = (QueueStateBottomSheetBehavior<ViewGroup>) BottomSheetBehavior.from(
+                mBottomSheetView);
         mBottomSheetBehavior.setState(STATE_COLLAPSED);
-
-        // Workaround as we don't have access to bottomDialogCornerRadius, mBottomSheet radii are
-        // set to dialogCornerRadius by default.
-        GradientDrawable bottomSheetBackground = (GradientDrawable) bottomSheet.getBackground();
-        float[] radii = bottomSheetBackground.getCornerRadii();
-        for (int i = 0; i < radii.length; i++) {
-            radii[i]*=2f;
-        }
-        bottomSheetBackground = ((GradientDrawable)bottomSheetBackground.mutate());
-        bottomSheetBackground.setCornerRadii(radii);
-        bottomSheet.setBackground(bottomSheetBackground);
-
-        ImageView informationIcon = findViewById(R.id.action_information);
         mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetCallback() {
             @Override
             public void onStateChanged(@NonNull View bottomSheet, int newState) {
+                if (mBottomSheetBehavior.isQueueProcessing()) {
+                    // Avoid button and bottom sheet mismatching from quick tapping buttons when
+                    // bottom sheet is changing state.
+                    disableActions();
+                    // If bottom sheet is going with expanded-collapsed-expanded, the new content
+                    // will be updated in collapsed state. The first state change from expanded to
+                    // collapsed should still show the previous content view.
+                    if (mSelectedAction != null && newState == STATE_COLLAPSED) {
+                        updateContentViewFor(mSelectedAction);
+                    }
+                    return;
+                }
+
+                notifyAccessibilityCallback(newState);
+
+                // Enable all buttons when queue is not processing.
+                enableActions();
+                if (!isExpandable(mSelectedAction)) {
+                    return;
+                }
+                // Ensure the button state is the same as bottom sheet state to catch up the state
+                // change from dragging or some unexpected bottom sheet state changes.
                 if (newState == STATE_COLLAPSED) {
-                    informationIcon.setColorFilter(getContext().getColor(R.color.material_grey500));
+                    updateSelectedState(mSelectedAction, /* selected= */ false);
                 } else if (newState == STATE_EXPANDED) {
-                    informationIcon.setColorFilter(getContext().getColor(R.color.accent_color));
+                    updateSelectedState(mSelectedAction, /* selected= */ true);
                 }
             }
-
             @Override
-            public void onSlide(@NonNull View bottomSheet, float slideOffset) {}
+            public void onSlide(@NonNull View bottomSheet, float slideOffset) { }
+        });
+
+        setOnApplyWindowInsetsListener((v, windowInsets) -> {
+            v.setPadding(v.getPaddingLeft(), v.getPaddingTop(), v.getPaddingRight(),
+                    windowInsets.getSystemWindowInsetBottom());
+            return windowInsets;
         });
     }
 
@@ -104,61 +176,102 @@
     public void onVisibilityAggregated(boolean isVisible) {
         super.onVisibilityAggregated(isVisible);
         if (!isVisible) {
-            mBottomSheetBehavior.setState(STATE_COLLAPSED);
+            hideBottomSheetAndDeselectButtonIfExpanded();
+            mBottomSheetBehavior.reset();
         }
+        mVisibilityChangeListeners.forEach(listener -> listener.onVisibilityChange(isVisible));
     }
 
     /**
-     * Sets the click listener to the specific action.
+     * Adds content view to the bottom sheet and binds with a {@code BottomAction} to
+     * expand / collapse the bottom sheet.
+     *
+     * @param contentView the view with content to be added on the bottom sheet
+     * @param action the action to be bound to expand / collapse the bottom sheet
+     */
+    public void attachViewToBottomSheetAndBindAction(View contentView, BottomAction action) {
+        contentView.setVisibility(GONE);
+        contentView.setFocusable(true);
+        mContentViewMap.put(action, contentView);
+        mBottomSheetView.addView(contentView);
+        setActionClickListener(action, actionView -> {
+            if (mBottomSheetBehavior.getState() == STATE_COLLAPSED) {
+                updateContentViewFor(action);
+            }
+            mBottomSheetView.setAccessibilityTraversalAfter(actionView.getId());
+        });
+    }
+
+    /** Collapses the bottom sheet. */
+    public void collapseBottomSheetIfExpanded() {
+        hideBottomSheetAndDeselectButtonIfExpanded();
+    }
+
+    /**
+     * Sets a click listener to a specific action.
      *
      * @param bottomAction the specific action
      * @param actionClickListener the click listener for the action
      */
     public void setActionClickListener(
             BottomAction bottomAction, OnClickListener actionClickListener) {
-        mActionList.get(bottomAction).setOnClickListener(actionClickListener);
-    }
+        View buttonView = mActionMap.get(bottomAction);
+        if (buttonView.hasOnClickListeners()) {
+            throw new IllegalStateException(
+                    "Had already set a click listener to button: " + bottomAction);
+        }
+        buttonView.setOnClickListener(view -> {
+            if (mSelectedAction != null && isActionSelected(mSelectedAction)) {
+                updateSelectedState(mSelectedAction, /* selected= */ false);
+                if (isExpandable(mSelectedAction)) {
+                    mBottomSheetBehavior.enqueue(STATE_COLLAPSED);
+                }
+            } else {
+                // Error handling, set to null if the action is not selected.
+                mSelectedAction = null;
+            }
 
-    /** Clears all the actions' click listeners */
-    public void clearActionClickListeners() {
-        mActionList.forEach((bottomAction, view) -> view.setOnClickListener(null));
+            if (bottomAction == mSelectedAction) {
+                // Deselect the selected action.
+                mSelectedAction = null;
+            } else {
+                // Select a different action from the current selected action.
+                mSelectedAction = bottomAction;
+                updateSelectedState(mSelectedAction, /* selected= */ true);
+                if (isExpandable(mSelectedAction)) {
+                    mBottomSheetBehavior.enqueue(STATE_EXPANDED);
+                }
+            }
+            actionClickListener.onClick(view);
+            mBottomSheetBehavior.processQueueForStateChange();
+        });
     }
 
     /**
-     * Populates attributions(wallpaper info) to the information page.
+     * Sets a selected listener to a specific action. This is triggered each time the bottom
+     * action's selected state changes.
      *
-     * <p>Once get called, the {@link OnClickListener} to show/hide the information page will be
-     * set for the {@code BottomAction.INFORMATION}.
+     * @param bottomAction the specific action
+     * @param actionSelectedListener the selected listener for the action
      */
-    public void populateInfoPage(List<String> attributions, boolean showMetadata) {
-        resetInfoPage();
-
-        // Ensure the ClickListener can work normally if has info been populated, since it could be
-        // removed by #clearActionClickListeners.
-        setActionClickListener(BottomAction.INFORMATION, unused ->
-            mBottomSheetBehavior.setState(mBottomSheetBehavior.getState() == STATE_COLLAPSED
-                ? STATE_EXPANDED
-                : STATE_COLLAPSED
-            )
-        );
-
-        if (attributions.size() > 0 && attributions.get(0) != null) {
-            mAttributionTitle.setText(attributions.get(0));
+    public void setActionSelectedListener(
+            BottomAction bottomAction, OnActionSelectedListener actionSelectedListener) {
+        if (mActionSelectedListeners.containsKey(bottomAction)) {
+            throw new IllegalStateException(
+                    "Had already set a selected listener to button: " + bottomAction);
         }
-
-        if (showMetadata) {
-            if (attributions.size() > 1 && attributions.get(1) != null) {
-                mAttributionSubtitle1.setVisibility(View.VISIBLE);
-                mAttributionSubtitle1.setText(attributions.get(1));
-            }
-
-            if (attributions.size() > 2 && attributions.get(2) != null) {
-                mAttributionSubtitle2.setVisibility(View.VISIBLE);
-                mAttributionSubtitle2.setText(attributions.get(2));
-            }
-        }
+        mActionSelectedListeners.put(bottomAction, actionSelectedListener);
     }
 
+    /** Binds the cancel button to back key. */
+    public void bindBackButtonToSystemBackKey(Activity activity) {
+        findViewById(R.id.action_back).setOnClickListener(v -> activity.onBackPressed());
+    }
+
+    /** Returns {@code true} if visible. */
+    public boolean isVisible() {
+        return getVisibility() == VISIBLE;
+    }
 
     /** Shows {@link BottomActionBar}. */
     public void show() {
@@ -171,12 +284,36 @@
     }
 
     /**
+     * Adds the visibility change listener.
+     *
+     * @param visibilityChangeListener the listener to be notified.
+     */
+    public void addVisibilityChangeListener(VisibilityChangeListener visibilityChangeListener) {
+        if (visibilityChangeListener == null) {
+            return;
+        }
+        mVisibilityChangeListeners.add(visibilityChangeListener);
+        visibilityChangeListener.onVisibilityChange(isVisible());
+    }
+
+    /**
+     * Sets a AccessibilityCallback.
+     *
+     * @param accessibilityCallback the callback to be notified.
+     */
+    public void setAccessibilityCallback(@Nullable AccessibilityCallback accessibilityCallback) {
+        mAccessibilityCallback = accessibilityCallback;
+    }
+
+    /**
      * Shows the specific actions.
      *
      * @param actions the specific actions
      */
-    public void showActions(EnumSet<BottomAction> actions) {
-        showActions(actions, true);
+    public void showActions(BottomAction... actions) {
+        for (BottomAction action : actions) {
+            mActionMap.get(action).setVisibility(VISIBLE);
+        }
     }
 
     /**
@@ -184,10 +321,13 @@
      *
      * @param actions the specific actions
      */
-    public void hideActions(EnumSet<BottomAction> actions) {
-        showActions(actions, false);
-        if (actions.contains(BottomAction.INFORMATION)) {
-            mBottomSheetBehavior.setState(STATE_COLLAPSED);
+    public void hideActions(BottomAction... actions) {
+        for (BottomAction action : actions) {
+            mActionMap.get(action).setVisibility(GONE);
+
+            if (isExpandable(action) && mSelectedAction == action) {
+                hideBottomSheetAndDeselectButtonIfExpanded();
+            }
         }
     }
 
@@ -196,37 +336,230 @@
      *
      * @param actions the specific actions which will be shown. Others will be hidden.
      */
-    public void showActionsOnly(EnumSet<BottomAction> actions) {
-        showActions(actions);
-        hideActions(EnumSet.complementOf(actions));
+    public void showActionsOnly(BottomAction... actions) {
+        final Set<BottomAction> actionsSet = new HashSet<>(Arrays.asList(actions));
+
+        mActionMap.keySet().forEach(action -> {
+            if (actionsSet.contains(action)) {
+                showActions(action);
+            } else {
+                hideActions(action);
+            }
+        });
+    }
+
+    /**
+     * Checks if the specific actions are shown.
+     *
+     * @param actions the specific actions to be verified
+     * @return {@code true} if the actions are shown; {@code false} otherwise
+     */
+    public boolean areActionsShown(BottomAction... actions) {
+        final Set<BottomAction> actionsSet = new HashSet<>(Arrays.asList(actions));
+        return actionsSet.stream().allMatch(bottomAction -> {
+            View view = mActionMap.get(bottomAction);
+            return view != null && view.getVisibility() == VISIBLE;
+        });
+    }
+
+    /**
+     * All actions will be hidden.
+     */
+    public void hideAllActions() {
+        showActionsOnly(/* No actions to show */);
     }
 
     /** Enables all the actions' {@link View}. */
     public void enableActions() {
-        enableActions(true);
+        enableActions(BottomAction.values());
     }
 
     /** Disables all the actions' {@link View}. */
     public void disableActions() {
-        enableActions(false);
+        disableActions(BottomAction.values());
     }
 
-    private void enableActions(boolean enable) {
-        mActionList.forEach((bottomAction, view) -> view.setEnabled(enable));
+    /**
+     * Enables specified actions' {@link View}.
+     *
+     * @param actions the specified actions to enable their views
+     */
+    public void enableActions(BottomAction... actions) {
+        for (BottomAction action : actions) {
+            mActionMap.get(action).setEnabled(true);
+        }
     }
 
-    private void showActions(EnumSet<BottomAction> actions, boolean show) {
-        actions.forEach(bottomAction ->
-                mActionList.get(bottomAction).setVisibility(show ? VISIBLE : GONE));
+    /**
+     * Disables specified actions' {@link View}.
+     *
+     * @param actions the specified actions to disable their views
+     */
+    public void disableActions(BottomAction... actions) {
+        for (BottomAction action : actions) {
+            mActionMap.get(action).setEnabled(false);
+        }
     }
 
-    private void resetInfoPage() {
-        mAttributionTitle.setText(null);
+    /** Sets a default selected action button. */
+    public void setDefaultSelectedButton(BottomAction action) {
+        if (mSelectedAction == null) {
+            mSelectedAction = action;
+            updateSelectedState(mSelectedAction, /* selected= */ true);
+        }
+    }
 
-        mAttributionSubtitle1.setText(null);
-        mAttributionSubtitle1.setVisibility(GONE);
+    /** Deselects an action button. */
+    public void deselectAction(BottomAction action) {
+        if (isExpandable(action)) {
+            mBottomSheetBehavior.setState(STATE_COLLAPSED);
+        }
+        updateSelectedState(action, /* selected= */ false);
+        if (action == mSelectedAction) {
+            mSelectedAction = null;
+        }
+    }
 
-        mAttributionSubtitle2.setText(null);
-        mAttributionSubtitle2.setVisibility(GONE);
+    public boolean isActionSelected(BottomAction action) {
+        return mActionMap.get(action).isSelected();
+    }
+
+    /** Resets {@link BottomActionBar} to initial state. */
+    public void reset() {
+        // Not visible by default, see res/layout/bottom_action_bar.xml
+        hide();
+        // All actions are hide and enabled by default, see res/layout/bottom_action_bar.xml
+        hideAllActions();
+        enableActions();
+        // Clears all the actions' click listeners
+        mActionMap.values().forEach(v -> v.setOnClickListener(null));
+        findViewById(R.id.action_back).setOnClickListener(null);
+        // Deselect all buttons.
+        mActionMap.keySet().forEach(a -> updateSelectedState(a, /* selected= */ false));
+        // Clear values.
+        mContentViewMap.clear();
+        mActionSelectedListeners.clear();
+        mBottomSheetView.removeAllViews();
+        mBottomSheetBehavior.reset();
+        mSelectedAction = null;
+    }
+
+    private void updateSelectedState(BottomAction bottomAction, boolean selected) {
+        View bottomActionView = mActionMap.get(bottomAction);
+        if (bottomActionView.isSelected() == selected) {
+            return;
+        }
+
+        OnActionSelectedListener listener = mActionSelectedListeners.get(bottomAction);
+        if (listener != null) {
+            listener.onActionSelected(selected);
+        }
+        bottomActionView.setSelected(selected);
+    }
+
+    private void hideBottomSheetAndDeselectButtonIfExpanded() {
+        if (isExpandable(mSelectedAction) && mBottomSheetBehavior.getState() == STATE_EXPANDED) {
+            mBottomSheetBehavior.setState(STATE_COLLAPSED);
+            updateSelectedState(mSelectedAction, /* selected= */ false);
+            mSelectedAction = null;
+        }
+    }
+
+    private void updateContentViewFor(BottomAction action) {
+        mContentViewMap.forEach((a, v) -> v.setVisibility(a.equals(action) ? VISIBLE : GONE));
+    }
+
+    private boolean isExpandable(BottomAction action) {
+        return action != null && mContentViewMap.containsKey(action);
+    }
+
+    private void notifyAccessibilityCallback(int state) {
+        if (mAccessibilityCallback == null) {
+            return;
+        }
+
+        if (state == STATE_COLLAPSED) {
+            mAccessibilityCallback.onBottomSheetCollapsed();
+        } else if (state == STATE_EXPANDED) {
+            mAccessibilityCallback.onBottomSheetExpanded();
+        }
+    }
+
+    /** A {@link BottomSheetBehavior} that can process a queue of bottom sheet states.*/
+    public static class QueueStateBottomSheetBehavior<V extends View>
+            extends BottomSheetBehavior<V> {
+
+        private final Deque<Integer> mStateQueue = new ArrayDeque<>();
+        private boolean mIsQueueProcessing;
+
+        public QueueStateBottomSheetBehavior(Context context, @Nullable AttributeSet attrs) {
+            super(context, attrs);
+            // Binds the default callback for processing queue.
+            setBottomSheetCallback(null);
+        }
+
+        /** Enqueues the bottom sheet states. */
+        public void enqueue(int state) {
+            if (!mStateQueue.isEmpty() && mStateQueue.getLast() == state) {
+                return;
+            }
+            mStateQueue.add(state);
+        }
+
+        /** Processes the queue of bottom sheet state that was set via {@link #enqueue}. */
+        public void processQueueForStateChange() {
+            if (mStateQueue.isEmpty()) {
+                return;
+            }
+            setState(mStateQueue.getFirst());
+            mIsQueueProcessing = true;
+        }
+
+        /**
+         * Returns {@code true} if the queue is processing. For example, if the bottom sheet is
+         * going with expanded-collapsed-expanded, it would return {@code true} until last expanded
+         * state is finished.
+         */
+        public boolean isQueueProcessing() {
+            return mIsQueueProcessing;
+        }
+
+        /** Resets the queue state. */
+        public void reset() {
+            mStateQueue.clear();
+            mIsQueueProcessing = false;
+        }
+
+        @Override
+        public void setBottomSheetCallback(BottomSheetCallback callback) {
+            super.setBottomSheetCallback(new BottomSheetCallback() {
+                @Override
+                public void onStateChanged(@NonNull View bottomSheet, int newState) {
+                    if (!mStateQueue.isEmpty()) {
+                        if (newState == mStateQueue.getFirst()) {
+                            mStateQueue.removeFirst();
+                            if (mStateQueue.isEmpty()) {
+                                mIsQueueProcessing = false;
+                            } else {
+                                setState(mStateQueue.getFirst());
+                            }
+                        } else {
+                            setState(mStateQueue.getFirst());
+                        }
+                    }
+
+                    if (callback != null) {
+                        callback.onStateChanged(bottomSheet, newState);
+                    }
+                }
+
+                @Override
+                public void onSlide(@NonNull View bottomSheet, float slideOffset) {
+                    if (callback != null) {
+                        callback.onSlide(bottomSheet, slideOffset);
+                    }
+                }
+            });
+        }
     }
 }
diff --git a/src/com/android/wallpaper/widget/LockScreenPreviewer.java b/src/com/android/wallpaper/widget/LockScreenPreviewer.java
new file mode 100644
index 0000000..9a6f7d4
--- /dev/null
+++ b/src/com/android/wallpaper/widget/LockScreenPreviewer.java
@@ -0,0 +1,160 @@
+/*
+ * 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.widget;
+
+import static android.view.View.MeasureSpec.EXACTLY;
+import static android.view.View.MeasureSpec.makeMeasureSpec;
+
+import android.app.Activity;
+import android.app.WallpaperColors;
+import android.content.res.ColorStateList;
+import android.content.res.Configuration;
+import android.graphics.Point;
+import android.text.format.DateFormat;
+import android.view.Display;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.MainThread;
+import androidx.annotation.Nullable;
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleObserver;
+import androidx.lifecycle.OnLifecycleEvent;
+
+import com.android.wallpaper.R;
+import com.android.wallpaper.util.ScreenSizeCalculator;
+import com.android.wallpaper.util.TimeUtils;
+import com.android.wallpaper.util.TimeUtils.TimeTicker;
+
+import java.util.Calendar;
+import java.util.Locale;
+import java.util.TimeZone;
+
+/** A class to load the custom lockscreen view to the preview screen. */
+public class LockScreenPreviewer implements LifecycleObserver {
+
+    private static final String DEFAULT_DATE_PATTERN = "EEE, MMM d";
+
+    private Activity mActivity;
+    private String mDatePattern;
+    private TimeTicker mTicker;
+    private ImageView mLockIcon;
+    private TextView mLockTime;
+    private TextView mLockDate;
+
+    public LockScreenPreviewer(Lifecycle lifecycle, Activity activity, ViewGroup previewContainer) {
+        lifecycle.addObserver(this);
+        mActivity = activity;
+        View contentView = LayoutInflater.from(mActivity).inflate(
+                R.layout.lock_screen_preview, /* root= */ null);
+        mLockIcon = contentView.findViewById(R.id.lock_icon);
+        mLockTime = contentView.findViewById(R.id.lock_time);
+        mLockDate = contentView.findViewById(R.id.lock_date);
+        mDatePattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), DEFAULT_DATE_PATTERN);
+
+        Display defaultDisplay = mActivity.getWindowManager().getDefaultDisplay();
+        Point screenSize = ScreenSizeCalculator.getInstance().getScreenSize(defaultDisplay);
+
+        Configuration config = mActivity.getResources().getConfiguration();
+        final boolean directionLTR = config.getLayoutDirection() == View.LAYOUT_DIRECTION_LTR;
+
+        View rootView = previewContainer.getRootView();
+        rootView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
+            @Override
+            public void onLayoutChange(View view, int left, int top, int right, int bottom,
+                                       int oldLeft, int oldTop, int oldRight, int oldBottom) {
+                int cardHeight = previewContainer.getMeasuredHeight();
+
+                // Relayout the content view to match full screen size.
+                contentView.measure(
+                        makeMeasureSpec(screenSize.x, EXACTLY),
+                        makeMeasureSpec(screenSize.y, EXACTLY));
+                contentView.layout(0, 0, screenSize.x, screenSize.y);
+
+                // Scale the content view from full screen size to the container(card) size.
+                float scale = (float) cardHeight / screenSize.y;
+                contentView.setScaleX(scale);
+                contentView.setScaleY(scale);
+                // The pivot point is centered by default, set to (0, 0).
+                contentView.setPivotX(directionLTR ? 0f : contentView.getMeasuredWidth());
+                contentView.setPivotY(0f);
+
+                previewContainer.removeAllViews();
+                previewContainer.addView(
+                        contentView,
+                        contentView.getMeasuredWidth(),
+                        contentView.getMeasuredHeight());
+                rootView.removeOnLayoutChangeListener(this);
+            }
+        });
+    }
+
+    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
+    @MainThread
+    public void onResume() {
+        mTicker = TimeTicker.registerNewReceiver(mActivity, this::updateDateTime);
+        updateDateTime();
+    }
+
+    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
+    @MainThread
+    public void onPause() {
+        if (mActivity != null) {
+            mActivity.unregisterReceiver(mTicker);
+        }
+    }
+
+    /**
+     * Sets the content's color based on the wallpaper's {@link WallpaperColors}.
+     *
+     * @param colors the {@link WallpaperColors} of the wallpaper which the lock screen overlay
+     *               will attach to, or {@code null} to use light color as default
+     */
+    public void setColor(@Nullable WallpaperColors colors) {
+        boolean useLightTextColor = colors == null
+                || (colors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) == 0;
+        int color = mActivity.getColor(useLightTextColor
+                ? R.color.text_color_light : R.color.text_color_dark);
+        int textShadowColor = mActivity.getColor(useLightTextColor
+                ? R.color.smartspace_preview_shadow_color_dark
+                : R.color.smartspace_preview_shadow_color_transparent);
+        mLockIcon.setImageTintList(ColorStateList.valueOf(color));
+        mLockDate.setTextColor(color);
+        mLockTime.setTextColor(color);
+
+        mLockDate.setShadowLayer(
+                mActivity.getResources().getDimension(
+                        R.dimen.smartspace_preview_key_ambient_shadow_blur),
+                /* dx = */ 0,
+                /* dy = */ 0,
+                textShadowColor);
+        mLockTime.setShadowLayer(
+                mActivity.getResources().getDimension(
+                        R.dimen.smartspace_preview_key_ambient_shadow_blur),
+                /* dx = */ 0,
+                /* dy = */ 0,
+                textShadowColor);
+    }
+
+    private void updateDateTime() {
+        Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
+        mLockTime.setText(TimeUtils.getFormattedTime(mActivity, calendar));
+        mLockDate.setText(DateFormat.format(mDatePattern, calendar));
+    }
+}
diff --git a/src/com/android/wallpaper/widget/PreviewPager.java b/src/com/android/wallpaper/widget/PreviewPager.java
index 1e11abc..af7680b 100644
--- a/src/com/android/wallpaper/widget/PreviewPager.java
+++ b/src/com/android/wallpaper/widget/PreviewPager.java
@@ -21,20 +21,25 @@
 import android.database.DataSetObserver;
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
-import android.util.TypedValue;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
+import android.view.WindowManager;
+import android.view.animation.Interpolator;
 import android.widget.LinearLayout;
+import android.widget.Scroller;
 
 import androidx.annotation.Nullable;
 import androidx.core.text.TextUtilsCompat;
 import androidx.core.view.ViewCompat;
+import androidx.interpolator.view.animation.LinearOutSlowInInterpolator;
 import androidx.viewpager.widget.PagerAdapter;
 import androidx.viewpager.widget.ViewPager;
 import androidx.viewpager.widget.ViewPager.OnPageChangeListener;
 
 import com.android.wallpaper.R;
 
+import java.lang.reflect.Field;
 import java.util.Locale;
 
 /**
@@ -45,6 +50,7 @@
  */
 public class PreviewPager extends LinearLayout {
 
+    private static final String TAG = "PreviewPager";
     private static final int STYLE_PEEKING = 0;
     private static final int STYLE_ASPECT_RATIO = 1;
 
@@ -58,8 +64,6 @@
     private PagerAdapter mAdapter;
     private ViewPager.OnPageChangeListener mExternalPageListener;
     private float mScreenAspectRatio;
-    /** The maximum height ratio of PreviewPager and its parent view. */
-    private float mMaxHeightRatio;
 
     public PreviewPager(Context context) {
         this(context, null);
@@ -80,10 +84,6 @@
 
         a.recycle();
 
-        TypedValue ratioValue = new TypedValue();
-        res.getValue(R.dimen.preview_pager_maximum_height_ratio, ratioValue, true);
-        mMaxHeightRatio = ratioValue.getFloat();
-
         mViewPager = findViewById(R.id.preview_viewpager);
         mViewPager.setPageMargin(res.getDimensionPixelOffset(R.dimen.preview_page_gap));
         mViewPager.setClipToPadding(false);
@@ -107,6 +107,7 @@
                     0,
                     res.getDimensionPixelOffset(R.dimen.preview_page_bottom_margin));
         }
+        setupPagerScroller(context);
         mPageIndicator = findViewById(R.id.page_indicator);
         mPreviousArrow = findViewById(R.id.arrow_previous);
         mPreviousArrow.setOnClickListener(v -> {
@@ -172,7 +173,12 @@
      * Call this method to set the {@link PagerAdapter} backing the {@link ViewPager} in this
      * widget.
      */
-    public void setAdapter(PagerAdapter adapter) {
+    public void setAdapter(@Nullable PagerAdapter adapter) {
+        if (adapter == null) {
+            mAdapter = null;
+            mViewPager.setAdapter(null);
+            return;
+        }
         int initialPage = 0;
         if (mViewPager.getAdapter() != null) {
             initialPage = isRtl() ? mAdapter.getCount() - 1 - mViewPager.getCurrentItem()
@@ -191,7 +197,12 @@
         updateIndicator(mViewPager.getCurrentItem());
     }
 
-    private boolean isRtl() {
+    /**
+     * Checks if it is in RTL mode.
+     *
+     * @return {@code true} if it's in RTL mode; {@code false} otherwise.
+     */
+    public boolean isRtl() {
         if (ViewCompat.isLayoutDirectionResolved(mViewPager)) {
             return ViewCompat.getLayoutDirection(mViewPager) == ViewCompat.LAYOUT_DIRECTION_RTL;
         }
@@ -211,6 +222,19 @@
         mPageIndicator.setLocation(mViewPager.getCurrentItem());
     }
 
+    private void setupPagerScroller(Context context) {
+        try {
+            // TODO(b/159082165): Revisit if we can refactor it better.
+            Field scroller = ViewPager.class.getDeclaredField("mScroller");
+            scroller.setAccessible(true);
+            PreviewPagerScroller previewPagerScroller =
+                    new PreviewPagerScroller(context, new LinearOutSlowInInterpolator());
+            scroller.set(mViewPager, previewPagerScroller);
+        } catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) {
+            Log.e(TAG, "Failed to setup pager scroller.", e);
+        }
+    }
+
     private ViewPager.OnPageChangeListener createPageListener() {
         return new ViewPager.OnPageChangeListener() {
              @Override
@@ -259,4 +283,18 @@
             mNextArrow.setVisibility(View.GONE);
         }
     }
+
+    private static class PreviewPagerScroller extends Scroller {
+
+        private static final int DURATION_MS = 500;
+
+        PreviewPagerScroller(Context context, Interpolator interpolator) {
+            super(context, interpolator);
+        }
+
+        @Override
+        public void startScroll(int startX, int startY, int dx, int dy, int duration) {
+            super.startScroll(startX, startY, dx, dy, DURATION_MS);
+        }
+    }
 }
diff --git a/src/com/android/wallpaper/widget/WallpaperColorsLoader.java b/src/com/android/wallpaper/widget/WallpaperColorsLoader.java
new file mode 100644
index 0000000..e29a1f6
--- /dev/null
+++ b/src/com/android/wallpaper/widget/WallpaperColorsLoader.java
@@ -0,0 +1,78 @@
+/*
+ * 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.widget;
+
+import android.app.WallpaperColors;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Point;
+import android.util.Log;
+import android.util.LruCache;
+import android.view.Display;
+import android.view.WindowManager;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.android.wallpaper.asset.Asset;
+import com.android.wallpaper.asset.BitmapCachingAsset;
+import com.android.wallpaper.util.ScreenSizeCalculator;
+
+/** A class to load the {@link WallpaperColors} from wallpaper {@link Asset}. */
+public class WallpaperColorsLoader {
+    private static final String TAG = "WallpaperColorsLoader";
+
+    /** Callback of loading a {@link WallpaperColors}. */
+    public interface Callback {
+        /** Gets called when a {@link WallpaperColors} is loaded. */
+        void onLoaded(@Nullable WallpaperColors colors);
+    }
+
+    // The max size should be at least 2 for storing home and lockscreen wallpaper if they are
+    // different.
+    private static LruCache<Asset, WallpaperColors> sCache = new LruCache<>(/* maxSize= */ 6);
+
+    /** Gets the {@link WallpaperColors} from the wallpaper {@link Asset}. */
+    public static void getWallpaperColors(Context context, @NonNull Asset asset,
+                                          @NonNull Callback callback) {
+        WallpaperColors cached = sCache.get(asset);
+        if (cached != null) {
+            callback.onLoaded(cached);
+            return;
+        }
+
+        Display display = context.getSystemService(WindowManager.class).getDefaultDisplay();
+        Point screen = ScreenSizeCalculator.getInstance().getScreenSize(display);
+        new BitmapCachingAsset(context, asset).decodeBitmap(screen.y / 2, screen.x / 2, bitmap -> {
+            if (bitmap != null) {
+                boolean shouldRecycle = false;
+                if (bitmap.getConfig() == Bitmap.Config.HARDWARE) {
+                    bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, false);
+                    shouldRecycle = true;
+                }
+                WallpaperColors colors = WallpaperColors.fromBitmap(bitmap);
+                sCache.put(asset, colors);
+                callback.onLoaded(colors);
+                if (shouldRecycle) {
+                    bitmap.recycle();
+                }
+            } else {
+                Log.i(TAG, "Can't get wallpaper colors from a null bitmap, uses null color.");
+                callback.onLoaded(null);
+            }
+        });
+    }
+}
diff --git a/src/com/android/wallpaper/widget/WallpaperInfoView.java b/src/com/android/wallpaper/widget/WallpaperInfoView.java
new file mode 100644
index 0000000..db5e0e3
--- /dev/null
+++ b/src/com/android/wallpaper/widget/WallpaperInfoView.java
@@ -0,0 +1,98 @@
+/*
+ * 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.widget;
+
+import android.content.Context;
+import android.content.Intent;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.Button;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.android.wallpaper.R;
+import com.android.wallpaper.model.WallpaperInfo;
+
+import java.util.List;
+
+/** A view for displaying wallpaper info. */
+public class WallpaperInfoView extends LinearLayout {
+    private TextView mTitle;
+    private TextView mSubtitle1;
+    private TextView mSubtitle2;
+    private Button mExploreButton;
+
+    public WallpaperInfoView(Context context, @Nullable AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        mTitle = findViewById(R.id.wallpaper_info_title);
+        mSubtitle1 = findViewById(R.id.wallpaper_info_subtitle1);
+        mSubtitle2 = findViewById(R.id.wallpaper_info_subtitle2);
+        mExploreButton = findViewById(R.id.wallpaper_info_explore_button);
+    }
+
+    /** Populates wallpaper info. */
+    public void populateWallpaperInfo(@NonNull WallpaperInfo wallpaperInfo,
+                                      CharSequence actionLabel,
+                                      @Nullable Intent exploreIntent,
+                                      OnClickListener exploreButtonClickListener) {
+        final List<String> attributions = wallpaperInfo.getAttributions(getContext());
+
+        // Reset
+        mTitle.setText(null);
+        mSubtitle1.setText(null);
+        mSubtitle1.setVisibility(View.GONE);
+        mSubtitle2.setText(null);
+        mSubtitle2.setVisibility(View.GONE);
+        mExploreButton.setText(null);
+        mExploreButton.setOnClickListener(null);
+        mExploreButton.setVisibility(View.GONE);
+
+        if (attributions.size() > 0 && attributions.get(0) != null) {
+            mTitle.setText(attributions.get(0));
+        }
+
+        if (shouldShowMetadata(wallpaperInfo)) {
+            if (attributions.size() > 1 && attributions.get(1) != null) {
+                mSubtitle1.setVisibility(View.VISIBLE);
+                mSubtitle1.setText(attributions.get(1));
+            }
+
+            if (attributions.size() > 2 && attributions.get(2) != null) {
+                mSubtitle2.setVisibility(View.VISIBLE);
+                mSubtitle2.setText(attributions.get(2));
+            }
+
+            if (exploreIntent != null) {
+                mExploreButton.setVisibility(View.VISIBLE);
+                mExploreButton.setText(actionLabel);
+                mExploreButton.setOnClickListener(exploreButtonClickListener);
+            }
+        }
+    }
+
+    private boolean shouldShowMetadata(WallpaperInfo wallpaperInfo) {
+        android.app.WallpaperInfo wallpaperComponent = wallpaperInfo.getWallpaperComponent();
+        return wallpaperComponent == null || wallpaperComponent.getShowMetadataInPreview();
+    }
+}
diff --git a/src/com/android/wallpaper/widget/WallpaperPickerRecyclerViewAccessibilityDelegate.java b/src/com/android/wallpaper/widget/WallpaperPickerRecyclerViewAccessibilityDelegate.java
new file mode 100644
index 0000000..b983780
--- /dev/null
+++ b/src/com/android/wallpaper/widget/WallpaperPickerRecyclerViewAccessibilityDelegate.java
@@ -0,0 +1,77 @@
+/*
+ * 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.widget;
+
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate;
+
+import com.google.android.material.bottomsheet.BottomSheetBehavior;
+
+/**
+ * An AccessibilityDelegate class used to fix some RecyclerView-related Talkback issues.
+ * <p>
+ * This is to fix a bug which TalkBack can't visit all wallpaper category/wallpaper items.
+ */
+public class WallpaperPickerRecyclerViewAccessibilityDelegate
+        extends RecyclerViewAccessibilityDelegate {
+
+    /**
+     * Interface to be implemented by an Fragment hosting a
+     * {@link WallpaperPickerRecyclerViewAccessibilityDelegate}
+     */
+    public interface BottomSheetHost {
+        /**
+         * Expands the bottom sheet if it's not expanded.
+         */
+        void expandBottomSheet();
+
+        /**
+         * Gets bottom sheet current state.
+         */
+        int getBottomSheetState();
+    }
+
+    private final RecyclerView mGridRecyclerView;
+    private final BottomSheetHost mBottomSheetHost;
+    private final int mColumns;
+
+    public WallpaperPickerRecyclerViewAccessibilityDelegate(
+            RecyclerView recyclerView, BottomSheetHost bottomSheetHost, int columns) {
+        super(recyclerView);
+        mGridRecyclerView = recyclerView;
+        mBottomSheetHost = bottomSheetHost;
+        mColumns = columns;
+    }
+
+    @Override
+    public boolean onRequestSendAccessibilityEvent(
+            ViewGroup host, View child, AccessibilityEvent event) {
+        if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) {
+            int itemPos = mGridRecyclerView.getChildLayoutPosition(child);
+
+            // Expand the bottom sheet when TB travel to second column.
+            if (mBottomSheetHost != null && mBottomSheetHost.getBottomSheetState()
+                    != BottomSheetBehavior.STATE_EXPANDED && itemPos >= mColumns) {
+                mBottomSheetHost.expandBottomSheet();
+            }
+        }
+        return super.onRequestSendAccessibilityEvent(host, child, event);
+    }
+}
diff --git a/src_override/com/android/wallpaper/module/WallpapersInjector.java b/src_override/com/android/wallpaper/module/WallpapersInjector.java
index 5a39524..124dfc4 100755
--- a/src_override/com/android/wallpaper/module/WallpapersInjector.java
+++ b/src_override/com/android/wallpaper/module/WallpapersInjector.java
@@ -65,11 +65,13 @@
 
     @Override
     public Fragment getPreviewFragment(
-        Context context,
-        WallpaperInfo wallpaperInfo,
-        int mode,
-        boolean testingModeEnabled) {
-        return ImagePreviewFragment.newInstance(wallpaperInfo, mode, testingModeEnabled);
+            Context context,
+            WallpaperInfo wallpaperInfo,
+            int mode,
+            boolean viewAsHome,
+            boolean testingModeEnabled) {
+        return ImagePreviewFragment.newInstance(wallpaperInfo, mode, viewAsHome,
+                testingModeEnabled);
     }
 
     @Override
diff --git a/tests/src/com/android/wallpaper/picker/individual/IndividualPickerActivityTest.java b/tests/src/com/android/wallpaper/picker/individual/IndividualPickerActivityTest.java
index 2a0fbc4..c9170bc 100644
--- a/tests/src/com/android/wallpaper/picker/individual/IndividualPickerActivityTest.java
+++ b/tests/src/com/android/wallpaper/picker/individual/IndividualPickerActivityTest.java
@@ -19,12 +19,9 @@
 import static androidx.test.espresso.action.ViewActions.click;
 import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist;
 import static androidx.test.espresso.assertion.ViewAssertions.matches;
-import static androidx.test.espresso.intent.Intents.intended;
 import static androidx.test.espresso.intent.Intents.intending;
-import static androidx.test.espresso.intent.matcher.ComponentNameMatchers.hasClassName;
 import static androidx.test.espresso.intent.matcher.IntentMatchers.hasAction;
-import static androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent;
-import static androidx.test.espresso.intent.matcher.IntentMatchers.hasExtra;
+import static androidx.test.espresso.matcher.RootMatchers.isDialog;
 import static androidx.test.espresso.matcher.ViewMatchers.isChecked;
 import static androidx.test.espresso.matcher.ViewMatchers.isClickable;
 import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
@@ -33,8 +30,6 @@
 
 import static junit.framework.TestCase.assertFalse;
 
-import static org.hamcrest.Matchers.allOf;
-import static org.hamcrest.Matchers.equalTo;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
@@ -45,8 +40,6 @@
 import android.app.WallpaperManager;
 import android.content.Context;
 import android.content.Intent;
-import android.graphics.drawable.ColorDrawable;
-import android.widget.FrameLayout;
 
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.test.espresso.contrib.RecyclerViewActions;
@@ -57,7 +50,6 @@
 import androidx.test.rule.ActivityTestRule;
 
 import com.android.wallpaper.R;
-import com.android.wallpaper.config.Flags;
 import com.android.wallpaper.model.Category;
 import com.android.wallpaper.model.PickerIntentFactory;
 import com.android.wallpaper.model.WallpaperInfo;
@@ -69,7 +61,6 @@
 import com.android.wallpaper.testing.TestCategoryProvider;
 import com.android.wallpaper.testing.TestFormFactorChecker;
 import com.android.wallpaper.testing.TestInjector;
-import com.android.wallpaper.testing.TestUserEventLogger;
 import com.android.wallpaper.testing.TestWallpaperCategory;
 import com.android.wallpaper.testing.TestWallpaperInfo;
 import com.android.wallpaper.testing.TestWallpaperRotationInitializer;
@@ -185,7 +176,7 @@
     }
 
     @Test
-    public void testClickTile_Mobile_LaunchesPreviewActivityWithWallpaper() {
+    public void testClickTile_Mobile_showsBottomActions() {
         mTestFormFactorChecker.setFormFactor(FormFactorChecker.FORM_FACTOR_MOBILE);
 
         setActivityWithMockWallpapers(false /* isRotationEnabled */,
@@ -194,121 +185,19 @@
 
         onView(withId(R.id.wallpaper_grid)).perform(
                 RecyclerViewActions.actionOnItemAtPosition(0, click()));
-        intended(allOf(
-                hasComponent(hasClassName("com.android.wallpaper.picker.PreviewActivity")),
-                hasExtra(equalTo(EXTRA_WALLPAPER_INFO), equalTo(sWallpaperInfo1))));
 
-        Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
-        TestUserEventLogger eventLogger = (TestUserEventLogger) mInjector.getUserEventLogger(
-                context);
-        assertEquals(1, eventLogger.getNumIndividualWallpaperSelectedEvents());
-        assertEquals(sWallpaperInfo1.getCollectionId(context), eventLogger.getLastCollectionId());
+        onView(withId(R.id.action_back)).check(matches(isDisplayed()));
+        onView(withId(R.id.action_information)).check(matches(isDisplayed()));
+        onView(withId(R.id.action_apply)).check(matches(isDisplayed()));
     }
 
-    /**
-     * Tests that the static daily rotation tile (with flag dynamicStartRotationTileEnabled=false)
-     * has a background of the light blue accent color and says "Tap to turn on".
-     */
     @Test
-    public void testRotationEnabled_StaticDailyRotationTile() {
-        Flags.dynamicStartRotationTileEnabled = false;
+    public void testClickDailyRefreshAction_ShowsStartRotationDialog() {
         setActivityWithMockWallpapers(true /* isRotationEnabled */,
                 WallpaperRotationInitializer.ROTATION_NOT_INITIALIZED);
         getActivity();
 
-        onView(withText(R.string.daily_refresh_tile_title)).check(matches(isDisplayed()));
-        onView(withText(R.string.daily_refresh_tile_subtitle)).check(matches(isDisplayed()));
-
-        // Check that the background color of the "daily refresh" tile is the blue accent color.
-        FrameLayout rotationTile = getActivity().findViewById(R.id.daily_refresh);
-        int backgroundColor = ((ColorDrawable) rotationTile.getBackground()).getColor();
-        assertEquals(getActivity().getResources().getColor(R.color.accent_color),
-                backgroundColor);
-    }
-
-    /**
-     * Tests that when rotation is enabled and the rotation for this category is already in effect
-     * on both home & lock screens, then the "start rotation" tile reads "Home & Lock".
-     */
-    @Test
-    public void testRotationEnabled_RotationInitializedHomeAndLock() {
-        Flags.dynamicStartRotationTileEnabled = true;
-
-        setActivityWithMockWallpapers(true /* isRotationEnabled */,
-                WallpaperRotationInitializer.ROTATION_HOME_AND_LOCK);
-        getActivity();
-
-        onView(withText(R.string.daily_refresh_tile_title)).check(matches(isDisplayed()));
-        onView(withText(R.string.home_and_lock_short_label)).check(matches(isDisplayed()));
-    }
-
-    /**
-     * Tests that when rotation is enabled and the rotation is aleady for this category is already
-     * in
-     * effect on the home-screen only, then the "start rotation" tile reads "Home screen".
-     */
-    @Test
-    public void testRotationEnabled_RotationInitializedHomeScreenOnly() {
-        Flags.dynamicStartRotationTileEnabled = true;
-
-        setActivityWithMockWallpapers(true /* isRotationEnabled */,
-                WallpaperRotationInitializer.ROTATION_HOME_ONLY);
-        getActivity();
-
-        onView(withText(R.string.daily_refresh_tile_title)).check(matches(isDisplayed()));
-        onView(withText(R.string.home_screen_message)).check(matches(isDisplayed()));
-    }
-
-    /**
-     * Tests that after the IndividualPickerActivity loads, if the state of the current category's
-     * rotation changes while the activity is restarted, then the UI for the "start rotation" tile
-     * changes to reflect that new state.
-     */
-    @Test
-    public void testActivityRestarted_RotationStateChanges_StartRotationTileUpdates()
-            throws Throwable {
-        Flags.dynamicStartRotationTileEnabled = true;
-
-        setActivityWithMockWallpapers(true /* isRotationEnabled */,
-                WallpaperRotationInitializer.ROTATION_HOME_ONLY);
-
-        onView(withText(R.string.daily_refresh_tile_title)).check(matches(isDisplayed()));
-        onView(withText(R.string.home_screen_message)).check(matches(isDisplayed()));
-
-        // Now change the rotation initialization state such that the tile should say
-        // "Tap to turn on" after the activity resumes.
-        setUpFragmentForTesting();
-        TestWallpaperRotationInitializer
-                testWPRotationInitializer = (TestWallpaperRotationInitializer)
-                mTestCategory.getWallpaperRotationInitializer();
-        testWPRotationInitializer.setRotationInitializationState(
-                WallpaperRotationInitializer.ROTATION_NOT_INITIALIZED);
-
-        // Restart the activity.
-        IndividualPickerActivity activity = getActivity();
-        mActivityRule.runOnUiThread(activity::recreate);
-
-        onView(withText(R.string.daily_refresh_tile_title)).check(matches(isDisplayed()));
-        onView(withText(R.string.daily_refresh_tile_subtitle)).check(matches(isDisplayed()));
-    }
-
-    @Test
-    public void testRotationDisabled_DoesNotRenderDailyRefreshTile() {
-        setActivityWithMockWallpapers(false /* isRotationEnabled */,
-                WallpaperRotationInitializer.ROTATION_NOT_INITIALIZED);
-        getActivity();
-
-        onView(withText(R.string.daily_refresh_tile_title)).check(doesNotExist());
-        onView(withText(R.string.daily_refresh_tile_subtitle)).check(doesNotExist());
-    }
-
-    @Test
-    public void testClickDailyRefreshTile_ShowsStartRotationDialog() {
-        setActivityWithMockWallpapers(true /* isRotationEnabled */,
-                WallpaperRotationInitializer.ROTATION_NOT_INITIALIZED);
-        getActivity();
-
-        onView(withId(R.id.daily_refresh)).perform(click());
+        onView(withId(R.id.action_rotation)).perform(click());
 
         onView(withId(R.id.start_rotation_wifi_only_checkbox))
                 .check(matches(isDisplayed()));
@@ -323,7 +212,7 @@
                 WallpaperRotationInitializer.ROTATION_NOT_INITIALIZED);
         getActivity();
 
-        onView(withId(R.id.daily_refresh)).perform(click());
+        onView(withId(R.id.action_rotation)).perform(click());
 
         onView(withText(R.string.start_rotation_dialog_body)).check(matches(isDisplayed()));
         onView(withText(android.R.string.cancel)).check(matches(isDisplayed()));
@@ -354,7 +243,7 @@
         Matcher<Intent> expectedIntent = hasAction(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
         intending(expectedIntent).respondWith(new ActivityResult(Activity.RESULT_OK, null));
 
-        onView(withId(R.id.daily_refresh)).perform(click());
+        onView(withId(R.id.action_rotation)).perform(click());
 
         onView(withText(android.R.string.ok)).perform(click());
         mActivityRule.runOnUiThread(() -> {
@@ -379,15 +268,17 @@
                 mTestCategory.getWallpaperRotationInitializer();
         assertFalse(testWPRotationInitializer.isRotationInitialized());
 
-        onView(withId(R.id.daily_refresh)).perform(click());
+        onView(withId(R.id.action_rotation)).perform(click());
         onView(withText(android.R.string.ok)).perform(click());
 
         testWPRotationInitializer.finishDownloadingFirstWallpaper(false /* isSuccessful */);
         assertFalse(testWPRotationInitializer.isRotationInitialized());
 
         // Error dialog should be shown with retry option.
-        onView(withText(R.string.start_rotation_error_message)).check(matches(isDisplayed()));
-        onView(withText(R.string.try_again)).check(matches(isDisplayed()));
+        onView(withText(R.string.start_rotation_error_message))
+                .inRoot(isDialog()).check(matches(isDisplayed()));
+        onView(withText(R.string.try_again))
+                .inRoot(isDialog()).check(matches(isDisplayed()));
     }
 
     @Test
@@ -402,14 +293,14 @@
                 mTestCategory.getWallpaperRotationInitializer();
         assertFalse(testWPRotationInitializer.isRotationInitialized());
 
-        onView(withId(R.id.daily_refresh)).perform(click());
+        onView(withId(R.id.action_rotation)).perform(click());
         onView(withText(android.R.string.ok)).perform(click());
 
         testWPRotationInitializer.finishDownloadingFirstWallpaper(false /* isSuccessful */);
         assertFalse(testWPRotationInitializer.isRotationInitialized());
 
         // Click try again to retry.
-        onView(withText(R.string.try_again)).perform(click());
+        onView(withText(R.string.try_again)).inRoot(isDialog()).perform(click());
 
         mActivityRule.runOnUiThread(() -> {
             testWPRotationInitializer.finishDownloadingFirstWallpaper(true /* isSuccessful */);
@@ -431,7 +322,7 @@
                 mTestCategory.getWallpaperRotationInitializer();
         assertFalse(testWPRotationInitializer.isRotationInitialized());
 
-        onView(withId(R.id.daily_refresh)).perform(click());
+        onView(withId(R.id.action_rotation)).perform(click());
         // Click on WiFi-only option to toggle it off.
         onView(withId(R.id.start_rotation_wifi_only_checkbox)).perform(click());
         onView(withText(android.R.string.ok)).perform(click());
@@ -456,7 +347,7 @@
                 mTestCategory.getWallpaperRotationInitializer();
         assertFalse(testWPRotationInitializer.isRotationInitialized());
 
-        onView(withId(R.id.daily_refresh)).perform(click());
+        onView(withId(R.id.action_rotation)).perform(click());
         // Click on WiFi-only option to toggle it off.
         onView(withId(R.id.start_rotation_wifi_only_checkbox)).perform(click());
         onView(withText(android.R.string.ok)).perform(click());
@@ -465,7 +356,7 @@
         assertFalse(testWPRotationInitializer.isRotationInitialized());
 
         // Click try again to retry.
-        onView(withText(R.string.try_again)).perform(click());
+        onView(withText(R.string.try_again)).inRoot(isDialog()).perform(click());
 
         mActivityRule.runOnUiThread(() -> {
             testWPRotationInitializer.finishDownloadingFirstWallpaper(true /* isSuccessful */);
@@ -486,7 +377,7 @@
                 mTestCategory.getWallpaperRotationInitializer();
         assertFalse(testWPRotationInitializer.isRotationInitialized());
 
-        onView(withId(R.id.daily_refresh)).perform(click());
+        onView(withId(R.id.action_rotation)).perform(click());
         onView(withId(R.id.start_rotation_wifi_only_checkbox)).check(matches(isDisplayed()));
         // WiFi-only option should be checked by default.
         onView(withId(R.id.start_rotation_wifi_only_checkbox)).check(matches(isChecked()));
diff --git a/tests/src/com/android/wallpaper/testing/TestInjector.java b/tests/src/com/android/wallpaper/testing/TestInjector.java
index 0da755e..8dffdca 100644
--- a/tests/src/com/android/wallpaper/testing/TestInjector.java
+++ b/tests/src/com/android/wallpaper/testing/TestInjector.java
@@ -210,8 +210,9 @@
 
     @Override
     public Fragment getPreviewFragment(Context context, WallpaperInfo wallpaperInfo, int mode,
-            boolean testingModeEnabled) {
-        return ImagePreviewFragment.newInstance(wallpaperInfo, mode, testingModeEnabled);
+            boolean viewAsHome, boolean testingModeEnabled) {
+        return ImagePreviewFragment.newInstance(wallpaperInfo, mode, viewAsHome,
+                testingModeEnabled);
     }
 
     @Override
diff --git a/tests/src/com/android/wallpaper/testing/TestUserEventLogger.java b/tests/src/com/android/wallpaper/testing/TestUserEventLogger.java
index afcb59e..63ae94e 100644
--- a/tests/src/com/android/wallpaper/testing/TestUserEventLogger.java
+++ b/tests/src/com/android/wallpaper/testing/TestUserEventLogger.java
@@ -124,6 +124,11 @@
         // No-op
     }
 
+    @Override
+    public void logSnapshot() {
+        // No-op
+    }
+
     public int getNumCategorySelectedEvents() {
         return mNumCategorySelectedEvents;
     }
diff --git a/tests/src/com/android/wallpaper/testing/TestWallpaperPreferences.java b/tests/src/com/android/wallpaper/testing/TestWallpaperPreferences.java
index 715e81b..caef91f 100644
--- a/tests/src/com/android/wallpaper/testing/TestWallpaperPreferences.java
+++ b/tests/src/com/android/wallpaper/testing/TestWallpaperPreferences.java
@@ -15,19 +15,31 @@
  */
 package com.android.wallpaper.testing;
 
+import static com.android.wallpaper.module.WallpaperPersister.DEST_BOTH;
+import static com.android.wallpaper.module.WallpaperPersister.DEST_HOME_SCREEN;
+import static com.android.wallpaper.module.WallpaperPersister.DEST_LOCK_SCREEN;
+
 import androidx.annotation.Nullable;
 
+import com.android.wallpaper.module.WallpaperPersister.Destination;
 import com.android.wallpaper.module.WallpaperPreferences;
 
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Calendar;
 import java.util.List;
+import java.util.Locale;
+import java.util.TimeZone;
 
 /**
  * Test implementation of the WallpaperPreferences interface. Just keeps prefs in memory.
  */
 public class TestWallpaperPreferences implements WallpaperPreferences {
 
+    private int mAppLaunchCount;
+    private int mFirstLaunchDate;
+    private int mFirstWallpaperApplyDate;
     @PresentationMode
     private int mWallpaperPresentationMode;
 
@@ -35,6 +47,7 @@
     private long mHomeScreenBitmapHashCode;
     private int mHomeWallpaperManagerId;
     private String mHomeScreenPackageName;
+    private String mHomeScreenServiceName;
     private String mHomeActionUrl;
     private String mHomeBaseImageUrl;
     private String mHomeCollectionId;
@@ -45,6 +58,7 @@
     private int mLockWallpaperManagerId;
     private String mLockActionUrl;
     private String mLockCollectionId;
+    private String mLockWallpaperRemoteId;
 
     private List<Long> mDailyRotations;
     private long mDailyWallpaperEnabledTimestamp;
@@ -193,6 +207,17 @@
     }
 
     @Override
+    public String getHomeWallpaperServiceName() {
+        return mHomeScreenServiceName;
+    }
+
+    @Override
+    public void setHomeWallpaperServiceName(String serviceName) {
+        mHomeScreenServiceName = serviceName;
+        setFirstWallpaperApplyDateIfNeeded();
+    }
+
+    @Override
     public int getHomeWallpaperManagerId() {
         return mHomeWallpaperManagerId;
     }
@@ -210,6 +235,7 @@
     @Override
     public void setHomeWallpaperRemoteId(String wallpaperRemoteId) {
         mHomeWallpaperRemoteId = wallpaperRemoteId;
+        setFirstWallpaperApplyDateIfNeeded();
     }
 
     @Override
@@ -300,6 +326,17 @@
     }
 
     @Override
+    public String getLockWallpaperRemoteId() {
+        return mLockWallpaperRemoteId;
+    }
+
+    @Override
+    public void setLockWallpaperRemoteId(String wallpaperRemoteId) {
+        mLockWallpaperRemoteId = wallpaperRemoteId;
+        setFirstWallpaperApplyDateIfNeeded();
+    }
+
+    @Override
     public void addDailyRotation(long timestamp) {
         mDailyRotations.add(timestamp);
     }
@@ -454,4 +491,74 @@
     public void resetNumDaysDailyRotationNotAttempted() {
         mNumDaysDailyRotationNotAttempted = 0;
     }
+
+
+    @Override
+    public int getAppLaunchCount() {
+        return mAppLaunchCount;
+    }
+
+    private void setAppLaunchCount(int count) {
+        mAppLaunchCount = count;
+    }
+
+    @Override
+    public int getFirstLaunchDateSinceSetup() {
+        return mFirstLaunchDate;
+    }
+
+    private void setFirstLaunchDateSinceSetup(int firstLaunchDate) {
+        mFirstLaunchDate = firstLaunchDate;
+    }
+
+    @Override
+    public int getFirstWallpaperApplyDateSinceSetup() {
+        return mFirstWallpaperApplyDate;
+    }
+
+    private void setFirstWallpaperApplyDateSinceSetup(int firstWallpaperApplyDate) {
+        mFirstWallpaperApplyDate = firstWallpaperApplyDate;
+    }
+
+    @Override
+    public void incrementAppLaunched() {
+        if (getFirstLaunchDateSinceSetup() == 0) {
+            setFirstLaunchDateSinceSetup(getCurrentDate());
+        }
+
+        int appLaunchCount = getAppLaunchCount();
+        if (appLaunchCount < Integer.MAX_VALUE) {
+            setAppLaunchCount(appLaunchCount + 1);
+        }
+    }
+
+    private void setFirstWallpaperApplyDateIfNeeded() {
+        if (getFirstWallpaperApplyDateSinceSetup() == 0) {
+            setFirstWallpaperApplyDateSinceSetup(getCurrentDate());
+        }
+    }
+
+    @Override
+    public void updateDailyWallpaperSet(@Destination int destination, String collectionId,
+            String wallpaperId) {
+        // Assign wallpaper info by destination.
+        if (destination == DEST_HOME_SCREEN) {
+            setHomeWallpaperCollectionId(collectionId);
+            setHomeWallpaperRemoteId(wallpaperId);
+        } else if (destination == DEST_LOCK_SCREEN) {
+            setLockWallpaperCollectionId(collectionId);
+            setLockWallpaperRemoteId(wallpaperId);
+        } else if (destination == DEST_BOTH) {
+            setHomeWallpaperCollectionId(collectionId);
+            setHomeWallpaperRemoteId(wallpaperId);
+            setLockWallpaperCollectionId(collectionId);
+            setLockWallpaperRemoteId(wallpaperId);
+        }
+    }
+
+    private int getCurrentDate() {
+        Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd", Locale.US);
+        return Integer.parseInt(format.format(calendar.getTime()));
+    }
 }