Merge "[CDM][NLS] Check if the NLS service has an intent-filter" into main
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 5072e67..c01d162 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1385,40 +1385,6 @@
         </activity>
 
         <activity
-            android:name=".notification.zen.ZenSuggestionActivity"
-            android:label="@string/zen_mode_settings_title"
-            android:icon="@drawable/ic_suggestion_dnd"
-            android:exported="true"
-            android:theme="@android:style/Theme.NoDisplay">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="com.android.settings.suggested.category.ZEN" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="com.android.settings.suggested.category.FIRST_IMPRESSION" />
-            </intent-filter>
-
-            <meta-data android:name="com.android.settings.dismiss"
-                       android:value="0" />
-            <meta-data android:name="com.android.settings.title"
-                       android:resource="@string/zen_suggestion_title" />
-            <meta-data android:name="com.android.settings.summary"
-                       android:resource="@string/zen_suggestion_summary" />
-        </activity>
-
-        <activity
-            android:name=".notification.zen.ZenOnboardingActivity"
-            android:label="@string/zen_onboarding_dnd_visual_disturbances_header"
-            android:icon="@drawable/ic_notifications"
-            android:theme="@*android:style/Theme.DeviceDefault.Settings.Dialog.NoActionBar"
-            android:exported="true">
-            <intent-filter android:priority="1">
-                <action android:name="android.settings.ZEN_MODE_ONBOARDING" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-        </activity>
-        <activity
             android:name="Settings$ZenModeAutomationSettingsActivity"
             android:label="@string/zen_mode_automation_settings_title"
             android:icon="@drawable/ic_notifications"
diff --git a/aconfig/catalyst/display.aconfig b/aconfig/catalyst/display.aconfig
new file mode 100644
index 0000000..f722f74
--- /dev/null
+++ b/aconfig/catalyst/display.aconfig
@@ -0,0 +1,9 @@
+package: "com.android.settings.flags"
+container: "system"
+
+flag {
+  name: "catalyst_display_settings_screen"
+  namespace: "android_settings"
+  description: "Flag for Display"
+  bug: "323791114"
+}
diff --git a/res/drawable-night/accessibility_captioning_banner.xml b/res/drawable-night/accessibility_captioning_banner.xml
new file mode 100644
index 0000000..39b6060
--- /dev/null
+++ b/res/drawable-night/accessibility_captioning_banner.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2024 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="412dp"
+        android:height="300dp"
+        android:viewportWidth="412"
+        android:viewportHeight="300">
+    <group>
+        <clip-path
+            android:pathData="M0,0h412v300h-412z"/>
+        <path
+            android:pathData="M383.9,300H28.1C12.6,300 0,287.4 0,271.9V28.1C0,12.6 12.6,0 28.1,0H383.9C399.4,0 412,12.6 412,28.1V271.9C412,287.4 399.4,300 383.9,300Z"
+            android:fillColor="#000000"/>
+        <path
+            android:pathData="M132.8,179.6H79.2V188.1H132.8V179.6Z"
+            android:fillColor="#669DF6"/>
+        <path
+            android:pathData="M172.9,179.6H142.5V188.1H172.9V179.6Z"
+            android:fillColor="#669DF6"/>
+        <path
+            android:pathData="M158.4,195.5H79.2V204H158.4V195.5Z"
+            android:fillColor="#669DF6"/>
+        <path
+            android:pathData="M202.2,195.5H168.1V204H202.2V195.5Z"
+            android:fillColor="#669DF6"/>
+        <path
+            android:pathData="M246,195.5H211.9V204H246V195.5Z"
+            android:fillColor="#669DF6"/>
+        <path
+            android:pathData="M255.8,179.6H182.7V188.1H255.8V179.6Z"
+            android:fillColor="#669DF6"/>
+        <path
+            android:pathData="M292.3,179.6H265.5V188.1H292.3V179.6Z"
+            android:fillColor="#669DF6"/>
+        <path
+            android:pathData="M328.9,179.6H302.1V188.1H328.9V179.6Z"
+            android:fillColor="#669DF6"/>
+        <path
+            android:pathData="M142.7,67.9H131.2C129.6,67.9 128.3,69.2 128.3,70.8H67.8C59.9,70.8 53.4,77.3 53.4,85.2V217.6C53.4,225.5 59.9,232 67.8,232H344.2C352.1,232 358.6,225.5 358.6,217.6V85.2C358.6,77.3 352.1,70.8 344.2,70.8H203.1C203.1,69.2 201.8,67.9 200.2,67.9H171.4C169.8,67.9 168.5,69.2 168.5,70.8H145.5C145.5,69.2 144.3,67.9 142.7,67.9ZM344.2,73.7C350.6,73.7 355.7,78.9 355.7,85.2V217.6C355.7,223.9 350.5,229.1 344.2,229.1H67.8C61.4,229.1 56.3,223.9 56.3,217.6V85.2C56.3,78.9 61.5,73.7 67.8,73.7H344.2Z"
+            android:fillColor="#80868B"/>
+    </group>
+</vector>
diff --git a/res/layout/modes_edit_name.xml b/res/layout/modes_edit_name.xml
index 498fe4c..ed8b3c9 100644
--- a/res/layout/modes_edit_name.xml
+++ b/res/layout/modes_edit_name.xml
@@ -15,23 +15,37 @@
   limitations under the License.
   -->
 
+<!-- Theme.AppCompat.DayNight is in the parent View so that it's merged with the Theme.Settings
+     theme below. An AppCompat descendant (which Theme.Settings isn't) is necessary to inflate
+     TextInputLayout. -->
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
+    android:theme="@style/Theme.AppCompat.DayNight"
     android:paddingStart="?android:attr/listPreferredItemPaddingStart"
-    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
-    android:paddingBottom="8dp">
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
 
-    <EditText
+    <com.google.android.material.textfield.TextInputLayout
+        android:id="@+id/edit_input_layout"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:id="@android:id/edit"
-        android:minHeight="48dp"
-        android:maxLines="1"
-        android:inputType="text|textCapSentences"
-        android:imeOptions="actionDone"
-        android:selectAllOnFocus="true"
-        android:hint="@string/zen_mode_edit_name_hint" />
+        android:theme="@style/Theme.Settings"
+        style="?attr/textInputFilledStyle"
+        app:endIconMode="clear_text"
+        app:errorEnabled="true"
+        android:hint="@string/zen_mode_edit_name_hint">
 
-</LinearLayout>
\ No newline at end of file
+        <com.google.android.material.textfield.TextInputEditText
+            android:id="@android:id/edit"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:maxLines="1"
+            android:inputType="text|textCapSentences"
+            android:imeOptions="actionDone"
+            android:selectAllOnFocus="true" />
+
+    </com.google.android.material.textfield.TextInputLayout>
+
+</LinearLayout>
diff --git a/res/layout/zen_onboarding.xml b/res/layout/zen_onboarding.xml
deleted file mode 100644
index 27922c6..0000000
--- a/res/layout/zen_onboarding.xml
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2018 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<RelativeLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content">
-
-    <RelativeLayout
-        android:id="@+id/zen_onboarding_choices"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:paddingLeft="24dp"
-        android:paddingRight="24dp"
-        android:paddingTop="18dp">
-
-        <TextView
-            android:id="@+id/header"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@string/zen_onboarding_dnd_visual_disturbances_header"
-            android:textAppearance="@android:style/TextAppearance.DeviceDefault.DialogWindowTitle" />
-
-        <LinearLayout
-            android:id="@+id/zen_onboarding_new_setting"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_below="@+id/header"
-            android:layout_centerHorizontal="true"
-            android:layout_marginTop="22dp"
-            android:orientation="horizontal">
-
-            <RadioButton
-                android:id="@+id/zen_onboarding_new_setting_button"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:paddingHorizontal="8dp"
-                android:minHeight="48dp"/>
-
-            <LinearLayout
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:orientation="vertical">
-
-                <TextView
-                    android:id="@+id/zen_onboarding_new_setting_title"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:text="@string/zen_onboarding_new_setting_title"
-                    android:textAppearance="?android:attr/textAppearanceListItem" />
-
-                <TextView
-                    android:id="@+id/zen_onboarding_new_setting_summary"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:text="@string/zen_onboarding_new_setting_summary" />
-            </LinearLayout>
-
-        </LinearLayout>
-
-        <LinearLayout
-            android:id="@+id/zen_onboarding_current_setting"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_below="@+id/zen_onboarding_new_setting"
-            android:layout_centerHorizontal="true"
-            android:layout_marginTop="10dp"
-            android:orientation="horizontal">
-
-            <RadioButton
-                android:id="@+id/zen_onboarding_current_setting_button"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:paddingHorizontal="8dp"
-                android:minHeight="48dp"/>
-
-            <LinearLayout
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:orientation="vertical">
-
-                <TextView
-                    android:id="@+id/zen_onboarding_current_setting_title"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:text="@string/zen_onboarding_current_setting_title"
-                    android:textAppearance="?android:attr/textAppearanceListItem" />
-
-                <TextView
-                    android:id="@+id/zen_onboarding_current_setting_summary"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:text="@string/zen_onboarding_current_setting_summary" />
-            </LinearLayout>
-        </LinearLayout>
-    </RelativeLayout>
-
-    <RelativeLayout
-        android:id="@+id/buttons"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_below="@+id/zen_onboarding_choices"
-        android:layout_marginLeft="8dp"
-        android:layout_marginTop="20dp"
-        android:layout_marginBottom="10dp">
-
-        <Button
-            android:id="@+id/settings"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@string/zen_onboarding_settings"
-            android:layout_alignParentStart="true"
-            style="@style/TextAppearance.ZenOnboardingButton"
-            android:onClick="launchSettings" />
-
-        <Button
-            android:id="@+id/ok"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_alignParentEnd="true"
-            android:text="@string/zen_onboarding_ok"
-            style="@style/TextAppearance.ZenOnboardingButton"
-            android:onClick="save" />
-    </RelativeLayout>
-</RelativeLayout>
\ No newline at end of file
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 4a776f5..69aab00 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -246,16 +246,11 @@
     <string name="roaming_enable" msgid="7845716016861535340">"Connect to data services when roaming"</string>
     <string name="roaming_disable" msgid="729512894708689604">"Connect to data services when roaming"</string>
     <string name="roaming_warning" msgid="7703647889040229013">"Roaming charges may apply."</string>
-    <!-- no translation found for date_time_auto (1759599045100040686) -->
-    <skip />
-    <!-- no translation found for date_time_auto_summary (8294938565417729698) -->
-    <skip />
-    <!-- no translation found for zone_auto_title (3520584257065861479) -->
-    <skip />
-    <!-- no translation found for zone_auto_title_summary (6540356783943375071) -->
-    <skip />
-    <!-- no translation found for auto_zone_requires_location_summary (8751995978350701451) -->
-    <skip />
+    <string name="date_time_auto" msgid="1759599045100040686">"Automatic date and time"</string>
+    <string name="date_time_auto_summary" msgid="8294938565417729698">"Set automatically using your network and wireless signals"</string>
+    <string name="zone_auto_title" msgid="3520584257065861479">"Automatic time zone"</string>
+    <string name="zone_auto_title_summary" msgid="6540356783943375071">"Set automatically based on mobile networks near you"</string>
+    <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Set automatically using your device location, if available. An active Wi-Fi connection may also be required."</string>
     <string name="date_time_24hour_auto" msgid="6583078135067804252">"Use locale default"</string>
     <string name="date_time_24hour" msgid="286679379105653406">"Use 24-hour format"</string>
     <string name="date_time_set_time_title" msgid="2870083415922991906">"Time"</string>
@@ -1630,8 +1625,7 @@
     <string name="location_scanning_bluetooth_always_scanning_description" msgid="5362988856388462841">"Allow apps and services to scan for nearby devices at any time, even when Bluetooth is off. This can be used, for example, to improve location-based features and services."</string>
     <string name="location_services_preference_title" msgid="604317859531782159">"Location Services"</string>
     <string name="location_services_screen_title" msgid="5640002489976602476">"Location Services"</string>
-    <!-- no translation found for location_time_zone_detection_toggle_title (720338048522014712) -->
-    <skip />
+    <string name="location_time_zone_detection_toggle_title" msgid="720338048522014712">"Use location for time zone"</string>
     <string name="location_time_zone_detection_status_title" msgid="8903495354385600423">"Cannot set the time zone automatically"</string>
     <string name="location_time_zone_detection_status_summary_degraded_by_settings" msgid="6198939835335841106"></string>
     <string name="location_time_zone_detection_status_summary_blocked_by_settings" msgid="5276280770344278768">"Location or Location Services are off"</string>
@@ -1642,13 +1636,11 @@
     <string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Location settings"</string>
     <string name="location_time_zone_provider_fix_dialog_ok_button" msgid="9026666001835079126">"Fix this"</string>
     <string name="location_time_zone_detection_location_is_off_dialog_cancel_button" msgid="3968729678789071154">"Cancel"</string>
-    <!-- no translation found for location_time_zone_detection_auto_is_off (4785540862935730060) -->
-    <skip />
+    <string name="location_time_zone_detection_auto_is_off" msgid="4785540862935730060">"Not available when automatic time zone is off"</string>
     <string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Location time zone detection is disabled"</string>
     <string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Location time zone detection is not supported"</string>
     <string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Location time zone detection changes are not allowed"</string>
-    <!-- no translation found for location_time_zone_detection_auto_is_on (1837317773761632655) -->
-    <skip />
+    <string name="location_time_zone_detection_auto_is_on" msgid="1837317773761632655">"If your device location is available, it may be used to set your time zone"</string>
     <string name="about_settings_summary" msgid="4831942939227432513">"View legal info, status, software version"</string>
     <string name="legal_information" msgid="7509900979811934843">"Legal information"</string>
     <string name="manual" msgid="3651593989906084868">"Manual"</string>
@@ -3596,6 +3588,10 @@
     <string name="lockscreen_bypass_summary" msgid="4578154430436224161">"After unlocking, go directly to last used screen. Notifications won’t show on lock screen. Swipe down from top to see them."</string>
     <string name="keywords_lockscreen_bypass" msgid="41035425468915498">"Lock screen, Lockscreen, Skip, Bypass"</string>
     <string name="locked_work_profile_notification_title" msgid="279367321791301499">"When work profile is locked"</string>
+    <!-- no translation found for lock_screen_notif_minimalism (5556871004042668149) -->
+    <skip />
+    <!-- no translation found for lock_screen_notif_minimalism_summary (4607237285421814421) -->
+    <skip />
     <string name="unseen_notifs_lock_screen" msgid="6910701117021324612">"Show only new notifications on lock screen"</string>
     <string name="unseen_notifs_lock_screen_summary" msgid="5996722793868021391">"Automatically remove previously viewed notifications from the lock screen"</string>
     <string name="lock_screen_notifs_title" msgid="3412042692317304449">"Notifications on lock screen"</string>
@@ -3907,8 +3903,7 @@
     <string name="zen_mode_new_custom_title" msgid="7513785385574267851">"Create a mode"</string>
     <string name="zen_mode_new_custom_default_name" msgid="2778307946775085105">"Custom mode"</string>
     <string name="zen_mode_edit_name_hint" msgid="4584652062167540536">"Mode name"</string>
-    <!-- no translation found for zen_mode_edit_choose_icon_title (6452801577128788362) -->
-    <skip />
+    <string name="zen_mode_edit_choose_icon_title" msgid="6452801577128788362">"Choose an icon"</string>
     <string name="zen_mode_trigger_title_schedule_calendar" msgid="9206609438617550331">"Calendar events"</string>
     <string name="zen_mode_trigger_title_bedtime" msgid="3287241454965736913">"Bedtime routine"</string>
     <string name="zen_mode_trigger_title_driving" msgid="7890990983453164403">"While driving"</string>
@@ -4811,8 +4806,7 @@
     <string name="category_title_your_satellite_plan" msgid="3017895097366691841">"Your <xliff:g id="CARRIER_NAME">%1$s</xliff:g> plan"</string>
     <string name="title_have_satellite_plan" msgid="2048372355699977947">"Satellite messaging is included with your account"</string>
     <string name="title_no_satellite_plan" msgid="2876056203035197505">"Satellite messaging isn’t included with your account"</string>
-    <!-- no translation found for summary_add_satellite_setting (190359698593056946) -->
-    <skip />
+    <string name="summary_add_satellite_setting" msgid="190359698593056946">"Learn more"</string>
     <string name="category_name_how_it_works" msgid="585303230539269496">"How it works"</string>
     <string name="title_satellite_connection_guide" msgid="3294802307913609072">"When you don’t have a mobile network"</string>
     <string name="summary_satellite_connection_guide" msgid="3496123195218418456">"Your phone will auto-connect to a satellite. For the best connection, keep a clear view of the sky."</string>
@@ -5449,10 +5443,7 @@
     <string name="audio_streams_qr_code_scanner_label" msgid="8799703301071378034">"QR code scanner"</string>
     <string name="audio_streams_qr_code_help_with_link" msgid="5542328067190486479"><annotation id="link">"Need help?"</annotation></string>
     <string name="homepage_search" msgid="6759334912284663559">"Search settings"</string>
-    <!-- no translation found for keywords_contacts_storage (9061213057165337893) -->
-    <skip />
-    <!-- no translation found for contacts_storage_settings_title (1574030546525203810) -->
-    <skip />
-    <!-- no translation found for contacts_storage_no_account_set (1548101985417720782) -->
-    <skip />
+    <string name="keywords_contacts_storage" msgid="9061213057165337893">"contacts, storage, account"</string>
+    <string name="contacts_storage_settings_title" msgid="1574030546525203810">"Contacts storage"</string>
+    <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"No default set"</string>
 </resources>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 2972af8..93812d1 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -1948,7 +1948,7 @@
     <string name="keyboard_options_category" msgid="8040137073401152608">"Opções"</string>
     <string name="keyboard_a11y_category" msgid="8230758278046841469">"Acessibilidade"</string>
     <string name="physical_keyboard_title" msgid="3328134097512350958">"Teclado físico"</string>
-    <string name="bounce_keys" msgid="7419450970351743904">"Teclas de filtro"</string>
+    <string name="bounce_keys" msgid="7419450970351743904">"Teclas de filtragem"</string>
     <string name="bounce_keys_summary" msgid="7347050868868080302">"O teclado ignora pressionamentos rápidos e repetidos da mesma tecla dentro de <xliff:g id="BOUNCE_KEYS_THRESHOLD">%1$d</xliff:g> ms"</string>
     <string name="slow_keys" msgid="2891452895499690837">"Teclas lentas"</string>
     <string name="slow_keys_summary" msgid="1784371292745423292">"Ajusta o tempo que leva para um pressionamento de tecla ser ativado para <xliff:g id="SLOW_KEYS_THRESHOLD">%1$d</xliff:g> ms"</string>
@@ -2023,7 +2023,7 @@
     <string name="modifier_keys_picker_title" msgid="244545904150587851">"Escolher a tecla modificadora"</string>
     <string name="modifier_keys_picker_summary" msgid="739397232249560785">"Escolha uma nova tecla para <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
     <string name="keyboard_a11y_settings" msgid="2564659018555385728">"Acessibilidade do teclado físico"</string>
-    <string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Teclas de aderência, teclas de filtro, teclas do mouse"</string>
+    <string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Teclas de aderência, teclas de filtragem, teclas do mouse"</string>
     <string name="ime_label_title" msgid="8994569521516807168">"Layout do <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
     <string name="default_keyboard_layout" msgid="8690689331289452201">"Padrão"</string>
     <string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automático: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -3596,6 +3596,10 @@
     <string name="lockscreen_bypass_summary" msgid="4578154430436224161">"Após o desbloqueio, a última tela usada será mostrada. Deslize de cima para baixo para conferir as notificações, que não vão aparecer na tela de bloqueio."</string>
     <string name="keywords_lockscreen_bypass" msgid="41035425468915498">"Bloquear tela, tela de bloqueio, pular, ignorar"</string>
     <string name="locked_work_profile_notification_title" msgid="279367321791301499">"Quando o perfil está bloqueado"</string>
+    <!-- no translation found for lock_screen_notif_minimalism (5556871004042668149) -->
+    <skip />
+    <!-- no translation found for lock_screen_notif_minimalism_summary (4607237285421814421) -->
+    <skip />
     <string name="unseen_notifs_lock_screen" msgid="6910701117021324612">"Mostrar somente notificações novas na tela de bloqueio"</string>
     <string name="unseen_notifs_lock_screen_summary" msgid="5996722793868021391">"Remover automaticamente da tela de bloqueio as notificações visualizadas anteriormente"</string>
     <string name="lock_screen_notifs_title" msgid="3412042692317304449">"Notificações na tela de bloqueio"</string>
@@ -3978,12 +3982,9 @@
     <string name="managing_admin" msgid="2633920317425356619">"Gerenciado por <xliff:g id="ADMIN_APP_LABEL">%s</xliff:g>"</string>
     <string name="launch_by_default" msgid="892824422067985734">"Abrir por padrão"</string>
     <string name="app_launch_open_domain_urls_title" msgid="4805388403977096285">"Abrir links compatíveis"</string>
-    <!-- no translation found for app_launch_open_in_app (2208182888681699512) -->
-    <skip />
-    <!-- no translation found for app_launch_open_in_browser (766170191853009756) -->
-    <skip />
-    <!-- no translation found for app_launch_top_intro_message (9037324384325518290) -->
-    <skip />
+    <string name="app_launch_open_in_app" msgid="2208182888681699512">"No app"</string>
+    <string name="app_launch_open_in_browser" msgid="766170191853009756">"No navegador"</string>
+    <string name="app_launch_top_intro_message" msgid="9037324384325518290">"Escolha como abrir links da Web para este app"</string>
     <string name="app_launch_links_category" msgid="2380467163878760037">"Links abertos neste app"</string>
     <string name="app_launch_supported_domain_urls_title" msgid="5088779668667217369">"Links compatíveis"</string>
     <string name="app_launch_other_defaults_title" msgid="5674385877838735586">"Outras preferências padrão"</string>
@@ -5451,10 +5452,7 @@
     <string name="audio_streams_qr_code_scanner_label" msgid="8799703301071378034">"Leitor de QR code"</string>
     <string name="audio_streams_qr_code_help_with_link" msgid="5542328067190486479"><annotation id="link">"Precisa de ajuda?"</annotation></string>
     <string name="homepage_search" msgid="6759334912284663559">"Pesquisar configurações"</string>
-    <!-- no translation found for keywords_contacts_storage (9061213057165337893) -->
-    <skip />
-    <!-- no translation found for contacts_storage_settings_title (1574030546525203810) -->
-    <skip />
-    <!-- no translation found for contacts_storage_no_account_set (1548101985417720782) -->
-    <skip />
+    <string name="keywords_contacts_storage" msgid="9061213057165337893">"contatos, armazenamento, conta"</string>
+    <string name="contacts_storage_settings_title" msgid="1574030546525203810">"Armazenamento de contatos"</string>
+    <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Nenhuma conta padrão configurada"</string>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index cf0e112..600c08c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1446,6 +1446,12 @@
     <string name="private_space_category_lock">Lock</string>
     <!-- The title of the category for settings related to hiding the private space  [CHAR LIMIT=20] -->
     <string name="private_space_category_hide">Hide</string>
+    <!-- Header on pattern confirm screen inside private space settings when separate lock set for private space [CHAR LIMIT=50] -->
+    <string name="private_space_confirm_your_pattern_header">Confirm your private space pattern</string>
+     <!-- Header on PIN confirm screen inside private space settings when separate lock set for private space [CHAR LIMIT=50] -->
+    <string name="private_space_confirm_your_pin_header">Re-enter your private space PIN</string>
+     <!-- Header on password confirm screen inside private space when separate lock set for private space[CHAR LIMIT=50] -->
+    <string name="private_space_confirm_your_password_header">Re-enter your private space password</string>
 
     <!-- Text shown when "Add fingerprint" button is disabled -->
     <string name="fingerprint_add_max">You can add up to <xliff:g id="count" example="5">%d</xliff:g> fingerprints</string>
@@ -2291,6 +2297,10 @@
     <string name="wifi_dpp_failure_enrollee_rejected_configuration">Contact the device manufacturer</string>
     <!-- Hint for Wi-Fi connection fail [CHAR LIMIT=NONE]  -->
     <string name="wifi_dpp_check_connection_try_again">Check connection and try again</string>
+    <!-- Hint for Wi-Fi connection fail [CHAR LIMIT=NONE]  -->
+    <string name="wifi_dpp_check_connection_no_matched_ssid">This Wi\u2011Fi network isn\u2019t available right now</string>
+    <!-- Hint for Wi-Fi connection fail [CHAR LIMIT=NONE]  -->
+    <string name="wifi_dpp_check_connection_no_matched_security">There\u2019s a problem with this QR code. Try connecting another way.</string>
     <!-- Title for the fragment choose network [CHAR LIMIT=50]  -->
     <string name="wifi_dpp_choose_network">Choose network</string>
     <!-- Hint for the user to center another device's QR code in the below camera window [CHAR LIMIT=NONE] -->
@@ -8447,28 +8457,6 @@
     <!-- Do not disturb custom settings duration header [CHAR LIMIT=40]-->
     <string name="zen_custom_settings_duration_header">Duration</string>
 
-    <!-- Do not disturb settings, messages, events and reminders title [CHAR LIMIT=100]-->
-    <string name="zen_msg_event_reminder_title">Messages, events &amp; reminders</string>
-    <!-- Do not disturb settings, messages, events and reminders footer [CHAR LIMIT=NONE]-->
-    <string name="zen_msg_event_reminder_footer">When Do Not Disturb is on, messages, reminders, and events will be muted, except for the items you allow above. You can adjust messages settings to allow your friends, family, or other contacts to reach you.</string>
-
-    <!-- Do not disturb onboarding dialog, accept new settings [CHAR LIMIT=30]-->
-    <string name="zen_onboarding_ok">Done</string>
-    <!-- Do not disturb onboarding dialog, on click user goes to dnd settings page [CHAR LIMIT=30]-->
-    <string name="zen_onboarding_settings">Settings</string>
-
-    <!-- Do not disturb onboarding dialog, title for radio button [CHAR LIMIT=80]-->
-    <string name="zen_onboarding_new_setting_title">No visuals or sound from notifications</string>
-    <!-- Do not disturb onboarding dialog, title for radio button [CHAR LIMIT=80]-->
-    <string name="zen_onboarding_current_setting_title">No sound from notifications</string>
-    <!-- Do not disturb onboarding dialog, secondary text for radio button [CHAR LIMIT=NONE]-->
-    <string name="zen_onboarding_new_setting_summary">You won\u2019t see or hear notifications. Calls from starred contacts and repeat callers are allowed.</string>
-    <!-- Do not disturb onboarding dialog, secondary text for radio button [CHAR LIMIT=NONE]-->
-    <string name="zen_onboarding_current_setting_summary">(Current setting)</string>
-
-    <!-- Do not disturb onboarding dialog, header prompt for settings [CHAR LIMIT=80]-->
-    <string name="zen_onboarding_dnd_visual_disturbances_header">Change Do Not Disturb notification settings?</string>
-
     <!-- Work Sounds: Work sound settings section header.  [CHAR LIMIT=50] -->
     <string name="sound_work_settings">Work profile sounds</string>
 
@@ -9335,6 +9323,10 @@
             other {# conversations}
         }
     </string>
+
+    <!-- Modes: Content description of the "gear" icon that takes the user to the Conversation settings. [CHAR LIMIT=NONE] -->
+    <string name="zen_mode_from_conversations_settings">Conversations settings</string>
+
     <!-- [CHAR LIMIT=120] Zen mode settings: Header for calls and messages section of conversations
     setting page -->
     <string name="zen_mode_people_calls_messages_section_title">Who can interrupt</string>
@@ -9403,6 +9395,11 @@
     <!-- [CHAR LIMIT=40] Zen mode settings: Calls or messages option value: From starred contacts only -->
     <string name="zen_mode_from_starred">Starred contacts</string>
 
+    <!-- Modes: Content description of the "gear" icon that takes the user to the Contacts app to manage contacts. [CHAR LIMIT=NONE] -->
+    <string name="zen_mode_from_contacts_settings">Contacts settings</string>
+    <!-- Modes: Content description of the "gear" icon that takes the user to the Contacts app to manage starred contacts. [CHAR LIMIT=NONE] -->
+    <string name="zen_mode_from_starred_settings">Starred contacts settings</string>
+
     <!-- [CHAR LIMIT=40] Zen mode settings: Calls option value: No calls allowed -->
     <string name="zen_mode_none_calls">None</string>
     <!-- [CHAR LIMIT=40] Zen mode settings: Messages option value: No messages allowed -->
@@ -9475,6 +9472,8 @@
     <string name="zen_mode_apps_work_app"><xliff:g id="app_label" example="Chrome">%s</xliff:g> (Work)</string>
     <!-- Text displayed (for a brief time) while the list of bypassing apps is being fetched. Will be replaced by a zen_mode_apps_subtext. [CHAR_LIMIT=60] -->
     <string name="zen_mode_apps_calculating">Calculating\u2026</string>
+    <!-- Modes: Content description of the "gear" icon that takes the user to the "Apps that can interrupt" settings. [CHAR LIMIT=NONE] -->
+    <string name="zen_mode_apps_priority_apps_settings">Apps settings</string>
     <!-- Modes: Format for a string displayed when there are more items (e.g. apps, contacts) that can be shown. For example, we show (A)(B)(C)(+5), where this string represents the "+5" value. Needs to be as compact as possible, since it will be drawn in a really small area. [CHAR_LIMIT=4] -->
     <string name="zen_mode_plus_n_items">+<xliff:g id="number" example="42">%d</xliff:g></string>
 
@@ -9592,6 +9591,9 @@
     <!-- Modes: Hint for the EditText for editing a mode's name [CHAR LIMIT=30] -->
     <string name="zen_mode_edit_name_hint">Mode name</string>
 
+    <!-- Modes: Error message when editing a mode's name and the name is empty [CHAR LIMIT=40] -->
+    <string name="zen_mode_edit_name_empty_error">Mode name cannot be empty</string>
+
     <!-- Modes: Text shown above the list of icons in the mode editor. [CHAR LIMIT=40] -->
     <string name="zen_mode_edit_choose_icon_title">Choose an icon</string>
 
diff --git a/res/values/themes.xml b/res/values/themes.xml
index 64c8904..4f20d8c 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -73,6 +73,9 @@
         <item name="notification_importance_button_background_color_selected">?androidprv:attr/materialColorSecondaryContainer</item>
         <item name="notification_importance_button_border_color_selected">?androidprv:attr/materialColorOnSecondaryContainer</item>
         <item name="notification_importance_button_foreground_color_selected">?androidprv:attr/materialColorOnSecondaryContainer</item>
+
+        <!-- For AppCompat widgets, e.g. TextInputLayout -->
+        <item name="colorAccent">?android:attr/colorAccent</item>
     </style>
 
     <!-- Variant of the settings theme with no action bar. -->
diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
index 18e6455..fcc5ce3 100644
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -120,37 +120,14 @@
             settings:controller="com.android.settings.inputmethod.PointerTouchpadPreferenceController"
             settings:searchable="true"/>
 
-    </PreferenceCategory>
-
-    <PreferenceCategory
-        android:key="physical_keyboard_options_category"
-        android:persistent="false"
-        android:title="@string/keyboard_category_title">
-
-        <SwitchPreferenceCompat
+        <Preference
             android:icon="@drawable/ic_sticky_keys"
-            android:key="toggle_keyboard_sticky_keys"
+            android:key="physical_keyboard_a11y"
+            android:title="@string/keyboard_a11y_settings"
+            android:summary="@string/keyboard_a11y_settings_summary"
             android:persistent="false"
-            android:summary="@string/sticky_keys_summary"
-            android:title="@string/sticky_keys"
-            settings:controller="com.android.settings.accessibility.KeyboardStickyKeyPreferenceController"
-            settings:searchable="true" />
-
-        <SwitchPreferenceCompat
-            android:icon="@drawable/ic_bounce_keys"
-            android:key="toggle_keyboard_bounce_keys"
-            android:persistent="false"
-            android:title="@string/bounce_keys"
-            settings:controller="com.android.settings.accessibility.KeyboardBounceKeyPreferenceController"
-            settings:searchable="true" />
-
-        <SwitchPreferenceCompat
-            android:icon="@drawable/ic_slow_keys"
-            android:key="toggle_keyboard_slow_keys"
-            android:persistent="false"
-            android:title="@string/slow_keys"
-            settings:controller="com.android.settings.accessibility.KeyboardSlowKeyPreferenceController"
-            settings:searchable="true" />
+            android:fragment="com.android.settings.inputmethod.PhysicalKeyboardA11yFragment"
+            settings:controller="com.android.settings.inputmethod.PhysicalKeyboardA11yPreferenceController" />
     </PreferenceCategory>
 
     <PreferenceCategory
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 57a5380..a9144ea 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -1505,17 +1505,18 @@
      * @return biometric status when mandatory biometrics authentication is requested
      */
     public static BiometricStatus requestBiometricAuthenticationForMandatoryBiometrics(
-            @NonNull Context context,
-            boolean biometricsAuthenticationRequested, int userId) {
+            @NonNull Context context, boolean biometricsAuthenticationRequested, int userId) {
         final BiometricManager biometricManager = context.getSystemService(BiometricManager.class);
         if (biometricManager == null) {
             Log.e(TAG, "Biometric Manager is null.");
             return BiometricStatus.NOT_ACTIVE;
         }
-        final int status = biometricManager.canAuthenticate(userId,
-                BiometricManager.Authenticators.MANDATORY_BIOMETRICS);
         if (android.hardware.biometrics.Flags.mandatoryBiometrics()
                 && !biometricsAuthenticationRequested) {
+            final UserManager userManager = context.getSystemService(
+                    UserManager.class);
+            final int status = biometricManager.canAuthenticate(getEffectiveUserId(
+                    userManager, userId), BiometricManager.Authenticators.MANDATORY_BIOMETRICS);
             switch(status) {
                 case BiometricManager.BIOMETRIC_SUCCESS:
                     return BiometricStatus.OK;
@@ -1544,8 +1545,10 @@
      */
     public static void launchBiometricPromptForMandatoryBiometrics(@NonNull Fragment fragment,
             int requestCode, int userId, boolean hideBackground) {
+        final UserManager userManager = (UserManager) fragment.getContext().getSystemService(
+                UserManager.class);
         fragment.startActivityForResult(getIntentForBiometricAuthentication(fragment.getResources(),
-                userId, hideBackground), requestCode);
+                getEffectiveUserId(userManager, userId), hideBackground), requestCode);
     }
 
     /**
@@ -1561,21 +1564,32 @@
      */
     public static void launchBiometricPromptForMandatoryBiometrics(@NonNull Activity activity,
             int requestCode, int userId, boolean hideBackground) {
+        final UserManager userManager = activity.getSystemService(UserManager.class);
         activity.startActivityForResult(getIntentForBiometricAuthentication(
-                activity.getResources(), userId, hideBackground), requestCode);
+                activity.getResources(), getEffectiveUserId(userManager, userId),
+                hideBackground), requestCode);
     }
 
-    private static Intent getIntentForBiometricAuthentication(Resources resources, int userId,
-            boolean hideBackground) {
+    private static int getEffectiveUserId(UserManager userManager, int userId) {
+        if (userManager != null) {
+            return userManager.getCredentialOwnerProfile(userId);
+        }
+        return userId;
+    }
+
+    private static Intent getIntentForBiometricAuthentication(Resources resources,
+            int effectiveUserId, boolean hideBackground) {
         final Intent intent = new Intent();
-        intent.putExtra(BIOMETRIC_PROMPT_AUTHENTICATORS,
-                BiometricManager.Authenticators.MANDATORY_BIOMETRICS);
+        if (android.hardware.biometrics.Flags.mandatoryBiometrics()) {
+            intent.putExtra(BIOMETRIC_PROMPT_AUTHENTICATORS,
+                    BiometricManager.Authenticators.MANDATORY_BIOMETRICS);
+        }
         intent.putExtra(BIOMETRIC_PROMPT_NEGATIVE_BUTTON_TEXT,
                 resources.getString(R.string.cancel));
         intent.putExtra(KeyguardManager.EXTRA_DESCRIPTION,
                 resources.getString(R.string.mandatory_biometrics_prompt_description));
         intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_ALLOW_ANY_USER, true);
-        intent.putExtra(EXTRA_USER_ID, userId);
+        intent.putExtra(EXTRA_USER_ID, effectiveUserId);
         intent.putExtra(BIOMETRIC_PROMPT_HIDE_BACKGROUND, hideBackground);
         intent.setClassName(SETTINGS_PACKAGE_NAME,
                 ConfirmDeviceCredentialActivity.InternalActivity.class.getName());
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index db8f937..801d3ee 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -30,7 +30,6 @@
 import android.provider.Settings;
 import android.text.TextUtils;
 import android.util.ArrayMap;
-import android.view.InputDevice;
 import android.view.accessibility.AccessibilityManager;
 
 import androidx.annotation.NonNull;
@@ -45,7 +44,6 @@
 import com.android.settings.accessibility.AccessibilityUtil.AccessibilityServiceFragmentType;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.development.Enable16kUtils;
-import com.android.settings.inputmethod.PhysicalKeyboardFragment;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.RestrictedPreference;
@@ -73,14 +71,12 @@
     private static final String CATEGORY_DISPLAY = "display_category";
     @VisibleForTesting
     static final String CATEGORY_DOWNLOADED_SERVICES = "user_installed_services_category";
-    private static final String CATEGORY_KEYBOARD_OPTIONS = "physical_keyboard_options_category";
     @VisibleForTesting
     static final String CATEGORY_INTERACTION_CONTROL = "interaction_control_category";
 
     private static final String[] CATEGORIES = new String[]{
             CATEGORY_SCREEN_READER, CATEGORY_CAPTIONS, CATEGORY_AUDIO, CATEGORY_DISPLAY,
-            CATEGORY_SPEECH, CATEGORY_INTERACTION_CONTROL,
-            CATEGORY_KEYBOARD_OPTIONS, CATEGORY_DOWNLOADED_SERVICES
+            CATEGORY_SPEECH, CATEGORY_INTERACTION_CONTROL, CATEGORY_DOWNLOADED_SERVICES
     };
 
     // Extras passed to sub-fragments.
@@ -275,7 +271,7 @@
      * @return The service summary
      */
     public static CharSequence getServiceSummary(Context context, AccessibilityServiceInfo info,
-                                                 boolean serviceEnabled) {
+            boolean serviceEnabled) {
         if (serviceEnabled && info.crashed) {
             return context.getText(R.string.accessibility_summary_state_stopped);
         }
@@ -461,7 +457,6 @@
         // Hide category if it is empty.
         updatePreferenceCategoryVisibility(CATEGORY_SCREEN_READER);
         updatePreferenceCategoryVisibility(CATEGORY_SPEECH);
-        updatePreferenceCategoryVisibility(CATEGORY_KEYBOARD_OPTIONS);
     }
 
     /**
@@ -556,9 +551,7 @@
     /**
      * Updates preferences related to system configurations.
      */
-    protected void updateSystemPreferences() {
-        updateKeyboardPreferencesVisibility();
-    }
+    protected void updateSystemPreferences() {}
 
     private void updatePreferencesState() {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
@@ -567,53 +560,6 @@
                 findPreference(controller.getPreferenceKey())));
     }
 
-    private void updateKeyboardPreferencesVisibility() {
-        if (!mCategoryToPrefCategoryMap.containsKey(CATEGORY_KEYBOARD_OPTIONS)) {
-            return;
-        }
-        boolean isVisible = isAnyHardKeyboardsExist()
-                && isAnyKeyboardPreferenceAvailable();
-        mCategoryToPrefCategoryMap.get(CATEGORY_KEYBOARD_OPTIONS).setVisible(
-                isVisible);
-        if (isVisible) {
-            //set summary here.
-            findPreference(KeyboardBounceKeyPreferenceController.PREF_KEY).setSummary(
-                    getContext().getString(R.string.bounce_keys_summary,
-                            PhysicalKeyboardFragment.BOUNCE_KEYS_THRESHOLD));
-            findPreference(KeyboardSlowKeyPreferenceController.PREF_KEY).setSummary(
-                    getContext().getString(R.string.slow_keys_summary,
-                            PhysicalKeyboardFragment.SLOW_KEYS_THRESHOLD));
-        }
-    }
-
-    static boolean isAnyHardKeyboardsExist() {
-        for (int deviceId : InputDevice.getDeviceIds()) {
-            final InputDevice device = InputDevice.getDevice(deviceId);
-            if (device != null && !device.isVirtual() && device.isFullKeyboard()) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean isAnyKeyboardPreferenceAvailable() {
-        for (List<AbstractPreferenceController> controllerList : getPreferenceControllers()) {
-            for (AbstractPreferenceController controller : controllerList) {
-                if (controller.getPreferenceKey().equals(
-                        KeyboardBounceKeyPreferenceController.PREF_KEY)
-                        || controller.getPreferenceKey().equals(
-                        KeyboardSlowKeyPreferenceController.PREF_KEY)
-                        || controller.getPreferenceKey().equals(
-                        KeyboardStickyKeyPreferenceController.PREF_KEY)) {
-                    if (controller.isAvailable()) {
-                        return true;
-                    }
-                }
-            }
-        }
-        return false;
-    }
-
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider(R.xml.accessibility_settings) {
                 @Override
@@ -671,10 +617,12 @@
             };
 
     @Override
-    public void onInputDeviceAdded(int deviceId) {}
+    public void onInputDeviceAdded(int deviceId) {
+    }
 
     @Override
-    public void onInputDeviceRemoved(int deviceId) {}
+    public void onInputDeviceRemoved(int deviceId) {
+    }
 
     @Override
     public void onInputDeviceChanged(int deviceId) {
diff --git a/src/com/android/settings/accessibility/KeyboardBounceKeyPreferenceController.java b/src/com/android/settings/accessibility/KeyboardBounceKeyPreferenceController.java
deleted file mode 100644
index 840caa6..0000000
--- a/src/com/android/settings/accessibility/KeyboardBounceKeyPreferenceController.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2024 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.settings.accessibility;
-
-
-import android.content.Context;
-import android.hardware.input.InputSettings;
-import android.util.Log;
-
-import androidx.annotation.NonNull;
-
-import com.android.settings.R;
-import com.android.settings.core.TogglePreferenceController;
-import com.android.settings.inputmethod.PhysicalKeyboardFragment;
-
-import java.util.List;
-
-/**
- * A toggle preference controller for keyboard bounce key.
- */
-public class KeyboardBounceKeyPreferenceController extends TogglePreferenceController {
-    private static final String TAG = "BounceKeyPrefController";
-    static final String PREF_KEY = "toggle_keyboard_bounce_keys";
-
-    public KeyboardBounceKeyPreferenceController(Context context, String preferenceKey) {
-        super(context, preferenceKey);
-    }
-
-    @Override
-    public int getAvailabilityStatus() {
-        return InputSettings.isAccessibilityBounceKeysFeatureEnabled()
-                ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
-    }
-
-    @Override
-    public boolean isChecked() {
-        return InputSettings.isAccessibilityBounceKeysEnabled(mContext);
-    }
-
-    @Override
-    public boolean setChecked(boolean isChecked) {
-        InputSettings.setAccessibilityBounceKeysThreshold(mContext,
-                isChecked ? PhysicalKeyboardFragment.BOUNCE_KEYS_THRESHOLD
-                        : 0);
-        return true;
-    }
-
-    @Override
-    public int getSliceHighlightMenuRes() {
-        return R.string.menu_key_accessibility;
-    }
-
-    @Override
-    public void updateNonIndexableKeys(@NonNull List<String> keys) {
-        super.updateNonIndexableKeys(keys);
-
-        if (Flags.fixA11ySettingsSearch() && !AccessibilitySettings.isAnyHardKeyboardsExist()) {
-            if (keys.contains(getPreferenceKey())) {
-                Log.w(TAG, "Skipping updateNonIndexableKeys, key already in list.");
-                return;
-            }
-            keys.add(getPreferenceKey());
-        }
-    }
-}
diff --git a/src/com/android/settings/accessibility/KeyboardSlowKeyPreferenceController.java b/src/com/android/settings/accessibility/KeyboardSlowKeyPreferenceController.java
deleted file mode 100644
index bb9d950..0000000
--- a/src/com/android/settings/accessibility/KeyboardSlowKeyPreferenceController.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2024 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.settings.accessibility;
-
-
-import android.content.Context;
-import android.hardware.input.InputSettings;
-import android.util.Log;
-
-import androidx.annotation.NonNull;
-
-import com.android.settings.R;
-import com.android.settings.core.TogglePreferenceController;
-import com.android.settings.inputmethod.PhysicalKeyboardFragment;
-
-import java.util.List;
-
-/**
- * A toggle preference controller for keyboard slow key.
- */
-public class KeyboardSlowKeyPreferenceController extends TogglePreferenceController {
-    private static final String TAG = "SlowKeyPrefController";
-
-    static final String PREF_KEY = "toggle_keyboard_slow_keys";
-
-    public KeyboardSlowKeyPreferenceController(Context context, String preferenceKey) {
-        super(context, preferenceKey);
-    }
-
-    @Override
-    public int getAvailabilityStatus() {
-        return InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled()
-                ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
-    }
-
-    @Override
-    public boolean isChecked() {
-        return InputSettings.isAccessibilitySlowKeysEnabled(mContext);
-    }
-
-    @Override
-    public boolean setChecked(boolean isChecked) {
-        InputSettings.setAccessibilitySlowKeysThreshold(mContext,
-                isChecked ? PhysicalKeyboardFragment.SLOW_KEYS_THRESHOLD
-                        : 0);
-        return true;
-    }
-
-    @Override
-    public int getSliceHighlightMenuRes() {
-        return R.string.menu_key_accessibility;
-    }
-
-    @Override
-    public void updateNonIndexableKeys(@NonNull List<String> keys) {
-        super.updateNonIndexableKeys(keys);
-
-        if (Flags.fixA11ySettingsSearch() && !AccessibilitySettings.isAnyHardKeyboardsExist()) {
-            if (keys.contains(getPreferenceKey())) {
-                Log.w(TAG, "Skipping updateNonIndexableKeys, key already in list.");
-                return;
-            }
-            keys.add(getPreferenceKey());
-        }
-    }
-}
diff --git a/src/com/android/settings/accessibility/KeyboardStickyKeyPreferenceController.java b/src/com/android/settings/accessibility/KeyboardStickyKeyPreferenceController.java
deleted file mode 100644
index c896c9c..0000000
--- a/src/com/android/settings/accessibility/KeyboardStickyKeyPreferenceController.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2024 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.settings.accessibility;
-
-
-import android.content.Context;
-import android.hardware.input.InputSettings;
-import android.util.Log;
-
-import androidx.annotation.NonNull;
-
-import com.android.settings.R;
-import com.android.settings.core.TogglePreferenceController;
-
-import java.util.List;
-
-/**
- * A toggle preference controller for keyboard sticky key.
- */
-public class KeyboardStickyKeyPreferenceController extends TogglePreferenceController {
-    private static final String TAG = "StickyKeyPrefController";
-    static final String PREF_KEY = "toggle_keyboard_sticky_keys";
-
-    public KeyboardStickyKeyPreferenceController(Context context, String preferenceKey) {
-        super(context, preferenceKey);
-    }
-
-    @Override
-    public int getAvailabilityStatus() {
-        return InputSettings.isAccessibilityStickyKeysFeatureEnabled()
-                ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
-    }
-
-    @Override
-    public boolean isChecked() {
-        return InputSettings.isAccessibilityStickyKeysEnabled(mContext);
-    }
-
-    @Override
-    public boolean setChecked(boolean isChecked) {
-        InputSettings.setAccessibilityStickyKeysEnabled(mContext, isChecked);
-        return true;
-    }
-
-    @Override
-    public int getSliceHighlightMenuRes() {
-        return R.string.menu_key_accessibility;
-    }
-
-    @Override
-    public void updateNonIndexableKeys(@NonNull List<String> keys) {
-        super.updateNonIndexableKeys(keys);
-
-        if (Flags.fixA11ySettingsSearch() && !AccessibilitySettings.isAnyHardKeyboardsExist()) {
-            if (keys.contains(getPreferenceKey())) {
-                Log.w(TAG, "Skipping updateNonIndexableKeys, key already in list.");
-                return;
-            }
-            keys.add(getPreferenceKey());
-        }
-    }
-}
diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
index 5e8e374..c8ce7d8 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
@@ -30,8 +30,6 @@
 import com.android.settings.biometrics.fingerprint.FingerprintSuggestionActivity;
 import com.android.settings.display.NightDisplayPreferenceController;
 import com.android.settings.flags.Flags;
-import com.android.settings.notification.zen.ZenOnboardingActivity;
-import com.android.settings.notification.zen.ZenSuggestionActivity;
 import com.android.settings.password.ScreenLockSuggestionActivity;
 import com.android.settings.wallpaper.StyleSuggestionActivity;
 import com.android.settings.wallpaper.WallpaperSuggestionActivity;
@@ -72,8 +70,6 @@
             return WifiCallingSuggestionActivity.isSuggestionComplete(context);
         } else if (className.equals(NightDisplaySuggestionActivity.class.getName())) {
             return NightDisplayPreferenceController.isSuggestionComplete(context);
-        } else if (className.equals(ZenSuggestionActivity.class.getName())) {
-            return ZenOnboardingActivity.isSuggestionComplete(context);
         }
         return false;
     }
diff --git a/src/com/android/settings/datausage/AppDataUsagePreference.java b/src/com/android/settings/datausage/AppDataUsagePreference.java
index d8c7392..277c9b3 100644
--- a/src/com/android/settings/datausage/AppDataUsagePreference.java
+++ b/src/com/android/settings/datausage/AppDataUsagePreference.java
@@ -38,6 +38,7 @@
     public AppDataUsagePreference(Context context, AppItem item, int percent,
             UidDetailProvider provider) {
         super(context);
+        setLayoutResource(R.layout.preference_process_stats);
         setKey("app_data_usage_" + item.key);
         mItem = item;
         mPercent = percent;
diff --git a/src/com/android/settings/inputmethod/PhysicalKeyboardA11yPreferenceController.java b/src/com/android/settings/inputmethod/PhysicalKeyboardA11yPreferenceController.java
new file mode 100644
index 0000000..41be5b9
--- /dev/null
+++ b/src/com/android/settings/inputmethod/PhysicalKeyboardA11yPreferenceController.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2024 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.settings.inputmethod;
+
+import static com.android.settings.keyboard.Flags.keyboardAndTouchpadA11yNewPageEnabled;
+
+import android.content.Context;
+import android.view.InputDevice;
+
+import com.android.settings.core.BasePreferenceController;
+
+/** Controller that shows and updates the Physical Keyboard a11y preference. */
+public class PhysicalKeyboardA11yPreferenceController extends BasePreferenceController {
+
+
+    public PhysicalKeyboardA11yPreferenceController(Context context,
+            String preferenceKey) {
+        super(context, preferenceKey);
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return keyboardAndTouchpadA11yNewPageEnabled()
+                && isAnyHardKeyboardsExist() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+    }
+
+    private static boolean isAnyHardKeyboardsExist() {
+        for (int deviceId : InputDevice.getDeviceIds()) {
+            final InputDevice device = InputDevice.getDevice(deviceId);
+            if (device != null && !device.isVirtual() && device.isFullKeyboard()) {
+                return true;
+            }
+        }
+        return false;
+    }
+}
diff --git a/src/com/android/settings/network/telephony/SatelliteSetting.java b/src/com/android/settings/network/telephony/SatelliteSetting.java
index df58048..16c56f0 100644
--- a/src/com/android/settings/network/telephony/SatelliteSetting.java
+++ b/src/com/android/settings/network/telephony/SatelliteSetting.java
@@ -195,19 +195,19 @@
 
             final String[] link = new String[1];
             link[0] = readSatelliteMoreInfoString(mSubId);
-            footerPreference.setLearnMoreAction(view -> {
-                if (!link[0].isEmpty()) {
-                    Intent helpIntent = HelpUtils.getHelpIntent(mActivity, link[0],
-                            this.getClass().getName());
-                    if (helpIntent != null) {
-                        mActivity.startActivityForResult(helpIntent, /*requestCode=*/ 0);
+            if (link[0] != null && !link[0].isEmpty()) {
+                footerPreference.setLearnMoreAction(view -> {
+                    if (!link[0].isEmpty()) {
+                        Intent helpIntent = HelpUtils.getHelpIntent(mActivity, link[0],
+                                this.getClass().getName());
+                        if (helpIntent != null) {
+                            mActivity.startActivityForResult(helpIntent, /*requestCode=*/ 0);
+                        }
                     }
-                }
-            });
-            footerPreference.setLearnMoreText(
-                    getResources().getString(R.string.more_about_satellite_messaging));
-
-            // TODO : b/320467418 add rounded rectangle border line to footer preference.
+                });
+                footerPreference.setLearnMoreText(
+                        getResources().getString(R.string.more_about_satellite_messaging));
+            }
         }
     }
 
diff --git a/src/com/android/settings/network/telephony/VideoCallingPreferenceController.kt b/src/com/android/settings/network/telephony/VideoCallingPreferenceController.kt
index e6b3f31..f73bcda 100644
--- a/src/com/android/settings/network/telephony/VideoCallingPreferenceController.kt
+++ b/src/com/android/settings/network/telephony/VideoCallingPreferenceController.kt
@@ -44,12 +44,12 @@
     context: Context,
     key: String,
     private val callStateRepository: CallStateRepository = CallStateRepository(context),
+    private val videoCallingRepository: VideoCallingRepository = VideoCallingRepository(context),
 ) : TogglePreferenceController(context, key), On4gLteUpdateListener {
 
     private var subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID
     private var preference: TwoStatePreference? = null
     private var callingPreferenceCategoryController: CallingPreferenceCategoryController? = null
-    private val repository = VideoCallingRepository(context)
 
     private var videoCallEditable = false
     private var isInCall = false
@@ -71,14 +71,18 @@
     override fun displayPreference(screen: PreferenceScreen) {
         super.displayPreference(screen)
         preference = screen.findPreference(preferenceKey)
+        Log.d(TAG, "init ui")
+        preference?.isVisible = false
+        callingPreferenceCategoryController?.updateChildVisible(preferenceKey, false)
     }
 
     override fun onViewCreated(viewLifecycleOwner: LifecycleOwner) {
-        repository.isVideoCallReadyFlow(subId).collectLatestWithLifecycle(viewLifecycleOwner) {
-            isReady ->
-            preference?.isVisible = isReady
-            callingPreferenceCategoryController?.updateChildVisible(preferenceKey, isReady)
-        }
+        videoCallingRepository.isVideoCallReadyFlow(subId)
+            .collectLatestWithLifecycle(viewLifecycleOwner) { isReady ->
+                Log.d(TAG, "isVideoCallReadyFlow: update visible")
+                preference?.isVisible = isReady
+                callingPreferenceCategoryController?.updateChildVisible(preferenceKey, isReady)
+            }
         callStateRepository.callStateFlow(subId).collectLatestWithLifecycle(viewLifecycleOwner) {
             callState ->
             isInCall = callState != TelephonyManager.CALL_STATE_IDLE
@@ -129,10 +133,10 @@
 
         class VideoCallingSearchItem(private val context: Context) :
             MobileNetworkSettingsSearchItem {
-            private val repository = VideoCallingRepository(context)
+            private val videoCallingRepository = VideoCallingRepository(context)
 
             private fun isAvailable(subId: Int): Boolean = runBlocking {
-                repository.isVideoCallReadyFlow(subId).first()
+                videoCallingRepository.isVideoCallReadyFlow(subId).first()
             }
 
             override fun getSearchResult(subId: Int): MobileNetworkSettingsSearchResult? {
diff --git a/src/com/android/settings/notification/modes/ZenModeAppsPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeAppsPreferenceController.java
index c44661a..b1f5d75 100644
--- a/src/com/android/settings/notification/modes/ZenModeAppsPreferenceController.java
+++ b/src/com/android/settings/notification/modes/ZenModeAppsPreferenceController.java
@@ -29,6 +29,7 @@
 import androidx.preference.PreferenceScreen;
 import androidx.preference.TwoStatePreference;
 
+import com.android.settings.R;
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settingslib.notification.modes.ZenMode;
 import com.android.settingslib.notification.modes.ZenModesBackend;
@@ -58,6 +59,8 @@
                 pref.setExtraWidgetOnClickListener(p -> {
                     launchPrioritySettings();
                 });
+                pref.setExtraWidgetContentDescription(
+                        mContext.getString(R.string.zen_mode_apps_priority_apps_settings));
             }
         }
         super.displayPreference(screen);
diff --git a/src/com/android/settings/notification/modes/ZenModeEditNamePreferenceController.java b/src/com/android/settings/notification/modes/ZenModeEditNamePreferenceController.java
index 78cbfe0..6b490d6 100644
--- a/src/com/android/settings/notification/modes/ZenModeEditNamePreferenceController.java
+++ b/src/com/android/settings/notification/modes/ZenModeEditNamePreferenceController.java
@@ -17,9 +17,11 @@
 package com.android.settings.notification.modes;
 
 import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
 
 import android.content.Context;
 import android.text.Editable;
+import android.text.TextUtils;
 import android.text.TextWatcher;
 import android.widget.EditText;
 
@@ -28,14 +30,18 @@
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
 import com.android.settingslib.notification.modes.ZenMode;
 import com.android.settingslib.widget.LayoutPreference;
 
+import com.google.android.material.textfield.TextInputLayout;
+
 import java.util.function.Consumer;
 
 class ZenModeEditNamePreferenceController extends AbstractZenModePreferenceController {
 
     private final Consumer<String> mModeNameSetter;
+    @Nullable private TextInputLayout mInputLayout;
     @Nullable private EditText mEditText;
     private boolean mIsSettingText;
 
@@ -50,7 +56,8 @@
         super.displayPreference(screen);
         if (mEditText == null) {
             LayoutPreference pref = checkNotNull(screen.findPreference(getPreferenceKey()));
-            mEditText = pref.findViewById(android.R.id.edit);
+            mInputLayout = checkNotNull(pref.findViewById(R.id.edit_input_layout));
+            mEditText = checkNotNull(pref.findViewById(android.R.id.edit));
 
             mEditText.addTextChangedListener(new TextWatcher() {
                 @Override
@@ -61,9 +68,11 @@
 
                 @Override
                 public void afterTextChanged(Editable s) {
-                    if (!mIsSettingText) {
-                        mModeNameSetter.accept(s.toString());
+                    if (mIsSettingText) {
+                        return;
                     }
+                    mModeNameSetter.accept(s.toString());
+                    updateErrorState(s.toString());
                 }
             });
         }
@@ -79,9 +88,20 @@
                 if (!modeName.equals(currentText)) {
                     mEditText.setText(modeName);
                 }
+                updateErrorState(modeName);
             } finally {
                 mIsSettingText = false;
             }
         }
     }
+
+    private void updateErrorState(String currentName) {
+        checkState(mInputLayout != null);
+        if (TextUtils.isEmpty(currentName)) {
+            mInputLayout.setError(
+                    mContext.getString(R.string.zen_mode_edit_name_empty_error));
+        } else {
+            mInputLayout.setError(null);
+        }
+    }
 }
diff --git a/src/com/android/settings/notification/modes/ZenModeNotifVisFragment.java b/src/com/android/settings/notification/modes/ZenModeNotifVisFragment.java
index d1bd493..3e51462 100644
--- a/src/com/android/settings/notification/modes/ZenModeNotifVisFragment.java
+++ b/src/com/android/settings/notification/modes/ZenModeNotifVisFragment.java
@@ -38,7 +38,8 @@
         prefControllers.add(new ZenModeNotifVisPreferenceController(context,
                 "zen_effect_light", ZenPolicy.VISUAL_EFFECT_LIGHTS, null, mBackend));
         prefControllers.add(new ZenModeNotifVisPreferenceController(context,
-                "zen_effect_peek", ZenPolicy.VISUAL_EFFECT_PEEK, null, mBackend));
+                "zen_effect_peek", ZenPolicy.VISUAL_EFFECT_PEEK,
+                new int[] {ZenPolicy.VISUAL_EFFECT_NOTIFICATION_LIST}, mBackend));
         prefControllers.add(new ZenModeNotifVisPreferenceController(context,
                 "zen_effect_status", ZenPolicy.VISUAL_EFFECT_STATUS_BAR,
                 new int[] {ZenPolicy.VISUAL_EFFECT_NOTIFICATION_LIST}, mBackend));
diff --git a/src/com/android/settings/notification/modes/ZenModePrioritySendersPreferenceController.java b/src/com/android/settings/notification/modes/ZenModePrioritySendersPreferenceController.java
index 11b65bd..3b9311d 100644
--- a/src/com/android/settings/notification/modes/ZenModePrioritySendersPreferenceController.java
+++ b/src/com/android/settings/notification/modes/ZenModePrioritySendersPreferenceController.java
@@ -38,6 +38,8 @@
 import android.view.View;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceCategory;
 import androidx.preference.PreferenceScreen;
@@ -118,25 +120,27 @@
     public void displayPreference(PreferenceScreen screen) {
         mPreferenceCategory = checkNotNull(screen.findPreference(getPreferenceKey()));
         if (mPreferenceCategory.getPreferenceCount() == 0) {
-            makeSelectorPreference(KEY_STARRED,
-                    com.android.settings.R.string.zen_mode_from_starred, mIsMessages, true);
-            makeSelectorPreference(KEY_CONTACTS,
-                    com.android.settings.R.string.zen_mode_from_contacts, mIsMessages, true);
+            makeSelectorPreference(KEY_STARRED, R.string.zen_mode_from_starred,
+                    R.string.zen_mode_from_starred_settings, mIsMessages, true);
+            makeSelectorPreference(KEY_CONTACTS, R.string.zen_mode_from_contacts,
+                    R.string.zen_mode_from_contacts_settings, mIsMessages, true);
             if (mIsMessages) {
                 // "Any conversations" will only be available as option if it is the current value.
                 // Because it's confusing and we don't want users setting it up that way, but apps
                 // could create such ZenPolicies and we must show that.
                 makeSelectorPreference(KEY_ANY_CONVERSATIONS,
-                        com.android.settings.R.string.zen_mode_from_all_conversations, true,
+                        R.string.zen_mode_from_all_conversations,
+                        R.string.zen_mode_from_conversations_settings, true,
                         /* isVisibleByDefault= */ false);
                 makeSelectorPreference(KEY_IMPORTANT_CONVERSATIONS,
-                        com.android.settings.R.string.zen_mode_from_important_conversations, true,
+                        R.string.zen_mode_from_important_conversations,
+                        R.string.zen_mode_from_conversations_settings, true,
                         true);
             }
             makeSelectorPreference(KEY_ANY,
-                    com.android.settings.R.string.zen_mode_from_anyone, mIsMessages, true);
+                    R.string.zen_mode_from_anyone, null, mIsMessages, true);
             makeSelectorPreference(KEY_NONE,
-                    com.android.settings.R.string.zen_mode_none_messages, mIsMessages, true);
+                    R.string.zen_mode_none_messages, null, mIsMessages, true);
         }
         super.displayPreference(screen);
     }
@@ -229,8 +233,9 @@
         return CONVERSATION_SENDERS_UNSET;
     }
 
-    private void makeSelectorPreference(String key, int titleId,
-            boolean isCheckbox, boolean isVisibleByDefault) {
+    private void makeSelectorPreference(String key, @StringRes int titleId,
+            @Nullable @StringRes Integer settingsContentDescriptionResId, boolean isCheckbox,
+            boolean isVisibleByDefault) {
         final SelectorWithWidgetPreference pref =
                 new SelectorWithWidgetPreference(mPreferenceCategory.getContext(), isCheckbox);
         pref.setKey(key);
@@ -241,6 +246,9 @@
         View.OnClickListener widgetClickListener = getWidgetClickListener(key);
         if (widgetClickListener != null) {
             pref.setExtraWidgetOnClickListener(widgetClickListener);
+            pref.setExtraWidgetContentDescription(settingsContentDescriptionResId != null
+                    ? mContext.getString(settingsContentDescriptionResId)
+                    : null);
         }
 
         mPreferenceCategory.addPreference(pref);
diff --git a/src/com/android/settings/notification/zen/ZenModeBackend.java b/src/com/android/settings/notification/zen/ZenModeBackend.java
index c85b06b..2eb87c5 100644
--- a/src/com/android/settings/notification/zen/ZenModeBackend.java
+++ b/src/com/android/settings/notification/zen/ZenModeBackend.java
@@ -172,9 +172,6 @@
     }
 
     protected void saveVisualEffectsPolicy(int category, boolean suppress) {
-        Settings.Secure.putInt(mContext.getContentResolver(),
-                Settings.Secure.ZEN_SETTINGS_UPDATED, 1);
-
         int suppressedEffects = getNewSuppressedEffects(suppress, category);
         savePolicy(mPolicy.priorityCategories, mPolicy.priorityCallSenders,
                 mPolicy.priorityMessageSenders, suppressedEffects,
diff --git a/src/com/android/settings/notification/zen/ZenOnboardingActivity.java b/src/com/android/settings/notification/zen/ZenOnboardingActivity.java
deleted file mode 100644
index 151341c..0000000
--- a/src/com/android/settings/notification/zen/ZenOnboardingActivity.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.notification.zen;
-
-import android.app.Activity;
-import android.app.Flags;
-import android.app.NotificationManager;
-import android.app.NotificationManager.Policy;
-import android.app.settings.SettingsEnums;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.os.Bundle;
-import android.provider.Settings;
-import android.text.format.DateUtils;
-import android.util.Log;
-import android.view.View;
-import android.widget.RadioButton;
-
-import androidx.annotation.VisibleForTesting;
-
-import com.android.internal.logging.MetricsLogger;
-import com.android.settings.R;
-import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
-import com.android.settings.overlay.FeatureFactory;
-
-public class ZenOnboardingActivity extends Activity {
-
-    private static final String TAG = "ZenOnboardingActivity";
-
-    @VisibleForTesting
-    static final String PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME =
-            "pref_zen_suggestion_first_display_time_ms";
-    @VisibleForTesting
-    static final long ALWAYS_SHOW_THRESHOLD = DateUtils.DAY_IN_MILLIS * 14;
-
-    View mNewSetting;
-    View mKeepCurrentSetting;
-    RadioButton mNewSettingButton;
-    RadioButton mKeepCurrentSettingButton;
-
-    private NotificationManager mNm;
-    private MetricsLogger mMetrics;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setNotificationManager(getSystemService(NotificationManager.class));
-        setMetricsLogger(new MetricsLogger());
-
-        Context context = getApplicationContext();
-        Settings.Secure.putInt(context.getContentResolver(),
-                Settings.Secure.ZEN_SETTINGS_SUGGESTION_VIEWED, 1);
-
-        setupUI();
-    }
-
-    @VisibleForTesting
-    protected void setupUI() {
-        setContentView(R.layout.zen_onboarding);
-
-        mNewSetting = findViewById(R.id.zen_onboarding_new_setting);
-        mKeepCurrentSetting = findViewById(R.id.zen_onboarding_current_setting);
-        mNewSettingButton = findViewById(R.id.zen_onboarding_new_setting_button);
-        mKeepCurrentSettingButton = findViewById(R.id.zen_onboarding_current_setting_button);
-
-        View.OnClickListener newSettingClickListener = new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                mKeepCurrentSettingButton.setChecked(false);
-                mNewSettingButton.setChecked(true);
-            }
-        };
-
-        View.OnClickListener currentSettingClickListener = new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                mKeepCurrentSettingButton.setChecked(true);
-                mNewSettingButton.setChecked(false);
-            }
-        };
-
-        mNewSetting.setOnClickListener(newSettingClickListener);
-        mNewSettingButton.setOnClickListener(newSettingClickListener);
-
-        mKeepCurrentSetting.setOnClickListener(currentSettingClickListener);
-        mKeepCurrentSettingButton.setOnClickListener(currentSettingClickListener);
-
-        mKeepCurrentSettingButton.setChecked(true);
-        mMetrics.visible(SettingsEnums.SETTINGS_ZEN_ONBOARDING);
-    }
-
-    @VisibleForTesting
-    protected void setNotificationManager(NotificationManager nm) {
-        mNm = nm;
-    }
-
-    @VisibleForTesting
-    protected void setMetricsLogger(MetricsLogger ml) {
-        mMetrics = ml;
-    }
-
-    public void launchSettings(View button) {
-        mMetrics.action(SettingsEnums.ACTION_ZEN_ONBOARDING_SETTINGS);
-        Intent settings = new Intent(Settings.ACTION_ZEN_MODE_SETTINGS)
-                .setPackage(getPackageName());
-        settings.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
-        startActivity(settings);
-    }
-
-    public void save(View button) {
-        NotificationManager.Policy policy = mNm.getNotificationPolicy();
-
-        if (mNewSettingButton.isChecked()) {
-            NotificationManager.Policy newPolicy = new NotificationManager.Policy(
-                    Policy.PRIORITY_CATEGORY_REPEAT_CALLERS | policy.priorityCategories,
-                    Policy.PRIORITY_SENDERS_STARRED,
-                    policy.priorityMessageSenders,
-                    NotificationManager.Policy.getAllSuppressedVisualEffects());
-            if (Flags.modesApi()) {
-                mNm.setNotificationPolicy(newPolicy, /* fromUser= */ true);
-            } else {
-                mNm.setNotificationPolicy(newPolicy);
-            }
-            mMetrics.action(SettingsEnums.ACTION_ZEN_ONBOARDING_OK);
-        } else {
-            mMetrics.action(SettingsEnums.ACTION_ZEN_ONBOARDING_KEEP_CURRENT_SETTINGS);
-        }
-
-        Settings.Secure.putInt(getApplicationContext().getContentResolver(),
-                Settings.Secure.ZEN_SETTINGS_UPDATED, 1);
-
-        finishAndRemoveTask();
-    }
-
-    public static boolean isSuggestionComplete(Context context) {
-        if (wasZenUpdated(context)) {
-            return true;
-        }
-
-        if (showSuggestion(context) || withinShowTimeThreshold(context)) {
-            return false;
-        }
-
-        return true;
-    }
-
-    private static boolean wasZenUpdated(Context context) {
-        // ZEN_SETTINGS_UPDATED is true for:
-        // - fresh P+ device
-        // - if zen visual effects values were changed by the user in Settings
-        NotificationManager nm = context.getSystemService(NotificationManager.class);
-        if (NotificationManager.Policy.areAllVisualEffectsSuppressed(
-                nm.getNotificationPolicy().suppressedVisualEffects)) {
-            Settings.Secure.putInt(context.getContentResolver(),
-                    Settings.Secure.ZEN_SETTINGS_UPDATED, 1);
-        }
-        return Settings.Secure.getInt(context.getContentResolver(),
-                Settings.Secure.ZEN_SETTINGS_UPDATED, 0) != 0;
-    }
-
-    private static boolean showSuggestion(Context context) {
-        // SHOW_ZEN_SETTINGS_SUGGESTION is by default true, but false when:
-        // - user manually turns on dnd
-
-        // SHOW_ZEN_SETTINGS_SUGGESTION is also true when:
-        // - automatic rule has started DND and user has not seen the first use dialog
-        return Settings.Secure.getInt(context.getContentResolver(),
-                Settings.Secure.SHOW_ZEN_SETTINGS_SUGGESTION, 0) != 0;
-
-    }
-
-    private static boolean withinShowTimeThreshold(Context context) {
-        final SuggestionFeatureProvider featureProvider =
-                FeatureFactory.getFeatureFactory().getSuggestionFeatureProvider();
-        final SharedPreferences prefs = featureProvider.getSharedPrefs(context);
-        final long currentTimeMs = System.currentTimeMillis();
-        final long firstDisplayTimeMs;
-
-        if (!prefs.contains(PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME)) {
-            firstDisplayTimeMs = currentTimeMs;
-            prefs.edit().putLong(PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME, currentTimeMs).commit();
-        } else {
-            firstDisplayTimeMs = prefs.getLong(PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME, -1);
-        }
-
-        final long showTimeMs = firstDisplayTimeMs + ALWAYS_SHOW_THRESHOLD;
-        final boolean stillShow = currentTimeMs < showTimeMs;
-
-        Log.d(TAG, "still show zen suggestion based on time: " + stillShow + " showTimeMs="
-            + showTimeMs);
-        return stillShow;
-    }
-}
diff --git a/src/com/android/settings/notification/zen/ZenSuggestionActivity.java b/src/com/android/settings/notification/zen/ZenSuggestionActivity.java
deleted file mode 100644
index b535a3e..0000000
--- a/src/com/android/settings/notification/zen/ZenSuggestionActivity.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.android.settings.notification.zen;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.os.Bundle;
-import android.provider.Settings;
-
-public class ZenSuggestionActivity extends Activity {
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        // start up zen settings activity
-        Intent settingsIntent = new Intent(Settings.ACTION_ZEN_MODE_SETTINGS)
-                .setPackage(getPackageName());
-        startActivity(settingsIntent);
-
-        // start up onboarding activity
-        Intent onboardingActivity = new Intent(Settings.ZEN_MODE_ONBOARDING)
-                .setPackage(getPackageName());
-        startActivity(onboardingActivity);
-
-        finish();
-    }
-}
diff --git a/src/com/android/settings/password/ConfirmLockPassword.java b/src/com/android/settings/password/ConfirmLockPassword.java
index ead79d7..2665c37 100644
--- a/src/com/android/settings/password/ConfirmLockPassword.java
+++ b/src/com/android/settings/password/ConfirmLockPassword.java
@@ -39,6 +39,7 @@
 import android.os.Handler;
 import android.os.Looper;
 import android.os.SystemClock;
+import android.os.UserHandle;
 import android.os.UserManager;
 import android.text.Editable;
 import android.text.InputType;
@@ -65,6 +66,7 @@
 import com.android.internal.widget.TextViewInputDisabler;
 import com.android.settings.R;
 import com.android.settings.SetupRedactionInterstitial;
+import com.android.settings.Utils;
 import com.android.settingslib.animation.AppearAnimationUtils;
 import com.android.settingslib.animation.DisappearAnimationUtils;
 
@@ -290,6 +292,14 @@
                         CONFIRM_WORK_PROFILE_PIN_HEADER,
                         () -> getString(R.string.lockpassword_confirm_your_work_pin_header));
             }
+            if (android.multiuser.Flags.showCustomUnlockTitleInsidePrivateProfile()
+                    && Utils.isPrivateProfile(mEffectiveUserId, getActivity())
+                    && !UserManager.get(getActivity())
+                    .isQuietModeEnabled(UserHandle.of(mEffectiveUserId))) {
+                return mIsAlpha ? getString(R.string.private_space_confirm_your_password_header)
+                        : getString(R.string.private_space_confirm_your_pin_header);
+            }
+
             return mIsAlpha ? getString(R.string.lockpassword_confirm_your_password_header)
                     : getString(R.string.lockpassword_confirm_your_pin_header);
         }
diff --git a/src/com/android/settings/password/ConfirmLockPattern.java b/src/com/android/settings/password/ConfirmLockPattern.java
index 28d790e..784e898 100644
--- a/src/com/android/settings/password/ConfirmLockPattern.java
+++ b/src/com/android/settings/password/ConfirmLockPattern.java
@@ -34,6 +34,7 @@
 import android.os.Bundle;
 import android.os.CountDownTimer;
 import android.os.SystemClock;
+import android.os.UserHandle;
 import android.os.UserManager;
 import android.text.TextUtils;
 import android.util.Log;
@@ -55,6 +56,7 @@
 import com.android.internal.widget.LockscreenCredential;
 import com.android.settings.R;
 import com.android.settings.SetupRedactionInterstitial;
+import com.android.settings.Utils;
 import com.android.settingslib.animation.AppearAnimationCreator;
 import com.android.settingslib.animation.AppearAnimationUtils;
 import com.android.settingslib.animation.DisappearAnimationUtils;
@@ -422,6 +424,12 @@
                         CONFIRM_WORK_PROFILE_PATTERN_HEADER,
                         () -> getString(R.string.lockpassword_confirm_your_work_pattern_header));
             }
+            if (android.multiuser.Flags.showCustomUnlockTitleInsidePrivateProfile()
+                    && Utils.isPrivateProfile(mEffectiveUserId, getActivity())
+                    && !UserManager.get(getActivity())
+                    .isQuietModeEnabled(UserHandle.of(mEffectiveUserId))) {
+                return getString(R.string.private_space_confirm_your_pattern_header);
+            }
 
             return getString(R.string.lockpassword_confirm_your_pattern_header);
         }
diff --git a/src/com/android/settings/search/CustomSiteMapRegistry.java b/src/com/android/settings/search/CustomSiteMapRegistry.java
index dc19782..de536dc 100644
--- a/src/com/android/settings/search/CustomSiteMapRegistry.java
+++ b/src/com/android/settings/search/CustomSiteMapRegistry.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.search;
 
+import android.app.Flags;
 import android.util.ArrayMap;
 
 import com.android.settings.backup.UserBackupSettingsActivity;
@@ -55,8 +56,10 @@
                 ConnectedDeviceDashboardFragment.class.getName());
         CUSTOM_SITE_MAP.put(UserBackupSettingsActivity.class.getName(),
                 SystemDashboardFragment.class.getName());
-        CUSTOM_SITE_MAP.put(ZenModeBlockedEffectsSettings.class.getName(),
-                ZenModeRestrictNotificationsSettings.class.getName());
+        if (!Flags.modesUi()) {
+            CUSTOM_SITE_MAP.put(ZenModeBlockedEffectsSettings.class.getName(),
+                    ZenModeRestrictNotificationsSettings.class.getName());
+        }
         CUSTOM_SITE_MAP.put(GestureNavigationSettingsFragment.class.getName(),
                 SystemNavigationGestureSettings.class.getName());
     }
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index a0137df..3188240 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -1834,6 +1834,24 @@
                             MultiUserSwitchBarController.class.getName();
 
                     rawData.add(allowMultipleUsersResult);
+
+                    SearchIndexableRaw addUserData = new SearchIndexableRaw(context);
+                    addUserData.key = KEY_ADD_USER;
+
+                    // Dynamically set the title of addUser preference
+                    final UserCapabilities userCaps = UserCapabilities.create(context);
+                    if (!userCaps.mCanAddRestrictedProfile) {
+                        addUserData.title = context.getString(
+                                com.android.settingslib.R.string.user_add_user);
+                    } else {
+                        addUserData.title = context.getString(
+                                R.string.user_add_user_or_profile_menu);
+                    }
+                    addUserData.screenTitle = context.getString(R.string.user_settings_title);
+                    addUserData.iconResId = R.drawable.ic_add_40dp;
+
+                    rawData.add(addUserData);
+
                     return rawData;
                 }
 
diff --git a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
index 34948dc..97e41b4 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.wifi.dpp;
 
+import static android.content.res.Resources.ID_NULL;
 import static android.net.wifi.WifiInfo.sanitizeSsid;
 
 import android.app.Activity;
@@ -101,6 +102,8 @@
     // Interval between initiating WifiPickerTracker scans.
     private static final long SCAN_INTERVAL_MILLIS = 10_000;
 
+    private static final @StringRes int REACHABLE_WIFI_NETWORK = ID_NULL;
+
     private QrCamera mCamera;
     private TextureView mTextureView;
     private QrDecorateView mDecorateView;
@@ -201,8 +204,9 @@
                     wifiManager.enableNetwork(id, /* attemptConnect */ false);
                     // WifiTracker only contains a hidden SSID Wi-Fi network if it's saved.
                     // We can't check if a hidden SSID Wi-Fi network is reachable in advance.
-                    if (qrCodeWifiConfiguration.hiddenSSID
-                            || isReachableWifiNetwork(qrCodeWifiConfiguration)) {
+                    @StringRes int wifiReachabilityStringId =
+                            getWifiReachabilityStringId(qrCodeWifiConfiguration);
+                    if (wifiReachabilityStringId == REACHABLE_WIFI_NETWORK) {
                         hasHiddenOrReachableWifiNetwork = true;
                         mEnrolleeWifiConfiguration = qrCodeWifiConfiguration;
                         wifiManager.connect(id,
@@ -210,8 +214,7 @@
                     }
 
                     if (!hasHiddenOrReachableWifiNetwork) {
-                        showErrorMessageAndRestartCamera(
-                                R.string.wifi_dpp_check_connection_try_again);
+                        showErrorMessageAndRestartCamera(wifiReachabilityStringId);
                         return;
                     }
 
@@ -242,7 +245,10 @@
         WifiDppUtils.triggerVibrationForQrCodeRecognition(getContext());
     }
 
-    private boolean isReachableWifiNetwork(WifiConfiguration wifiConfiguration) {
+    private @StringRes int getWifiReachabilityStringId(WifiConfiguration wifiConfiguration) {
+        if (wifiConfiguration.hiddenSSID) {
+            return REACHABLE_WIFI_NETWORK;
+        }
         final List<WifiEntry> wifiEntries = mWifiPickerTracker.getWifiEntries();
         final WifiEntry connectedWifiEntry = mWifiPickerTracker.getConnectedWifiEntry();
         if (connectedWifiEntry != null) {
@@ -250,24 +256,29 @@
             wifiEntries.add(connectedWifiEntry);
         }
 
+        boolean canFindNetwork = false;
         for (WifiEntry wifiEntry : wifiEntries) {
             if (!TextUtils.equals(wifiEntry.getSsid(), sanitizeSsid(wifiConfiguration.SSID))) {
                 continue;
             }
+            canFindNetwork = true;
             final int security =
                     WifiDppUtils.getSecurityTypeFromWifiConfiguration(wifiConfiguration);
             if (security == wifiEntry.getSecurity()) {
-                return true;
+                return REACHABLE_WIFI_NETWORK;
             }
 
             // Default security type of PSK/SAE transition mode WifiEntry is SECURITY_PSK and
             // there is no way to know if a WifiEntry is of transition mode. Give it a chance.
             if (security == WifiEntry.SECURITY_SAE
                     && wifiEntry.getSecurity() == WifiEntry.SECURITY_PSK) {
-                return true;
+                return REACHABLE_WIFI_NETWORK;
             }
         }
-        return false;
+        if (canFindNetwork) {
+            return R.string.wifi_dpp_check_connection_no_matched_security;
+        }
+        return R.string.wifi_dpp_check_connection_no_matched_ssid;
     }
 
     @VisibleForTesting
diff --git a/tests/robotests/src/com/android/settings/UtilsTest.java b/tests/robotests/src/com/android/settings/UtilsTest.java
index 107a1b3..8f4b83e 100644
--- a/tests/robotests/src/com/android/settings/UtilsTest.java
+++ b/tests/robotests/src/com/android/settings/UtilsTest.java
@@ -564,6 +564,8 @@
     @Test
     @EnableFlags(Flags.FLAG_MANDATORY_BIOMETRICS)
     public void testRequestBiometricAuthentication_biometricManagerReturnsSuccessForDifferentUser_shouldReturnError() {
+        when(mContext.getSystemService(UserManager.class)).thenReturn(mMockUserManager);
+        when(mMockUserManager.getCredentialOwnerProfile(USER_ID)).thenReturn(USER_ID);
         when(mBiometricManager.canAuthenticate(anyInt(),
                 eq(BiometricManager.Authenticators.MANDATORY_BIOMETRICS)))
                 .thenReturn(BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE);
@@ -579,6 +581,8 @@
     @EnableFlags(Flags.FLAG_MANDATORY_BIOMETRICS)
     public void testLaunchBiometricPrompt_checkIntentValues() {
         when(mFragment.getContext()).thenReturn(mContext);
+        when(mContext.getSystemService(UserManager.class)).thenReturn(mMockUserManager);
+        when(mMockUserManager.getCredentialOwnerProfile(USER_ID)).thenReturn(USER_ID);
 
         final int requestCode = 1;
         final ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class);
diff --git a/tests/robotests/src/com/android/settings/accessibility/KeyboardBounceKeyPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/KeyboardBounceKeyPreferenceControllerTest.java
deleted file mode 100644
index bf6efd0..0000000
--- a/tests/robotests/src/com/android/settings/accessibility/KeyboardBounceKeyPreferenceControllerTest.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (C) 2024 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.settings.accessibility;
-
-import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
-import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-
-import android.content.Context;
-import android.platform.test.annotations.EnableFlags;
-import android.platform.test.flag.junit.SetFlagsRule;
-import android.provider.Settings;
-
-import androidx.preference.PreferenceManager;
-import androidx.preference.PreferenceScreen;
-import androidx.preference.SwitchPreference;
-import androidx.test.core.app.ApplicationProvider;
-
-import com.android.settings.core.BasePreferenceController;
-
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@RunWith(RobolectricTestRunner.class)
-public class KeyboardBounceKeyPreferenceControllerTest {
-    private static final String KEY_ACCESSIBILITY_BOUNCE_KEYS =
-            Settings.Secure.ACCESSIBILITY_BOUNCE_KEYS;
-    private static final int UNKNOWN = -1;
-
-    @Rule
-    public final SetFlagsRule mSetFlagRule = new SetFlagsRule();
-    private final Context mContext = ApplicationProvider.getApplicationContext();
-    private final SwitchPreference mSwitchPreference = spy(new SwitchPreference(mContext));
-    private final KeyboardBounceKeyPreferenceController mController =
-            new KeyboardBounceKeyPreferenceController(mContext,
-                    KeyboardBounceKeyPreferenceController.PREF_KEY);
-
-    @Before
-    public void setUp() {
-        final PreferenceManager preferenceManager = new PreferenceManager(mContext);
-        final PreferenceScreen screen = preferenceManager.createPreferenceScreen(mContext);
-        mSwitchPreference.setKey(KeyboardBounceKeyPreferenceController.PREF_KEY);
-        screen.addPreference(mSwitchPreference);
-        mController.displayPreference(screen);
-    }
-
-    @Test
-    public void getAvailabilityStatus_byDefault_shouldReturnAvailable() {
-        assertThat(mController.getAvailabilityStatus()).isEqualTo(
-                BasePreferenceController.AVAILABLE);
-    }
-
-    @Test
-    public void isChecked_disableBounceKey_onResumeShouldReturnFalse() {
-        Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_BOUNCE_KEYS, OFF);
-
-        mController.updateState(mSwitchPreference);
-
-        assertThat(mController.isChecked()).isFalse();
-        assertThat(mSwitchPreference.isChecked()).isFalse();
-    }
-
-    @Test
-    public void isChecked_enableBounceKey_onResumeShouldReturnTrue() {
-        Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_BOUNCE_KEYS, ON);
-
-        mController.updateState(mSwitchPreference);
-
-        assertThat(mController.isChecked()).isTrue();
-        assertThat(mSwitchPreference.isChecked()).isTrue();
-    }
-
-    @Test
-    public void performClick_enableBounceKey_shouldReturnTrue() {
-        Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_BOUNCE_KEYS, OFF);
-
-        mController.updateState(mSwitchPreference);
-
-        mSwitchPreference.performClick();
-
-        verify(mSwitchPreference).setChecked(true);
-        assertThat(mController.isChecked()).isTrue();
-        assertThat(mSwitchPreference.isChecked()).isTrue();
-    }
-
-    @Test
-    public void performClick_disableBounceKey_shouldReturnFalse() {
-        Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_BOUNCE_KEYS, ON);
-
-        mController.updateState(mSwitchPreference);
-
-        mSwitchPreference.performClick();
-
-        verify(mSwitchPreference).setChecked(false);
-        assertThat(mController.isChecked()).isFalse();
-        assertThat(mSwitchPreference.isChecked()).isFalse();
-    }
-
-    @Test
-    public void setChecked_setFalse_shouldDisableBounceKey() {
-        mController.setChecked(false);
-
-        assertThat(Settings.Secure.getInt(
-                mContext.getContentResolver(), KEY_ACCESSIBILITY_BOUNCE_KEYS, UNKNOWN)).isEqualTo(
-                OFF);
-    }
-
-    @Test
-    public void setChecked_setTrue_shouldEnableBounceKey() {
-        mController.setChecked(true);
-
-        assertThat(Settings.Secure.getInt(
-                mContext.getContentResolver(), KEY_ACCESSIBILITY_BOUNCE_KEYS,
-                UNKNOWN)).isNotEqualTo(OFF);
-    }
-
-    @Test
-    @EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
-    public void updateNonIndexableKeys_physicalKeyboardExists_returnEmptyList() {
-        Assume.assumeTrue(AccessibilitySettings.isAnyHardKeyboardsExist());
-
-        List<String> nonIndexableKeys = new ArrayList<>();
-        mController.updateNonIndexableKeys(nonIndexableKeys);
-
-        assertThat(nonIndexableKeys).isEmpty();
-    }
-
-    @Test
-    @EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
-    public void updateNonIndexableKeys_noPhysicalKeyboard_returnPreKey() {
-        Assume.assumeFalse(AccessibilitySettings.isAnyHardKeyboardsExist());
-
-        List<String> nonIndexableKeys = new ArrayList<>();
-        mController.updateNonIndexableKeys(nonIndexableKeys);
-
-        assertThat(nonIndexableKeys).contains(mController.getPreferenceKey());
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/accessibility/KeyboardSlowKeyPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/KeyboardSlowKeyPreferenceControllerTest.java
deleted file mode 100644
index 2721a64..0000000
--- a/tests/robotests/src/com/android/settings/accessibility/KeyboardSlowKeyPreferenceControllerTest.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (C) 2024 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.settings.accessibility;
-
-import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
-import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-
-import android.content.Context;
-import android.platform.test.annotations.EnableFlags;
-import android.platform.test.flag.junit.SetFlagsRule;
-import android.provider.Settings;
-
-import androidx.preference.PreferenceManager;
-import androidx.preference.PreferenceScreen;
-import androidx.preference.SwitchPreference;
-import androidx.test.core.app.ApplicationProvider;
-
-import com.android.settings.core.BasePreferenceController;
-
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@RunWith(RobolectricTestRunner.class)
-public class KeyboardSlowKeyPreferenceControllerTest {
-    private static final String KEY_ACCESSIBILITY_SLOW_KEYS =
-            Settings.Secure.ACCESSIBILITY_SLOW_KEYS;
-    private static final int UNKNOWN = -1;
-
-    @Rule
-    public final SetFlagsRule mSetFlagRule = new SetFlagsRule();
-    private final Context mContext = ApplicationProvider.getApplicationContext();
-    private final SwitchPreference mSwitchPreference = spy(new SwitchPreference(mContext));
-    private final KeyboardSlowKeyPreferenceController mController =
-            new KeyboardSlowKeyPreferenceController(mContext,
-                    KeyboardSlowKeyPreferenceController.PREF_KEY);
-
-    @Before
-    public void setUp() {
-        final PreferenceManager preferenceManager = new PreferenceManager(mContext);
-        final PreferenceScreen screen = preferenceManager.createPreferenceScreen(mContext);
-        mSwitchPreference.setKey(KeyboardSlowKeyPreferenceController.PREF_KEY);
-        screen.addPreference(mSwitchPreference);
-        mController.displayPreference(screen);
-    }
-
-    @Test
-    public void getAvailabilityStatus_byDefault_shouldReturnAvailable() {
-        assertThat(mController.getAvailabilityStatus()).isEqualTo(
-                BasePreferenceController.AVAILABLE);
-    }
-
-    @Test
-    public void isChecked_disableSlowKey_onResumeShouldReturnFalse() {
-        Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_SLOW_KEYS, OFF);
-
-        mController.updateState(mSwitchPreference);
-
-        assertThat(mController.isChecked()).isFalse();
-        assertThat(mSwitchPreference.isChecked()).isFalse();
-    }
-
-    @Test
-    public void isChecked_enableSlowKey_onResumeShouldReturnTrue() {
-        Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_SLOW_KEYS, ON);
-
-        mController.updateState(mSwitchPreference);
-
-        assertThat(mController.isChecked()).isTrue();
-        assertThat(mSwitchPreference.isChecked()).isTrue();
-    }
-
-    @Test
-    public void performClick_enableSlowKey_shouldReturnTrue() {
-        Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_SLOW_KEYS, OFF);
-
-        mController.updateState(mSwitchPreference);
-
-        mSwitchPreference.performClick();
-
-        verify(mSwitchPreference).setChecked(true);
-        assertThat(mController.isChecked()).isTrue();
-        assertThat(mSwitchPreference.isChecked()).isTrue();
-    }
-
-    @Test
-    public void performClick_disableSlowKey_shouldReturnFalse() {
-        Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_SLOW_KEYS, ON);
-
-        mController.updateState(mSwitchPreference);
-
-        mSwitchPreference.performClick();
-
-        verify(mSwitchPreference).setChecked(false);
-        assertThat(mController.isChecked()).isFalse();
-        assertThat(mSwitchPreference.isChecked()).isFalse();
-    }
-
-    @Test
-    public void setChecked_setFalse_shouldDisableSlowKey() {
-        mController.setChecked(false);
-
-        assertThat(Settings.Secure.getInt(
-                mContext.getContentResolver(), KEY_ACCESSIBILITY_SLOW_KEYS, UNKNOWN)).isEqualTo(
-                OFF);
-    }
-
-    @Test
-    public void setChecked_setTrue_shouldEnableSlowKey() {
-        mController.setChecked(true);
-
-        assertThat(Settings.Secure.getInt(
-                mContext.getContentResolver(), KEY_ACCESSIBILITY_SLOW_KEYS, UNKNOWN)).isNotEqualTo(
-                OFF);
-    }
-
-    @Test
-    @EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
-    public void updateNonIndexableKeys_physicalKeyboardExists_returnEmptyList() {
-        Assume.assumeTrue(AccessibilitySettings.isAnyHardKeyboardsExist());
-
-        List<String> nonIndexableKeys = new ArrayList<>();
-        mController.updateNonIndexableKeys(nonIndexableKeys);
-
-        assertThat(nonIndexableKeys).isEmpty();
-    }
-
-    @Test
-    @EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
-    public void updateNonIndexableKeys_noPhysicalKeyboard_returnPreKey() {
-        Assume.assumeFalse(AccessibilitySettings.isAnyHardKeyboardsExist());
-
-        List<String> nonIndexableKeys = new ArrayList<>();
-        mController.updateNonIndexableKeys(nonIndexableKeys);
-
-        assertThat(nonIndexableKeys).contains(mController.getPreferenceKey());
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/accessibility/KeyboardStickyKeyPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/KeyboardStickyKeyPreferenceControllerTest.java
deleted file mode 100644
index 0001e85..0000000
--- a/tests/robotests/src/com/android/settings/accessibility/KeyboardStickyKeyPreferenceControllerTest.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 2024 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.settings.accessibility;
-
-import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
-import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-
-import android.content.Context;
-import android.platform.test.annotations.EnableFlags;
-import android.platform.test.flag.junit.SetFlagsRule;
-import android.provider.Settings;
-
-import androidx.preference.PreferenceManager;
-import androidx.preference.PreferenceScreen;
-import androidx.preference.SwitchPreference;
-import androidx.test.core.app.ApplicationProvider;
-
-import com.android.settings.core.BasePreferenceController;
-
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@RunWith(RobolectricTestRunner.class)
-public class KeyboardStickyKeyPreferenceControllerTest {
-    private static final String KEY_ACCESSIBILITY_STICKY_KEYS =
-            Settings.Secure.ACCESSIBILITY_STICKY_KEYS;
-    private static final int UNKNOWN = -1;
-
-    @Rule
-    public final SetFlagsRule mSetFlagRule = new SetFlagsRule();
-    private final Context mContext = ApplicationProvider.getApplicationContext();
-    private final SwitchPreference mSwitchPreference = spy(new SwitchPreference(mContext));
-    private final KeyboardStickyKeyPreferenceController mController =
-            new KeyboardStickyKeyPreferenceController(mContext,
-                    KeyboardStickyKeyPreferenceController.PREF_KEY);
-
-    @Before
-    public void setUp() {
-        final PreferenceManager preferenceManager = new PreferenceManager(mContext);
-        final PreferenceScreen screen = preferenceManager.createPreferenceScreen(mContext);
-        mSwitchPreference.setKey(KeyboardStickyKeyPreferenceController.PREF_KEY);
-        screen.addPreference(mSwitchPreference);
-        mController.displayPreference(screen);
-    }
-
-    @Test
-    public void getAvailabilityStatus_byDefault_shouldReturnAvailable() {
-        assertThat(mController.getAvailabilityStatus()).isEqualTo(
-                BasePreferenceController.AVAILABLE);
-    }
-
-    @Test
-    public void isChecked_disableStickyKey_onResumeShouldReturnFalse() {
-        Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_STICKY_KEYS, OFF);
-
-        mController.updateState(mSwitchPreference);
-
-        assertThat(mController.isChecked()).isFalse();
-        assertThat(mSwitchPreference.isChecked()).isFalse();
-    }
-
-    @Test
-    public void isChecked_enableStickyKey_onResumeShouldReturnTrue() {
-        Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_STICKY_KEYS, ON);
-
-        mController.updateState(mSwitchPreference);
-
-        assertThat(mController.isChecked()).isTrue();
-        assertThat(mSwitchPreference.isChecked()).isTrue();
-    }
-
-    @Test
-    public void performClick_enableStickyKey_shouldReturnTrue() {
-        Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_STICKY_KEYS, OFF);
-
-        mController.updateState(mSwitchPreference);
-
-        mSwitchPreference.performClick();
-
-        verify(mSwitchPreference).setChecked(true);
-        assertThat(mController.isChecked()).isTrue();
-        assertThat(mSwitchPreference.isChecked()).isTrue();
-    }
-
-    @Test
-    public void performClick_disableStickyKey_shouldReturnFalse() {
-        Settings.Secure.putInt(mContext.getContentResolver(), KEY_ACCESSIBILITY_STICKY_KEYS, ON);
-
-        mController.updateState(mSwitchPreference);
-
-        mSwitchPreference.performClick();
-
-        verify(mSwitchPreference).setChecked(false);
-        assertThat(mController.isChecked()).isFalse();
-        assertThat(mSwitchPreference.isChecked()).isFalse();
-    }
-
-    @Test
-    public void setChecked_setFalse_shouldDisableStickyKey() {
-        mController.setChecked(false);
-
-        assertThat(Settings.Secure.getInt(
-            mContext.getContentResolver(), KEY_ACCESSIBILITY_STICKY_KEYS, UNKNOWN)).isEqualTo(OFF);
-    }
-
-    @Test
-    public void setChecked_setTrue_shouldEnableStickyKey() {
-        mController.setChecked(true);
-
-        assertThat(Settings.Secure.getInt(
-            mContext.getContentResolver(), KEY_ACCESSIBILITY_STICKY_KEYS, UNKNOWN)).isEqualTo(ON);
-    }
-
-    @Test
-    @EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
-    public void updateNonIndexableKeys_physicalKeyboardExists_returnEmptyList() {
-        Assume.assumeTrue(AccessibilitySettings.isAnyHardKeyboardsExist());
-
-        List<String> nonIndexableKeys = new ArrayList<>();
-        mController.updateNonIndexableKeys(nonIndexableKeys);
-
-        assertThat(nonIndexableKeys).isEmpty();
-    }
-
-    @Test
-    @EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
-    public void updateNonIndexableKeys_noPhysicalKeyboard_returnPreKey() {
-        Assume.assumeFalse(AccessibilitySettings.isAnyHardKeyboardsExist());
-
-        List<String> nonIndexableKeys = new ArrayList<>();
-        mController.updateNonIndexableKeys(nonIndexableKeys);
-
-        assertThat(nonIndexableKeys).contains(mController.getPreferenceKey());
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/datausage/AppDataUsagePreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/AppDataUsagePreferenceTest.java
index 7e6d314..f621cbf 100644
--- a/tests/robotests/src/com/android/settings/datausage/AppDataUsagePreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/AppDataUsagePreferenceTest.java
@@ -91,7 +91,7 @@
         mPreference = new AppDataUsagePreference(RuntimeEnvironment.application, mAppItem,
                 50 /* percent */, mUidDetailProvider);
         final View view = LayoutInflater.from(RuntimeEnvironment.application).inflate(
-                com.android.settingslib.widget.preference.app.R.layout.preference_app, null);
+                com.android.settings.R.layout.preference_process_stats, null);
         final PreferenceViewHolder preferenceViewHolder =
                 PreferenceViewHolder.createInstanceForTests(view);
         final ProgressBar progressBar = (ProgressBar) preferenceViewHolder.findViewById(
diff --git a/tests/robotests/src/com/android/settings/inputmethod/PhysicalKeyboardA11yPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/PhysicalKeyboardA11yPreferenceControllerTest.java
new file mode 100644
index 0000000..5c6dd14
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/inputmethod/PhysicalKeyboardA11yPreferenceControllerTest.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2024 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.settings.inputmethod;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.platform.test.annotations.EnableFlags;
+import android.platform.test.flag.junit.SetFlagsRule;
+import android.view.InputDevice;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.keyboard.Flags;
+import com.android.settings.testutils.shadow.ShadowInputDevice;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+
+/** Tests for {@link PhysicalKeyboardA11yPreferenceController} */
+@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {
+        com.android.settings.testutils.shadow.ShadowInputDevice.class,
+})
+public class PhysicalKeyboardA11yPreferenceControllerTest {
+    @Rule
+    public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
+    private static final String PREFERENCE_KEY = "physical_keyboard_a11y";
+    private Context mContext;
+    private PhysicalKeyboardA11yPreferenceController mController;
+    @Mock
+    InputDevice mInputDevice;
+
+    @Before
+    public void setUp() {
+        mContext = ApplicationProvider.getApplicationContext();
+        mController = new PhysicalKeyboardA11yPreferenceController(mContext, PREFERENCE_KEY);
+    }
+
+    @Test
+    @EnableFlags(Flags.FLAG_KEYBOARD_AND_TOUCHPAD_A11Y_NEW_PAGE_ENABLED)
+    public void getAvailabilityStatus_expected() {
+        int deviceId = 1;
+        ShadowInputDevice.sDeviceIds = new int[]{deviceId};
+        when(mInputDevice.isVirtual()).thenReturn(false);
+        when(mInputDevice.isFullKeyboard()).thenReturn(true);
+
+        ShadowInputDevice.addDevice(deviceId, mInputDevice);
+
+        assertThat(InputDevice.getDeviceIds()).isNotEmpty();
+        assertThat(mController.getAvailabilityStatus())
+                .isEqualTo(BasePreferenceController.AVAILABLE);
+
+    }
+
+    @Test
+    @EnableFlags(Flags.FLAG_KEYBOARD_AND_TOUCHPAD_A11Y_NEW_PAGE_ENABLED)
+    public void getAvailabilityStatus_deviceIsNotAsExpected_unavailable() {
+        int deviceId = 1;
+        ShadowInputDevice.sDeviceIds = new int[]{deviceId};
+        when(mInputDevice.isVirtual()).thenReturn(true);
+        when(mInputDevice.isFullKeyboard()).thenReturn(false);
+
+        ShadowInputDevice.addDevice(deviceId, mInputDevice);
+
+        assertThat(InputDevice.getDeviceIds()).isNotEmpty();
+        assertThat(mController.getAvailabilityStatus())
+                .isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
+
+    }
+
+}
diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeEditNamePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeEditNamePreferenceControllerTest.java
index 795de50..caaa1a5 100644
--- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeEditNamePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeEditNamePreferenceControllerTest.java
@@ -35,6 +35,8 @@
 import com.android.settingslib.notification.modes.ZenMode;
 import com.android.settingslib.widget.LayoutPreference;
 
+import com.google.android.material.textfield.TextInputLayout;
+
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -55,6 +57,7 @@
 
     private ZenModeEditNamePreferenceController mController;
     private LayoutPreference mPreference;
+    private TextInputLayout mTextInputLayout;
     private EditText mEditText;
     @Mock private Consumer<String> mNameSetter;
 
@@ -64,12 +67,15 @@
 
         Context context = RuntimeEnvironment.application;
         PreferenceManager preferenceManager = new PreferenceManager(context);
+
+        // Inflation is a test in itself, because it will crash if the Theme isn't set correctly.
         PreferenceScreen preferenceScreen = preferenceManager.inflateFromResource(context,
                 R.xml.modes_edit_name_icon, null);
         mPreference = preferenceScreen.findPreference("name");
 
         mController = new ZenModeEditNamePreferenceController(context, "name", mNameSetter);
         mController.displayPreference(preferenceScreen);
+        mTextInputLayout = mPreference.findViewById(R.id.edit_input_layout);
         mEditText = mPreference.findViewById(android.R.id.edit);
         assertThat(mEditText).isNotNull();
     }
@@ -88,11 +94,24 @@
     public void onEditText_callsNameSetter() {
         ZenMode mode = new TestModeBuilder().setName("A fancy name").build();
         mController.updateState(mPreference, mode);
-        EditText editText = mPreference.findViewById(android.R.id.edit);
 
-        editText.setText("An even fancier name");
+        mEditText.setText("An even fancier name");
 
         verify(mNameSetter).accept("An even fancier name");
         verifyNoMoreInteractions(mNameSetter);
     }
+
+    @Test
+    public void onEditText_emptyText_showsError() {
+        ZenMode mode = new TestModeBuilder().setName("Default name").build();
+        mController.updateState(mPreference, mode);
+
+        mEditText.setText("");
+
+        assertThat(mTextInputLayout.getError()).isNotNull();
+
+        mEditText.setText("this is fine");
+
+        assertThat(mTextInputLayout.getError()).isNull();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/notification/zen/ZenOnboardingActivityTest.java b/tests/robotests/src/com/android/settings/notification/zen/ZenOnboardingActivityTest.java
deleted file mode 100644
index 01360fd..0000000
--- a/tests/robotests/src/com/android/settings/notification/zen/ZenOnboardingActivityTest.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.settings.notification.zen;
-
-import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_ALARMS;
-import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_REPEAT_CALLERS;
-import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_SCREEN_ON;
-
-import static com.android.settings.notification.zen.ZenOnboardingActivity.ALWAYS_SHOW_THRESHOLD;
-import static com.android.settings.notification.zen.ZenOnboardingActivity.PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME;
-import static com.android.settings.notification.zen.ZenOnboardingActivity.isSuggestionComplete;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyBoolean;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.app.Flags;
-import android.app.NotificationManager;
-import android.app.NotificationManager.Policy;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.provider.Settings;
-
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.testutils.FakeFeatureFactory;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.Robolectric;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.shadows.ShadowApplication;
-
-@RunWith(RobolectricTestRunner.class)
-public class ZenOnboardingActivityTest {
-
-    @Mock
-    private MetricsLogger mMetricsLogger;
-    @Mock
-    private NotificationManager mNm;
-
-    private ZenOnboardingActivity mActivity;
-
-    private Context mContext;
-    private FakeFeatureFactory mFeatureFactory;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        ShadowApplication shadowApplication = ShadowApplication.getInstance();
-        shadowApplication.setSystemService(Context.NOTIFICATION_SERVICE, mNm);
-
-        mActivity = Robolectric.buildActivity(ZenOnboardingActivity.class)
-                .create()
-                .get();
-        mActivity.setNotificationManager(mNm);
-        mActivity.setMetricsLogger(mMetricsLogger);
-
-        mActivity.setupUI();
-
-        mContext = RuntimeEnvironment.application;
-        mFeatureFactory = FakeFeatureFactory.setupForTest();
-        when(mFeatureFactory.suggestionsFeatureProvider.getSharedPrefs(any(Context.class)))
-                .thenReturn(getSharedPreferences());
-    }
-
-    @Test
-    public void loadUiRecordsEvent() {
-        verify(mMetricsLogger).visible(MetricsEvent.SETTINGS_ZEN_ONBOARDING);
-    }
-
-    @Test
-    public void saveNewSetting() {
-        Policy policy = new Policy(PRIORITY_CATEGORY_ALARMS, 0, 0, SUPPRESSED_EFFECT_SCREEN_ON);
-        when(mNm.getNotificationPolicy()).thenReturn(policy);
-
-        mActivity.mNewSetting.performClick();
-        mActivity.save(null);
-
-        verify(mMetricsLogger).action(MetricsEvent.ACTION_ZEN_ONBOARDING_OK);
-
-        ArgumentCaptor<Policy> captor = ArgumentCaptor.forClass(Policy.class);
-        if (android.app.Flags.modesApi()) {
-            verify(mNm).setNotificationPolicy(captor.capture(), eq(true));
-        } else {
-            verify(mNm).setNotificationPolicy(captor.capture());
-        }
-
-        Policy actual = captor.getValue();
-        assertThat(actual.priorityCategories).isEqualTo(PRIORITY_CATEGORY_ALARMS
-                | PRIORITY_CATEGORY_REPEAT_CALLERS);
-        assertThat(actual.priorityCallSenders).isEqualTo(Policy.PRIORITY_SENDERS_STARRED);
-        assertThat(actual.priorityMessageSenders).isEqualTo(Policy.PRIORITY_SENDERS_ANY);
-        assertThat(actual.suppressedVisualEffects).isEqualTo(
-                Policy.getAllSuppressedVisualEffects());
-    }
-
-    @Test
-    public void keepCurrentSetting() {
-        Policy policy = new Policy(PRIORITY_CATEGORY_ALARMS, 0, 0, SUPPRESSED_EFFECT_SCREEN_ON);
-        when(mNm.getNotificationPolicy()).thenReturn(policy);
-
-        mActivity.mKeepCurrentSetting.performClick();
-        mActivity.save(null);
-
-        verify(mMetricsLogger).action(MetricsEvent.ACTION_ZEN_ONBOARDING_KEEP_CURRENT_SETTINGS);
-        if (Flags.modesApi()) {
-            verify(mNm, never()).setNotificationPolicy(any(), anyBoolean());
-        } else {
-            verify(mNm, never()).setNotificationPolicy(any());
-        }
-    }
-
-    @Test
-    public void isSuggestionComplete_zenUpdated() {
-        Policy policy = new Policy(0, 0, 0, 0);
-        when(mNm.getNotificationPolicy()).thenReturn(policy);
-
-        setZenUpdated(true);
-        setShowSettingsSuggestion(false);
-        setWithinTimeThreshold(true);
-        assertThat(isSuggestionComplete(mContext)).isTrue();
-    }
-
-    @Test
-    public void isSuggestionComplete_withinTimeThreshold() {
-        Policy policy = new Policy(0, 0, 0, 0);
-        when(mNm.getNotificationPolicy()).thenReturn(policy);
-
-        setZenUpdated(false);
-        setShowSettingsSuggestion(false);
-        setWithinTimeThreshold(true);
-        assertThat(isSuggestionComplete(mContext)).isFalse();
-    }
-
-    @Test
-    public void isSuggestionComplete_showSettingsSuggestionTrue() {
-        Policy policy = new Policy(0, 0, 0, 0);
-        when(mNm.getNotificationPolicy()).thenReturn(policy);
-
-        setZenUpdated(false);
-        setShowSettingsSuggestion(true);
-        setWithinTimeThreshold(false);
-        assertThat(isSuggestionComplete(mContext)).isFalse();
-    }
-
-    @Test
-    public void isSuggestionComplete_showSettingsSuggestionFalse_notWithinTimeThreshold() {
-        Policy policy = new Policy(0, 0, 0, 0);
-        when(mNm.getNotificationPolicy()).thenReturn(policy);
-
-        setZenUpdated(false);
-        setShowSettingsSuggestion(false);
-        setWithinTimeThreshold(false);
-        assertThat(isSuggestionComplete(mContext)).isTrue();
-    }
-
-
-    @Test
-    public void isSuggestionComplete_visualEffectsUpdated() {
-        // all values suppressed
-        Policy policy = new Policy(0, 0, 0, 511);
-        when(mNm.getNotificationPolicy()).thenReturn(policy);
-
-        setZenUpdated(false);
-        setShowSettingsSuggestion(true);
-        setWithinTimeThreshold(true);
-        assertThat(isSuggestionComplete(mContext)).isTrue();
-        assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
-                Settings.Secure.ZEN_SETTINGS_UPDATED, -1)).isEqualTo(1);
-    }
-
-
-    private void setZenUpdated(boolean updated) {
-        int zenUpdated = updated ? 1 : 0;
-
-        Settings.Secure.putInt(mContext.getContentResolver(),
-                Settings.Secure.ZEN_SETTINGS_UPDATED, zenUpdated);
-    }
-
-    private void setWithinTimeThreshold(boolean withinTime) {
-        long firstTime = System.currentTimeMillis();
-
-        if (withinTime) {
-            firstTime -= ALWAYS_SHOW_THRESHOLD / 2;
-        } else {
-            firstTime -= ALWAYS_SHOW_THRESHOLD * 2;
-        }
-
-        getSharedPreferences().edit().putLong(PREF_KEY_SUGGESTION_FIRST_DISPLAY_TIME,
-               firstTime).commit();
-    }
-
-    private void setShowSettingsSuggestion(boolean show) {
-        int showZenSuggestion = 0;
-        if (show) {
-            showZenSuggestion = 1;
-        }
-
-        Settings.Secure.putInt(mContext.getContentResolver(),
-                Settings.Secure.SHOW_ZEN_SETTINGS_SUGGESTION, showZenSuggestion);
-    }
-
-    private SharedPreferences getSharedPreferences() {
-        return mContext.getSharedPreferences("test_zen_sugg", Context.MODE_PRIVATE);
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java b/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java
index 9f02f1f..ee1872d 100644
--- a/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java
+++ b/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java
@@ -29,7 +29,6 @@
 import com.android.settings.Settings;
 import com.android.settings.biometrics.fingerprint.FingerprintEnrollSuggestionActivity;
 import com.android.settings.biometrics.fingerprint.FingerprintSuggestionActivity;
-import com.android.settings.notification.zen.ZenSuggestionActivity;
 import com.android.settings.wallpaper.WallpaperSuggestionActivity;
 import com.android.settings.wifi.calling.WifiCallingSuggestionActivity;
 
@@ -81,14 +80,6 @@
                 R.string.night_display_suggestion_summary);
     }
 
-    @Test
-    public void zenSuggestion_isValid() {
-        assertSuggestionEquals(
-                ZenSuggestionActivity.class.getName(),
-                R.string.zen_suggestion_title,
-                R.string.zen_suggestion_summary);
-    }
-
     private void assertSuggestionEquals(String activityName, @StringRes int titleRes,
             @StringRes int summaryRes) {
 
diff --git a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
index 85db0bd..754c429 100644
--- a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
@@ -37,6 +37,7 @@
 import static org.mockito.Mockito.when;
 import static org.robolectric.Shadows.shadowOf;
 
+import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.ComponentName;
 import android.content.Context;
@@ -112,6 +113,7 @@
     private static final String KEY_USER_GUEST = "user_guest";
     private static final String KEY_ALLOW_MULTIPLE_USERS = "allow_multiple_users";
     private static final String KEY_USER_SETTINGS_SCREEN = "user_settings_screen";
+    private static final String KEY_ADD_USER = "user_add";
     private static final int ACTIVE_USER_ID = 0;
     private static final int INACTIVE_ADMIN_USER_ID = 1;
     private static final int INACTIVE_SECONDARY_USER_ID = 14;
@@ -130,6 +132,8 @@
     @Mock
     private PreferenceManager mMockPreferenceManager;
     @Mock
+    private DevicePolicyManager mDevicePolicyManager;
+    @Mock
     private UserPreference mMePreference;
     @Mock
     private RestrictedPreference mAddUserPreference;
@@ -222,7 +226,7 @@
 
     @Test
     public void testGetRawDataToIndex_returnAllIndexablePreferences() {
-        String[] expectedKeys = {KEY_ALLOW_MULTIPLE_USERS, KEY_USER_SETTINGS_SCREEN};
+        String[] expectedKeys = {KEY_ALLOW_MULTIPLE_USERS, KEY_USER_SETTINGS_SCREEN, KEY_ADD_USER};
         List<String> keysResultList = new ArrayList<>();
         ShadowUserManager.getShadow().setSupportsMultipleUsers(true);
         List<SearchIndexableRaw> rawData =
@@ -236,6 +240,54 @@
     }
 
     @Test
+    public void testGetRawDataToIndex_addRestrictedProfileAllowed_addUserTitleIsCorrect() {
+        ShadowUserManager.getShadow().setSupportsMultipleUsers(true);
+        SettingsShadowResources.overrideResource(
+                com.android.settings.R.bool.config_offer_restricted_profiles,
+                Boolean.TRUE);
+        when(mUserManager.hasBaseUserRestriction(UserManager.DISALLOW_ADD_USER, mContext.getUser()))
+                .thenReturn(false);
+        ShadowUserManager.getShadow().setUserTypeEnabled(UserManager.USER_TYPE_FULL_RESTRICTED,
+                true);
+        when(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE))
+                .thenReturn(mDevicePolicyManager);
+        when(mDevicePolicyManager.isDeviceManaged()).thenReturn(false);
+
+        List<SearchIndexableRaw> rawData =
+                UserSettings.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex(mContext, true);
+
+        String title = null;
+        for (SearchIndexableRaw rawDataItem : rawData) {
+            if (rawDataItem.key.equals(KEY_ADD_USER)) {
+                title = rawDataItem.title;
+            }
+        }
+
+        assertThat(title).isEqualTo(mContext.getString(
+                com.android.settings.R.string.user_add_user_or_profile_menu));
+    }
+
+    @Test
+    public void testGetRawDataToIndex_addRestrictedProfileDisallowed_addUserTitleIsCorrect() {
+        ShadowUserManager.getShadow().setSupportsMultipleUsers(true);
+        SettingsShadowResources.overrideResource(
+                com.android.settings.R.bool.config_offer_restricted_profiles,
+                Boolean.FALSE);
+        List<SearchIndexableRaw> rawData =
+                UserSettings.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex(mContext, true);
+
+        String title = null;
+        for (SearchIndexableRaw rawDataItem : rawData) {
+            if (rawDataItem.key.equals(KEY_ADD_USER)) {
+                title = rawDataItem.title;
+            }
+        }
+
+        assertThat(title).isEqualTo(mContext.getString(
+                com.android.settingslib.R.string.user_add_user));
+    }
+
+    @Test
     public void testAssignDefaultPhoto_hasDefaultUserIconSize() {
         doReturn(mUserManager).when(mContext).getSystemService(Context.USER_SERVICE);
         int size = 100;
diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.kt
index 4babfaa..b9bda77 100644
--- a/tests/spa_unit/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.kt
+++ b/tests/spa_unit/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.kt
@@ -47,6 +47,8 @@
     private val context: Context = ApplicationProvider.getApplicationContext()
 
     private val mockCallStateRepository = mock<CallStateRepository> {}
+    private val mockVideoCallingRepository = mock<VideoCallingRepository> {}
+
 
     private var controller =
         spy(
@@ -54,6 +56,7 @@
                 context = context,
                 key = TEST_KEY,
                 callStateRepository = mockCallStateRepository,
+                videoCallingRepository = mockVideoCallingRepository
             )
         ) {
             on { queryImsState(SUB_ID) } doReturn mockVtQueryImsState
@@ -70,6 +73,42 @@
         controller.displayPreference(preferenceScreen)
     }
 
+
+    @Test
+    fun displayPreference_uiInitState_isHidden() {
+        assertThat(preference.isVisible).isFalse()
+    }
+
+    @Test
+    fun onViewCreated_videoCallIsNotReady_isHidden() = runBlocking {
+        mockVideoCallingRepository.stub {
+            on { isVideoCallReadyFlow(SUB_ID) } doReturn flowOf(false)
+        }
+        mockCallStateRepository.stub {
+            on { callStateFlow(SUB_ID) } doReturn flowOf(TelephonyManager.CALL_STATE_IDLE)
+        }
+
+        controller.onViewCreated(TestLifecycleOwner())
+        delay(100)
+
+        assertThat(preference.isVisible).isFalse()
+    }
+
+    @Test
+    fun onViewCreated_videoCallIsNotReady_isShown() = runBlocking {
+        mockVideoCallingRepository.stub {
+            on { isVideoCallReadyFlow(SUB_ID) } doReturn flowOf(true)
+        }
+        mockCallStateRepository.stub {
+            on { callStateFlow(SUB_ID) } doReturn flowOf(TelephonyManager.CALL_STATE_IDLE)
+        }
+
+        controller.onViewCreated(TestLifecycleOwner())
+        delay(100)
+
+        assertThat(preference.isVisible).isTrue()
+    }
+
     @Test
     fun updateState_4gLteOff_disabledAndUnchecked() {
         mockQueryVoLteState.stub { on { isEnabledByUser } doReturn false }
@@ -82,6 +121,9 @@
 
     @Test
     fun updateState_4gLteOnWithoutCall_enabledAndChecked() = runBlocking {
+        mockVideoCallingRepository.stub {
+            on { isVideoCallReadyFlow(SUB_ID) } doReturn flowOf(true)
+        }
         mockVtQueryImsState.stub {
             on { isEnabledByUser } doReturn true
             on { isAllowUserControl } doReturn true
@@ -101,6 +143,9 @@
 
     @Test
     fun updateState_4gLteOnWithCall_disabledAndChecked() = runBlocking {
+        mockVideoCallingRepository.stub {
+            on { isVideoCallReadyFlow(SUB_ID) } doReturn flowOf(true)
+        }
         mockVtQueryImsState.stub {
             on { isEnabledByUser } doReturn true
             on { isAllowUserControl } doReturn true
diff --git a/tests/unit/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java b/tests/unit/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java
index 5f887de..1c51d1d 100644
--- a/tests/unit/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java
@@ -60,6 +60,7 @@
 import com.android.settings.network.ims.MockWfcQueryImsState;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -396,6 +397,7 @@
     }
 
     @Test
+    @Ignore
     public void getCurrentCarrierNameForDisplay_withoutSubId_returnNotNull() {
         assertThat(MobileNetworkUtils.getCurrentCarrierNameForDisplay(
                 mContext)).isNotNull();
diff --git a/tests/unit/src/com/android/settings/search/CustomSiteMapRegistryTest.java b/tests/unit/src/com/android/settings/search/CustomSiteMapRegistryTest.java
index a6ed5c7..b4d4fcf 100644
--- a/tests/unit/src/com/android/settings/search/CustomSiteMapRegistryTest.java
+++ b/tests/unit/src/com/android/settings/search/CustomSiteMapRegistryTest.java
@@ -18,6 +18,12 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import android.app.Flags;
+import android.platform.test.annotations.RequiresFlagsDisabled;
+import android.platform.test.annotations.RequiresFlagsEnabled;
+import android.platform.test.flag.junit.CheckFlagsRule;
+import android.platform.test.flag.junit.DeviceFlagsValueProvider;
+
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 
 import com.android.settings.backup.UserBackupSettingsActivity;
@@ -35,12 +41,16 @@
 import com.android.settings.security.screenlock.ScreenLockSettings;
 import com.android.settings.system.SystemDashboardFragment;
 
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
 @RunWith(AndroidJUnit4.class)
 public class CustomSiteMapRegistryTest {
 
+    @Rule
+    public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
+
     @Test
     public void shouldContainScreenLockSettingsPairs() {
         assertThat(CustomSiteMapRegistry.CUSTOM_SITE_MAP.get(ScreenLockSettings.class.getName()))
@@ -75,13 +85,21 @@
     }
 
     @Test
+    @RequiresFlagsDisabled(Flags.FLAG_MODES_UI)
     public void shouldContainZenModeBlockedEffectsSettingsPairs() {
-        assertThat(CustomSiteMapRegistry.CUSTOM_SITE_MAP.get(
-                ZenModeBlockedEffectsSettings.class.getName())).isEqualTo(
+        assertThat(CustomSiteMapRegistry.CUSTOM_SITE_MAP).containsEntry(
+                ZenModeBlockedEffectsSettings.class.getName(),
                 ZenModeRestrictNotificationsSettings.class.getName());
     }
 
     @Test
+    @RequiresFlagsEnabled(Flags.FLAG_MODES_UI)
+    public void shouldNotContainZenModeBlockedEffectsSettingsPairs() {
+        assertThat(CustomSiteMapRegistry.CUSTOM_SITE_MAP)
+                .doesNotContainKey(ZenModeBlockedEffectsSettings.class.getName());
+    }
+
+    @Test
     public void shouldContainGestureNavigationSettingsFragmentPairs() {
         assertThat(CustomSiteMapRegistry.CUSTOM_SITE_MAP.get(
                 GestureNavigationSettingsFragment.class.getName())).isEqualTo(
diff --git a/tests/unit/src/com/android/settings/vpn2/VpnSettingsTest.java b/tests/unit/src/com/android/settings/vpn2/VpnSettingsTest.java
index 953a524..9e13896 100644
--- a/tests/unit/src/com/android/settings/vpn2/VpnSettingsTest.java
+++ b/tests/unit/src/com/android/settings/vpn2/VpnSettingsTest.java
@@ -130,6 +130,7 @@
     }
 
     @Test
+    @UiThreadTest
     public void setShownAdvancedPreferences_hasGeneralVpn_returnsVpnCountAs1() {
         Set<Preference> updates = new ArraySet<>();
         AppPreference pref =
@@ -144,6 +145,7 @@
     }
 
     @Test
+    @UiThreadTest
     public void setShownAdvancedPreferences_hasAdvancedVpn_returnsAdvancedVpnCountAs1() {
         Set<Preference> updates = new ArraySet<>();
         AppPreference pref =
@@ -158,6 +160,7 @@
     }
 
     @Test
+    @UiThreadTest
     public void setShownAdvancedPreferences_noVpn_returnsEmpty() {
         Set<Preference> updates = new ArraySet<>();
 
@@ -170,6 +173,7 @@
     }
 
     @Test
+    @UiThreadTest
     public void getVpnApps_isAdvancedVpn_returnsOne() throws Exception {
         ApplicationInfo info = new ApplicationInfo();
         info.uid = 1111;
@@ -198,6 +202,7 @@
     }
 
     @Test
+    @UiThreadTest
     public void clickVpn_VpnConnected_doesNotStartVpnLaunchIntent()
             throws PackageManager.NameNotFoundException {
         Set<Preference> updates = new ArraySet<>();
@@ -217,6 +222,7 @@
     }
 
     @Test
+    @UiThreadTest
     public void clickVpn_VpnDisconnected_startsVpnLaunchIntent()
             throws PackageManager.NameNotFoundException {
         Set<Preference> updates = new ArraySet<>();
@@ -238,6 +244,7 @@
     }
 
     @Test
+    @UiThreadTest
     public void clickAdvancedVpn_VpnConnectedDisconnectDialogDisabled_startsAppLaunchIntent()
             throws PackageManager.NameNotFoundException {
         Set<Preference> updates = new ArraySet<>();
@@ -262,6 +269,7 @@
     }
 
     @Test
+    @UiThreadTest
     public void clickAdvancedVpn_VpnConnectedDisconnectDialogEnabled_doesNotStartAppLaunchIntent()
             throws PackageManager.NameNotFoundException {
         Set<Preference> updates = new ArraySet<>();