Merge "Revert "Use Mockito 4.6.1 API"" into tm-qpr-dev
diff --git a/Android.bp b/Android.bp
index 64fc327..6d9ff8f 100644
--- a/Android.bp
+++ b/Android.bp
@@ -28,6 +28,14 @@
 }
 
 filegroup {
+    name: "ThemePicker_src_overrides",
+    srcs: [
+        "src_override/**/*.java",
+        "src_override/**/*.kt",
+    ],
+}
+
+filegroup {
     name: "ThemePicker_Manifest",
     srcs: [
         "AndroidManifest.xml",
@@ -46,11 +54,20 @@
         + "$(location soong_zip) -o $(out) -C $$RES_DIR -D $$RES_DIR"
 }
 
-//
-// Build app code.
-//
-android_app {
-    name: "ThemePicker",
+genrule {
+    name: "ThemePicker_res_overrides",
+    tools: ["soong_zip"],
+    srcs: [
+        "res_override/**/*",
+    ],
+    out: ["ThemePicker_res_overrides.zip"],
+    cmd: "INPUTS=($(in)) && "
+        + "RES_DIR=$$(dirname $$(dirname $${INPUTS[0]})) && "
+        + "$(location soong_zip) -o $(out) -C $$RES_DIR -D $$RES_DIR"
+}
+
+java_defaults {
+    name: "ThemePicker_defaults",
 
     static_libs: [
         "guava",
@@ -73,17 +90,12 @@
     srcs: [
         ":WallpaperPicker2_srcs",
         ":ThemePicker_srcs",
-        "src_override/**/*.java",
-        "src_override/**/*.kt",
-    ],
-
-    resource_dirs: [
-        "res_override",
+        ":ThemePicker_src_overrides",
     ],
 
     use_embedded_native_libs: true,
 
-    resource_zips: [":WallpaperPicker2_res", ":ThemePicker_res"],
+    resource_zips: [":WallpaperPicker2_res", ":ThemePicker_res", ":ThemePicker_res_overrides"],
 
     optimize: {
         enabled: false,
@@ -93,6 +105,15 @@
 
     privileged: true,
     system_ext_specific: true,
+}
+
+//
+// Build app code.
+//
+android_app {
+    name: "ThemePicker",
+    defaults: ["ThemePicker_defaults"],
+
     platform_apis: true,
     manifest: "AndroidManifest.xml",
     additional_manifests: [":WallpaperPicker2_Manifest"],
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 4282a08..4e71bcc 100755
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -10,7 +10,7 @@
     <uses-permission android:name="android.permission.SET_WALLPAPER_COMPONENT" />
     <uses-permission android:name="android.permission.READ_DEVICE_CONFIG" />
     <uses-permission android:name="android.permission.MODIFY_DAY_NIGHT_MODE" />
-    <uses-permission android:name="android.permission.ACCESS_KEYGUARD_QUICK_AFFORDANCES" />
+    <uses-permission android:name="android.permission.CUSTOMIZE_SYSTEM_UI" />
 
     <queries>
         <!-- Specific intents Wallpaper picker query for -->
diff --git a/res/drawable/button_background.xml b/res/drawable/button_background.xml
new file mode 100644
index 0000000..24c7253
--- /dev/null
+++ b/res/drawable/button_background.xml
@@ -0,0 +1,20 @@
+<!--
+     Copyright (C) 2021 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.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:radius="50dp" />
+    <solid android:color="@color/color_accent_primary" />
+</shape>
diff --git a/res/layout/keyguard_quick_affordance_enablement_dialog.xml b/res/layout/keyguard_quick_affordance_enablement_dialog.xml
new file mode 100644
index 0000000..d6ba105
--- /dev/null
+++ b/res/layout/keyguard_quick_affordance_enablement_dialog.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:background="@drawable/keyguard_quick_affordance_picker_background"
+    android:orientation="vertical"
+    android:padding="24dp">
+
+    <ImageView
+        android:id="@+id/icon"
+        android:layout_width="32dp"
+        android:layout_height="32dp"
+        android:tint="@color/color_accent_primary"
+        android:layout_gravity="center_horizontal"
+        android:layout_marginBottom="16dp" />
+
+    <TextView
+        android:id="@+id/title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:gravity="center"
+        android:textAppearance="@style/TextAppearance.MaterialComponents.Headline4"
+        android:layout_gravity="center_horizontal"
+        android:layout_marginBottom="16dp" />
+
+    <TextView
+        android:id="@+id/message"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
+        android:layout_gravity="center_horizontal"
+        android:layout_marginBottom="38dp" />
+
+    <Button
+        android:id="@+id/button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        style="@style/ActionPrimaryButton"
+        android:background="@drawable/button_background"
+        android:layout_gravity="end" />
+
+</LinearLayout>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 5144dc7..09414f7 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Linkerknoppie"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Regterknoppie"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Geen"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Bykomende opstelling word benodig"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Maak <xliff:g id="APPNAME">%1$s</xliff:g> oop"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Om die <xliff:g id="APPNAME">%1$s</xliff:g>-app as ’n kortpad by te voeg, moet jy seker maak dat"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Klaar"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index e7e5e12..eb7dc2f 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"የግራ አዝራር"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"የቀኝ አዝራር"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"ምንም"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"ተጨማሪ ውቅረት ያስፈልጋል"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> ይክፈቱ"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"የ<xliff:g id="APPNAME">%1$s</xliff:g> መተግበሪያን እንደ አቋራጭ ለማከል የሚከተሉትን ማድረግዎን እርግጠኛ ይሁኑ"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"ተከናውኗል"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index c7750d2..f3acb4a 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"الزر الأيسر"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"الزر الأيمن"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"بدون أزرار"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"يجب ضبط إعدادات إضافية"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"فتح <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"لإضافة تطبيق \"<xliff:g id="APPNAME">%1$s</xliff:g>\" كاختصار، تأكَّد من"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"تم"</string>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 17cb28d..1c0c031 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"বাওঁফালৰ বুটাম"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"সোঁফালৰ বুটাম"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"নাই"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"অতিৰিক্ত ছেটআপৰ আৱশ্যক"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> খোলক"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> এপ্‌টোক এটা শ্বৰ্টকাট হিচাপে যোগ দিবলৈ, এইকেইটা কথা নিশ্চিত কৰক"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"কৰা হ’ল"</string>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 791c879..5a5bb5d 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Sol düymə"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Sağ düymə"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Heç bir"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Əlavə ayarlama tələb olunur"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> linkini açın"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> tətbiqini qısayol kimi əlavə etmək üçün bunları təmin edin:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Hazırdır"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index b7316d1..1cd8b29 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Levo dugme"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Desno dugme"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ništa"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Potrebno je dodatno podešavanje"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Otvorite: <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Da biste dodali aplikaciju <xliff:g id="APPNAME">%1$s</xliff:g> kao prečicu, uverite se"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Gotovo"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index d223bfb..088752f 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Левая кнопка"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Правая кнопка"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Няма"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Патрабуецца дадатковае наладжванне"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Адкрыць \"<xliff:g id="APPNAME">%1$s</xliff:g>\""</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Каб дадаць ярлык для праграмы \"<xliff:g id="APPNAME">%1$s</xliff:g>\", патрабуюцца наступныя ўмовы:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Гатова"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 1c6dbac..8b355ea 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Ляв бутон"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Десен бутон"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Без"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Необходимо е допълнително настройване"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Отваряне на <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"За да добавите пряк път към приложението <xliff:g id="APPNAME">%1$s</xliff:g>, трябва да се уверите в следното:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Готово"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 0059504..1513cc3 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"বাঁদিকের বোতাম"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"ডানদিকের বোতাম"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"কোনওটিই নয়"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"অতিরিক্ত সেট-আপ করতে হবে"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> খুলুন"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"শর্টকাট হিসেবে <xliff:g id="APPNAME">%1$s</xliff:g> অ্যাপ যোগ করতে, এইসব বিষয় নিশ্চিত করতে হবে"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"হয়ে গেছে"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index d1dae4e..ff4ff2f 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Lijevo dugme"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Desno dugme"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ništa"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Potrebno je dodatno postavljanje"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Otvori aplikaciju <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Da dodate aplikaciju <xliff:g id="APPNAME">%1$s</xliff:g> kao prečicu, pobrinite se za sljedeće"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Gotovo"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 81d1807..b6d9632 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Botó esquerre"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Botó dret"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Cap"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Configuració addicional necessària"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Obre <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Per afegir l\'aplicació <xliff:g id="APPNAME">%1$s</xliff:g> com a drecera, assegura\'t que:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Fet"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 824ef8b..299e5b0 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Levé tlačítko"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Pravé tlačítko"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Žádné"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Je potřeba další nastavení"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Otevřít aplikaci <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Podmínky pro to, aby aplikaci <xliff:g id="APPNAME">%1$s</xliff:g> bylo možné přidat jako zkratku:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Hotovo"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 32ddf84..d7e007b 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Venstre knap"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Højre knap"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ingen"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Der kræves yderligere konfiguration"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Åbn <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Før du tilføjer <xliff:g id="APPNAME">%1$s</xliff:g>-appen som en genvej, skal du sørge for følgende:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Udfør"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index b2a4b45..1465ad8 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Linke Taste"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Rechte Taste"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Keine"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Zusätzliche Einrichtung erforderlich"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> öffnen"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Wenn du die <xliff:g id="APPNAME">%1$s</xliff:g> App als eine Verknüpfung hinzufügen möchtest, müssen folgende Bedingungen erfüllt sein"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Fertig"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index ae67feb..775b9f5 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Κουμπί αριστερά"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Κουμπί δεξιά"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Καμία"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Χρειάζεται πρόσθετη ρύθμιση"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Άνοιγμα <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Για να προσθέσετε την εφαρμογή <xliff:g id="APPNAME">%1$s</xliff:g> ως συντόμευση, βεβαιωθείτε ότι"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Τέλος"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index d04059a..d962d7a 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Left button"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Right button"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"None"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Additional setup needed"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Open <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"To add the <xliff:g id="APPNAME">%1$s</xliff:g> app as a shortcut, make sure"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Done"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 9f43df3..5025853 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -97,7 +97,7 @@
     <skip />
     <!-- no translation found for keyguard_affordance_none (1751643933430782312) -->
     <skip />
-    <!-- no translation found for keyguard_affordance_enablement_dialog_title (307756993596011884) -->
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
     <skip />
     <!-- no translation found for keyguard_affordance_enablement_dialog_action_template (8117011931337357438) -->
     <skip />
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index d04059a..d962d7a 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Left button"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Right button"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"None"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Additional setup needed"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Open <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"To add the <xliff:g id="APPNAME">%1$s</xliff:g> app as a shortcut, make sure"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Done"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index d04059a..d962d7a 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Left button"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Right button"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"None"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Additional setup needed"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Open <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"To add the <xliff:g id="APPNAME">%1$s</xliff:g> app as a shortcut, make sure"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Done"</string>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 24e213d..51643a9 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‎‏‏‏‎‏‎‎‎‎‎‎‏‏‎‏‎‎‎‎‎‎‏‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎Left button‎‏‎‎‏‎"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‎‏‎‏‎‎‏‏‏‏‎‎‏‏‎‏‏‎‏‏‎‎‎‏‎‏‎‏‎‎‎‏‏‏‏‏‏‎Right button‎‏‎‎‏‎"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‎‎‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‎‎None‎‏‎‎‏‎"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‏‎‎‎‎‏‏‎‏‏‏‎‏‎‏‏‎‏‎‏‎‏‏‎‏‏‎‎‎Additional setup needed‎‏‎‎‏‎"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‎‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‎‎‏‎‎‎‎‏‎‎‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‎‏‏‏‏‏‏‎‎Open ‎‏‎‎‏‏‎<xliff:g id="APPNAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‏‎‎‎‎‏‏‏‏‎‎‎‎‏‎‎‏‎‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‏‎‎To add the ‎‏‎‎‏‏‎<xliff:g id="APPNAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ app as a shortcut, make sure‎‏‎‎‏‎"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‎‎‏‏‏‎‎‏‏‎‏‏‎‎‎Done‎‏‎‎‏‎"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index d465416..20a96c2 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Botón izquierdo"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Botón derecho"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ninguno"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Se necesitan parámetros de configuración adicionales"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Abrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Para agregar la app <xliff:g id="APPNAME">%1$s</xliff:g> como acceso directo, asegúrate que se cumplan los siguientes requisitos:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Listo"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 4cfe671..3258bde 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Botón izquierdo"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Botón derecho"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ninguno"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Se necesitan ajustes adicionales"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Abrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Para añadir la aplicación <xliff:g id="APPNAME">%1$s</xliff:g> como acceso directo:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Hecho"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index cb8569e..e452b41 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Vasak nupp"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Parem nupp"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Puudub"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Vajalik on täiendav seadistus"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Ava <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Rakenduse <xliff:g id="APPNAME">%1$s</xliff:g> otsetee lisamiseks veenduge järgmises."</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Valmis"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 163f56a..838df31 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Ezkerreko botoia"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Eskuineko botoia"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Bat ere ez"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Beste ezarpen batzuk konfiguratu behar dira"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Ireki <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> aplikazioa lasterbide gisa gehitzeko, ziurtatu hauek betetzen direla:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Eginda"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 341f7cc..b75fc07 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"دکمه چپ"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"دکمه راست"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"هیچ‌کدام"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"راه‌اندازی اضافه‌ای نیاز است"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"باز کردن <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"برای افزودن برنامه <xliff:g id="APPNAME">%1$s</xliff:g> به‌عنوان میان‌بر، مطمئن شوید"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"تمام"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 8347bad..e63fe52 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Vasen painike"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Oikea painike"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"–"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Käyttöönotto edellyttää lisävaiheita"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Avaa <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Jos haluat, että <xliff:g id="APPNAME">%1$s</xliff:g> lisätään pikakuvakkeeksi, varmista nämä:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Valmis"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 95965b1..904860a 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Bouton gauche"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Bouton droit"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Aucune"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Configuration supplémentaire requise"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Ouvrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Pour ajouter l\'application <xliff:g id="APPNAME">%1$s</xliff:g> en tant que raccourci, assurez-vous"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"OK"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index b8acbea..20b6738 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Bouton gauche"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Bouton droit"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Aucun"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Configuration supplémentaire nécessaire"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Ouvrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Pour ajouter l\'appli <xliff:g id="APPNAME">%1$s</xliff:g> comme raccourci, procédez aux vérifications suivantes"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"OK"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 23369be..04dd999 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Botón esquerdo"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Botón dereito"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ningunha"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"É preciso facer axustes adicionais"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Abrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Para engadir a aplicación <xliff:g id="APPNAME">%1$s</xliff:g> como atallo, asegúrate de que se cumpra o seguinte:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Feito"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index a03f093..5dd61aa 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"ડાબી બાજુનું બટન"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"જમણી બાજુનું બટન"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"એકપણ નહીં"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"વધારાનું સેટઅપ જરૂરી છે"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> ખોલો"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> ઍપને શૉર્ટકટ તરીકે ઉમેરવા માટે, આ બાબતોની ખાતરી કરો"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"થઈ ગયું"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 3448954..65544bf 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"बायां बटन"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"दायां बटन"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"कोई नहीं"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"अलग से सेटअप करने की ज़रूरत है"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> खोलें"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> ऐप्लिकेशन को शॉर्टकट के तौर पर जोड़ने के लिए, इन बातों का ध्यान रखें"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"हो गया"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 8e76df2..e032beb 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Lijevi gumb"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Desni gumb"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ništa"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Potrebno je dodatno postavljanje"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Otvori <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Da biste aplikaciju <xliff:g id="APPNAME">%1$s</xliff:g> dodali kao prečac, učinite sljedeće"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Gotovo"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index acad8aa..b1d9f41 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Balra gomb"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Jobbra gomb"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Nincs"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"További beállítás szükséges"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"A(z) <xliff:g id="APPNAME">%1$s</xliff:g> megnyitása"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Ha szeretné felvenni a(z) <xliff:g id="APPNAME">%1$s</xliff:g> alkalmazást parancsikonként, gondoskodjon a következőkről:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Kész"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index a627df8..bc549af 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"«Ձախ» կոճակ"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"«Աջ» կոճակ"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ոչ մեկը"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Պահանջվում է լրացուցիչ կարգավորում"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Բացել <xliff:g id="APPNAME">%1$s</xliff:g> հավելվածը"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> հավելվածի դյուրանցումն ավելացնելու համար համոզվեք, որ՝"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Պատրաստ է"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index ba6ed0c..9e06245 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Tombol kiri"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Tombol kanan"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Tidak ada"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Perlu penyiapan tambahan"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Buka <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Untuk menambahkan aplikasi <xliff:g id="APPNAME">%1$s</xliff:g> sebagai pintasan, pastikan"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Selesai"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 2dba024..a2381d1 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Vinstri hnappur"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Hægri hnappur"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ekkert"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Þörf á viðbótaruppsetningu"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Opna <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Til að bæta forritinu <xliff:g id="APPNAME">%1$s</xliff:g> við sem flýtileið skaltu ganga úr skugga um að"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Lokið"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 4dc54c2..8783904 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Puls. sinistro"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Puls. destro"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Nessuno"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"È necessaria ulteriore configurazione"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Apri <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Per aggiungere l\'app <xliff:g id="APPNAME">%1$s</xliff:g> come scorciatoia, assicurati che:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Fine"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 1aa6c2c..318f01b 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"הלחצן השמאלי"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"הלחצן הימני"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"ללא"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"נדרשת הגדרה נוספת"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"פתיחת <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"כדי להוסיף את האפליקציה <xliff:g id="APPNAME">%1$s</xliff:g> כקיצור דרך, צריך לוודא"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"סיום"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index ace60d0..ed66e57 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"左ボタン"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"右ボタン"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"なし"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"追加のセットアップが必要です"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> を開きます。"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> アプリをショートカットとして追加するための手順"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"完了"</string>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index eb6729b..7a11202 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"მარცხენა ღილაკი"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"მარჯვენა ღილაკი"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"არცერთი"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"საჭიროა დამატებითი დაყენება"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g>-ის გახსნა"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> აპი რომ მალსახმობის სახით დაამატოთ, დარწმუნდით, რომ"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"მზადაა"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index e39fad3..ebe641b 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Сол жақ түйме"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Оң жақ түйме"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Жоқ"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Қосымша реттеу қажет"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> қолданбасын ашу"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> қолданбасын таңбаша ретінде қосу үшін келесі әрекеттерді орындауды ұмытпаңыз:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Дайын"</string>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index 7b0f0d9..b844e66 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"ប៊ូតុងឆ្វេង"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"ប៊ូតុងស្ដាំ"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"គ្មាន"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"ចាំបាច់ត្រូវរៀបចំបន្ថែម"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"បើក <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"ដើម្បីបញ្ចូលកម្មវិធី <xliff:g id="APPNAME">%1$s</xliff:g> ជាផ្លូវកាត់ សូមប្រាកដថា"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"រួចរាល់"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index e04ab28..f97c523 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"ಎಡಗಡೆಯ ಬಟನ್"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"ಬಲಗಡೆಯ ಬಟನ್"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"ಯಾವುದೂ ಅಲ್ಲ"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"ಹೆಚ್ಚುವರಿ ಸೆಟಪ್ ಮಾಡಬೇಕಾಗಿದೆ"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> ಅನ್ನು ತೆರೆಯಿರಿ"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> ಆ್ಯಪ್ ಅನ್ನು ಶಾರ್ಟ್‌ಕಟ್ ಆಗಿ ಸೇರಿಸಲು ಕೆಳಗಿನವುಗಳನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"ಮುಗಿದಿದೆ"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 304fc99..3f829ba 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"왼쪽 버튼"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"오른쪽 버튼"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"없음"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"추가 설정 필요"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> 열기"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> 앱을 바로가기로 추가하려면 다음을 확인하세요."</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"완료"</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index aca5694..7f6a7bd 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Сол баскыч"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Оң баскыч"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Жок"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Кошумча тууралоо керек"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> ачуу"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> колдонмосун ыкчам баскыч катары кошуу үчүн төмөнкүлөрдү аткарыңыз:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Бүттү"</string>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 8a9cdb2..3e958e1 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"ປຸ່ມຊ້າຍ"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"ປຸ່ມຂວາ"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"ບໍ່ມີ"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"ຕ້ອງຕັ້ງຄ່າເພີ່ມເຕີມ"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"ເປີດ <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"ເພື່ອເພີ່ມແອັບ <xliff:g id="APPNAME">%1$s</xliff:g> ເປັນທາງລັດ, ກະລຸນາກວດສອບໃຫ້ແນ່ໃຈວ່າ"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"ແລ້ວໆ"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index e4542e2..c802dd0 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Mygtukas kairėn"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Mygtukas dešinėn"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Nėra"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Reikalinga papildoma sąranka"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Atidaryti „<xliff:g id="APPNAME">%1$s</xliff:g>“"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Jei norite pridėti programą „<xliff:g id="APPNAME">%1$s</xliff:g>“ kaip šaukinį, įsitikinkite, kad atitinkate reikalavimus."</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Atlikta"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index be7c320..2810f39 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Kreisā poga"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Labā poga"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Nav"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Jāveic papildu iestatīšana"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Atvērt lietotni <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Lai pievienotu lietotni <xliff:g id="APPNAME">%1$s</xliff:g> kā saīsni, jābūt izpildītiem tālāk minētajiem nosacījumiem."</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Gatavs"</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 812dd4d..d95e400 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Лево копче"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Десно копче"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Нема"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Потребно е дополнително поставување"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Отворете ја <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"За да ја додадете апликацијата <xliff:g id="APPNAME">%1$s</xliff:g> како кратенка, треба да бидат исполнети следниве услови"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Готово"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 8a57b86..4a49da0 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"ഇടതുവശത്തെ ബട്ടൺ"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"വലതുവശത്തെ ബട്ടൺ"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"ഒന്നുമില്ല"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"കൂടുതൽ സജ്ജീകരണം ആവശ്യമാണ്"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> തുറക്കുക"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"കുറുക്കുവഴിയായി <xliff:g id="APPNAME">%1$s</xliff:g> ആപ്പ് ചേർക്കാൻ, ഇനിപ്പറയുന്ന കാര്യങ്ങൾ ഉറപ്പാക്കുക"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"പൂർത്തിയായി"</string>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 1ee0c91..e13fc69 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Зүүн товчлуур"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Баруун товчлуур"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Байхгүй"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Нэмэлт тохируулга шаардлагатай"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g>-г нээх"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> аппыг товчлолоор нэмэхийн тулд дараахыг баталгаажуулна уу"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Болсон"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index fcf5639..f654286 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"डावीकडील बटण"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"उजवीकडील बटण"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"काहीही नाही"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"अतिरिक्त सेटअप आवश्यक आहे"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> उघडा"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> हे अ‍ॅप शॉर्टकट म्हणून जोडण्यासाठी, पुढील गोष्टींची खात्री करा"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"पूर्ण झाले"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index e83e617..7a83aeb 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Butang kiri"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Butang kanan"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Tiada"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Persediaan tambahan diperlukan"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Buka <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Untuk menambahkan apl <xliff:g id="APPNAME">%1$s</xliff:g> sebagai pintasan, pastikan"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Selesai"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 0b9fe4f..522c9c5 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"ဘယ်ခလုတ်"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"ညာခလုတ်"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"မရှိ"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"နောက်ထပ်စနစ်ထည့်သွင်းမှု လိုအပ်သည်"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> ဖွင့်ရန်"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> အက်ပ်ကို ဖြတ်လမ်းလင့်ခ်အဖြစ် ထည့်ရန် အောက်ပါတို့နှင့်ကိုက်ညီရမည်"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"ပြီးပြီ"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 9f5fb59..556a582 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Venstreknapp"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Høyreknapp"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ingen"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Det er nødvendig med mer konfigurering"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Åpne <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"For å legge til <xliff:g id="APPNAME">%1$s</xliff:g>-appen som en snarvei må du sørge for at"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Ferdig"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index aff2143..332653b 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"बायाँतिरको बटन"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"दायाँतिरको बटन"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"कुनै पनि होइन"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"अतिरिक्त सेटअप गर्नु पर्ने हुन्छ"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> खोल्नुहोस्"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> एपलाई सर्टकटका रूपमा हाल्न, निम्न कुरा सुनिश्चित गर्नुहोस्:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"पूरा भयो"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 8a458c5..168e3a2 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Linkerknop"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Rechterknop"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Geen"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Aanvullende instelling nodig"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> openen"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Zorg voor het volgende om de <xliff:g id="APPNAME">%1$s</xliff:g>-app toe te voegen als snelkoppeling:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Klaar"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 4fa64e1..27deed4 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"ବାମପଟ ବଟନ"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"ଡାହାଣପଟ ବଟନ"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"କିଛି ନାହିଁ"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"ଅତିରିକ୍ତ ସେଟଅପ ଆବଶ୍ୟକ"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> ଖୋଲନ୍ତୁ"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"ଏକ ସର୍ଟକଟ ଭାବେ <xliff:g id="APPNAME">%1$s</xliff:g> ଆପ ଯୋଗ କରିବାକୁ, ଏହା ସୁନିଶ୍ଚିତ କରନ୍ତୁ"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"ହୋଇଗଲା"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index c07470b..d7546b6 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"ਖੱਬਾ ਬਟਨ"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"ਸੱਜਾ ਬਟਨ"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"ਕੋਈ ਨਹੀਂ"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"ਵਧੀਕ ਸੈੱਟਅੱਪ ਦੀ ਲੋੜ ਹੈ"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> ਖੋਲ੍ਹੋ"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> ਐਪ ਨੂੰ ਸ਼ਾਰਟਕੱਟ ਵਜੋਂ ਸ਼ਾਮਲ ਕਰਨ ਲਈ, ਪੱਕਾ ਕਰੋ ਕਿ"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"ਹੋ ਗਿਆ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 29f6e12..2d9ed24 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Lewy przycisk"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Prawy przycisk"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Brak"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Konieczna jest dodatkowa konfiguracja"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Otwórz: <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Aby dodać aplikację <xliff:g id="APPNAME">%1$s</xliff:g> jako skrót, upewnij się, że spełnione zostały te warunki:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Gotowe"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 4ffe2eb..6f58cd4 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Botão esquerdo"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Botão direito"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Nenhum"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Configuração adicional necessária"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Abrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Para adicionar a app <xliff:g id="APPNAME">%1$s</xliff:g> como um atalho, garanta"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Concluído"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index a793fa5..32f2231 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Botão esquerdo"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Botão direito"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Nenhum"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Configuração extra necessária"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Abrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Para adicionar o app <xliff:g id="APPNAME">%1$s</xliff:g> como um atalho, confira se"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Concluído"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 58038dd..2fdcd24 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Butonul stâng"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Butonul drept"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Fără"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Configurare suplimentară necesară"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Deschide <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Pentru a adăuga aplicația <xliff:g id="APPNAME">%1$s</xliff:g> drept comandă rapidă, asigură-te"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Gata"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index b734b39..0d3e54b 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Левая кнопка"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Правая кнопка"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Нет"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Требуется дополнительная настройка"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Открыть: <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Для добавления ярлыка приложения \"<xliff:g id="APPNAME">%1$s</xliff:g>\" должны выполняться следующие условия:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"ОК"</string>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 60d243f..58a7c8a 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"වම් බොත්තම"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"දකුණු බොත්තම"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"කිසිත් නැත"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"අතිරේක පිහිටුවීම අවශ්‍යයි"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> විවෘත කරන්න"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"කෙටිමඟක් ලෙස <xliff:g id="APPNAME">%1$s</xliff:g> එක් කිරීමට, තහවුරු කර ගන්න"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"නිමයි"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index c9ee735..743ac8f 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Ľavé tlačidlo"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Pravé tlačidlo"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Žiadne"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Vyžaduje sa ďalšie nastavenie"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Otvoriť <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Ak chcete aplikáciu <xliff:g id="APPNAME">%1$s</xliff:g> pridať ako odkaz, uistite sa, že"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Hotovo"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 7896b0a..eff0128 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Levi gumb"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Desni gumb"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Brez"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Potrebna je dodatna nastavitev"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Odpri <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Če želite aplikacijo <xliff:g id="APPNAME">%1$s</xliff:g> dodati kot bližnjico, zagotovite naslednje:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Končano"</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index a44d210..45b99a7 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Butoni i majtë"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Butoni i djathtë"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Asnjë"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Nevojitet konfigurimi shtesë"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Hap \"<xliff:g id="APPNAME">%1$s</xliff:g>\""</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Për të shtuar aplikacionin \"<xliff:g id="APPNAME">%1$s</xliff:g>\" si një shkurtore, sigurohu që"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"U krye"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 26e34ff..affe566 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Лево дугме"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Десно дугме"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Ништа"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Потребно је додатно подешавање"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Отворите: <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Да бисте додали апликацију <xliff:g id="APPNAME">%1$s</xliff:g> као пречицу, уверите се"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Готово"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 258e6fb..e1f248d 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Vänsterknapp"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Högerknapp"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Inga"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Ytterligare konfigurering krävs"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Öppna <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Om du vill lägga till <xliff:g id="APPNAME">%1$s</xliff:g>-appen som en genväg ser du till att"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Klar"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 84946eb..644898f 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Kitufe cha kushoto"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Kitufe cha kulia"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Hamna"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Mipangilio ya ziada inahitajika"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Fungua <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Ili kuweka programu ya <xliff:g id="APPNAME">%1$s</xliff:g> kuwa njia ya mkato, hakikisha"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Nimemaliza"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index ecd4d0f..55d54aa 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"இடது பட்டன்"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"வலது பட்டன்"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"ஏதுமில்லை"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"கூடுதல் அமைவு தேவை"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> ஐத் திறக்கும்"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> ஆப்ஸை ஷார்ட்கட்டாகச் சேர்க்க இவற்றைப் பின்பற்றுவதை உறுதிசெய்துகொள்ளவும்:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"சரி"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 57d5383..ffa36f1 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -56,7 +56,7 @@
     <string name="custom_theme" msgid="1618351922263478163">"అనుకూలం"</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="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>
@@ -64,12 +64,12 @@
     <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>
-    <string name="cancel" msgid="4651030493668562067">"రద్దు చేయి"</string>
+    <string name="delete_custom_theme_button" msgid="5102462988130208824">"తొలగించండి"</string>
+    <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_button" msgid="1754493078383627019">"<xliff:g id="ID_1">%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>
     <string name="something_went_wrong" msgid="529840112449799117">"అయ్యో, ఏదో తప్పు జరిగింది."</string>
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"ఎడమవైపు బటన్"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"కుడివైపు బటన్"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"ఏదీ లేదు"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"అదనపు సెటప్ అవసరం"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g>ను తెరవండి"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> యాప్‌ను షార్ట్‌కట్‌గా జోడించడానికి, వీటిని నిర్ధారించుకోండి"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"పూర్తయింది"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 3371e67..f2fff2f 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"ปุ่มซ้าย"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"ปุ่มขวา"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"ไม่มี"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"ต้องตั้งค่าเพิ่มเติม"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"เปิด <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"หากต้องการเพิ่มแอป <xliff:g id="APPNAME">%1$s</xliff:g> เป็นทางลัด โปรดตรวจสอบดังต่อไปนี้"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"เสร็จสิ้น"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index b16d210..9fdb612 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Kaliwang button"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Kanang button"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Wala"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Kailangan ng karagdagang pag-set up"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Buksan ang <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Para idagdag ang <xliff:g id="APPNAME">%1$s</xliff:g> app bilang shortcut, tiyaking"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Tapos na"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 2d765f5..bfe9c18 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Sol düğmesi"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Sağ düğmesi"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Yok"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Ek kurulum gerekiyor"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> uygulamasını aç"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> uygulamasını kısayol olarak ekleyebilmeniz için gerekenler"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Bitti"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index e2a0f70..be7a4a8 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Ліва кнопка"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Права кнопка"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Немає"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Потрібне додаткове налаштування"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Відкрити <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Щоб додати можливість швидкого ввімкнення додатка <xliff:g id="APPNAME">%1$s</xliff:g>, переконайтеся, що виконано вимоги нижче."</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Готово"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 52b1822..fe88788 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"دایاں بٹن"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"بایاں بٹن"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"کوئی نہیں"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"اضافی سیٹ اپ درکار ہے"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"<xliff:g id="APPNAME">%1$s</xliff:g> کھولیں"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> ایپ کو شارٹ کٹ کے طور پر شامل کرنے کے لیے درج ذیل کو یقینی بنائیں"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"ہو گیا"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 82c67ba..52b45ce 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Chap tugma"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Oʻng tugma"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Hech biri"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Qoʻshimcha sozlash kerak"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Ochish: <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"<xliff:g id="APPNAME">%1$s</xliff:g> ilovasini yorliq sifatida qoʻshish uchun"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Tayyor"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 308cb6b..e1151a9 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Nút bên trái"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Nút bên phải"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Không có"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Cần thiết lập thêm"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Mở <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Để tạo lối tắt cho ứng dụng <xliff:g id="APPNAME">%1$s</xliff:g>, hãy đảm bảo"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Xong"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index baf650b..817d95f 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"左侧按钮"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"右侧按钮"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"无"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"需要完成其他设置"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"打开<xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"若要将<xliff:g id="APPNAME">%1$s</xliff:g>应用添加为快捷方式,请确保:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"完成"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 9acfee0..40e1da3 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"左鍵"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"右鍵"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"無"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"需要進行其他設定"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"開啟「<xliff:g id="APPNAME">%1$s</xliff:g>」"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"如要新增「<xliff:g id="APPNAME">%1$s</xliff:g>」應用程式為快速鍵,請確保:"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"完成"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index c9b7e12..51666c7 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"左側按鈕"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"右側按鈕"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"無"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"需要進行額外設定"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"開啟「<xliff:g id="APPNAME">%1$s</xliff:g>」"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"如要將「<xliff:g id="APPNAME">%1$s</xliff:g>」應用程式新增為捷徑,必須滿足以下條件"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"完成"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 5503bf2..e46dff3 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -94,7 +94,8 @@
     <string name="keyguard_slot_name_bottom_start" msgid="6717374042663171860">"Inkinobho engakwesobunxele"</string>
     <string name="keyguard_slot_name_bottom_end" msgid="7636885379738905151">"Inkinobho yakwesokudla"</string>
     <string name="keyguard_affordance_none" msgid="1751643933430782312">"Lutho"</string>
-    <string name="keyguard_affordance_enablement_dialog_title" msgid="307756993596011884">"Kudingeka ukusetha okwengeziwe"</string>
+    <!-- no translation found for keyguard_affordance_enablement_dialog_title (3389730825561696493) -->
+    <skip />
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8117011931337357438">"Vula i-<xliff:g id="APPNAME">%1$s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_message" msgid="6136286758939253570">"Ukwengeza i-app ye-<xliff:g id="APPNAME">%1$s</xliff:g> njengesinqamuleli, qinisekisa"</string>
     <string name="keyguard_affordance_enablement_dialog_dismiss_button" msgid="629754625264422508">"Kwenziwe"</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 63fb560..13fc8a0 100755
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -294,7 +294,7 @@
     enabled. The dialog contains a list of instructions that the user needs to take in order to
     enable the option before it can be selected again. [CHAR LIMIT=NONE].
     -->
-    <string name="keyguard_affordance_enablement_dialog_title">Additional setup needed</string>
+    <string name="keyguard_affordance_enablement_dialog_title">To select `<xliff:g id="appName" example="Wallet">%1$s</xliff:g>` check the following</string>
 
     <!--
     Template for an action that opens a specific app. [CHAR LIMIT=16]
diff --git a/src/com/android/customization/model/clock/ClockSectionController.java b/src/com/android/customization/model/clock/ClockSectionController.java
deleted file mode 100644
index 545c1c4..0000000
--- a/src/com/android/customization/model/clock/ClockSectionController.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2022 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.model.clock;
-
-import android.content.Context;
-import android.view.LayoutInflater;
-
-import androidx.annotation.Nullable;
-
-import com.android.customization.picker.clock.ClockCustomDemoFragment;
-import com.android.customization.picker.clock.ClockSectionView;
-import com.android.wallpaper.R;
-import com.android.wallpaper.config.Flags;
-import com.android.wallpaper.model.CustomizationSectionController;
-
-/** A {@link CustomizationSectionController} for clock customization. */
-public class ClockSectionController implements CustomizationSectionController<ClockSectionView> {
-
-    private final CustomizationSectionNavigationController mNavigationController;
-
-    public ClockSectionController(CustomizationSectionNavigationController navigationController) {
-        mNavigationController = navigationController;
-    }
-
-    @Override
-    public boolean isAvailable(@Nullable Context context) {
-        return Flags.enableCustomClocks;
-    }
-
-    @Override
-    public ClockSectionView createView(Context context) {
-        ClockSectionView view = (ClockSectionView) LayoutInflater.from(context).inflate(
-                R.layout.clock_section_view,
-                null);
-        view.setOnClickListener(v ->
-                mNavigationController.navigateTo(new ClockCustomDemoFragment()));
-        return view;
-    }
-}
diff --git a/src/com/android/customization/model/clock/ClockSectionController.kt b/src/com/android/customization/model/clock/ClockSectionController.kt
new file mode 100644
index 0000000..1e339bb
--- /dev/null
+++ b/src/com/android/customization/model/clock/ClockSectionController.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2022 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.model.clock
+
+import android.content.Context
+import android.view.LayoutInflater
+import com.android.customization.picker.clock.ClockCustomDemoFragment
+import com.android.customization.picker.clock.ClockSectionView
+import com.android.systemui.shared.customization.data.content.CustomizationProviderClient
+import com.android.systemui.shared.customization.data.content.CustomizationProviderContract as Contract
+import com.android.wallpaper.R
+import com.android.wallpaper.model.CustomizationSectionController
+import com.android.wallpaper.model.CustomizationSectionController.CustomizationSectionNavigationController
+import kotlinx.coroutines.runBlocking
+
+/** A [CustomizationSectionController] for clock customization. */
+class ClockSectionController(
+    private val navigationController: CustomizationSectionNavigationController,
+    private val customizationProviderClient: CustomizationProviderClient,
+) : CustomizationSectionController<ClockSectionView?> {
+    override fun isAvailable(context: Context?): Boolean {
+        return runBlocking { customizationProviderClient.queryFlags() }
+            .firstOrNull { it.name == Contract.FlagsTable.FLAG_NAME_CUSTOM_CLOCKS_ENABLED }
+            ?.value == true
+    }
+
+    override fun createView(context: Context): ClockSectionView {
+        val view =
+            LayoutInflater.from(context)
+                .inflate(
+                    R.layout.clock_section_view,
+                    null,
+                ) as ClockSectionView
+        view.setOnClickListener { navigationController.navigateTo(ClockCustomDemoFragment()) }
+        return view
+    }
+}
diff --git a/src/com/android/customization/model/color/ColorProvider.kt b/src/com/android/customization/model/color/ColorProvider.kt
index c1a4552..3d2cc7e 100644
--- a/src/com/android/customization/model/color/ColorProvider.kt
+++ b/src/com/android/customization/model/color/ColorProvider.kt
@@ -37,7 +37,6 @@
 import com.android.systemui.monet.ColorScheme
 import com.android.systemui.monet.Style
 import com.android.wallpaper.compat.WallpaperManagerCompat
-import com.android.wallpaper.config.Flags
 import com.android.wallpaper.module.InjectorProvider
 import java.util.*
 import kotlinx.coroutines.CoroutineScope
@@ -287,7 +286,10 @@
                             Style.TONAL_SPOT
                         }
 
-                    if (style == Style.MONOCHROMATIC && !Flags.isMonochromaticFlagEnabled) {
+                    if (
+                        style == Style.MONOCHROMATIC &&
+                            !InjectorProvider.getInjector().getFlags().isMonochromaticFlagEnabled()
+                    ) {
                         continue
                     }
 
diff --git a/src/com/android/customization/module/CustomizationInjector.java b/src/com/android/customization/module/CustomizationInjector.java
deleted file mode 100644
index 2cc1245..0000000
--- a/src/com/android/customization/module/CustomizationInjector.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.
- */
-package com.android.customization.module;
-
-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.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor;
-import com.android.wallpaper.module.Injector;
-
-public interface CustomizationInjector extends Injector {
-
-    CustomizationPreferences getCustomizationPreferences(Context context);
-
-    ThemeManager getThemeManager(ThemeBundleProvider provider, FragmentActivity activity,
-            OverlayManagerCompat overlayManagerCompat, ThemesUserEventLogger logger);
-
-
-    /**
-     * Get {@link KeyguardQuickAffordancePickerInteractor}
-     */
-    KeyguardQuickAffordancePickerInteractor getKeyguardQuickAffordancePickerInteractor(
-            Context context);
-}
diff --git a/src/com/android/customization/module/CustomizationInjector.kt b/src/com/android/customization/module/CustomizationInjector.kt
new file mode 100644
index 0000000..3cf8393
--- /dev/null
+++ b/src/com/android/customization/module/CustomizationInjector.kt
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ */
+package com.android.customization.module
+
+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.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor
+import com.android.wallpaper.module.Injector
+
+interface CustomizationInjector : Injector {
+    fun getCustomizationPreferences(context: Context): CustomizationPreferences
+
+    fun getThemeManager(
+        provider: ThemeBundleProvider,
+        activity: FragmentActivity,
+        overlayManagerCompat: OverlayManagerCompat,
+        logger: ThemesUserEventLogger
+    ): ThemeManager
+
+    fun getKeyguardQuickAffordancePickerInteractor(
+        context: Context
+    ): KeyguardQuickAffordancePickerInteractor
+}
diff --git a/src/com/android/customization/module/DefaultCustomizationSections.java b/src/com/android/customization/module/DefaultCustomizationSections.java
index 7eb8865..1097a71 100644
--- a/src/com/android/customization/module/DefaultCustomizationSections.java
+++ b/src/com/android/customization/module/DefaultCustomizationSections.java
@@ -5,6 +5,7 @@
 import androidx.annotation.Nullable;
 import androidx.fragment.app.FragmentActivity;
 import androidx.lifecycle.LifecycleOwner;
+import androidx.lifecycle.ViewModelProvider;
 
 import com.android.customization.model.color.ColorSectionController;
 import com.android.customization.model.grid.GridOptionsManager;
@@ -12,6 +13,9 @@
 import com.android.customization.model.mode.DarkModeSectionController;
 import com.android.customization.model.themedicon.ThemedIconSectionController;
 import com.android.customization.model.themedicon.ThemedIconSwitchProvider;
+import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor;
+import com.android.customization.picker.quickaffordance.ui.section.KeyguardQuickAffordanceSectionController;
+import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordancePickerViewModel;
 import com.android.wallpaper.model.CustomizationSectionController;
 import com.android.wallpaper.model.CustomizationSectionController.CustomizationSectionNavigationController;
 import com.android.wallpaper.model.PermissionRequester;
@@ -19,7 +23,9 @@
 import com.android.wallpaper.model.WallpaperPreviewNavigator;
 import com.android.wallpaper.model.WallpaperSectionController;
 import com.android.wallpaper.model.WorkspaceViewModel;
+import com.android.wallpaper.module.CurrentWallpaperInfoFactory;
 import com.android.wallpaper.module.CustomizationSections;
+import com.android.wallpaper.picker.customization.ui.section.ScreenPreviewSectionController;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -27,6 +33,79 @@
 /** {@link CustomizationSections} for the customization picker. */
 public final class DefaultCustomizationSections implements CustomizationSections {
 
+    private final KeyguardQuickAffordancePickerInteractor mKeyguardQuickAffordancePickerInteractor;
+    private final KeyguardQuickAffordancePickerViewModel.Factory
+            mKeyguardQuickAffordancePickerViewModelFactory;
+
+    public DefaultCustomizationSections(
+            KeyguardQuickAffordancePickerInteractor keyguardQuickAffordancePickerInteractor,
+            KeyguardQuickAffordancePickerViewModel.Factory
+                    keyguardQuickAffordancePickerViewModelFactory) {
+        mKeyguardQuickAffordancePickerInteractor = keyguardQuickAffordancePickerInteractor;
+        mKeyguardQuickAffordancePickerViewModelFactory =
+                keyguardQuickAffordancePickerViewModelFactory;
+    }
+
+    @Override
+    public List<CustomizationSectionController<?>> getSectionControllersForScreen(
+            Screen screen,
+            FragmentActivity activity,
+            LifecycleOwner lifecycleOwner,
+            WallpaperColorsViewModel wallpaperColorsViewModel,
+            WorkspaceViewModel workspaceViewModel,
+            PermissionRequester permissionRequester,
+            WallpaperPreviewNavigator wallpaperPreviewNavigator,
+            CustomizationSectionNavigationController sectionNavigationController,
+            @Nullable Bundle savedInstanceState,
+            CurrentWallpaperInfoFactory wallpaperInfoFactory) {
+        List<CustomizationSectionController<?>> sectionControllers = new ArrayList<>();
+
+        // Wallpaper section.
+        sectionControllers.add(
+                new ScreenPreviewSectionController(
+                        activity,
+                        lifecycleOwner,
+                        screen,
+                        wallpaperInfoFactory,
+                        wallpaperColorsViewModel));
+
+        // Theme color section.
+        sectionControllers.add(new ColorSectionController(
+                activity, wallpaperColorsViewModel, lifecycleOwner, savedInstanceState));
+
+        switch (screen) {
+            case LOCK_SCREEN:
+                // Lock screen quick affordances section.
+                sectionControllers.add(
+                        new KeyguardQuickAffordanceSectionController(
+                                sectionNavigationController,
+                                mKeyguardQuickAffordancePickerInteractor,
+                                new ViewModelProvider(
+                                        activity,
+                                        mKeyguardQuickAffordancePickerViewModelFactory)
+                                        .get(KeyguardQuickAffordancePickerViewModel.class),
+                                lifecycleOwner));
+                break;
+
+            case HOME_SCREEN:
+                // Dark/Light theme section.
+                sectionControllers.add(new DarkModeSectionController(activity,
+                        lifecycleOwner.getLifecycle()));
+
+                // Themed app icon section.
+                sectionControllers.add(new ThemedIconSectionController(
+                        ThemedIconSwitchProvider.getInstance(activity), workspaceViewModel,
+                        savedInstanceState));
+
+                // App grid section.
+                sectionControllers.add(new GridSectionController(
+                        GridOptionsManager.getInstance(activity), sectionNavigationController));
+                break;
+        }
+
+        return sectionControllers;
+    }
+
     @Override
     public List<CustomizationSectionController<?>> getAllSectionControllers(
             FragmentActivity activity,
diff --git a/src/com/android/customization/module/StatsLogUserEventLogger.java b/src/com/android/customization/module/StatsLogUserEventLogger.java
index 605c173..2b6767b 100644
--- a/src/com/android/customization/module/StatsLogUserEventLogger.java
+++ b/src/com/android/customization/module/StatsLogUserEventLogger.java
@@ -188,6 +188,15 @@
                 .log();
     }
 
+    @Override
+    public void logEffectProbe(String effect, @EffectStatus int status) {
+        new SysUiStatsLogger()
+                .setAction(StyleEnums.WALLPAPER_EFFECT_PROBE)
+                .setEffectPreference(status)
+                .setEffectIdHash(getIdHashCode(effect))
+                .log();
+    }
+
     @Nullable
     private String getThemePackage(ThemeBundle theme, String category) {
         Map<String, String> packages = theme.getPackagesByCategory();
diff --git a/src/com/android/customization/module/ThemePickerInjector.java b/src/com/android/customization/module/ThemePickerInjector.java
deleted file mode 100644
index 9a304e9..0000000
--- a/src/com/android/customization/module/ThemePickerInjector.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * 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.
- */
-package com.android.customization.module;
-
-import static com.android.wallpaper.picker.PreviewFragment.ARG_FULL_SCREEN;
-import static com.android.wallpaper.picker.PreviewFragment.ARG_PREVIEW_MODE;
-import static com.android.wallpaper.picker.PreviewFragment.ARG_TESTING_MODE_ENABLED;
-import static com.android.wallpaper.picker.PreviewFragment.ARG_VIEW_AS_HOME;
-import static com.android.wallpaper.picker.PreviewFragment.ARG_WALLPAPER;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-
-import androidx.fragment.app.Fragment;
-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.picker.quickaffordance.data.repository.KeyguardQuickAffordancePickerRepository;
-import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor;
-import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordancePickerViewModel;
-import com.android.systemui.shared.quickaffordance.data.content.KeyguardQuickAffordanceProviderClient;
-import com.android.systemui.shared.quickaffordance.data.content.KeyguardQuickAffordanceProviderClientImpl;
-import com.android.wallpaper.model.LiveWallpaperInfo;
-import com.android.wallpaper.model.WallpaperInfo;
-import com.android.wallpaper.module.CustomizationSections;
-import com.android.wallpaper.module.FragmentFactory;
-import com.android.wallpaper.module.WallpaperPicker2Injector;
-import com.android.wallpaper.module.WallpaperPreferences;
-import com.android.wallpaper.picker.CustomizationPickerActivity;
-import com.android.wallpaper.picker.ImagePreviewFragment;
-import com.android.wallpaper.picker.LivePreviewFragment;
-import com.android.wallpaper.picker.PreviewFragment;
-
-import kotlinx.coroutines.Dispatchers;
-
-/**
- * A concrete, real implementation of the dependency provider.
- */
-public class ThemePickerInjector extends WallpaperPicker2Injector
-        implements CustomizationInjector {
-    private CustomizationSections mCustomizationSections;
-    private ThemesUserEventLogger mUserEventLogger;
-    private WallpaperPreferences mPrefs;
-    private KeyguardQuickAffordancePickerInteractor mKeyguardQuickAffordancePickerInteractor;
-    private KeyguardQuickAffordancePickerViewModel.Factory
-            mKeyguardQuickAffordancePickerViewModelFactory;
-    private FragmentFactory mFragmentFactory;
-
-    @Override
-    public CustomizationSections getCustomizationSections(Activity activity) {
-        if (mCustomizationSections == null) {
-            mCustomizationSections = new DefaultCustomizationSections();
-        }
-        return mCustomizationSections;
-    }
-
-    @Override
-    public Intent getDeepLinkRedirectIntent(Context context, Uri uri) {
-        Intent intent = new Intent();
-        intent.setClass(context, CustomizationPickerActivity.class);
-        intent.setData(uri);
-        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
-        return intent;
-    }
-
-    @Override
-    public String getDownloadableIntentAction() {
-        return null;
-    }
-
-    @Override
-    public Fragment getPreviewFragment(
-            Context context,
-            WallpaperInfo wallpaperInfo,
-            int mode,
-            boolean viewAsHome,
-            boolean viewFullScreen,
-            boolean testingModeEnabled) {
-        Bundle args = new Bundle();
-        args.putParcelable(ARG_WALLPAPER, wallpaperInfo);
-        args.putInt(ARG_PREVIEW_MODE, mode);
-        args.putBoolean(ARG_VIEW_AS_HOME, viewAsHome);
-        args.putBoolean(ARG_FULL_SCREEN, viewFullScreen);
-        args.putBoolean(ARG_TESTING_MODE_ENABLED, testingModeEnabled);
-        PreviewFragment fragment = wallpaperInfo instanceof LiveWallpaperInfo
-                ? new LivePreviewFragment() : new ImagePreviewFragment();
-        fragment.setArguments(args);
-        return fragment;
-    }
-
-    @Override
-    public synchronized ThemesUserEventLogger getUserEventLogger(Context context) {
-        if (mUserEventLogger == null) {
-            mUserEventLogger = new StatsLogUserEventLogger(context);
-        }
-        return mUserEventLogger;
-    }
-
-    @Override
-    public synchronized WallpaperPreferences getPreferences(Context context) {
-        if (mPrefs == null) {
-            mPrefs = new DefaultCustomizationPreferences(context.getApplicationContext());
-        }
-        return mPrefs;
-    }
-
-    //
-    // Functions from {@link CustomizationInjector}
-    //
-    @Override
-    public CustomizationPreferences getCustomizationPreferences(Context context) {
-        return (CustomizationPreferences) getPreferences(context);
-    }
-
-    @Override
-    public ThemeManager getThemeManager(ThemeBundleProvider provider, FragmentActivity activity,
-            OverlayManagerCompat overlayManagerCompat, ThemesUserEventLogger logger) {
-        return new ThemeManager(provider, activity, overlayManagerCompat, logger);
-    }
-
-    @Override
-    public KeyguardQuickAffordancePickerInteractor getKeyguardQuickAffordancePickerInteractor(
-            Context context) {
-        if (mKeyguardQuickAffordancePickerInteractor == null) {
-            final KeyguardQuickAffordanceProviderClient client =
-                    new KeyguardQuickAffordanceProviderClientImpl(context, Dispatchers.getIO());
-            mKeyguardQuickAffordancePickerInteractor = new KeyguardQuickAffordancePickerInteractor(
-                    new KeyguardQuickAffordancePickerRepository(client, Dispatchers.getIO()),
-                    client);
-        }
-        return mKeyguardQuickAffordancePickerInteractor;
-    }
-
-    /**
-     * Returns a {@link KeyguardQuickAffordancePickerViewModel.Factory}.
-     */
-    public KeyguardQuickAffordancePickerViewModel.Factory
-            getKeyguardQuickAffordancePickerViewModelFactory(Context context) {
-        if (mKeyguardQuickAffordancePickerViewModelFactory == null) {
-            mKeyguardQuickAffordancePickerViewModelFactory =
-                    new KeyguardQuickAffordancePickerViewModel.Factory(
-                            context,
-                            getKeyguardQuickAffordancePickerInteractor(context));
-        }
-        return mKeyguardQuickAffordancePickerViewModelFactory;
-    }
-
-    @Override
-    public FragmentFactory getFragmentFactory() {
-        if (mFragmentFactory == null) {
-            mFragmentFactory = new ThemePickerFragmentFactory();
-        }
-        return mFragmentFactory;
-    }
-}
diff --git a/src/com/android/customization/module/ThemePickerInjector.kt b/src/com/android/customization/module/ThemePickerInjector.kt
new file mode 100644
index 0000000..b3f95d5
--- /dev/null
+++ b/src/com/android/customization/module/ThemePickerInjector.kt
@@ -0,0 +1,205 @@
+/*
+ * 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.
+ */
+package com.android.customization.module
+
+import android.app.Activity
+import android.content.Context
+import android.content.Intent
+import android.net.Uri
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+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.picker.quickaffordance.data.repository.KeyguardQuickAffordancePickerRepository
+import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor
+import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordanceSnapshotRestorer
+import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordancePickerViewModel
+import com.android.systemui.shared.customization.data.content.CustomizationProviderClient
+import com.android.systemui.shared.customization.data.content.CustomizationProviderClientImpl
+import com.android.wallpaper.model.LiveWallpaperInfo
+import com.android.wallpaper.model.WallpaperInfo
+import com.android.wallpaper.module.CustomizationSections
+import com.android.wallpaper.module.FragmentFactory
+import com.android.wallpaper.module.UserEventLogger
+import com.android.wallpaper.module.WallpaperPicker2Injector
+import com.android.wallpaper.module.WallpaperPreferences
+import com.android.wallpaper.picker.CustomizationPickerActivity
+import com.android.wallpaper.picker.ImagePreviewFragment
+import com.android.wallpaper.picker.LivePreviewFragment
+import com.android.wallpaper.picker.PreviewFragment
+import com.android.wallpaper.picker.undo.domain.interactor.SnapshotRestorer
+import kotlinx.coroutines.Dispatchers.IO
+
+open class ThemePickerInjector : WallpaperPicker2Injector(), CustomizationInjector {
+    private var customizationSections: CustomizationSections? = null
+    private var userEventLogger: UserEventLogger? = null
+    private var prefs: WallpaperPreferences? = null
+    private var keyguardQuickAffordancePickerInteractor: KeyguardQuickAffordancePickerInteractor? =
+        null
+    private var keyguardQuickAffordancePickerViewModelFactory:
+        KeyguardQuickAffordancePickerViewModel.Factory? =
+        null
+    private var customizationProviderClient: CustomizationProviderClient? = null
+    private var fragmentFactory: FragmentFactory? = null
+    private var keyguardQuickAffordanceSnapshotRestorer: KeyguardQuickAffordanceSnapshotRestorer? =
+        null
+
+    override fun getCustomizationSections(activity: Activity): CustomizationSections {
+        return customizationSections
+            ?: DefaultCustomizationSections(
+                    getKeyguardQuickAffordancePickerInteractor(activity),
+                    getKeyguardQuickAffordancePickerViewModelFactory(activity)
+                )
+                .also { customizationSections = it }
+    }
+
+    override fun getDeepLinkRedirectIntent(context: Context, uri: Uri): Intent {
+        val intent = Intent()
+        intent.setClass(context, CustomizationPickerActivity::class.java)
+        intent.data = uri
+        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
+        return intent
+    }
+
+    override fun getDownloadableIntentAction(): String? {
+        return null
+    }
+
+    override fun getPreviewFragment(
+        context: Context,
+        wallpaperInfo: WallpaperInfo,
+        mode: Int,
+        viewAsHome: Boolean,
+        viewFullScreen: Boolean,
+        testingModeEnabled: Boolean
+    ): Fragment {
+        return if (wallpaperInfo is LiveWallpaperInfo) LivePreviewFragment()
+        else
+            ImagePreviewFragment().apply {
+                arguments =
+                    Bundle().apply {
+                        putParcelable(PreviewFragment.ARG_WALLPAPER, wallpaperInfo)
+                        putInt(PreviewFragment.ARG_PREVIEW_MODE, mode)
+                        putBoolean(PreviewFragment.ARG_VIEW_AS_HOME, viewAsHome)
+                        putBoolean(PreviewFragment.ARG_FULL_SCREEN, viewFullScreen)
+                        putBoolean(PreviewFragment.ARG_TESTING_MODE_ENABLED, testingModeEnabled)
+                    }
+            }
+    }
+
+    @Synchronized
+    override fun getUserEventLogger(context: Context): ThemesUserEventLogger {
+        return if (userEventLogger != null) userEventLogger as ThemesUserEventLogger
+        else StatsLogUserEventLogger(context).also { userEventLogger = it }
+    }
+
+    @Synchronized
+    override fun getPreferences(context: Context): WallpaperPreferences {
+        return prefs
+            ?: DefaultCustomizationPreferences(context.applicationContext).also { prefs = it }
+    }
+
+    override fun getFragmentFactory(): FragmentFactory? {
+        return fragmentFactory ?: ThemePickerFragmentFactory().also { fragmentFactory }
+    }
+
+    override fun getSnapshotRestorers(context: Context): Map<Int, SnapshotRestorer> {
+        return super<WallpaperPicker2Injector>.getSnapshotRestorers(context).toMutableMap().apply {
+            this[KEY_QUICK_AFFORDANCE_SNAPSHOT_RESTORER] =
+                getKeyguardQuickAffordanceSnapshotRestorer(context)
+        }
+    }
+
+    override fun getCustomizationPreferences(context: Context): CustomizationPreferences {
+        return getPreferences(context) as CustomizationPreferences
+    }
+
+    override fun getThemeManager(
+        provider: ThemeBundleProvider,
+        activity: FragmentActivity,
+        overlayManagerCompat: OverlayManagerCompat,
+        logger: ThemesUserEventLogger
+    ): ThemeManager {
+        return ThemeManager(provider, activity, overlayManagerCompat, logger)
+    }
+
+    override fun getKeyguardQuickAffordancePickerInteractor(
+        context: Context
+    ): KeyguardQuickAffordancePickerInteractor {
+        return keyguardQuickAffordancePickerInteractor
+            ?: getKeyguardQuickAffordancePickerInteractorImpl(context).also {
+                keyguardQuickAffordancePickerInteractor = it
+            }
+    }
+
+    fun getKeyguardQuickAffordancePickerViewModelFactory(
+        context: Context
+    ): KeyguardQuickAffordancePickerViewModel.Factory {
+        return keyguardQuickAffordancePickerViewModelFactory
+            ?: KeyguardQuickAffordancePickerViewModel.Factory(
+                    context,
+                    getKeyguardQuickAffordancePickerInteractor(context),
+                    getUndoInteractor(context),
+                    getCurrentWallpaperInfoFactory(context),
+                )
+                .also { keyguardQuickAffordancePickerViewModelFactory = it }
+    }
+
+    private fun getKeyguardQuickAffordancePickerInteractorImpl(
+        context: Context
+    ): KeyguardQuickAffordancePickerInteractor {
+        val client = getKeyguardQuickAffordancePickerProviderClient(context)
+        return KeyguardQuickAffordancePickerInteractor(
+            KeyguardQuickAffordancePickerRepository(client, IO),
+            client
+        ) { getKeyguardQuickAffordanceSnapshotRestorer(context) }
+    }
+
+    protected fun getKeyguardQuickAffordancePickerProviderClient(
+        context: Context
+    ): CustomizationProviderClient {
+        return customizationProviderClient
+            ?: CustomizationProviderClientImpl(context, IO).also {
+                customizationProviderClient = it
+            }
+    }
+
+    protected fun getKeyguardQuickAffordanceSnapshotRestorer(
+        context: Context
+    ): KeyguardQuickAffordanceSnapshotRestorer {
+        return keyguardQuickAffordanceSnapshotRestorer
+            ?: KeyguardQuickAffordanceSnapshotRestorer(
+                    getKeyguardQuickAffordancePickerInteractor(context),
+                    getKeyguardQuickAffordancePickerProviderClient(context)
+                )
+                .also { keyguardQuickAffordanceSnapshotRestorer = it }
+    }
+
+    companion object {
+        @JvmStatic
+        private val KEY_QUICK_AFFORDANCE_SNAPSHOT_RESTORER =
+            WallpaperPicker2Injector.MIN_SNAPSHOT_RESTORER_KEY
+
+        /**
+         * When this injector is overridden, this is the minimal value that should be used by
+         * restorers returns in [getSnapshotRestorers].
+         */
+        @JvmStatic
+        protected val MIN_SNAPSHOT_RESTORER_KEY = KEY_QUICK_AFFORDANCE_SNAPSHOT_RESTORER + 1
+    }
+}
diff --git a/src/com/android/customization/picker/clock/domain/interactor/ClocksSnapshotRestorer.kt b/src/com/android/customization/picker/clock/domain/interactor/ClocksSnapshotRestorer.kt
new file mode 100644
index 0000000..63b4a9b
--- /dev/null
+++ b/src/com/android/customization/picker/clock/domain/interactor/ClocksSnapshotRestorer.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2022 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.picker.clock.domain.interactor
+
+import com.android.wallpaper.picker.undo.domain.interactor.SnapshotRestorer
+import com.android.wallpaper.picker.undo.shared.model.RestorableSnapshot
+
+/** Handles state restoration for clocks. */
+class ClocksSnapshotRestorer : SnapshotRestorer {
+    override suspend fun setUpSnapshotRestorer(
+        updater: (RestorableSnapshot) -> Unit,
+    ): RestorableSnapshot {
+        // TODO(b/262924055): implement as part of the clock settings screen.
+        return RestorableSnapshot(mapOf())
+    }
+
+    override suspend fun restoreToSnapshot(snapshot: RestorableSnapshot) {
+        // TODO(b/262924055): implement as part of the clock settings screen.
+    }
+}
diff --git a/src/com/android/customization/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepository.kt b/src/com/android/customization/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepository.kt
index 5846107..fd553fe 100644
--- a/src/com/android/customization/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepository.kt
+++ b/src/com/android/customization/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepository.kt
@@ -20,8 +20,8 @@
 import com.android.customization.picker.quickaffordance.shared.model.KeyguardQuickAffordancePickerAffordanceModel as AffordanceModel
 import com.android.customization.picker.quickaffordance.shared.model.KeyguardQuickAffordancePickerSelectionModel as SelectionModel
 import com.android.customization.picker.quickaffordance.shared.model.KeyguardQuickAffordancePickerSlotModel as SlotModel
-import com.android.systemui.shared.quickaffordance.data.content.KeyguardQuickAffordanceProviderClient as Client
-import com.android.systemui.shared.quickaffordance.data.content.KeyguardQuickAffordanceProviderContract as Contract
+import com.android.systemui.shared.customization.data.content.CustomizationProviderClient as Client
+import com.android.systemui.shared.customization.data.content.CustomizationProviderContract as Contract
 import kotlinx.coroutines.CoroutineDispatcher
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.map
@@ -60,8 +60,11 @@
     }
 
     private fun List<Client.Flag>.isFeatureEnabled(): Boolean {
-        return find { flag -> flag.name == Contract.FlagsTable.FLAG_NAME_FEATURE_ENABLED }?.value ==
-            true
+        return find { flag ->
+                flag.name ==
+                    Contract.FlagsTable.FLAG_NAME_CUSTOM_LOCK_SCREEN_QUICK_AFFORDANCES_ENABLED
+            }
+            ?.value == true
     }
 
     private fun Client.Slot.toModel(): SlotModel {
diff --git a/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractor.kt b/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractor.kt
index 87cedf5..fbe303b 100644
--- a/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractor.kt
+++ b/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractor.kt
@@ -23,7 +23,8 @@
 import com.android.customization.picker.quickaffordance.shared.model.KeyguardQuickAffordancePickerAffordanceModel as AffordanceModel
 import com.android.customization.picker.quickaffordance.shared.model.KeyguardQuickAffordancePickerSelectionModel as SelectionModel
 import com.android.customization.picker.quickaffordance.shared.model.KeyguardQuickAffordancePickerSlotModel as SlotModel
-import com.android.systemui.shared.quickaffordance.data.content.KeyguardQuickAffordanceProviderClient as Client
+import com.android.systemui.shared.customization.data.content.CustomizationProviderClient as Client
+import javax.inject.Provider
 import kotlinx.coroutines.flow.Flow
 
 /**
@@ -33,10 +34,8 @@
 class KeyguardQuickAffordancePickerInteractor(
     private val repository: KeyguardQuickAffordancePickerRepository,
     private val client: Client,
+    private val snapshotRestorer: Provider<KeyguardQuickAffordanceSnapshotRestorer>,
 ) {
-    /** Whether the feature is enabled. */
-    val isFeatureEnabled: Flow<Boolean> = repository.isFeatureEnabled
-
     /** List of slots available on the device. */
     val slots: Flow<List<SlotModel>> = repository.slots
 
@@ -60,6 +59,8 @@
             slotId = slotId,
             affordanceId = affordanceId,
         )
+
+        snapshotRestorer.get().storeSnapshot()
     }
 
     /** Unselects an affordance with the given ID from the slot with the given ID. */
@@ -68,6 +69,8 @@
             slotId = slotId,
             affordanceId = affordanceId,
         )
+
+        snapshotRestorer.get().storeSnapshot()
     }
 
     /** Unselects all affordances from the slot with the given ID. */
@@ -75,6 +78,8 @@
         client.deleteAllSelections(
             slotId = slotId,
         )
+
+        snapshotRestorer.get().storeSnapshot()
     }
 
     /** Returns a [Drawable] for the given resource ID, from the system UI package. */
diff --git a/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordanceSnapshotRestorer.kt b/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordanceSnapshotRestorer.kt
new file mode 100644
index 0000000..cb2dbdc
--- /dev/null
+++ b/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordanceSnapshotRestorer.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2022 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.picker.quickaffordance.domain.interactor
+
+import com.android.systemui.shared.customization.data.content.CustomizationProviderClient
+import com.android.wallpaper.picker.undo.domain.interactor.SnapshotRestorer
+import com.android.wallpaper.picker.undo.shared.model.RestorableSnapshot
+
+/** Handles state restoration for the quick affordances system. */
+class KeyguardQuickAffordanceSnapshotRestorer(
+    private val interactor: KeyguardQuickAffordancePickerInteractor,
+    private val client: CustomizationProviderClient,
+) : SnapshotRestorer {
+
+    private lateinit var snapshotUpdater: (RestorableSnapshot) -> Unit
+
+    suspend fun storeSnapshot() {
+        snapshotUpdater(snapshot())
+    }
+
+    override suspend fun setUpSnapshotRestorer(
+        updater: (RestorableSnapshot) -> Unit,
+    ): RestorableSnapshot {
+        snapshotUpdater = updater
+        return snapshot()
+    }
+
+    override suspend fun restoreToSnapshot(snapshot: RestorableSnapshot) {
+        val selections: List<Pair<String, String>> =
+            checkNotNull(snapshot.args[KEY_SELECTIONS]).split(SELECTION_SEPARATOR).map { selection
+                ->
+                val (slotId, affordanceId) = selection.split(SLOT_AFFORDANCE_SEPARATOR)
+                slotId to affordanceId
+            }
+
+        selections.forEach { (slotId, affordanceId) ->
+            interactor.select(
+                slotId,
+                affordanceId,
+            )
+        }
+    }
+
+    private suspend fun snapshot(): RestorableSnapshot {
+        return RestorableSnapshot(
+            mapOf(
+                KEY_SELECTIONS to
+                    client.querySelections().joinToString(SELECTION_SEPARATOR) { selection ->
+                        "${selection.slotId}${SLOT_AFFORDANCE_SEPARATOR}${selection.affordanceId}"
+                    }
+            )
+        )
+    }
+
+    companion object {
+        private const val KEY_SELECTIONS = "selections"
+        private const val SLOT_AFFORDANCE_SEPARATOR = "->"
+        private const val SELECTION_SEPARATOR = "|"
+    }
+}
diff --git a/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordanceEnablementDialogBinder.kt b/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordanceEnablementDialogBinder.kt
new file mode 100644
index 0000000..809e09d
--- /dev/null
+++ b/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordanceEnablementDialogBinder.kt
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2022 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.picker.quickaffordance.ui.binder
+
+import android.view.View
+import android.widget.ImageView
+import android.widget.TextView
+import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordancePickerViewModel
+import com.android.wallpaper.R
+
+object KeyguardQuickAffordanceEnablementDialogBinder {
+
+    fun bind(
+        view: View,
+        viewModel: KeyguardQuickAffordancePickerViewModel.DialogViewModel,
+        onDismissed: () -> Unit,
+    ) {
+        view.requireViewById<ImageView>(R.id.icon).setImageDrawable(viewModel.icon)
+        view.requireViewById<TextView>(R.id.title).text =
+            view.context.getString(
+                R.string.keyguard_affordance_enablement_dialog_title,
+                viewModel.name
+            )
+        view.requireViewById<TextView>(R.id.message).text = buildString {
+            viewModel.instructions.forEachIndexed { index, instruction ->
+                append(instruction)
+                if (index < viewModel.instructions.size - 1) {
+                    append("\n")
+                }
+            }
+        }
+        view.requireViewById<TextView>(R.id.button).apply {
+            text = viewModel.actionText
+            setOnClickListener {
+                if (viewModel.intent != null) {
+                    view.context.startActivity(viewModel.intent)
+                } else {
+                    onDismissed()
+                }
+            }
+        }
+    }
+}
diff --git a/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePickerBinder.kt b/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePickerBinder.kt
index 62f2e26..389f8f6 100644
--- a/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePickerBinder.kt
+++ b/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePickerBinder.kt
@@ -20,8 +20,8 @@
 import android.app.AlertDialog
 import android.app.Dialog
 import android.content.Context
-import android.content.DialogInterface
 import android.graphics.Rect
+import android.view.LayoutInflater
 import android.view.View
 import androidx.core.view.ViewCompat
 import androidx.lifecycle.Lifecycle
@@ -88,7 +88,6 @@
                                     onDismissed = viewModel::onDialogDismissed
                                 )
                             } else {
-                                dialog?.dismiss()
                                 null
                             }
                     }
@@ -102,34 +101,21 @@
         request: KeyguardQuickAffordancePickerViewModel.DialogViewModel,
         onDismissed: () -> Unit,
     ): Dialog {
-        // TODO(b/254858701): make this dialog prettier and probably use a DialogFragment.
-        return AlertDialog.Builder(context, context.themeResId)
-            .setTitle(context.getString(R.string.keyguard_affordance_enablement_dialog_title))
-            .setMessage(
-                buildString {
-                    append(request.instructionHeader)
-                    if (request.instructions.isNotEmpty()) {
-                        append("\n")
-                    }
-                    request.instructions.forEachIndexed { index, instruction ->
-                        append(instruction)
-                        if (index < request.instructions.size - 1) {
-                            append("\n")
-                        }
-                    }
-                }
-            )
-            .setOnDismissListener { onDismissed.invoke() }
-            .setPositiveButton(
-                request.actionText,
-                if (request.intent != null) {
-                    DialogInterface.OnClickListener { _, _ ->
-                        context.startActivity(request.intent)
-                    }
-                } else {
-                    DialogInterface.OnClickListener { _, _ -> onDismissed() }
-                },
-            )
+        val view: View =
+            LayoutInflater.from(context)
+                .inflate(
+                    R.layout.keyguard_quick_affordance_enablement_dialog,
+                    null,
+                )
+        KeyguardQuickAffordanceEnablementDialogBinder.bind(
+            view = view,
+            viewModel = request,
+            onDismissed = onDismissed,
+        )
+
+        return AlertDialog.Builder(context, R.style.LightDialogTheme)
+            .setView(view)
+            .setOnDismissListener { onDismissed() }
             .show()
     }
 
diff --git a/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePreviewBinder.kt b/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePreviewBinder.kt
index 0af6bf4..c8fea0f 100644
--- a/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePreviewBinder.kt
+++ b/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePreviewBinder.kt
@@ -18,29 +18,16 @@
 package com.android.customization.picker.quickaffordance.ui.binder
 
 import android.app.Activity
-import android.content.Intent
 import android.os.Bundle
-import android.service.wallpaper.WallpaperService
-import android.view.SurfaceView
 import androidx.cardview.widget.CardView
 import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.LifecycleEventObserver
 import androidx.lifecycle.LifecycleOwner
 import androidx.lifecycle.flowWithLifecycle
 import androidx.lifecycle.lifecycleScope
 import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordancePickerViewModel
 import com.android.systemui.shared.quickaffordance.shared.model.KeyguardQuickAffordancePreviewConstants
 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 com.android.wallpaper.picker.WorkspaceSurfaceHolderCallback
-import com.android.wallpaper.util.PreviewUtils
-import com.android.wallpaper.util.ResourceUtils
-import com.android.wallpaper.util.WallpaperConnection
-import com.android.wallpaper.util.WallpaperSurfaceCallback
-import java.util.concurrent.CompletableFuture
+import com.android.wallpaper.picker.customization.ui.binder.ScreenPreviewBinder
 import kotlinx.coroutines.launch
 
 object KeyguardQuickAffordancePreviewBinder {
@@ -52,125 +39,25 @@
         previewView: CardView,
         viewModel: KeyguardQuickAffordancePickerViewModel,
         lifecycleOwner: LifecycleOwner,
-        wallpaperInfoProvider: suspend () -> WallpaperInfo?,
     ) {
-        val workspaceSurface: SurfaceView = previewView.requireViewById(R.id.workspace_surface)
-        val wallpaperSurface: SurfaceView = previewView.requireViewById(R.id.wallpaper_surface)
+        val binding =
+            ScreenPreviewBinder.bind(
+                activity = activity,
+                previewView = previewView,
+                viewModel = viewModel.preview,
+                lifecycleOwner = lifecycleOwner,
+            )
 
-        previewView.radius =
-            previewView.resources.getDimension(R.dimen.wallpaper_picker_entry_card_corner_radius)
         previewView.contentDescription =
             previewView.context.getString(
                 R.string.lockscreen_wallpaper_preview_card_content_description
             )
 
-        var previewSurfaceCallback: WorkspaceSurfaceHolderCallback? = null
-        var wallpaperSurfaceCallback: WallpaperSurfaceCallback? = null
-        var wallpaperConnection: WallpaperConnection? = null
-        var wallpaperInfo: WallpaperInfo? = null
-
-        lifecycleOwner.lifecycle.addObserver(
-            LifecycleEventObserver { _, event ->
-                when (event) {
-                    Lifecycle.Event.ON_CREATE -> {
-                        previewSurfaceCallback =
-                            WorkspaceSurfaceHolderCallback(
-                                workspaceSurface,
-                                PreviewUtils(
-                                    context = previewView.context,
-                                    authority =
-                                        previewView.context.getString(
-                                            R.string.lock_screen_preview_provider_authority
-                                        ),
-                                ),
-                                Bundle().apply {
-                                    putString(
-                                        KeyguardQuickAffordancePreviewConstants
-                                            .KEY_INITIALLY_SELECTED_SLOT_ID,
-                                        viewModel.selectedSlotId.value,
-                                    )
-                                },
-                            )
-                        workspaceSurface.holder.addCallback(previewSurfaceCallback)
-                        workspaceSurface.setZOrderMediaOverlay(true)
-
-                        wallpaperSurfaceCallback =
-                            WallpaperSurfaceCallback(
-                                previewView.context,
-                                previewView,
-                                wallpaperSurface,
-                                CompletableFuture.completedFuture(
-                                    WallpaperInfo.ColorInfo(
-                                        /* wallpaperColors= */ null,
-                                        ResourceUtils.getColorAttr(
-                                            previewView.context,
-                                            android.R.attr.colorSecondary,
-                                        )
-                                    )
-                                ),
-                            ) {
-                                maybeLoadThumbnail(
-                                    activity = activity,
-                                    wallpaperInfo = wallpaperInfo,
-                                    surfaceCallback = wallpaperSurfaceCallback,
-                                )
-                            }
-                        wallpaperSurface.holder.addCallback(wallpaperSurfaceCallback)
-                        wallpaperSurface.setZOrderMediaOverlay(true)
-                    }
-                    Lifecycle.Event.ON_DESTROY -> {
-                        workspaceSurface.holder.removeCallback(previewSurfaceCallback)
-                        previewSurfaceCallback?.cleanUp()
-                        wallpaperSurface.holder.removeCallback(wallpaperSurfaceCallback)
-                        wallpaperSurfaceCallback?.cleanUp()
-                    }
-                    Lifecycle.Event.ON_RESUME -> {
-                        lifecycleOwner.lifecycleScope.launch {
-                            wallpaperInfo = wallpaperInfoProvider()
-                            (wallpaperInfo as? LiveWallpaperInfo)?.let { liveWallpaperInfo ->
-                                if (WallpaperConnection.isPreviewAvailable()) {
-                                    wallpaperConnection =
-                                        WallpaperConnection(
-                                            Intent(WallpaperService.SERVICE_INTERFACE).apply {
-                                                setClassName(
-                                                    liveWallpaperInfo.wallpaperComponent
-                                                        .packageName,
-                                                    liveWallpaperInfo.wallpaperComponent.serviceName
-                                                )
-                                            },
-                                            previewView.context,
-                                            null,
-                                            wallpaperSurface,
-                                            null,
-                                        )
-
-                                    wallpaperConnection?.connect()
-                                    wallpaperConnection?.setVisibility(true)
-                                }
-                            }
-                            maybeLoadThumbnail(
-                                activity = activity,
-                                wallpaperInfo = wallpaperInfo,
-                                surfaceCallback = wallpaperSurfaceCallback,
-                            )
-                        }
-                    }
-                    Lifecycle.Event.ON_PAUSE -> {
-                        wallpaperConnection?.setVisibility(false)
-                    }
-                    Lifecycle.Event.ON_STOP -> {
-                        wallpaperConnection?.disconnect()
-                    }
-                    else -> Unit
-                }
-            }
-        )
-
         lifecycleOwner.lifecycleScope.launch {
             viewModel.selectedSlotId
                 .flowWithLifecycle(lifecycleOwner.lifecycle, Lifecycle.State.STARTED)
                 .collect { slotId ->
-                    previewSurfaceCallback?.send(
+                    binding.sendMessage(
                         KeyguardQuickAffordancePreviewConstants.MESSAGE_ID_SLOT_SELECTED,
                         Bundle().apply {
                             putString(KeyguardQuickAffordancePreviewConstants.KEY_SLOT_ID, slotId)
@@ -179,24 +66,4 @@
                 }
         }
     }
-
-    private fun maybeLoadThumbnail(
-        activity: Activity,
-        wallpaperInfo: WallpaperInfo?,
-        surfaceCallback: WallpaperSurfaceCallback?,
-    ) {
-        if (wallpaperInfo == null || surfaceCallback == null) {
-            return
-        }
-
-        val imageView = surfaceCallback.homeImageWallpaper
-        val thumbAsset: Asset = BitmapCachingAsset(activity, wallpaperInfo.getThumbAsset(activity))
-        if (imageView != null && imageView.drawable == null) {
-            thumbAsset.loadPreviewImage(
-                activity,
-                imageView,
-                ResourceUtils.getColorAttr(activity, android.R.attr.colorSecondary)
-            )
-        }
-    }
 }
diff --git a/src/com/android/customization/picker/quickaffordance/ui/fragment/KeyguardQuickAffordancePickerFragment.kt b/src/com/android/customization/picker/quickaffordance/ui/fragment/KeyguardQuickAffordancePickerFragment.kt
index 251cdca..d2245db 100644
--- a/src/com/android/customization/picker/quickaffordance/ui/fragment/KeyguardQuickAffordancePickerFragment.kt
+++ b/src/com/android/customization/picker/quickaffordance/ui/fragment/KeyguardQuickAffordancePickerFragment.kt
@@ -30,8 +30,8 @@
 import com.android.wallpaper.R
 import com.android.wallpaper.module.InjectorProvider
 import com.android.wallpaper.picker.AppbarFragment
+import com.android.wallpaper.picker.undo.ui.binder.RevertToolbarButtonBinder
 import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.suspendCancellableCoroutine
 
 @OptIn(ExperimentalCoroutinesApi::class)
 class KeyguardQuickAffordancePickerFragment : AppbarFragment() {
@@ -56,28 +56,24 @@
             )
         setUpToolbar(view)
         val injector = InjectorProvider.getInjector() as ThemePickerInjector
-        val wallpaperInfoFactory = injector.getCurrentWallpaperInfoFactory(requireContext())
         val viewModel: KeyguardQuickAffordancePickerViewModel =
             ViewModelProvider(
                     requireActivity(),
                     injector.getKeyguardQuickAffordancePickerViewModelFactory(requireContext()),
                 )
                 .get()
+        setUpToolbarMenu(R.menu.undoable_customization_menu)
+        RevertToolbarButtonBinder.bind(
+            view = view.requireViewById(toolbarId),
+            viewModel = viewModel.undo,
+            lifecycleOwner = this,
+        )
+
         KeyguardQuickAffordancePreviewBinder.bind(
             activity = requireActivity(),
             previewView = view.requireViewById(R.id.preview),
             viewModel = viewModel,
             lifecycleOwner = this,
-            wallpaperInfoProvider = {
-                suspendCancellableCoroutine { continuation ->
-                    wallpaperInfoFactory.createCurrentWallpaperInfos(
-                        { homeWallpaper, lockWallpaper, _ ->
-                            continuation.resume(lockWallpaper ?: homeWallpaper, null)
-                        },
-                        /* forceRefresh= */ true,
-                    )
-                }
-            },
         )
         KeyguardQuickAffordancePickerBinder.bind(
             view = view,
diff --git a/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt b/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt
index 774ff22..d879045 100644
--- a/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt
+++ b/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt
@@ -21,14 +21,21 @@
 import android.content.Context
 import android.content.Intent
 import android.graphics.drawable.Drawable
+import android.os.Bundle
 import androidx.annotation.DrawableRes
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.ViewModelProvider
 import androidx.lifecycle.viewModelScope
 import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor
+import com.android.systemui.shared.customization.data.content.CustomizationProviderContract
 import com.android.systemui.shared.keyguard.shared.model.KeyguardQuickAffordanceSlots
-import com.android.systemui.shared.quickaffordance.data.content.KeyguardQuickAffordanceProviderContract as Contract
+import com.android.systemui.shared.quickaffordance.shared.model.KeyguardQuickAffordancePreviewConstants
 import com.android.wallpaper.R
+import com.android.wallpaper.module.CurrentWallpaperInfoFactory
+import com.android.wallpaper.picker.customization.ui.viewmodel.ScreenPreviewViewModel
+import com.android.wallpaper.picker.undo.domain.interactor.UndoInteractor
+import com.android.wallpaper.picker.undo.ui.viewmodel.UndoViewModel
+import com.android.wallpaper.util.PreviewUtils
 import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.MutableStateFlow
@@ -37,26 +44,64 @@
 import kotlinx.coroutines.flow.combine
 import kotlinx.coroutines.flow.map
 import kotlinx.coroutines.launch
+import kotlinx.coroutines.suspendCancellableCoroutine
 
 /** Models UI state for a lock screen quick affordance picker experience. */
 @OptIn(ExperimentalCoroutinesApi::class)
 class KeyguardQuickAffordancePickerViewModel
 private constructor(
     context: Context,
-    private val interactor: KeyguardQuickAffordancePickerInteractor,
+    private val quickAffordanceInteractor: KeyguardQuickAffordancePickerInteractor,
+    undoInteractor: UndoInteractor,
+    private val wallpaperInfoFactory: CurrentWallpaperInfoFactory,
 ) : ViewModel() {
 
     @SuppressLint("StaticFieldLeak") private val applicationContext = context.applicationContext
 
+    val preview =
+        ScreenPreviewViewModel(
+            previewUtils =
+                PreviewUtils(
+                    context = applicationContext,
+                    authority =
+                        applicationContext.getString(
+                            R.string.lock_screen_preview_provider_authority,
+                        ),
+                ),
+            initialExtrasProvider = {
+                Bundle().apply {
+                    putString(
+                        KeyguardQuickAffordancePreviewConstants.KEY_INITIALLY_SELECTED_SLOT_ID,
+                        selectedSlotId.value,
+                    )
+                }
+            },
+            wallpaperInfoProvider = {
+                suspendCancellableCoroutine { continuation ->
+                    wallpaperInfoFactory.createCurrentWallpaperInfos(
+                        { homeWallpaper, lockWallpaper, _ ->
+                            continuation.resume(lockWallpaper ?: homeWallpaper, null)
+                        },
+                        /* forceRefresh= */ true,
+                    )
+                }
+            },
+        )
+
+    val undo: UndoViewModel =
+        UndoViewModel(
+            interactor = undoInteractor,
+        )
+
     private val _selectedSlotId = MutableStateFlow<String?>(null)
     val selectedSlotId: StateFlow<String?> = _selectedSlotId.asStateFlow()
 
     /** View-models for each slot, keyed by slot ID. */
     val slots: Flow<Map<String, KeyguardQuickAffordanceSlotViewModel>> =
         combine(
-            interactor.slots,
-            interactor.affordances,
-            interactor.selections,
+            quickAffordanceInteractor.slots,
+            quickAffordanceInteractor.affordances,
+            quickAffordanceInteractor.selections,
             selectedSlotId,
         ) { slots, affordances, selections, selectedSlotIdOrNull ->
             slots
@@ -102,9 +147,9 @@
     /** The list of all available quick affordances for the selected slot. */
     val quickAffordances: Flow<List<KeyguardQuickAffordanceViewModel>> =
         combine(
-            interactor.slots,
-            interactor.affordances,
-            interactor.selections,
+            quickAffordanceInteractor.slots,
+            quickAffordanceInteractor.affordances,
+            quickAffordanceInteractor.selections,
             selectedSlotId,
         ) { slots, affordances, selections, selectedSlotIdOrNull ->
             val selectedSlot =
@@ -122,8 +167,9 @@
             ) +
                 affordances.map { affordance ->
                     val isSelected = selectedAffordanceIds.contains(affordance.id)
+                    val affordanceIcon = getAffordanceIcon(affordance.iconResourceId)
                     KeyguardQuickAffordanceViewModel(
-                        icon = getAffordanceIcon(affordance.iconResourceId),
+                        icon = affordanceIcon,
                         contentDescription = affordance.name,
                         isSelected = isSelected,
                         onClicked =
@@ -131,12 +177,12 @@
                                 {
                                     viewModelScope.launch {
                                         if (isSelected) {
-                                            interactor.unselect(
+                                            quickAffordanceInteractor.unselect(
                                                 slotId = selectedSlot.id,
                                                 affordanceId = affordance.id,
                                             )
                                         } else {
-                                            interactor.select(
+                                            quickAffordanceInteractor.select(
                                                 slotId = selectedSlot.id,
                                                 affordanceId = affordance.id,
                                             )
@@ -146,13 +192,9 @@
                             } else {
                                 {
                                     showEnablementDialog(
-                                        instructionHeader =
-                                            affordance.enablementInstructions.first(),
-                                        instructions =
-                                            affordance.enablementInstructions.subList(
-                                                1,
-                                                affordance.enablementInstructions.size
-                                            ),
+                                        icon = affordanceIcon,
+                                        name = affordance.name,
+                                        instructions = affordance.enablementInstructions,
                                         actionText = affordance.enablementActionText,
                                         actionComponentName =
                                             affordance.enablementActionComponentName,
@@ -204,14 +246,16 @@
     }
 
     private fun showEnablementDialog(
-        instructionHeader: String,
+        icon: Drawable,
+        name: String,
         instructions: List<String>,
         actionText: String?,
         actionComponentName: String?,
     ) {
         _dialog.value =
             DialogViewModel(
-                instructionHeader = instructionHeader,
+                icon = icon,
+                name = name,
                 instructions = instructions,
                 actionText = actionText
                         ?: applicationContext.getString(
@@ -229,7 +273,9 @@
         return KeyguardQuickAffordanceViewModel.none(
             context = applicationContext,
             isSelected = isSelected,
-            onSelected = { viewModelScope.launch { interactor.unselectAll(slotId) } },
+            onSelected = {
+                viewModelScope.launch { quickAffordanceInteractor.unselectAll(slotId) }
+            },
         )
     }
 
@@ -246,7 +292,7 @@
     }
 
     private suspend fun getAffordanceIcon(@DrawableRes iconResourceId: Int): Drawable {
-        return interactor.getAffordanceIcon(iconResourceId)
+        return quickAffordanceInteractor.getAffordanceIcon(iconResourceId)
     }
 
     private fun String?.toIntent(): Intent? {
@@ -254,11 +300,15 @@
             return null
         }
 
-        val splitUp = split(Contract.AffordanceTable.COMPONENT_NAME_SEPARATOR)
+        val splitUp =
+            split(
+                CustomizationProviderContract.LockScreenQuickAffordances.AffordanceTable
+                    .COMPONENT_NAME_SEPARATOR
+            )
         check(splitUp.size == 1 || splitUp.size == 2) {
             "Illegal component name \"$this\". Must be either just an action or a package and an" +
                 " action separated by a" +
-                " \"${Contract.AffordanceTable.COMPONENT_NAME_SEPARATOR}\"!"
+                " \"${CustomizationProviderContract.LockScreenQuickAffordances.AffordanceTable.COMPONENT_NAME_SEPARATOR}\"!"
         }
 
         return Intent(splitUp.last()).apply {
@@ -270,8 +320,11 @@
 
     /** Encapsulates a request to show a dialog. */
     data class DialogViewModel(
-        /** The header for the instructions section. */
-        val instructionHeader: String,
+        /** An icon to show. */
+        val icon: Drawable,
+
+        /** Name of the affordance. */
+        val name: String,
 
         /** The set of instructions to show below the header. */
         val instructions: List<String>,
@@ -318,13 +371,17 @@
 
     class Factory(
         private val context: Context,
-        private val interactor: KeyguardQuickAffordancePickerInteractor,
+        private val quickAffordanceInteractor: KeyguardQuickAffordancePickerInteractor,
+        private val undoInteractor: UndoInteractor,
+        private val wallpaperInfoFactory: CurrentWallpaperInfoFactory,
     ) : ViewModelProvider.Factory {
         override fun <T : ViewModel> create(modelClass: Class<T>): T {
             @Suppress("UNCHECKED_CAST")
             return KeyguardQuickAffordancePickerViewModel(
                 context = context,
-                interactor = interactor,
+                quickAffordanceInteractor = quickAffordanceInteractor,
+                undoInteractor = undoInteractor,
+                wallpaperInfoFactory = wallpaperInfoFactory,
             )
                 as T
         }
diff --git a/src_override/com/android/wallpaper/config/Flags.java b/src_override/com/android/wallpaper/config/Flags.java
index 42731de..d35d88f 100644
--- a/src_override/com/android/wallpaper/config/Flags.java
+++ b/src_override/com/android/wallpaper/config/Flags.java
@@ -16,5 +16,4 @@
 package com.android.wallpaper.config;
 
 public class Flags extends BaseFlags {
-    public static boolean enableCustomClocks = false;
 }
diff --git a/tests/Android.bp b/tests/Android.bp
new file mode 100644
index 0000000..9fed740
--- /dev/null
+++ b/tests/Android.bp
@@ -0,0 +1,47 @@
+// Copyright (C) 2022 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.
+//
+
+//
+// Build rule for WallpaperPicker2 tests
+//
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+android_test {
+    name: "ThemePickerTests",
+
+    defaults: ["ThemePicker_defaults"],
+    srcs: [
+        "src/**/*.java",
+        "src/**/*.kt",
+    ],
+    static_libs: [
+        "WallpaperPicker2TestLib",
+        "androidx.test.rules",
+        "junit",
+        "kotlinx_coroutines_test",
+        "truth-prebuilt",
+    ],
+    libs: [
+        "android.test.runner",
+        "android.test.base",
+        "android.test.mock",
+    ],
+
+    kotlincflags: ["-Xjvm-default=enable"],
+    platform_apis: true,
+    test_suites: ["device-tests"],
+}
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
new file mode 100644
index 0000000..2fd6b3f
--- /dev/null
+++ b/tests/AndroidManifest.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2022 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.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.wallpaper">
+
+    <application>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
+        android:targetPackage="com.android.wallpaper"
+        android:label="Tests for ThemePicker" />
+
+</manifest>
diff --git a/tests/AndroidTest.xml b/tests/AndroidTest.xml
new file mode 100644
index 0000000..be2119b
--- /dev/null
+++ b/tests/AndroidTest.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2022 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.
+-->
+<configuration description="Runs Tests for ThemePicker.">
+    <target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup">
+        <option name="test-file-name" value="ThemePickerTests.apk" />
+    </target_preparer>
+
+    <option name="test-suite-tag" value="apct" />
+    <option name="test-tag" value="ThemePickerTests" />
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="package" value="com.android.wallpaper" />
+        <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
+        <option name="hidden-api-checks" value="false"/>
+    </test>
+</configuration>
diff --git a/tests/src/com/android/customization/model/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepositoryTest.kt b/tests/src/com/android/customization/model/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepositoryTest.kt
index 4a88f3b..3f22ced 100644
--- a/tests/src/com/android/customization/model/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepositoryTest.kt
+++ b/tests/src/com/android/customization/model/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepositoryTest.kt
@@ -19,7 +19,8 @@
 
 import androidx.test.filters.SmallTest
 import com.android.customization.picker.quickaffordance.data.repository.KeyguardQuickAffordancePickerRepository
-import com.android.systemui.shared.quickaffordance.data.content.FakeKeyguardQuickAffordanceProviderClient
+import com.android.systemui.shared.customization.data.content.CustomizationProviderContract
+import com.android.systemui.shared.customization.data.content.FakeCustomizationProviderClient
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -44,11 +45,11 @@
     private lateinit var underTest: KeyguardQuickAffordancePickerRepository
 
     private lateinit var testScope: TestScope
-    private lateinit var client: FakeKeyguardQuickAffordanceProviderClient
+    private lateinit var client: FakeCustomizationProviderClient
 
     @Before
     fun setUp() {
-        client = FakeKeyguardQuickAffordanceProviderClient()
+        client = FakeCustomizationProviderClient()
         val coroutineDispatcher = UnconfinedTestDispatcher()
         testScope = TestScope(coroutineDispatcher)
         Dispatchers.setMain(coroutineDispatcher)
@@ -69,10 +70,8 @@
     fun `isFeatureEnabled - enabled`() =
         testScope.runTest {
             client.setFlag(
-                com.android.systemui.shared.quickaffordance.data.content
-                    .KeyguardQuickAffordanceProviderContract
-                    .FlagsTable
-                    .FLAG_NAME_FEATURE_ENABLED,
+                CustomizationProviderContract.FlagsTable
+                    .FLAG_NAME_CUSTOM_LOCK_SCREEN_QUICK_AFFORDANCES_ENABLED,
                 true,
             )
             val values = mutableListOf<Boolean>()
@@ -87,10 +86,8 @@
     fun `isFeatureEnabled - not enabled`() =
         testScope.runTest {
             client.setFlag(
-                com.android.systemui.shared.quickaffordance.data.content
-                    .KeyguardQuickAffordanceProviderContract
-                    .FlagsTable
-                    .FLAG_NAME_FEATURE_ENABLED,
+                CustomizationProviderContract.FlagsTable
+                    .FLAG_NAME_CUSTOM_LOCK_SCREEN_QUICK_AFFORDANCES_ENABLED,
                 false,
             )
             val values = mutableListOf<Boolean>()
diff --git a/tests/src/com/android/customization/model/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractorTest.kt b/tests/src/com/android/customization/model/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractorTest.kt
index d8a136d..9a2a0af 100644
--- a/tests/src/com/android/customization/model/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractorTest.kt
+++ b/tests/src/com/android/customization/model/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractorTest.kt
@@ -20,16 +20,17 @@
 import androidx.test.filters.SmallTest
 import com.android.customization.picker.quickaffordance.data.repository.KeyguardQuickAffordancePickerRepository
 import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor
+import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordanceSnapshotRestorer
 import com.android.customization.picker.quickaffordance.shared.model.KeyguardQuickAffordancePickerSelectionModel
+import com.android.systemui.shared.customization.data.content.FakeCustomizationProviderClient
 import com.android.systemui.shared.keyguard.shared.model.KeyguardQuickAffordanceSlots
-import com.android.systemui.shared.quickaffordance.data.content.FakeKeyguardQuickAffordanceProviderClient
+import com.android.wallpaper.testing.collectLastValue
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.flow.toList
-import kotlinx.coroutines.launch
+import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.test.StandardTestDispatcher
 import kotlinx.coroutines.test.TestScope
-import kotlinx.coroutines.test.UnconfinedTestDispatcher
 import kotlinx.coroutines.test.resetMain
 import kotlinx.coroutines.test.runTest
 import kotlinx.coroutines.test.setMain
@@ -47,22 +48,29 @@
     private lateinit var underTest: KeyguardQuickAffordancePickerInteractor
 
     private lateinit var testScope: TestScope
-    private lateinit var client: FakeKeyguardQuickAffordanceProviderClient
+    private lateinit var client: FakeCustomizationProviderClient
 
     @Before
     fun setUp() {
-        val coroutineDispatcher = UnconfinedTestDispatcher()
-        testScope = TestScope(coroutineDispatcher)
-        Dispatchers.setMain(coroutineDispatcher)
-        client = FakeKeyguardQuickAffordanceProviderClient()
+        val testDispatcher = StandardTestDispatcher()
+        testScope = TestScope(testDispatcher)
+        Dispatchers.setMain(testDispatcher)
+        client = FakeCustomizationProviderClient()
         underTest =
             KeyguardQuickAffordancePickerInteractor(
                 repository =
                     KeyguardQuickAffordancePickerRepository(
                         client = client,
-                        backgroundDispatcher = coroutineDispatcher,
+                        backgroundDispatcher = testDispatcher,
                     ),
                 client = client,
+                snapshotRestorer = {
+                    KeyguardQuickAffordanceSnapshotRestorer(
+                            interactor = underTest,
+                            client = client,
+                        )
+                        .apply { runBlocking { setUpSnapshotRestorer {} } }
+                },
             )
     }
 
@@ -74,85 +82,76 @@
     @Test
     fun select() =
         testScope.runTest {
-            val selections = mutableListOf<List<KeyguardQuickAffordancePickerSelectionModel>>()
-            val job = launch { underTest.selections.toList(selections) }
+            val selections = collectLastValue(underTest.selections)
 
             underTest.select(
                 slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START,
-                affordanceId = FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_1,
+                affordanceId = FakeCustomizationProviderClient.AFFORDANCE_1,
             )
-            assertThat(selections.last())
+            assertThat(selections())
                 .isEqualTo(
                     listOf(
                         KeyguardQuickAffordancePickerSelectionModel(
                             slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START,
-                            affordanceId = FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_1,
+                            affordanceId = FakeCustomizationProviderClient.AFFORDANCE_1,
                         ),
                     )
                 )
 
             underTest.select(
                 slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START,
-                affordanceId = FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_2,
+                affordanceId = FakeCustomizationProviderClient.AFFORDANCE_2,
             )
-            assertThat(selections.last())
+            assertThat(selections())
                 .isEqualTo(
                     listOf(
                         KeyguardQuickAffordancePickerSelectionModel(
                             slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START,
-                            affordanceId = FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_2,
+                            affordanceId = FakeCustomizationProviderClient.AFFORDANCE_2,
                         ),
                     )
                 )
-
-            job.cancel()
         }
 
     @Test
     fun unselect() =
         testScope.runTest {
-            val selections = mutableListOf<List<KeyguardQuickAffordancePickerSelectionModel>>()
-            val job = launch { underTest.selections.toList(selections) }
+            val selections = collectLastValue(underTest.selections)
             underTest.select(
                 slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START,
-                affordanceId = FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_1,
+                affordanceId = FakeCustomizationProviderClient.AFFORDANCE_1,
             )
 
             underTest.unselect(
                 slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START,
-                affordanceId = FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_1,
+                affordanceId = FakeCustomizationProviderClient.AFFORDANCE_1,
             )
 
-            assertThat(selections.last()).isEmpty()
-
-            job.cancel()
+            assertThat(selections()).isEmpty()
         }
 
     @Test
     fun unselectAll() =
         testScope.runTest {
             client.setSlotCapacity(KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END, 3)
-            val selections = mutableListOf<List<KeyguardQuickAffordancePickerSelectionModel>>()
-            val job = launch { underTest.selections.toList(selections) }
+            val selections = collectLastValue(underTest.selections)
             underTest.select(
                 slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END,
-                affordanceId = FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_1,
+                affordanceId = FakeCustomizationProviderClient.AFFORDANCE_1,
             )
             underTest.select(
                 slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END,
-                affordanceId = FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_2,
+                affordanceId = FakeCustomizationProviderClient.AFFORDANCE_2,
             )
             underTest.select(
                 slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END,
-                affordanceId = FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_3,
+                affordanceId = FakeCustomizationProviderClient.AFFORDANCE_3,
             )
 
             underTest.unselectAll(
                 slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END,
             )
 
-            assertThat(selections.last()).isEmpty()
-
-            job.cancel()
+            assertThat(selections()).isEmpty()
         }
 }
diff --git a/tests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt b/tests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt
index d446e1b..7a54a4b 100644
--- a/tests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt
+++ b/tests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt
@@ -22,21 +22,26 @@
 import androidx.test.platform.app.InstrumentationRegistry
 import com.android.customization.picker.quickaffordance.data.repository.KeyguardQuickAffordancePickerRepository
 import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor
+import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordanceSnapshotRestorer
 import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordancePickerViewModel
 import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordanceSlotViewModel
 import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordanceSummaryViewModel
 import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordanceViewModel
+import com.android.systemui.shared.customization.data.content.CustomizationProviderClient
+import com.android.systemui.shared.customization.data.content.FakeCustomizationProviderClient
 import com.android.systemui.shared.keyguard.shared.model.KeyguardQuickAffordanceSlots
-import com.android.systemui.shared.quickaffordance.data.content.FakeKeyguardQuickAffordanceProviderClient
-import com.android.systemui.shared.quickaffordance.data.content.KeyguardQuickAffordanceProviderClient
+import com.android.wallpaper.picker.undo.data.repository.UndoRepository
+import com.android.wallpaper.picker.undo.domain.interactor.UndoInteractor
+import com.android.wallpaper.testing.FAKE_RESTORERS
+import com.android.wallpaper.testing.TestCurrentWallpaperInfoFactory
+import com.android.wallpaper.testing.collectLastValue
 import com.google.common.truth.Truth.assertThat
 import com.google.common.truth.Truth.assertWithMessage
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.flow.toList
-import kotlinx.coroutines.launch
+import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.test.StandardTestDispatcher
 import kotlinx.coroutines.test.TestScope
-import kotlinx.coroutines.test.UnconfinedTestDispatcher
 import kotlinx.coroutines.test.resetMain
 import kotlinx.coroutines.test.runTest
 import kotlinx.coroutines.test.setMain
@@ -55,28 +60,45 @@
 
     private lateinit var context: Context
     private lateinit var testScope: TestScope
-    private lateinit var client: FakeKeyguardQuickAffordanceProviderClient
+    private lateinit var client: FakeCustomizationProviderClient
+    private lateinit var quickAffordanceInteractor: KeyguardQuickAffordancePickerInteractor
 
     @Before
     fun setUp() {
         context = InstrumentationRegistry.getInstrumentation().targetContext
-        val coroutineDispatcher = UnconfinedTestDispatcher()
-        testScope = TestScope(coroutineDispatcher)
-        Dispatchers.setMain(coroutineDispatcher)
-        client = FakeKeyguardQuickAffordanceProviderClient()
+        val testDispatcher = StandardTestDispatcher()
+        testScope = TestScope(testDispatcher)
+        Dispatchers.setMain(testDispatcher)
+        client = FakeCustomizationProviderClient()
 
+        quickAffordanceInteractor =
+            KeyguardQuickAffordancePickerInteractor(
+                repository =
+                    KeyguardQuickAffordancePickerRepository(
+                        client = client,
+                        backgroundDispatcher = testDispatcher,
+                    ),
+                client = client,
+                snapshotRestorer = {
+                    KeyguardQuickAffordanceSnapshotRestorer(
+                            interactor = quickAffordanceInteractor,
+                            client = client,
+                        )
+                        .apply { runBlocking { setUpSnapshotRestorer {} } }
+                },
+            )
+        val undoInteractor =
+            UndoInteractor(
+                scope = testScope.backgroundScope,
+                repository = UndoRepository(),
+                restorerByOwnerId = FAKE_RESTORERS,
+            )
         underTest =
             KeyguardQuickAffordancePickerViewModel.Factory(
                     context = context,
-                    interactor =
-                        KeyguardQuickAffordancePickerInteractor(
-                            repository =
-                                KeyguardQuickAffordancePickerRepository(
-                                    client = client,
-                                    backgroundDispatcher = coroutineDispatcher,
-                                ),
-                            client = client,
-                        ),
+                    quickAffordanceInteractor = quickAffordanceInteractor,
+                    undoInteractor = undoInteractor,
+                    wallpaperInfoFactory = TestCurrentWallpaperInfoFactory(context),
                 )
                 .create(KeyguardQuickAffordancePickerViewModel::class.java)
     }
@@ -89,23 +111,18 @@
     @Test
     fun `Select an affordance for each side`() =
         testScope.runTest {
-            val slots = mutableListOf<Map<String, KeyguardQuickAffordanceSlotViewModel>>()
-            val quickAffordances = mutableListOf<List<KeyguardQuickAffordanceViewModel>>()
-
-            val jobs = buildList {
-                add(launch { underTest.slots.toList(slots) })
-                add(launch { underTest.quickAffordances.toList(quickAffordances) })
-            }
+            val slots = collectLastValue(underTest.slots)
+            val quickAffordances = collectLastValue(underTest.quickAffordances)
 
             // Initially, the first slot is selected with the "none" affordance selected.
             assertPickerUiState(
-                slots = slots.last(),
-                affordances = quickAffordances.last(),
+                slots = slots(),
+                affordances = quickAffordances(),
                 selectedSlotText = "Left button",
                 selectedAffordanceText = "None",
             )
             assertPreviewUiState(
-                slots = slots.last(),
+                slots = slots(),
                 expectedAffordanceNameBySlotId =
                     mapOf(
                         KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START to null,
@@ -114,123 +131,109 @@
             )
 
             // Select "affordance 1" for the first slot.
-            quickAffordances.last()[1].onClicked?.invoke()
+            quickAffordances()?.get(1)?.onClicked?.invoke()
             assertPickerUiState(
-                slots = slots.last(),
-                affordances = quickAffordances.last(),
+                slots = slots(),
+                affordances = quickAffordances(),
                 selectedSlotText = "Left button",
-                selectedAffordanceText = FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_1,
+                selectedAffordanceText = FakeCustomizationProviderClient.AFFORDANCE_1,
             )
             assertPreviewUiState(
-                slots = slots.last(),
+                slots = slots(),
                 expectedAffordanceNameBySlotId =
                     mapOf(
                         KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START to
-                            FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_1,
+                            FakeCustomizationProviderClient.AFFORDANCE_1,
                         KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END to null,
                     ),
             )
 
             // Select an affordance for the second slot.
             // First, switch to the second slot:
-            slots.last()[KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END]?.onClicked?.invoke()
+            slots()?.get(KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END)?.onClicked?.invoke()
             // Second, select the "affordance 3" affordance:
-            quickAffordances.last()[3].onClicked?.invoke()
+            quickAffordances()?.get(3)?.onClicked?.invoke()
             assertPickerUiState(
-                slots = slots.last(),
-                affordances = quickAffordances.last(),
+                slots = slots(),
+                affordances = quickAffordances(),
                 selectedSlotText = "Right button",
-                selectedAffordanceText = FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_3,
+                selectedAffordanceText = FakeCustomizationProviderClient.AFFORDANCE_3,
             )
             assertPreviewUiState(
-                slots = slots.last(),
+                slots = slots(),
                 expectedAffordanceNameBySlotId =
                     mapOf(
                         KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START to
-                            FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_1,
+                            FakeCustomizationProviderClient.AFFORDANCE_1,
                         KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END to
-                            FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_3,
+                            FakeCustomizationProviderClient.AFFORDANCE_3,
                     ),
             )
 
             // Select a different affordance for the second slot.
-            quickAffordances.last()[2].onClicked?.invoke()
+            quickAffordances()?.get(2)?.onClicked?.invoke()
             assertPickerUiState(
-                slots = slots.last(),
-                affordances = quickAffordances.last(),
+                slots = slots(),
+                affordances = quickAffordances(),
                 selectedSlotText = "Right button",
-                selectedAffordanceText = FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_2,
+                selectedAffordanceText = FakeCustomizationProviderClient.AFFORDANCE_2,
             )
             assertPreviewUiState(
-                slots = slots.last(),
+                slots = slots(),
                 expectedAffordanceNameBySlotId =
                     mapOf(
                         KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START to
-                            FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_1,
+                            FakeCustomizationProviderClient.AFFORDANCE_1,
                         KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END to
-                            FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_2,
+                            FakeCustomizationProviderClient.AFFORDANCE_2,
                     ),
             )
-
-            jobs.forEach { it.cancel() }
         }
 
     @Test
     fun `Unselect - AKA selecting the none affordance - on one side`() =
         testScope.runTest {
-            val slots = mutableListOf<Map<String, KeyguardQuickAffordanceSlotViewModel>>()
-            val quickAffordances = mutableListOf<List<KeyguardQuickAffordanceViewModel>>()
-
-            val jobs = buildList {
-                add(launch { underTest.slots.toList(slots) })
-                add(launch { underTest.quickAffordances.toList(quickAffordances) })
-            }
+            val slots = collectLastValue(underTest.slots)
+            val quickAffordances = collectLastValue(underTest.quickAffordances)
 
             // Select "affordance 1" for the first slot.
-            quickAffordances.last()[1].onClicked?.invoke()
+            quickAffordances()?.get(1)?.onClicked?.invoke()
             // Select an affordance for the second slot.
             // First, switch to the second slot:
-            slots.last()[KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END]?.onClicked?.invoke()
+            slots()?.get(KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END)?.onClicked?.invoke()
             // Second, select the "affordance 3" affordance:
-            quickAffordances.last()[3].onClicked?.invoke()
+            quickAffordances()?.get(3)?.onClicked?.invoke()
 
             // Switch back to the first slot:
-            slots.last()[KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START]?.onClicked?.invoke()
+            slots()?.get(KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START)?.onClicked?.invoke()
             // Select the "none" affordance, which is always in position 0:
-            quickAffordances.last()[0].onClicked?.invoke()
+            quickAffordances()?.get(0)?.onClicked?.invoke()
 
             assertPickerUiState(
-                slots = slots.last(),
-                affordances = quickAffordances.last(),
+                slots = slots(),
+                affordances = quickAffordances(),
                 selectedSlotText = "Left button",
                 selectedAffordanceText = "None",
             )
             assertPreviewUiState(
-                slots = slots.last(),
+                slots = slots(),
                 expectedAffordanceNameBySlotId =
                     mapOf(
                         KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START to null,
                         KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END to
-                            FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_3,
+                            FakeCustomizationProviderClient.AFFORDANCE_3,
                     ),
             )
-
-            jobs.forEach { it.cancel() }
         }
 
     @Test
     fun `Show enablement dialog when selecting a disabled affordance`() =
         testScope.runTest {
-            val slots = mutableListOf<Map<String, KeyguardQuickAffordanceSlotViewModel>>()
-            val quickAffordances = mutableListOf<List<KeyguardQuickAffordanceViewModel>>()
-            val dialog = mutableListOf<KeyguardQuickAffordancePickerViewModel.DialogViewModel?>()
+            val slots = collectLastValue(underTest.slots)
+            val quickAffordances = collectLastValue(underTest.quickAffordances)
+            val dialog = collectLastValue(underTest.dialog)
 
-            val jobs = buildList {
-                add(launch { underTest.slots.toList(slots) })
-                add(launch { underTest.quickAffordances.toList(quickAffordances) })
-                add(launch { underTest.dialog.toList(dialog) })
-            }
-            val enablementInstructions = listOf("header", "enablementInstructions")
+            val enablementInstructions = listOf("instruction1", "instruction2")
             val enablementActionText = "enablementActionText"
             val packageName = "packageName"
             val action = "action"
@@ -238,10 +241,10 @@
             // Lets add a disabled affordance to the picker:
             val affordanceIndex =
                 client.addAffordance(
-                    KeyguardQuickAffordanceProviderClient.Affordance(
+                    CustomizationProviderClient.Affordance(
                         id = "disabled",
                         name = "disabled",
-                        iconResourceId = 0,
+                        iconResourceId = 1,
                         isEnabled = false,
                         enablementInstructions = enablementInstructions,
                         enablementActionText = enablementActionText,
@@ -250,129 +253,102 @@
                 )
 
             // Lets try to select that disabled affordance:
-            quickAffordances.last()[affordanceIndex + 1].onClicked?.invoke()
+            quickAffordances()?.get(affordanceIndex + 1)?.onClicked?.invoke()
 
             // We expect there to be a dialog that should be shown:
-            assertThat(dialog.last()?.instructionHeader).isEqualTo(enablementInstructions[0])
-            assertThat(dialog.last()?.instructions)
-                .isEqualTo(enablementInstructions.subList(1, enablementInstructions.size))
-            assertThat(dialog.last()?.actionText).isEqualTo(enablementActionText)
-            assertThat(dialog.last()?.intent?.`package`).isEqualTo(packageName)
-            assertThat(dialog.last()?.intent?.action).isEqualTo(action)
+            assertThat(dialog()?.icon).isEqualTo(FakeCustomizationProviderClient.ICON_1)
+            assertThat(dialog()?.instructions).isEqualTo(enablementInstructions)
+            assertThat(dialog()?.actionText).isEqualTo(enablementActionText)
+            assertThat(dialog()?.intent?.`package`).isEqualTo(packageName)
+            assertThat(dialog()?.intent?.action).isEqualTo(action)
 
             // Once we report that the dialog has been dismissed by the user, we expect there to be
             // no
             // dialog to be shown:
             underTest.onDialogDismissed()
-            assertThat(dialog.last()).isNull()
-
-            jobs.forEach { it.cancel() }
+            assertThat(dialog()).isNull()
         }
 
     @Test
     fun `summary - affordance selected in both bottom-start and bottom-end`() =
         testScope.runTest {
-            val slots = mutableListOf<Map<String, KeyguardQuickAffordanceSlotViewModel>>()
-            val quickAffordances = mutableListOf<List<KeyguardQuickAffordanceViewModel>>()
-            val summary = mutableListOf<KeyguardQuickAffordanceSummaryViewModel>()
-            val jobs = buildList {
-                add(launch { underTest.slots.toList(slots) })
-                add(launch { underTest.quickAffordances.toList(quickAffordances) })
-                add(launch { underTest.summary.toList(summary) })
-            }
+            val slots = collectLastValue(underTest.slots)
+            val quickAffordances = collectLastValue(underTest.quickAffordances)
+            val summary = collectLastValue(underTest.summary)
 
             // Select "affordance 1" for the first slot.
-            quickAffordances.last()[1].onClicked?.invoke()
+            quickAffordances()?.get(1)?.onClicked?.invoke()
             // Select an affordance for the second slot.
             // First, switch to the second slot:
-            slots.last()[KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END]?.onClicked?.invoke()
+            slots()?.get(KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END)?.onClicked?.invoke()
             // Second, select the "affordance 3" affordance:
-            quickAffordances.last()[3].onClicked?.invoke()
+            quickAffordances()?.get(3)?.onClicked?.invoke()
 
-            assertThat(summary.last())
+            assertThat(summary())
                 .isEqualTo(
                     KeyguardQuickAffordanceSummaryViewModel(
                         description =
-                            "${FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_1}," +
-                                " ${FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_3}",
-                        icon1 = FakeKeyguardQuickAffordanceProviderClient.ICON_1,
-                        icon2 = FakeKeyguardQuickAffordanceProviderClient.ICON_3,
+                            "${FakeCustomizationProviderClient.AFFORDANCE_1}," +
+                                " ${FakeCustomizationProviderClient.AFFORDANCE_3}",
+                        icon1 = FakeCustomizationProviderClient.ICON_1,
+                        icon2 = FakeCustomizationProviderClient.ICON_3,
                     )
                 )
-            jobs.forEach { it.cancel() }
         }
 
     @Test
     fun `summary - affordance selected only on bottom-start`() =
         testScope.runTest {
-            val slots = mutableListOf<Map<String, KeyguardQuickAffordanceSlotViewModel>>()
-            val quickAffordances = mutableListOf<List<KeyguardQuickAffordanceViewModel>>()
-            val summary = mutableListOf<KeyguardQuickAffordanceSummaryViewModel>()
-            val jobs = buildList {
-                add(launch { underTest.slots.toList(slots) })
-                add(launch { underTest.quickAffordances.toList(quickAffordances) })
-                add(launch { underTest.summary.toList(summary) })
-            }
+            val slots = collectLastValue(underTest.slots)
+            val quickAffordances = collectLastValue(underTest.quickAffordances)
+            val summary = collectLastValue(underTest.summary)
 
             // Select "affordance 1" for the first slot.
-            quickAffordances.last()[1].onClicked?.invoke()
+            quickAffordances()?.get(1)?.onClicked?.invoke()
 
-            assertThat(summary.last())
+            assertThat(summary())
                 .isEqualTo(
                     KeyguardQuickAffordanceSummaryViewModel(
-                        description = FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_1,
-                        icon1 = FakeKeyguardQuickAffordanceProviderClient.ICON_1,
+                        description = FakeCustomizationProviderClient.AFFORDANCE_1,
+                        icon1 = FakeCustomizationProviderClient.ICON_1,
                         icon2 = null,
                     )
                 )
-            jobs.forEach { it.cancel() }
         }
 
     @Test
     fun `summary - affordance selected only on bottom-end`() =
         testScope.runTest {
-            val slots = mutableListOf<Map<String, KeyguardQuickAffordanceSlotViewModel>>()
-            val quickAffordances = mutableListOf<List<KeyguardQuickAffordanceViewModel>>()
-            val summary = mutableListOf<KeyguardQuickAffordanceSummaryViewModel>()
-            val jobs = buildList {
-                add(launch { underTest.slots.toList(slots) })
-                add(launch { underTest.quickAffordances.toList(quickAffordances) })
-                add(launch { underTest.summary.toList(summary) })
-            }
+            val slots = collectLastValue(underTest.slots)
+            val quickAffordances = collectLastValue(underTest.quickAffordances)
+            val summary = collectLastValue(underTest.summary)
 
             // Select an affordance for the second slot.
             // First, switch to the second slot:
-            slots.last()[KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END]?.onClicked?.invoke()
+            slots()?.get(KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END)?.onClicked?.invoke()
             // Second, select the "affordance 3" affordance:
-            quickAffordances.last()[3].onClicked?.invoke()
+            quickAffordances()?.get(3)?.onClicked?.invoke()
 
-            assertThat(summary.last())
+            assertThat(summary())
                 .isEqualTo(
                     KeyguardQuickAffordanceSummaryViewModel(
-                        description = FakeKeyguardQuickAffordanceProviderClient.AFFORDANCE_3,
+                        description = FakeCustomizationProviderClient.AFFORDANCE_3,
                         icon1 = null,
-                        icon2 = FakeKeyguardQuickAffordanceProviderClient.ICON_3,
+                        icon2 = FakeCustomizationProviderClient.ICON_3,
                     )
                 )
-            jobs.forEach { it.cancel() }
         }
 
     @Test
     fun `summary - no affordances selected`() =
         testScope.runTest {
-            val slots = mutableListOf<Map<String, KeyguardQuickAffordanceSlotViewModel>>()
-            val quickAffordances = mutableListOf<List<KeyguardQuickAffordanceViewModel>>()
-            val summary = mutableListOf<KeyguardQuickAffordanceSummaryViewModel>()
-            val jobs = buildList {
-                add(launch { underTest.slots.toList(slots) })
-                add(launch { underTest.quickAffordances.toList(quickAffordances) })
-                add(launch { underTest.summary.toList(summary) })
-            }
+            val slots = collectLastValue(underTest.slots)
+            val quickAffordances = collectLastValue(underTest.quickAffordances)
+            val summary = collectLastValue(underTest.summary)
 
-            assertThat(summary.last().description).isEqualTo("None")
-            assertThat(summary.last().icon1).isNotNull()
-            assertThat(summary.last().icon2).isNull()
-            jobs.forEach { it.cancel() }
+            assertThat(summary()?.description).isEqualTo("None")
+            assertThat(summary()?.icon1).isNotNull()
+            assertThat(summary()?.icon2).isNull()
         }
 
     /**
@@ -385,8 +361,8 @@
      * @param selectedAffordanceText The text of the affordance that's expected to be selected
      */
     private fun assertPickerUiState(
-        slots: Map<String, KeyguardQuickAffordanceSlotViewModel>,
-        affordances: List<KeyguardQuickAffordanceViewModel>,
+        slots: Map<String, KeyguardQuickAffordanceSlotViewModel>?,
+        affordances: List<KeyguardQuickAffordanceViewModel>?,
         selectedSlotText: String,
         selectedAffordanceText: String,
     ) {
@@ -402,7 +378,8 @@
         )
 
         var foundSelectedAffordance = false
-        affordances.forEach { affordance ->
+        assertThat(affordances).isNotNull()
+        affordances?.forEach { affordance ->
             val nameMatchesSelectedName = affordance.contentDescription == selectedAffordanceText
             assertWithMessage(
                     "Expected affordance with name \"${affordance.contentDescription}\" to have" +
@@ -423,11 +400,11 @@
      * @param isSelected Whether that slot should be selected
      */
     private fun assertSlotTabUiState(
-        slots: Map<String, KeyguardQuickAffordanceSlotViewModel>,
+        slots: Map<String, KeyguardQuickAffordanceSlotViewModel>?,
         slotId: String,
         isSelected: Boolean,
     ) {
-        val viewModel = slots[slotId] ?: error("No slot with ID \"$slotId\"!")
+        val viewModel = slots?.get(slotId) ?: error("No slot with ID \"$slotId\"!")
         assertThat(viewModel.isSelected).isEqualTo(isSelected)
     }
 
@@ -439,10 +416,11 @@
      * slot ID or `null` if it's expected for there to be no affordance for that slot in the preview
      */
     private fun assertPreviewUiState(
-        slots: Map<String, KeyguardQuickAffordanceSlotViewModel>,
+        slots: Map<String, KeyguardQuickAffordanceSlotViewModel>?,
         expectedAffordanceNameBySlotId: Map<String, String?>,
     ) {
-        slots.forEach { (slotId, slotViewModel) ->
+        assertThat(slots).isNotNull()
+        slots?.forEach { (slotId, slotViewModel) ->
             val expectedAffordanceName = expectedAffordanceNameBySlotId[slotId]
             val actualAffordanceName =
                 slotViewModel.selectedQuickAffordances.firstOrNull()?.contentDescription
diff --git a/tests/src/com/android/customization/testing/TestCustomizationInjector.java b/tests/src/com/android/customization/testing/TestCustomizationInjector.java
index 15898c1..d609335 100644
--- a/tests/src/com/android/customization/testing/TestCustomizationInjector.java
+++ b/tests/src/com/android/customization/testing/TestCustomizationInjector.java
@@ -12,14 +12,19 @@
 import com.android.customization.module.ThemesUserEventLogger;
 import com.android.customization.picker.quickaffordance.data.repository.KeyguardQuickAffordancePickerRepository;
 import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor;
-import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordancePickerViewModel;
-import com.android.systemui.shared.quickaffordance.data.content.KeyguardQuickAffordanceProviderClient;
-import com.android.systemui.shared.quickaffordance.data.content.KeyguardQuickAffordanceProviderClientImpl;
+import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordanceSnapshotRestorer;
+import com.android.systemui.shared.customization.data.content.CustomizationProviderClient;
+import com.android.systemui.shared.customization.data.content.CustomizationProviderClientImpl;
+import com.android.wallpaper.config.BaseFlags;
 import com.android.wallpaper.module.DrawableLayerResolver;
 import com.android.wallpaper.module.PackageStatusNotifier;
 import com.android.wallpaper.module.UserEventLogger;
+import com.android.wallpaper.picker.undo.domain.interactor.SnapshotRestorer;
 import com.android.wallpaper.testing.TestInjector;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import kotlinx.coroutines.Dispatchers;
 
 /**
@@ -32,8 +37,9 @@
     private DrawableLayerResolver mDrawableLayerResolver;
     private UserEventLogger mUserEventLogger;
     private KeyguardQuickAffordancePickerInteractor mKeyguardQuickAffordancePickerInteractor;
-    private KeyguardQuickAffordancePickerViewModel.Factory
-            mKeyguardQuickAffordancePickerViewModelFactory;
+    private BaseFlags mFlags;
+    private CustomizationProviderClient mCustomizationProviderClient;
+    private KeyguardQuickAffordanceSnapshotRestorer mKeyguardQuickAffordanceSnapshotRestorer;
 
     @Override
     public CustomizationPreferences getCustomizationPreferences(Context context) {
@@ -83,12 +89,55 @@
     public KeyguardQuickAffordancePickerInteractor getKeyguardQuickAffordancePickerInteractor(
             Context context) {
         if (mKeyguardQuickAffordancePickerInteractor == null) {
-            final KeyguardQuickAffordanceProviderClient client =
-                    new KeyguardQuickAffordanceProviderClientImpl(context, Dispatchers.getIO());
+            final CustomizationProviderClient client =
+                    new CustomizationProviderClientImpl(context, Dispatchers.getIO());
             mKeyguardQuickAffordancePickerInteractor = new KeyguardQuickAffordancePickerInteractor(
                     new KeyguardQuickAffordancePickerRepository(client, Dispatchers.getIO()),
-                    client);
+                    client,
+                    () -> getKeyguardQuickAffordanceSnapshotRestorer(context));
         }
         return mKeyguardQuickAffordancePickerInteractor;
     }
+
+    @Override
+    public BaseFlags getFlags() {
+        if (mFlags == null) {
+            mFlags = new BaseFlags() {};
+        }
+
+        return mFlags;
+    }
+
+    @Override
+    public Map<Integer, SnapshotRestorer> getSnapshotRestorers(Context context) {
+        final Map<Integer, SnapshotRestorer> restorers = new HashMap<>();
+        restorers.put(
+                KEY_QUICK_AFFORDANCE_SNAPSHOT_RESTORER,
+                getKeyguardQuickAffordanceSnapshotRestorer(context));
+        return restorers;
+    }
+
+    /** Returns the {@link CustomizationProviderClient}. */
+    private CustomizationProviderClient getKeyguardQuickAffordancePickerProviderClient(
+            Context context) {
+        if (mCustomizationProviderClient == null) {
+            mCustomizationProviderClient =
+                    new CustomizationProviderClientImpl(context, Dispatchers.getIO());
+        }
+
+        return mCustomizationProviderClient;
+    }
+
+    private KeyguardQuickAffordanceSnapshotRestorer getKeyguardQuickAffordanceSnapshotRestorer(
+            Context context) {
+        if (mKeyguardQuickAffordanceSnapshotRestorer == null) {
+            mKeyguardQuickAffordanceSnapshotRestorer = new KeyguardQuickAffordanceSnapshotRestorer(
+                    getKeyguardQuickAffordancePickerInteractor(context),
+                    getKeyguardQuickAffordancePickerProviderClient(context));
+        }
+
+        return mKeyguardQuickAffordanceSnapshotRestorer;
+    }
+
+    private static final int KEY_QUICK_AFFORDANCE_SNAPSHOT_RESTORER = 1;
 }