[automerger skipped] Import translations. DO NOT MERGE am: 5a7d32accf -s ours

am skip reason: subject contains skip directive

Change-Id: Iaf369bc9fc03ef53915ac1bb24cba9fb65b30dd9
diff --git a/Android.mk b/Android.mk
index 81a2976..a0d05cb 100644
--- a/Android.mk
+++ b/Android.mk
@@ -26,7 +26,7 @@
 LOCAL_MODULE_TAGS := optional
 
 LOCAL_STATIC_ANDROID_LIBRARIES := WallpaperPicker2CommonDepsLib
-LOCAL_STATIC_JAVA_LIBRARIES := styleprotosnano
+LOCAL_STATIC_JAVA_LIBRARIES := styleprotosnano SystemUI-statsd SystemUISharedLib
 LOCAL_PROGUARD_ENABLED := disabled
 LOCAL_SDK_VERSION := system_current
 
diff --git a/res/anim/major_a_b_dot_01_animation.xml b/res/anim/major_a_b_dot_01_animation.xml
deleted file mode 100644
index 89fc4c7..0000000
--- a/res/anim/major_a_b_dot_01_animation.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<set
-    xmlns:android="http://schemas.android.com/apk/res/android" >
-    <objectAnimator
-        android:duration="250"
-        android:propertyXName="translateX"
-        android:propertyYName="translateY"
-        android:pathData="M 3.25,4.0 c 0.79167,0.0 3.95833,0.0 4.75,0.0"
-        android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/res/anim/major_a_b_dot_animation.xml b/res/anim/major_a_b_dot_animation.xml
deleted file mode 100644
index f24534f..0000000
--- a/res/anim/major_a_b_dot_animation.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<set
-    xmlns:android="http://schemas.android.com/apk/res/android" >
-    <objectAnimator
-        android:duration="250"
-        android:propertyName="pathData"
-        android:valueFrom="M 0.0,-2.75 l 0.0,0.0 c 1.51878306195,0.0 2.75,1.23121693805 2.75,2.75 l 0.0,0.0 c 0.0,1.51878306195 -1.23121693805,2.75 -2.75,2.75 l 0.0,0.0 c -1.51878306195,0.0 -2.75,-1.23121693805 -2.75,-2.75 l 0.0,0.0 c 0.0,-1.51878306195 1.23121693805,-2.75 2.75,-2.75 Z"
-        android:valueTo="M -4.75,-2.75 l 9.5,0.0 c 1.51878306195,0.0 2.75,1.23121693805 2.75,2.75 l 0.0,0.0 c 0.0,1.51878306195 -1.23121693805,2.75 -2.75,2.75 l -9.5,0.0 c -1.51878306195,0.0 -2.75,-1.23121693805 -2.75,-2.75 l 0.0,0.0 c 0.0,-1.51878306195 1.23121693805,-2.75 2.75,-2.75 Z"
-        android:valueType="pathType"
-        android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/res/anim/major_b_a_dot_01_animation.xml b/res/anim/major_b_a_dot_01_animation.xml
deleted file mode 100644
index a53ad37..0000000
--- a/res/anim/major_b_a_dot_01_animation.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<set
-    xmlns:android="http://schemas.android.com/apk/res/android" >
-    <objectAnimator
-        android:duration="250"
-        android:propertyXName="translateX"
-        android:propertyYName="translateY"
-        android:pathData="M 8.0,4.0 c -0.79167,0.0 -3.95833,0.0 -4.75,0.0"
-        android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/res/anim/major_b_a_dot_animation.xml b/res/anim/major_b_a_dot_animation.xml
deleted file mode 100644
index d89512e..0000000
--- a/res/anim/major_b_a_dot_animation.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<set
-    xmlns:android="http://schemas.android.com/apk/res/android" >
-    <objectAnimator
-        android:duration="250"
-        android:propertyName="pathData"
-        android:valueFrom="M -4.75,-2.75 l 9.5,0.0 c 1.51878306195,0.0 2.75,1.23121693805 2.75,2.75 l 0.0,0.0 c 0.0,1.51878306195 -1.23121693805,2.75 -2.75,2.75 l -9.5,0.0 c -1.51878306195,0.0 -2.75,-1.23121693805 -2.75,-2.75 l 0.0,0.0 c 0.0,-1.51878306195 1.23121693805,-2.75 2.75,-2.75 Z"
-        android:valueTo="M 0.0,-2.75 l 0.0,0.0 c 1.51878306195,0.0 2.75,1.23121693805 2.75,2.75 l 0.0,0.0 c 0.0,1.51878306195 -1.23121693805,2.75 -2.75,2.75 l 0.0,0.0 c -1.51878306195,0.0 -2.75,-1.23121693805 -2.75,-2.75 l 0.0,0.0 c 0.0,-1.51878306195 1.23121693805,-2.75 2.75,-2.75 Z"
-        android:valueType="pathType"
-        android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/res/anim/major_b_c_dot_01_animation.xml b/res/anim/major_b_c_dot_01_animation.xml
deleted file mode 100644
index e84994f..0000000
--- a/res/anim/major_b_c_dot_01_animation.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<set
-    xmlns:android="http://schemas.android.com/apk/res/android" >
-    <objectAnimator
-        android:duration="250"
-        android:propertyXName="translateX"
-        android:propertyYName="translateY"
-        android:pathData="M 8.0,4.0 c 0.79167,0.0 3.95833,0.0 4.75,0.0"
-        android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/res/anim/major_b_c_dot_animation.xml b/res/anim/major_b_c_dot_animation.xml
deleted file mode 100644
index d89512e..0000000
--- a/res/anim/major_b_c_dot_animation.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<set
-    xmlns:android="http://schemas.android.com/apk/res/android" >
-    <objectAnimator
-        android:duration="250"
-        android:propertyName="pathData"
-        android:valueFrom="M -4.75,-2.75 l 9.5,0.0 c 1.51878306195,0.0 2.75,1.23121693805 2.75,2.75 l 0.0,0.0 c 0.0,1.51878306195 -1.23121693805,2.75 -2.75,2.75 l -9.5,0.0 c -1.51878306195,0.0 -2.75,-1.23121693805 -2.75,-2.75 l 0.0,0.0 c 0.0,-1.51878306195 1.23121693805,-2.75 2.75,-2.75 Z"
-        android:valueTo="M 0.0,-2.75 l 0.0,0.0 c 1.51878306195,0.0 2.75,1.23121693805 2.75,2.75 l 0.0,0.0 c 0.0,1.51878306195 -1.23121693805,2.75 -2.75,2.75 l 0.0,0.0 c -1.51878306195,0.0 -2.75,-1.23121693805 -2.75,-2.75 l 0.0,0.0 c 0.0,-1.51878306195 1.23121693805,-2.75 2.75,-2.75 Z"
-        android:valueType="pathType"
-        android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/res/anim/major_c_b_dot_01_animation.xml b/res/anim/major_c_b_dot_01_animation.xml
deleted file mode 100644
index 9df1f01..0000000
--- a/res/anim/major_c_b_dot_01_animation.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<set
-    xmlns:android="http://schemas.android.com/apk/res/android" >
-    <objectAnimator
-        android:duration="250"
-        android:propertyXName="translateX"
-        android:propertyYName="translateY"
-        android:pathData="M 12.75,4.0 c -0.79167,0.0 -3.95833,0.0 -4.75,0.0"
-        android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/res/anim/major_c_b_dot_animation.xml b/res/anim/major_c_b_dot_animation.xml
deleted file mode 100644
index f24534f..0000000
--- a/res/anim/major_c_b_dot_animation.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<set
-    xmlns:android="http://schemas.android.com/apk/res/android" >
-    <objectAnimator
-        android:duration="250"
-        android:propertyName="pathData"
-        android:valueFrom="M 0.0,-2.75 l 0.0,0.0 c 1.51878306195,0.0 2.75,1.23121693805 2.75,2.75 l 0.0,0.0 c 0.0,1.51878306195 -1.23121693805,2.75 -2.75,2.75 l 0.0,0.0 c -1.51878306195,0.0 -2.75,-1.23121693805 -2.75,-2.75 l 0.0,0.0 c 0.0,-1.51878306195 1.23121693805,-2.75 2.75,-2.75 Z"
-        android:valueTo="M -4.75,-2.75 l 9.5,0.0 c 1.51878306195,0.0 2.75,1.23121693805 2.75,2.75 l 0.0,0.0 c 0.0,1.51878306195 -1.23121693805,2.75 -2.75,2.75 l -9.5,0.0 c -1.51878306195,0.0 -2.75,-1.23121693805 -2.75,-2.75 l 0.0,0.0 c 0.0,-1.51878306195 1.23121693805,-2.75 2.75,-2.75 Z"
-        android:valueType="pathType"
-        android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/res/anim/minor_a_b_dot_02_animation.xml b/res/anim/minor_a_b_dot_02_animation.xml
deleted file mode 100644
index 89fc4c7..0000000
--- a/res/anim/minor_a_b_dot_02_animation.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<set
-    xmlns:android="http://schemas.android.com/apk/res/android" >
-    <objectAnimator
-        android:duration="250"
-        android:propertyXName="translateX"
-        android:propertyYName="translateY"
-        android:pathData="M 3.25,4.0 c 0.79167,0.0 3.95833,0.0 4.75,0.0"
-        android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/res/anim/minor_b_a_dot_02_animation.xml b/res/anim/minor_b_a_dot_02_animation.xml
deleted file mode 100644
index a53ad37..0000000
--- a/res/anim/minor_b_a_dot_02_animation.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<set
-    xmlns:android="http://schemas.android.com/apk/res/android" >
-    <objectAnimator
-        android:duration="250"
-        android:propertyXName="translateX"
-        android:propertyYName="translateY"
-        android:pathData="M 8.0,4.0 c -0.79167,0.0 -3.95833,0.0 -4.75,0.0"
-        android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/res/anim/minor_b_c_dot_02_animation.xml b/res/anim/minor_b_c_dot_02_animation.xml
deleted file mode 100644
index e84994f..0000000
--- a/res/anim/minor_b_c_dot_02_animation.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<set
-    xmlns:android="http://schemas.android.com/apk/res/android" >
-    <objectAnimator
-        android:duration="250"
-        android:propertyXName="translateX"
-        android:propertyYName="translateY"
-        android:pathData="M 8.0,4.0 c 0.79167,0.0 3.95833,0.0 4.75,0.0"
-        android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/res/anim/minor_c_b_dot_02_animation.xml b/res/anim/minor_c_b_dot_02_animation.xml
deleted file mode 100644
index 9df1f01..0000000
--- a/res/anim/minor_c_b_dot_02_animation.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<set
-    xmlns:android="http://schemas.android.com/apk/res/android" >
-    <objectAnimator
-        android:duration="250"
-        android:propertyXName="translateX"
-        android:propertyYName="translateY"
-        android:pathData="M 12.75,4.0 c -0.79167,0.0 -3.95833,0.0 -4.75,0.0"
-        android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/res/color/indicator_arrow_color.xml b/res/color/indicator_arrow_color.xml
deleted file mode 100644
index 198d002..0000000
--- a/res/color/indicator_arrow_color.xml
+++ /dev/null
@@ -1,24 +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.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:state_enabled="false"
-        android:color="@color/preview_pager_arrow_disabled" />
-    <item
-        android:state_enabled="true"
-        android:color="?android:attr/colorAccent" />
-</selector>
diff --git a/res/color/option_border_color.xml b/res/color/option_border_color.xml
deleted file mode 100644
index ec5ab97..0000000
--- a/res/color/option_border_color.xml
+++ /dev/null
@@ -1,28 +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.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:state_activated="true"
-        android:color="?android:colorAccent" />
-    <item
-        android:state_activated="false"
-        android:alpha="0.24"
-        android:color="?android:colorAccent" />
-    <item
-        android:alpha="0.05"
-        android:color="@color/option_border_default"/>
-</selector>
diff --git a/res/color/option_title_color.xml b/res/color/option_title_color.xml
deleted file mode 100644
index 2809247..0000000
--- a/res/color/option_title_color.xml
+++ /dev/null
@@ -1,27 +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.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:state_activated="true"
-        android:color="?android:colorAccent" />
-    <item
-        android:state_activated="false"
-        android:alpha="0.54"
-        android:color="?android:colorForeground" />
-    <item
-        android:color="?android:colorForeground"/>
-</selector>
diff --git a/res/drawable/ic_arrow_back_24px.xml b/res/drawable/ic_arrow_back_24px.xml
deleted file mode 100644
index 3eb00c7..0000000
--- a/res/drawable/ic_arrow_back_24px.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-     Copyright (C) 2018 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.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="?android:attr/colorForeground"
-        android:pathData="M16.41,5.41l-1.41,-1.41l-8,8l8,8l1.41,-1.41l-6.58,-6.59"/>
-</vector>
diff --git a/res/drawable/ic_arrow_forward_24px.xml b/res/drawable/ic_arrow_forward_24px.xml
deleted file mode 100644
index a7284b2..0000000
--- a/res/drawable/ic_arrow_forward_24px.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-     Copyright (C) 2018 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.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="?android:attr/colorForeground"
-        android:pathData="M7.59,18.59l1.41,1.41l8,-8l-8,-8l-1.41,1.41l6.58,6.59"/>
-</vector>
diff --git a/res/drawable/ic_check_circle_filled_24px.xml b/res/drawable/ic_check_circle_filled_24px.xml
index cacf1d8..01d2091 100644
--- a/res/drawable/ic_check_circle_filled_24px.xml
+++ b/res/drawable/ic_check_circle_filled_24px.xml
@@ -19,7 +19,7 @@
     android:viewportWidth="24"
     android:viewportHeight="24">
   <path
-      android:fillColor="@color/selected_check_background_color"
+      android:fillColor="@color/accent_color"
       android:pathData="M12,2C6.5,2 2,6.5 2,12s4.5,10 10,10s10,-4.5 10,-10S17.5,2 12,2zM10,17l-4,-4l1.4,-1.4l2.6,2.6l6.6,-6.6L18,9L10,17z"/>
   <path
       android:pathData="m8.0085,14.9866 l-1.9939,-1.994 0.6892,-0.6889 0.6892,-0.6889 1.2925,1.2926c0.7109,0.711 1.3035,1.2926 1.3169,1.2926 0.0134,0 1.5034,-1.4789 3.3111,-3.2865l3.2866,-3.2865 0.689,0.689 0.689,0.689 -3.9878,3.9878 -3.9878,3.9878z"
diff --git a/res/drawable/major_a_b.xml b/res/drawable/major_a_b.xml
deleted file mode 100644
index 3878fbd..0000000
--- a/res/drawable/major_a_b.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:name="major_a_b"
-    android:width="16dp"
-    android:viewportWidth="16"
-    android:height="8dp"
-    android:viewportHeight="8"
-    android:tint="?android:attr/colorControlNormal">
-    <group
-        android:name="dot_01"
-        android:translateX="3.25"
-        android:translateY="4" >
-        <group
-            android:name="dot_group" >
-            <path
-                android:name="dot"
-                android:fillColor="#FFFFFFFF"
-                android:pathData="M 0.0,-2.75 l 0.0,0.0 c 1.51878306195,0.0 2.75,1.23121693805 2.75,2.75 l 0.0,0.0 c 0.0,1.51878306195 -1.23121693805,2.75 -2.75,2.75 l 0.0,0.0 c -1.51878306195,0.0 -2.75,-1.23121693805 -2.75,-2.75 l 0.0,0.0 c 0.0,-1.51878306195 1.23121693805,-2.75 2.75,-2.75 Z" />
-        </group>
-    </group>
-</vector>
diff --git a/res/drawable/major_a_b_animation.xml b/res/drawable/major_a_b_animation.xml
deleted file mode 100644
index d9f0c80..0000000
--- a/res/drawable/major_a_b_animation.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<animated-vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:drawable="@drawable/major_a_b" >
-    <target
-        android:name="dot_01"
-        android:animation="@anim/major_a_b_dot_01_animation" />
-    <target
-        android:name="dot"
-        android:animation="@anim/major_a_b_dot_animation" />
-</animated-vector>
diff --git a/res/drawable/major_b_a.xml b/res/drawable/major_b_a.xml
deleted file mode 100644
index 6fc80ad..0000000
--- a/res/drawable/major_b_a.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:name="major_b_a"
-    android:width="16dp"
-    android:viewportWidth="16"
-    android:height="8dp"
-    android:viewportHeight="8"
-    android:tint="?android:attr/colorControlNormal" >
-    <group
-        android:name="dot_01"
-        android:translateX="8"
-        android:translateY="4" >
-        <group
-            android:name="dot_group" >
-            <path
-                android:name="dot"
-                android:fillColor="#FFFFFFFF"
-                android:pathData="M -4.75,-2.75 l 9.5,0.0 c 1.51878306195,0.0 2.75,1.23121693805 2.75,2.75 l 0.0,0.0 c 0.0,1.51878306195 -1.23121693805,2.75 -2.75,2.75 l -9.5,0.0 c -1.51878306195,0.0 -2.75,-1.23121693805 -2.75,-2.75 l 0.0,0.0 c 0.0,-1.51878306195 1.23121693805,-2.75 2.75,-2.75 Z" />
-        </group>
-    </group>
-</vector>
diff --git a/res/drawable/major_b_a_animation.xml b/res/drawable/major_b_a_animation.xml
deleted file mode 100644
index 2e0900a..0000000
--- a/res/drawable/major_b_a_animation.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<animated-vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:drawable="@drawable/major_b_a" >
-    <target
-        android:name="dot_01"
-        android:animation="@anim/major_b_a_dot_01_animation" />
-    <target
-        android:name="dot"
-        android:animation="@anim/major_b_a_dot_animation" />
-</animated-vector>
diff --git a/res/drawable/major_b_c.xml b/res/drawable/major_b_c.xml
deleted file mode 100644
index 8d51e20..0000000
--- a/res/drawable/major_b_c.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:name="major_b_c"
-    android:width="16dp"
-    android:viewportWidth="16"
-    android:height="8dp"
-    android:viewportHeight="8"
-    android:tint="?android:attr/colorControlNormal" >
-    <group
-        android:name="dot_01"
-        android:translateX="8"
-        android:translateY="4" >
-        <group
-            android:name="dot_group" >
-            <path
-                android:name="dot"
-                android:fillColor="#FFFFFFFF"
-                android:pathData="M -4.75,-2.75 l 9.5,0.0 c 1.51878306195,0.0 2.75,1.23121693805 2.75,2.75 l 0.0,0.0 c 0.0,1.51878306195 -1.23121693805,2.75 -2.75,2.75 l -9.5,0.0 c -1.51878306195,0.0 -2.75,-1.23121693805 -2.75,-2.75 l 0.0,0.0 c 0.0,-1.51878306195 1.23121693805,-2.75 2.75,-2.75 Z" />
-        </group>
-    </group>
-</vector>
diff --git a/res/drawable/major_b_c_animation.xml b/res/drawable/major_b_c_animation.xml
deleted file mode 100644
index ccf1608..0000000
--- a/res/drawable/major_b_c_animation.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<animated-vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:drawable="@drawable/major_b_c" >
-    <target
-        android:name="dot_01"
-        android:animation="@anim/major_b_c_dot_01_animation" />
-    <target
-        android:name="dot"
-        android:animation="@anim/major_b_c_dot_animation" />
-</animated-vector>
diff --git a/res/drawable/major_c_b.xml b/res/drawable/major_c_b.xml
deleted file mode 100644
index 9930187..0000000
--- a/res/drawable/major_c_b.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:name="major_c_b"
-    android:width="16dp"
-    android:viewportWidth="16"
-    android:height="8dp"
-    android:viewportHeight="8"
-    android:tint="?android:attr/colorControlNormal" >
-    <group
-        android:name="dot_01"
-        android:translateX="12.75"
-        android:translateY="4" >
-        <group
-            android:name="dot_group" >
-            <path
-                android:name="dot"
-                android:fillColor="#FFFFFFFF"
-                android:pathData="M 0.0,-2.75 l 0.0,0.0 c 1.51878306195,0.0 2.75,1.23121693805 2.75,2.75 l 0.0,0.0 c 0.0,1.51878306195 -1.23121693805,2.75 -2.75,2.75 l 0.0,0.0 c -1.51878306195,0.0 -2.75,-1.23121693805 -2.75,-2.75 l 0.0,0.0 c 0.0,-1.51878306195 1.23121693805,-2.75 2.75,-2.75 Z" />
-        </group>
-    </group>
-</vector>
diff --git a/res/drawable/major_c_b_animation.xml b/res/drawable/major_c_b_animation.xml
deleted file mode 100644
index 21ea528..0000000
--- a/res/drawable/major_c_b_animation.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<animated-vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:drawable="@drawable/major_c_b" >
-    <target
-        android:name="dot_01"
-        android:animation="@anim/major_c_b_dot_01_animation" />
-    <target
-        android:name="dot"
-        android:animation="@anim/major_c_b_dot_animation" />
-</animated-vector>
diff --git a/res/drawable/minor_a_b.xml b/res/drawable/minor_a_b.xml
deleted file mode 100644
index 522d2e9..0000000
--- a/res/drawable/minor_a_b.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:name="minor_a_b"
-    android:width="16dp"
-    android:viewportWidth="16"
-    android:height="8dp"
-    android:viewportHeight="8" >
-    <group
-        android:name="dot_02"
-        android:translateX="3.25"
-        android:translateY="4" >
-        <group
-            android:name="dot_group" >
-            <path
-                android:name="dot"
-                android:fillColor="#FFFFFFFF"
-                android:pathData="M 0.0,-2.75 l 0.0,0.0 c 1.51878306195,0.0 2.75,1.23121693805 2.75,2.75 l 0.0,0.0 c 0.0,1.51878306195 -1.23121693805,2.75 -2.75,2.75 l 0.0,0.0 c -1.51878306195,0.0 -2.75,-1.23121693805 -2.75,-2.75 l 0.0,0.0 c 0.0,-1.51878306195 1.23121693805,-2.75 2.75,-2.75 Z" />
-        </group>
-    </group>
-</vector>
diff --git a/res/drawable/minor_a_b_animation.xml b/res/drawable/minor_a_b_animation.xml
deleted file mode 100644
index 9784b84..0000000
--- a/res/drawable/minor_a_b_animation.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<animated-vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:drawable="@drawable/minor_a_b" >
-    <target
-        android:name="dot_02"
-        android:animation="@anim/minor_a_b_dot_02_animation" />
-</animated-vector>
diff --git a/res/drawable/minor_b_a.xml b/res/drawable/minor_b_a.xml
deleted file mode 100644
index 4f3029a..0000000
--- a/res/drawable/minor_b_a.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:name="minor_b_a"
-    android:width="16dp"
-    android:viewportWidth="16"
-    android:height="8dp"
-    android:viewportHeight="8" >
-    <group
-        android:name="dot_02"
-        android:translateX="8"
-        android:translateY="4" >
-        <group
-            android:name="dot_group" >
-            <path
-                android:name="dot"
-                android:fillColor="#FFFFFFFF"
-                android:pathData="M 0.0,-2.75 l 0.0,0.0 c 1.51878306195,0.0 2.75,1.23121693805 2.75,2.75 l 0.0,0.0 c 0.0,1.51878306195 -1.23121693805,2.75 -2.75,2.75 l 0.0,0.0 c -1.51878306195,0.0 -2.75,-1.23121693805 -2.75,-2.75 l 0.0,0.0 c 0.0,-1.51878306195 1.23121693805,-2.75 2.75,-2.75 Z" />
-        </group>
-    </group>
-</vector>
diff --git a/res/drawable/minor_b_a_animation.xml b/res/drawable/minor_b_a_animation.xml
deleted file mode 100644
index 4cb26c1..0000000
--- a/res/drawable/minor_b_a_animation.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<animated-vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:drawable="@drawable/minor_b_a" >
-    <target
-        android:name="dot_02"
-        android:animation="@anim/minor_b_a_dot_02_animation" />
-</animated-vector>
diff --git a/res/drawable/minor_b_c.xml b/res/drawable/minor_b_c.xml
deleted file mode 100644
index 0757071..0000000
--- a/res/drawable/minor_b_c.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:name="minor_b_c"
-    android:width="16dp"
-    android:viewportWidth="16"
-    android:height="8dp"
-    android:viewportHeight="8" >
-    <group
-        android:name="dot_02"
-        android:translateX="8"
-        android:translateY="4" >
-        <group
-            android:name="dot_group" >
-            <path
-                android:name="dot"
-                android:fillColor="#FFFFFFFF"
-                android:pathData="M 0.0,-2.75 l 0.0,0.0 c 1.51878306195,0.0 2.75,1.23121693805 2.75,2.75 l 0.0,0.0 c 0.0,1.51878306195 -1.23121693805,2.75 -2.75,2.75 l 0.0,0.0 c -1.51878306195,0.0 -2.75,-1.23121693805 -2.75,-2.75 l 0.0,0.0 c 0.0,-1.51878306195 1.23121693805,-2.75 2.75,-2.75 Z" />
-        </group>
-    </group>
-</vector>
diff --git a/res/drawable/minor_b_c_animation.xml b/res/drawable/minor_b_c_animation.xml
deleted file mode 100644
index c2aa8b7..0000000
--- a/res/drawable/minor_b_c_animation.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<animated-vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:drawable="@drawable/minor_b_c" >
-    <target
-        android:name="dot_02"
-        android:animation="@anim/minor_b_c_dot_02_animation" />
-</animated-vector>
diff --git a/res/drawable/minor_c_b.xml b/res/drawable/minor_c_b.xml
deleted file mode 100644
index ba056fb..0000000
--- a/res/drawable/minor_c_b.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:name="minor_c_b"
-    android:width="16dp"
-    android:viewportWidth="16"
-    android:height="8dp"
-    android:viewportHeight="8" >
-    <group
-        android:name="dot_02"
-        android:translateX="12.75"
-        android:translateY="4" >
-        <group
-            android:name="dot_group" >
-            <path
-                android:name="dot"
-                android:fillColor="#FFFFFFFF"
-                android:pathData="M 0.0,-2.75 l 0.0,0.0 c 1.51878306195,0.0 2.75,1.23121693805 2.75,2.75 l 0.0,0.0 c 0.0,1.51878306195 -1.23121693805,2.75 -2.75,2.75 l 0.0,0.0 c -1.51878306195,0.0 -2.75,-1.23121693805 -2.75,-2.75 l 0.0,0.0 c 0.0,-1.51878306195 1.23121693805,-2.75 2.75,-2.75 Z" />
-        </group>
-    </group>
-</vector>
diff --git a/res/drawable/minor_c_b_animation.xml b/res/drawable/minor_c_b_animation.xml
deleted file mode 100644
index 9c9a8cc..0000000
--- a/res/drawable/minor_c_b_animation.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 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.
--->
-<animated-vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:drawable="@drawable/minor_c_b" >
-    <target
-        android:name="dot_02"
-        android:animation="@anim/minor_c_b_dot_02_animation" />
-</animated-vector>
diff --git a/res/drawable/option_border.xml b/res/drawable/option_border.xml
deleted file mode 100644
index 6ce76c7..0000000
--- a/res/drawable/option_border.xml
+++ /dev/null
@@ -1,25 +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.
--->
-<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="4dp" />
-        </shape>
-    </item>
-    <item android:drawable="@drawable/option_border_edge" />
-</ripple>
diff --git a/res/drawable/option_border_edge.xml b/res/drawable/option_border_edge.xml
deleted file mode 100644
index 943920e..0000000
--- a/res/drawable/option_border_edge.xml
+++ /dev/null
@@ -1,34 +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.
--->
-<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="4dp" />
-        </shape>
-    </item>
-    <item android:state_activated="false">
-        <shape android:shape="rectangle">
-            <stroke
-                android:color="@color/option_border_color"
-                android:width="@dimen/option_border_width" />
-            <corners android:radius="4dp" />
-        </shape>
-    </item>
-</selector>
diff --git a/res/layout-land/fragment_clock_picker.xml b/res/layout-land/fragment_clock_picker.xml
index b5044b7..e2c5d34 100644
--- a/res/layout-land/fragment_clock_picker.xml
+++ b/res/layout-land/fragment_clock_picker.xml
@@ -33,7 +33,7 @@
             android:layout_height="match_parent"
             android:orientation="horizontal">
 
-            <com.android.customization.widget.PreviewPager
+            <com.android.wallpaper.widget.PreviewPager
                 android:id="@+id/clock_preview_pager"
                 android:layout_width="0dp"
                 android:layout_height="match_parent"
@@ -86,7 +86,7 @@
             android:visibility="gone">
             <TextView
                 android:id="@+id/error_message"
-                style="@style/HeaderTextAppearance"
+                style="@style/TitleTextAppearance"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center"
diff --git a/res/layout-land/fragment_custom_theme_component.xml b/res/layout-land/fragment_custom_theme_component.xml
index cc834e3..6883d63 100644
--- a/res/layout-land/fragment_custom_theme_component.xml
+++ b/res/layout-land/fragment_custom_theme_component.xml
@@ -62,7 +62,7 @@
                 android:layout_gravity="center"
                 android:layout_margin="10dp"
                 android:textAlignment="center"
-                android:textAppearance="@style/HeaderTextAppearance"/>
+                android:textAppearance="@style/TitleTextAppearance"/>
 
             <androidx.recyclerview.widget.RecyclerView
                 android:id="@+id/options_container"
diff --git a/res/layout-land/fragment_custom_theme_name.xml b/res/layout-land/fragment_custom_theme_name.xml
index 0f190a8..3c85f35 100644
--- a/res/layout-land/fragment_custom_theme_name.xml
+++ b/res/layout-land/fragment_custom_theme_name.xml
@@ -59,7 +59,7 @@
                 android:layout_gravity="center"
                 android:layout_margin="10dp"
                 android:textAlignment="center"
-                android:textAppearance="@style/HeaderTextAppearance"/>
+                android:textAppearance="@style/TitleTextAppearance"/>
 
             <FrameLayout
                 android:layout_width="match_parent"
diff --git a/res/layout-land/fragment_grid_picker.xml b/res/layout-land/fragment_grid_picker.xml
index 6fc5933..6c2d8c5 100644
--- a/res/layout-land/fragment_grid_picker.xml
+++ b/res/layout-land/fragment_grid_picker.xml
@@ -31,7 +31,7 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:orientation="horizontal">
-        <com.android.customization.widget.PreviewPager
+        <com.android.wallpaper.widget.PreviewPager
             android:id="@+id/grid_preview_pager"
             android:layout_width="0dp"
             android:layout_height="match_parent"
@@ -39,34 +39,18 @@
             android:background="@color/secondary_color"
             app:card_style="screen_aspect_ratio"/>
 
-        <LinearLayout
+        <FrameLayout
             android:id="@+id/options_section"
             android:layout_width="0dp"
             android:layout_height="match_parent"
             android:layout_weight="1"
-            android:paddingVertical="10dp"
-            android:orientation="vertical">
+            android:paddingVertical="10dp">
 
             <androidx.recyclerview.widget.RecyclerView
                 android:id="@+id/options_container"
                 android:layout_width="match_parent"
-                android:layout_height="0dp"
-                android:layout_weight="1"/>
-
-            <RelativeLayout
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:paddingHorizontal="10dp">
-                <Button
-                    android:id="@+id/apply_button"
-                    style="@style/ActionPrimaryButton"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_alignParentEnd="true"
-                    android:text="@string/apply_btn"/>
-            </RelativeLayout>
-
-        </LinearLayout>
+                android:layout_height="match_parent"/>
+        </FrameLayout>
     </LinearLayout>
         <androidx.core.widget.ContentLoadingProgressBar
             android:id="@+id/loading_indicator"
@@ -84,7 +68,7 @@
             android:visibility="gone">
             <TextView
                 android:id="@+id/error_message"
-                style="@style/HeaderTextAppearance"
+                style="@style/TitleTextAppearance"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center"
diff --git a/res/layout-land/fragment_theme_picker.xml b/res/layout-land/fragment_theme_picker.xml
index cd3cdbd..dc30232 100644
--- a/res/layout-land/fragment_theme_picker.xml
+++ b/res/layout-land/fragment_theme_picker.xml
@@ -31,7 +31,7 @@
             android:layout_height="match_parent"
             android:orientation="horizontal">
 
-            <com.android.customization.widget.PreviewPager
+            <com.android.wallpaper.widget.PreviewPager
                 android:id="@+id/theme_preview_pager"
                 android:layout_width="0dp"
                 android:layout_height="match_parent"
@@ -55,30 +55,14 @@
                     android:layout_height="0dp"
                     android:layout_weight="1"/>
 
-                <RelativeLayout
-                    android:layout_width="match_parent"
+                <Button
+                    android:id="@+id/apply_button"
+                    style="@style/ActionPrimaryButton"
+                    android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:background="@null"
-                    android:paddingHorizontal="10dp">
-                    <CheckBox
-                        android:id="@+id/use_my_wallpaper"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:layout_alignParentStart="true"
-                        android:layout_centerVertical="true"
-                        android:layout_toStartOf="@+id/apply_button"
-                        android:ellipsize="end"
-                        android:paddingLeft="4dp"
-                        android:minHeight="@dimen/min_taptarget_height"
-                        android:text="@string/keep_my_wallpaper"/>
-                    <Button
-                        android:id="@+id/apply_button"
-                        style="@style/ActionPrimaryButton"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:layout_alignParentEnd="true"
-                        android:text="@string/apply_theme_btn"/>
-                </RelativeLayout>
+                    android:layout_gravity="end"
+                    android:paddingHorizontal="10dp"
+                    android:text="@string/apply_theme_btn"/>
             </LinearLayout>
         </LinearLayout>
 
@@ -98,7 +82,7 @@
             android:visibility="gone">
             <TextView
                 android:id="@+id/error_message"
-                style="@style/HeaderTextAppearance"
+                style="@style/TitleTextAppearance"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center"
diff --git a/res/layout/activity_customization_picker_main.xml b/res/layout/activity_customization_picker_main.xml
index 5910ab6..40af303 100755
--- a/res/layout/activity_customization_picker_main.xml
+++ b/res/layout/activity_customization_picker_main.xml
@@ -36,4 +36,6 @@
         app:labelVisibilityMode="labeled"
         app:menu="@menu/bottom_navigation_menu"/>
 
+    <include layout="@layout/bottom_action_bar" />
+
 </FrameLayout>
diff --git a/res/layout/fragment_clock_picker.xml b/res/layout/fragment_clock_picker.xml
index e7530f3..6b9f94c 100644
--- a/res/layout/fragment_clock_picker.xml
+++ b/res/layout/fragment_clock_picker.xml
@@ -32,7 +32,7 @@
             android:layout_width="match_parent"
             android:layout_height="match_parent">
 
-            <com.android.customization.widget.PreviewPager
+            <com.android.wallpaper.widget.PreviewPager
                 android:id="@+id/clock_preview_pager"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
@@ -100,7 +100,7 @@
             android:visibility="gone">
             <TextView
                 android:id="@+id/error_message"
-                style="@style/HeaderTextAppearance"
+                style="@style/TitleTextAppearance"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center"
diff --git a/res/layout/fragment_custom_theme_component.xml b/res/layout/fragment_custom_theme_component.xml
index fb9c36c..cf80192 100644
--- a/res/layout/fragment_custom_theme_component.xml
+++ b/res/layout/fragment_custom_theme_component.xml
@@ -76,7 +76,7 @@
             android:layout_marginEnd="10dp"
             android:layout_marginBottom="10dp"
             android:textAlignment="center"
-            android:textAppearance="@style/HeaderTextAppearance"
+            android:textAppearance="@style/TitleTextAppearance"
             android:textSize="@dimen/component_options_title_size"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent"
diff --git a/res/layout/fragment_custom_theme_name.xml b/res/layout/fragment_custom_theme_name.xml
index 6a3d1ba..0a18aab 100644
--- a/res/layout/fragment_custom_theme_name.xml
+++ b/res/layout/fragment_custom_theme_name.xml
@@ -67,7 +67,7 @@
             android:layout_marginEnd="10dp"
             android:layout_marginBottom="10dp"
             android:textAlignment="center"
-            android:textAppearance="@style/HeaderTextAppearance"
+            android:textAppearance="@style/TitleTextAppearance"
             android:textSize="@dimen/component_options_title_size"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent"
diff --git a/res/layout/fragment_grid_picker.xml b/res/layout/fragment_grid_picker.xml
index 182d795..5bf96e1 100644
--- a/res/layout/fragment_grid_picker.xml
+++ b/res/layout/fragment_grid_picker.xml
@@ -32,56 +32,46 @@
             android:layout_width="match_parent"
             android:layout_height="match_parent">
 
-            <com.android.customization.widget.PreviewPager
+            <com.android.wallpaper.widget.PreviewPager
                 android:id="@+id/grid_preview_pager"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:background="@color/preview_pager_background"
                 app:card_style="screen_aspect_ratio"
                 app:layout_constrainedHeight="true"
-                app:layout_constraintBottom_toTopOf="@id/options_container"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintBottom_toTopOf="@id/options_title"
+                app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintHeight_max="@dimen/preview_pager_max_height"
                 app:layout_constraintHeight_min="@dimen/preview_pager_min_height"
                 app:layout_constraintVertical_bias="0.0"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toTopOf="parent"
                 app:layout_constraintVertical_chainStyle="spread_inside"/>
 
+            <TextView
+                android:id="@+id/options_title"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:gravity="center"
+                android:paddingVertical="18dp"
+                android:lineHeight="24dp"
+                android:singleLine="true"
+                android:text="@string/grid_options_title"
+                android:textAppearance="@style/TitleTextAppearance"
+                app:layout_constraintTop_toBottomOf="@id/grid_preview_pager"
+                app:layout_constraintBottom_toTopOf="@id/options_container"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"/>
+
             <androidx.recyclerview.widget.RecyclerView
                 android:id="@+id/options_container"
                 android:layout_width="match_parent"
                 android:layout_height="@dimen/options_container_height"
                 android:layout_gravity="center_horizontal"
-                android:layout_marginTop="10dp"
-                app:layout_constraintBottom_toTopOf="@id/placeholder"
+                app:layout_constraintTop_toBottomOf="@+id/options_title"
+                app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintEnd_toEndOf="parent"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toBottomOf="@+id/grid_preview_pager"
                 app:layout_constraintVertical_bias="1.0"/>
-
-            <Space
-                android:id="@+id/placeholder"
-                android:layout_width="match_parent"
-                android:layout_height="@dimen/min_taptarget_height"
-                app:layout_constraintBottom_toTopOf="@id/apply_button"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toBottomOf="@id/options_container"
-                app:layout_constraintVertical_bias="1.0"/>
-
-            <Button
-                android:id="@+id/apply_button"
-                style="@style/ActionPrimaryButton"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="end"
-                android:layout_marginEnd="10dp"
-                android:layout_marginVertical="10dp"
-                android:layout_weight="1"
-                android:text="@string/apply_theme_btn"
-                app:layout_constraintBottom_toBottomOf="parent"
-                app:layout_constraintEnd_toEndOf="parent"/>
-
         </androidx.constraintlayout.widget.ConstraintLayout>
 
         <androidx.core.widget.ContentLoadingProgressBar
@@ -99,7 +89,7 @@
             android:visibility="gone">
             <TextView
                 android:id="@+id/error_message"
-                style="@style/HeaderTextAppearance"
+                style="@style/TitleTextAppearance"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center"
diff --git a/res/layout/fragment_theme_picker.xml b/res/layout/fragment_theme_picker.xml
index 8272bde..d15d93f 100644
--- a/res/layout/fragment_theme_picker.xml
+++ b/res/layout/fragment_theme_picker.xml
@@ -32,7 +32,7 @@
             android:layout_width="match_parent"
             android:layout_height="match_parent">
 
-            <com.android.customization.widget.PreviewPager
+            <com.android.wallpaper.widget.PreviewPager
                 android:id="@+id/theme_preview_pager"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
@@ -53,29 +53,11 @@
                 android:layout_gravity="bottom|center_horizontal"
                 android:layout_marginTop="10dp"
                 android:layout_weight="1"
-                app:layout_constraintBottom_toTopOf="@id/use_my_wallpaper"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toBottomOf="@+id/theme_preview_pager"
                 app:layout_constraintVertical_bias="1.0"/>
 
-            <CheckBox
-                android:id="@+id/use_my_wallpaper"
-                android:layout_width="wrap_content"
-                android:layout_height="@dimen/min_taptarget_height"
-                android:layout_marginStart="10dp"
-                android:ellipsize="end"
-                android:gravity="start|center_vertical"
-                android:paddingLeft="4dp"
-                android:text="@string/keep_my_wallpaper"
-                app:layout_constraintBottom_toTopOf="@id/apply_button"
-                app:layout_constraintEnd_toEndOf="parent"
-                app:layout_constraintHeight_min="@dimen/min_taptarget_height"
-                app:layout_constraintHorizontal_bias="0.0"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toBottomOf="@id/options_container"
-                app:layout_constraintVertical_bias="1.0"/>
-
             <Button
                 android:id="@+id/apply_button"
                 style="@style/ActionPrimaryButton"
@@ -105,7 +87,7 @@
             android:visibility="gone">
             <TextView
                 android:id="@+id/error_message"
-                style="@style/HeaderTextAppearance"
+                style="@style/TitleTextAppearance"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center"
diff --git a/res/layout/grid_preview_card.xml b/res/layout/grid_preview_card.xml
index ae66b83..90b5578 100644
--- a/res/layout/grid_preview_card.xml
+++ b/res/layout/grid_preview_card.xml
@@ -24,6 +24,12 @@
         android:id="@+id/grid_preview_image"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:background="@color/primary_color"/>
+        android:background="@color/primary_color" />
+
+    <SurfaceView
+        android:id="@+id/grid_preview_surface"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="@color/primary_color" />
 
 </androidx.cardview.widget.CardView>
\ No newline at end of file
diff --git a/res/layout/preview_card_wallpaper_content.xml b/res/layout/preview_card_wallpaper_content.xml
deleted file mode 100644
index 0b43c2f..0000000
--- a/res/layout/preview_card_wallpaper_content.xml
+++ /dev/null
@@ -1,31 +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:tools="http://schemas.android.com/tools"
-    android:id="@+id/preview_static_image"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:layout_gravity="bottom"
-    tools:showIn="@layout/theme_preview_card">
-    <TextView
-        style="@style/CardTitleTextAppearance"
-        android:id="@+id/wallpaper_description"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:gravity="center_horizontal|bottom"/>
-</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/preview_pager.xml b/res/layout/preview_pager.xml
deleted file mode 100644
index 43f8fb6..0000000
--- a/res/layout/preview_pager.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-
-     Copyright (C) 2018 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"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical">
-
-    <androidx.viewpager.widget.ViewPager
-        android:id="@+id/preview_viewpager"
-        android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1"/>
-
-    <FrameLayout
-        android:id="@+id/indicator_container"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/indicator_container_height"
-        android:layout_gravity="bottom">
-
-        <com.android.customization.widget.PageIndicator
-            android:id="@+id/page_indicator"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center" />
-
-        <FrameLayout
-            android:id="@+id/arrow_previous"
-            android:layout_width="@dimen/indicator_arrow_touch_area_size"
-            android:layout_height="@dimen/indicator_arrow_touch_area_size"
-            android:layout_gravity="center_vertical|left"
-            android:layout_marginStart="@dimen/indicator_arrow_container_margin_horizontal"
-            android:background="?android:attr/selectableItemBackgroundBorderless"
-            android:contentDescription="@string/previous_page_content_description"
-            android:visibility="gone"
-            tools:ignore="RtlHardcoded">
-
-            <ImageView
-                android:layout_width="@dimen/indicator_arrow_size"
-                android:layout_height="@dimen/indicator_arrow_size"
-                android:layout_gravity="center"
-                android:contentDescription="@null"
-                android:tint="@color/indicator_arrow_color"
-                android:src="@drawable/ic_arrow_back_24px" />
-        </FrameLayout>
-
-        <FrameLayout
-            android:id="@+id/arrow_next"
-            android:layout_width="@dimen/indicator_arrow_touch_area_size"
-            android:layout_height="@dimen/indicator_arrow_touch_area_size"
-            android:layout_gravity="center_vertical|right"
-            android:layout_marginEnd="@dimen/indicator_arrow_container_margin_horizontal"
-            android:background="?android:attr/selectableItemBackgroundBorderless"
-            android:contentDescription="@string/next_page_content_description"
-            android:visibility="gone"
-            tools:ignore="RtlHardcoded">
-
-            <ImageView
-                android:layout_width="@dimen/indicator_arrow_size"
-                android:layout_height="@dimen/indicator_arrow_size"
-                android:layout_gravity="center"
-                android:contentDescription="@null"
-                android:tint="@color/indicator_arrow_color"
-                android:src="@drawable/ic_arrow_forward_24px" />
-        </FrameLayout>
-    </FrameLayout>
-</LinearLayout>
\ No newline at end of file
diff --git a/res/menu/bottom_navigation_menu.xml b/res/menu/bottom_navigation_menu.xml
index d477aaf..b64bf8d 100644
--- a/res/menu/bottom_navigation_menu.xml
+++ b/res/menu/bottom_navigation_menu.xml
@@ -17,19 +17,19 @@
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
     <!-- TODO (santie): replace icons with real ones when available -->
     <item
+        android:id="@+id/nav_wallpaper"
+        android:title="@string/wallpaper_title"
+        android:icon="@drawable/ic_nav_wallpaper" />
+    <item
         android:id="@+id/nav_theme"
         android:title="@string/theme_title"
         android:icon="@drawable/ic_nav_theme" />
     <item
-        android:id="@+id/nav_clock"
-        android:title="@string/clock_title"
-        android:icon="@drawable/ic_nav_clock" />
-    <item
         android:id="@+id/nav_grid"
         android:title="@string/grid_title"
         android:icon="@drawable/ic_nav_grid" />
     <item
-        android:id="@+id/nav_wallpaper"
-        android:title="@string/wallpaper_title"
-        android:icon="@drawable/ic_nav_wallpaper" />
+        android:id="@+id/nav_clock"
+        android:title="@string/clock_title"
+        android:icon="@drawable/ic_nav_clock" />
 </menu>
\ No newline at end of file
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index d0e0226..39173b0 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -47,7 +47,7 @@
     <string name="apply_theme_error_msg" msgid="791364062636538317">"حدثت مشكلة أثناء تطبيق النمط."</string>
     <string name="custom_theme_next" msgid="6235420097213197301">"التالي"</string>
     <string name="custom_theme_previous" msgid="4941132112640503022">"الخطوة السابقة"</string>
-    <string name="custom_theme_title" msgid="2192300350332693631">"مخصّص <xliff:g id="ID_1">%1$d</xliff:g>"</string>
+    <string name="custom_theme_title" msgid="2192300350332693631">"<xliff:g id="ID_1">%1$d</xliff:g> مخصّصة"</string>
     <string name="custom_theme_fragment_title" msgid="6615547284702040280">"النمط المخصّص"</string>
     <string name="custom_theme_delete" msgid="4744494663184126202">"حذف"</string>
     <string name="font_component_title" msgid="8800340833695292049">"اختيار الخط"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 1e8c4e1..a1b4262 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -24,7 +24,7 @@
     <string name="wallpaper_title" msgid="6952635398953194544">"Шпалеры"</string>
     <string name="apply_theme_btn" msgid="6293081192321303991">"Ужыць"</string>
     <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Дакраніцеся, каб рэдагаваць"</string>
-    <string name="keep_my_wallpaper" msgid="8012385376769568517">"Захаваць бягучыя шпалеры"</string>
+    <string name="keep_my_wallpaper" msgid="8012385376769568517">"Захаваць цяперашнія шпалеры"</string>
     <string name="apply_btn" msgid="7965877231041987336">"Ужыць"</string>
     <string name="accessibility_preview_pager" msgid="3548503287402185430">"Старонка <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="5290226604542300962">"Далей"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 45ab40e..c09fdef 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -23,7 +23,7 @@
     <string name="grid_title" msgid="2825094404523390773">"Mreža"</string>
     <string name="wallpaper_title" msgid="6952635398953194544">"Pozadinska slika"</string>
     <string name="apply_theme_btn" msgid="6293081192321303991">"Primijeni"</string>
-    <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Dodirnite da uredite"</string>
+    <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Dodirnite da izmijenite"</string>
     <string name="keep_my_wallpaper" msgid="8012385376769568517">"Zadrži trenutnu pozadinsku sliku"</string>
     <string name="apply_btn" msgid="7965877231041987336">"Primijeni"</string>
     <string name="accessibility_preview_pager" msgid="3548503287402185430">"Stranica <xliff:g id="ID_1">%1$d</xliff:g> od <xliff:g id="ID_2">%2$d</xliff:g>"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index deb9625..fae57a5 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -17,8 +17,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="6995669566699638946">"Στιλ και ταπετσαρίες"</string>
-    <string name="theme_title" msgid="2144932106319405101">"Στιλ"</string>
+    <string name="app_name" msgid="6995669566699638946">"Στυλ και ταπετσαρίες"</string>
+    <string name="theme_title" msgid="2144932106319405101">"Στυλ"</string>
     <string name="clock_title" msgid="2126046720254613991">"Ρολόι"</string>
     <string name="grid_title" msgid="2825094404523390773">"Πλέγμα"</string>
     <string name="wallpaper_title" msgid="6952635398953194544">"Ταπετσαρία"</string>
@@ -42,13 +42,13 @@
     <string name="font_card_title" msgid="2343292653502548685">"ΑΒΓ • αβγ • 123"</string>
     <string name="font_card_body" msgid="6790525594503904468">"Προσθέστε τις αγαπημένες σας γραμματοσειρές σε κάθε οθόνη"</string>
     <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string>
-    <string name="applied_theme_msg" msgid="7348498271552054431">"Εφαρμόστηκε στιλ"</string>
+    <string name="applied_theme_msg" msgid="7348498271552054431">"Εφαρμόστηκε στυλ"</string>
     <string name="applied_clock_msg" msgid="1938218786265793285">"Το ρολόι εφαρμόστηκε"</string>
-    <string name="apply_theme_error_msg" msgid="791364062636538317">"Παρουσιάστηκε ένα πρόβλημα με την εφαρμογή του στιλ"</string>
+    <string name="apply_theme_error_msg" msgid="791364062636538317">"Παρουσιάστηκε ένα πρόβλημα με την εφαρμογή του στυλ"</string>
     <string name="custom_theme_next" msgid="6235420097213197301">"Επόμενο"</string>
     <string name="custom_theme_previous" msgid="4941132112640503022">"Προηγούμενο"</string>
     <string name="custom_theme_title" msgid="2192300350332693631">"Προσαρμοσμένο <xliff:g id="ID_1">%1$d</xliff:g>"</string>
-    <string name="custom_theme_fragment_title" msgid="6615547284702040280">"Προσαρμοσμένο στιλ"</string>
+    <string name="custom_theme_fragment_title" msgid="6615547284702040280">"Προσαρμοσμένο στυλ"</string>
     <string name="custom_theme_delete" msgid="4744494663184126202">"Διαγραφή"</string>
     <string name="font_component_title" msgid="8800340833695292049">"Επιλέξτε γραμματοσειρά"</string>
     <string name="icon_component_title" msgid="5779787138399083903">"Επιλογή εικονιδίων"</string>
@@ -61,7 +61,7 @@
     <string name="cancel" msgid="4651030493668562067">"Ακύρωση"</string>
     <string name="set_theme_wallpaper_dialog_message" msgid="2179661027350908003">"Ορισμός φόντου στιλ"</string>
     <string name="use_style_instead_title" msgid="1578754995763917502">"Χρήση <xliff:g id="ID_1">%1$s</xliff:g> εναλλακτικά;"</string>
-    <string name="use_style_instead_body" msgid="3051937045807471496">"Τα στοιχεία που επιλέγετε αντιστοιχούν στο στιλ <xliff:g id="ID_1">%1$s</xliff:g>. Θέλετε να χρησιμοποιήσετε εναλλακτικά το στιλ <xliff:g id="ID_2">%1$s</xliff:g>;"</string>
+    <string name="use_style_instead_body" msgid="3051937045807471496">"Τα στοιχεία που επιλέγετε αντιστοιχούν στο στυλ <xliff:g id="ID_1">%1$s</xliff:g>. Θέλετε να χρησιμοποιήσετε εναλλακτικά το στυλ <xliff:g id="ID_2">%1$s</xliff:g>;"</string>
     <string name="use_style_button" msgid="1754493078383627019">"Χρήση <xliff:g id="ID_1">%1$s</xliff:g>"</string>
     <string name="no_thanks" msgid="7286616980115687627">"Όχι, ευχαριστώ"</string>
     <string name="clock_preview_content_description" msgid="5460561185905717460">"Προεπισκόπηση ρολογιού <xliff:g id="ID_1">%1$s</xliff:g>"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
deleted file mode 100644
index 756ad00..0000000
--- a/res/values-en-rCA/strings.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2018 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="app_name" msgid="6995669566699638946">"Styles &amp; wallpapers"</string>
-    <string name="theme_title" msgid="2144932106319405101">"Style"</string>
-    <string name="clock_title" msgid="2126046720254613991">"Clock"</string>
-    <string name="grid_title" msgid="2825094404523390773">"Grid"</string>
-    <string name="wallpaper_title" msgid="6952635398953194544">"Wallpaper"</string>
-    <string name="apply_theme_btn" msgid="6293081192321303991">"Apply"</string>
-    <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Tap to edit"</string>
-    <string name="keep_my_wallpaper" msgid="8012385376769568517">"Keep current wallpaper"</string>
-    <string name="apply_btn" msgid="7965877231041987336">"Apply"</string>
-    <string name="accessibility_preview_pager" msgid="3548503287402185430">"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="5290226604542300962">"Next"</string>
-    <string name="previous_page_content_description" msgid="6025726405430262788">"Previous"</string>
-    <string name="option_applied_description" msgid="5022305212078053534">"<xliff:g id="ID_1">%1$s</xliff:g>, currently applied"</string>
-    <string name="option_applied_previewed_description" msgid="5269654286638446858">"<xliff:g id="ID_1">%1$s</xliff:g>, currently applied and previewed"</string>
-    <string name="option_previewed_description" msgid="3467217598865047661">"<xliff:g id="ID_1">%1$s</xliff:g>, currently previewed"</string>
-    <string name="theme_description" msgid="3697012391785254635">"Font: <xliff:g id="ID_1">%1$s</xliff:g>, icons: <xliff:g id="ID_2">%2$s</xliff:g>, shape: <xliff:g id="ID_3">%3$s</xliff:g>, colour: <xliff:g id="ID_4">%4$s</xliff:g>"</string>
-    <string name="default_theme_title" msgid="2555741736622366797">"Default"</string>
-    <string name="preview_name_font" msgid="4465423899630037038">"Font"</string>
-    <string name="preview_name_icon" msgid="6818927315316316440">"Icon"</string>
-    <string name="preview_name_color" msgid="8776203144994416172">"Colour"</string>
-    <string name="preview_name_shape" msgid="5676971146080968721">"Shape"</string>
-    <string name="preview_name_wallpaper" msgid="1738652462949531828">"Wallpaper"</string>
-    <string name="font_card_title" msgid="2343292653502548685">"ABC • abc • 123"</string>
-    <string name="font_card_body" msgid="6790525594503904468">"Add your favourite fonts to every screen"</string>
-    <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string>
-    <string name="applied_theme_msg" msgid="7348498271552054431">"Style applied"</string>
-    <string name="applied_clock_msg" msgid="1938218786265793285">"Clock applied"</string>
-    <string name="apply_theme_error_msg" msgid="791364062636538317">"There was a problem applying the style"</string>
-    <string name="custom_theme_next" msgid="6235420097213197301">"Next"</string>
-    <string name="custom_theme_previous" msgid="4941132112640503022">"Previous"</string>
-    <string name="custom_theme_title" msgid="2192300350332693631">"Custom <xliff:g id="ID_1">%1$d</xliff:g>"</string>
-    <string name="custom_theme_fragment_title" msgid="6615547284702040280">"Custom Style"</string>
-    <string name="custom_theme_delete" msgid="4744494663184126202">"Delete"</string>
-    <string name="font_component_title" msgid="8800340833695292049">"Choose font"</string>
-    <string name="icon_component_title" msgid="5779787138399083903">"Choose icons"</string>
-    <string name="color_component_title" msgid="1194089273921078816">"Choose colour"</string>
-    <string name="shape_component_title" msgid="8366847436022025538">"Choose shape"</string>
-    <string name="name_component_title" msgid="532425087968663437">"Name your style"</string>
-    <string name="icon_component_label" msgid="2625784884001407944">"Icons <xliff:g id="ID_1">%1$d</xliff:g>"</string>
-    <string name="delete_custom_theme_confirmation" msgid="4452137183628769394">"Delete Custom style?"</string>
-    <string name="delete_custom_theme_button" msgid="5102462988130208824">"Delete"</string>
-    <string name="cancel" msgid="4651030493668562067">"Cancel"</string>
-    <string name="set_theme_wallpaper_dialog_message" msgid="2179661027350908003">"Set style wallpaper"</string>
-    <string name="use_style_instead_title" msgid="1578754995763917502">"Use <xliff:g id="ID_1">%1$s</xliff:g> instead?"</string>
-    <string name="use_style_instead_body" msgid="3051937045807471496">"The components you chose match the <xliff:g id="ID_1">%1$s</xliff:g> style. Do you want to use <xliff:g id="ID_2">%1$s</xliff:g> instead?"</string>
-    <string name="use_style_button" msgid="1754493078383627019">"Use <xliff:g id="ID_1">%1$s</xliff:g>"</string>
-    <string name="no_thanks" msgid="7286616980115687627">"No thanks"</string>
-    <string name="clock_preview_content_description" msgid="5460561185905717460">"<xliff:g id="ID_1">%1$s</xliff:g> clock preview"</string>
-    <string name="something_went_wrong" msgid="529840112449799117">"Oops! Something went wrong."</string>
-</resources>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
deleted file mode 100644
index c92902f..0000000
--- a/res/values-en-rXC/strings.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-     Copyright (C) 2018 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="app_name" msgid="6995669566699638946">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‎‎‎‎‏‎‎‏‎‎‏‎‎‏‎‎‏‎‎‎‎‏‎‏‎‎‎‏‎‎Styles &amp; wallpapers‎‏‎‎‏‎"</string>
-    <string name="theme_title" msgid="2144932106319405101">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‏‎‏‎‏‎‎‎‏‏‎‎‎‏‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‏‎‏‎Style‎‏‎‎‏‎"</string>
-    <string name="clock_title" msgid="2126046720254613991">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‏‏‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‎‏‏‎‎‏‏‏‏‎‎‏‏‏‎Clock‎‏‎‎‏‎"</string>
-    <string name="grid_title" msgid="2825094404523390773">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‎‏‎‎‏‏‎‎‎‎‎‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‏‎‎‎‏‏‏‏‎‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎Grid‎‏‎‎‏‎"</string>
-    <string name="wallpaper_title" msgid="6952635398953194544">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‎‏‎‎‎‎‏‏‎‎‎‎‎Wallpaper‎‏‎‎‏‎"</string>
-    <string name="apply_theme_btn" msgid="6293081192321303991">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‎‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‏‏‎‎‎‏‎‏‏‎‏‏‎‏‏‏‎Apply‎‏‎‎‏‎"</string>
-    <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎‎‎‏‏‎‏‎‎‏‏‎‎‎‏‎‏‏‎‏‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‎‎‎‎Tap to edit‎‏‎‎‏‎"</string>
-    <string name="keep_my_wallpaper" msgid="8012385376769568517">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎‎‎‏‏‎‎‎‏‏‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‏‎‎‎‎‎‏‎‏‎Keep current wallpaper‎‏‎‎‏‎"</string>
-    <string name="apply_btn" msgid="7965877231041987336">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‎‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‎‎‏‏‎‎‎‎‏‎‎‎‎Apply‎‏‎‎‏‎"</string>
-    <string name="accessibility_preview_pager" msgid="3548503287402185430">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‏‏‎‏‎‏‏‎‎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="5290226604542300962">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‏‎‏‎‏‎‏‎‏‎‏‎‎‏‎‎‎‏‎‎‎‏‎‏‏‎‏‎‎‏‎‎‎‏‎‎‎‎‏‎‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎Next‎‏‎‎‏‎"</string>
-    <string name="previous_page_content_description" msgid="6025726405430262788">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‏‏‏‎‏‎‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‎‎‎‎‏‎‎‎Previous‎‏‎‎‏‎"</string>
-    <string name="option_applied_description" msgid="5022305212078053534">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‏‎‎‏‎‏‏‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‎‎‎‎‎‏‎‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$s</xliff:g>‎‏‎‎‏‏‏‎, currently applied‎‏‎‎‏‎"</string>
-    <string name="option_applied_previewed_description" msgid="5269654286638446858">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎‎‏‎‎‏‎‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‎‎‎‏‏‎‎‏‎‏‏‏‏‏‎‎‏‎‎‎‎‏‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$s</xliff:g>‎‏‎‎‏‏‏‎, currently applied and previewed‎‏‎‎‏‎"</string>
-    <string name="option_previewed_description" msgid="3467217598865047661">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‎‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‎‏‎‎‏‏‏‎‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‎‎‎‎‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$s</xliff:g>‎‏‎‎‏‏‏‎, currently previewed‎‏‎‎‏‎"</string>
-    <string name="theme_description" msgid="3697012391785254635">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‎‏‎‎‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎‏‏‏‎‏‎‏‏‎Font: ‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$s</xliff:g>‎‏‎‎‏‏‏‎, icons: ‎‏‎‎‏‏‎<xliff:g id="ID_2">%2$s</xliff:g>‎‏‎‎‏‏‏‎, shape: ‎‏‎‎‏‏‎<xliff:g id="ID_3">%3$s</xliff:g>‎‏‎‎‏‏‏‎, color: ‎‏‎‎‏‏‎<xliff:g id="ID_4">%4$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
-    <string name="default_theme_title" msgid="2555741736622366797">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‏‎‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‏‏‎‏‎Default‎‏‎‎‏‎"</string>
-    <string name="preview_name_font" msgid="4465423899630037038">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‏‎‏‏‏‎‎Font‎‏‎‎‏‎"</string>
-    <string name="preview_name_icon" msgid="6818927315316316440">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‎‏‏‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‏‎‎‎‎Icon‎‏‎‎‏‎"</string>
-    <string name="preview_name_color" msgid="8776203144994416172">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‏‎‏‎‏‏‎‎‏‎‎‎‎‏‏‎‎‎‏‎‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‎‏‏‎‎‎‏‎‏‏‎‎‎Color‎‏‎‎‏‎"</string>
-    <string name="preview_name_shape" msgid="5676971146080968721">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‎‎‎‏‎‏‎‎‏‏‏‎‎‏‎‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‏‎Shape‎‏‎‎‏‎"</string>
-    <string name="preview_name_wallpaper" msgid="1738652462949531828">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‎‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‎‏‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‎‏‎‏‏‎‏‎‎‎Wallpaper‎‏‎‎‏‎"</string>
-    <string name="font_card_title" msgid="2343292653502548685">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‏‎‎‎‎‏‏‎‎‎‏‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎ABC • abc • 123‎‏‎‎‏‎"</string>
-    <string name="font_card_body" msgid="6790525594503904468">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‏‎‎‏‎‏‏‎‎‎‎‏‏‎‎‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎Add your favorite fonts to every screen‎‏‎‎‏‎"</string>
-    <string name="grid_title_pattern" msgid="9188866567612607806">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‏‎‏‎‎‏‎‏‏‏‎‏‎‏‎‏‏‎‎‎‏‏‎‎‎‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‏‏‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$d</xliff:g>‎‏‎‎‏‏‏‎x‎‏‎‎‏‏‎<xliff:g id="ID_2">%2$d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
-    <string name="applied_theme_msg" msgid="7348498271552054431">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‎‎‏‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‏‏‏‏‏‎Style applied‎‏‎‎‏‎"</string>
-    <string name="applied_clock_msg" msgid="1938218786265793285">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‎‎‎‏‎‏‏‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎‎‏‎‏‎Clock applied‎‏‎‎‏‎"</string>
-    <string name="apply_theme_error_msg" msgid="791364062636538317">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‎‏‎There was a problem applying the style‎‏‎‎‏‎"</string>
-    <string name="custom_theme_next" msgid="6235420097213197301">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‎‎‎‏‎‏‎‏‎‎‏‏‎‎‎‏‎‏‎‏‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‏‏‏‏‏‏‎‏‎‏‎Next‎‏‎‎‏‎"</string>
-    <string name="custom_theme_previous" msgid="4941132112640503022">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‎‏‎‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‏‎‎‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‎Previous‎‏‎‎‏‎"</string>
-    <string name="custom_theme_title" msgid="2192300350332693631">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‏‏‎‎‏‎‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‏‏‏‎Custom ‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
-    <string name="custom_theme_fragment_title" msgid="6615547284702040280">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‏‏‏‏‎‎‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‏‏‎‏‎‏‏‎‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‏‏‎‏‏‎‎‎‎Custom Style‎‏‎‎‏‎"</string>
-    <string name="custom_theme_delete" msgid="4744494663184126202">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‎‎‎‎‏‎‎‎‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‎‎Delete‎‏‎‎‏‎"</string>
-    <string name="font_component_title" msgid="8800340833695292049">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‏‎‎‏‎‏‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‎‏‎Choose font‎‏‎‎‏‎"</string>
-    <string name="icon_component_title" msgid="5779787138399083903">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‎‏‎‏‏‏‏‎‏‏‎‏‏‏‎‎‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‏‏‎Choose icons‎‏‎‎‏‎"</string>
-    <string name="color_component_title" msgid="1194089273921078816">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‎‎‏‎‎‏‎‎‎‎‎‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‎‎‎‎‏‏‎‎‎‏‎‎‎‎‎‎Choose color‎‏‎‎‏‎"</string>
-    <string name="shape_component_title" msgid="8366847436022025538">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‎‏‎‎‎‎‎‎‏‏‎‏‏‎‏‎‎‏‏‏‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‎‏‎‎Choose shape‎‏‎‎‏‎"</string>
-    <string name="name_component_title" msgid="532425087968663437">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‎‎‏‏‎‏‎‏‏‏‏‎‎‎‏‏‎‏‎Name your style‎‏‎‎‏‎"</string>
-    <string name="icon_component_label" msgid="2625784884001407944">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‎‏‎‏‎‏‎‎‏‎‏‏‏‎‎‎‎‏‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‎‎‏‎‎‎‎Icons ‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
-    <string name="delete_custom_theme_confirmation" msgid="4452137183628769394">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‎‏‏‏‎‎‎‎‏‏‏‎‎‏‎‎Delete Custom style?‎‏‎‎‏‎"</string>
-    <string name="delete_custom_theme_button" msgid="5102462988130208824">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‎‏‏‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‎‎‏‏‎‎‎‎‏‏‏‎‎‎‎Delete‎‏‎‎‏‎"</string>
-    <string name="cancel" msgid="4651030493668562067">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‎‎‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‏‏‎Cancel‎‏‎‎‏‎"</string>
-    <string name="set_theme_wallpaper_dialog_message" msgid="2179661027350908003">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‎‏‏‎‎‎‏‏‎‎‎‏‏‎Set style wallpaper‎‏‎‎‏‎"</string>
-    <string name="use_style_instead_title" msgid="1578754995763917502">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‏‎‏‏‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‏‎‎Use ‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$s</xliff:g>‎‏‎‎‏‏‏‎ instead?‎‏‎‎‏‎"</string>
-    <string name="use_style_instead_body" msgid="3051937045807471496">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‏‏‎‏‎‏‎‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‏‎‎‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‏‏‎‏‏‏‎‎‎‏‎‎‎‎The components you chose match the ‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$s</xliff:g>‎‏‎‎‏‏‏‎ style. Do you want to use ‎‏‎‎‏‏‎<xliff:g id="ID_2">%1$s</xliff:g>‎‏‎‎‏‏‏‎ instead?‎‏‎‎‏‎"</string>
-    <string name="use_style_button" msgid="1754493078383627019">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‏‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‎‎‎‎‎‎‏‎‏‏‎‎‎‎‏‎‏‏‎Use ‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
-    <string name="no_thanks" msgid="7286616980115687627">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‏‏‏‎‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‏‎‎‎‏‎‏‎‎‎‏‎‎‎‎‎‎‎‎‎‏‎‎‎‏‏‎‎‏‎‏‏‎No, thanks‎‏‎‎‏‎"</string>
-    <string name="clock_preview_content_description" msgid="5460561185905717460">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$s</xliff:g>‎‏‎‎‏‏‏‎ clock preview‎‏‎‎‏‎"</string>
-    <string name="something_went_wrong" msgid="529840112449799117">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‎Oops! Something went wrong.‎‏‎‎‏‎"</string>
-</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 830a67b..7c372ae 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -33,7 +33,7 @@
     <string name="option_applied_previewed_description" msgid="5269654286638446858">"<xliff:g id="ID_1">%1$s</xliff:g> (opción aplicada y vista previa en curso)"</string>
     <string name="option_previewed_description" msgid="3467217598865047661">"<xliff:g id="ID_1">%1$s</xliff:g> (vista previa en curso)"</string>
     <string name="theme_description" msgid="3697012391785254635">"Fuente: <xliff:g id="ID_1">%1$s</xliff:g>, íconos: <xliff:g id="ID_2">%2$s</xliff:g>, forma: <xliff:g id="ID_3">%3$s</xliff:g>, color: <xliff:g id="ID_4">%4$s</xliff:g>"</string>
-    <string name="default_theme_title" msgid="2555741736622366797">"Predet."</string>
+    <string name="default_theme_title" msgid="2555741736622366797">"Predeter."</string>
     <string name="preview_name_font" msgid="4465423899630037038">"Fuente"</string>
     <string name="preview_name_icon" msgid="6818927315316316440">"Ícono"</string>
     <string name="preview_name_color" msgid="8776203144994416172">"Color"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 0843232..47b3b8b 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -21,7 +21,7 @@
     <string name="theme_title" msgid="2144932106319405101">"Estilo"</string>
     <string name="clock_title" msgid="2126046720254613991">"Reloj"</string>
     <string name="grid_title" msgid="2825094404523390773">"Cuadrícula"</string>
-    <string name="wallpaper_title" msgid="6952635398953194544">"Fondo de pantalla"</string>
+    <string name="wallpaper_title" msgid="6952635398953194544">"Fondo pantalla"</string>
     <string name="apply_theme_btn" msgid="6293081192321303991">"Aplicar"</string>
     <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Toca para editar"</string>
     <string name="keep_my_wallpaper" msgid="8012385376769568517">"Mantener fondo de pantalla actual"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 951ce0e..e461865 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -32,15 +32,15 @@
     <string name="option_applied_description" msgid="5022305212078053534">"<xliff:g id="ID_1">%1$s</xliff:g> (aplikatuta dago)"</string>
     <string name="option_applied_previewed_description" msgid="5269654286638446858">"<xliff:g id="ID_1">%1$s</xliff:g> (aplikatuta eta aurrebista gisa ikusgai)"</string>
     <string name="option_previewed_description" msgid="3467217598865047661">"<xliff:g id="ID_1">%1$s</xliff:g> (aurrebista gisa ikusgai)"</string>
-    <string name="theme_description" msgid="3697012391785254635">"Letra: <xliff:g id="ID_1">%1$s</xliff:g>, ikonoak: <xliff:g id="ID_2">%2$s</xliff:g>, forma: <xliff:g id="ID_3">%3$s</xliff:g>, kolorea: <xliff:g id="ID_4">%4$s</xliff:g>"</string>
+    <string name="theme_description" msgid="3697012391785254635">"Letra-tipoa: <xliff:g id="ID_1">%1$s</xliff:g>, ikonoak: <xliff:g id="ID_2">%2$s</xliff:g>, forma: <xliff:g id="ID_3">%3$s</xliff:g>, kolorea: <xliff:g id="ID_4">%4$s</xliff:g>"</string>
     <string name="default_theme_title" msgid="2555741736622366797">"Lehenetsia"</string>
-    <string name="preview_name_font" msgid="4465423899630037038">"Letra"</string>
+    <string name="preview_name_font" msgid="4465423899630037038">"Letra-tipoa"</string>
     <string name="preview_name_icon" msgid="6818927315316316440">"Ikonoa"</string>
     <string name="preview_name_color" msgid="8776203144994416172">"Kolorea"</string>
     <string name="preview_name_shape" msgid="5676971146080968721">"Forma"</string>
     <string name="preview_name_wallpaper" msgid="1738652462949531828">"Horma-papera"</string>
     <string name="font_card_title" msgid="2343292653502548685">"ABC • abc • 123"</string>
-    <string name="font_card_body" msgid="6790525594503904468">"Gehitu gogoko dituzun letrak pantaila guztietan"</string>
+    <string name="font_card_body" msgid="6790525594503904468">"Gehitu gogoko dituzun letra-tipoak pantaila guztietan"</string>
     <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="applied_theme_msg" msgid="7348498271552054431">"Aplikatu da estiloa"</string>
     <string name="applied_clock_msg" msgid="1938218786265793285">"Aplikatu da erlojua"</string>
@@ -50,7 +50,7 @@
     <string name="custom_theme_title" msgid="2192300350332693631">"<xliff:g id="ID_1">%1$d</xliff:g> pertsonalizat."</string>
     <string name="custom_theme_fragment_title" msgid="6615547284702040280">"Pertsonalizatu estiloa"</string>
     <string name="custom_theme_delete" msgid="4744494663184126202">"Ezabatu"</string>
-    <string name="font_component_title" msgid="8800340833695292049">"Aukeratu letra"</string>
+    <string name="font_component_title" msgid="8800340833695292049">"Aukeratu letra-tipoa"</string>
     <string name="icon_component_title" msgid="5779787138399083903">"Aukeratu ikonoak"</string>
     <string name="color_component_title" msgid="1194089273921078816">"Aukeratu kolorea"</string>
     <string name="shape_component_title" msgid="8366847436022025538">"Aukeratu forma"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 88a85ae..696b5d3 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -32,9 +32,9 @@
     <string name="option_applied_description" msgid="5022305212078053534">"<xliff:g id="ID_1">%1$s</xliff:g>, käytössä tällä hetkellä"</string>
     <string name="option_applied_previewed_description" msgid="5269654286638446858">"<xliff:g id="ID_1">%1$s</xliff:g>, käytössä ja esikatselussa tällä hetkellä"</string>
     <string name="option_previewed_description" msgid="3467217598865047661">"<xliff:g id="ID_1">%1$s</xliff:g>, esikatselussa tällä hetkellä"</string>
-    <string name="theme_description" msgid="3697012391785254635">"Fontti: <xliff:g id="ID_1">%1$s</xliff:g>, kuvakkeet: <xliff:g id="ID_2">%2$s</xliff:g>, muoto: <xliff:g id="ID_3">%3$s</xliff:g>, väri: <xliff:g id="ID_4">%4$s</xliff:g>"</string>
+    <string name="theme_description" msgid="3697012391785254635">"Kirjasin: <xliff:g id="ID_1">%1$s</xliff:g>, kuvakkeet: <xliff:g id="ID_2">%2$s</xliff:g>, muoto: <xliff:g id="ID_3">%3$s</xliff:g>, väri: <xliff:g id="ID_4">%4$s</xliff:g>"</string>
     <string name="default_theme_title" msgid="2555741736622366797">"Oletus"</string>
-    <string name="preview_name_font" msgid="4465423899630037038">"Fontti"</string>
+    <string name="preview_name_font" msgid="4465423899630037038">"Kirjasin"</string>
     <string name="preview_name_icon" msgid="6818927315316316440">"Kuvake"</string>
     <string name="preview_name_color" msgid="8776203144994416172">"Väri"</string>
     <string name="preview_name_shape" msgid="5676971146080968721">"Muoto"</string>
@@ -50,7 +50,7 @@
     <string name="custom_theme_title" msgid="2192300350332693631">"Oma <xliff:g id="ID_1">%1$d</xliff:g>"</string>
     <string name="custom_theme_fragment_title" msgid="6615547284702040280">"Oma tyyli"</string>
     <string name="custom_theme_delete" msgid="4744494663184126202">"Poista"</string>
-    <string name="font_component_title" msgid="8800340833695292049">"Valitse fontti"</string>
+    <string name="font_component_title" msgid="8800340833695292049">"Valitse kirjasin"</string>
     <string name="icon_component_title" msgid="5779787138399083903">"Valitse kuvakkeet"</string>
     <string name="color_component_title" msgid="1194089273921078816">"Valitse väri"</string>
     <string name="shape_component_title" msgid="8366847436022025538">"Valitse muoto"</string>
@@ -65,5 +65,5 @@
     <string name="use_style_button" msgid="1754493078383627019">"Valitse <xliff:g id="ID_1">%1$s</xliff:g>"</string>
     <string name="no_thanks" msgid="7286616980115687627">"Ei kiitos"</string>
     <string name="clock_preview_content_description" msgid="5460561185905717460">"Kellon esikatselu: <xliff:g id="ID_1">%1$s</xliff:g>"</string>
-    <string name="something_went_wrong" msgid="529840112449799117">"Hups! Jotain meni pieleen.."</string>
+    <string name="something_went_wrong" msgid="529840112449799117">"Hups! Jokin meni vikaan."</string>
 </resources>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index e0b66f2..2cdb267 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -21,7 +21,7 @@
     <string name="theme_title" msgid="2144932106319405101">"Estilo"</string>
     <string name="clock_title" msgid="2126046720254613991">"Reloxo"</string>
     <string name="grid_title" msgid="2825094404523390773">"Grade"</string>
-    <string name="wallpaper_title" msgid="6952635398953194544">"Fondo de pantalla"</string>
+    <string name="wallpaper_title" msgid="6952635398953194544">"Fondo pantalla"</string>
     <string name="apply_theme_btn" msgid="6293081192321303991">"Aplicar"</string>
     <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Toca para editar"</string>
     <string name="keep_my_wallpaper" msgid="8012385376769568517">"Conservar fondo de pantalla actual"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 7721a18..b3166b1 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -52,7 +52,7 @@
     <string name="custom_theme_delete" msgid="4744494663184126202">"Izbriši"</string>
     <string name="font_component_title" msgid="8800340833695292049">"Odaberite font"</string>
     <string name="icon_component_title" msgid="5779787138399083903">"Odaberite ikone"</string>
-    <string name="color_component_title" msgid="1194089273921078816">"Odaberite boju"</string>
+    <string name="color_component_title" msgid="1194089273921078816">"Izbor boje"</string>
     <string name="shape_component_title" msgid="8366847436022025538">"Odaberite oblik"</string>
     <string name="name_component_title" msgid="532425087968663437">"Unesite naziv svojeg stila"</string>
     <string name="icon_component_label" msgid="2625784884001407944">"Ikone <xliff:g id="ID_1">%1$d</xliff:g>"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 78f505e..ee4df61 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -53,7 +53,7 @@
     <string name="font_component_title" msgid="8800340833695292049">"Betűtípus kiválasztása"</string>
     <string name="icon_component_title" msgid="5779787138399083903">"Ikonok kiválasztása"</string>
     <string name="color_component_title" msgid="1194089273921078816">"Színválasztás"</string>
-    <string name="shape_component_title" msgid="8366847436022025538">"Alak kiválasztása"</string>
+    <string name="shape_component_title" msgid="8366847436022025538">"Forma kiválasztása"</string>
     <string name="name_component_title" msgid="532425087968663437">"Nevezze el a stílust"</string>
     <string name="icon_component_label" msgid="2625784884001407944">"Ikonok <xliff:g id="ID_1">%1$d</xliff:g>"</string>
     <string name="delete_custom_theme_confirmation" msgid="4452137183628769394">"Törli az egyéni stílust?"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 3a4ff22..94f4d1c 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -53,7 +53,7 @@
     <string name="font_component_title" msgid="8800340833695292049">"Ընտրեք տառատեսակ"</string>
     <string name="icon_component_title" msgid="5779787138399083903">"Ընտրեք պատկերակներ"</string>
     <string name="color_component_title" msgid="1194089273921078816">"Ընտրեք գույնը"</string>
-    <string name="shape_component_title" msgid="8366847436022025538">"Ընտրեք ձւապատկեր"</string>
+    <string name="shape_component_title" msgid="8366847436022025538">"Ընտրեք ձև"</string>
     <string name="name_component_title" msgid="532425087968663437">"Անվանեք ձեր թեման"</string>
     <string name="icon_component_label" msgid="2625784884001407944">"Պատկերակներ <xliff:g id="ID_1">%1$d</xliff:g>"</string>
     <string name="delete_custom_theme_confirmation" msgid="4452137183628769394">"Ջնջե՞լ հատուկ ոճը"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index ea503ff..67721f8 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -47,7 +47,7 @@
     <string name="apply_theme_error_msg" msgid="791364062636538317">"Terjadi masalah saat menerapkan gaya"</string>
     <string name="custom_theme_next" msgid="6235420097213197301">"Berikutnya"</string>
     <string name="custom_theme_previous" msgid="4941132112640503022">"Sebelumnya"</string>
-    <string name="custom_theme_title" msgid="2192300350332693631">"Khusus <xliff:g id="ID_1">%1$d</xliff:g>"</string>
+    <string name="custom_theme_title" msgid="2192300350332693631">"<xliff:g id="ID_1">%1$d</xliff:g> khusus"</string>
     <string name="custom_theme_fragment_title" msgid="6615547284702040280">"Gaya Kustom"</string>
     <string name="custom_theme_delete" msgid="4744494663184126202">"Hapus"</string>
     <string name="font_component_title" msgid="8800340833695292049">"Pilih font"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 43e1b80..f8d444b 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -40,7 +40,7 @@
     <string name="preview_name_shape" msgid="5676971146080968721">"צורה"</string>
     <string name="preview_name_wallpaper" msgid="1738652462949531828">"טפט"</string>
     <string name="font_card_title" msgid="2343292653502548685">"אבג • 123"</string>
-    <string name="font_card_body" msgid="6790525594503904468">"אפשר להוסיף את הגופנים המועדפים לכל מסך"</string>
+    <string name="font_card_body" msgid="6790525594503904468">"אפשר להוסיף את הפונטים המועדפים לכל מסך"</string>
     <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="applied_theme_msg" msgid="7348498271552054431">"הסגנון הוחל"</string>
     <string name="applied_clock_msg" msgid="1938218786265793285">"השעון הותקן"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index b009ad7..c8aa174 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -40,14 +40,14 @@
     <string name="preview_name_shape" msgid="5676971146080968721">"Пішін"</string>
     <string name="preview_name_wallpaper" msgid="1738652462949531828">"Тұсқағаз"</string>
     <string name="font_card_title" msgid="2343292653502548685">"ABC • abc • 123"</string>
-    <string name="font_card_body" msgid="6790525594503904468">"Әр экранға ұнайтын қаріпті қоя аласыз."</string>
+    <string name="font_card_body" msgid="6790525594503904468">"Әрбір экранға ұнайтын қаріптерді қосыңыз."</string>
     <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="applied_theme_msg" msgid="7348498271552054431">"Стиль қолданылды."</string>
     <string name="applied_clock_msg" msgid="1938218786265793285">"Сағат қолданылды."</string>
     <string name="apply_theme_error_msg" msgid="791364062636538317">"Стильді қолдану кезінде қате шықты."</string>
     <string name="custom_theme_next" msgid="6235420097213197301">"Келесі"</string>
     <string name="custom_theme_previous" msgid="4941132112640503022">"Алдыңғы"</string>
-    <string name="custom_theme_title" msgid="2192300350332693631">"Басқа <xliff:g id="ID_1">%1$d</xliff:g>"</string>
+    <string name="custom_theme_title" msgid="2192300350332693631">"Арнаулы <xliff:g id="ID_1">%1$d</xliff:g>"</string>
     <string name="custom_theme_fragment_title" msgid="6615547284702040280">"Арнаулы стиль"</string>
     <string name="custom_theme_delete" msgid="4744494663184126202">"Жою"</string>
     <string name="font_component_title" msgid="8800340833695292049">"Қаріп таңдау"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 6b30392..2cdd6a8 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -53,7 +53,7 @@
     <string name="font_component_title" msgid="8800340833695292049">"글꼴 선택"</string>
     <string name="icon_component_title" msgid="5779787138399083903">"아이콘 선택"</string>
     <string name="color_component_title" msgid="1194089273921078816">"색상 선택"</string>
-    <string name="shape_component_title" msgid="8366847436022025538">"도형 선택"</string>
+    <string name="shape_component_title" msgid="8366847436022025538">"모양 선택"</string>
     <string name="name_component_title" msgid="532425087968663437">"스타일 이름 지정"</string>
     <string name="icon_component_label" msgid="2625784884001407944">"아이콘 <xliff:g id="ID_1">%1$d</xliff:g>개"</string>
     <string name="delete_custom_theme_confirmation" msgid="4452137183628769394">"맞춤 스타일을 삭제하시겠습니까?"</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 9c4aac1..bcd7cea 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -23,7 +23,7 @@
     <string name="grid_title" msgid="2825094404523390773">"Торчо"</string>
     <string name="wallpaper_title" msgid="6952635398953194544">"Тушкагаз"</string>
     <string name="apply_theme_btn" msgid="6293081192321303991">"Колдонуу"</string>
-    <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Өзгөртүү үчүн таптап коюңуз"</string>
+    <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"Түзөтүү үчүн таптап коюңуз"</string>
     <string name="keep_my_wallpaper" msgid="8012385376769568517">"Учурдагы тушкагаз калсын"</string>
     <string name="apply_btn" msgid="7965877231041987336">"Колдонуу"</string>
     <string name="accessibility_preview_pager" msgid="3548503287402185430">"<xliff:g id="ID_2">%2$d</xliff:g> ичинен <xliff:g id="ID_1">%1$d</xliff:g>-барак"</string>
diff --git a/res/values-land/dimens.xml b/res/values-land/dimens.xml
index 985987f..bd37bae 100644
--- a/res/values-land/dimens.xml
+++ b/res/values-land/dimens.xml
@@ -20,10 +20,7 @@
     <dimen name="card_cover_title_text_size">14sp</dimen>
     <dimen name="card_header_icon_size">24dp</dimen>
     <dimen name="card_header_top_margin">6dp</dimen>
-    <dimen name="preview_card_padding">8dp</dimen>
     <dimen name="preview_card_top_padding">6dp</dimen>
-    <dimen name="preview_page_gap">60dp</dimen>
-    <dimen name="preview_page_horizontal_margin">92dp</dimen>
     <dimen name="preview_theme_content_margin">8dp</dimen>
     <dimen name="preview_theme_content_max_height">140dp</dimen>
     <dimen name="preview_theme_content_min_height">100dp</dimen>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 4ceeccf..3b9dd17 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -47,7 +47,7 @@
     <string name="apply_theme_error_msg" msgid="791364062636538317">"ເກີດບັນຫາໃນການນຳໃຊ້ຮູບແບບ"</string>
     <string name="custom_theme_next" msgid="6235420097213197301">"ຖັດໄປ"</string>
     <string name="custom_theme_previous" msgid="4941132112640503022">"ຜ່ານມາ"</string>
-    <string name="custom_theme_title" msgid="2192300350332693631">"ແບບກຳນົດເອງ <xliff:g id="ID_1">%1$d</xliff:g>"</string>
+    <string name="custom_theme_title" msgid="2192300350332693631">"<xliff:g id="ID_1">%1$d</xliff:g> ແບບກຳນົດເອງ"</string>
     <string name="custom_theme_fragment_title" msgid="6615547284702040280">"ຮູບແບບກຳນົດເອງ"</string>
     <string name="custom_theme_delete" msgid="4744494663184126202">"ລຶບ"</string>
     <string name="font_component_title" msgid="8800340833695292049">"ເລືອກຟອນ"</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 241101f..cf58de7 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -53,7 +53,7 @@
     <string name="font_component_title" msgid="8800340833695292049">"Изберете фонт"</string>
     <string name="icon_component_title" msgid="5779787138399083903">"Изберете икони"</string>
     <string name="color_component_title" msgid="1194089273921078816">"Изберете боја"</string>
-    <string name="shape_component_title" msgid="8366847436022025538">"Изберете облик"</string>
+    <string name="shape_component_title" msgid="8366847436022025538">"Изберете форма"</string>
     <string name="name_component_title" msgid="532425087968663437">"Именувајте го вашиот стил"</string>
     <string name="icon_component_label" msgid="2625784884001407944">"Икони <xliff:g id="ID_1">%1$d</xliff:g>"</string>
     <string name="delete_custom_theme_confirmation" msgid="4452137183628769394">"Да се избрише приспособениот стил?"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index e3dd82d..5b3c636 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -24,7 +24,7 @@
     <string name="wallpaper_title" msgid="6952635398953194544">"वालपेपर"</string>
     <string name="apply_theme_btn" msgid="6293081192321303991">"लागू गर्नुहोस्"</string>
     <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"सम्पादन गर्न ट्याप गर्नुहोस्"</string>
-    <string name="keep_my_wallpaper" msgid="8012385376769568517">"अहिले कै वालपेपर राख्नुहोस्"</string>
+    <string name="keep_my_wallpaper" msgid="8012385376769568517">"हालको वालपेपर राख्नुहोस्"</string>
     <string name="apply_btn" msgid="7965877231041987336">"लागू गर्नुहोस्"</string>
     <string name="accessibility_preview_pager" msgid="3548503287402185430">"<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="5290226604542300962">"अर्को"</string>
@@ -32,11 +32,11 @@
     <string name="option_applied_description" msgid="5022305212078053534">"<xliff:g id="ID_1">%1$s</xliff:g>, हालसालै लागू गरिएको"</string>
     <string name="option_applied_previewed_description" msgid="5269654286638446858">"<xliff:g id="ID_1">%1$s</xliff:g>, हालसालै लागू तथा पूर्वावलोकन गरिएको"</string>
     <string name="option_previewed_description" msgid="3467217598865047661">"<xliff:g id="ID_1">%1$s</xliff:g>, हालसालै पूर्वलोकन गरिएको"</string>
-    <string name="theme_description" msgid="3697012391785254635">"फन्ट: <xliff:g id="ID_1">%1$s</xliff:g>, आइकनहरू: <xliff:g id="ID_2">%2$s</xliff:g>, आकार: <xliff:g id="ID_3">%3$s</xliff:g>, रङ्ग: <xliff:g id="ID_4">%4$s</xliff:g>"</string>
+    <string name="theme_description" msgid="3697012391785254635">"फन्ट: <xliff:g id="ID_1">%1$s</xliff:g>, आइकनहरू: <xliff:g id="ID_2">%2$s</xliff:g>, आकार: <xliff:g id="ID_3">%3$s</xliff:g>, रङ: <xliff:g id="ID_4">%4$s</xliff:g>"</string>
     <string name="default_theme_title" msgid="2555741736622366797">"पूर्वनिर्धारित"</string>
     <string name="preview_name_font" msgid="4465423899630037038">"फन्ट"</string>
     <string name="preview_name_icon" msgid="6818927315316316440">"आइकन"</string>
-    <string name="preview_name_color" msgid="8776203144994416172">"रङ्ग"</string>
+    <string name="preview_name_color" msgid="8776203144994416172">"रङ"</string>
     <string name="preview_name_shape" msgid="5676971146080968721">"आकार"</string>
     <string name="preview_name_wallpaper" msgid="1738652462949531828">"वालपेपर"</string>
     <string name="font_card_title" msgid="2343292653502548685">"ABC • abc • १२३"</string>
@@ -52,7 +52,7 @@
     <string name="custom_theme_delete" msgid="4744494663184126202">"मेट्नुहोस्"</string>
     <string name="font_component_title" msgid="8800340833695292049">"फन्ट छनौट गर्नुहोस्"</string>
     <string name="icon_component_title" msgid="5779787138399083903">"आइकनहरू छनौट गर्नुहोस्"</string>
-    <string name="color_component_title" msgid="1194089273921078816">"रङ्ग छनौट गर्नुहोस्"</string>
+    <string name="color_component_title" msgid="1194089273921078816">"रङ छनौट गर्नुहोस्"</string>
     <string name="shape_component_title" msgid="8366847436022025538">"आकार छनौट गर्नुहोस्"</string>
     <string name="name_component_title" msgid="532425087968663437">"आफ्नो शैलीको नाम राख्नुहोस्"</string>
     <string name="icon_component_label" msgid="2625784884001407944">"आइकनहरू <xliff:g id="ID_1">%1$d</xliff:g>"</string>
diff --git a/res/values-night/colors.xml b/res/values-night/colors.xml
index b567d0d..c6b2a3f 100644
--- a/res/values-night/colors.xml
+++ b/res/values-night/colors.xml
@@ -40,9 +40,5 @@
 
     <color name="divider_color">@color/white_14_alpha</color>
 
-    <color name="edit_background_base">@color/material_white_100</color>
-
     <color name="cover_title_color">@color/white_88_alpha</color>
-
-    <color name="preview_pager_background">@color/google_grey900</color>
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 48ca2a5..71f7f24 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -35,7 +35,7 @@
     <string name="theme_description" msgid="3697012391785254635">"Lettertype: <xliff:g id="ID_1">%1$s</xliff:g>, pictogrammen: <xliff:g id="ID_2">%2$s</xliff:g>, vorm: <xliff:g id="ID_3">%3$s</xliff:g>, kleur: <xliff:g id="ID_4">%4$s</xliff:g>"</string>
     <string name="default_theme_title" msgid="2555741736622366797">"Standaard"</string>
     <string name="preview_name_font" msgid="4465423899630037038">"Lettertype"</string>
-    <string name="preview_name_icon" msgid="6818927315316316440">"Icoon"</string>
+    <string name="preview_name_icon" msgid="6818927315316316440">"Pictogram"</string>
     <string name="preview_name_color" msgid="8776203144994416172">"Kleur"</string>
     <string name="preview_name_shape" msgid="5676971146080968721">"Vorm"</string>
     <string name="preview_name_wallpaper" msgid="1738652462949531828">"Achtergrond"</string>
@@ -47,11 +47,11 @@
     <string name="apply_theme_error_msg" msgid="791364062636538317">"Er is een probleem opgetreden bij het toepassen van de stijl"</string>
     <string name="custom_theme_next" msgid="6235420097213197301">"Volgende"</string>
     <string name="custom_theme_previous" msgid="4941132112640503022">"Vorige"</string>
-    <string name="custom_theme_title" msgid="2192300350332693631">"Aangepast <xliff:g id="ID_1">%1$d</xliff:g>"</string>
+    <string name="custom_theme_title" msgid="2192300350332693631">"Custom <xliff:g id="ID_1">%1$d</xliff:g>"</string>
     <string name="custom_theme_fragment_title" msgid="6615547284702040280">"Aangepaste stijl"</string>
     <string name="custom_theme_delete" msgid="4744494663184126202">"Verwijderen"</string>
     <string name="font_component_title" msgid="8800340833695292049">"Lettertype kiezen"</string>
-    <string name="icon_component_title" msgid="5779787138399083903">"Iconen kiezen"</string>
+    <string name="icon_component_title" msgid="5779787138399083903">"Pictogrammen kiezen"</string>
     <string name="color_component_title" msgid="1194089273921078816">"Kleur kiezen"</string>
     <string name="shape_component_title" msgid="8366847436022025538">"Vorm kiezen"</string>
     <string name="name_component_title" msgid="532425087968663437">"Je stijl een naam geven"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 968f216..071664a 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -17,14 +17,14 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="6995669566699638946">"ଷ୍ଟାଇଲ୍ ଏବଂ ୱାଲପେପର୍"</string>
-    <string name="theme_title" msgid="2144932106319405101">"ଷ୍ଟାଇଲ୍"</string>
+    <string name="app_name" msgid="6995669566699638946">"ଶୈଳୀ ଏବଂ ୱାଲ୍‍ପେପର୍"</string>
+    <string name="theme_title" msgid="2144932106319405101">"ଶୈଳୀ"</string>
     <string name="clock_title" msgid="2126046720254613991">"ଘଣ୍ଟା"</string>
     <string name="grid_title" msgid="2825094404523390773">"ଗ୍ରିଡ୍"</string>
     <string name="wallpaper_title" msgid="6952635398953194544">"ୱାଲ୍‌ପେପର୍"</string>
     <string name="apply_theme_btn" msgid="6293081192321303991">"ପ୍ରୟୋଗ କରନ୍ତୁ"</string>
     <string name="edit_custom_theme_lbl" msgid="5211377705710775224">"ଏଡିଟ୍ କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
-    <string name="keep_my_wallpaper" msgid="8012385376769568517">"ବର୍ତ୍ତମାନର ୱାଲ୍‌ପେପର୍‌କୁ ରଖନ୍ତୁ"</string>
+    <string name="keep_my_wallpaper" msgid="8012385376769568517">"ବର୍ତ୍ତମାନ ଥିବା ୱାଲ୍‌ପେପର୍‌କୁ ରଖନ୍ତୁ"</string>
     <string name="apply_btn" msgid="7965877231041987336">"ପ୍ରୟୋଗ କରନ୍ତୁ"</string>
     <string name="accessibility_preview_pager" msgid="3548503287402185430">"ମୋଟ <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="5290226604542300962">"ପରବର୍ତ୍ତୀ"</string>
@@ -48,7 +48,7 @@
     <string name="custom_theme_next" msgid="6235420097213197301">"ପରବର୍ତ୍ତୀ"</string>
     <string name="custom_theme_previous" msgid="4941132112640503022">"ପୂର୍ବବର୍ତ୍ତୀ"</string>
     <string name="custom_theme_title" msgid="2192300350332693631">"କଷ୍ଟମ୍ <xliff:g id="ID_1">%1$d</xliff:g>"</string>
-    <string name="custom_theme_fragment_title" msgid="6615547284702040280">"କଷ୍ଟମ୍‌ ଷ୍ଟାଇଲ୍"</string>
+    <string name="custom_theme_fragment_title" msgid="6615547284702040280">"କଷ୍ଟମ୍‌ ଶୈଳୀ"</string>
     <string name="custom_theme_delete" msgid="4744494663184126202">"ଡିଲିଟ୍‍ କରନ୍ତୁ"</string>
     <string name="font_component_title" msgid="8800340833695292049">"ଫଣ୍ଟ ଚୟନ କରନ୍ତୁ"</string>
     <string name="icon_component_title" msgid="5779787138399083903">"ଆଇକନ୍ ଚୟନ କରନ୍ତୁ"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index cc32cd2..61d89a0 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -40,7 +40,7 @@
     <string name="preview_name_shape" msgid="5676971146080968721">"ਆਕ੍ਰਿਤੀ"</string>
     <string name="preview_name_wallpaper" msgid="1738652462949531828">"ਵਾਲਪੇਪਰ"</string>
     <string name="font_card_title" msgid="2343292653502548685">"ABC • abc • 123"</string>
-    <string name="font_card_body" msgid="6790525594503904468">"ਹਰ ਸਕ੍ਰੀਨ \'ਤੇ ਆਪਣੇ ਮਨਪਸੰਦ ਫੌਂਟ ਸ਼ਾਮਲ ਕਰੋ"</string>
+    <string name="font_card_body" msgid="6790525594503904468">"ਹਰ ਸਕ੍ਰੀਨ \'ਤੇ ਆਪਣਾ ਮਨਪਸੰਦ ਫੌਂਟ ਸ਼ਾਮਲ ਕਰੋ"</string>
     <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g>x<xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="applied_theme_msg" msgid="7348498271552054431">"ਸ਼ੈਲੀ ਲਾਗੂ ਕੀਤੀ ਗਈ"</string>
     <string name="applied_clock_msg" msgid="1938218786265793285">"ਘੜੀ ਲਾਗੂ ਕੀਤੀ ਗਈ"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index d593d27..db157ae 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -63,7 +63,7 @@
     <string name="use_style_instead_title" msgid="1578754995763917502">"Je, utatumia <xliff:g id="ID_1">%1$s</xliff:g> badala yake?"</string>
     <string name="use_style_instead_body" msgid="3051937045807471496">"Vijenzi ulivyochagua vinalingana na mtindo wa <xliff:g id="ID_1">%1$s</xliff:g>. Ungependa kutumia <xliff:g id="ID_2">%1$s</xliff:g> badala yake?"</string>
     <string name="use_style_button" msgid="1754493078383627019">"Tumia <xliff:g id="ID_1">%1$s</xliff:g>"</string>
-    <string name="no_thanks" msgid="7286616980115687627">"Hapana"</string>
+    <string name="no_thanks" msgid="7286616980115687627">"Hapana, asante"</string>
     <string name="clock_preview_content_description" msgid="5460561185905717460">"Onyesho la kukagua saa ya <xliff:g id="ID_1">%1$s</xliff:g>"</string>
     <string name="something_went_wrong" msgid="529840112449799117">"Lo! Hitilafu imetokea."</string>
 </resources>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index de2a5bf..a539944 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -47,7 +47,7 @@
     <string name="apply_theme_error_msg" msgid="791364062636538317">"இந்த ஸ்டைலைப் பயன்படுத்துவதில் சிக்கல் உள்ளது"</string>
     <string name="custom_theme_next" msgid="6235420097213197301">"அடுத்து"</string>
     <string name="custom_theme_previous" msgid="4941132112640503022">"முந்தையது"</string>
-    <string name="custom_theme_title" msgid="2192300350332693631">"பிரத்தியேக <xliff:g id="ID_1">%1$d</xliff:g>"</string>
+    <string name="custom_theme_title" msgid="2192300350332693631">"தனிப்பயன் <xliff:g id="ID_1">%1$d</xliff:g>"</string>
     <string name="custom_theme_fragment_title" msgid="6615547284702040280">"பிரத்தியேக ஸ்டைல்"</string>
     <string name="custom_theme_delete" msgid="4744494663184126202">"நீக்கு"</string>
     <string name="font_component_title" msgid="8800340833695292049">"எழுத்துருவைத் தேர்ந்தெடுத்தல்"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 9baf33c..d061f5e 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -54,7 +54,7 @@
     <string name="icon_component_title" msgid="5779787138399083903">"เลือกไอคอน"</string>
     <string name="color_component_title" msgid="1194089273921078816">"เลือกสี"</string>
     <string name="shape_component_title" msgid="8366847436022025538">"เลือกรูปร่าง"</string>
-    <string name="name_component_title" msgid="532425087968663437">"ตั้งชื่อรูปแบบของคุณ"</string>
+    <string name="name_component_title" msgid="532425087968663437">"ตั้งชื่อสไตล์ของคุณ"</string>
     <string name="icon_component_label" msgid="2625784884001407944">"ไอคอน <xliff:g id="ID_1">%1$d</xliff:g>"</string>
     <string name="delete_custom_theme_confirmation" msgid="4452137183628769394">"ลบรูปแบบที่กำหนดเองใช่ไหม"</string>
     <string name="delete_custom_theme_button" msgid="5102462988130208824">"ลบ"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 0777e24..9e04c90 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -53,7 +53,7 @@
     <string name="font_component_title" msgid="8800340833695292049">"Виберіть шрифт"</string>
     <string name="icon_component_title" msgid="5779787138399083903">"Виберіть значки"</string>
     <string name="color_component_title" msgid="1194089273921078816">"Виберіть колір"</string>
-    <string name="shape_component_title" msgid="8366847436022025538">"Виберіть форму"</string>
+    <string name="shape_component_title" msgid="8366847436022025538">"Вибрати форму"</string>
     <string name="name_component_title" msgid="532425087968663437">"Введіть назву стилю"</string>
     <string name="icon_component_label" msgid="2625784884001407944">"Значки <xliff:g id="ID_1">%1$d</xliff:g>"</string>
     <string name="delete_custom_theme_confirmation" msgid="4452137183628769394">"Видалити власний стиль?"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 85c6d16..f688d90 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -47,7 +47,7 @@
     <string name="apply_theme_error_msg" msgid="791364062636538317">"Đã xảy ra sự cố khi áp dụng kiểu"</string>
     <string name="custom_theme_next" msgid="6235420097213197301">"Tiếp theo"</string>
     <string name="custom_theme_previous" msgid="4941132112640503022">"Trước"</string>
-    <string name="custom_theme_title" msgid="2192300350332693631">"Tùy chỉnh <xliff:g id="ID_1">%1$d</xliff:g>"</string>
+    <string name="custom_theme_title" msgid="2192300350332693631">"<xliff:g id="ID_1">%1$d</xliff:g> tùy chỉnh"</string>
     <string name="custom_theme_fragment_title" msgid="6615547284702040280">"Kiểu tùy chỉnh"</string>
     <string name="custom_theme_delete" msgid="4744494663184126202">"Xóa"</string>
     <string name="font_component_title" msgid="8800340833695292049">"Chọn phông chữ"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 2d3ad40..91ed965 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -40,7 +40,7 @@
     <string name="preview_name_shape" msgid="5676971146080968721">"形狀"</string>
     <string name="preview_name_wallpaper" msgid="1738652462949531828">"桌布"</string>
     <string name="font_card_title" msgid="2343292653502548685">"ABC • abc • 123"</string>
-    <string name="font_card_body" msgid="6790525594503904468">"讓每個畫面顯示您喜愛的字型"</string>
+    <string name="font_card_body" msgid="6790525594503904468">"將您喜愛的字型放進每個畫面"</string>
     <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="applied_theme_msg" msgid="7348498271552054431">"已套用樣式"</string>
     <string name="applied_clock_msg" msgid="1938218786265793285">"已套用時鐘"</string>
@@ -54,7 +54,7 @@
     <string name="icon_component_title" msgid="5779787138399083903">"選擇圖示"</string>
     <string name="color_component_title" msgid="1194089273921078816">"選擇顏色"</string>
     <string name="shape_component_title" msgid="8366847436022025538">"選擇形狀"</string>
-    <string name="name_component_title" msgid="532425087968663437">"為樣式命名"</string>
+    <string name="name_component_title" msgid="532425087968663437">"為您的風格命名"</string>
     <string name="icon_component_label" msgid="2625784884001407944">"圖示 <xliff:g id="ID_1">%1$d</xliff:g>"</string>
     <string name="delete_custom_theme_confirmation" msgid="4452137183628769394">"要刪除自訂樣式嗎?"</string>
     <string name="delete_custom_theme_button" msgid="5102462988130208824">"刪除"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 1a917a2..de8381a 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -40,7 +40,7 @@
     <string name="preview_name_shape" msgid="5676971146080968721">"形狀"</string>
     <string name="preview_name_wallpaper" msgid="1738652462949531828">"桌布"</string>
     <string name="font_card_title" msgid="2343292653502548685">"ABC • abc • 123"</string>
-    <string name="font_card_body" msgid="6790525594503904468">"將你喜愛的字型套用到每個畫面"</string>
+    <string name="font_card_body" msgid="6790525594503904468">"將你喜愛的字型套用到每個畫面上的文字"</string>
     <string name="grid_title_pattern" msgid="9188866567612607806">"<xliff:g id="ID_1">%1$d</xliff:g> x <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="applied_theme_msg" msgid="7348498271552054431">"已套用樣式"</string>
     <string name="applied_clock_msg" msgid="1938218786265793285">"已套用時鐘"</string>
@@ -54,7 +54,7 @@
     <string name="icon_component_title" msgid="5779787138399083903">"選擇圖示"</string>
     <string name="color_component_title" msgid="1194089273921078816">"選擇顏色"</string>
     <string name="shape_component_title" msgid="8366847436022025538">"選擇形狀"</string>
-    <string name="name_component_title" msgid="532425087968663437">"樣式命名"</string>
+    <string name="name_component_title" msgid="532425087968663437">"為樣式命名"</string>
     <string name="icon_component_label" msgid="2625784884001407944">"圖示 <xliff:g id="ID_1">%1$d</xliff:g>"</string>
     <string name="delete_custom_theme_confirmation" msgid="4452137183628769394">"要刪除自訂樣式嗎?"</string>
     <string name="delete_custom_theme_button" msgid="5102462988130208824">"刪除"</string>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
deleted file mode 100644
index ce995cc..0000000
--- a/res/values/attrs.xml
+++ /dev/null
@@ -1,29 +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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android">
-    <!-- PreviewPager specific attributes. -->
-    <declare-styleable name="PreviewPager">
-        <attr name="card_style" format="integer">
-            <!-- The cards are sized so that a small part of the next card in the pager can be seen
-                peeking from the side. -->
-            <enum name="peeking" value="0" />
-            <!-- Cards are sized to match the screen's aspect ratio (based on available height) -->
-            <enum name="screen_aspect_ratio" value="1" />
-        </attr>
-    </declare-styleable>
-</resources>
\ No newline at end of file
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 3d646f9..437e4ea 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -19,8 +19,6 @@
     <color name="icon_background">#FF4285f4</color>
     <color name="black_14_alpha">#24000000</color>
     <color name="white_14_alpha">#24FFFFFF</color>
-    <color name="google_grey700">#5f6368</color>
-    <color name="google_grey900">#202124</color>
 
     <color name="status_bar_color">#ffffffff</color>
 
@@ -30,14 +28,10 @@
     <color name="shape_thumbnail_color">#b2b2b2</color>
     <color name="icon_thumbnail_color">@color/black_87_alpha</color>
 
-    <color name="option_border_default">@color/edit_background_base</color>
-
     <color name="clockface_preview_background">@android:color/black</color>
 
     <color name="theme_preview_icon_color">@color/google_grey700</color>
 
-    <color name="preview_pager_arrow_disabled">@android:color/darker_gray</color>
-
     <color name="text_color_dark">#2d2d2d</color>
     <color name="text_color_light">@color/material_white_text</color>
 
@@ -61,9 +55,5 @@
 
     <color name="divider_color">@color/black_14_alpha</color>
 
-    <color name="edit_background_base">@color/google_grey700</color>
-
     <color name="cover_title_color">@color/black_87_alpha</color>
-
-    <color name="preview_pager_background">@color/secondary_color</color>
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index f7d435c..3c78967 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -16,32 +16,20 @@
      limitations under the License.
 -->
 <resources>
-    <dimen name="bottom_navbar_height">56dp</dimen>
     <dimen name="bottom_navbar_font_text_size">12sp</dimen>
 
     <dimen name="tip_dot_size">8dp</dimen>
     <dimen name="tip_dot_line_width">2dp</dimen>
 
-    <dimen name="check_size">20dp</dimen>
-    <dimen name="check_offset">-4dp</dimen>
+    <dimen name="check_size">16dp</dimen>
+    <dimen name="check_offset">4dp</dimen>
 
-    <dimen name="preview_indicator_width">16dp</dimen>
-    <dimen name="preview_indicator_height">8dp</dimen>
-    <dimen name="indicator_container_height">48dp</dimen>
-    <dimen name="indicator_arrow_size">24dp</dimen>
-    <dimen name="indicator_arrow_touch_area_size">48dp</dimen>
-
-    <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_bottom_margin">2dp</dimen>
     <dimen name="component_preview_page_bottom_margin">16dp</dimen>
 
     <!-- Dimensions for the customization option tiles -->
-    <dimen name="options_container_height">104dp</dimen>
+    <dimen name="options_container_height">120dp</dimen>
     <dimen name="options_container_width">0dp</dimen>
-    <dimen name="option_tile_width">72dp</dimen>
+    <dimen name="option_tile_width">88dp</dimen>
     <dimen name="theme_option_icon_sample_height">18dp</dimen>
     <dimen name="theme_option_icon_sample_width">18dp</dimen>
     <dimen name="theme_option_shape_sample_height">16dp</dimen>
@@ -50,27 +38,23 @@
     <dimen name="theme_option_font_sample_width">52dp</dimen>
     <dimen name="theme_option_sample_padding">5dp</dimen>
     <!-- Note, using dp instead of sp as this is just the "+" symbol, not text -->
-    <dimen name="option_tile_padding_vertical">12dp</dimen>
-    <dimen name="option_tile_padding_horizontal">10dp</dimen>
+    <dimen name="option_tile_padding_vertical">16dp</dimen>
+    <dimen name="option_tile_padding_horizontal">16dp</dimen>
 
     <dimen name="option_bottom_margin">8dp</dimen>
     <!-- Note, using dp instead of sp as this text is more like a "snapshot" of the font -->
     <dimen name="theme_option_font_text_size">16dp</dimen>
     <dimen name="theme_option_font_min_text_size">15dp</dimen>
-    <dimen name="theme_option_title_font_text_size">12sp</dimen>
 
     <dimen name="option_tile_margin_horizontal">6dp</dimen>
     <dimen name="theme_option_label_margin">4dp</dimen>
 
-    <dimen name="preview_card_padding">20dp</dimen>
     <dimen name="preview_card_top_padding">@dimen/preview_card_padding</dimen>
 
     <dimen name="card_title_text_size">16sp</dimen>
     <dimen name="card_cover_title_text_size">24sp</dimen>
     <dimen name="card_header_icon_size">32dp</dimen>
     <dimen name="card_header_top_margin">0dp</dimen>
-    <dimen name="preview_pager_max_height">450dp</dimen>
-    <dimen name="preview_pager_min_height">350dp</dimen>
     <dimen name="preview_theme_max_height">400dp</dimen>
     <dimen name="preview_theme_min_height">180dp</dimen>
     <dimen name="theme_preview_header_drawable_padding">8dp</dimen>
@@ -100,8 +84,6 @@
     <dimen name="component_color_chip_container_size">33dp</dimen>
 
     <dimen name="component_shape_thumb_size">72dp</dimen>
-    <dimen name="option_border_width">2dp</dimen>
-    <dimen name="option_selected_border_width">3dp</dimen>
     <dimen name="component_options_title_size">18sp</dimen>
 
     <!-- For a corner radius of this size or larger, we'll preview a rounded qsb widget. -->
diff --git a/res/values/override.xml b/res/values/override.xml
index a01507e..a070dbe 100644
--- a/res/values/override.xml
+++ b/res/values/override.xml
@@ -17,14 +17,10 @@
 -->
 <resources>
     <string name="themes_stub_package" translatable="false"/>
+    <string name="clocks_stub_package" translatable="false"/>
     <!-- Authority of a provider in System UI that will provide preview info for available clockfaces. -->
     <string name="clocks_provider_authority" translatable="false">com.android.keyguard.clock</string>
 
-    <!--Name of metadata in the main launcher Activity which values contains the authority
-        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>
-
     <string name="launcher_overlayable_package" translatable="false">com.android.launcher3</string>
 
     <!-- List of packages whose icons are used to preview the icon shape for a theme. These are
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f571b6b..c0aef7a 100755
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -50,13 +50,6 @@
         [CHAR LIMIT=20] -->
     <string name="apply_btn">Apply</string>
 
-    <!-- Accessibility label for paging indicator in theme picker preview [CHAR LIMIT=NONE] -->
-    <string name="accessibility_preview_pager">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>
-    <!-- Content description of the next button to bring user to the next preview page.[CHAR LIMIT=NONE] -->
-    <string name="next_page_content_description">Next</string>
-    <!-- Content description of the previous button to bring user to the previous preview page. [CHAR LIMIT=NONE] -->
-    <string name="previous_page_content_description">Previous</string>
-
     <!-- Content description indicating that the selected option is currently applied to the device. [CHAR_LIMIT=NONE] -->
     <string name="option_applied_description"><xliff:g name="style_name">%1$s</xliff:g>, currently applied</string>
 
@@ -74,7 +67,7 @@
 
     <!-- Plus sign used to indicate that the user can add a custom theme -->
 
-    <!-- Name for the Android Theme that comes preset with the device [CHAR LIMIT=10]-->
+    <!-- Name for the Android Theme (Style/Wallpaper/Grid/Clock...) that comes preset with the device [CHAR LIMIT=10]-->
     <string name="default_theme_title">Default</string>
 
     <!-- Title of a page that shows the user the preview of a font selection [CHAR_LIMIT=20] -->
@@ -99,14 +92,20 @@
     <!-- Body text for previewing a font [CHAR LIMIT=160] -->
     <string name="font_card_body">Add your favorite fonts to every screen</string>
 
+    <!--Title for grid options [CHAR LIMIT=NONE] -->
+    <string name="grid_options_title">Choose a grid size</string>
+
     <!--Title for a grid option, describing the number of columns and rows, eg: 4x4 [CHAR LIMIT=10] -->
     <string name="grid_title_pattern"><xliff:g name="num_cols" example="1">%1$d</xliff:g>x<xliff:g name="num_rows" example="1">%2$d</xliff:g></string>
 
     <!-- Message shown when a theme has been applied successfully in the system [CHAR LIMIT=NONE] -->
-    <string name="applied_theme_msg">Style applied</string>
+    <string name="applied_theme_msg">Style set successfully</string>
 
     <!-- Message shown when a clock has been applied successfully in the system [CHAR LIMIT=NONE] -->
-    <string name="applied_clock_msg">Clock applied</string>
+    <string name="applied_clock_msg">Clock set successfully</string>
+
+    <!-- Message shown when a grid has been applied successfully in the system [CHAR LIMIT=NONE] -->
+    <string name="applied_grid_msg">Grid set successfully</string>
 
     <!-- Message shown when a theme couldn't be applied in the system because of an error
         [CHAR LIMIT=NONE] -->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 1289a87..0b61fe4 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -38,6 +38,10 @@
         <item name="android:windowNoTitle">true</item>
         <item name="android:fitsSystemWindows">false</item>
         <item name="android:windowDrawsSystemBarBackgrounds">true</item>
+
+        <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:windowContentOverlay">@null</item>
+        <item name="android:windowDisablePreview">true</item>
     </style>
 
     <!-- Bottom nav -->
@@ -50,7 +54,7 @@
         <item name="android:background">?android:colorPrimary</item>
     </style>
 
-    <style name="BottomNavTextAppearance" parent="HeaderTextAppearance">
+    <style name="BottomNavTextAppearance" parent="TitleTextAppearance">
         <item name="android:textSize">@dimen/bottom_navbar_font_text_size</item>
     </style>
 
@@ -59,34 +63,13 @@
     </style>
 
     <!-- Common components and widgets -->
-    <style name="HeaderTextAppearance" parent="@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title"/>
+    <style name="TitleTextAppearance" parent="@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title"/>
 
     <style name="ActionPrimaryButton" parent="android:Widget.DeviceDefault.Button.Colored"/>
 
     <style name="ActionSecondaryButton" parent="android:Widget.DeviceDefault.Button.Borderless.Colored"/>
 
-    <!-- Option tiles -->
-    <style name="OptionTitleTextAppearance" parent="HeaderTextAppearance">
-        <item name="android:textColor">@color/option_title_color</item>
-        <item name="android:textAlignment">center</item>
-        <item name="android:textSize">@dimen/theme_option_title_font_text_size</item>
-    </style>
-
-    <!-- Preview cards -->
-    <style name="PreviewCard" parent="CardView">
-        <item name="cardCornerRadius">?android:dialogCornerRadius</item>
-        <item name="android:clipChildren">true</item>
-        <item name="contentPadding">@dimen/preview_card_padding</item>
-        <item name="cardBackgroundColor">?android:colorPrimary</item>
-    </style>
-
-    <style name="FullContentPreviewCard" parent="PreviewCard">
-        <item name="android:clipChildren">true</item>
-        <item name="contentPadding">0dp</item>
-        <item name="cardBackgroundColor">?android:colorPrimary</item>
-    </style>
-
-    <style name="CardTitleTextAppearance" parent="HeaderTextAppearance">
+    <style name="CardTitleTextAppearance" parent="TitleTextAppearance">
         <item name="android:textStyle">bold</item>
         <item name="android:textSize">@dimen/card_title_text_size</item>
     </style>
@@ -96,7 +79,7 @@
         <item name="android:textColor">@color/cover_title_color</item>
     </style>
 
-    <style name="FontCardTitleStyle" parent="HeaderTextAppearance">
+    <style name="FontCardTitleStyle" parent="TitleTextAppearance">
         <item name="android:textAlignment">center</item>
     </style>
 
diff --git a/robolectric_tests/Android.mk b/robolectric_tests/Android.mk
index 3037a47..b879418 100644
--- a/robolectric_tests/Android.mk
+++ b/robolectric_tests/Android.mk
@@ -48,7 +48,7 @@
 
 LOCAL_TEST_PACKAGE := ThemePicker
 
-LOCAL_INSTRUMENT_SOURCE_DIRS := $(dir $(LOCAL_PATH))../src \
+LOCAL_INSTRUMENT_SOURCE_DIRS := packages/apps/ThemePicker/src \
 
 LOCAL_ROBOTEST_TIMEOUT := 36000
 
diff --git a/robolectric_tests/src/com/android/customization/model/clock/ClockManagerTest.java b/robolectric_tests/src/com/android/customization/model/clock/ClockManagerTest.java
index d2ab43f..f431006 100644
--- a/robolectric_tests/src/com/android/customization/model/clock/ClockManagerTest.java
+++ b/robolectric_tests/src/com/android/customization/model/clock/ClockManagerTest.java
@@ -19,14 +19,18 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import android.content.ContentResolver;
 import android.provider.Settings.Secure;
+
 import androidx.annotation.Nullable;
 
 import com.android.customization.model.CustomizationManager.Callback;
-
 import com.android.customization.module.ThemesUserEventLogger;
+
+import org.json.JSONException;
+import org.json.JSONObject;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -39,11 +43,15 @@
 public class ClockManagerTest {
 
     private static final String CLOCK_ID = "id";
+    private static final String CLOCK_FIELD = "clock";
+    private static final String CLOCK_FACE_SETTING = "fake_clock_face_setting";
 
     @Mock ClockProvider mProvider;
     @Mock ThemesUserEventLogger mLogger;
     private ContentResolver mContentResolver;
     private ClockManager mManager;
+    @Mock private Clockface mMockClockface;
+    @Mock private Callback mMockCallback;
 
     @Before
     public void setUp() {
@@ -53,7 +61,7 @@
     }
 
     @Test
-    public void testApply() {
+    public void testApply() throws JSONException {
         Clockface clock = new Clockface.Builder().setId(CLOCK_ID).build();
 
         mManager.apply(clock, new Callback() {
@@ -69,16 +77,56 @@
         });
 
         // THEN the clock id is written to secure settings.
-        assertEquals(CLOCK_ID, Secure.getString(mContentResolver, ClockManager.CLOCK_FACE_SETTING));
+        JSONObject json =
+                new JSONObject(Secure.getString(mContentResolver, ClockManager.CLOCK_FACE_SETTING));
+        assertEquals(CLOCK_ID, json.getString(CLOCK_FIELD));
         // AND the event is logged
         verify(mLogger).logClockApplied(clock);
     }
 
     @Test
-    public void testGetCurrentClock() {
-        // GIVEN that secure settings contains a clock id
-        Secure.putString(mContentResolver, ClockManager.CLOCK_FACE_SETTING, CLOCK_ID);
-        // THEN the current clock is that id
+    public void testApply_whenJSONExceptionOccurs_callsOnError() {
+        when(mMockClockface.getId()).thenThrow(JSONException.class);
+
+        mManager.apply(mMockClockface, mMockCallback);
+
+        verify(mMockCallback).onError(null);
+    }
+
+    @Test
+    public void testGetCurrentClock_returnsClockId() throws JSONException {
+        // Secure settings contains a clock id
+        JSONObject json = new JSONObject().put(CLOCK_FIELD, CLOCK_ID);
+        Secure.putString(mContentResolver, ClockManager.CLOCK_FACE_SETTING, json.toString());
+
+        // The current clock is that id
         assertEquals(CLOCK_ID, mManager.getCurrentClock());
     }
+
+    @Test
+    public void testGetCurrentClock_whenJSONExceptionOccurs_returnsClockFaceSetting() {
+        // Secure settings contains a clock face setting with invalid format to cause JSONException.
+        Secure.putString(mContentResolver, ClockManager.CLOCK_FACE_SETTING, CLOCK_FACE_SETTING);
+
+        // The current clock is the clock face setting which is saved in secure settings.
+        assertEquals(CLOCK_FACE_SETTING, mManager.getCurrentClock());
+    }
+
+    @Test
+    public void testGetCurrentClock_withNullIdInSecureSettings_returnsNullId() {
+        // Secure settings contains a null clock id
+        Secure.putString(mContentResolver, ClockManager.CLOCK_FACE_SETTING, /* value= */ null);
+
+        // The current clock is null
+        assertEquals(null, mManager.getCurrentClock());
+    }
+
+    @Test
+    public void testGetCurrentClock_withEmptyIdInSecureSettings_returnsEmptyId() {
+        // Secure settings contains an empty clock id
+        Secure.putString(mContentResolver, ClockManager.CLOCK_FACE_SETTING, /* value= */ "");
+
+        // The current clock is empty
+        assertEquals("", mManager.getCurrentClock());
+    }
 }
diff --git a/robolectric_tests/src/com/android/customization/model/theme/ThemeManagerTest.java b/robolectric_tests/src/com/android/customization/model/theme/ThemeManagerTest.java
index 0a17b5b..cfb8a33 100644
--- a/robolectric_tests/src/com/android/customization/model/theme/ThemeManagerTest.java
+++ b/robolectric_tests/src/com/android/customization/model/theme/ThemeManagerTest.java
@@ -26,13 +26,14 @@
 import static com.android.customization.model.ResourceConstants.SYSUI_PACKAGE;
 import static com.android.customization.model.ResourceConstants.THEME_SETTING;
 
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
 import static junit.framework.TestCase.assertEquals;
-import static junit.framework.TestCase.assertTrue;
 
-import static org.junit.Assert.assertFalse;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import android.provider.Settings;
 
@@ -40,11 +41,12 @@
 import androidx.fragment.app.FragmentActivity;
 
 import com.android.customization.model.CustomizationManager.Callback;
+import com.android.customization.model.CustomizationManager.OptionsFetchedListener;
+import com.android.customization.model.theme.custom.CustomTheme;
 import com.android.customization.module.ThemesUserEventLogger;
 import com.android.customization.testutils.OverlayManagerMocks;
-import com.android.customization.testutils.Wait;
-import com.android.wallpaper.module.WallpaperSetter;
 
+import org.json.JSONObject;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -58,8 +60,8 @@
 public class ThemeManagerTest {
 
     @Mock OverlayManagerCompat mMockOm;
-    @Mock WallpaperSetter mMockWallpaperSetter;
     @Mock ThemesUserEventLogger mThemesUserEventLogger;
+    @Mock ThemeBundleProvider mThemeBundleProvider;
     private OverlayManagerMocks mMockOmHelper;
     private ThemeManager mThemeManager;
     private FragmentActivity mActivity;
@@ -71,9 +73,8 @@
         mActivity = spy(activity);
         mMockOmHelper = new OverlayManagerMocks();
         mMockOmHelper.setUpMock(mMockOm);
-        ThemeBundleProvider provider = mock(ThemeBundleProvider.class);
-        mThemeManager = new ThemeManager(
-                provider, activity, mMockWallpaperSetter, mMockOm, mThemesUserEventLogger);
+        mThemeManager = new ThemeManager(mThemeBundleProvider, activity,
+                mMockOm, mThemesUserEventLogger);
     }
 
     @After
@@ -82,7 +83,7 @@
     }
 
     @Test
-    public void testApply_DefaultTheme() {
+    public void apply_WithDefaultTheme_StoresEmptyJsonString() {
         mMockOmHelper.addOverlay("test.package.name_color", ANDROID_PACKAGE,
                 OVERLAY_CATEGORY_COLOR, true, 0);
         mMockOmHelper.addOverlay("test.package.name_font", ANDROID_PACKAGE,
@@ -102,13 +103,94 @@
 
         applyTheme(defaultTheme);
 
-        assertEquals("Secure Setting should be emtpy after applying default theme",
-                "",
+        assertEquals("Secure Setting should be empty JSON string after applying default theme",
+                new JSONObject().toString(),
                 Settings.Secure.getString(mActivity.getContentResolver(), THEME_SETTING));
     }
 
     @Test
-    public void testApply_NonDefault() {
+    public void apply_WithOverlayTheme_StoresSerializedPackagesWithTimestamp() {
+        ThemeBundle theme = getOverlayTheme();
+        final String serializedPackagesWithTimestamp = theme.getSerializedPackagesWithTimestamp();
+
+        theme = spy(theme);
+        // Makes it return the fixed serializedPackagesWithTimestamp to test. Since we will get
+        // fresh time every time, it's hard to compare for testing.
+        when(theme.getSerializedPackagesWithTimestamp())
+                .thenReturn(serializedPackagesWithTimestamp);
+
+        applyTheme(theme);
+
+        assertEquals("Secure Setting should be the overlay packages after applying theme",
+                serializedPackagesWithTimestamp,
+                Settings.Secure.getString(mActivity.getContentResolver(), THEME_SETTING));
+    }
+
+    @Test
+    public void isAvailable_ThemeBundleProviderAndOverlayManagerAreAvailable_ReturnsTrue() {
+        when(mThemeBundleProvider.isAvailable()).thenReturn(true);
+        when(mMockOm.isAvailable()).thenReturn(true);
+
+        assertTrue(mThemeManager.isAvailable());
+    }
+
+    @Test
+    public void isAvailable_ThemeBundleProviderOrOverlayManagerIsAvailable_ReturnsFalse() {
+        when(mThemeBundleProvider.isAvailable()).thenReturn(false);
+        when(mMockOm.isAvailable()).thenReturn(true);
+        assertFalse(mThemeManager.isAvailable());
+
+        when(mThemeBundleProvider.isAvailable()).thenReturn(true);
+        when(mMockOm.isAvailable()).thenReturn(false);
+        assertFalse(mThemeManager.isAvailable());
+    }
+
+    @Test
+    public void fetchOptions_ThemeBundleProviderFetches() {
+        OptionsFetchedListener listener = mock(OptionsFetchedListener.class);
+
+        mThemeManager.fetchOptions(listener, false);
+
+        verify(mThemeBundleProvider).fetch(listener, false);
+    }
+
+    @Test
+    public void removeCustomTheme_ThemeBundleProviderRemovesCustomTheme() {
+        CustomTheme customTheme = mock(CustomTheme.class);
+        mThemeManager.removeCustomTheme(customTheme);
+
+        verify(mThemeBundleProvider).removeCustomTheme(customTheme);
+    }
+
+    @Test
+    public void findThemeByPackages_ThemeBundleProviderFindsEquivalent() {
+        CustomTheme theme = mock(CustomTheme.class);
+        mThemeManager.findThemeByPackages(theme);
+
+        verify(mThemeBundleProvider).findEquivalent(theme);
+    }
+
+    @Test
+    public void storeEmptyTheme_SettingsSecureStoresEmptyTheme() {
+        mThemeManager.storeEmptyTheme();
+
+        assertEquals(
+                new JSONObject().toString(),
+                Settings.Secure.getString(mActivity.getContentResolver(), THEME_SETTING));
+    }
+
+    @Test
+    public void getStoredOverlays_GetsFromSettingsSecureWithExpectedName() {
+        ThemeBundle theme = getOverlayTheme();
+
+        applyTheme(theme);
+
+        assertEquals(
+                Settings.Secure.getString(mActivity.getContentResolver(), THEME_SETTING),
+                mThemeManager.getStoredOverlays());
+    }
+
+    private ThemeBundle getOverlayTheme() {
         final String bundleColorPackage = "test.package.name_color";
         final String bundleFontPackage = "test.package.name_font";
         final String otherPackage = "other.package.name_font";
@@ -120,16 +202,10 @@
         mMockOmHelper.addOverlay(otherPackage, ANDROID_PACKAGE,
                 OVERLAY_CATEGORY_FONT, false, 0);
 
-        ThemeBundle theme = new ThemeBundle.Builder()
+        return new ThemeBundle.Builder()
                 .addOverlayPackage(OVERLAY_CATEGORY_COLOR, bundleColorPackage)
                 .addOverlayPackage(OVERLAY_CATEGORY_FONT, bundleFontPackage)
                 .build(mActivity);
-
-        applyTheme(theme);
-
-        assertEquals("Secure Setting was not properly set after applying theme",
-                theme.getSerializedPackages(),
-                Settings.Secure.getString(mActivity.getContentResolver(), THEME_SETTING));
     }
 
     private void applyTheme(ThemeBundle theme) {
diff --git a/src/com/android/customization/model/clock/ContentProviderClockProvider.java b/src/com/android/customization/model/clock/ContentProviderClockProvider.java
index ad60ddc..8f4c031 100644
--- a/src/com/android/customization/model/clock/ContentProviderClockProvider.java
+++ b/src/com/android/customization/model/clock/ContentProviderClockProvider.java
@@ -2,7 +2,9 @@
 
 import android.content.ContentResolver;
 import android.content.Context;
+import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.ProviderInfo;
 import android.database.Cursor;
 import android.net.Uri;
@@ -25,6 +27,7 @@
     private final Context mContext;
     private final ProviderInfo mProviderInfo;
     private List<Clockface> mClocks;
+    private boolean mClockContentAvailable;
 
     public ContentProviderClockProvider(Context context) {
         mContext = context;
@@ -33,11 +36,25 @@
         mProviderInfo = TextUtils.isEmpty(providerAuthority) ? null
                 : mContext.getPackageManager().resolveContentProvider(providerAuthority,
                         PackageManager.MATCH_SYSTEM_ONLY);
+
+        if (TextUtils.isEmpty(mContext.getString(R.string.clocks_stub_package))) {
+            mClockContentAvailable = false;
+        } else {
+            try {
+                ApplicationInfo applicationInfo = mContext.getPackageManager().getApplicationInfo(
+                        mContext.getString(R.string.clocks_stub_package),
+                        PackageManager.MATCH_SYSTEM_ONLY);
+                mClockContentAvailable = applicationInfo != null;
+            } catch (NameNotFoundException e) {
+                mClockContentAvailable = false;
+            }
+        }
     }
 
     @Override
     public boolean isAvailable() {
-        return mProviderInfo != null && (mClocks == null || !mClocks.isEmpty());
+        return mProviderInfo != null && mClockContentAvailable
+                && (mClocks == null || !mClocks.isEmpty());
     }
 
     @Override
diff --git a/src/com/android/customization/model/grid/GridOptionsManager.java b/src/com/android/customization/model/grid/GridOptionsManager.java
index 1599dde..84f5373 100644
--- a/src/com/android/customization/model/grid/GridOptionsManager.java
+++ b/src/com/android/customization/model/grid/GridOptionsManager.java
@@ -16,6 +16,8 @@
 package com.android.customization.model.grid;
 
 import android.os.AsyncTask;
+import android.os.Bundle;
+import android.util.Pair;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -23,7 +25,6 @@
 import com.android.customization.model.CustomizationManager;
 import com.android.customization.module.ThemesUserEventLogger;
 
-import java.util.Collections;
 import java.util.List;
 
 /**
@@ -57,29 +58,42 @@
 
     @Override
     public void fetchOptions(OptionsFetchedListener<GridOption> callback, boolean reload) {
-        new FetchTask(mProvider, callback).execute();
+        new FetchTask(mProvider, callback, reload).execute();
     }
 
-    private static class FetchTask extends AsyncTask<Void, Void, List<GridOption>> {
+    /** See if using surface view to render grid options */
+    public boolean usesSurfaceView() {
+        return mProvider.usesSurfaceView();
+    }
+
+    /** Call through content provider API to render preview */
+    public Bundle renderPreview(Bundle bundle, String gridName) {
+        return mProvider.renderPreview(gridName, bundle);
+    }
+
+    private static class FetchTask extends AsyncTask<Void, Void, Pair<List<GridOption>, String>> {
         private final LauncherGridOptionsProvider mProvider;
         @Nullable private final OptionsFetchedListener<GridOption> mCallback;
+        private final boolean mReload;
 
         private FetchTask(@NonNull LauncherGridOptionsProvider provider,
-                @Nullable OptionsFetchedListener<GridOption> callback) {
+                @Nullable OptionsFetchedListener<GridOption> callback, boolean reload) {
             mCallback = callback;
             mProvider = provider;
+            mReload = reload;
         }
 
         @Override
-        protected List<GridOption> doInBackground(Void[] params) {
-            return mProvider.fetch(false);
+        protected Pair<List<GridOption>, String> doInBackground(Void[] params) {
+            return mProvider.fetch(mReload);
         }
 
         @Override
-        protected void onPostExecute(List<GridOption> gridOptions) {
+        protected void onPostExecute(Pair<List<GridOption>, String> gridOptionsResult) {
             if (mCallback != null) {
-                if (gridOptions != null && !gridOptions.isEmpty()) {
-                    mCallback.onOptionsLoaded(gridOptions);
+                if (gridOptionsResult != null && gridOptionsResult.first != null
+                        && !gridOptionsResult.first.isEmpty()) {
+                    mCallback.onOptionsLoaded(gridOptionsResult.first);
                 } else {
                     mCallback.onError(null);
                 }
diff --git a/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java b/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java
index 7c7f8d4..6a47f95 100644
--- a/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java
+++ b/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java
@@ -18,20 +18,19 @@
 import android.content.ContentResolver;
 import android.content.ContentValues;
 import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ProviderInfo;
-import android.content.pm.ResolveInfo;
 import android.content.res.Resources;
 import android.database.Cursor;
-import android.net.Uri;
+import android.os.Bundle;
 import android.text.TextUtils;
+import android.util.Pair;
+import android.view.SurfaceView;
 
 import androidx.annotation.Nullable;
 import androidx.annotation.WorkerThread;
 
 import com.android.customization.model.ResourceConstants;
 import com.android.wallpaper.R;
+import com.android.wallpaper.util.PreviewUtils;
 
 import com.bumptech.glide.Glide;
 
@@ -53,29 +52,28 @@
     private static final String COL_PREVIEW_COUNT = "preview_count";
     private static final String COL_IS_DEFAULT = "is_default";
 
+    // Normal gird size name
+    private static final String GRID_NAME_NORMAL = "normal";
+
+    private static final String METADATA_KEY_PREVIEW_VERSION = "preview_version";
+
     private final Context mContext;
-    private final String mGridProviderAuthority;
-    private final ProviderInfo mProviderInfo;
+    private final PreviewUtils mPreviewUtils;
     private List<GridOption> mOptions;
+    private String mVersion;
 
     public LauncherGridOptionsProvider(Context context, String authorityMetadataKey) {
+        mPreviewUtils = new PreviewUtils(context, authorityMetadataKey);
         mContext = context;
-        Intent homeIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME);
-
-        ResolveInfo info = context.getPackageManager().resolveActivity(homeIntent,
-                PackageManager.MATCH_DEFAULT_ONLY | PackageManager.GET_META_DATA);
-        if (info != null && info.activityInfo != null && info.activityInfo.metaData != null) {
-            mGridProviderAuthority = info.activityInfo.metaData.getString(authorityMetadataKey);
-        } else {
-            mGridProviderAuthority = null;
-        }
-        // TODO: check permissions if needed
-        mProviderInfo = TextUtils.isEmpty(mGridProviderAuthority) ? null
-                : mContext.getPackageManager().resolveContentProvider(mGridProviderAuthority, 0);
     }
 
     boolean areGridsAvailable() {
-        return mProviderInfo != null;
+        return mPreviewUtils.supportsPreview();
+    }
+
+    boolean usesSurfaceView() {
+        // If no version code is returned, fall back to V1.
+        return TextUtils.equals(mVersion, "V2");
     }
 
     /**
@@ -84,22 +82,19 @@
      */
     @WorkerThread
     @Nullable
-    List<GridOption> fetch(boolean reload) {
+    Pair<List<GridOption>, String> fetch(boolean reload) {
         if (!areGridsAvailable()) {
             return null;
         }
         if (mOptions != null && !reload) {
-            return mOptions;
+            return Pair.create(mOptions, mVersion);
         }
-        Uri optionsUri = new Uri.Builder()
-                .scheme(ContentResolver.SCHEME_CONTENT)
-                .authority(mProviderInfo.authority)
-                .appendPath(LIST_OPTIONS)
-                .build();
         ContentResolver resolver = mContext.getContentResolver();
         String iconPath = mContext.getResources().getString(Resources.getSystem().getIdentifier(
                 ResourceConstants.CONFIG_ICON_MASK, "string", ResourceConstants.ANDROID_PACKAGE));
-        try (Cursor c = resolver.query(optionsUri, null, null, null, null)) {
+        try (Cursor c = resolver.query(mPreviewUtils.getUri(LIST_OPTIONS), null, null, null,
+                null)) {
+            mVersion = c.getExtras().getString(METADATA_KEY_PREVIEW_VERSION);
             mOptions = new ArrayList<>();
             while(c.moveToNext()) {
                 String name = c.getString(c.getColumnIndex(COL_NAME));
@@ -107,31 +102,35 @@
                 int cols = c.getInt(c.getColumnIndex(COL_COLS));
                 int previewCount = c.getInt(c.getColumnIndex(COL_PREVIEW_COUNT));
                 boolean isSet = Boolean.valueOf(c.getString(c.getColumnIndex(COL_IS_DEFAULT)));
-                Uri preview = new Uri.Builder()
-                        .scheme(ContentResolver.SCHEME_CONTENT)
-                        .authority(mProviderInfo.authority)
-                        .appendPath(PREVIEW)
-                        .appendPath(name)
-                        .build();
-                String title = mContext.getString(R.string.grid_title_pattern, cols, rows);
-                mOptions.add(new GridOption(title, name, isSet, rows, cols, preview, previewCount,
-                        iconPath));
+                String title = GRID_NAME_NORMAL.equals(name)
+                        ? mContext.getString(R.string.default_theme_title)
+                        : mContext.getString(R.string.grid_title_pattern, cols, rows);
+                mOptions.add(new GridOption(title, name, isSet, rows, cols,
+                        mPreviewUtils.getUri(PREVIEW), previewCount, iconPath));
             }
             Glide.get(mContext).clearDiskCache();
         } catch (Exception e) {
             mOptions = null;
+            mVersion = null;
         }
-        return mOptions;
+        return Pair.create(mOptions, mVersion);
+    }
+
+    /**
+     * Request rendering of home screen preview via Launcher to Wallpaper using SurfaceView
+     * @param name      the grid option name
+     * @param bundle    surface view request bundle generated from
+     *    {@link com.android.wallpaper.util.SurfaceViewUtils#createSurfaceViewRequest(SurfaceView)}.
+     */
+    Bundle renderPreview(String name, Bundle bundle) {
+        bundle.putString("name", name);
+        return mPreviewUtils.renderPreview(bundle);
     }
 
     int applyGrid(String name) {
-        Uri updateDefaultUri = new Uri.Builder()
-                .scheme(ContentResolver.SCHEME_CONTENT)
-                .authority(mProviderInfo.authority)
-                .appendPath(DEFAULT_GRID)
-                .build();
         ContentValues values = new ContentValues();
         values.put("name", name);
-        return mContext.getContentResolver().update(updateDefaultUri, values, null, null);
+        return mContext.getContentResolver().update(mPreviewUtils.getUri(DEFAULT_GRID), values,
+                null, null);
     }
 }
diff --git a/src/com/android/customization/model/theme/DefaultThemeProvider.java b/src/com/android/customization/model/theme/DefaultThemeProvider.java
index ce12d35..7c99f9c 100644
--- a/src/com/android/customization/model/theme/DefaultThemeProvider.java
+++ b/src/com/android/customization/model/theme/DefaultThemeProvider.java
@@ -15,8 +15,6 @@
  */
 package com.android.customization.model.theme;
 
-import static android.content.res.Resources.ID_NULL;
-
 import static com.android.customization.model.ResourceConstants.ANDROID_PACKAGE;
 import static com.android.customization.model.ResourceConstants.ICONS_FOR_PREVIEW;
 import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_COLOR;
@@ -29,14 +27,9 @@
 import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_SHAPE;
 import static com.android.customization.model.ResourceConstants.SYSUI_PACKAGE;
 
-import android.content.ComponentName;
 import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.pm.ResolveInfo;
 import android.content.res.Resources.NotFoundException;
-import android.service.wallpaper.WallpaperService;
 import android.text.TextUtils;
 import android.util.Log;
 
@@ -49,7 +42,6 @@
 import com.android.customization.module.CustomizationPreferences;
 import com.android.wallpaper.R;
 import com.android.wallpaper.asset.ResourceAsset;
-import com.android.wallpaper.model.LiveWallpaperInfo;
 
 import com.bumptech.glide.request.RequestOptions;
 import com.google.android.apps.wallpaper.asset.ThemeBundleThumbAsset;
@@ -57,9 +49,7 @@
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
-import org.xmlpull.v1.XmlPullParserException;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -83,12 +73,6 @@
     private static final String ICON_THEMEPICKER_PREFIX = "theme_overlay_icon_themepicker_";
     private static final String ICON_SETTINGS_PREFIX = "theme_overlay_icon_settings_";
     private static final String ICON_SYSUI_PREFIX = "theme_overlay_icon_sysui_";
-    private static final String WALLPAPER_PREFIX = "theme_wallpaper_";
-    private static final String WALLPAPER_TITLE_PREFIX = "theme_wallpaper_title_";
-    private static final String WALLPAPER_ATTRIBUTION_PREFIX = "theme_wallpaper_attribution_";
-    private static final String WALLPAPER_THUMB_PREFIX = "theme_wallpaper_thumbnail_";
-    private static final String WALLPAPER_ACTION_PREFIX = "theme_wallpaper_action_";
-    private static final String WALLPAPER_OPTIONS_PREFIX = "theme_wallpaper_options_";
 
     private static final String DEFAULT_THEME_NAME= "default";
     private static final String THEME_TITLE_FIELD = "_theme_title";
@@ -172,8 +156,6 @@
 
                 mOverlayProvider.addNoPreviewIconOverlay(builder, iconSettingsOverlayPackage);
 
-                addWallpaper(themeName, builder);
-
                 mThemes.add(builder.build(mContext));
             } catch (NameNotFoundException | NotFoundException e) {
                 Log.w(TAG, String.format("Couldn't load part of theme %s, will skip it", themeName),
@@ -184,70 +166,6 @@
         addCustomThemes();
     }
 
-    private void addWallpaper(String themeName, Builder builder) {
-        try {
-            String wallpaperResName = WALLPAPER_PREFIX + themeName;
-            int wallpaperResId = mStubApkResources.getIdentifier(wallpaperResName,
-                    "drawable", mStubPackageName);
-            // Check in case the theme has a separate thumbnail for the wallpaper
-            String wallpaperThumbnailResName = WALLPAPER_THUMB_PREFIX + themeName;
-            int wallpaperThumbnailResId = mStubApkResources.getIdentifier(wallpaperThumbnailResName,
-                    "drawable", mStubPackageName);
-            if (wallpaperResId != ID_NULL) {
-                builder.setWallpaperInfo(mStubPackageName, wallpaperResName,
-                        themeName, wallpaperResId,
-                        mStubApkResources.getIdentifier(WALLPAPER_TITLE_PREFIX + themeName,
-                                "string", mStubPackageName),
-                        mStubApkResources.getIdentifier(
-                                WALLPAPER_ATTRIBUTION_PREFIX + themeName, "string",
-                                mStubPackageName),
-                        mStubApkResources.getIdentifier(WALLPAPER_ACTION_PREFIX + themeName,
-                                "string", mStubPackageName))
-                        .setWallpaperAsset(wallpaperThumbnailResId != ID_NULL ?
-                                getThumbAsset(WALLPAPER_THUMB_PREFIX, themeName)
-                                : getDrawableResourceAsset(WALLPAPER_PREFIX, themeName));
-            } else {
-                // Try to see if it's a live wallpaper reference
-                wallpaperResId = mStubApkResources.getIdentifier(wallpaperResName,
-                        "string", mStubPackageName);
-                if (wallpaperResId != ID_NULL) {
-                    String wpComponent = mStubApkResources.getString(wallpaperResId);
-
-                    int wallpaperOptionsResId = mStubApkResources.getIdentifier(
-                            WALLPAPER_OPTIONS_PREFIX + themeName, "string", mStubPackageName);
-                    String wallpaperOptions = wallpaperOptionsResId != ID_NULL
-                            ? mStubApkResources.getString(wallpaperOptionsResId) : null;
-
-                    String[] componentParts = wpComponent.split("/");
-                    Intent liveWpIntent =  new Intent(WallpaperService.SERVICE_INTERFACE);
-                    liveWpIntent.setComponent(
-                            new ComponentName(componentParts[0], componentParts[1]));
-
-                    Context appContext = mContext.getApplicationContext();
-                    PackageManager pm = appContext.getPackageManager();
-                    ResolveInfo resolveInfo =
-                            pm.resolveService(liveWpIntent, PackageManager.GET_META_DATA);
-                    if (resolveInfo != null) {
-                        android.app.WallpaperInfo wallpaperInfo;
-                        try {
-                            wallpaperInfo = new android.app.WallpaperInfo(appContext, resolveInfo);
-                            LiveWallpaperInfo liveInfo = new LiveWallpaperInfo(wallpaperInfo);
-                            builder.setLiveWallpaperInfo(liveInfo).setWallpaperAsset(
-                                    wallpaperThumbnailResId != ID_NULL ?
-                                            getThumbAsset(WALLPAPER_THUMB_PREFIX, themeName)
-                                        : liveInfo.getThumbAsset(mContext))
-                                    .setWallpaperOptions(wallpaperOptions);
-                        } catch (XmlPullParserException | IOException e) {
-                            Log.w(TAG, "Skipping wallpaper " + resolveInfo.serviceInfo, e);
-                        }
-                    }
-                }
-            }
-        } catch (NotFoundException e) {
-            // Nothing to do here, if there's no wallpaper we'll just omit wallpaper
-        }
-    }
-
     /**
      * Default theme requires different treatment: if there are overlay packages specified in the
      * stub apk, we'll use those, otherwise we'll get the System default values. But we cannot skip
@@ -318,8 +236,6 @@
             mOverlayProvider.addSystemDefaultIcons(builder, SYSUI_PACKAGE, ICONS_FOR_PREVIEW);
         }
 
-        addWallpaper(DEFAULT_THEME_NAME, builder);
-
         mThemes.add(builder.build(mContext));
     }
 
diff --git a/src/com/android/customization/model/theme/ThemeBundle.java b/src/com/android/customization/model/theme/ThemeBundle.java
index e83e852..14b2dcd 100644
--- a/src/com/android/customization/model/theme/ThemeBundle.java
+++ b/src/com/android/customization/model/theme/ThemeBundle.java
@@ -31,7 +31,6 @@
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.ShapeDrawable;
 import android.graphics.drawable.shapes.PathShape;
-import android.icu.text.SimpleDateFormat;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
@@ -40,9 +39,7 @@
 
 import androidx.annotation.ColorInt;
 import androidx.annotation.Dimension;
-import androidx.annotation.DrawableRes;
 import androidx.annotation.Nullable;
-import androidx.annotation.StringRes;
 import androidx.core.graphics.PathParser;
 
 import com.android.customization.model.CustomizationManager;
@@ -51,7 +48,6 @@
 import com.android.wallpaper.R;
 import com.android.wallpaper.asset.Asset;
 import com.android.wallpaper.asset.BitmapCachingAsset;
-import com.android.wallpaper.model.LiveWallpaperInfo;
 import com.android.wallpaper.model.WallpaperInfo;
 
 import org.json.JSONException;
@@ -59,12 +55,10 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 
@@ -83,20 +77,15 @@
     private final PreviewInfo mPreviewInfo;
     private final boolean mIsDefault;
     protected final Map<String, String> mPackagesByCategory;
-    @Nullable private final WallpaperInfo mWallpaperInfo;
-    @Nullable private final String mWallpaperOptions;
     private WallpaperInfo mOverrideWallpaper;
     private Asset mOverrideWallpaperAsset;
     private CharSequence mContentDescription;
 
     protected ThemeBundle(String title, Map<String, String> overlayPackages,
-            boolean isDefault, @Nullable WallpaperInfo wallpaperInfo,
-            @Nullable String wallpaperOptions, PreviewInfo previewInfo) {
+            boolean isDefault, PreviewInfo previewInfo) {
         mTitle = title;
         mIsDefault = isDefault;
         mPreviewInfo = previewInfo;
-        mWallpaperInfo = wallpaperInfo;
-        mWallpaperOptions = wallpaperOptions;
         mPackagesByCategory = Collections.unmodifiableMap(overlayPackages);
     }
 
@@ -169,16 +158,6 @@
         mOverrideWallpaperAsset = null;
     }
 
-    public boolean shouldUseThemeWallpaper() {
-        return mOverrideWallpaper == null && mWallpaperInfo != null;
-    }
-
-    public Asset getWallpaperPreviewAsset(Context context) {
-        return mOverrideWallpaper != null ?
-                getOverrideWallpaperAsset(context) :
-                getPreviewInfo().wallpaperAsset;
-    }
-
     private Asset getOverrideWallpaperAsset(Context context) {
         if (mOverrideWallpaperAsset == null) {
             mOverrideWallpaperAsset = new BitmapCachingAsset(context,
@@ -187,15 +166,6 @@
         return mOverrideWallpaperAsset;
     }
 
-    public WallpaperInfo getWallpaperInfo() {
-        return mWallpaperInfo;
-    }
-
-    @Nullable
-    public String getWallpaperOptions() {
-        return mWallpaperOptions;
-    }
-
     boolean isDefault() {
         return mIsDefault;
     }
@@ -280,14 +250,13 @@
         @ColorInt public final int colorAccentDark;
         public final List<Drawable> icons;
         public final Drawable shapeDrawable;
-        @Nullable public final Asset wallpaperAsset;
         public final List<Drawable> shapeAppIcons;
         @Dimension public final int bottomSheeetCornerRadius;
 
         private PreviewInfo(Context context, Typeface bodyFontFamily, Typeface headlineFontFamily,
                 int colorAccentLight, int colorAccentDark, List<Drawable> icons,
                 Drawable shapeDrawable, @Dimension int cornerRadius,
-                @Nullable Asset wallpaperAsset, List<Drawable> shapeAppIcons) {
+                List<Drawable> shapeAppIcons) {
             this.bodyFontFamily = bodyFontFamily;
             this.headlineFontFamily = headlineFontFamily;
             this.colorAccentLight = colorAccentLight;
@@ -295,8 +264,6 @@
             this.icons = icons;
             this.shapeDrawable = shapeDrawable;
             this.bottomSheeetCornerRadius = cornerRadius;
-            this.wallpaperAsset = wallpaperAsset == null
-                    ? null : new BitmapCachingAsset(context, wallpaperAsset);
             this.shapeAppIcons = shapeAppIcons;
         }
 
@@ -323,15 +290,11 @@
         private Path mShapePath;
         private boolean mIsDefault;
         @Dimension private int mCornerRadius;
-        private Asset mWallpaperAsset;
-        private WallpaperInfo mWallpaperInfo;
-        private String mWallpaperOptions;
         protected Map<String, String> mPackages = new HashMap<>();
         private List<Drawable> mAppIcons = new ArrayList<>();
 
         public ThemeBundle build(Context context) {
-            return new ThemeBundle(mTitle, mPackages, mIsDefault, mWallpaperInfo, mWallpaperOptions,
-                    createPreviewInfo(context));
+            return new ThemeBundle(mTitle, mPackages, mIsDefault, createPreviewInfo(context));
         }
 
         public PreviewInfo createPreviewInfo(Context context) {
@@ -359,8 +322,7 @@
                 }
             }
             return new PreviewInfo(context, mBodyFontFamily, mHeadlineFontFamily, mColorAccentLight,
-                    mColorAccentDark, mIcons, shapeDrawable, mCornerRadius,
-                    mWallpaperAsset, shapeIcons);
+                    mColorAccentDark, mIcons, shapeDrawable, mCornerRadius, shapeIcons);
         }
 
         public Map<String, String> getPackages() {
@@ -416,30 +378,6 @@
             return this;
         }
 
-        public Builder setWallpaperInfo(String wallpaperPackageName, String wallpaperResName,
-                String themeId, @DrawableRes int wallpaperResId, @StringRes int titleResId,
-                @StringRes int attributionResId, @StringRes int actionUrlResId) {
-            mWallpaperInfo = new ThemeBundledWallpaperInfo(wallpaperPackageName, wallpaperResName,
-                    themeId, wallpaperResId, titleResId, attributionResId, actionUrlResId);
-            return this;
-        }
-
-        public Builder setLiveWallpaperInfo(LiveWallpaperInfo info) {
-            mWallpaperInfo = info;
-            return this;
-        }
-
-
-        public Builder setWallpaperAsset(Asset wallpaperAsset) {
-            mWallpaperAsset = wallpaperAsset;
-            return this;
-        }
-
-        public Builder setWallpaperOptions(String wallpaperOptions) {
-            mWallpaperOptions = wallpaperOptions;
-            return this;
-        }
-
         public Builder asDefault() {
             mIsDefault = true;
             return this;
diff --git a/src/com/android/customization/model/theme/ThemeManager.java b/src/com/android/customization/model/theme/ThemeManager.java
index e4981b0..533fbd0 100644
--- a/src/com/android/customization/model/theme/ThemeManager.java
+++ b/src/com/android/customization/model/theme/ThemeManager.java
@@ -23,7 +23,7 @@
 import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_SYSUI;
 import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_ICON_THEMEPICKER;
 import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_SHAPE;
-import android.graphics.Point;
+
 import android.provider.Settings;
 import android.text.TextUtils;
 
@@ -34,12 +34,6 @@
 import com.android.customization.model.ResourceConstants;
 import com.android.customization.model.theme.custom.CustomTheme;
 import com.android.customization.module.ThemesUserEventLogger;
-import com.android.wallpaper.R;
-import com.android.wallpaper.asset.Asset;
-import com.android.wallpaper.model.LiveWallpaperInfo;
-import com.android.wallpaper.module.WallpaperPersister.SetWallpaperCallback;
-import com.android.wallpaper.module.WallpaperSetter;
-import com.android.wallpaper.util.WallpaperCropUtils;
 
 import org.json.JSONObject;
 
@@ -59,25 +53,22 @@
         THEME_CATEGORIES.add(OVERLAY_CATEGORY_ICON_SYSUI);
         THEME_CATEGORIES.add(OVERLAY_CATEGORY_ICON_LAUNCHER);
         THEME_CATEGORIES.add(OVERLAY_CATEGORY_ICON_THEMEPICKER);
-    };
-
+    }
 
     private final ThemeBundleProvider mProvider;
     private final OverlayManagerCompat mOverlayManagerCompat;
 
-    private final WallpaperSetter mWallpaperSetter;
     protected final FragmentActivity mActivity;
     private final ThemesUserEventLogger mEventLogger;
 
     private Map<String, String> mCurrentOverlays;
 
     public ThemeManager(ThemeBundleProvider provider, FragmentActivity activity,
-            WallpaperSetter wallpaperSetter, OverlayManagerCompat overlayManagerCompat,
+            OverlayManagerCompat overlayManagerCompat,
             ThemesUserEventLogger logger) {
         mProvider = provider;
         mActivity = activity;
         mOverlayManagerCompat = overlayManagerCompat;
-        mWallpaperSetter = wallpaperSetter;
         mEventLogger = logger;
     }
 
@@ -88,67 +79,7 @@
 
     @Override
     public void apply(ThemeBundle theme, Callback callback) {
-        // Set wallpaper
-        if (theme.shouldUseThemeWallpaper()) {
-            mWallpaperSetter.requestDestination(mActivity, mActivity.getSupportFragmentManager(),
-                    R.string.set_theme_wallpaper_dialog_message,
-                    destination -> applyWallpaper(
-                            theme,
-                            destination,
-                            createSetWallpaperCallback(theme, callback)),
-                    theme.getWallpaperInfo() instanceof LiveWallpaperInfo);
-
-        } else {
-            applyOverlays(theme, callback);
-        }
-    }
-
-    private SetWallpaperCallback createSetWallpaperCallback(ThemeBundle theme, Callback callback) {
-        return new SetWallpaperCallback() {
-            @Override
-            public void onSuccess() {
-                applyWallpaperOptions(theme);
-                applyOverlays(theme, callback);
-            }
-
-            @Override
-            public void onError(@Nullable Throwable throwable) {
-                callback.onError(throwable);
-            }
-        };
-    }
-
-    protected void applyWallpaperOptions(ThemeBundle theme) {
-        //Do nothing.
-    }
-
-    private void applyWallpaper(ThemeBundle theme, int destination,
-            SetWallpaperCallback callback) {
-        Point defaultCropSurfaceSize = WallpaperCropUtils.getDefaultCropSurfaceSize(
-                mActivity.getResources(),
-                mActivity.getWindowManager().getDefaultDisplay());
-        Asset wallpaperAsset = theme.getWallpaperInfo().getAsset(mActivity);
-        if (wallpaperAsset != null) {
-            wallpaperAsset.decodeRawDimensions(mActivity,
-                    dimensions -> {
-                        float scale = 1f;
-                        // Calculate scale to fit the screen height
-                        if (dimensions != null && dimensions.y > 0) {
-                            scale = (float) defaultCropSurfaceSize.y / dimensions.y;
-                        }
-                        mWallpaperSetter.setCurrentWallpaper(mActivity,
-                                theme.getWallpaperInfo(),
-                                wallpaperAsset,
-                                destination,
-                                scale, null, callback);
-                    });
-        } else {
-            mWallpaperSetter.setCurrentWallpaper(mActivity,
-                    theme.getWallpaperInfo(),
-                    null,
-                    destination,
-                    1f, null, callback);
-        }
+        applyOverlays(theme, callback);
     }
 
     private void applyOverlays(ThemeBundle theme, Callback callback) {
diff --git a/src/com/android/customization/model/theme/custom/CustomTheme.java b/src/com/android/customization/model/theme/custom/CustomTheme.java
index 8a7ca05..9c14f01 100644
--- a/src/com/android/customization/model/theme/custom/CustomTheme.java
+++ b/src/com/android/customization/model/theme/custom/CustomTheme.java
@@ -41,7 +41,7 @@
 
     public CustomTheme(@NonNull String id, String title, Map<String, String> overlayPackages,
             @Nullable PreviewInfo previewInfo) {
-        super(title, overlayPackages, false, null, null, previewInfo);
+        super(title, overlayPackages, false, previewInfo);
         mId = id;
     }
 
@@ -76,11 +76,6 @@
     }
 
     @Override
-    public boolean shouldUseThemeWallpaper() {
-        return false;
-    }
-
-    @Override
     public boolean isActive(CustomizationManager<ThemeBundle> manager) {
         return isDefined() && super.isActive(manager);
     }
diff --git a/src/com/android/customization/module/CustomizationInjector.java b/src/com/android/customization/module/CustomizationInjector.java
index d25f925..85853de 100644
--- a/src/com/android/customization/module/CustomizationInjector.java
+++ b/src/com/android/customization/module/CustomizationInjector.java
@@ -23,13 +23,11 @@
 import com.android.customization.model.theme.ThemeBundleProvider;
 import com.android.customization.model.theme.ThemeManager;
 import com.android.wallpaper.module.Injector;
-import com.android.wallpaper.module.WallpaperSetter;
 
 public interface CustomizationInjector extends Injector {
 
     CustomizationPreferences getCustomizationPreferences(Context context);
 
     ThemeManager getThemeManager(ThemeBundleProvider provider, FragmentActivity activity,
-            WallpaperSetter wallpaperSetter, OverlayManagerCompat overlayManagerCompat,
-            ThemesUserEventLogger logger);
+            OverlayManagerCompat overlayManagerCompat, ThemesUserEventLogger logger);
 }
diff --git a/src/com/android/customization/module/DefaultCustomizationInjector.java b/src/com/android/customization/module/DefaultCustomizationInjector.java
index a0d435b..7358d8f 100644
--- a/src/com/android/customization/module/DefaultCustomizationInjector.java
+++ b/src/com/android/customization/module/DefaultCustomizationInjector.java
@@ -30,7 +30,6 @@
 import com.android.wallpaper.module.LoggingOptInStatusProvider;
 import com.android.wallpaper.module.WallpaperPreferences;
 import com.android.wallpaper.module.WallpaperRotationRefresher;
-import com.android.wallpaper.module.WallpaperSetter;
 import com.android.wallpaper.monitor.PerformanceMonitor;
 import com.android.wallpaper.picker.PreviewFragment;
 
@@ -50,7 +49,6 @@
         return mPrefs;
     }
 
-
     @Override
     public CustomizationPreferences getCustomizationPreferences(Context context) {
         return (CustomizationPreferences) getPreferences(context);
@@ -115,9 +113,8 @@
 
     @Override
     public ThemeManager getThemeManager(ThemeBundleProvider provider, FragmentActivity activity,
-            WallpaperSetter wallpaperSetter, OverlayManagerCompat overlayManagerCompat,
-            ThemesUserEventLogger logger) {
-        return new ThemeManager(provider, activity, wallpaperSetter, overlayManagerCompat, logger);
+            OverlayManagerCompat overlayManagerCompat, ThemesUserEventLogger logger) {
+        return new ThemeManager(provider, activity, overlayManagerCompat, logger);
     }
 
 }
diff --git a/src/com/android/customization/module/StatsLogUserEventLogger.java b/src/com/android/customization/module/StatsLogUserEventLogger.java
index a13d420..5649c5e 100644
--- a/src/com/android/customization/module/StatsLogUserEventLogger.java
+++ b/src/com/android/customization/module/StatsLogUserEventLogger.java
@@ -18,6 +18,7 @@
 import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_COLOR;
 import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_FONT;
 import static com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_SHAPE;
+import static com.android.systemui.shared.system.SysUiStatsLog.STYLE_UI_CHANGED;
 
 import android.stats.style.nano.StyleEnums;
 
@@ -26,6 +27,7 @@
 import com.android.customization.model.clock.Clockface;
 import com.android.customization.model.grid.GridOption;
 import com.android.customization.model.theme.ThemeBundle;
+import com.android.systemui.shared.system.SysUiStatsLog;
 import com.android.wallpaper.module.NoOpUserEventLogger;
 
 import java.util.Map;
@@ -39,41 +41,59 @@
 public class StatsLogUserEventLogger extends NoOpUserEventLogger implements ThemesUserEventLogger {
 
     private static final String TAG = "StatsLogUserEventLogger";
-    private static final int CODE = 179;
 
     @Override
     public void logResumed(boolean provisioned, boolean wallpaper) {
-        WallpaperStatsLog.write(CODE, StyleEnums.ONRESUME, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+        SysUiStatsLog.write(STYLE_UI_CHANGED, StyleEnums.ONRESUME, 0, 0, 0, 0, 0, 0, 0, 0, 0);
     }
 
     @Override
     public void logStopped() {
-        WallpaperStatsLog.write(CODE, StyleEnums.ONSTOP, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+        SysUiStatsLog.write(STYLE_UI_CHANGED, StyleEnums.ONSTOP, 0, 0, 0, 0, 0, 0, 0, 0, 0);
     }
 
     @Override
     public void logActionClicked(String collectionId, int actionLabelResId) {
-        WallpaperStatsLog.write(CODE, StyleEnums.WALLPAPER_EXPLORE, 0, 0, 0, 0, 0,
+        SysUiStatsLog.write(STYLE_UI_CHANGED, StyleEnums.WALLPAPER_EXPLORE, 0, 0, 0, 0, 0,
                 collectionId.hashCode(), 0, 0, 0);
     }
 
     @Override
     public void logIndividualWallpaperSelected(String collectionId) {
-        WallpaperStatsLog.write(CODE, StyleEnums.WALLPAPER_SELECT, 0, 0, 0, 0, 0, 0,
-                collectionId.hashCode(), 0, 0);
+        SysUiStatsLog.write(STYLE_UI_CHANGED, StyleEnums.WALLPAPER_SELECT, 0, 0, 0, 0, 0,
+                collectionId.hashCode(), 0, 0, 0);
     }
 
     @Override
     public void logCategorySelected(String collectionId) {
-        WallpaperStatsLog.write(CODE, StyleEnums.WALLPAPER_OPEN_CATEGORY,
+        SysUiStatsLog.write(STYLE_UI_CHANGED, StyleEnums.WALLPAPER_OPEN_CATEGORY,
                 0, 0, 0, 0, 0,
                 collectionId.hashCode(),
                 0, 0, 0);
     }
 
     @Override
+    public void logLiveWallpaperInfoSelected(String collectionId, @Nullable String wallpaperId) {
+        SysUiStatsLog.write(STYLE_UI_CHANGED, StyleEnums.LIVE_WALLPAPER_INFO_SELECT,
+                0, 0, 0, 0, 0,
+                collectionId.hashCode(),
+                wallpaperId != null ? wallpaperId.hashCode() : 0,
+                0, 0);
+    }
+
+    @Override
+    public void logLiveWallpaperCustomizeSelected(String collectionId,
+            @Nullable String wallpaperId) {
+        SysUiStatsLog.write(STYLE_UI_CHANGED, StyleEnums.LIVE_WALLPAPER_CUSTOMIZE_SELECT,
+                0, 0, 0, 0, 0,
+                collectionId.hashCode(),
+                wallpaperId != null ? wallpaperId.hashCode() : 0,
+                0, 0);
+    }
+
+    @Override
     public void logWallpaperSet(String collectionId, @Nullable String wallpaperId) {
-        WallpaperStatsLog.write(CODE, StyleEnums.WALLPAPER_APPLIED,
+        SysUiStatsLog.write(STYLE_UI_CHANGED, StyleEnums.WALLPAPER_APPLIED,
                 0, 0, 0, 0, 0,
                 collectionId.hashCode(),
                 wallpaperId != null ? wallpaperId.hashCode() : 0,
@@ -88,7 +108,7 @@
 
     @Override
     public void logThemeSelected(ThemeBundle theme, boolean isCustomTheme) {
-        WallpaperStatsLog.write(CODE, StyleEnums.PICKER_SELECT,
+        SysUiStatsLog.write(STYLE_UI_CHANGED, StyleEnums.PICKER_SELECT,
                 Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_COLOR)),
                 Objects.hashCode(getThemePackage(theme,OVERLAY_CATEGORY_FONT)),
                 Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_SHAPE)),
@@ -97,7 +117,7 @@
 
     @Override
     public void logThemeApplied(ThemeBundle theme, boolean isCustomTheme) {
-        WallpaperStatsLog.write(CODE, StyleEnums.PICKER_APPLIED,
+        SysUiStatsLog.write(STYLE_UI_CHANGED, StyleEnums.PICKER_APPLIED,
                 Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_COLOR)),
                 Objects.hashCode(getThemePackage(theme,OVERLAY_CATEGORY_FONT)),
                 Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_SHAPE)),
@@ -106,7 +126,7 @@
 
     @Override
     public void logClockSelected(Clockface clock) {
-        WallpaperStatsLog.write(CODE, StyleEnums.PICKER_SELECT,
+        SysUiStatsLog.write(STYLE_UI_CHANGED, StyleEnums.PICKER_SELECT,
                 0, 0, 0,
                 Objects.hashCode(clock.getId()),
                 0, 0, 0, 0, 0);
@@ -114,7 +134,7 @@
 
     @Override
     public void logClockApplied(Clockface clock) {
-        WallpaperStatsLog.write(CODE, StyleEnums.PICKER_APPLIED,
+        SysUiStatsLog.write(STYLE_UI_CHANGED, StyleEnums.PICKER_APPLIED,
                 0, 0, 0,
                 Objects.hashCode(clock.getId()),
                 0, 0, 0, 0, 0);
@@ -122,7 +142,7 @@
 
     @Override
     public void logGridSelected(GridOption grid) {
-        WallpaperStatsLog.write(CODE, StyleEnums.PICKER_SELECT,
+        SysUiStatsLog.write(STYLE_UI_CHANGED, StyleEnums.PICKER_SELECT,
                 0, 0, 0, 0,
                 grid.cols,
                 0, 0, 0, 0);
@@ -130,7 +150,7 @@
 
     @Override
     public void logGridApplied(GridOption grid) {
-        WallpaperStatsLog.write(CODE, StyleEnums.PICKER_APPLIED,
+        SysUiStatsLog.write(STYLE_UI_CHANGED, StyleEnums.PICKER_APPLIED,
                 0, 0, 0, 0,
                 grid.cols,
                 0, 0, 0, 0);
diff --git a/src/com/android/customization/module/WallpaperStatsLog.java b/src/com/android/customization/module/WallpaperStatsLog.java
deleted file mode 100644
index 9f5761f..0000000
--- a/src/com/android/customization/module/WallpaperStatsLog.java
+++ /dev/null
@@ -1,147 +0,0 @@
-// This file is autogenerated
-
-package com.android.customization.module;
-
-import static java.nio.charset.StandardCharsets.UTF_8;
-
-import android.util.StatsLog;
-import android.os.SystemClock;
-
-import java.util.ArrayList;
-
-
-/**
- * Utility class for logging statistics events.
- */
-public class WallpaperStatsLog {
-    private static final int LOGGER_ENTRY_MAX_PAYLOAD = 4068;
-    private static final int MAX_EVENT_PAYLOAD = LOGGER_ENTRY_MAX_PAYLOAD - 4;
-    private static final byte INT_TYPE = 0;
-    private static final byte LONG_TYPE = 1;
-    private static final byte STRING_TYPE = 2;
-    private static final byte LIST_TYPE = 3;
-    private static final byte FLOAT_TYPE = 4;
-    private static final int INT_TYPE_SIZE = 5;
-    private static final int FLOAT_TYPE_SIZE = 5;
-    private static final int LONG_TYPE_SIZE = 9;
-    private static final int STRING_TYPE_OVERHEAD = 5;
-    private static final int LIST_TYPE_OVERHEAD = 2;
-    // Constants for atom codes.
-
-    /**
-     * StyleUIChanged style_ui_changed<br>
-     * Usage: StatsLog.write(StatsLog.STYLE_UI_CHANGED, int action, int color_package_hash, int font_package_hash, int shape_package_hash, int clock_package_hash, int launcher_grid, int wallpaper_category_hash, int wallpaper_id_hash, int color_preference, int location_preference);<br>
-     */
-    public static final int STYLE_UI_CHANGED = 179;
-
-    // Constants for enum values.
-
-    // Values for StyleUIChanged.action
-    public static final int STYLE_UICHANGED__ACTION__DEFAULT_ACTION = 0;
-    public static final int STYLE_UICHANGED__ACTION__ONRESUME = 1;
-    public static final int STYLE_UICHANGED__ACTION__ONSTOP = 2;
-    public static final int STYLE_UICHANGED__ACTION__PICKER_SELECT = 3;
-    public static final int STYLE_UICHANGED__ACTION__PICKER_APPLIED = 4;
-    public static final int STYLE_UICHANGED__ACTION__WALLPAPER_OPEN_CATEGORY = 5;
-    public static final int STYLE_UICHANGED__ACTION__WALLPAPER_SELECT = 6;
-    public static final int STYLE_UICHANGED__ACTION__WALLPAPER_APPLIED = 7;
-    public static final int STYLE_UICHANGED__ACTION__WALLPAPER_EXPLORE = 8;
-    public static final int STYLE_UICHANGED__ACTION__WALLPAPER_DOWNLOAD = 9;
-    public static final int STYLE_UICHANGED__ACTION__WALLPAPER_REMOVE = 10;
-    public static final int STYLE_UICHANGED__ACTION__LIVE_WALLPAPER_DOWNLOAD_SUCCESS = 11;
-    public static final int STYLE_UICHANGED__ACTION__LIVE_WALLPAPER_DOWNLOAD_FAILED = 12;
-    public static final int STYLE_UICHANGED__ACTION__LIVE_WALLPAPER_DOWNLOAD_CANCELLED = 13;
-    public static final int STYLE_UICHANGED__ACTION__LIVE_WALLPAPER_DELETE_SUCCESS = 14;
-    public static final int STYLE_UICHANGED__ACTION__LIVE_WALLPAPER_DELETE_FAILED = 15;
-    public static final int STYLE_UICHANGED__ACTION__LIVE_WALLPAPER_APPLIED = 16;
-
-    // Values for StyleUIChanged.location_preference
-    public static final int STYLE_UICHANGED__LOCATION_PREFERENCE__LOCATION_PREFERENCE_UNSPECIFIED = 0;
-    public static final int STYLE_UICHANGED__LOCATION_PREFERENCE__LOCATION_UNAVAILABLE = 1;
-    public static final int STYLE_UICHANGED__LOCATION_PREFERENCE__LOCATION_CURRENT = 2;
-    public static final int STYLE_UICHANGED__LOCATION_PREFERENCE__LOCATION_MANUAL = 3;
-
-    // Write methods
-    public static void write(int code, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9, int arg10) {
-        // Initial overhead of the list, timestamp, and atom tag.
-        int needed = LIST_TYPE_OVERHEAD + LONG_TYPE_SIZE + INT_TYPE_SIZE;
-        needed += INT_TYPE_SIZE;
-        needed += INT_TYPE_SIZE;
-        needed += INT_TYPE_SIZE;
-        needed += INT_TYPE_SIZE;
-        needed += INT_TYPE_SIZE;
-        needed += INT_TYPE_SIZE;
-        needed += INT_TYPE_SIZE;
-        needed += INT_TYPE_SIZE;
-        needed += INT_TYPE_SIZE;
-        needed += INT_TYPE_SIZE;
-        if (needed > MAX_EVENT_PAYLOAD) {
-            return;
-        }
-        byte[] buff = new byte[needed];
-        int pos = 0;
-        buff[pos] = LIST_TYPE;
-        buff[pos + 1] = 12;
-        pos += LIST_TYPE_OVERHEAD;
-        long elapsedRealtime = SystemClock.elapsedRealtimeNanos();
-        buff[pos] = LONG_TYPE;
-        copyLong(buff, pos + 1, elapsedRealtime);
-        pos += LONG_TYPE_SIZE;
-        buff[pos] = INT_TYPE;
-        copyInt(buff, pos + 1, code);
-        pos += INT_TYPE_SIZE;
-        buff[pos] = INT_TYPE;
-        copyInt(buff, pos + 1, arg1);
-        pos += INT_TYPE_SIZE;
-        buff[pos] = INT_TYPE;
-        copyInt(buff, pos + 1, arg2);
-        pos += INT_TYPE_SIZE;
-        buff[pos] = INT_TYPE;
-        copyInt(buff, pos + 1, arg3);
-        pos += INT_TYPE_SIZE;
-        buff[pos] = INT_TYPE;
-        copyInt(buff, pos + 1, arg4);
-        pos += INT_TYPE_SIZE;
-        buff[pos] = INT_TYPE;
-        copyInt(buff, pos + 1, arg5);
-        pos += INT_TYPE_SIZE;
-        buff[pos] = INT_TYPE;
-        copyInt(buff, pos + 1, arg6);
-        pos += INT_TYPE_SIZE;
-        buff[pos] = INT_TYPE;
-        copyInt(buff, pos + 1, arg7);
-        pos += INT_TYPE_SIZE;
-        buff[pos] = INT_TYPE;
-        copyInt(buff, pos + 1, arg8);
-        pos += INT_TYPE_SIZE;
-        buff[pos] = INT_TYPE;
-        copyInt(buff, pos + 1, arg9);
-        pos += INT_TYPE_SIZE;
-        buff[pos] = INT_TYPE;
-        copyInt(buff, pos + 1, arg10);
-        pos += INT_TYPE_SIZE;
-        StatsLog.writeRaw(buff, pos);
-    }
-
-    // Helper methods for copying primitives
-    private static void copyInt(byte[] buff, int pos, int val) {
-        buff[pos] = (byte) (val);
-        buff[pos + 1] = (byte) (val >> 8);
-        buff[pos + 2] = (byte) (val >> 16);
-        buff[pos + 3] = (byte) (val >> 24);
-        return;
-    }
-
-    private static void copyLong(byte[] buff, int pos, long val) {
-        buff[pos] = (byte) (val);
-        buff[pos + 1] = (byte) (val >> 8);
-        buff[pos + 2] = (byte) (val >> 16);
-        buff[pos + 3] = (byte) (val >> 24);
-        buff[pos + 4] = (byte) (val >> 32);
-        buff[pos + 5] = (byte) (val >> 40);
-        buff[pos + 6] = (byte) (val >> 48);
-        buff[pos + 7] = (byte) (val >> 56);
-        return;
-    }
-
-}
diff --git a/src/com/android/customization/picker/BasePreviewAdapter.java b/src/com/android/customization/picker/BasePreviewAdapter.java
index 53f750a..a02cb7e 100644
--- a/src/com/android/customization/picker/BasePreviewAdapter.java
+++ b/src/com/android/customization/picker/BasePreviewAdapter.java
@@ -17,6 +17,7 @@
 
 import static androidx.core.view.ViewCompat.LAYOUT_DIRECTION_RTL;
 
+import android.app.Activity;
 import android.content.Context;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -29,7 +30,8 @@
 import androidx.viewpager.widget.PagerAdapter;
 
 import com.android.customization.picker.BasePreviewAdapter.PreviewPage;
-import com.android.customization.widget.PreviewPager;
+import com.android.wallpaper.util.TileSizeCalculator;
+import com.android.wallpaper.widget.PreviewPager;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -103,11 +105,24 @@
         protected final String title;
         protected CardView card;
 
-        protected PreviewPage(String title) {
+        private Activity mActivity;
+
+        protected PreviewPage(String title, Activity activity) {
             this.title = title;
+            mActivity = activity;
         }
 
         public void setCard(CardView card) {
+            card.addOnLayoutChangeListener(
+                    new View.OnLayoutChangeListener() {
+                        @Override
+                        public void onLayoutChange(View v, int left, int top, int right, int bottom,
+                                int oldLeft, int oldTop, int oldRight, int oldBottom) {
+                            card.setRadius(TileSizeCalculator.getPreviewCornerRadius(
+                                    mActivity, card.getMeasuredWidth()));
+                            card.removeOnLayoutChangeListener(this);
+                        }
+                    });
             this.card = card;
         }
 
diff --git a/src/com/android/customization/picker/CustomizationPickerActivity.java b/src/com/android/customization/picker/CustomizationPickerActivity.java
index 80cd7d9..ac456be 100644
--- a/src/com/android/customization/picker/CustomizationPickerActivity.java
+++ b/src/com/android/customization/picker/CustomizationPickerActivity.java
@@ -25,10 +25,12 @@
 import android.view.Gravity;
 import android.view.Menu;
 import android.view.MenuItem;
+import android.view.View;
 
 import androidx.annotation.IdRes;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentManager;
@@ -64,7 +66,7 @@
 import com.android.wallpaper.module.Injector;
 import com.android.wallpaper.module.InjectorProvider;
 import com.android.wallpaper.module.UserEventLogger;
-import com.android.wallpaper.module.WallpaperSetter;
+import com.android.wallpaper.picker.BottomActionBarFragment;
 import com.android.wallpaper.picker.CategoryFragment;
 import com.android.wallpaper.picker.CategoryFragment.CategoryFragmentHost;
 import com.android.wallpaper.picker.MyPhotosStarter;
@@ -72,6 +74,8 @@
 import com.android.wallpaper.picker.TopLevelPickerActivity;
 import com.android.wallpaper.picker.WallpaperPickerDelegate;
 import com.android.wallpaper.picker.WallpapersUiContainer;
+import com.android.wallpaper.widget.BottomActionBar;
+import com.android.wallpaper.widget.BottomActionBar.BottomActionBarHost;
 
 import com.google.android.material.bottomnavigation.BottomNavigationView;
 
@@ -83,12 +87,14 @@
  *  Fragments providing customization options.
  */
 public class CustomizationPickerActivity extends FragmentActivity implements WallpapersUiContainer,
-        CategoryFragmentHost, ThemeFragmentHost, GridFragmentHost, ClockFragmentHost {
+        CategoryFragmentHost, ThemeFragmentHost, GridFragmentHost, ClockFragmentHost,
+        BottomActionBarHost {
 
     private static final String TAG = "CustomizationPickerActivity";
-    private static final String WALLPAPER_FLAVOR_EXTRA = "com.android.launcher3.WALLPAPER_FLAVOR";
-    private static final String WALLPAPER_FOCUS = "focus_wallpaper";
-    private static final String WALLPAPER_ONLY = "wallpaper_only";
+    @VisibleForTesting static final String WALLPAPER_FLAVOR_EXTRA =
+            "com.android.launcher3.WALLPAPER_FLAVOR";
+    @VisibleForTesting static final String WALLPAPER_FOCUS = "focus_wallpaper";
+    @VisibleForTesting static final String WALLPAPER_ONLY = "wallpaper_only";
 
     private WallpaperPickerDelegate mDelegate;
     private UserEventLogger mUserEventLogger;
@@ -96,7 +102,7 @@
 
     private static final Map<Integer, CustomizationSection> mSections = new HashMap<>();
     private CategoryFragment mWallpaperCategoryFragment;
-    private WallpaperSetter mWallpaperSetter;
+    private BottomActionBar mBottomActionBar;
 
     private boolean mWallpaperCategoryInitialized;
 
@@ -114,26 +120,35 @@
         if (!supportsCustomization()) {
             Log.w(TAG, "Themes not supported, reverting to Wallpaper Picker");
             skipToWallpaperPicker();
-        } else {
-            setContentView(R.layout.activity_customization_picker_main);
-            setUpBottomNavView();
-
-            FragmentManager fm = getSupportFragmentManager();
-            Fragment fragment = fm.findFragmentById(R.id.fragment_container);
-
-            if (fragment == null) {
-                // App launch specific logic: log the "app launched" event and set up daily logging.
-                mUserEventLogger.logAppLaunched();
-                DailyLoggingAlarmScheduler.setAlarm(getApplicationContext());
-
-                // Navigate to the Wallpaper tab if we started directly from launcher, otherwise
-                // start at the Styles tab
-                int section = WALLPAPER_FOCUS.equals(getIntent()
-                    .getStringExtra(WALLPAPER_FLAVOR_EXTRA))
-                    ? mBottomNav.getMenu().size() - 1 : 0;
-                navigateToSection(mBottomNav.getMenu().getItem(section).getItemId());
-            }
+            return;
         }
+
+        setContentView(R.layout.activity_customization_picker_main);
+        setUpBottomNavView();
+
+        FragmentManager fm = getSupportFragmentManager();
+        Fragment fragment = fm.findFragmentById(R.id.fragment_container);
+
+        if (fragment == null) {
+            // App launch specific logic: log the "app launched" event and set up daily logging.
+            mUserEventLogger.logAppLaunched();
+            DailyLoggingAlarmScheduler.setAlarm(getApplicationContext());
+
+            // Navigate to the Wallpaper tab if we started directly from launcher, otherwise
+            // start at the Styles tab
+            navigateToSection(
+                    WALLPAPER_FOCUS.equals(getIntent().getStringExtra(WALLPAPER_FLAVOR_EXTRA))
+                            ? R.id.nav_wallpaper : R.id.nav_theme);
+        }
+
+        mBottomActionBar = findViewById(R.id.bottom_actionbar);
+        mBottomActionBar.getViewTreeObserver().addOnGlobalLayoutListener(() -> {
+            // Only update the visibility of mBottomNav when mBottomActionBar visibility changes.
+            // Since the listener will be triggered by mBottomActionBar and its child views.
+            if (mBottomActionBar.getVisibility() == mBottomNav.getVisibility()) {
+                mBottomNav.setVisibility(mBottomActionBar.isVisible() ? View.GONE : View.VISIBLE);
+            }
+        });
     }
 
     @Override
@@ -193,14 +208,11 @@
         }
         //Theme
         CustomizationInjector injector = (CustomizationInjector) InjectorProvider.getInjector();
-        mWallpaperSetter = new WallpaperSetter(injector.getWallpaperPersister(this),
-                injector.getPreferences(this), mUserEventLogger, false);
         ThemesUserEventLogger eventLogger = (ThemesUserEventLogger) injector.getUserEventLogger(
                 this);
         ThemeManager themeManager = injector.getThemeManager(
                 new DefaultThemeProvider(this, injector.getCustomizationPreferences(this)),
-                this,
-                mWallpaperSetter, new OverlayManagerCompat(this), eventLogger);
+                this, new OverlayManagerCompat(this), eventLogger);
         if (themeManager.isAvailable()) {
             mSections.put(R.id.nav_theme, new ThemeSection(R.id.nav_theme, themeManager));
         } else {
@@ -291,6 +303,17 @@
 
     @Override
     public void onBackPressed() {
+        Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
+        if (fragment instanceof BottomActionBarFragment
+                && ((BottomActionBarFragment) fragment).onBackPressed()) {
+            return;
+        }
+
+        // For wallpaper tab, since it had child fragment.
+        if (mWallpaperCategoryFragment != null && mWallpaperCategoryFragment.popChildFragment()) {
+            return;
+        }
+
         if (getSupportFragmentManager().popBackStackImmediate()) {
             return;
         }
@@ -301,6 +324,11 @@
     }
 
     private void navigateToSection(@IdRes int id) {
+        // Navigate to the first section if the targeted section doesn't exist.
+        if (!mSections.containsKey(id)) {
+            id = mBottomNav.getMenu().getItem(0).getItemId();
+        }
+
         mBottomNav.setSelectedItemId(id);
     }
 
@@ -330,14 +358,6 @@
         mDelegate.showViewOnlyPreview(wallpaperInfo);
     }
 
-    /**
-     * Shows the picker activity for the given category.
-     */
-    @Override
-    public void show(String collectionId) {
-        mDelegate.show(collectionId);
-    }
-
     @Override
     public void onWallpapersReady() {
 
@@ -390,14 +410,6 @@
     }
 
     @Override
-    protected void onDestroy() {
-        super.onDestroy();
-        if (mWallpaperSetter != null) {
-            mWallpaperSetter.cleanUp();
-        }
-    }
-
-    @Override
     protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
         if (mDelegate.handleActivityResult(requestCode, resultCode, data)) {
@@ -411,6 +423,11 @@
         finish();
     }
 
+    @Override
+    public BottomActionBar getBottomActionBar() {
+        return mBottomActionBar;
+    }
+
     /**
      * Represents a section of the Picker (eg "ThemeBundle", "Clock", etc).
      * There should be a concrete subclass per available section, providing the corresponding
diff --git a/src/com/android/customization/picker/clock/ClockFragment.java b/src/com/android/customization/picker/clock/ClockFragment.java
index 14dbc16..bc02ae3 100644
--- a/src/com/android/customization/picker/clock/ClockFragment.java
+++ b/src/com/android/customization/picker/clock/ClockFragment.java
@@ -15,6 +15,7 @@
  */
 package com.android.customization.picker.clock;
 
+import android.app.Activity;
 import android.content.Context;
 import android.content.res.Resources;
 import android.os.Bundle;
@@ -38,18 +39,18 @@
 import com.android.customization.picker.BasePreviewAdapter;
 import com.android.customization.picker.BasePreviewAdapter.PreviewPage;
 import com.android.customization.widget.OptionSelectorController;
-import com.android.customization.widget.PreviewPager;
 import com.android.wallpaper.R;
 import com.android.wallpaper.asset.Asset;
 import com.android.wallpaper.module.InjectorProvider;
-import com.android.wallpaper.picker.ToolbarFragment;
+import com.android.wallpaper.picker.AppbarFragment;
+import com.android.wallpaper.widget.PreviewPager;
 
 import java.util.List;
 
 /**
  * Fragment that contains the main UI for selecting and applying a Clockface.
  */
-public class ClockFragment extends ToolbarFragment {
+public class ClockFragment extends AppbarFragment {
 
     private static final String TAG = "ClockFragment";
 
@@ -62,7 +63,7 @@
 
     public static ClockFragment newInstance(CharSequence title) {
         ClockFragment fragment = new ClockFragment();
-        fragment.setArguments(ToolbarFragment.createArguments(title));
+        fragment.setArguments(AppbarFragment.createArguments(title));
         return fragment;
     }
 
@@ -120,7 +121,7 @@
     }
 
     private void createAdapter() {
-        mPreviewPager.setAdapter(new ClockPreviewAdapter(getContext(), mSelectedOption));
+        mPreviewPager.setAdapter(new ClockPreviewAdapter(getActivity(), mSelectedOption));
     }
 
     private void setUpOptions() {
@@ -174,8 +175,8 @@
 
         private final Asset mPreviewAsset;
 
-        public ClockfacePreviewPage(String title, Asset previewAsset) {
-            super(title);
+        public ClockfacePreviewPage(String title, Activity activity, Asset previewAsset) {
+            super(title, activity);
             mPreviewAsset = previewAsset;
         }
 
@@ -199,9 +200,10 @@
      * we don't want to just scroll)
      */
     private static class ClockPreviewAdapter extends BasePreviewAdapter<ClockfacePreviewPage> {
-        ClockPreviewAdapter(Context context, Clockface clockface) {
-            super(context, R.layout.clock_preview_card);
-            addPage(new ClockfacePreviewPage(clockface.getTitle(), clockface.getPreviewAsset()));
+        ClockPreviewAdapter(Activity activity, Clockface clockface) {
+            super(activity, R.layout.clock_preview_card);
+            addPage(new ClockfacePreviewPage(
+                    clockface.getTitle(), activity , clockface.getPreviewAsset()));
         }
     }
 }
diff --git a/src/com/android/customization/picker/grid/GridFragment.java b/src/com/android/customization/picker/grid/GridFragment.java
index 3c395a1..4bf29f8 100644
--- a/src/com/android/customization/picker/grid/GridFragment.java
+++ b/src/com/android/customization/picker/grid/GridFragment.java
@@ -15,19 +15,27 @@
  */
 package com.android.customization.picker.grid;
 
+import static com.android.wallpaper.widget.BottomActionBar.BottomAction.APPLY;
+
 import android.app.Activity;
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.drawable.BitmapDrawable;
 import android.net.Uri;
 import android.os.Bundle;
+import android.os.Message;
+import android.os.RemoteException;
 import android.util.DisplayMetrics;
 import android.util.Log;
 import android.view.LayoutInflater;
+import android.view.Surface;
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
 import android.view.View;
 import android.view.View.OnLayoutChangeListener;
 import android.view.ViewGroup;
 import android.widget.ImageView;
+import android.widget.Toast;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -43,15 +51,18 @@
 import com.android.customization.picker.BasePreviewAdapter;
 import com.android.customization.picker.BasePreviewAdapter.PreviewPage;
 import com.android.customization.widget.OptionSelectorController;
-import com.android.customization.widget.PreviewPager;
 import com.android.wallpaper.R;
 import com.android.wallpaper.asset.Asset;
 import com.android.wallpaper.asset.ContentUriAsset;
 import com.android.wallpaper.model.WallpaperInfo;
 import com.android.wallpaper.module.CurrentWallpaperInfoFactory;
 import com.android.wallpaper.module.InjectorProvider;
-import com.android.wallpaper.picker.ToolbarFragment;
+import com.android.wallpaper.picker.AppbarFragment;
+import com.android.wallpaper.util.SurfaceViewUtils;
+import com.android.wallpaper.widget.BottomActionBar;
+import com.android.wallpaper.widget.PreviewPager;
 
+import com.bumptech.glide.Glide;
 import com.bumptech.glide.request.RequestOptions;
 
 import java.util.List;
@@ -59,7 +70,7 @@
 /**
  * Fragment that contains the UI for selecting and applying a GridOption.
  */
-public class GridFragment extends ToolbarFragment {
+public class GridFragment extends AppbarFragment {
 
     private static final int PREVIEW_FADE_DURATION_MS = 100;
 
@@ -74,7 +85,7 @@
 
     public static GridFragment newInstance(CharSequence title) {
         GridFragment fragment = new GridFragment();
-        fragment.setArguments(ToolbarFragment.createArguments(title));
+        fragment.setArguments(AppbarFragment.createArguments(title));
         return fragment;
     }
 
@@ -92,7 +103,43 @@
     private ContentLoadingProgressBar mLoading;
     private View mContent;
     private View mError;
+    private BottomActionBar mBottomActionBar;
     private ThemesUserEventLogger mEventLogger;
+    private boolean mReloadOptionsAfterApplying;
+
+    private final Callback mApplyGridCallback = new Callback() {
+        @Override
+        public void onSuccess() {
+            mGridManager.fetchOptions(new OptionsFetchedListener<GridOption>() {
+                @Override
+                public void onOptionsLoaded(List<GridOption> options) {
+                    mOptionsController.resetOptions(options);
+                    mSelectedOption = getSelectedOption(options);
+                    mReloadOptionsAfterApplying = true;
+                    // It will trigger OptionSelectedListener#onOptionSelected.
+                    mOptionsController.setSelectedOption(mSelectedOption);
+                    Toast.makeText(getContext(), R.string.applied_grid_msg, Toast.LENGTH_SHORT)
+                            .show();
+                    // Since we disabled it when clicked apply button.
+                    mBottomActionBar.enableActions();
+                    mBottomActionBar.hide();
+                }
+
+                @Override
+                public void onError(@Nullable Throwable throwable) {
+                    if (throwable != null) {
+                        Log.e(TAG, "Error loading grid options", throwable);
+                    }
+                    showError();
+                }
+            }, true);
+        }
+
+        @Override
+        public void onError(@Nullable Throwable throwable) {
+            //TODO(chihhangchuang): handle
+        }
+    };
 
     @Override
     public void onAttach(Context context) {
@@ -117,21 +164,11 @@
         final Resources res = getResources();
         DisplayMetrics dm = res.getDisplayMetrics();
         mScreenAspectRatio = (float) dm.heightPixels / dm.widthPixels;
+
+        // Clear memory cache whenever grid fragment view is being loaded.
+        Glide.get(getContext()).clearMemory();
         setUpOptions();
-        view.findViewById(R.id.apply_button).setOnClickListener(v -> {
-            mGridManager.apply(mSelectedOption,  new Callback() {
-                @Override
-                public void onSuccess() {
-                    getActivity().finish();
-                }
 
-                @Override
-                public void onError(@Nullable Throwable throwable) {
-                    //TODO(santie): handle
-                }
-            });
-
-        });
         CurrentWallpaperInfoFactory factory = InjectorProvider.getInjector()
                 .getCurrentWallpaperFactory(getContext().getApplicationContext());
 
@@ -154,6 +191,16 @@
         return view;
     }
 
+    @Override
+    protected void onBottomActionBarReady(BottomActionBar bottomActionBar) {
+        mBottomActionBar = bottomActionBar;
+        mBottomActionBar.showActionsOnly(APPLY);
+        mBottomActionBar.setActionClickListener(APPLY, unused -> {
+            mBottomActionBar.disableActions();
+            mGridManager.apply(mSelectedOption, mApplyGridCallback);
+        });
+    }
+
     private void loadWallpaperBackground() {
         if (mHomeWallpaper != null && mCardHeight > 0 && mCardWidth > 0) {
             mHomeWallpaper.getThumbAsset(getContext()).decodeBitmap(mCardWidth,
@@ -184,19 +231,16 @@
 
                 mOptionsController.addListener(selected -> {
                     mSelectedOption = (GridOption) selected;
+                    if (mReloadOptionsAfterApplying) {
+                        mReloadOptionsAfterApplying = false;
+                        return;
+                    }
+                    mBottomActionBar.show();
                     mEventLogger.logGridSelected(mSelectedOption);
                     createAdapter();
                 });
                 mOptionsController.initOptions(mGridManager);
-                for (GridOption option : options) {
-                    if (option.isActive(mGridManager)) {
-                        mSelectedOption = option;
-                    }
-                }
-                // For development only, as there should always be a grid set.
-                if (mSelectedOption == null) {
-                    mSelectedOption = options.get(0);
-                }
+                mSelectedOption = getSelectedOption(options);
                 createAdapter();
             }
 
@@ -210,6 +254,14 @@
         }, false);
     }
 
+    private GridOption getSelectedOption(List<GridOption> options) {
+        return options.stream()
+                .filter(option -> option.isActive(mGridManager))
+                .findAny()
+                // For development only, as there should always be a grid set.
+                .orElse(options.get(0));
+    }
+
     private void hideError() {
         mContent.setVisibility(View.VISIBLE);
         mError.setVisibility(View.GONE);
@@ -228,13 +280,55 @@
         private final int mRows;
         private final Activity mActivity;
 
-		private ImageView mPreview;
+        private final String mName;
 
-        private GridPreviewPage(Activity activity, int id, Uri previewUri, int rows, int cols) {
-            super(null);
+        private ImageView mPreview;
+        private SurfaceView mPreviewSurface;
+
+        private final SurfaceHolder.Callback mSurfaceCallback = new SurfaceHolder.Callback() {
+
+            private Surface mLastSurface;
+            private Message mCallback;
+
+            @Override
+            public void surfaceCreated(SurfaceHolder holder) {
+                if (mLastSurface != holder.getSurface()) {
+                    mLastSurface = holder.getSurface();
+                    Bundle result = mGridManager.renderPreview(
+                            SurfaceViewUtils.createSurfaceViewRequest(mPreviewSurface), mName);
+                    if (result != null) {
+                        mPreviewSurface.setChildSurfacePackage(
+                                SurfaceViewUtils.getSurfacePackage(result));
+                        mCallback = SurfaceViewUtils.getCallback(result);
+                    }
+                }
+            }
+
+            @Override
+            public void surfaceChanged(SurfaceHolder holder, int format, int width,
+                    int height) {}
+
+            @Override
+            public void surfaceDestroyed(SurfaceHolder holder) {
+                if (mCallback != null) {
+                    try {
+                        mCallback.replyTo.send(mCallback);
+                    } catch (RemoteException e) {
+                        e.printStackTrace();
+                    } finally {
+                        mCallback = null;
+                    }
+                }
+            }
+        };
+
+        private GridPreviewPage(Activity activity, int id, Uri previewUri, String name, int rows,
+                int cols) {
+            super(null, activity);
             mPageId = id;
             mPreviewAsset = new ContentUriAsset(activity, previewUri,
                     RequestOptions.fitCenterTransform());
+            mName = name;
             mRows = rows;
             mCols = cols;
             mActivity = activity;
@@ -242,23 +336,34 @@
 
         @Override
         public void setCard(CardView card) {
-        	super.setCard(card);
-        	mPreview = card.findViewById(R.id.grid_preview_image);
+            super.setCard(card);
+            mPreview = card.findViewById(R.id.grid_preview_image);
+            mPreviewSurface = card.findViewById(R.id.grid_preview_surface);
         }
 
         public void bindPreviewContent() {
             Resources resources = card.getResources();
             bindWallpaperIfAvailable();
-            mPreviewAsset.loadDrawableWithTransition(mActivity,
-                    mPreview /* imageView */,
-                    PREVIEW_FADE_DURATION_MS /* duration */,
-                    null /* drawableLoadedListener */,
-                    resources.getColor(android.R.color.transparent, null) /* placeHolderColorJ */);
+            final boolean usesSurfaceViewForPreview = mGridManager.usesSurfaceView();
+            mPreview.setVisibility(usesSurfaceViewForPreview ? View.GONE : View.VISIBLE);
+            mPreviewSurface.setVisibility(usesSurfaceViewForPreview ? View.VISIBLE : View.GONE);
+            if (usesSurfaceViewForPreview) {
+                mPreviewSurface.setZOrderOnTop(true);
+                mPreviewSurface.getHolder().addCallback(mSurfaceCallback);
+            } else {
+                mPreviewAsset.loadDrawableWithTransition(mActivity,
+                        mPreview /* imageView */,
+                        PREVIEW_FADE_DURATION_MS /* duration */,
+                        null /* drawableLoadedListener */,
+                        resources.getColor(android.R.color.transparent,
+                                null) /* placeHolderColorJ */);
+            }
         }
 
         void bindWallpaperIfAvailable() {
             if (card != null && mCardBackground != null) {
                 mPreview.setBackground(mCardBackground);
+                mPreviewSurface.setBackground(mCardBackground);
             }
         }
     }
@@ -274,7 +379,7 @@
             for (int i = 0; i < gridOption.previewPagesCount; i++) {
                 addPage(new GridPreviewPage(getActivity(), i,
                         gridOption.previewImageUri.buildUpon().appendPath("" + i).build(),
-                        gridOption.rows, gridOption.cols));
+                        gridOption.name, gridOption.rows, gridOption.cols));
             }
         }
 
diff --git a/src/com/android/customization/picker/theme/CustomThemeActivity.java b/src/com/android/customization/picker/theme/CustomThemeActivity.java
index fe537ba..6173b3d 100644
--- a/src/com/android/customization/picker/theme/CustomThemeActivity.java
+++ b/src/com/android/customization/picker/theme/CustomThemeActivity.java
@@ -53,7 +53,6 @@
 import com.android.customization.picker.theme.CustomThemeStepFragment.CustomThemeComponentStepHost;
 import com.android.wallpaper.R;
 import com.android.wallpaper.module.InjectorProvider;
-import com.android.wallpaper.module.WallpaperSetter;
 
 import org.json.JSONException;
 
@@ -106,8 +105,6 @@
         mThemeManager = injector.getThemeManager(
                 new DefaultThemeProvider(this, injector.getCustomizationPreferences(this)),
                 this,
-                new WallpaperSetter(injector.getWallpaperPersister(this),
-                        injector.getPreferences(this), mUserEventLogger, false),
                 new OverlayManagerCompat(this),
                 mUserEventLogger);
         mThemeManager.fetchOptions(null, false);
diff --git a/src/com/android/customization/picker/theme/CustomThemeComponentFragment.java b/src/com/android/customization/picker/theme/CustomThemeComponentFragment.java
index f6471f0..b2217aa 100644
--- a/src/com/android/customization/picker/theme/CustomThemeComponentFragment.java
+++ b/src/com/android/customization/picker/theme/CustomThemeComponentFragment.java
@@ -15,27 +15,20 @@
  */
 package com.android.customization.picker.theme;
 
-import android.app.AlertDialog;
-import android.content.Context;
-import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.view.LayoutInflater;
-import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.TextView;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.annotation.StringRes;
 import androidx.recyclerview.widget.RecyclerView;
 
-import com.android.customization.model.theme.custom.CustomThemeManager;
 import com.android.customization.model.theme.custom.ThemeComponentOption;
 import com.android.customization.model.theme.custom.ThemeComponentOptionProvider;
 import com.android.customization.widget.OptionSelectorController;
 import com.android.wallpaper.R;
-import com.android.wallpaper.picker.ToolbarFragment;
+import com.android.wallpaper.picker.AppbarFragment;
 
 public class CustomThemeComponentFragment extends CustomThemeStepFragment {
     private static final String ARG_USE_GRID_LAYOUT = "CustomThemeComponentFragment.use_grid";;
@@ -48,7 +41,7 @@
     public static CustomThemeComponentFragment newInstance(CharSequence toolbarTitle, int position,
             int titleResId, boolean allowGridLayout) {
         CustomThemeComponentFragment fragment = new CustomThemeComponentFragment();
-        Bundle arguments = ToolbarFragment.createArguments(toolbarTitle);
+        Bundle arguments = AppbarFragment.createArguments(toolbarTitle);
         arguments.putInt(ARG_KEY_POSITION, position);
         arguments.putInt(ARG_KEY_TITLE_RES_ID, titleResId);
         arguments.putBoolean(ARG_USE_GRID_LAYOUT, allowGridLayout);
diff --git a/src/com/android/customization/picker/theme/CustomThemeNameFragment.java b/src/com/android/customization/picker/theme/CustomThemeNameFragment.java
index e21fc80..45e4324 100644
--- a/src/com/android/customization/picker/theme/CustomThemeNameFragment.java
+++ b/src/com/android/customization/picker/theme/CustomThemeNameFragment.java
@@ -42,14 +42,14 @@
 import com.android.wallpaper.asset.BitmapCachingAsset;
 import com.android.wallpaper.module.CurrentWallpaperInfoFactory;
 import com.android.wallpaper.module.InjectorProvider;
-import com.android.wallpaper.picker.ToolbarFragment;
+import com.android.wallpaper.picker.AppbarFragment;
 
 public class CustomThemeNameFragment extends CustomThemeStepFragment {
 
     public static CustomThemeNameFragment newInstance(CharSequence toolbarTitle, int position,
             int titleResId) {
         CustomThemeNameFragment fragment = new CustomThemeNameFragment();
-        Bundle arguments = ToolbarFragment.createArguments(toolbarTitle);
+        Bundle arguments = AppbarFragment.createArguments(toolbarTitle);
         arguments.putInt(ARG_KEY_POSITION, position);
         arguments.putInt(ARG_KEY_TITLE_RES_ID, titleResId);
         fragment.setArguments(arguments);
@@ -104,7 +104,6 @@
         mNameEditor = view.findViewById(R.id.custom_theme_name);
         mNameEditor.setText(mCustomThemeManager.getOriginalTheme().getTitle());
         bindCover(view.findViewById(R.id.component_preview_content));
-
         return view;
     }
 
@@ -132,7 +131,7 @@
     private void bindCover(CardView card) {
         Context context = getContext();
         PreviewInfo previewInfo = mCustomThemeManager.buildCustomThemePreviewInfo(context);
-        mCoverPage = new ThemeCoverPage(context, getThemeName(),
+        mCoverPage = new ThemeCoverPage(getActivity(), getThemeName(),
                 previewInfo.resolveAccentColor(getResources()), previewInfo.icons,
                 previewInfo.headlineFontFamily, previewInfo.bottomSheeetCornerRadius,
                 previewInfo.shapeDrawable, previewInfo.shapeAppIcons, null,
diff --git a/src/com/android/customization/picker/theme/CustomThemeStepFragment.java b/src/com/android/customization/picker/theme/CustomThemeStepFragment.java
index ebf55e3..b05ebc4 100644
--- a/src/com/android/customization/picker/theme/CustomThemeStepFragment.java
+++ b/src/com/android/customization/picker/theme/CustomThemeStepFragment.java
@@ -18,9 +18,9 @@
 import com.android.customization.model.theme.custom.ThemeComponentOption;
 import com.android.customization.model.theme.custom.ThemeComponentOptionProvider;
 import com.android.wallpaper.R;
-import com.android.wallpaper.picker.ToolbarFragment;
+import com.android.wallpaper.picker.AppbarFragment;
 
-abstract class CustomThemeStepFragment extends ToolbarFragment {
+abstract class CustomThemeStepFragment extends AppbarFragment {
     protected static final String ARG_KEY_POSITION = "CustomThemeStepFragment.position";
     protected static final String ARG_KEY_TITLE_RES_ID = "CustomThemeStepFragment.title_res";
     protected CustomThemeComponentStepHost mHost;
diff --git a/src/com/android/customization/picker/theme/ThemeFragment.java b/src/com/android/customization/picker/theme/ThemeFragment.java
index 641d3e1..e04d8d2 100644
--- a/src/com/android/customization/picker/theme/ThemeFragment.java
+++ b/src/com/android/customization/picker/theme/ThemeFragment.java
@@ -33,7 +33,6 @@
 import android.view.View.OnClickListener;
 import android.view.View.OnLayoutChangeListener;
 import android.view.ViewGroup;
-import android.widget.CheckBox;
 import android.widget.CompoundButton;
 import android.widget.ImageView;
 import android.widget.SeekBar;
@@ -58,21 +57,22 @@
 import com.android.customization.picker.theme.ThemePreviewPage.ThemeCoverPage;
 import com.android.customization.picker.theme.ThemePreviewPage.TimeContainer;
 import com.android.customization.widget.OptionSelectorController;
-import com.android.customization.widget.PreviewPager;
 import com.android.wallpaper.R;
 import com.android.wallpaper.asset.Asset;
 import com.android.wallpaper.asset.Asset.CenterCropBitmapTask;
+import com.android.wallpaper.asset.BitmapCachingAsset;
 import com.android.wallpaper.model.WallpaperInfo;
 import com.android.wallpaper.module.CurrentWallpaperInfoFactory;
 import com.android.wallpaper.module.InjectorProvider;
-import com.android.wallpaper.picker.ToolbarFragment;
+import com.android.wallpaper.picker.AppbarFragment;
+import com.android.wallpaper.widget.PreviewPager;
 
 import java.util.List;
 
 /**
  * Fragment that contains the main UI for selecting and applying a ThemeBundle.
  */
-public class ThemeFragment extends ToolbarFragment {
+public class ThemeFragment extends AppbarFragment {
 
     private static final String TAG = "ThemeFragment";
     private static final String KEY_SELECTED_THEME = "ThemeFragment.SelectedThemeBundle";
@@ -85,12 +85,11 @@
     }
     public static ThemeFragment newInstance(CharSequence title) {
         ThemeFragment fragment = new ThemeFragment();
-        fragment.setArguments(ToolbarFragment.createArguments(title));
+        fragment.setArguments(AppbarFragment.createArguments(title));
         return fragment;
     }
 
     private RecyclerView mOptionsContainer;
-    private CheckBox mUseMyWallpaperButton;
     private OptionSelectorController<ThemeBundle> mOptionsController;
     private ThemeManager mThemeManager;
     private ThemesUserEventLogger mEventLogger;
@@ -100,8 +99,9 @@
     private ContentLoadingProgressBar mLoading;
     private View mContent;
     private View mError;
-    private boolean mUseMyWallpaper;
+    private boolean mUseMyWallpaper = true;
     private WallpaperInfo mCurrentHomeWallpaper;
+    private Asset mCurrentWallpaperThumbAsset;
     private CurrentWallpaperInfoFactory mCurrentWallpaperFactory;
     private TimeTicker mTicker;
 
@@ -131,8 +131,6 @@
         view.findViewById(R.id.apply_button).setOnClickListener(v -> {
             applyTheme();
         });
-        mUseMyWallpaperButton = view.findViewById(R.id.use_my_wallpaper);
-        mUseMyWallpaperButton.setOnCheckedChangeListener(this::onUseMyWallpaperCheckChanged);
         setUpOptions(savedInstanceState);
 
         return view;
@@ -206,32 +204,23 @@
         super.onActivityResult(requestCode, resultCode, data);
     }
 
-    private void onUseMyWallpaperCheckChanged(CompoundButton checkbox, boolean checked) {
-        mUseMyWallpaper = checked;
-        reloadWallpaper();
-    }
-
     private void reloadWallpaper() {
         mCurrentWallpaperFactory.createCurrentWallpaperInfos(
                 (homeWallpaper, lockWallpaper, presentationMode) -> {
                     mCurrentHomeWallpaper = homeWallpaper;
-                    if (mSelectedTheme != null) {
-                        if (mUseMyWallpaper || (mSelectedTheme instanceof CustomTheme)) {
-                            mSelectedTheme.setOverrideThemeWallpaper(homeWallpaper);
-                        } else {
-                            mSelectedTheme.setOverrideThemeWallpaper(null);
-                        }
-                        if (mAdapter != null) {
-                            mAdapter.rebindWallpaperIfAvailable();
-                        }
+                    mCurrentWallpaperThumbAsset = new BitmapCachingAsset(getContext(),
+                            mCurrentHomeWallpaper.getThumbAsset(getContext()));
+                    if (mSelectedTheme != null && mAdapter != null) {
+                        mAdapter.setWallpaperAsset(mCurrentWallpaperThumbAsset);
+                        mAdapter.rebindWallpaperIfAvailable();
                     }
         }, false);
     }
 
     private void createAdapter(List<ThemeBundle> options) {
         mAdapter = new ThemePreviewAdapter(getActivity(), mSelectedTheme,
-                mSelectedTheme instanceof CustomTheme ? this::onEditClicked : null,
-                new PreloadWallpapersLayoutListener(options));
+                mCurrentWallpaperThumbAsset,
+                mSelectedTheme instanceof CustomTheme ? this::onEditClicked : null);
         mPreviewPager.setAdapter(mAdapter);
     }
 
@@ -241,11 +230,6 @@
         }
     }
 
-    private void updateButtonsVisibility() {
-        mUseMyWallpaperButton.setVisibility(mSelectedTheme instanceof CustomTheme
-                ? View.INVISIBLE : View.VISIBLE);
-    }
-
     private void hideError() {
         mContent.setVisibility(View.VISIBLE);
         mError.setVisibility(View.GONE);
@@ -278,7 +262,6 @@
                         mEventLogger.logThemeSelected(mSelectedTheme,
                                 selected instanceof CustomTheme);
                         createAdapter(options);
-                        updateButtonsVisibility();
                     }
                 });
                 mOptionsController.initOptions(mThemeManager);
@@ -370,11 +353,12 @@
                 R.id.shape_preview_icon_0, R.id.shape_preview_icon_1, R.id.shape_preview_icon_2,
                 R.id.shape_preview_icon_3, R.id.shape_preview_icon_4, R.id.shape_preview_icon_5
         };
+        private Asset mWallpaperAsset;
 
-        ThemePreviewAdapter(Activity activity, ThemeBundle theme,
-                @Nullable OnClickListener editClickListener,
-                @Nullable OnLayoutChangeListener coverCardLayoutListener) {
+        ThemePreviewAdapter(Activity activity, ThemeBundle theme, @Nullable Asset wallpaperAsset,
+                @Nullable OnClickListener editClickListener) {
             super(activity, R.layout.theme_preview_card);
+            mWallpaperAsset = wallpaperAsset;
             final Resources res = activity.getResources();
             final PreviewInfo previewInfo = theme.getPreviewInfo();
 
@@ -383,14 +367,14 @@
                     : null;
 
             WallpaperPreviewLayoutListener wallpaperListener = new WallpaperPreviewLayoutListener(
-                    theme, previewInfo, coverScrim, true);
+                    () -> mWallpaperAsset, previewInfo, coverScrim, true);
 
             addPage(new ThemeCoverPage(activity, theme.getTitle(),
                     previewInfo.resolveAccentColor(res), previewInfo.icons,
                     previewInfo.headlineFontFamily, previewInfo.bottomSheeetCornerRadius,
                     previewInfo.shapeDrawable, previewInfo.shapeAppIcons, editClickListener,
                     mColorButtonIds, mColorTileIds, mColorTileIconIds, mShapeIconIds,
-                    wallpaperListener, coverCardLayoutListener));
+                    wallpaperListener));
             addPage(new ThemePreviewPage(activity, R.string.preview_name_font, R.drawable.ic_font,
                     R.layout.preview_card_font_content,
                     previewInfo.resolveAccentColor(res)) {
@@ -487,31 +471,6 @@
                     }
                 });
             }
-            if (previewInfo.wallpaperAsset != null) {
-                addPage(new ThemePreviewPage(activity, R.string.preview_name_wallpaper,
-                        R.drawable.ic_nav_wallpaper, R.layout.preview_card_wallpaper_content,
-                        previewInfo.resolveAccentColor(res)) {
-
-                    private final WallpaperPreviewLayoutListener mListener =
-                            new WallpaperPreviewLayoutListener(theme, previewInfo, null, false);
-
-                    @Override
-                    protected boolean containsWallpaper() {
-                        return true;
-                    }
-
-                    @Override
-                    protected void bindBody(boolean forceRebind) {
-                        if (card == null) {
-                            return;
-                        }
-                        card.addOnLayoutChangeListener(mListener);
-                        if (forceRebind) {
-                            card.requestLayout();
-                        }
-                    }
-                });
-            }
         }
 
         public void rebindWallpaperIfAvailable() {
@@ -530,15 +489,23 @@
             }
         }
 
+        public void setWallpaperAsset(Asset wallpaperAsset) {
+            mWallpaperAsset = wallpaperAsset;
+        }
+
         private static class WallpaperPreviewLayoutListener implements OnLayoutChangeListener {
-            private final ThemeBundle mTheme;
+            interface WallpaperPreviewAssetProvider {
+                Asset getAsset();
+            }
+            private final WallpaperPreviewAssetProvider mWallpaperPreviewAssetProvider;
             private final PreviewInfo mPreviewInfo;
             private final Drawable mScrim;
             private final boolean mIsTranslucent;
 
-            public WallpaperPreviewLayoutListener(ThemeBundle theme, PreviewInfo previewInfo,
-                    Drawable scrim, boolean translucent) {
-                mTheme = theme;
+            WallpaperPreviewLayoutListener(
+                    WallpaperPreviewAssetProvider wallpaperPreviewAssetProvider,
+                    PreviewInfo previewInfo, Drawable scrim, boolean translucent) {
+                mWallpaperPreviewAssetProvider = wallpaperPreviewAssetProvider;
                 mPreviewInfo = previewInfo;
                 mScrim = scrim;
                 mIsTranslucent = translucent;
@@ -550,8 +517,7 @@
                 int targetWidth = right - left;
                 int targetHeight = bottom - top;
                 if (targetWidth > 0 && targetHeight > 0) {
-                    Asset wallpaperPreviewAsset = mTheme.getWallpaperPreviewAsset(
-                            view.getContext());
+                    Asset wallpaperPreviewAsset = mWallpaperPreviewAssetProvider.getAsset();
                     if (wallpaperPreviewAsset != null) {
                         wallpaperPreviewAsset.decodeBitmap(
                                 targetWidth, targetHeight,
@@ -597,41 +563,4 @@
             }
         }
     }
-
-    /**
-     * Runs only once after the card size is known, and requests decoding wallpaper bitmaps
-     * for all the options, to warm-up the bitmap cache.
-     */
-    private static class PreloadWallpapersLayoutListener implements OnLayoutChangeListener {
-        private static boolean alreadyRunOnce;
-        private final List<ThemeBundle> mOptions;
-
-        public PreloadWallpapersLayoutListener(List<ThemeBundle> options) {
-            mOptions = options;
-        }
-
-        @Override
-        public void onLayoutChange(View view, int left, int top, int right,
-                int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
-            if (alreadyRunOnce) {
-                view.removeOnLayoutChangeListener(this);
-                return;
-            }
-            int targetWidth = right - left;
-            int targetHeight = bottom - top;
-            if (targetWidth > 0 && targetHeight > 0) {
-                for (ThemeBundle theme : mOptions) {
-                    if (theme instanceof CustomTheme && !((CustomTheme) theme).isDefined()) {
-                        continue;
-                    }
-                    Asset wallpaperAsset = theme.getWallpaperPreviewAsset(view.getContext());
-                    if (wallpaperAsset != null) {
-                        wallpaperAsset.decodeBitmap(targetWidth, targetHeight, bitmap -> {});
-                    }
-                }
-                view.removeOnLayoutChangeListener(this);
-                alreadyRunOnce = true;
-            }
-        }
-    }
 }
diff --git a/src/com/android/customization/picker/theme/ThemePreviewPage.java b/src/com/android/customization/picker/theme/ThemePreviewPage.java
index c3af91c..b8152d9 100644
--- a/src/com/android/customization/picker/theme/ThemePreviewPage.java
+++ b/src/com/android/customization/picker/theme/ThemePreviewPage.java
@@ -1,6 +1,6 @@
 package com.android.customization.picker.theme;
 
-import android.content.Context;
+import android.app.Activity;
 import android.content.res.ColorStateList;
 import android.content.res.Resources;
 import android.graphics.Typeface;
@@ -45,21 +45,20 @@
     final int accentColor;
     protected final LayoutInflater inflater;
 
-    public ThemePreviewPage(Context context, @StringRes int titleResId,
-            @DrawableRes int iconSrc, @LayoutRes int contentLayoutRes,
-            @ColorInt int accentColor) {
-        super(null);
+    public ThemePreviewPage(Activity activity, @StringRes int titleResId,
+            @DrawableRes int iconSrc, @LayoutRes int contentLayoutRes, @ColorInt int accentColor) {
+        super(null, activity);
         this.nameResId = titleResId;
         if (iconSrc != Resources.ID_NULL) {
-            this.icon = context.getResources().getDrawable(iconSrc, context.getTheme());
-            int size = context.getResources().getDimensionPixelSize(R.dimen.card_header_icon_size);
+            this.icon = activity.getResources().getDrawable(iconSrc, activity.getTheme());
+            int size = activity.getResources().getDimensionPixelSize(R.dimen.card_header_icon_size);
             icon.setBounds(0, 0, size, size);
         } else {
             this.icon = null;
         }
         this.contentLayoutRes = contentLayoutRes;
         this.accentColor = accentColor;
-        this.inflater = LayoutInflater.from(context);
+        this.inflater = LayoutInflater.from(activity);
     }
 
     @Override
@@ -106,15 +105,17 @@
         private final int mCornerRadius;
         private final ColorStateList mTintList;
 
-        public ThemeCoverPage(Context context, String title, int accentColor, List<Drawable> icons,
+        public ThemeCoverPage(Activity activity, String title, int accentColor,
+                List<Drawable> icons,
                 Typeface headlineFont, int cornerRadius,
                 Drawable shapeDrawable,
                 List<Drawable> shapeAppIcons,
                 OnClickListener editClickListener,
                 int[] colorButtonIds, int[] colorTileIds, int[][] colorTileIconIds,
                 int[] shapeIconIds, OnLayoutChangeListener... wallpaperListeners) {
-            super(context, 0, 0, R.layout.preview_card_cover_content, accentColor);
-            mRes = context.getResources();
+            super(activity, 0, 0, R.layout.preview_card_cover_content,
+                    accentColor);
+            mRes = activity.getResources();
             mTitle = title;
             mHeadlineFont = headlineFont;
             mIcons = icons;
@@ -179,7 +180,6 @@
             }
 
             // Shape preview icons:
-
             for (int i = 0; i < 3 && i < mShapeAppIcons.size(); i++) {
                 ImageView iconView = card.findViewById(mShapeIconIds[i]);
                 iconView.setBackground(mShapeAppIcons.get(i));
diff --git a/src/com/android/customization/widget/PageIndicator.java b/src/com/android/customization/widget/PageIndicator.java
deleted file mode 100644
index dd636ad..0000000
--- a/src/com/android/customization/widget/PageIndicator.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Copyright (C) 2018 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.customization.widget;
-
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.content.res.TypedArray;
-import android.graphics.drawable.Animatable2;
-import android.graphics.drawable.AnimatedVectorDrawable;
-import android.graphics.drawable.Drawable;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-
-import com.android.wallpaper.R;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-
-/**
- * Page indicator widget, based on QS's page indicator:
- *
- * Based on QS PageIndicator
- * Path: frameworks/base/packages/SystemUI/src/com/android/systemui/qs/PageIndicator.java
- */
-public class PageIndicator extends ViewGroup {
-
-    private static final String TAG = "PageIndicator";
-    private static final boolean DEBUG = false;
-
-    // The size of a single dot in relation to the whole animation.
-    private static final float SINGLE_SCALE = .4f;
-
-    static final float MINOR_ALPHA = .42f;
-
-    private final ArrayList<Integer> mQueuedPositions = new ArrayList<>();
-
-    private final int mPageIndicatorWidth;
-    private final int mPageIndicatorHeight;
-    private final int mPageDotWidth;
-
-    private int mPosition = -1;
-    private boolean mAnimating;
-
-    private static Method sMethodForceAnimationOnUI = null;
-    private final Animatable2.AnimationCallback mAnimationCallback =
-            new Animatable2.AnimationCallback() {
-
-                @Override
-                public void onAnimationEnd(Drawable drawable) {
-                    super.onAnimationEnd(drawable);
-                    if (drawable instanceof AnimatedVectorDrawable) {
-                        ((AnimatedVectorDrawable) drawable).unregisterAnimationCallback(
-                                mAnimationCallback);
-                    }
-                    if (DEBUG) {
-                        Log.d(TAG, "onAnimationEnd - queued: " + mQueuedPositions.size());
-                    }
-                    mAnimating = false;
-                    if (mQueuedPositions.size() != 0) {
-                        setPosition(mQueuedPositions.remove(0));
-                    }
-                }
-            };
-
-
-    public PageIndicator(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        mPageIndicatorWidth =
-                (int) context.getResources().getDimension(R.dimen.preview_indicator_width);
-        mPageIndicatorHeight =
-                (int) context.getResources().getDimension(R.dimen.preview_indicator_height);
-        mPageDotWidth = (int) (mPageIndicatorWidth * SINGLE_SCALE);
-    }
-
-    public void setNumPages(int numPages) {
-        setVisibility(numPages > 1 ? View.VISIBLE : View.INVISIBLE);
-        if (mAnimating) {
-            Log.w(TAG, "setNumPages during animation");
-        }
-        while (numPages < getChildCount()) {
-            removeViewAt(getChildCount() - 1);
-        }
-        TypedArray array = getContext().obtainStyledAttributes(
-                new int[]{android.R.attr.colorControlActivated});
-        int color = array.getColor(0, 0);
-        array.recycle();
-        while (numPages > getChildCount()) {
-            ImageView v = new ImageView(getContext());
-            v.setImageResource(R.drawable.minor_a_b);
-            v.setImageTintList(ColorStateList.valueOf(color));
-            addView(v, new LayoutParams(mPageIndicatorWidth, mPageIndicatorHeight));
-        }
-        // Refresh state.
-        setIndex(mPosition >> 1);
-    }
-
-    public void setLocation(float location) {
-        int index = (int) location;
-        setContentDescription(getContext().getString(R.string.accessibility_preview_pager,
-                (index + 1), getChildCount()));
-        int position = index << 1 | ((location != index) ? 1 : 0);
-        if (DEBUG) {
-            Log.d(TAG, "setLocation " + location + " " + index + " " + position);
-        }
-
-        int lastPosition = mPosition;
-        if (mQueuedPositions.size() != 0) {
-            lastPosition = mQueuedPositions.get(mQueuedPositions.size() - 1);
-        }
-        if (DEBUG) {
-            Log.d(TAG, position + " " + lastPosition);
-        }
-        if (position == lastPosition) return;
-        if (mAnimating) {
-            if (DEBUG) {
-                Log.d(TAG, "Queueing transition to " + Integer.toHexString(position));
-            }
-            mQueuedPositions.add(position);
-            return;
-        }
-
-        setPosition(position);
-    }
-
-    private void setPosition(int position) {
-        if (mPosition >= 0 && Math.abs(mPosition - position) == 1) {
-            animate(mPosition, position);
-        } else {
-            if (DEBUG) {
-                Log.d(TAG, "Skipping animation " + mPosition
-                        + " " + position);
-            }
-            setIndex(position >> 1);
-        }
-        mPosition = position;
-    }
-
-    private void setIndex(int index) {
-        final int N = getChildCount();
-        for (int i = 0; i < N; i++) {
-            ImageView v = (ImageView) getChildAt(i);
-            // Clear out any animation positioning.
-            v.setTranslationX(0);
-            v.setImageResource(R.drawable.major_a_b);
-            v.setAlpha(getAlpha(i == index));
-        }
-    }
-
-    private void animate(int from, int to) {
-        if (DEBUG) {
-            Log.d(TAG, "Animating from " + Integer.toHexString(from) + " to "
-                    + Integer.toHexString(to));
-        }
-        int fromIndex = from >> 1;
-        int toIndex = to >> 1;
-
-        // Set the position of everything, then we will manually control the two views involved
-        // in the animation.
-        setIndex(fromIndex);
-
-        boolean fromTransition = (from & 1) != 0;
-        boolean isAState = fromTransition ? from > to : from < to;
-        int firstIndex = Math.min(fromIndex, toIndex);
-        int secondIndex = Math.max(fromIndex, toIndex);
-        if (secondIndex == firstIndex) {
-            secondIndex++;
-        }
-        ImageView first = (ImageView) getChildAt(firstIndex);
-        ImageView second = (ImageView) getChildAt(secondIndex);
-        if (first == null || second == null) {
-            // may happen during reInflation or other weird cases
-            return;
-        }
-        // Lay the two views on top of each other.
-        second.setTranslationX(first.getX() - second.getX());
-
-        playAnimation(first, getTransition(fromTransition, isAState, false));
-        first.setAlpha(getAlpha(false));
-
-        playAnimation(second, getTransition(fromTransition, isAState, true));
-        second.setAlpha(getAlpha(true));
-
-        mAnimating = true;
-    }
-
-    private float getAlpha(boolean isMajor) {
-        return isMajor ? 1 : MINOR_ALPHA;
-    }
-
-    private void playAnimation(ImageView imageView, int res) {
-        Drawable drawable = getContext().getDrawable(res);
-        if (!(drawable instanceof AnimatedVectorDrawable)) {
-            return;
-        }
-        final AnimatedVectorDrawable avd = (AnimatedVectorDrawable) drawable;
-        imageView.setImageDrawable(avd);
-        try {
-            forceAnimationOnUI(avd);
-        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
-            Log.e(TAG, "Catch an exception in playAnimation", e);
-        }
-        avd.registerAnimationCallback(mAnimationCallback);
-        avd.start();
-    }
-
-    private void forceAnimationOnUI(AnimatedVectorDrawable avd)
-            throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
-        if (sMethodForceAnimationOnUI == null) {
-            sMethodForceAnimationOnUI = AnimatedVectorDrawable.class.getMethod(
-                    "forceAnimationOnUI");
-        }
-        if (sMethodForceAnimationOnUI != null) {
-            sMethodForceAnimationOnUI.invoke(avd);
-        }
-    }
-
-    private int getTransition(boolean fromB, boolean isMajorAState, boolean isMajor) {
-        if (isMajor) {
-            if (fromB) {
-                if (isMajorAState) {
-                    return R.drawable.major_b_a_animation;
-                } else {
-                    return R.drawable.major_b_c_animation;
-                }
-            } else {
-                if (isMajorAState) {
-                    return R.drawable.major_a_b_animation;
-                } else {
-                    return R.drawable.major_c_b_animation;
-                }
-            }
-        } else {
-            if (fromB) {
-                if (isMajorAState) {
-                    return R.drawable.minor_b_c_animation;
-                } else {
-                    return R.drawable.minor_b_a_animation;
-                }
-            } else {
-                if (isMajorAState) {
-                    return R.drawable.minor_c_b_animation;
-                } else {
-                    return R.drawable.minor_a_b_animation;
-                }
-            }
-        }
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        final int N = getChildCount();
-        if (N == 0) {
-            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-            return;
-        }
-        final int widthChildSpec = MeasureSpec.makeMeasureSpec(mPageIndicatorWidth,
-                MeasureSpec.EXACTLY);
-        final int heightChildSpec = MeasureSpec.makeMeasureSpec(mPageIndicatorHeight,
-                MeasureSpec.EXACTLY);
-        for (int i = 0; i < N; i++) {
-            getChildAt(i).measure(widthChildSpec, heightChildSpec);
-        }
-        int width = (mPageIndicatorWidth - mPageDotWidth) * (N - 1) + mPageDotWidth;
-        setMeasuredDimension(width, mPageIndicatorHeight);
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int l, int t, int r, int b) {
-        final int N = getChildCount();
-        if (N == 0) {
-            return;
-        }
-        for (int i = 0; i < N; i++) {
-            int left = (mPageIndicatorWidth - mPageDotWidth) * i;
-            getChildAt(i).layout(left, 0, mPageIndicatorWidth + left, mPageIndicatorHeight);
-        }
-    }
-}
diff --git a/src/com/android/customization/widget/PreviewPager.java b/src/com/android/customization/widget/PreviewPager.java
deleted file mode 100644
index 73a5554..0000000
--- a/src/com/android/customization/widget/PreviewPager.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright (C) 2018 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.customization.widget;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.database.DataSetObserver;
-import android.util.AttributeSet;
-import android.util.DisplayMetrics;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.LinearLayout;
-
-import androidx.annotation.Nullable;
-import androidx.core.text.TextUtilsCompat;
-import androidx.core.view.ViewCompat;
-import androidx.viewpager.widget.PagerAdapter;
-import androidx.viewpager.widget.ViewPager;
-import androidx.viewpager.widget.ViewPager.OnPageChangeListener;
-
-import com.android.wallpaper.R;
-
-import java.util.Locale;
-
-/**
- * A Widget consisting of a ViewPager linked to a PageIndicator and previous/next arrows that can be
- * used to page over that ViewPager.
- * To use it, set a {@link PagerAdapter} using {@link #setAdapter(PagerAdapter)}, and optionally use
- * a {@link #setOnPageChangeListener(OnPageChangeListener)} to listen for page changes.
- */
-public class PreviewPager extends LinearLayout {
-
-    private static final int STYLE_PEEKING = 0;
-    private static final int STYLE_ASPECT_RATIO = 1;
-
-    private final ViewPager mViewPager;
-    private final PageIndicator mPageIndicator;
-    private final View mPreviousArrow;
-    private final View mNextArrow;
-    private final ViewPager.OnPageChangeListener mPageListener;
-    private int mPageStyle;
-
-    private PagerAdapter mAdapter;
-    private ViewPager.OnPageChangeListener mExternalPageListener;
-    private float mScreenAspectRatio;
-
-    public PreviewPager(Context context) {
-        this(context, null);
-    }
-
-    public PreviewPager(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public PreviewPager(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-        LayoutInflater.from(context).inflate(R.layout.preview_pager, this);
-        Resources res = context.getResources();
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                R.styleable.PreviewPager, defStyleAttr, 0);
-
-        mPageStyle = a.getInteger(R.styleable.PreviewPager_card_style, STYLE_PEEKING);
-
-        a.recycle();
-
-        mViewPager = findViewById(R.id.preview_viewpager);
-        mViewPager.setPageMargin(res.getDimensionPixelOffset(R.dimen.preview_page_gap));
-        mViewPager.setClipToPadding(false);
-        if (mPageStyle == STYLE_PEEKING) {
-            int screenWidth = mViewPager.getResources().getDisplayMetrics().widthPixels;
-            int hMargin = res.getDimensionPixelOffset(R.dimen.preview_page_horizontal_margin);
-            hMargin = Math.max(hMargin, screenWidth/8);
-            mViewPager.setPadding(
-                    hMargin,
-                    res.getDimensionPixelOffset(R.dimen.preview_page_top_margin),
-                    hMargin,
-                    res.getDimensionPixelOffset(R.dimen.preview_page_bottom_margin));
-        } else if (mPageStyle == STYLE_ASPECT_RATIO) {
-            DisplayMetrics dm = res.getDisplayMetrics();
-            mScreenAspectRatio = dm.heightPixels > dm.widthPixels
-                    ? (float) dm.heightPixels / dm.widthPixels
-                    : (float) dm.widthPixels / dm.heightPixels;
-            mViewPager.setPadding(
-                    0,
-                    res.getDimensionPixelOffset(R.dimen.preview_page_top_margin),
-                    0,
-                    res.getDimensionPixelOffset(R.dimen.preview_page_bottom_margin));
-        }
-        mPageIndicator = findViewById(R.id.page_indicator);
-        mPreviousArrow = findViewById(R.id.arrow_previous);
-        mPreviousArrow.setOnClickListener(v -> {
-            final int previousPos = mViewPager.getCurrentItem() - 1;
-            mViewPager.setCurrentItem(previousPos, true);
-        });
-        mNextArrow = findViewById(R.id.arrow_next);
-        mNextArrow.setOnClickListener(v -> {
-            final int NextPos = mViewPager.getCurrentItem() + 1;
-            mViewPager.setCurrentItem(NextPos, true);
-        });
-        mPageListener = createPageListener();
-        mViewPager.addOnPageChangeListener(mPageListener);
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        if (mPageStyle == STYLE_ASPECT_RATIO) {
-            int availableWidth = MeasureSpec.getSize(widthMeasureSpec);
-            int availableHeight = MeasureSpec.getSize(heightMeasureSpec);
-            int indicatorHeight = mPageIndicator.getVisibility() == VISIBLE
-                    ? ((View) mPageIndicator.getParent()).getLayoutParams().height
-                    : 0;
-            int pagerHeight = availableHeight - indicatorHeight;
-            if (availableWidth > 0) {
-                int absoluteCardWidth = (int) ((pagerHeight - mViewPager.getPaddingBottom()
-                        - mViewPager.getPaddingTop())/ mScreenAspectRatio);
-                int hPadding = (availableWidth / 2) - (absoluteCardWidth / 2);
-                mViewPager.setPaddingRelative(
-                        hPadding,
-                        mViewPager.getPaddingTop(),
-                        hPadding,
-                        mViewPager.getPaddingBottom());
-            }
-        }
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-    }
-
-    public void forceCardWidth(int widthPixels) {
-        mViewPager.addOnLayoutChangeListener(new OnLayoutChangeListener() {
-            @Override
-            public void onLayoutChange(View v, int left, int top, int right, int bottom,
-                    int oldLeft, int oldTop, int oldRight, int oldBottom) {
-                int hPadding = (mViewPager.getWidth() - widthPixels) / 2;
-                mViewPager.setPadding(hPadding, mViewPager.getPaddingTop(),
-                        hPadding, mViewPager.getPaddingBottom());
-                mViewPager.removeOnLayoutChangeListener(this);
-            }
-        });
-        mViewPager.invalidate();
-    }
-
-    /**
-     * Call this method to set the {@link PagerAdapter} backing the {@link ViewPager} in this
-     * widget.
-     */
-    public void setAdapter(PagerAdapter adapter) {
-        int initialPage = 0;
-        if (mViewPager.getAdapter() != null) {
-            initialPage = isRtl() ? mAdapter.getCount() - 1 - mViewPager.getCurrentItem()
-                    : mViewPager.getCurrentItem();
-        }
-        mAdapter = adapter;
-        mViewPager.setAdapter(adapter);
-        mViewPager.setCurrentItem(isRtl() ? mAdapter.getCount() - 1 - initialPage : initialPage);
-        mAdapter.registerDataSetObserver(new DataSetObserver() {
-            @Override
-            public void onChanged() {
-                initIndicator();
-            }
-        });
-        initIndicator();
-        updateIndicator(mViewPager.getCurrentItem());
-    }
-
-    private boolean isRtl() {
-        if (ViewCompat.isLayoutDirectionResolved(mViewPager)) {
-            return ViewCompat.getLayoutDirection(mViewPager) == ViewCompat.LAYOUT_DIRECTION_RTL;
-        }
-        return TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault())
-                == ViewCompat.LAYOUT_DIRECTION_RTL;
-    }
-
-    /**
-     * Set a {@link OnPageChangeListener} to be notified when the ViewPager's page state changes
-     */
-    public void setOnPageChangeListener(@Nullable ViewPager.OnPageChangeListener listener) {
-        mExternalPageListener = listener;
-    }
-
-    private void initIndicator() {
-        mPageIndicator.setNumPages(mAdapter.getCount());
-        mPageIndicator.setLocation(mViewPager.getCurrentItem());
-    }
-
-    private ViewPager.OnPageChangeListener createPageListener() {
-        return new ViewPager.OnPageChangeListener() {
-             @Override
-             public void onPageScrolled(
-                     int position, float positionOffset, int positionOffsetPixels) {
-                 // For certain sizes, positionOffset never makes it to 1, so round it as we don't
-                 // need that much precision
-                 float location = (float) Math.round((position + positionOffset) * 100) / 100;
-                 mPageIndicator.setLocation(location);
-                 if (mExternalPageListener != null) {
-                     mExternalPageListener.onPageScrolled(position, positionOffset,
-                             positionOffsetPixels);
-                 }
-             }
-
-             @Override
-             public void onPageSelected(int position) {
-                 int adapterCount = mAdapter.getCount();
-                 if (position < 0 || position >= adapterCount) {
-                     return;
-                 }
-
-                 updateIndicator(position);
-                 if (mExternalPageListener != null) {
-                     mExternalPageListener.onPageSelected(position);
-                 }
-             }
-
-             @Override
-             public void onPageScrollStateChanged(int state) {
-                 if (mExternalPageListener != null) {
-                     mExternalPageListener.onPageScrollStateChanged(state);
-                 }
-             }
-        };
-    }
-
-    private void updateIndicator(int position) {
-        int adapterCount = mAdapter.getCount();
-        if (adapterCount > 1) {
-            mPreviousArrow.setVisibility(position != 0 ? View.VISIBLE : View.GONE);
-            mNextArrow.setVisibility(position != (adapterCount - 1) ? View.VISIBLE : View.GONE);
-        } else {
-            mPageIndicator.setVisibility(View.GONE);
-            mPreviousArrow.setVisibility(View.GONE);
-            mNextArrow.setVisibility(View.GONE);
-        }
-    }
-}
diff --git a/tests/src/com/android/customization/picker/CustomizationPickerActivityTest.java b/tests/src/com/android/customization/picker/CustomizationPickerActivityTest.java
new file mode 100644
index 0000000..dd1581a
--- /dev/null
+++ b/tests/src/com/android/customization/picker/CustomizationPickerActivityTest.java
@@ -0,0 +1,160 @@
+package com.android.customization.picker;
+
+import static android.content.Intent.ACTION_SET_WALLPAPER;
+
+import static androidx.test.espresso.Espresso.onView;
+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.matcher.IntentMatchers.filterEquals;
+import static androidx.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed;
+import static androidx.test.espresso.matcher.ViewMatchers.isSelected;
+import static androidx.test.espresso.matcher.ViewMatchers.withId;
+
+import static com.android.customization.picker.CustomizationPickerActivity.WALLPAPER_FLAVOR_EXTRA;
+import static com.android.customization.picker.CustomizationPickerActivity.WALLPAPER_FOCUS;
+import static com.android.customization.picker.CustomizationPickerActivity.WALLPAPER_ONLY;
+
+import static org.junit.Assert.assertTrue;
+
+import android.content.Intent;
+import android.text.TextUtils;
+
+import androidx.fragment.app.Fragment;
+import androidx.test.espresso.intent.Intents;
+import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner;
+import androidx.test.rule.ActivityTestRule;
+
+import com.android.customization.picker.theme.ThemeFragment;
+import com.android.customization.testing.TestCustomizationInjector;
+import com.android.customization.testing.TestThemeManager;
+import com.android.wallpaper.R;
+import com.android.wallpaper.module.InjectorProvider;
+import com.android.wallpaper.picker.CategoryFragment;
+import com.android.wallpaper.picker.TopLevelPickerActivity;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Tests for {@link CustomizationPickerActivity}.
+ */
+@RunWith(AndroidJUnit4ClassRunner.class)
+public class CustomizationPickerActivityTest {
+
+    @Rule
+    public ActivityTestRule<CustomizationPickerActivity> mActivityRule =
+            new ActivityTestRule<>(CustomizationPickerActivity.class, false, false);
+
+    @Before
+    public void setUp() {
+        Intents.init();
+    }
+
+    @After
+    public void tearDown() {
+        mActivityRule.finishActivity();
+        Intents.release();
+    }
+
+    @Test
+    public void launchActivity_doesNotSupportCustomization_launchesTopLevelPickerActivity() {
+        TestThemeManager.setAvailable(false);
+
+        launchActivity();
+
+        Intents.intended(filterEquals(new Intent(mActivityRule.getActivity(),
+                TopLevelPickerActivity.class)));
+    }
+
+    // ----------------------------------------------------------------------
+    // Tests for customization supports.
+    // ----------------------------------------------------------------------
+
+    @Test
+    public void launchActivity_themeManagerIsAvailable_NavBarShowsStyleAndWallpaperItem() {
+        TestThemeManager.setAvailable(true);
+
+        launchActivity();
+
+        onView(withId(R.id.nav_theme)).check(matches(isCompletelyDisplayed()));
+        onView(withId(R.id.nav_wallpaper)).check(matches(isCompletelyDisplayed()));
+        onView(withId(R.id.nav_clock)).check(doesNotExist());
+        onView(withId(R.id.nav_grid)).check(doesNotExist());
+    }
+
+    @Test
+    public void launchActivity_navigateToTheStyleTabByDefault() {
+        TestThemeManager.setAvailable(true);
+
+        launchActivity();
+
+        onView(withId(R.id.nav_theme)).check(matches(isSelected()));
+        assertTrue(getCurrentShowingFragment() instanceof ThemeFragment);
+    }
+
+    @Test
+    public void launchActivity_withExtraWallpaperOnly_launchesTopLevelPickerActivity() {
+        TestThemeManager.setAvailable(true);
+
+        launchActivityWithFlavorExtra(WALLPAPER_ONLY);
+
+        // While receiving WALLPAPER_ONLY extra, it should launch TopLevelPickerActivity whatever it
+        // supports customization.
+        Intents.intended(filterEquals(new Intent(mActivityRule.getActivity(),
+                TopLevelPickerActivity.class)));
+    }
+
+    @Test
+    public void clickStyleButton_showsThemeFragment() {
+        TestThemeManager.setAvailable(true);
+        launchActivity();
+
+        onView(withId(R.id.nav_theme)).perform(click());
+
+        onView(withId(R.id.nav_theme)).check(matches(isSelected()));
+        assertTrue(getCurrentShowingFragment() instanceof ThemeFragment);
+    }
+
+    @Test
+    public void clickWallpaperButton_showsCategoryFragment() {
+        TestThemeManager.setAvailable(true);
+        launchActivity();
+
+        onView(withId(R.id.nav_wallpaper)).perform(click());
+
+        onView(withId(R.id.nav_wallpaper)).check(matches(isSelected()));
+        assertTrue(getCurrentShowingFragment() instanceof CategoryFragment);
+    }
+
+    @Test
+    public void launchActivity_withExtraWallpaperFocus_navigateToTheWallpaperTab() {
+        TestThemeManager.setAvailable(true);
+
+        launchActivityWithFlavorExtra(WALLPAPER_FOCUS);
+
+        onView(withId(R.id.nav_wallpaper)).check(matches(isSelected()));
+        assertTrue(getCurrentShowingFragment() instanceof CategoryFragment);
+    }
+
+    private void launchActivity() {
+        launchActivityWithFlavorExtra("");
+    }
+
+    private void launchActivityWithFlavorExtra(String extra) {
+        InjectorProvider.setInjector(new TestCustomizationInjector());
+        Intent intent = new Intent(ACTION_SET_WALLPAPER);
+        if (!TextUtils.isEmpty(extra)) {
+            intent.putExtra(WALLPAPER_FLAVOR_EXTRA, extra);
+        }
+        mActivityRule.launchActivity(intent);
+    }
+
+    private Fragment getCurrentShowingFragment() {
+        return mActivityRule.getActivity().getSupportFragmentManager()
+                .findFragmentById(R.id.fragment_container);
+    }
+}
diff --git a/tests/src/com/android/customization/testing/TestCustomizationInjector.java b/tests/src/com/android/customization/testing/TestCustomizationInjector.java
new file mode 100644
index 0000000..dbbdb74
--- /dev/null
+++ b/tests/src/com/android/customization/testing/TestCustomizationInjector.java
@@ -0,0 +1,71 @@
+package com.android.customization.testing;
+
+import android.content.Context;
+
+import androidx.fragment.app.FragmentActivity;
+
+import com.android.customization.model.theme.OverlayManagerCompat;
+import com.android.customization.model.theme.ThemeBundleProvider;
+import com.android.customization.model.theme.ThemeManager;
+import com.android.customization.module.CustomizationInjector;
+import com.android.customization.module.CustomizationPreferences;
+import com.android.customization.module.ThemesUserEventLogger;
+import com.android.wallpaper.module.DrawableLayerResolver;
+import com.android.wallpaper.module.PackageStatusNotifier;
+import com.android.wallpaper.module.UserEventLogger;
+import com.android.wallpaper.testing.TestInjector;
+
+/**
+ * Test implementation of the dependency injector.
+ */
+public class TestCustomizationInjector extends TestInjector implements CustomizationInjector {
+    private CustomizationPreferences mCustomizationPreferences;
+    private ThemeManager mThemeManager;
+    private PackageStatusNotifier mPackageStatusNotifier;
+    private DrawableLayerResolver mDrawableLayerResolver;
+    private UserEventLogger mUserEventLogger;
+
+    @Override
+    public CustomizationPreferences getCustomizationPreferences(Context context) {
+        if (mCustomizationPreferences == null) {
+            mCustomizationPreferences = new TestDefaultCustomizationPreferences(context);
+        }
+        return mCustomizationPreferences;
+    }
+
+    @Override
+    public ThemeManager getThemeManager(
+            ThemeBundleProvider provider,
+            FragmentActivity activity,
+            OverlayManagerCompat overlayManagerCompat,
+            ThemesUserEventLogger logger) {
+        if (mThemeManager == null) {
+            mThemeManager = new TestThemeManager(provider, activity, overlayManagerCompat, logger);
+        }
+        return mThemeManager;
+    }
+
+    @Override
+    public PackageStatusNotifier getPackageStatusNotifier(Context context) {
+        if (mPackageStatusNotifier == null) {
+            mPackageStatusNotifier =  new TestPackageStatusNotifier();
+        }
+        return mPackageStatusNotifier;
+    }
+
+    @Override
+    public DrawableLayerResolver getDrawableLayerResolver() {
+        if (mDrawableLayerResolver == null) {
+            mDrawableLayerResolver = new TestDrawableLayerResolver();
+        }
+        return mDrawableLayerResolver;
+    }
+
+    @Override
+    public UserEventLogger getUserEventLogger(Context unused) {
+        if (mUserEventLogger == null) {
+            mUserEventLogger = new TestThemesUserEventLogger();
+        }
+        return mUserEventLogger;
+    }
+}
diff --git a/tests/src/com/android/customization/testing/TestDefaultCustomizationPreferences.java b/tests/src/com/android/customization/testing/TestDefaultCustomizationPreferences.java
new file mode 100644
index 0000000..bcf5a5f
--- /dev/null
+++ b/tests/src/com/android/customization/testing/TestDefaultCustomizationPreferences.java
@@ -0,0 +1,41 @@
+package com.android.customization.testing;
+
+import android.content.Context;
+
+import com.android.customization.module.DefaultCustomizationPreferences;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Test implementation of {@link DefaultCustomizationPreferences}.
+ */
+public class TestDefaultCustomizationPreferences extends DefaultCustomizationPreferences {
+
+    private String mCustomThemes;
+    private final Set<String> mTabVisited = new HashSet<>();
+
+    public TestDefaultCustomizationPreferences(Context context) {
+        super(context);
+    }
+
+    @Override
+    public String getSerializedCustomThemes() {
+        return mCustomThemes;
+    }
+
+    @Override
+    public void storeCustomThemes(String serializedCustomThemes) {
+        mCustomThemes = serializedCustomThemes;
+    }
+
+    @Override
+    public boolean getTabVisited(String id) {
+        return mTabVisited.contains(id);
+    }
+
+    @Override
+    public void setTabVisited(String id) {
+        mTabVisited.add(id);
+    }
+}
diff --git a/tests/src/com/android/customization/testing/TestDrawableLayerResolver.java b/tests/src/com/android/customization/testing/TestDrawableLayerResolver.java
new file mode 100644
index 0000000..e507221
--- /dev/null
+++ b/tests/src/com/android/customization/testing/TestDrawableLayerResolver.java
@@ -0,0 +1,16 @@
+package com.android.customization.testing;
+
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.LayerDrawable;
+
+import com.android.wallpaper.module.DrawableLayerResolver;
+
+/**
+ * Test implementation of {@link DrawableLayerResolver}.
+ */
+public class TestDrawableLayerResolver implements DrawableLayerResolver {
+    @Override
+    public Drawable resolveLayer(LayerDrawable layerDrawable) {
+        return layerDrawable.getDrawable(0);
+    }
+}
diff --git a/tests/src/com/android/customization/testing/TestPackageStatusNotifier.java b/tests/src/com/android/customization/testing/TestPackageStatusNotifier.java
new file mode 100644
index 0000000..1e6a1a2
--- /dev/null
+++ b/tests/src/com/android/customization/testing/TestPackageStatusNotifier.java
@@ -0,0 +1,18 @@
+package com.android.customization.testing;
+
+import com.android.wallpaper.module.PackageStatusNotifier;
+
+/**
+ * Test implementation of {@link PackageStatusNotifier}.
+ */
+public class TestPackageStatusNotifier implements PackageStatusNotifier {
+    @Override
+    public void addListener(Listener listener, String action) {
+        // Do nothing
+    }
+
+    @Override
+    public void removeListener(Listener listener) {
+        // Do nothing
+    }
+}
diff --git a/tests/src/com/android/customization/testing/TestThemeManager.java b/tests/src/com/android/customization/testing/TestThemeManager.java
new file mode 100644
index 0000000..c4d25fb
--- /dev/null
+++ b/tests/src/com/android/customization/testing/TestThemeManager.java
@@ -0,0 +1,33 @@
+package com.android.customization.testing;
+
+import androidx.fragment.app.FragmentActivity;
+
+import com.android.customization.model.theme.OverlayManagerCompat;
+import com.android.customization.model.theme.ThemeBundleProvider;
+import com.android.customization.model.theme.ThemeManager;
+import com.android.customization.module.ThemesUserEventLogger;
+
+/**
+ * Test implementation of {@link ThemeManager}.
+ */
+public class TestThemeManager extends ThemeManager {
+
+    private static boolean sIsAvailable;
+
+    public TestThemeManager(
+            ThemeBundleProvider provider,
+            FragmentActivity activity,
+            OverlayManagerCompat overlayManagerCompat,
+            ThemesUserEventLogger logger) {
+        super(provider, activity, overlayManagerCompat, logger);
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return sIsAvailable;
+    }
+
+    public static void setAvailable(boolean available) {
+        sIsAvailable = available;
+    }
+}
diff --git a/tests/src/com/android/customization/testing/TestThemesUserEventLogger.java b/tests/src/com/android/customization/testing/TestThemesUserEventLogger.java
new file mode 100644
index 0000000..3600192
--- /dev/null
+++ b/tests/src/com/android/customization/testing/TestThemesUserEventLogger.java
@@ -0,0 +1,43 @@
+package com.android.customization.testing;
+
+import com.android.customization.model.clock.Clockface;
+import com.android.customization.model.grid.GridOption;
+import com.android.customization.model.theme.ThemeBundle;
+import com.android.customization.module.ThemesUserEventLogger;
+import com.android.wallpaper.testing.TestUserEventLogger;
+
+/**
+ * Test implementation of {@link ThemesUserEventLogger}.
+ */
+public class TestThemesUserEventLogger extends TestUserEventLogger
+        implements ThemesUserEventLogger {
+    @Override
+    public void logThemeSelected(ThemeBundle theme, boolean isCustomTheme) {
+        // Do nothing.
+    }
+
+    @Override
+    public void logThemeApplied(ThemeBundle theme, boolean isCustomTheme) {
+        // Do nothing.
+    }
+
+    @Override
+    public void logClockSelected(Clockface clock) {
+        // Do nothing.
+    }
+
+    @Override
+    public void logClockApplied(Clockface clock) {
+        // Do nothing.
+    }
+
+    @Override
+    public void logGridSelected(GridOption grid) {
+        // Do nothing.
+    }
+
+    @Override
+    public void logGridApplied(GridOption grid) {
+        // Do nothing.
+    }
+}