Merge "Refine remove locale warning dialog string" into rvc-dev
diff --git a/OWNERS b/OWNERS
index 16fc48c..47961cd 100644
--- a/OWNERS
+++ b/OWNERS
@@ -6,7 +6,6 @@
 edgarwang@google.com
 emilychuang@google.com
 millchen@google.com
-rafftsai@google.com
 stanleytfwang@google.com
 sunnyshao@google.com
 tmfang@google.com
diff --git a/res/layout/notification_history_app_layout.xml b/res/layout/notification_history_app_layout.xml
index 4c899e6..5d8ff3f 100644
--- a/res/layout/notification_history_app_layout.xml
+++ b/res/layout/notification_history_app_layout.xml
@@ -82,10 +82,8 @@
         <androidx.recyclerview.widget.RecyclerView
             android:id="@+id/notification_list"
             android:layout_width="match_parent"
-            android:layout_height="0dp"
+            android:layout_height="wrap_content"
             android:clipChildren="true"
-            settings:layout_constraintHeight_max="300dp"
-            settings:layout_constrainedHeight="true"
             settings:fastScrollEnabled="true"
             settings:fastScrollHorizontalThumbDrawable="@drawable/thumb_drawable"
             settings:fastScrollHorizontalTrackDrawable="@drawable/line_drawable"
diff --git a/res/layout/palette_listview_item.xml b/res/layout/palette_listview_item.xml
index 3342ef1..e67b7cb 100644
--- a/res/layout/palette_listview_item.xml
+++ b/res/layout/palette_listview_item.xml
@@ -28,6 +28,6 @@
         android:maxLength="20"
         android:paddingLeft="@dimen/accessibility_layout_margin_start_end"
         android:singleLine="true"
-        android:textSize="14dp" />
+        android:textSize="14sp" />
 
 </FrameLayout>
diff --git a/res/values-night/colors.xml b/res/values-night/colors.xml
index c88158b..4ce02ee 100644
--- a/res/values-night/colors.xml
+++ b/res/values-night/colors.xml
@@ -37,6 +37,6 @@
     <color name="palette_list_color_cyan">@color/palette_list_dark_mode_color_cyan</color>
     <color name="palette_list_color_blue">@color/palette_list_dark_mode_color_blue</color>
     <color name="palette_list_color_purple">@color/palette_list_dark_mode_color_purple</color>
-    <color name="palette_list_color_pink">@color/palette_list_dark_mode_color_pink</color>
+    <color name="gestures_setting_background_color">@android:color/black</color>
 </resources>
 
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index c19b948..1649cb2 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -786,7 +786,7 @@
     <string-array name="captioning_font_size_selector_titles">
         <item>Very small</item>
         <item>Small</item>
-        <item>Normal</item>
+        <item>Default</item>
         <item>Large</item>
         <item>Very large</item>
     </string-array>
@@ -920,7 +920,7 @@
 
     <!-- Titles for captioning text style preset preference. [CHAR LIMIT=35] -->
     <string-array name="captioning_preset_selector_titles" >
-        <item>Use app defaults</item>
+        <item>Set by app</item>
         <item>White on black</item>
         <item>Black on white</item>
         <item>Yellow on black</item>
@@ -1375,89 +1375,6 @@
         <item>"1"</item>
     </string-array>
 
-    <string-array name="enabled_networks_except_gsm_choices" translatable="false">
-        <item>@string/network_lte</item>
-        <item>@string/network_3G</item>
-    </string-array>
-    <string-array name="enabled_networks_except_gsm_4g_choices" translatable="false">
-        <item>@string/network_4G</item>
-        <item>@string/network_3G</item>
-    </string-array>
-    <string-array name="enabled_networks_except_gsm_values" translatable="false">
-        <item>"9"</item>
-        <item>"0"</item>
-    </string-array>
-
-    <string-array name="enabled_networks_except_lte_choices" translatable="false">
-        <item>@string/network_3G</item>
-        <item>@string/network_2G</item>
-    </string-array>
-    <string-array name="enabled_networks_except_lte_values" translatable="false">
-        <item>"0"</item>
-        <item>"1"</item>
-    </string-array>
-
-    <string-array name="enabled_networks_except_gsm_lte_choices" translatable="false">
-        <item>@string/network_3G</item>
-    </string-array>
-    <string-array name="enabled_networks_except_gsm_lte_values" translatable="false">
-        <item>"0"</item>
-    </string-array>
-
-    <string-array name="enabled_networks_cdma_choices" translatable="false">
-        <item>@string/network_lte</item>
-        <item>@string/network_3G</item>
-        <item>@string/network_1x</item>
-        <item>@string/network_global</item>
-    </string-array>
-    <string-array name="enabled_networks_cdma_values" translatable="false">
-        <item>"8"</item>
-        <item>"4"</item>
-        <item>"5"</item>
-        <item>"10"</item>
-    </string-array>
-
-    <string-array name="enabled_networks_cdma_no_lte_choices" translatable="false">
-        <item>@string/network_3G</item>
-        <item>@string/network_1x</item>
-    </string-array>
-    <string-array name="enabled_networks_cdma_no_lte_values" translatable="false">
-        <item>"4"</item>
-        <item>"5"</item>
-    </string-array>
-
-    <string-array name="enabled_networks_cdma_only_lte_choices" translatable="false">
-        <item>@string/network_lte</item>
-        <item>@string/network_global</item>
-    </string-array>
-    <string-array name="enabled_networks_cdma_only_lte_values" translatable="false">
-        <item>"8"</item>
-        <item>"10"</item>
-    </string-array>
-
-    <string-array name="enabled_networks_tdscdma_choices" translatable="false">
-        <item>@string/network_lte</item>
-        <item>@string/network_3G</item>
-        <item>@string/network_2G</item>
-    </string-array>
-    <string-array name="enabled_networks_tdscdma_values" translatable="false">
-        <item>"22"</item>
-        <item>"18"</item>
-        <item>"1"</item>
-    </string-array>
-
-    <!--String arrays for World preferred netwrok modes -->
-    <string-array name="preferred_network_mode_choices_world_mode">
-        <item>Global</item>
-        <item>LTE / CDMA</item>
-        <item>LTE / GSM / UMTS</item>
-    </string-array>
-
-    <string-array name="preferred_network_mode_values_world_mode" translatable="false">
-        <item>"10"</item>
-        <item>"8"</item>
-        <item>"9"</item>
-    </string-array>
 
     <!-- WiFi calling mode array -->
     <string-array name="wifi_calling_mode_summaries" translatable="false">
@@ -1507,7 +1424,6 @@
         <item>@string/color_cyan</item>
         <item>@string/color_blue</item>
         <item>@string/color_purple</item>
-        <item>@string/color_pink</item>
     </string-array>
 
     <!-- Values for palette list view preference. -->
@@ -1519,7 +1435,6 @@
         <item>@color/palette_list_color_cyan</item>
         <item>@color/palette_list_color_blue</item>
         <item>@color/palette_list_color_purple</item>
-        <item>@color/palette_list_color_pink</item>
     </array>
 
     <!--String arrays for showing the rtt settings options -->
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 1c18c6a..06f135f 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -158,7 +158,6 @@
     <color name="palette_list_color_cyan">#12b5cb</color> <!-- Material Cyan 600 -->
     <color name="palette_list_color_blue">#1a73e8</color> <!-- Material Blue 600 -->
     <color name="palette_list_color_purple">#9334e6</color> <!-- Material Purple 600 -->
-    <color name="palette_list_color_pink">#e52592</color> <!-- Material Pink 600 -->
 
     <!-- Palette list preference dark mode colors. -->
     <color name="palette_list_dark_mode_color_red">#f28b82</color> <!-- Material Red 300 -->
@@ -168,6 +167,5 @@
     <color name="palette_list_dark_mode_color_cyan">#78d9ec</color> <!-- Material Cyan 300 -->
     <color name="palette_list_dark_mode_color_blue">#8AB4F8</color> <!-- Material Blue 300 -->
     <color name="palette_list_dark_mode_color_purple">#c58af9</color> <!-- Material Purple 300 -->
-    <color name="palette_list_dark_mode_color_pink">#ff8bcb</color> <!-- Material Pink 300 -->
 
 </resources>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 92e2527..dae9080 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4935,9 +4935,9 @@
     <!-- Label for shortcut settings button. [CHAR LIMIT=NONE] -->
     <string name="accessibility_shortcut_settings">Shortcut settings</string>
     <!-- Title for the switch preference that controls whether or not the accessibility shortcut works on the lock screen. [CHAR LIMIT=35] -->
-    <string name="accessibility_shortcut_service_on_lock_screen_title">Allow from lock screen</string>
+    <string name="accessibility_shortcut_service_on_lock_screen_title">Shortcut from lock screen</string>
     <!-- Description of accessibility shortcut. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_shortcut_description">When the shortcut is on, you can press both volume keys for 3 seconds to start an accessibility feature.</string>
+    <string name="accessibility_shortcut_description">Allow feature shortcut to turn on from the lock screen. Hold both volume keys for 3 seconds.</string>
     <!-- Title for the accessibility preference to high contrast text. [CHAR LIMIT=35] -->
     <string name="accessibility_toggle_high_text_contrast_preference_title">High contrast text</string>
     <!-- Title for the accessibility preference to auto update screen magnification. [CHAR LIMIT=35] -->
@@ -4987,13 +4987,13 @@
     <!-- Used in the accessibility service settings to control turning display color inversion on/off entirely. [CHAR LIMIT=NONE] -->
     <string name="accessibility_display_inversion_switch_title">Use color inversion</string>
     <!-- Subtitle for the accessibility preference to configure display color inversion. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_display_inversion_preference_subtitle"><![CDATA[Color inversion turns light screens dark. This helps people who are sensitive to bright light see the screen more easily.<br/><br/>Note: Dark colors will turn light. Colors will change in media and images. You can also use Dark theme (Settings > Display).]]></string>
+    <string name="accessibility_display_inversion_preference_subtitle"><![CDATA[Color inversion turns light screens dark. This feature may be helpful for people who are sensitive to bright light.<br/><br/>Color inversion also turns dark screens light. Colors will change in media and images.<br/><br/>Note: You can also use Dark theme to display a dark background. Dark theme works with supported apps. Color inversion works on all apps.]]></string>
     <!-- Title for accessibility preference for configuring feature that performs click action soon after mouse/trackpad pointer stops moving. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_autoclick_preference_title">Auto click (dwell timing)</string>
+    <string name="accessibility_autoclick_preference_title">Autoclick (dwell timing)</string>
     <!-- Footer text to explain what autoclick does -->
-    <string name="accessibility_autoclick_description">If you are using a mouse, you can set the cursor to take action automatically when it stops moving for a certain amount of time.</string>
+    <string name="accessibility_autoclick_description">Autoclick works with a connected mouse. You can set the mouse cursor to click automatically when the cursor stops moving for a certain amount of time.</string>
     <!-- Option heading to leave the auto click requirement for accessibility users at its default level. [CHAR LIMIT=50] -->
-    <string name="accessibility_autoclick_default_title">Don\u2019t use auto click (default)</string>
+    <string name="accessibility_autoclick_default_title">Off</string>
     <!-- Option heading to leave the auto click requirement for accessibility users at its short level. [CHAR LIMIT=35] -->
     <string name="accessibility_autoclick_short_title">Short</string>
     <!-- Option summary text for the auto click delay 0.2 seconds radio button. [CHAR LIMIT=35] -->
@@ -5028,16 +5028,18 @@
     <string name="accessibility_service_master_open_title">Open <xliff:g id="accessibility_app_name" example="TalkBack">%1$s</xliff:g></string>
     <!-- Used in the Color correction settings screen to control turning on/off the feature entirely -->
     <string name="accessibility_daltonizer_master_switch_title">Use color correction</string>
-    <!-- Used in the Captions settings screen to control turning on/off the feature entirely -->
+    <!-- Title for Captions settings screen to control turning on/off the feature entirely -->
     <string name="accessibility_caption_master_switch_title">Show captions</string>
+    <!-- Summary for Captions settings screen to control turning on/off the feature entirely [CHAR LIMIT=NONE] -->
+    <string name="accessibility_caption_master_switch_summary">For supported app only</string>
     <!-- Title for Caption preference settings screen for configuring font style. [CHAR LIMIT=NONE] -->
-    <string name="captioning_caption_appearance_title">Caption appearance</string>
+    <string name="captioning_caption_appearance_title">Caption size and style</string>
     <!-- Summary for Captions settings, explaining important settings under it. [CHAR LIMIT=NONE] -->
-    <string name="captioning_caption_appearance_summary">Text size, caption style</string>
+    <string name="captioning_caption_appearance_summary"><xliff:g id="accessibility_font_size" example="Large">%1$s</xliff:g> text size</string>
     <!-- Title for Caption preference settings screen for configuring language. [CHAR LIMIT=NONE] -->
     <string name="captioning_more_options_title">More options</string>
     <!-- Used in the Captions preference to tell users that the setting doesn't support all apps. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_caption_preference_summary">Not all apps support this setting.</string>
+    <string name="accessibility_caption_preference_summary">Not all apps support these caption preferences</string>
     <!-- Summary for accessibility shortcut preference for software shortcut type. [CHAR LIMIT=NONE] -->
     <string name="accessibility_shortcut_type_software">Accessibility button</string>
     <!-- Summary for accessibility shortcut preference for software shortcut type when gesture mode is on. [CHAR LIMIT=NONE] -->
@@ -5065,9 +5067,13 @@
         <item quantity="other"><xliff:g id="number_device_count">%1$d</xliff:g> saved hearing aids</item>
     </plurals>
 
-    <!-- Preference's state when enabled. -->
+    <!-- Preference's shortcut when enabled. [CHAR LIMIT=NONE] -->
+    <string name="accessibility_summary_shortcut_enabled">Shortcut on</string>
+    <!-- Preference's shortcut when disabled. [CHAR LIMIT=NONE] -->
+    <string name="accessibility_summary_shortcut_disabled">Off</string>
+    <!-- Preference's state when enabled. [CHAR LIMIT=NONE] -->
     <string name="accessibility_summary_state_enabled">On</string>
-    <!-- Preference's state when disabled. -->
+    <!-- Preference's state when disabled. [CHAR LIMIT=NONE] -->
     <string name="accessibility_summary_state_disabled">Off</string>
     <!-- Accessibility service's preference's state when enabled but not running (like maybe it crashed). -->
     <string name="accessibility_summary_state_stopped">Not working. Tap for info.</string>
@@ -5079,17 +5085,17 @@
     <!-- Title for the preference to configure the type of color space correction to apply. [CHAR LIMIT=NONE] -->
     <string name="daltonizer_type">Correction mode</string>
     <!-- Title shown for deuteranomaly (red-green color blindness) [CHAR LIMIT=45] -->
-    <string name="daltonizer_mode_deuteranomaly_title">Red-green</string>
+    <string name="daltonizer_mode_deuteranomaly_title">Deuteranomaly</string>
     <!-- Title shown for protanomaly (red-green color blindness) [CHAR LIMIT=45] -->
-    <string name="daltonizer_mode_protanomaly_title">Green-red</string>
+    <string name="daltonizer_mode_protanomaly_title">Protanomaly</string>
     <!-- Title shown for tritanomaly (blue-yellow color blindness) [CHAR LIMIT=45] -->
-    <string name="daltonizer_mode_tritanomaly_title">Blue-yellow</string>
+    <string name="daltonizer_mode_tritanomaly_title">Tritanomaly</string>
     <!-- Summary shown for deuteranomaly (red-green color blindness) [CHAR LIMIT=45] -->
-    <string name="daltonizer_mode_deuteranomaly_summary">Deuteranomaly</string>
+    <string name="daltonizer_mode_deuteranomaly_summary">Red-green</string>
     <!-- Summary shown for protanomaly (red-green color blindness) [CHAR LIMIT=45] -->
-    <string name="daltonizer_mode_protanomaly_summary">Protanomaly</string>
+    <string name="daltonizer_mode_protanomaly_summary">Red-green</string>
     <!-- Summary shown for tritanomaly (blue-yellow color blindness) [CHAR LIMIT=45] -->
-    <string name="daltonizer_mode_tritanomaly_summary">Tritanomaly</string>
+    <string name="daltonizer_mode_tritanomaly_summary">Blue-yellow</string>
 
     <!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] -->
     <plurals name="accessibilty_autoclick_preference_subtitle_extremely_short_delay">
@@ -7145,6 +7151,8 @@
     <string name="help_url_magnification" translatable="false"></string>
     <string name="help_url_color_correction" translatable="false"></string>
     <string name="help_url_autoclick" translatable="false"></string>
+    <!-- Help URL, Accessibility caption preferences [DO NOT TRANSLATE] -->
+    <string name="help_url_caption" translatable="false"></string>
     <string name="help_url_system_dashboard" translatable="false"></string>
     <string name="help_url_double_tap_screen" translatable="false"></string>
     <string name="help_url_account_detail" translatable="false"></string>
@@ -7213,7 +7221,7 @@
          contacts support advanced calling features, such as video calling. [CHAR LIMIT=50]-->
     <string name="contact_discovery_opt_in_title">Contact discovery</string>
     <!-- Summary of a preference determining whether or not the user has enabled contact discovery.
-         [CHAR LIMIT=100] -->
+         [CHAR LIMIT=110] -->
     <string name="contact_discovery_opt_in_summary">Allows your carrier to discover which calling features your contacts support.</string>
     <!-- Title of the dialog shown when the user tries to enable Contact Discovery.
          [CHAR LIMIT=50] -->
@@ -7341,8 +7349,6 @@
     <string name="color_orange">Orange</string>
     <!-- Purple label.  [CHAR LIMIT=40] -->
     <string name="color_purple">Purple</string>
-    <!-- Pink label.  [CHAR LIMIT=40] -->
-    <string name="color_pink">Pink</string>
     <!-- Message informing the user that no SIM card is inserted  [CHAR LIMIT=60] -->
     <string name="sim_no_inserted_msg">No SIM cards inserted</string>
     <!-- SIM status title  [CHAR LIMIT=40] -->
@@ -8922,6 +8928,9 @@
     <!-- [CHAR LIMIT=100] Zen mode settings: Allow apps to bypass DND title-->
     <string name="zen_mode_bypassing_apps_title">App exceptions</string>
 
+    <!-- [CHAR LIMIT=120] Zen mode settings: No apps are bypassing DND -->
+    <string name="zen_mode_bypassing_apps_subtext_none">No apps can override Do Not Disturb</string>
+
     <!-- [CHAR LIMIT=120] Zen mode settings: Allow apps to bypass DND -->
     <plurals name="zen_mode_bypassing_apps_subtext">
         <item quantity="zero">No apps can override Do Not Disturb</item>
@@ -9312,7 +9321,10 @@
     <string name="assist_and_voice_input_title">Assist &amp; voice input</string>
 
     <!-- Title for Default Assist settings [CHAR LIMIT=30] -->
-    <string name="default_assist_title">Assist app</string>
+    <string name="default_assist_title">Digital assistant app</string>
+
+    <!-- Title for Default Assist settings [CHAR LIMIT=30] -->
+    <string name="default_digital_assistant_title">Default digital assistant app</string>
 
     <!-- [CHAR_LIMIT=45] Title of the security warning dialog for setting an assitant -->
     <string name="assistant_security_warning_title">
@@ -11289,7 +11301,11 @@
     <!-- Text for Network 1x [CHAR LIMIT=NONE] -->
     <string name="network_1x" translatable="false">1x</string>
     <!-- Text for Network global [CHAR LIMIT=NONE] -->
-    <string name="network_global">Global</string>
+    <string name="network_global" translatable="false">Global</string>
+    <!-- Text for Network world mode CDMA LTE [CHAR LIMIT=NONE] -->
+    <string name="network_world_mode_cdma_lte" translatable="false">LTE / CDMA</string>
+    <!-- Text for Network world mode GSM LTE [CHAR LIMIT=NONE] -->
+    <string name="network_world_mode_gsm_lte" translatable="false">LTE / GSM / UMTS</string>
 
     <!-- Available networks screen title/heading [CHAR LIMIT=NONE] -->
     <string name="label_available">Available networks</string>
diff --git a/res/xml/accessibility_magnification_service_settings.xml b/res/xml/accessibility_magnification_service_settings.xml
index 74765b2..0548e5e 100644
--- a/res/xml/accessibility_magnification_service_settings.xml
+++ b/res/xml/accessibility_magnification_service_settings.xml
@@ -19,12 +19,14 @@
     xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:key="magnification_mode_screen"
     android:persistent="false"
-    android:title="@string/accessibility_magnification_service_settings_title">
+    android:title="@string/accessibility_magnification_service_settings_title"
+    settings:searchable="false">
 
     <Preference
         android:key="magnification_mode"
         android:persistent="false"
         android:title="@string/accessibility_magnification_mode_title"
+        settings:searchable="false"
         settings:controller="com.android.settings.accessibility.MagnificationModePreferenceController" />
 
     <SwitchPreference
@@ -33,6 +35,7 @@
         android:title="@string/accessibility_magnification_enable_mode_title"
         android:summaryOn="@string/accessibility_magnification_area_settings_full_screen_summary"
         android:summaryOff="@string/accessibility_magnification_area_settings_window_screen_summary"
+        settings:searchable="false"
         settings:controller="com.android.settings.accessibility.MagnificationEnablePreferenceController" />
 
 </PreferenceScreen>
diff --git a/res/xml/accessibility_magnification_settings.xml b/res/xml/accessibility_magnification_settings.xml
index 6731dba..83ce79b 100644
--- a/res/xml/accessibility_magnification_settings.xml
+++ b/res/xml/accessibility_magnification_settings.xml
@@ -16,15 +16,18 @@
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res-auto"
-    android:title="@string/accessibility_screen_magnification_title">
+    android:title="@string/accessibility_screen_magnification_title"
+    settings:searchable="false">
     <Preference
         android:fragment="com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragment"
         android:key="screen_magnification_gestures_preference_screen"
         android:title="@string/accessibility_screen_magnification_gestures_title"
+        settings:searchable="false"
         settings:controller="com.android.settings.accessibility.MagnificationGesturesPreferenceController"/>
     <Preference
         android:fragment="com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragment"
         android:key="screen_magnification_navbar_preference_screen"
         android:title="@string/accessibility_screen_magnification_navbar_title"
+        settings:searchable="false"
         settings:controller="com.android.settings.accessibility.MagnificationNavbarPreferenceController"/>
 </PreferenceScreen>
diff --git a/res/xml/captioning_settings.xml b/res/xml/captioning_settings.xml
index c8cb46c..2a709f2 100644
--- a/res/xml/captioning_settings.xml
+++ b/res/xml/captioning_settings.xml
@@ -18,25 +18,31 @@
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res-auto"
-    android:title="@string/accessibility_captioning_title" >
+    android:persistent="false"
+    android:title="@string/accessibility_captioning_title">
 
     <SwitchPreference
         android:key="captioning_preference_switch"
+        android:persistent="false"
+        android:summary="@string/accessibility_caption_master_switch_summary"
         android:title="@string/accessibility_caption_master_switch_title" />
 
     <Preference
+        android:fragment="com.android.settings.accessibility.CaptionAppearanceFragment"
         android:key="captioning_caption_appearance"
-        android:title="@string/captioning_caption_appearance_title"
-        android:summary="@string/captioning_caption_appearance_summary"
-        android:fragment="com.android.settings.accessibility.CaptionAppearanceFragment" />
+        android:persistent="false"
+        android:title="@string/captioning_caption_appearance_title" />
 
     <Preference
+        android:fragment="com.android.settings.accessibility.CaptionMoreOptionsFragment"
         android:key="captioning_more_options"
-        android:title="@string/captioning_more_options_title"
-        android:fragment="com.android.settings.accessibility.CaptionMoreOptionsFragment" />
+        android:persistent="false"
+        android:title="@string/captioning_more_options_title" />
 
     <com.android.settingslib.widget.FooterPreference
+        android:persistent="false"
+        android:selectable="false"
         android:title="@string/accessibility_caption_preference_summary"
-        android:selectable="false" />
+        settings:searchable="false"/>
 
 </PreferenceScreen>
diff --git a/res/xml/conversation_list_settings.xml b/res/xml/conversation_list_settings.xml
index 1d6b13c..5b9f0c4 100644
--- a/res/xml/conversation_list_settings.xml
+++ b/res/xml/conversation_list_settings.xml
@@ -27,11 +27,6 @@
         <Preference
             android:key="behavior"
             android:summary="@string/important_conversation_behavior_summary"/>
-        <SwitchPreference
-            android:key="important_bubble"
-            android:title="@string/important_bubble"
-            android:icon="@drawable/ic_create_bubble"
-            settings:controller="com.android.settings.notification.app.ImportantConversationBubblePreferenceController"/>
         <!-- Important conversations added here -->
         <PreferenceCategory
             android:key="important_conversations_list"
diff --git a/res/xml/manage_assist.xml b/res/xml/manage_assist.xml
index ef0f696..3430c05 100644
--- a/res/xml/manage_assist.xml
+++ b/res/xml/manage_assist.xml
@@ -19,12 +19,12 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:key="manage_assist_screen"
-    android:title="@string/assist_and_voice_input_title"
+    android:title="@string/default_assist_title"
     settings:keywords="@string/keywords_assist_input">
 
     <com.android.settings.widget.GearPreference
         android:key="default_assist"
-        android:title="@string/default_assist_title"
+        android:title="@string/default_digital_assistant_title"
         android:summary="@string/summary_placeholder" />
 
     <Preference
diff --git a/src/com/android/settings/IccLockSettings.java b/src/com/android/settings/IccLockSettings.java
index b906a73..6bb75a5 100644
--- a/src/com/android/settings/IccLockSettings.java
+++ b/src/com/android/settings/IccLockSettings.java
@@ -123,6 +123,7 @@
     // @see android.widget.Toast$TN
     private static final long LONG_DURATION_TIMEOUT = 7000;
 
+    private int mSlotId;
     private int mSubId;
     private TelephonyManager mTelephonyManager;
 
@@ -219,6 +220,7 @@
             Bundle savedInstanceState) {
 
         final int numSims = mProxySubscriptionMgr.getActiveSubscriptionInfoCountMax();
+        mSlotId = 0;
         if (numSims > 1) {
             final View view = inflater.inflate(R.layout.icc_lock_tabs, container, false);
             final ViewGroup prefs_container = (ViewGroup) view.findViewById(R.id.prefs_container);
@@ -244,7 +246,8 @@
                             ? getContext().getString(R.string.sim_editor_title, i + 1)
                             : subInfo.getDisplayName())));
             }
-            final SubscriptionInfo sir = getActiveSubscriptionInfoForSimSlotIndex(subInfoList, 0);
+            final SubscriptionInfo sir = getActiveSubscriptionInfoForSimSlotIndex(
+                    subInfoList, mSlotId);
             mSubId = sir.getSubscriptionId();
 
             if (savedInstanceState != null && savedInstanceState.containsKey(CURRENT_TAB)) {
@@ -266,7 +269,7 @@
 
         final List<SubscriptionInfo> subInfoList =
                 mProxySubscriptionMgr.getActiveSubscriptionsInfo();
-        final SubscriptionInfo sir = getActiveSubscriptionInfoForSimSlotIndex(subInfoList, 0);
+        final SubscriptionInfo sir = getActiveSubscriptionInfoForSimSlotIndex(subInfoList, mSlotId);
         mSubId = sir.getSubscriptionId();
 
         if (mPinDialog != null) {
@@ -653,9 +656,9 @@
     private OnTabChangeListener mTabListener = new OnTabChangeListener() {
         @Override
         public void onTabChanged(String tabId) {
-            final int slotId = Integer.parseInt(tabId);
+            mSlotId = Integer.parseInt(tabId);
             final SubscriptionInfo sir = getActiveSubscriptionInfoForSimSlotIndex(
-                    mProxySubscriptionMgr.getActiveSubscriptionsInfo(), slotId);
+                    mProxySubscriptionMgr.getActiveSubscriptionsInfo(), mSlotId);
 
             // The User has changed tab; update the body.
             updatePreferences();
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 315cba1..e8eb8ba 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -888,6 +888,27 @@
     }
 
     /**
+     * Return {@code true} if the supplied package is the device owner or profile owner of a
+     * given user.
+     *
+     * @param devicePolicyManager used to check whether it is device owner and profile owner app
+     * @param packageName         package to check about
+     * @param userId              the if of the relevant user
+     */
+    public static boolean isProfileOrDeviceOwner(DevicePolicyManager devicePolicyManager,
+            String packageName, int userId) {
+        if ((devicePolicyManager.getDeviceOwnerUserId() == userId)
+                && devicePolicyManager.isDeviceOwnerApp(packageName)) {
+            return true;
+        }
+        final ComponentName cn = devicePolicyManager.getProfileOwnerAsUser(userId);
+        if (cn != null && cn.getPackageName().equals(packageName)) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
      * Return the resource id to represent the install status for an app
      */
     @StringRes
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index 23b0f1a..1e3944e 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -76,8 +76,6 @@
     // Index of the first preference in a preference category.
     private static final int FIRST_PREFERENCE_IN_CATEGORY_INDEX = -1;
 
-    private static final String EMPTY_STRING = "";
-
     // Preference categories
     private static final String CATEGORY_SCREEN_READER = "screen_reader_category";
     private static final String CATEGORY_AUDIO_AND_CAPTIONS = "audio_and_captions_category";
@@ -195,6 +193,10 @@
         for (AccessibilityShortcutController.ToggleableFrameworkFeatureInfo feature : features) {
             shortcutFeatureKeys.add(feature.getSettingKey());
         }
+
+        // Observe changes from accessibility selection menu
+        shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_BUTTON_TARGET_COMPONENT);
+        shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE);
         mSettingsContentObserver = new SettingsContentObserver(mHandler, shortcutFeatureKeys) {
             @Override
             public void onChange(boolean selfChange, Uri uri) {
@@ -268,16 +270,24 @@
             return context.getText(R.string.accessibility_summary_state_stopped);
         }
 
-        final CharSequence serviceSummary = info.loadSummary(context.getPackageManager());
-
+        final CharSequence serviceState;
         final int fragmentType = AccessibilityUtil.getAccessibilityServiceFragmentType(info);
         if (fragmentType == AccessibilityServiceFragmentType.INVISIBLE) {
-            return TextUtils.isEmpty(serviceSummary) ? EMPTY_STRING : serviceSummary;
+            final ComponentName componentName = new ComponentName(
+                    info.getResolveInfo().serviceInfo.packageName,
+                    info.getResolveInfo().serviceInfo.name);
+            final boolean shortcutEnabled = AccessibilityUtil.getUserShortcutTypesFromSettings(
+                    context, componentName) != AccessibilityUtil.UserShortcutType.EMPTY;
+            serviceState = shortcutEnabled
+                    ? context.getText(R.string.accessibility_summary_shortcut_enabled)
+                    : context.getText(R.string.accessibility_summary_shortcut_disabled);
+        } else {
+            serviceState = serviceEnabled
+                    ? context.getText(R.string.accessibility_summary_state_enabled)
+                    : context.getText(R.string.accessibility_summary_state_disabled);
         }
 
-        final CharSequence serviceState = serviceEnabled
-                ? context.getText(R.string.accessibility_summary_state_enabled)
-                : context.getText(R.string.accessibility_summary_state_disabled);
+        final CharSequence serviceSummary = info.loadSummary(context.getPackageManager());
         final String stateSummaryCombo = context.getString(
                 R.string.preference_summary_default_combination,
                 serviceState, serviceSummary);
@@ -485,6 +495,8 @@
                     mCategoryToPrefCategoryMap.get(CATEGORY_DISPLAY);
             experimentalCategory.removePreference(mToggleInversionPreference);
             experimentalCategory.removePreference(mDisplayDaltonizerPreferenceScreen);
+            mDisplayMagnificationPreferenceScreen.setSummary(
+                    ToggleScreenMagnificationPreferenceFragment.getServiceSummary(getContext()));
             mDisplayDaltonizerPreferenceScreen.setOrder(
                     mDisplayMagnificationPreferenceScreen.getOrder() + 1);
             mDisplayDaltonizerPreferenceScreen.setSummary(AccessibilityUtil.getSummary(
diff --git a/src/com/android/settings/accessibility/CaptionAppearanceFragment.java b/src/com/android/settings/accessibility/CaptionAppearanceFragment.java
index d31465e..394f50a 100644
--- a/src/com/android/settings/accessibility/CaptionAppearanceFragment.java
+++ b/src/com/android/settings/accessibility/CaptionAppearanceFragment.java
@@ -407,6 +407,11 @@
         return true;
     }
 
+    @Override
+    public int getHelpResource() {
+        return R.string.help_url_caption;
+    }
+
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider(R.xml.captioning_appearance);
 }
diff --git a/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java b/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java
index a785424..8e5c003 100644
--- a/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java
+++ b/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java
@@ -83,6 +83,11 @@
         return true;
     }
 
+    @Override
+    public int getHelpResource() {
+        return R.string.help_url_caption;
+    }
+
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider(R.xml.captioning_more_options);
 }
diff --git a/src/com/android/settings/accessibility/CaptionPropertiesFragment.java b/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
index 0034fe6..43539fd 100644
--- a/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
+++ b/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
@@ -32,6 +32,8 @@
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.search.SearchIndexable;
 
+import com.google.common.primitives.Floats;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -52,6 +54,7 @@
     private Preference mMoreOptions;
 
     private final List<Preference> mPreferenceList = new ArrayList<>();
+    private float[] mFontSizeValuesArray;
 
     @Override
     public int getMetricsCategory() {
@@ -66,8 +69,14 @@
 
         addPreferencesFromResource(R.xml.captioning_settings);
         initializeAllPreferences();
-        updateAllPreferences();
         installUpdateListeners();
+        initFontSizeValuesArray();
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        updateAllPreferences();
     }
 
     private void initializeAllPreferences() {
@@ -83,8 +92,19 @@
         mSwitch.setOnPreferenceChangeListener(this);
     }
 
+    private void initFontSizeValuesArray() {
+        final String[] fontSizeValuesStrArray = getPrefContext().getResources().getStringArray(
+                R.array.captioning_font_size_selector_values);
+        final int length = fontSizeValuesStrArray.length;
+        mFontSizeValuesArray = new float[length];
+        for (int i = 0; i < length; ++i) {
+            mFontSizeValuesArray[i] = Float.parseFloat(fontSizeValuesStrArray[i]);
+        }
+    }
+
     private void updateAllPreferences() {
         mSwitch.setChecked(mCaptioningManager.isEnabled());
+        mTextAppearance.setSummary(geTextAppearanceSummary(getPrefContext()));
     }
 
     @Override
@@ -98,6 +118,21 @@
         return true;
     }
 
+    @Override
+    public int getHelpResource() {
+        return R.string.help_url_caption;
+    }
+
+    private CharSequence geTextAppearanceSummary(Context context) {
+        final String[] fontSizeSummaries = context.getResources().getStringArray(
+                R.array.captioning_font_size_selector_titles);
+
+        final float fontSize = mCaptioningManager.getFontScale();
+        final int idx = Floats.indexOf(mFontSizeValuesArray, fontSize);
+        final String fontSizeSummary = fontSizeSummaries[idx == /* not exist */ -1 ? 0 : idx];
+        return context.getString(R.string.captioning_caption_appearance_summary, fontSizeSummary);
+    }
+
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider(R.xml.captioning_settings);
 }
diff --git a/src/com/android/settings/accessibility/MagnificationPreferenceController.java b/src/com/android/settings/accessibility/MagnificationPreferenceController.java
index 7ac7bef..5b5236e 100644
--- a/src/com/android/settings/accessibility/MagnificationPreferenceController.java
+++ b/src/com/android/settings/accessibility/MagnificationPreferenceController.java
@@ -22,7 +22,6 @@
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
-import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
 
 public class MagnificationPreferenceController extends BasePreferenceController {
@@ -40,8 +39,7 @@
 
     @Override
     public CharSequence getSummary() {
-        return mContext.getResources().getText(
-                R.string.accessibility_screen_magnification_navbar_title);
+        return ToggleScreenMagnificationPreferenceFragment.getServiceSummary(mContext);
     }
 
     @Override
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
index 292e931..4c2945a 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -624,4 +624,17 @@
         }
         return shortcutTypes;
     }
+
+    /**
+     * Gets the service summary of magnification.
+     *
+     * @param context The current context.
+     */
+    public static CharSequence getServiceSummary(Context context) {
+        // Get the user shortcut type from settings provider.
+        final int uerShortcutType = getUserShortcutTypeFromSettings(context);
+        return (uerShortcutType != AccessibilityUtil.UserShortcutType.EMPTY)
+                ? context.getText(R.string.accessibility_summary_shortcut_enabled)
+                : context.getText(R.string.accessibility_summary_shortcut_disabled);
+    }
 }
diff --git a/src/com/android/settings/applications/AppStateManageExternalStorageBridge.java b/src/com/android/settings/applications/AppStateManageExternalStorageBridge.java
index 7933062..1132137 100644
--- a/src/com/android/settings/applications/AppStateManageExternalStorageBridge.java
+++ b/src/com/android/settings/applications/AppStateManageExternalStorageBridge.java
@@ -69,7 +69,7 @@
 
     /**
      * Returns the MANAGE_EXTERNAL_STORAGE {@link AppStateAppOpsBridge.PermissionState} object
-     * associated with the given package and user.
+     * associated with the given package and UID.
      */
     public PermissionState getManageExternalStoragePermState(String pkg, int uid) {
         return getPermissionInfo(pkg, uid);
diff --git a/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java b/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
index 1b14402..19627ff 100644
--- a/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
@@ -25,8 +25,8 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.om.OverlayManager;
 import android.content.om.OverlayInfo;
+import android.content.om.OverlayManager;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
@@ -393,11 +393,19 @@
             enabled = false;
         }
 
-        // We don't allow uninstalling DO/PO on *any* users, because if it's a system app,
+        // We don't allow uninstalling DO/PO on *any* users if it's a system app, because
         // "uninstall" is actually "downgrade to the system version + disable", and "downgrade"
         // will clear data on all users.
-        if (Utils.isProfileOrDeviceOwner(mUserManager, mDpm, mPackageInfo.packageName)) {
-            enabled = false;
+        if (Utils.isSystemPackage(mActivity.getResources(), mPm, mPackageInfo)) {
+            if (Utils.isProfileOrDeviceOwner(mUserManager, mDpm, mPackageInfo.packageName)) {
+                enabled = false;
+            }
+        // We allow uninstalling if the calling user is not a DO/PO and if it's not a system app,
+        // because this will not have device-wide consequences.
+        } else {
+            if (Utils.isProfileOrDeviceOwner(mDpm, mPackageInfo.packageName, mUserId)) {
+                enabled = false;
+            }
         }
 
         // Don't allow uninstalling the device provisioning package.
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index 54af16f..8a37473 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -38,6 +38,7 @@
 import android.app.settings.SettingsEnums;
 import android.app.usage.IUsageStatsManager;
 import android.compat.annotation.ChangeId;
+import android.compat.annotation.LoggingOnly;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
@@ -186,6 +187,7 @@
      * requested such permission.
      */
     @ChangeId
+    @LoggingOnly
     private static final long CHANGE_RESTRICT_SAW_INTENT = 135920175L;
 
     // sort order
diff --git a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
index 3e534b3..9afb2b4 100644
--- a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
+++ b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
@@ -457,12 +457,20 @@
     private void showPolicyTransparencyDialogIfRequired() {
         if (isManagedProfile(mDeviceAdmin)
                 && mDeviceAdmin.getComponent().equals(mDPM.getProfileOwner())) {
-            if (hasBaseCantRemoveProfileRestriction()) {
-                // If DISALLOW_REMOVE_MANAGED_PROFILE is set by the system, there's no
-                // point showing a dialog saying it's disabled by an admin.
-                return;
+            EnforcedAdmin enforcedAdmin;
+            ComponentName adminComponent = mDPM.getProfileOwnerAsUser(getUserId());
+            if (adminComponent != null && mDPM.isOrganizationOwnedDeviceWithManagedProfile()) {
+                enforcedAdmin = new EnforcedAdmin(adminComponent,
+                        UserManager.DISALLOW_REMOVE_MANAGED_PROFILE, UserHandle.of(getUserId()));
+            } else {
+                // Todo (b/151061366): Investigate this case to check if it is still viable.
+                if (hasBaseCantRemoveProfileRestriction()) {
+                    // If DISALLOW_REMOVE_MANAGED_PROFILE is set by the system, there's no
+                    // point showing a dialog saying it's disabled by an admin.
+                    return;
+                }
+                enforcedAdmin = getAdminEnforcingCantRemoveProfile();
             }
-            EnforcedAdmin enforcedAdmin = getAdminEnforcingCantRemoveProfile();
             if (enforcedAdmin != null) {
                 RestrictedLockUtils.sendShowAdminSupportDetailsIntent(
                         DeviceAdminAdd.this,
@@ -640,7 +648,8 @@
 
                 final EnforcedAdmin admin = getAdminEnforcingCantRemoveProfile();
                 final boolean hasBaseRestriction = hasBaseCantRemoveProfileRestriction();
-                if (admin != null && !hasBaseRestriction) {
+                if ((hasBaseRestriction && mDPM.isOrganizationOwnedDeviceWithManagedProfile())
+                        || (admin != null && !hasBaseRestriction)) {
                     findViewById(R.id.restricted_icon).setVisibility(View.VISIBLE);
                 }
                 mActionButton.setEnabled(admin == null && !hasBaseRestriction);
diff --git a/src/com/android/settings/biometrics/BiometricEnrollActivity.java b/src/com/android/settings/biometrics/BiometricEnrollActivity.java
index fa01977..a0aa6db 100644
--- a/src/com/android/settings/biometrics/BiometricEnrollActivity.java
+++ b/src/com/android/settings/biometrics/BiometricEnrollActivity.java
@@ -47,7 +47,6 @@
 public class BiometricEnrollActivity extends InstrumentedActivity {
 
     private static final String TAG = "BiometricEnrollActivity";
-    private static final int REQUEST_ENROLL = 1;
 
     public static final String EXTRA_SKIP_INTRO = "skip_intro";
 
@@ -72,7 +71,6 @@
         if (result == BiometricManager.BIOMETRIC_SUCCESS
                 || result == BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE) {
             Log.e(TAG, "Unexpected result: " + result);
-            setResult(RESULT_CANCELED);
             finish();
             return;
         }
@@ -96,6 +94,8 @@
         }
 
         if (intent != null) {
+            intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+
             if (this instanceof InternalActivity) {
                 // Propagate challenge and user Id from ChooseLockGeneric.
                 final byte[] token = getIntent()
@@ -107,18 +107,10 @@
                 intent.putExtra(Intent.EXTRA_USER_ID, userId);
             }
 
-            startActivityForResult(intent, REQUEST_ENROLL);
-        } else {
-            Log.e(TAG, "Intent was null, finishing with RESULT_CANCELED");
-            setResult(RESULT_CANCELED);
+            startActivity(intent);
             finish();
-        }
-    }
-
-    @Override
-    public void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (requestCode == REQUEST_ENROLL) {
-            setResult(RESULT_OK);
+        } else {
+            Log.e(TAG, "Intent was null, finishing");
             finish();
         }
     }
diff --git a/src/com/android/settings/bluetooth/OWNERS b/src/com/android/settings/bluetooth/OWNERS
index 2c8d8b7..5e716e1 100644
--- a/src/com/android/settings/bluetooth/OWNERS
+++ b/src/com/android/settings/bluetooth/OWNERS
@@ -1,8 +1,6 @@
 # Default reviewers for this and subdirectories.
-asargent@google.com
-eisenbach@google.com
-jackqdyulei@google.com
-pavlin@google.com
+hughchen@google.com
+timhypeng@google.com
 siyuanh@google.com
 
 # Emergency approvers in case the above are not available
diff --git a/src/com/android/settings/development/OWNERS b/src/com/android/settings/development/OWNERS
deleted file mode 100644
index ecdc4df..0000000
--- a/src/com/android/settings/development/OWNERS
+++ /dev/null
@@ -1,9 +0,0 @@
-# Default reviewers for this and subdirectories.
-edgarwang@google.com
-emilychuang@google.com
-rafftsai@google.com
-tmfang@google.com
-
-
-# Emergency approvers in case the above are not available
-zhfan@google.com
diff --git a/src/com/android/settings/fuelgauge/OWNERS b/src/com/android/settings/fuelgauge/OWNERS
index 5b26c46..4e5ee0e 100644
--- a/src/com/android/settings/fuelgauge/OWNERS
+++ b/src/com/android/settings/fuelgauge/OWNERS
@@ -1,6 +1,3 @@
 # Default reviewers for this and subdirectories.
-dehboxturtle@google.com
-jackqdyulei@google.com
-
-# Emergency approvers in case the above are not available
-asapperstein@google.com
\ No newline at end of file
+millchen@google.com
+tmfang@google.com
diff --git a/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java b/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
index 05531d6..5f1e955 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
@@ -120,6 +120,11 @@
             swipeBackground.setVisibility(View.GONE);
         }
         sliceLiveData.observe(mLifecycleOwner, slice -> {
+            if (slice == null) {
+                // The logic handling this case is in OnErrorListener. Adding this check is to
+                // prevent from NPE when it calls .hasHint().
+                return;
+            }
             if (slice.hasHint(HINT_ERROR)) {
                 Log.w(TAG, "Slice has HINT_ERROR, skipping rendering. uri=" + slice.getUri());
                 mSliceLiveDataMap.get(slice.getUri()).removeObservers(mLifecycleOwner);
diff --git a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
index d633b39..c0df851 100644
--- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
+++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
@@ -28,10 +28,8 @@
 import android.telephony.CarrierConfigManager;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
-import android.text.TextUtils;
 import android.util.Log;
 
-import androidx.annotation.VisibleForTesting;
 import androidx.lifecycle.Lifecycle;
 import androidx.lifecycle.LifecycleObserver;
 import androidx.lifecycle.OnLifecycleEvent;
@@ -43,6 +41,7 @@
 import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -53,19 +52,14 @@
         ListPreference.OnPreferenceChangeListener, LifecycleObserver {
 
     private static final String LOG_TAG = "EnabledNetworkMode";
-    private CarrierConfigManager mCarrierConfigManager;
     private ContentObserver mPreferredNetworkModeObserver;
-    private TelephonyManager mTelephonyManager;
-    private boolean mIsGlobalCdma;
-    @VisibleForTesting
-    boolean mShow4GForLTE;
     private Preference mPreference;
-    @VisibleForTesting
-    boolean mDisplay5gList = false;
+    private TelephonyManager mTelephonyManager;
+    private CarrierConfigManager mCarrierConfigManager;
+    private PreferenceEntriesBuilder mBuilder;
 
     public EnabledNetworkModePreferenceController(Context context, String key) {
         super(context, key);
-        mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
         mPreferredNetworkModeObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
             @Override
             public void onChange(boolean selfChange) {
@@ -101,7 +95,8 @@
     @OnLifecycleEvent(ON_START)
     public void onStart() {
         mContext.getContentResolver().registerContentObserver(
-                Settings.Global.getUriFor(Settings.Global.PREFERRED_NETWORK_MODE + mSubId), true,
+                Settings.Global.getUriFor(Settings.Global.PREFERRED_NETWORK_MODE + mSubId),
+                true,
                 mPreferredNetworkModeObserver);
     }
 
@@ -120,444 +115,539 @@
     public void updateState(Preference preference) {
         super.updateState(preference);
         final ListPreference listPreference = (ListPreference) preference;
-        final int networkMode = getPreferredNetworkMode();
-        Log.d(LOG_TAG, "updateState networkMode: " + networkMode);
 
-        updatePreferenceEntries(listPreference);
-        updatePreferenceValueAndSummary(listPreference, networkMode);
+        mBuilder.setPreferenceEntries();
+        mBuilder.setPreferenceValueAndSummary();
+
+        listPreference.setEntries(mBuilder.getEntries());
+        listPreference.setEntryValues(mBuilder.getEntryValues());
+        listPreference.setValue(Integer.toString(mBuilder.getSelectedEntryValue()));
+        listPreference.setSummary(mBuilder.getSummary());
     }
 
     @Override
     public boolean onPreferenceChange(Preference preference, Object object) {
         final int newPreferredNetworkMode = Integer.parseInt((String) object);
+        final ListPreference listPreference = (ListPreference) preference;
 
         if (mTelephonyManager.setPreferredNetworkTypeBitmask(
                 MobileNetworkUtils.getRafFromNetworkType(newPreferredNetworkMode))) {
-            updatePreferenceValueAndSummary((ListPreference) preference, newPreferredNetworkMode);
+            mBuilder.setPreferenceValueAndSummary(newPreferredNetworkMode);
+            listPreference.setValue(Integer.toString(mBuilder.getSelectedEntryValue()));
+            listPreference.setSummary(mBuilder.getSummary());
             return true;
         }
-
         return false;
     }
 
     public void init(Lifecycle lifecycle, int subId) {
         mSubId = subId;
-        final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
         mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
                 .createForSubscriptionId(mSubId);
+        mCarrierConfigManager = mContext.getSystemService(CarrierConfigManager.class);
+        mBuilder = new PreferenceEntriesBuilder(mContext, mSubId);
 
-        mIsGlobalCdma = mTelephonyManager.isLteCdmaEvdoGsmWcdmaEnabled()
-                && carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL);
-        mShow4GForLTE = carrierConfig != null
-                ? carrierConfig.getBoolean(
-                CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL)
-                : false;
-
-        final long supportedRadioBitmask = mTelephonyManager.getSupportedRadioAccessFamily();
-        final boolean is5gEnabledByCarrier = (mTelephonyManager.getAllowedNetworkTypes()
-                & TelephonyManager.NETWORK_TYPE_BITMASK_NR) > 0;
-        mDisplay5gList = checkSupportedRadioBitmask(
-                supportedRadioBitmask, mTelephonyManager.NETWORK_TYPE_BITMASK_NR)
-                && is5gEnabledByCarrier;
         lifecycle.addObserver(this);
     }
 
-    private int getPreferredNetworkMode() {
-        long preferredNetworkBitMask = MobileNetworkUtils.getRafFromNetworkType(
-                Settings.Global.getInt(mContext.getContentResolver(),
-                Settings.Global.PREFERRED_NETWORK_MODE + mSubId,
-                TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE));
-        return  MobileNetworkUtils.getNetworkTypeFromRaf((int)
-                (preferredNetworkBitMask & mTelephonyManager.getAllowedNetworkTypes()));
-    }
+    private final static class PreferenceEntriesBuilder {
+        private CarrierConfigManager mCarrierConfigManager;
+        private Context mContext;
+        private TelephonyManager mTelephonyManager;
 
-    private void updatePreferenceEntries(ListPreference preference) {
-        final int phoneType = mTelephonyManager.getPhoneType();
-        final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
-        if (phoneType == TelephonyManager.PHONE_TYPE_CDMA) {
-            final int lteForced = android.provider.Settings.Global.getInt(
-                    mContext.getContentResolver(),
-                    android.provider.Settings.Global.LTE_SERVICE_FORCED + mSubId,
-                    0);
-            final int settingsNetworkMode = getPreferredNetworkMode();
-            if (mTelephonyManager.isLteCdmaEvdoGsmWcdmaEnabled()) {
-                if (lteForced == 0) {
-                    preference.setEntries(
-                            R.array.enabled_networks_cdma_choices);
-                    preference.setEntryValues(
-                            R.array.enabled_networks_cdma_values);
-                } else {
-                    switch (settingsNetworkMode) {
-                        case TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO:
-                        case TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO:
-                        case TelephonyManagerConstants.NETWORK_MODE_EVDO_NO_CDMA:
-                            preference.setEntries(
-                                    R.array.enabled_networks_cdma_no_lte_choices);
-                            preference.setEntryValues(
-                                    R.array.enabled_networks_cdma_no_lte_values);
-                            break;
-                        case TelephonyManagerConstants.NETWORK_MODE_GLOBAL:
-                        case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
-                        case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
-                        case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
-                            preference.setEntries(
-                                    R.array.enabled_networks_cdma_only_lte_choices);
-                            preference.setEntryValues(
-                                    R.array.enabled_networks_cdma_only_lte_values);
-                            break;
-                        default:
-                            preference.setEntries(
-                                    R.array.enabled_networks_cdma_choices);
-                            preference.setEntryValues(
-                                    R.array.enabled_networks_cdma_values);
-                            break;
-                    }
-                }
-            }
-        } else if (phoneType == TelephonyManager.PHONE_TYPE_GSM) {
-            if (MobileNetworkUtils.isTdscdmaSupported(mContext, mSubId)) {
-                preference.setEntries(
-                        R.array.enabled_networks_tdscdma_choices);
-                preference.setEntryValues(
-                        R.array.enabled_networks_tdscdma_values);
-            } else if (carrierConfig != null
-                    && !carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)
-                    && !carrierConfig.getBoolean(CarrierConfigManager.KEY_LTE_ENABLED_BOOL)) {
-                preference.setEntries(R.array.enabled_networks_except_gsm_lte_choices);
-                preference.setEntryValues(R.array.enabled_networks_except_gsm_lte_values);
-            } else if (carrierConfig != null
-                    && !carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)) {
-                int select = mShow4GForLTE
-                        ? R.array.enabled_networks_except_gsm_4g_choices
-                        : R.array.enabled_networks_except_gsm_choices;
-                preference.setEntries(select);
-                preference.setEntryValues(
-                        R.array.enabled_networks_except_gsm_values);
-            } else if (carrierConfig != null
-                    && !carrierConfig.getBoolean(CarrierConfigManager.KEY_LTE_ENABLED_BOOL)) {
-                preference.setEntries(
-                        R.array.enabled_networks_except_lte_choices);
-                preference.setEntryValues(
-                        R.array.enabled_networks_except_lte_values);
-            } else if (mIsGlobalCdma) {
-                preference.setEntries(R.array.enabled_networks_cdma_choices);
-                preference.setEntryValues(R.array.enabled_networks_cdma_values);
-            } else {
-                int select = mShow4GForLTE ? R.array.enabled_networks_4g_choices
-                        : R.array.enabled_networks_choices;
-                preference.setEntries(select);
-                preference.setEntryValues(R.array.enabled_networks_values);
-            }
-        }
-        //TODO(b/117881708): figure out what world mode is, then we can optimize code. Otherwise
-        // I prefer to keep this old code
-        if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
-            preference.setEntries(
-                    R.array.preferred_network_mode_choices_world_mode);
-            preference.setEntryValues(
-                    R.array.preferred_network_mode_values_world_mode);
+        private boolean mAllowed5gNetworkType;
+        private boolean mIsGlobalCdma;
+        private boolean mIs5gEntryDisplayed;
+        private boolean mShow4gForLTE;
+        private boolean mSupported5gRadioAccessFamily;
+        private int mSelectedEntry;
+        private int mSubId;
+        private String mSummary;
+
+        private List<String> mEntries = new ArrayList<>();
+        private List<Integer> mEntriesValue = new ArrayList<>();
+
+        enum EnabledNetworks {
+            ENABLED_NETWORKS_UNKNOWN,
+            ENABLED_NETWORKS_CDMA_CHOICES,
+            ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES,
+            ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES,
+            ENABLED_NETWORKS_TDSCDMA_CHOICES,
+            ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES,
+            ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES,
+            ENABLED_NETWORKS_EXCEPT_GSM_CHOICES,
+            ENABLED_NETWORKS_EXCEPT_LTE_CHOICES,
+            ENABLED_NETWORKS_4G_CHOICES,
+            ENABLED_NETWORKS_CHOICES,
+            PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE
         }
 
-        if (mDisplay5gList) {
-            add5gListItem(preference);
-        }
-    }
+        PreferenceEntriesBuilder(Context context, int subId) {
+            this.mContext = context;
+            this.mSubId = subId;
 
-    @VisibleForTesting
-    boolean checkSupportedRadioBitmask(long supportedRadioBitmask, long targetBitmask) {
-        Log.d(LOG_TAG, "supportedRadioBitmask: " + supportedRadioBitmask);
-        if ((targetBitmask & supportedRadioBitmask) > 0) {
-            return true;
-        }
-        return false;
-    }
+            mCarrierConfigManager = mContext.getSystemService(CarrierConfigManager.class);
+            mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
+                    .createForSubscriptionId(mSubId);
 
-    /***
-     * Generate preferred network choices list for 5G
-     *
-     * @string/enabled_networks_cdma_choices
-     *         Before            |        After
-     * @string/network_lte   , 8 |@string/network_5G + @string/network_recommended , 25
-     * @string/network_3G    , 4 |@string/network_lte_pure, 8
-     * @string/network_1x    , 5 |@string/network_3G      , 4
-     * @string/network_global, 10|@string/network_1x      , 5
-     *                           |@string/network_global  , 27
-     *
-     * @string/enabled_networks_cdma_only_lte_choices
-     *         Before            |        After
-     * @string/network_lte   , 8 |@string/network_5G + @string/network_recommended , 25
-     * @string/network_global, 10|@string/network_lte_pure, 8
-     *                           |@string/network_global  , 27
-     *
-     * @string/enabled_networks_tdscdma_choices
-     *         Before         |        After
-     * @string/network_lte, 22|@string/network_5G + @string/network_recommended , 33
-     * @string/network_3G , 18|@string/network_lte_pure, 22
-     * @string/network_2G , 1 |@string/network_3G      , 18
-     *                        |@string/network_2G      , 1
-     *
-     * @string/enabled_networks_except_gsm_4g_choices
-     *         Before         |        After
-     * @string/network_4G , 9 |@string/network_5G + @string/network_recommended , 26
-     * @string/network_3G , 0 |@string/network_4G_pure , 9
-     *                        |@string/network_3G      , 0
-     *
-     * @string/enabled_networks_except_gsm_choices
-     *         Before         |        After
-     * @string/network_lte, 9 |@string/network_5G + @string/network_recommended , 26
-     * @string/network_3G , 0 |@string/network_lte_pure, 9
-     *                        |@string/network_3G      , 0
-     *
-     * @string/enabled_networks_4g_choices
-     *         Before         |        After
-     * @string/network_4G , 9 |@string/network_5G + @string/network_recommended , 26
-     * @string/network_3G , 0 |@string/network_4G_pure , 9
-     * @string/network_2G , 1 |@string/network_3G      , 0
-     *                        |@string/network_2G      , 1
-     *
-     * @string/enabled_networks_choices
-     *         Before         |        After
-     * @string/network_lte, 9 |@string/network_5G + @string/network_recommended , 26
-     * @string/network_3G , 0 |@string/network_lte_pure, 9
-     * @string/network_2G , 1 |@string/network_3G      , 0
-     *                        |@string/network_2G      , 1
-     *
-     * @string/preferred_network_mode_choices_world_mode
-     *         Before         |        After
-     * "Global"           , 10|@string/network_global  , 27
-     * "LTE / CDMA"       , 8 |"LTE / CDMA"            , 8
-     * "LTE / GSM / UMTS" , 9 |"LTE / GSM / UMTS"      , 9
-     */
-    @VisibleForTesting
-    void add5gListItem(ListPreference preference) {
-        final CharSequence[] oldEntries = preference.getEntries();
-        final CharSequence[] oldEntryValues = preference.getEntryValues();
-        List<CharSequence> newEntries = new ArrayList<>();
-        List<CharSequence> newEntryValues = new ArrayList<>();
-
-        CharSequence oldEntry;
-        CharSequence oldEntryValue;
-        CharSequence new5gEntry;
-        CharSequence new5gEntryValue;
-
-        for (int i = 0; i < oldEntries.length; i++) {
-            oldEntry = oldEntries[i];
-            oldEntryValue = oldEntryValues[i];
-            new5gEntry = "";
-            new5gEntryValue = "";
-
-            if (mContext.getString(R.string.network_lte).equals(oldEntry)) {
-                oldEntry = mContext.getString(R.string.network_lte_pure);
-                new5gEntry = mContext.getString(R.string.network_5G)
-                        + mContext.getString(R.string.network_recommended);
-                new5gEntryValue = transformLteEntryValueTo5gEntryValue(oldEntryValue);
-            } else if (mContext.getString(R.string.network_4G).equals(oldEntry)) {
-                oldEntry = mContext.getString(R.string.network_4G_pure);
-                new5gEntry = mContext.getString(R.string.network_5G)
-                        + mContext.getString(R.string.network_recommended);
-                new5gEntryValue = transformLteEntryValueTo5gEntryValue(oldEntryValue);
-            } else if (mContext.getString(R.string.network_global).equals(oldEntry)) {
-                //oldEntry: network_global
-                //oldEntryValue: TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA
-                oldEntryValue = Integer.toString(
-                        TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
-            }
-
-            if (!TextUtils.isEmpty(new5gEntry)) {
-                newEntries.add(new5gEntry);
-                newEntryValues.add(new5gEntryValue);
-            }
-            newEntries.add(oldEntry);
-            newEntryValues.add(oldEntryValue);
+            final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
+            mAllowed5gNetworkType = checkSupportedRadioBitmask(
+                    mTelephonyManager.getAllowedNetworkTypes(),
+                    TelephonyManager.NETWORK_TYPE_BITMASK_NR);
+            mSupported5gRadioAccessFamily = checkSupportedRadioBitmask(
+                    mTelephonyManager.getSupportedRadioAccessFamily(),
+                    TelephonyManager.NETWORK_TYPE_BITMASK_NR);
+            mIsGlobalCdma = mTelephonyManager.isLteCdmaEvdoGsmWcdmaEnabled()
+                    && carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL);
+            mShow4gForLTE = carrierConfig != null && carrierConfig.getBoolean(
+                    CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL);
         }
 
-        preference.setEntries(newEntries.toArray(new CharSequence[newEntries.size()]));
-        preference.setEntryValues(newEntryValues.toArray(new CharSequence[newEntryValues.size()]));
-    }
-
-    /**
-     * transform LTE network mode to 5G network mode.
-     *
-     * @param networkMode an LTE network mode without 5G.
-     * @return the corresponding network mode with 5G.
-     */
-    private CharSequence transformLteEntryValueTo5gEntryValue(CharSequence networkMode) {
-        int networkModeInt = Integer.valueOf(networkMode.toString());
-        return Integer.toString(addNrToLteNetworkType(networkModeInt));
-    }
-    private int addNrToLteNetworkType(int networkType) {
-        switch(networkType) {
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
-                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE;
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
-                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO;
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA:
-                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA;
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
-                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA;
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_WCDMA:
-                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_WCDMA;
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA:
-                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA;
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM:
-                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM;
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
-                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_WCDMA;
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
-                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA;
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
-                return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
-            default:
-                return networkType; // not LTE
-        }
-    }
-
-    /**
-     * Sets the display string for the network mode choice and selects the corresponding item
-     *
-     * @param preference ListPreference for selecting the preferred network mode.
-     * @param networkMode the current network mode. The current mode might not be an option in the
-     *                    choice list. The nearest choice is selected instead
-     */
-    private void updatePreferenceValueAndSummary(ListPreference preference, int networkMode) {
-        preference.setValue(Integer.toString(networkMode));
-        switch (networkMode) {
-            case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_WCDMA:
-            case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA:
-            case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM:
-                preference.setValue(
-                        Integer.toString(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA));
-                preference.setSummary(R.string.network_3G);
-                break;
-            case TelephonyManagerConstants.NETWORK_MODE_WCDMA_ONLY:
-            case TelephonyManagerConstants.NETWORK_MODE_GSM_UMTS:
-            case TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF:
-                if (!mIsGlobalCdma) {
-                    preference.setValue(Integer.toString(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF));
-                    preference.setSummary(R.string.network_3G);
-                } else {
-                    preference.setValue(Integer.toString(TelephonyManagerConstants
-                            .NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
-                    preference.setSummary(R.string.network_global);
-                }
-                break;
-            case TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY:
-                if (!mIsGlobalCdma) {
-                    preference.setValue(
-                            Integer.toString(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY));
-                    preference.setSummary(R.string.network_2G);
-                } else {
-                    preference.setValue(
-                            Integer.toString(TelephonyManagerConstants
-                                    .NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
-                    preference.setSummary(R.string.network_global);
-                }
-                break;
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA:
-                if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
-                    preference.setSummary(
-                            R.string.preferred_network_mode_lte_gsm_umts_summary);
+        void setPreferenceEntries() {
+            switch (getEnabledNetworkType()) {
+                case ENABLED_NETWORKS_CDMA_CHOICES:
+                    add5gEntry(addNrToLteNetworkType(
+                            TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO));
+                    addLteEntry(TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO);
+                    add3gEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO);
+                    add1xEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO);
+                    addGlobalEntry();
                     break;
-                }
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_WCDMA:
-                if (!mIsGlobalCdma) {
-                    preference.setValue(
-                            Integer.toString(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
-                    preference.setSummary(
-                            mShow4GForLTE ? R.string.network_4G : R.string.network_lte);
-                } else {
-                    preference.setValue(
-                            Integer.toString(TelephonyManagerConstants
-                                    .NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
-                    preference.setSummary(R.string.network_global);
-                }
-                break;
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
-                if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
-                    preference.setSummary(
-                            R.string.preferred_network_mode_lte_cdma_summary);
-                } else {
-                    preference.setValue(
-                            Integer.toString(TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO));
-                    preference.setSummary(
-                            mDisplay5gList ? R.string.network_lte_pure : R.string.network_lte);
-                }
-                break;
-            case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
-                preference.setValue(Integer.toString(TelephonyManagerConstants
-                        .NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA));
-                preference.setSummary(R.string.network_3G);
-                break;
-            case TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO:
-            case TelephonyManagerConstants.NETWORK_MODE_EVDO_NO_CDMA:
-            case TelephonyManagerConstants.NETWORK_MODE_GLOBAL:
-                preference.setValue(
-                        Integer.toString(TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO));
-                preference.setSummary(R.string.network_3G);
-                break;
-            case TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO:
-                preference.setValue(
-                        Integer.toString(TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO));
-                preference.setSummary(R.string.network_1x);
-                break;
-            case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_ONLY:
-                preference.setValue(
-                        Integer.toString(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_ONLY));
-                preference.setSummary(R.string.network_3G);
-                break;
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM:
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA:
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
-            case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
-                if (MobileNetworkUtils.isTdscdmaSupported(mContext, mSubId)) {
-                    preference.setValue(
-                            Integer.toString(TelephonyManagerConstants
-                                    .NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA));
-                    preference.setSummary(
-                            mDisplay5gList ? R.string.network_lte_pure : R.string.network_lte);
-                } else {
-                    preference.setValue(
-                            Integer.toString(TelephonyManagerConstants
-                                    .NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
-                    if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA
-                            || mIsGlobalCdma
-                            || MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
-                        preference.setSummary(R.string.network_global);
+                case ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES:
+                    add3gEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO);
+                    add1xEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO);
+                    break;
+                case ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES:
+                    addLteEntry(TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO);
+                    addGlobalEntry();
+                    break;
+                case ENABLED_NETWORKS_TDSCDMA_CHOICES:
+                    add5gEntry(addNrToLteNetworkType(
+                            TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA));
+                    addLteEntry(
+                            TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA);
+                    add3gEntry(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
+                    add2gEntry(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY);
+                    break;
+                case ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES:
+                    add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF);
+                    break;
+                case ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES:
+                    add5gEntry(addNrToLteNetworkType(
+                            TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
+                    add4gEntry(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
+                    add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF);
+                    break;
+                case ENABLED_NETWORKS_EXCEPT_GSM_CHOICES:
+                    add5gEntry(addNrToLteNetworkType(
+                            TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
+                    addLteEntry(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
+                    add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF);
+                    break;
+                case ENABLED_NETWORKS_EXCEPT_LTE_CHOICES:
+                    add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF);
+                    add2gEntry(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY);
+                    break;
+                case ENABLED_NETWORKS_4G_CHOICES:
+                    add5gEntry(addNrToLteNetworkType(
+                            TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
+                    add4gEntry(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
+                    add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF);
+                    add2gEntry(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY);
+                    break;
+                case ENABLED_NETWORKS_CHOICES:
+                    add5gEntry(addNrToLteNetworkType(
+                            TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
+                    addLteEntry(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
+                    add3gEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF);
+                    add2gEntry(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY);
+                    break;
+                case PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE:
+                    addGlobalEntry();
+                    addCustomEntry(mContext.getString(R.string.network_world_mode_cdma_lte),
+                            TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO);
+                    addCustomEntry(mContext.getString(R.string.network_world_mode_gsm_lte),
+                            TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
+                    break;
+                default:
+                    throw new IllegalArgumentException("Not supported enabled network types.");
+            }
+        }
+
+        private int getPreferredNetworkMode() {
+            return Settings.Global.getInt(mContext.getContentResolver(),
+                    Settings.Global.PREFERRED_NETWORK_MODE + mSubId,
+                    TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE);
+        }
+
+        private EnabledNetworks getEnabledNetworkType() {
+            EnabledNetworks enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_UNKNOWN;
+            final int phoneType = mTelephonyManager.getPhoneType();
+            final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
+
+            if (phoneType == TelephonyManager.PHONE_TYPE_CDMA) {
+                final int lteForced = android.provider.Settings.Global.getInt(
+                        mContext.getContentResolver(),
+                        android.provider.Settings.Global.LTE_SERVICE_FORCED + mSubId,
+                        0);
+                final int settingsNetworkMode = getPreferredNetworkMode();
+                if (mTelephonyManager.isLteCdmaEvdoGsmWcdmaEnabled()) {
+                    if (lteForced == 0) {
+                        enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_CDMA_CHOICES;
                     } else {
-                        if (mDisplay5gList) {
-                            preference.setSummary(mShow4GForLTE
-                                    ? R.string.network_4G_pure : R.string.network_lte_pure);
-                        } else {
-                            preference.setSummary(mShow4GForLTE
-                                    ? R.string.network_4G : R.string.network_lte);
+                        switch (settingsNetworkMode) {
+                            case TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO:
+                            case TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO:
+                            case TelephonyManagerConstants.NETWORK_MODE_EVDO_NO_CDMA:
+                                enabledNetworkType =
+                                        EnabledNetworks.ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES;
+                                break;
+                            case TelephonyManagerConstants.NETWORK_MODE_GLOBAL:
+                            case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
+                            case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
+                            case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
+                                enabledNetworkType =
+                                        EnabledNetworks.ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES;
+                                break;
+                            default:
+                                enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_CDMA_CHOICES;
+                                break;
                         }
                     }
                 }
-                break;
-            case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO:
-            case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
-                preference.setValue(Integer.toString(networkMode));
-                preference.setSummary(mContext.getString(R.string.network_5G)
-                        + mContext.getString(R.string.network_recommended));
-                break;
-            case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA:
-                preference.setValue(
-                        Integer.toString(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA));
-                if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA
-                        || mIsGlobalCdma
-                        || MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
-                    preference.setSummary(R.string.network_global);
+            } else if (phoneType == TelephonyManager.PHONE_TYPE_GSM) {
+                if (MobileNetworkUtils.isTdscdmaSupported(mContext, mSubId)) {
+                    enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_TDSCDMA_CHOICES;
+                } else if (carrierConfig != null
+                        && !carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)
+                        && !carrierConfig.getBoolean(CarrierConfigManager.KEY_LTE_ENABLED_BOOL)) {
+                    enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES;
+                } else if (carrierConfig != null
+                        && !carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)) {
+                    enabledNetworkType = mShow4gForLTE
+                            ? EnabledNetworks.ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES
+                            : EnabledNetworks.ENABLED_NETWORKS_EXCEPT_GSM_CHOICES;
+                } else if (carrierConfig != null
+                        && !carrierConfig.getBoolean(CarrierConfigManager.KEY_LTE_ENABLED_BOOL)) {
+                    enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_EXCEPT_LTE_CHOICES;
+                } else if (mIsGlobalCdma) {
+                    enabledNetworkType = EnabledNetworks.ENABLED_NETWORKS_CDMA_CHOICES;
                 } else {
-                    preference.setSummary(mContext.getString(R.string.network_5G)
-                            + mContext.getString(R.string.network_recommended));
+                    enabledNetworkType = mShow4gForLTE ? EnabledNetworks.ENABLED_NETWORKS_4G_CHOICES
+                            : EnabledNetworks.ENABLED_NETWORKS_CHOICES;
                 }
-                break;
-            default:
-                preference.setSummary(
-                        mContext.getString(R.string.mobile_network_mode_error, networkMode));
+            }
+            //TODO(b/117881708): figure out what world mode is, then we can optimize code. Otherwise
+            // I prefer to keep this old code
+            if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
+                enabledNetworkType = EnabledNetworks.PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE;
+            }
+
+            Log.d(LOG_TAG, "enabledNetworkType: " + enabledNetworkType);
+            return enabledNetworkType;
         }
+
+        /**
+         * Sets the display string for the network mode choice and selects the corresponding item
+         *
+         * @param networkMode the current network mode. The current mode might not be an option in
+         *                   the choice list. The nearest choice is selected instead
+         */
+        void setPreferenceValueAndSummary(int networkMode) {
+            setSelectedEntry(networkMode);
+            switch (networkMode) {
+                case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_WCDMA:
+                case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA:
+                case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM:
+                    setSelectedEntry(
+                            TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
+                    setSummary(R.string.network_3G);
+                    break;
+                case TelephonyManagerConstants.NETWORK_MODE_WCDMA_ONLY:
+                case TelephonyManagerConstants.NETWORK_MODE_GSM_UMTS:
+                case TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF:
+                    if (!mIsGlobalCdma) {
+                        setSelectedEntry(TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF);
+                        setSummary(R.string.network_3G);
+                    } else {
+                        setSelectedEntry(
+                                TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
+                        setSummary(R.string.network_global);
+                    }
+                    break;
+                case TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY:
+                    if (!mIsGlobalCdma) {
+                        setSelectedEntry(TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY);
+                        setSummary(R.string.network_2G);
+                    } else {
+                        setSelectedEntry(
+                                TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
+                        setSummary(R.string.network_global);
+                    }
+                    break;
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA:
+                    if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
+                        setSummary(
+                                R.string.preferred_network_mode_lte_gsm_umts_summary);
+                        break;
+                    }
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_WCDMA:
+                    if (!mIsGlobalCdma) {
+                        setSelectedEntry(
+                                TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
+                        setSummary(
+                                mShow4gForLTE ? R.string.network_4G : R.string.network_lte);
+                    } else {
+                        setSelectedEntry(
+                                TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
+                        setSummary(R.string.network_global);
+                    }
+                    break;
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
+                    if (MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
+                        setSummary(
+                                R.string.preferred_network_mode_lte_cdma_summary);
+                    } else {
+                        setSelectedEntry(
+                                TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO);
+                        setSummary(is5gEntryDisplayed()
+                                ? R.string.network_lte_pure : R.string.network_lte);
+                    }
+                    break;
+                case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
+                    setSelectedEntry(
+                            TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA);
+                    setSummary(R.string.network_3G);
+                    break;
+                case TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO:
+                case TelephonyManagerConstants.NETWORK_MODE_EVDO_NO_CDMA:
+                case TelephonyManagerConstants.NETWORK_MODE_GLOBAL:
+                    setSelectedEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO);
+                    setSummary(R.string.network_3G);
+                    break;
+                case TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO:
+                    setSelectedEntry(TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO);
+                    setSummary(R.string.network_1x);
+                    break;
+                case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_ONLY:
+                    setSelectedEntry(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_ONLY);
+                    setSummary(R.string.network_3G);
+                    break;
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM:
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA:
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
+                    if (MobileNetworkUtils.isTdscdmaSupported(mContext, mSubId)) {
+                        setSelectedEntry(
+                                TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA);
+                        setSummary(is5gEntryDisplayed()
+                                ? R.string.network_lte_pure : R.string.network_lte);
+                    } else {
+                        setSelectedEntry(
+                                TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
+                        if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA
+                                || mIsGlobalCdma
+                                || MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
+                            setSummary(R.string.network_global);
+                        } else {
+                            if (is5gEntryDisplayed()) {
+                                setSummary(mShow4gForLTE
+                                        ? R.string.network_4G_pure : R.string.network_lte_pure);
+                            } else {
+                                setSummary(mShow4gForLTE
+                                        ? R.string.network_4G : R.string.network_lte);
+                            }
+                        }
+                    }
+                    break;
+                case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO:
+                case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
+                    setSelectedEntry(networkMode);
+                    setSummary(mContext.getString(R.string.network_5G)
+                            + mContext.getString(R.string.network_recommended));
+                    break;
+                case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA:
+                    setSelectedEntry(
+                            TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
+                    if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA
+                            || mIsGlobalCdma
+                            || MobileNetworkUtils.isWorldMode(mContext, mSubId)) {
+                        setSummary(R.string.network_global);
+                    } else {
+                        setSummary(mContext.getString(R.string.network_5G)
+                                + mContext.getString(R.string.network_recommended));
+                    }
+                    break;
+                default:
+                    setSummary(
+                            mContext.getString(R.string.mobile_network_mode_error, networkMode));
+            }
+        }
+
+        /**
+         * Transform LTE network mode to 5G network mode.
+         *
+         * @param networkType an LTE network mode without 5G.
+         * @return the corresponding network mode with 5G.
+         */
+        private static int addNrToLteNetworkType(int networkType) {
+            switch(networkType) {
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
+                    return TelephonyManagerConstants.NETWORK_MODE_NR_LTE;
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
+                    return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO;
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA:
+                    return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA;
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
+                    return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA;
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_WCDMA:
+                    return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_WCDMA;
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA:
+                    return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA;
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM:
+                    return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM;
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
+                    return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_WCDMA;
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
+                    return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA;
+                case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
+                    return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
+                default:
+                    return networkType; // not LTE
+            }
+        }
+
+        private void setPreferenceValueAndSummary() {
+            setPreferenceValueAndSummary(getPreferredNetworkMode());
+        }
+
+        private boolean checkSupportedRadioBitmask(long supportedRadioBitmask, long targetBitmask) {
+            return (targetBitmask & supportedRadioBitmask) > 0;
+        }
+
+        /**
+         * Add 5G option. Only show the UI when device supported 5G and allowed 5G.
+         */
+        private void add5gEntry(int value) {
+            boolean isNRValue = value >= TelephonyManagerConstants.NETWORK_MODE_NR_ONLY;
+            if (mSupported5gRadioAccessFamily && mAllowed5gNetworkType && isNRValue) {
+                mEntries.add(mContext.getString(R.string.network_5G)
+                        + mContext.getString(R.string.network_recommended));
+                mEntriesValue.add(value);
+                mIs5gEntryDisplayed = true;
+            } else {
+                Log.d(LOG_TAG, "Hide 5G option. "
+                        + " supported5GRadioAccessFamily: " + mSupported5gRadioAccessFamily
+                        + " allowed5GNetworkType: " + mAllowed5gNetworkType
+                        + " isNRValue: " + isNRValue);
+            }
+        }
+
+        private void addGlobalEntry() {
+            Log.d(LOG_TAG, "addGlobalEntry. "
+                    + " supported5GRadioAccessFamily: " + mSupported5gRadioAccessFamily
+                    + " allowed5GNetworkType: " + mAllowed5gNetworkType);
+            mEntries.add(mContext.getString(R.string.network_global));
+            if (mSupported5gRadioAccessFamily & mAllowed5gNetworkType) {
+                mEntriesValue.add(
+                        TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
+            } else {
+                mEntriesValue.add(
+                        TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
+            }
+        }
+
+        /**
+         * Add LTE entry. If device supported 5G, show "LTE" instead of "LTE (recommended)".
+         */
+        private void addLteEntry(int value) {
+            if (mSupported5gRadioAccessFamily) {
+                mEntries.add(mContext.getString(R.string.network_lte_pure));
+            } else {
+                mEntries.add(mContext.getString(R.string.network_lte));
+            }
+            mEntriesValue.add(value);
+        }
+
+        /**
+         * Add 4G entry. If device supported 5G, show "4G" instead of "4G (recommended)".
+         */
+        private void add4gEntry(int value) {
+            if (mSupported5gRadioAccessFamily) {
+                mEntries.add(mContext.getString(R.string.network_4G_pure));
+            } else {
+                mEntries.add(mContext.getString(R.string.network_4G));
+            }
+            mEntriesValue.add(value);
+        }
+
+        private void add3gEntry(int value) {
+            mEntries.add(mContext.getString(R.string.network_3G));
+            mEntriesValue.add(value);
+        }
+
+        private void add2gEntry(int value) {
+            mEntries.add(mContext.getString(R.string.network_2G));
+            mEntriesValue.add(value);
+        }
+
+        private void add1xEntry(int value) {
+            mEntries.add(mContext.getString(R.string.network_1x));
+            mEntriesValue.add(value);
+        }
+
+        private void addCustomEntry(String name, int value) {
+            mEntries.add(name);
+            mEntriesValue.add(value);
+        }
+
+        private String[] getEntries() {
+            return mEntries.toArray(new String[0]);
+        }
+
+        private String[] getEntryValues() {
+            Integer intArr[] = mEntriesValue.toArray(new Integer[0]);
+            return Arrays.stream(intArr)
+                    .map(String::valueOf)
+                    .toArray(String[]::new);
+        }
+
+        private int getSelectedEntryValue() {
+            return mSelectedEntry;
+        }
+
+        private void setSelectedEntry(int value) {
+            boolean isInEntriesValue = mEntriesValue.stream()
+                    .anyMatch(v -> v == value);
+
+            if (isInEntriesValue) {
+                mSelectedEntry = value;
+            } else if (mEntriesValue.size() > 0) {
+                // if the value isn't in entriesValue, select on the first one.
+                mSelectedEntry = mEntriesValue.get(0);
+            } else {
+                Log.e(LOG_TAG, "entriesValue is empty");
+            }
+        }
+
+        private String getSummary() {
+            return mSummary;
+        }
+
+        private void setSummary(int summaryResId) {
+            setSummary(mContext.getString(summaryResId));
+        }
+
+        private void setSummary(String summary) {
+            this.mSummary = summary;
+        }
+
+        private boolean is5gEntryDisplayed() {
+            return mIs5gEntryDisplayed;
+        }
+
     }
 }
diff --git a/src/com/android/settings/notification/app/ImportantConversationBubblePreferenceController.java b/src/com/android/settings/notification/app/ImportantConversationBubblePreferenceController.java
deleted file mode 100644
index f6f14aa..0000000
--- a/src/com/android/settings/notification/app/ImportantConversationBubblePreferenceController.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.notification.app;
-
-import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
-import static android.provider.Settings.Secure.BUBBLE_IMPORTANT_CONVERSATIONS;
-
-import android.content.Context;
-import android.provider.Settings;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
-
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settings.core.TogglePreferenceController;
-
-public class ImportantConversationBubblePreferenceController extends TogglePreferenceController
-        implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener {
-
-    private static final String TAG = "ImpConvBubPrefContr";
-    @VisibleForTesting
-    static final int ON = 1;
-    @VisibleForTesting
-    static final int OFF = 0;
-
-
-    public ImportantConversationBubblePreferenceController(Context context, String preferenceKey) {
-        super(context, preferenceKey);
-    }
-
-    private boolean isGloballyEnabled() {
-        return Settings.Global.getInt(mContext.getContentResolver(),
-                NOTIFICATION_BUBBLES, OFF) == ON;
-    }
-
-    @Override
-    public int getAvailabilityStatus() {
-        return isGloballyEnabled() ? AVAILABLE : DISABLED_DEPENDENT_SETTING;
-    }
-
-    @Override
-    public boolean isSliceable() {
-        return false;
-    }
-
-    @Override
-    public boolean isChecked() {
-        return Settings.Secure.getInt(mContext.getContentResolver(),
-                BUBBLE_IMPORTANT_CONVERSATIONS, ON) == ON;
-    }
-
-    @Override
-    public boolean setChecked(boolean isChecked) {
-        return Settings.Secure.putInt(mContext.getContentResolver(),
-                BUBBLE_IMPORTANT_CONVERSATIONS, isChecked ? ON : OFF);
-    }
-}
diff --git a/src/com/android/settings/notification/zen/ZenModeAllBypassingAppsPreferenceController.java b/src/com/android/settings/notification/zen/ZenModeAllBypassingAppsPreferenceController.java
index b3630a0..9484a09 100644
--- a/src/com/android/settings/notification/zen/ZenModeAllBypassingAppsPreferenceController.java
+++ b/src/com/android/settings/notification/zen/ZenModeAllBypassingAppsPreferenceController.java
@@ -105,9 +105,7 @@
         ApplicationsState.AppFilter filter = ApplicationsState.FILTER_ALL_ENABLED;
         List<ApplicationsState.AppEntry> apps = mAppSession.rebuild(filter,
                 ApplicationsState.ALPHA_COMPARATOR);
-        if (apps != null) {
-            updateNotificationChannelList(apps);
-        }
+        updateNotificationChannelList(apps);
     }
 
     @VisibleForTesting
@@ -116,6 +114,8 @@
             return;
         }
 
+        boolean showEmptyState = true;
+
         List<Preference> channelsBypassingDnd = new ArrayList<>();
         for (ApplicationsState.AppEntry entry : apps) {
             String pkg = entry.info.packageName;
@@ -148,6 +148,7 @@
                     return true;
                 });
                 channelsBypassingDnd.add(pref);
+                showEmptyState = false;
             }
 
             mPreferenceScreen.removeAll();
@@ -156,6 +157,11 @@
                     mPreferenceScreen.addPreference(prefToAdd);
                 }
             }
+            if (showEmptyState) {
+                Preference pref = new Preference(mPrefContext);
+                pref.setTitle(R.string.zen_mode_bypassing_apps_subtext_none);
+                mPreferenceScreen.addPreference(pref);
+            }
         }
     }
 
diff --git a/src/com/android/settings/notification/zen/ZenModeBypassingAppsPreferenceController.java b/src/com/android/settings/notification/zen/ZenModeBypassingAppsPreferenceController.java
index 9ef9380..a93fa1b 100644
--- a/src/com/android/settings/notification/zen/ZenModeBypassingAppsPreferenceController.java
+++ b/src/com/android/settings/notification/zen/ZenModeBypassingAppsPreferenceController.java
@@ -9,7 +9,7 @@
 
 public class ZenModeBypassingAppsPreferenceController extends AbstractZenModePreferenceController {
 
-    protected static final String KEY = "zen_mode_bypassing_apps";
+    protected static final String KEY = "zen_mode_behavior_apps";
     private NotificationBackend mNotificationBackend = new NotificationBackend();
 
     public ZenModeBypassingAppsPreferenceController(Context context, Lifecycle lifecycle) {
@@ -18,13 +18,16 @@
 
     @Override
     public boolean isAvailable() {
-        return mNotificationBackend.getNumAppsBypassingDnd(UserHandle.getCallingUserId()) != 0;
+        return true;
     }
 
     @Override
     public String getSummary() {
         final int channelsBypassing =
                 mNotificationBackend.getNumAppsBypassingDnd(UserHandle.getCallingUserId());
+        if (channelsBypassing == 0) {
+            return mContext.getResources().getString(R.string.zen_mode_bypassing_apps_subtext_none);
+        }
         return mContext.getResources().getQuantityString(R.plurals.zen_mode_bypassing_apps_subtext,
                 channelsBypassing, channelsBypassing);
     }
diff --git a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
index c0f7e1f..4843736 100644
--- a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
+++ b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
@@ -32,6 +32,7 @@
 import android.graphics.drawable.Icon;
 import android.graphics.drawable.LayerDrawable;
 import android.net.ConnectivityManager;
+import android.util.FeatureFlagUtils;
 import android.util.Log;
 import android.view.ContextThemeWrapper;
 import android.view.LayoutInflater;
@@ -45,6 +46,8 @@
 
 import com.android.settings.R;
 import com.android.settings.Settings.TetherSettingsActivity;
+import com.android.settings.Settings.WifiSettings2Activity;
+import com.android.settings.Settings.WifiSettingsActivity;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -187,6 +190,15 @@
                 Log.d(TAG, "Skipping non-system app: " + info.activityInfo);
                 continue;
             }
+            if (FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_WIFITRACKER2)) {
+                if (info.activityInfo.name.endsWith(WifiSettingsActivity.class.getSimpleName())) {
+                    continue;
+                }
+            } else {
+                if (info.activityInfo.name.endsWith(WifiSettings2Activity.class.getSimpleName())) {
+                    continue;
+                }
+            }
             shortcuts.add(info);
         }
         Collections.sort(shortcuts, SHORTCUT_COMPARATOR);
diff --git a/src/com/android/settings/users/OWNERS b/src/com/android/settings/users/OWNERS
deleted file mode 100644
index 59096be..0000000
--- a/src/com/android/settings/users/OWNERS
+++ /dev/null
@@ -1,6 +0,0 @@
-# Default reviewers for this and subdirectories.
-dling@google.com
-yamasani@google.com
-zhfan@google.com
-
-# Emergency approvers in case the above are not available
\ No newline at end of file
diff --git a/src/com/android/settings/widget/VideoPreference.java b/src/com/android/settings/widget/VideoPreference.java
index 6356378..fe91669 100644
--- a/src/com/android/settings/widget/VideoPreference.java
+++ b/src/com/android/settings/widget/VideoPreference.java
@@ -39,17 +39,12 @@
 public class VideoPreference extends Preference {
 
     private static final String TAG = "VideoPreference";
-    private static final int DEFAULT_BACKGROUND_RESOURCE_ID = -1;
     private final Context mContext;
 
     @VisibleForTesting
     AnimationController mAnimationController;
     @VisibleForTesting
     boolean mAnimationAvailable;
-    @VisibleForTesting
-    LinearLayout mAnimationView;
-    @VisibleForTesting
-    int mBackgroundResId = DEFAULT_BACKGROUND_RESOURCE_ID;
 
     private float mAspectRatio = 1.0f;
     private int mPreviewId;
@@ -120,7 +115,6 @@
         mVideo = (TextureView) holder.findViewById(R.id.video_texture_view);
         mPreviewImage = (ImageView) holder.findViewById(R.id.video_preview_image);
         mPlayButton = (ImageView) holder.findViewById(R.id.video_play_button);
-        mAnimationView = (LinearLayout) holder.itemView;
         final AspectRatioFrameLayout layout = (AspectRatioFrameLayout) holder.findViewById(
                 R.id.video_container);
 
@@ -130,9 +124,6 @@
             layout.setLayoutParams(new LinearLayout.LayoutParams(
                     LinearLayout.LayoutParams.MATCH_PARENT, mHeight));
         }
-        if (mBackgroundResId != DEFAULT_BACKGROUND_RESOURCE_ID) {
-            mAnimationView.setBackgroundResource(mBackgroundResId);
-        }
         if (mAnimationController != null) {
             mAnimationController.attachView(mVideo, mPreviewImage, mPlayButton);
         }
@@ -213,14 +204,6 @@
     }
 
     /**
-     * Set the background color of the video preference
-     * @param resId resource id of color
-     */
-    public void setBackgroundColor(int resId) {
-        mBackgroundResId = resId;
-    }
-
-    /**
      * Handle animation operations.
      */
     interface AnimationController {
diff --git a/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java
index 03ea121..a4a51dc 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceController.java
@@ -18,18 +18,22 @@
 
 import static com.android.settings.AllInOneTetherSettings.DEDUP_POSTFIX;
 
+import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.net.wifi.SoftApConfiguration;
 import android.text.TextUtils;
 import android.util.FeatureFlagUtils;
 
+import androidx.annotation.VisibleForTesting;
 import androidx.preference.EditTextPreference;
 import androidx.preference.Preference;
 
 import com.android.settings.R;
 import com.android.settings.core.FeatureFlags;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.widget.ValidatedEditTextPreference;
 import com.android.settings.wifi.WifiUtils;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 
 import java.util.UUID;
 
@@ -40,9 +44,19 @@
 
     private String mPassword;
 
+    private final MetricsFeatureProvider mMetricsFeatureProvider;
+
+    @VisibleForTesting
+    WifiTetherPasswordPreferenceController(Context context, OnTetherConfigUpdateListener listener,
+            MetricsFeatureProvider provider) {
+        super(context, listener);
+        mMetricsFeatureProvider = provider;
+    }
+
     public WifiTetherPasswordPreferenceController(Context context,
             OnTetherConfigUpdateListener listener) {
         super(context, listener);
+        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
     }
 
     @Override
@@ -69,6 +83,10 @@
 
     @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
+        if (!TextUtils.equals(mPassword, (String) newValue)) {
+            mMetricsFeatureProvider.action(mContext,
+                    SettingsEnums.ACTION_SETTINGS_CHANGE_WIFI_HOTSPOT_PASSWORD);
+        }
         mPassword = (String) newValue;
         updatePasswordDisplay((EditTextPreference) mPreference);
         mListener.onTetherConfigUpdated(this);
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java
index a4289a6..9070d44 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceController.java
@@ -22,6 +22,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.net.wifi.SoftApConfiguration;
+import android.text.TextUtils;
 import android.util.FeatureFlagUtils;
 import android.util.Log;
 
@@ -48,6 +49,15 @@
 
     private final MetricsFeatureProvider mMetricsFeatureProvider;
 
+    // This constructor is used for testing.
+    @VisibleForTesting
+    WifiTetherSSIDPreferenceController(Context context, OnTetherConfigUpdateListener listener,
+            MetricsFeatureProvider provider) {
+        super(context, listener);
+        mWifiDeviceNameTextValidator = new WifiDeviceNameTextValidator();
+        mMetricsFeatureProvider = provider;
+    }
+
     public WifiTetherSSIDPreferenceController(Context context,
             OnTetherConfigUpdateListener listener) {
         super(context, listener);
@@ -93,6 +103,10 @@
 
     @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
+        if (!TextUtils.equals(mSSID, (String) newValue)) {
+            mMetricsFeatureProvider.action(mContext,
+                    SettingsEnums.ACTION_SETTINGS_CHANGE_WIFI_HOTSPOT_NAME);
+        }
         mSSID = (String) newValue;
         updateSsidDisplay((EditTextPreference) preference);
         mListener.onTetherConfigUpdated(this);
diff --git a/tests/robotests/src/com/android/settings/TetherSettingsTest.java b/tests/robotests/src/com/android/settings/TetherSettingsTest.java
index 17c8fe8..3c38c51d 100644
--- a/tests/robotests/src/com/android/settings/TetherSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/TetherSettingsTest.java
@@ -30,9 +30,12 @@
 import android.net.wifi.WifiManager;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.util.FeatureFlagUtils;
 
 import androidx.preference.Preference;
 
+import com.android.settings.core.FeatureFlags;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -72,6 +75,7 @@
 
     @Test
     public void testTetherNonIndexableKeys_tetherAvailable_keysNotReturned() {
+        FeatureFlagUtils.setEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE, false);
         // To let TetherUtil.isTetherAvailable return true, select one of the combinations
         setupIsTetherAvailable(true);
 
@@ -106,6 +110,7 @@
 
     @Test
     public void testTetherNonIndexableKeys_usbAvailable_usbKeyNotReturned() {
+        FeatureFlagUtils.setEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE, false);
         // We can ignore the condition of Utils.isMonkeyRunning()
         // In normal case, monkey and robotest should not execute at the same time
         when(mConnectivityManager.getTetherableUsbRegexs()).thenReturn(new String[]{"dummyRegex"});
@@ -128,6 +133,7 @@
 
     @Test
     public void testTetherNonIndexableKeys_bluetoothAvailable_bluetoothKeyNotReturned() {
+        FeatureFlagUtils.setEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE, false);
         when(mConnectivityManager.getTetherableBluetoothRegexs())
                 .thenReturn(new String[]{"dummyRegex"});
 
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
index 3528fb6..98d2918 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
@@ -130,14 +130,17 @@
     }
 
     @Test
-    public void getServiceSummary_invisibleType_showsDefaultSummary() {
+    public void getServiceSummary_invisibleType_shortcutDisabled_showsOffSummary() {
         setInvisibleFragmentType(mServiceInfo);
         doReturn(DEFAULT_SUMMARY).when(mServiceInfo).loadSummary(any());
 
         final CharSequence summary = AccessibilitySettings.getServiceSummary(mContext,
                 mServiceInfo, SERVICE_ENABLED);
 
-        assertThat(summary).isEqualTo(DEFAULT_SUMMARY);
+        assertThat(summary).isEqualTo(
+                mContext.getString(R.string.preference_summary_default_combination,
+                        mContext.getString(R.string.accessibility_summary_shortcut_disabled),
+                        DEFAULT_SUMMARY));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java
index ca2a800..044b698 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java
@@ -36,7 +36,6 @@
 import static org.mockito.Mockito.when;
 
 import android.app.ActivityManager;
-import android.app.Application;
 import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
@@ -51,8 +50,6 @@
 import android.util.ArraySet;
 import android.view.View;
 
-import androidx.preference.PreferenceScreen;
-
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.core.InstrumentedPreferenceFragment;
@@ -277,7 +274,8 @@
     }
 
     @Test
-    public void updateUninstallButton_isProfileOrDeviceOwner_setButtonDisable() {
+    public void updateUninstallButton_isSystemAndIsProfileOrDeviceOwner_setButtonDisable() {
+        mAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
         doReturn(true).when(mDpm).isDeviceOwnerAppOnAnyUser(anyString());
 
         mController.updateUninstallButton();
@@ -286,6 +284,36 @@
     }
 
     @Test
+    public void updateUninstallButton_isSystemAndIsNotProfileOrDeviceOwner_setButtonEnabled() {
+        mAppInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
+        doReturn(false).when(mDpm).isDeviceOwnerAppOnAnyUser(anyString());
+
+        mController.updateUninstallButton();
+
+        verify(mButtonPrefs).setButton2Enabled(true);
+    }
+
+    @Test
+    public void updateUninstallButton_isNotSystemAndIsProfileOrDeviceOwner_setButtonDisable() {
+        doReturn(0).when(mDpm).getDeviceOwnerUserId();
+        doReturn(true).when(mDpm).isDeviceOwnerApp(anyString());
+
+        mController.updateUninstallButton();
+
+        verify(mButtonPrefs).setButton2Enabled(false);
+    }
+
+    @Test
+    public void updateUninstallButton_isNotSystemAndIsNotProfileOrDeviceOwner_setButtonEnabled() {
+        doReturn(10).when(mDpm).getDeviceOwnerUserId();
+        doReturn(false).when(mDpm).isDeviceOwnerApp(anyString());
+
+        mController.updateUninstallButton();
+
+        verify(mButtonPrefs).setButton2Enabled(true);
+    }
+
+    @Test
     public void updateUninstallButton_isDeviceProvisioningApp_setButtonDisable() {
         doReturn(true).when(mDpm).isDeviceOwnerAppOnAnyUser(anyString());
         when(mSettingsActivity.getResources().getString(anyInt())).thenReturn(PACKAGE_NAME);
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/ManageExternalStorageDetailsTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/ManageExternalStorageDetailsTest.java
index ed85c01..88c2471 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/ManageExternalStorageDetailsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/ManageExternalStorageDetailsTest.java
@@ -64,13 +64,11 @@
 
     private ManageExternalStorageDetails mFragment;
 
-    private final HashMap<String, Integer> mPkgToOpModeMap = new HashMap<>();
     private final HashMap<Integer, Integer> mUidToOpModeMap = new HashMap<>();
 
     @Before
     public void setUp() {
         // Reset the global trackers
-        mPkgToOpModeMap.clear();
         mUidToOpModeMap.clear();
 
         //Start the mockin'
@@ -106,8 +104,7 @@
 
         // Verify that mAppOpsManager was called to allow the app-op
         verify(mAppOpsManager, times(1))
-                .setMode(anyInt(), anyInt(), nullable(String.class), anyInt());
-        assertThat(mPkgToOpModeMap).containsExactly(mockPkgName, AppOpsManager.MODE_ALLOWED);
+                .setUidMode(anyInt(), anyInt(), anyInt());
         assertThat(mUidToOpModeMap).containsExactly(mockUid, AppOpsManager.MODE_ALLOWED);
 
         // Verify the mSwitchPref was enabled
@@ -141,8 +138,7 @@
 
         // Verify that mAppOpsManager was called to deny the app-op
         verify(mAppOpsManager, times(1))
-                .setMode(anyInt(), anyInt(), nullable(String.class), anyInt());
-        assertThat(mPkgToOpModeMap).containsExactly(mockPkgName, AppOpsManager.MODE_ERRORED);
+                .setUidMode(anyInt(), anyInt(), anyInt());
         assertThat(mUidToOpModeMap).containsExactly(mockUid, AppOpsManager.MODE_ERRORED);
 
         // Verify the mSwitchPref was enabled
@@ -164,33 +160,32 @@
     }
 
     private void mockAppOpsOperations() {
-        Answer<Void> answerSetMode = invocation -> {
+        Answer<Void> answerSetUidMode = invocation -> {
             int code = invocation.getArgument(0);
             int uid = invocation.getArgument(1);
-            String packageName = invocation.getArgument(2);
-            int mode = invocation.getArgument(3);
+            int mode = invocation.getArgument(2);
 
             if (code != AppOpsManager.OP_MANAGE_EXTERNAL_STORAGE) {
                 return null;
             }
 
-            mPkgToOpModeMap.put(packageName, mode);
             mUidToOpModeMap.put(uid, mode);
 
             return null;
         };
 
-        doAnswer(answerSetMode).when(mAppOpsManager)
-                .setMode(anyInt(), anyInt(), nullable(String.class), anyInt());
+        doAnswer(answerSetUidMode).when(mAppOpsManager)
+                .setUidMode(anyInt(), anyInt(), anyInt());
 
         Answer<PermissionState> answerPermState = invocation -> {
             String packageName = invocation.getArgument(0);
+            int uid = invocation.getArgument(1);
             PermissionState res = new PermissionState(packageName, null);
             res.permissionDeclared = false;
 
-            if (mPkgToOpModeMap.containsKey(packageName)) {
+            if (mUidToOpModeMap.containsKey(uid)) {
                 res.permissionDeclared = true;
-                res.appOpMode = mPkgToOpModeMap.get(packageName);
+                res.appOpMode = mUidToOpModeMap.get(uid);
             }
             return res;
         };
diff --git a/tests/robotests/src/com/android/settings/applications/assist/AssistFlashScreenPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/assist/AssistFlashScreenPreferenceControllerTest.java
index 8392ac1..1e6faa1 100644
--- a/tests/robotests/src/com/android/settings/applications/assist/AssistFlashScreenPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/assist/AssistFlashScreenPreferenceControllerTest.java
@@ -41,7 +41,6 @@
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Answers;
@@ -81,7 +80,6 @@
     }
 
     @Test
-    @Ignore
     @Config(shadows = {ShadowSecureSettings.class})
     public void isAvailable_hasAssistantAndAllowDisclosure_shouldReturnTrue() {
         ReflectionHelpers.setField(mController, "mContext", mMockContext);
@@ -93,7 +91,6 @@
     }
 
     @Test
-    @Ignore
     @Config(shadows = {ShadowSecureSettings.class})
     public void isAvailable_hasAssistantAndDisallowDisclosure_shouldReturnTrue() {
         ReflectionHelpers.setField(mController, "mContext", mMockContext);
@@ -112,7 +109,6 @@
     }
 
     @Test
-    @Ignore
     @Config(shadows = {ShadowSecureSettings.class})
     public void onResume_shouldUpdatePreference() {
         Settings.Secure.putString(mContext.getContentResolver(),
diff --git a/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java
index 7de830c..3e46027 100644
--- a/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java
@@ -44,7 +44,6 @@
 import com.android.settingslib.applications.DefaultAppInfo;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -95,7 +94,6 @@
     }
 
     @Test
-    @Ignore
     @Config(shadows = {ShadowSecureSettings.class})
     public void getDefaultAppInfo_hasDefaultAssist_shouldReturnKey() {
         final String flattenKey = "com.android.settings/assist";
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPickerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPickerTest.java
index dfacd81..9ec7f0b 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPickerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPickerTest.java
@@ -45,7 +45,6 @@
 import com.android.settingslib.applications.DefaultAppInfo;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Answers;
@@ -107,7 +106,6 @@
     }
 
     @Test
-    @Ignore
     public void setAndGetDefaultAppKey_shouldUpdateDefaultAutoFill() {
         mPicker.onAttach((Context) mActivity);
 
diff --git a/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java
index 83a4880..101297b 100644
--- a/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java
@@ -49,9 +49,9 @@
 import org.robolectric.annotation.Config;
 import org.robolectric.annotation.Implementation;
 import org.robolectric.annotation.Implements;
-import org.robolectric.shadows.androidx.fragment.FragmentController;
 import org.robolectric.shadow.api.Shadow;
 import org.robolectric.shadows.ShadowUserManager;
+import org.robolectric.shadows.androidx.fragment.FragmentController;
 import org.robolectric.util.ReflectionHelpers;
 
 import java.util.List;
@@ -133,7 +133,8 @@
     @Config(shadows = {
             ShadowPictureColorModePreferenceController.class,
             ShadowAdbPreferenceController.class,
-            ShadowClearAdbKeysPreferenceController.class
+            ShadowClearAdbKeysPreferenceController.class,
+            ShadowWirelessDebuggingPreferenceController.class
     })
     public void searchIndex_pageEnabled_shouldNotAddKeysToNonIndexable() {
         final Context appContext = RuntimeEnvironment.application;
@@ -325,4 +326,12 @@
             return true;
         }
     }
+
+    @Implements(WirelessDebuggingPreferenceController.class)
+    public static class ShadowWirelessDebuggingPreferenceController {
+        @Implementation
+        protected boolean isAvailable() {
+            return true;
+        }
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java
index 2f3aecc..57729ea 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java
@@ -44,7 +44,6 @@
 import androidx.preference.ListPreference;
 import androidx.preference.PreferenceScreen;
 
-import com.android.settings.R;
 import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
@@ -61,6 +60,9 @@
     private static final int SUB_ID = 2;
     public static final String KEY = "enabled_network";
 
+    private static final long ALLOWED_ALL_NETWORK_TYPE = -1;
+    private static final long DISABLED_5G_NETWORK_TYPE = ~TelephonyManager.NETWORK_TYPE_BITMASK_NR;
+
     @Mock
     private TelephonyManager mTelephonyManager;
     @Mock
@@ -92,19 +94,20 @@
         doReturn(mContext).when(mContext).createPackageContext(anyString(), anyInt());
         doReturn(mServiceState).when(mTelephonyManager).getServiceState();
         mPersistableBundle = new PersistableBundle();
+        doReturn(mPersistableBundle).when(mCarrierConfigManager).getConfig();
         doReturn(mPersistableBundle).when(mCarrierConfigManager).getConfigForSubId(SUB_ID);
-
         mPreference = new ListPreference(mContext);
-        mPreference.setEntries(R.array.enabled_networks_choices);
-        mPreference.setEntryValues(R.array.enabled_networks_values);
         mController = new EnabledNetworkModePreferenceController(mContext, KEY);
+        mockAllowedNetworkTypes(ALLOWED_ALL_NETWORK_TYPE);
+        mockAccessFamily(TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
         mController.init(mLifecycle, SUB_ID);
         mPreference.setKey(mController.getPreferenceKey());
     }
 
     @Test
     public void getAvailabilityStatus_hideCarrierNetworkSettings_returnUnavailable() {
-        mPersistableBundle.putBoolean(CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL,
+        mPersistableBundle.putBoolean(
+                CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL,
                 true);
 
         assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
@@ -140,40 +143,118 @@
     }
 
     @Test
-    public void init_initShow4GForLTE() {
-        mPersistableBundle.putBoolean(CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL,
-                true);
+    public void updateState_LteWorldPhone_GlobalHasLte() {
+        mPersistableBundle.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
 
-        mController.init(mLifecycle, SUB_ID);
+        mController.updateState(mPreference);
 
-        assertThat(mController.mShow4GForLTE).isTrue();
+        assertThat(mPreference.getEntryValues())
+                .asList()
+                .contains(String.valueOf(TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
     }
 
     @Test
-    public void init_initDisplay5gList_returnTrue() {
-        long testBitmask = TelephonyManager.NETWORK_TYPE_BITMASK_NR
-                | TelephonyManager.NETWORK_TYPE_BITMASK_LTE;
-        long allowedNetworkTypes = -1;
-        doReturn(testBitmask).when(mTelephonyManager).getSupportedRadioAccessFamily();
-        doReturn(allowedNetworkTypes).when(mTelephonyManager).getAllowedNetworkTypes();
+    public void updateState_5gWorldPhone_GlobalHasNr() {
+        mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
         mController.init(mLifecycle, SUB_ID);
+        mPersistableBundle.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
 
-        assertThat(mController.mDisplay5gList).isTrue();
+        mController.updateState(mPreference);
+
+        assertThat(mPreference.getEntryValues())
+                .asList()
+                .contains(String.valueOf(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA));
     }
 
     @Test
-    public void checkSupportedRadioBitmask_nrBitmask_returnTrue() {
-        long testBitmask = TelephonyManager.NETWORK_TYPE_BITMASK_NR
-                | TelephonyManager.NETWORK_TYPE_BITMASK_LTE;
+    public void updateState_selectedOn5gItem() {
+        mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
+        mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
+        mController.init(mLifecycle, SUB_ID);
+        Settings.Global.putInt(mContext.getContentResolver(),
+                Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
+                TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
 
-        assertThat(mController.checkSupportedRadioBitmask(testBitmask,
-                TelephonyManager.NETWORK_TYPE_BITMASK_NR)).isTrue();
+        mController.updateState(mPreference);
+
+        assertThat(mPreference.getValue()).isEqualTo(
+                String.valueOf(
+                        TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA));
+    }
+
+    @Test
+    public void updateState_disAllowed5g_5gOptionHidden() {
+        mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
+        mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
+        mockAllowedNetworkTypes(DISABLED_5G_NETWORK_TYPE);
+        mController.init(mLifecycle, SUB_ID);
+        Settings.Global.putInt(mContext.getContentResolver(),
+                Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
+                TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
+
+        mController.updateState(mPreference);
+
+        assertThat(mPreference.getEntryValues())
+                .asList()
+                .doesNotContain(
+                        String.valueOf(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA));
+    }
+
+    @Test
+    public void updateState_disAllowed5g_selectOn4gOption() {
+        mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
+        mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
+        mockAllowedNetworkTypes(DISABLED_5G_NETWORK_TYPE);
+        mController.init(mLifecycle, SUB_ID);
+        Settings.Global.putInt(mContext.getContentResolver(),
+                Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
+                TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
+
+        mController.updateState(mPreference);
+
+        assertThat(mPreference.getValue()).isEqualTo(
+                String.valueOf(
+                        TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA));
+    }
+
+    @Test
+    public void updateState_GlobalDisAllowed5g_GlobalWithoutNR() {
+        mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
+        mockAllowedNetworkTypes(DISABLED_5G_NETWORK_TYPE);
+        mController.init(mLifecycle, SUB_ID);
+        mPersistableBundle.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
+        Settings.Global.putInt(mContext.getContentResolver(),
+                Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
+                TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
+
+        mController.updateState(mPreference);
+
+        assertThat(mPreference.getEntryValues())
+                .asList()
+                .doesNotContain(
+                        String.valueOf(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA));
+    }
+
+    @Test
+    public void updateState_GlobalDisAllowed5g_SelectOnGlobal() {
+        mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
+        mockAllowedNetworkTypes(DISABLED_5G_NETWORK_TYPE);
+        mController.init(mLifecycle, SUB_ID);
+        mPersistableBundle.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
+        Settings.Global.putInt(mContext.getContentResolver(),
+                Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
+                TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
+
+        mController.updateState(mPreference);
+
+        assertThat(mPreference.getValue()).isEqualTo(
+                String.valueOf(
+                        TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
     }
 
     @Test
     public void updateState_updateByNetworkMode() {
-        long allowedNetworkTypes = -1;
-        doReturn(allowedNetworkTypes).when(mTelephonyManager).getAllowedNetworkTypes();
+        mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
         Settings.Global.putInt(mContext.getContentResolver(),
                 Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
                 TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
@@ -187,8 +268,7 @@
 
     @Test
     public void updateState_updateByNetworkMode_useDefaultValue() {
-        long allowedNetworkTypes = -1;
-        doReturn(allowedNetworkTypes).when(mTelephonyManager).getAllowedNetworkTypes();
+        mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
         Settings.Global.putInt(mContext.getContentResolver(),
                 Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
                 TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
@@ -199,208 +279,13 @@
                 String.valueOf(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
     }
 
-    /**
-     * @string/enabled_networks_cdma_choices
-     *         Before            |        After
-     * @string/network_lte   , 8 |@string/network_5G + @string/network_recommended , 25
-     * @string/network_3G    , 4 |@string/network_lte_pure, 8
-     * @string/network_1x    , 5 |@string/network_3G      , 4
-     * @string/network_global, 10|@string/network_1x      , 5
-     *                           |@string/network_global  , 27
-     *
-     * @string/enabled_networks_cdma_only_lte_choices
-     *         Before            |        After
-     * @string/network_lte   , 8 |@string/network_5G + @string/network_recommended , 25
-     * @string/network_global, 10|@string/network_lte_pure, 8
-     *                           |@string/network_global  , 27
-     */
-    @Test
-    public void add5gListItem_lteCdma_5gLteCdma() {
-        //case#1
-        mPreference.setEntries(R.array.enabled_networks_cdma_choices);
-        mPreference.setEntryValues(R.array.enabled_networks_cdma_values);
-        CharSequence[] testEntries = {mContext.getString(R.string.network_5G)
-                + mContext.getString(R.string.network_recommended)
-                , mContext.getString(R.string.network_lte_pure)
-                , mContext.getString(R.string.network_3G)
-                , mContext.getString(R.string.network_1x)
-                , mContext.getString(R.string.network_global)};
-        CharSequence[] testEntryValues = {"25", "8", "4", "5", "27"};
-
-        mController.add5gListItem(mPreference);
-
-        assertThat(mPreference.getEntries()).isEqualTo(testEntries);
-        assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues);
-
-        //case#2
-        mPreference.setEntries(R.array.enabled_networks_cdma_only_lte_choices);
-        mPreference.setEntryValues(R.array.enabled_networks_cdma_only_lte_values);
-        CharSequence[] testEntries1 = {mContext.getString(R.string.network_5G)
-                + mContext.getString(R.string.network_recommended)
-                , mContext.getString(R.string.network_lte_pure)
-                , mContext.getString(R.string.network_global)};
-        CharSequence[] testEntryValues1 = {"25", "8", "27"};
-
-        mController.add5gListItem(mPreference);
-
-        assertThat(mPreference.getEntries()).isEqualTo(testEntries1);
-        assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues1);
-    }
-
-    /**
-     * @string/enabled_networks_except_gsm_4g_choices
-     *         Before         |        After
-     * @string/network_4G , 9 |@string/network_5G + @string/network_recommended , 26
-     * @string/network_3G , 0 |@string/network_4G_pure , 9
-     *                        |@string/network_3G      , 0
-     *
-     * @string/enabled_networks_except_gsm_choices
-     *         Before         |        After
-     * @string/network_lte, 9 |@string/network_5G + @string/network_recommended , 26
-     * @string/network_3G , 0 |@string/network_lte_pure, 9
-     *                        |@string/network_3G      , 0
-     *
-     * @string/enabled_networks_4g_choices
-     *         Before         |        After
-     * @string/network_4G , 9 |@string/network_5G + @string/network_recommended , 26
-     * @string/network_3G , 0 |@string/network_4G_pure , 9
-     * @string/network_2G , 1 |@string/network_3G      , 0
-     *                        |@string/network_2G      , 1
-     *
-     * @string/enabled_networks_choices
-     *         Before         |        After
-     * @string/network_lte, 9 |@string/network_5G + @string/network_recommended , 26
-     * @string/network_3G , 0 |@string/network_lte_pure, 9
-     * @string/network_2G , 1 |@string/network_3G      , 0
-     *                        |@string/network_2G      , 1
-     */
-    @Test
-    public void add5gListItem_lteGsm_5gLteGsm() {
-        //csae#1
-        mPreference.setEntries(R.array.enabled_networks_except_gsm_4g_choices);
-        mPreference.setEntryValues(R.array.enabled_networks_except_gsm_values);
-        CharSequence[] testEntries = {mContext.getString(R.string.network_5G)
-                + mContext.getString(R.string.network_recommended)
-                , mContext.getString(R.string.network_4G_pure)
-                , mContext.getString(R.string.network_3G)};
-        CharSequence[] testEntryValues = {"26", "9", "0"};
-
-        mController.add5gListItem(mPreference);
-
-        assertThat(mPreference.getEntries()).isEqualTo(testEntries);
-        assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues);
-
-        //case#2
-        mPreference.setEntries(R.array.enabled_networks_except_gsm_choices);
-        mPreference.setEntryValues(R.array.enabled_networks_except_gsm_values);
-        CharSequence[] testEntries1 = {mContext.getString(R.string.network_5G)
-                + mContext.getString(R.string.network_recommended)
-                , mContext.getString(R.string.network_lte_pure)
-                , mContext.getString(R.string.network_3G)};
-        CharSequence[] testEntryValues1 = {"26", "9", "0"};
-
-        mController.add5gListItem(mPreference);
-
-        assertThat(mPreference.getEntries()).isEqualTo(testEntries1);
-        assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues1);
-
-        //case#3
-        mPreference.setEntries(R.array.enabled_networks_4g_choices);
-        mPreference.setEntryValues(R.array.enabled_networks_values);
-        CharSequence[] testEntries2 = {mContext.getString(R.string.network_5G)
-                + mContext.getString(R.string.network_recommended)
-                , mContext.getString(R.string.network_4G_pure)
-                , mContext.getString(R.string.network_3G)
-                , mContext.getString(R.string.network_2G)};
-        CharSequence[] testEntryValues2 = {"26", "9", "0", "1"};
-
-        mController.add5gListItem(mPreference);
-
-        assertThat(mPreference.getEntries()).isEqualTo(testEntries2);
-        assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues2);
-
-        //case#4
-        mPreference.setEntries(R.array.enabled_networks_choices);
-        mPreference.setEntryValues(R.array.enabled_networks_values);
-        CharSequence[] testEntries3 = {mContext.getString(R.string.network_5G)
-                + mContext.getString(R.string.network_recommended)
-                , mContext.getString(R.string.network_lte_pure)
-                , mContext.getString(R.string.network_3G)
-                , mContext.getString(R.string.network_2G)};
-        CharSequence[] testEntryValues3 = {"26", "9", "0", "1"};
-
-        mController.add5gListItem(mPreference);
-
-        assertThat(mPreference.getEntries()).isEqualTo(testEntries3);
-        assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues3);
-    }
-
-    /**
-     * @string/preferred_network_mode_choices_world_mode
-     *         Before         |        After
-     * "Global"           , 10|@string/network_global  , 27
-     * "LTE / CDMA"       , 8 |"LTE / CDMA"            , 8
-     * "LTE / GSM / UMTS" , 9 |"LTE / GSM / UMTS"      , 9
-     */
-    @Test
-    public void add5gListItem_worldPhone_Global() {
-        mPreference.setEntries(R.array.preferred_network_mode_choices_world_mode);
-        mPreference.setEntryValues(R.array.preferred_network_mode_values_world_mode);
-        CharSequence[] testEntries = {mContext.getString(R.string.network_global)
-                , "LTE / CDMA"
-                , "LTE / GSM / UMTS"};
-        CharSequence[] testEntryValues = {"27", "8", "9"};
-
-        mController.add5gListItem(mPreference);
-
-        assertThat(mPreference.getEntries()).isEqualTo(testEntries);
-        assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues);
-    }
-
-    /**
-     * @string/enabled_networks_tdscdma_choices
-     *         Before         |        After
-     * @string/network_lte, 22|@string/network_5G + @string/network_recommended , 33
-     * @string/network_3G , 18|@string/network_lte_pure, 22
-     * @string/network_2G , 1 |@string/network_3G      , 18
-     *                        |@string/network_2G      , 1
-     */
-    @Test
-    public void add5gListItem_td_5gTd() {
-        mPreference.setEntries(R.array.enabled_networks_tdscdma_choices);
-        mPreference.setEntryValues(R.array.enabled_networks_tdscdma_values);
-        CharSequence[] testEntries = {mContext.getString(R.string.network_5G)
-                + mContext.getString(R.string.network_recommended)
-                , mContext.getString(R.string.network_lte_pure)
-                , mContext.getString(R.string.network_3G)
-                , mContext.getString(R.string.network_2G)};
-        CharSequence[] testEntryValues = {"33", "22", "18", "1"};
-
-        mController.add5gListItem(mPreference);
-
-        assertThat(mPreference.getEntries()).isEqualTo(testEntries);
-        assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues);
-    }
-
-    @Test
-    public void add5gListItem_noLte_no5g() {
-        mPreference.setEntries(R.array.enabled_networks_except_lte_choices);
-        mPreference.setEntryValues(R.array.enabled_networks_except_lte_values);
-        CharSequence[] testEntries = {mContext.getString(R.string.network_3G)
-                , mContext.getString(R.string.network_2G)};
-        CharSequence[] testEntryValues = {"0", "1"};
-
-        mController.add5gListItem(mPreference);
-
-        assertThat(mPreference.getEntries()).isEqualTo(testEntries);
-        assertThat(mPreference.getEntryValues()).isEqualTo(testEntryValues);
-    }
-
     @Test
     public void onPreferenceChange_updateSuccess() {
+        mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
         doReturn(true).when(mTelephonyManager).setPreferredNetworkTypeBitmask(
                 getRafFromNetworkType(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
 
+        mController.updateState(mPreference);
         mController.onPreferenceChange(mPreference,
                 String.valueOf(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
 
@@ -410,9 +295,11 @@
 
     @Test
     public void onPreferenceChange_updateFail() {
+        mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
         doReturn(false).when(mTelephonyManager).setPreferredNetworkTypeBitmask(
                 getRafFromNetworkType(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
 
+        mController.updateState(mPreference);
         mController.onPreferenceChange(mPreference,
                 String.valueOf(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
 
@@ -423,8 +310,7 @@
     @Test
     public void preferredNetworkModeNotification_preferenceUpdates() {
         PreferenceScreen screen = mock(PreferenceScreen.class);
-        long allowedNetworkTypes = -1;
-        doReturn(allowedNetworkTypes).when(mTelephonyManager).getAllowedNetworkTypes();
+        mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA);
         doReturn(mPreference).when(screen).findPreference(KEY);
         Settings.Global.putInt(mContext.getContentResolver(),
                 Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
@@ -448,4 +334,32 @@
                 TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY);
         assertThat(mPreference.getSummary()).isEqualTo("2G");
     }
+
+    private void mockEnabledNetworkMode(int networkMode) {
+        if (networkMode == TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA) {
+            mockPhoneType(TelephonyManager.PHONE_TYPE_GSM);
+            mPersistableBundle.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, true);
+        } else if (networkMode == TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA) {
+            mockPhoneType(TelephonyManager.PHONE_TYPE_GSM);
+            mPersistableBundle.putBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL, true);
+            mPersistableBundle.putBoolean(CarrierConfigManager.KEY_LTE_ENABLED_BOOL, true);
+        } else if (networkMode == TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA) {
+            mockPhoneType(TelephonyManager.PHONE_TYPE_GSM);
+            mPersistableBundle.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, true);
+        }
+    }
+
+    private void mockAllowedNetworkTypes(long allowedNetworkType) {
+        doReturn(allowedNetworkType).when(mTelephonyManager).getAllowedNetworkTypes();
+    }
+
+    private void mockAccessFamily(int networkMode) {
+        doReturn(MobileNetworkUtils.getRafFromNetworkType(networkMode))
+                .when(mTelephonyManager)
+                .getSupportedRadioAccessFamily();
+    }
+
+    private void mockPhoneType(int phoneType) {
+        doReturn(TelephonyManager.PHONE_TYPE_GSM).when(mTelephonyManager).getPhoneType();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/notification/app/ImportantConversationBubblePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/app/ImportantConversationBubblePreferenceControllerTest.java
deleted file mode 100644
index c99e095..0000000
--- a/tests/robotests/src/com/android/settings/notification/app/ImportantConversationBubblePreferenceControllerTest.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.notification.app;
-
-import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
-import static android.provider.Settings.Secure.BUBBLE_IMPORTANT_CONVERSATIONS;
-
-import static com.android.settings.core.BasePreferenceController.AVAILABLE;
-import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING;
-import static com.android.settings.notification.app.ImportantConversationBubblePreferenceController.OFF;
-import static com.android.settings.notification.app.ImportantConversationBubblePreferenceController.ON;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.provider.Settings;
-
-import androidx.preference.PreferenceScreen;
-import androidx.preference.TwoStatePreference;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Answers;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-
-@RunWith(RobolectricTestRunner.class)
-public class ImportantConversationBubblePreferenceControllerTest {
-
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private Context mContext;
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private PreferenceScreen mScreen;
-
-    private ImportantConversationBubblePreferenceController mController;
-    @Mock
-    private TwoStatePreference mPreference;
-
-    private static final String KEY = "important_bubble";
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mController = new ImportantConversationBubblePreferenceController(mContext, KEY);
-        when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
-        when(mScreen.findPreference(mPreference.getKey())).thenReturn(mPreference);
-    }
-
-    @Test
-    public void testGetAvailabilityStatus_globallyOn() {
-        Settings.Global.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, ON);
-
-        assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
-    }
-
-    @Test
-    public void testGetAvailabilityStatus_globallyOff() {
-        Settings.Global.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, OFF);
-
-        assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_DEPENDENT_SETTING);
-    }
-
-    @Test
-    public void updateState_preferenceSetCheckedWhenSettingIsOn() {
-        Settings.Secure.putInt(mContext.getContentResolver(), BUBBLE_IMPORTANT_CONVERSATIONS, ON);
-
-        mController.updateState(mPreference);
-
-        verify(mPreference).setChecked(true);
-    }
-
-    @Test
-    public void updateState_preferenceSetUncheckedWhenSettingIsOff() {
-        Settings.Secure.putInt(mContext.getContentResolver(), BUBBLE_IMPORTANT_CONVERSATIONS, OFF);
-
-        mController.updateState(mPreference);
-
-        verify(mPreference).setChecked(false);
-    }
-
-    @Test
-    public void isChecked_settingIsOff_shouldReturnFalse() {
-        Settings.Secure.putInt(mContext.getContentResolver(), BUBBLE_IMPORTANT_CONVERSATIONS, OFF);
-
-        assertThat(mController.isChecked()).isFalse();
-    }
-
-    @Test
-    public void isChecked_settingIsOn_shouldReturnTrue() {
-        Settings.Secure.putInt(mContext.getContentResolver(), BUBBLE_IMPORTANT_CONVERSATIONS, ON);
-
-        assertThat(mController.isChecked()).isTrue();
-    }
-
-    @Test
-    public void setChecked_setFalse_disablesSetting() {
-        Settings.Secure.putInt(mContext.getContentResolver(), BUBBLE_IMPORTANT_CONVERSATIONS, ON);
-
-        mController.setChecked(false);
-        int updatedValue = Settings.Secure.getInt(mContext.getContentResolver(),
-                BUBBLE_IMPORTANT_CONVERSATIONS, -1);
-
-        assertThat(updatedValue).isEqualTo(OFF);
-    }
-
-    @Test
-    public void setChecked_setTrue_enablesSetting() {
-        Settings.Secure.putInt(mContext.getContentResolver(), BUBBLE_IMPORTANT_CONVERSATIONS, OFF);
-
-        mController.setChecked(true);
-        int updatedValue = Settings.Secure.getInt(mContext.getContentResolver(),
-                BUBBLE_IMPORTANT_CONVERSATIONS, -1);
-
-        assertThat(updatedValue).isEqualTo(ON);
-    }
-
-    @Test
-    public void isSliceable_returnsFalse() {
-        assertThat(mController.isSliceable()).isFalse();
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/wallpaper/StyleSuggestionActivityTest.java b/tests/robotests/src/com/android/settings/wallpaper/StyleSuggestionActivityTest.java
index 72f9c62..120c780 100644
--- a/tests/robotests/src/com/android/settings/wallpaper/StyleSuggestionActivityTest.java
+++ b/tests/robotests/src/com/android/settings/wallpaper/StyleSuggestionActivityTest.java
@@ -28,7 +28,6 @@
 import com.android.settings.testutils.shadow.ShadowSecureSettings;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -61,7 +60,6 @@
     }
 
     @Test
-    @Ignore
     @Config(shadows = ShadowSecureSettings.class)
     public void hasStyleSet_yes_shouldReturnTrue() {
         when(mResources.getBoolean(com.android.internal.R.bool.config_enableWallpaperService))
@@ -73,7 +71,6 @@
     }
 
     @Test
-    @Ignore
     @Config(shadows = ShadowSecureSettings.class)
     public void hasStyleSet_no_shouldReturnFalse() {
         when(mResources.getBoolean(com.android.internal.R.bool.config_enableWallpaperService))
diff --git a/tests/robotests/src/com/android/settings/widget/VideoPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/VideoPreferenceTest.java
index 720ad20..46b582f 100644
--- a/tests/robotests/src/com/android/settings/widget/VideoPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/VideoPreferenceTest.java
@@ -32,7 +32,6 @@
 import android.view.TextureView;
 import android.view.View;
 import android.widget.ImageView;
-import android.widget.LinearLayout;
 
 import androidx.preference.PreferenceFragmentCompat;
 import androidx.preference.PreferenceViewHolder;
@@ -61,8 +60,6 @@
     private ImageView fakePreview;
     @Mock
     private ImageView fakePlayButton;
-    @Mock
-    private LinearLayout mAnimationView;
 
     private Context mContext;
     private VideoPreference mVideoPreference;
@@ -77,7 +74,6 @@
                 new MediaAnimationController(mContext, R.raw.accessibility_screen_magnification));
         mVideoPreference = new VideoPreference(mContext, null /* attrs */);
         mVideoPreference.mAnimationController = mAnimationController;
-        mVideoPreference.mAnimationView = mAnimationView;
         when(mAnimationController.getVideoWidth()).thenReturn(VIDEO_WIDTH);
         when(mAnimationController.getVideoHeight()).thenReturn(VIDEO_HEIGHT);
 
@@ -162,13 +158,6 @@
         assertThat(vp2.mAnimationController instanceof VectorAnimationController).isTrue();
     }
 
-    @Test
-    public void setBackgroundColor_shouldBeCalled() {
-        mVideoPreference.setBackgroundColor(1111);
-
-        assertThat(mVideoPreference.mBackgroundResId).isEqualTo(1111);
-    }
-
     public static class TestFragment extends PreferenceFragmentCompat {
         @Override
         public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceControllerTest.java
index bf2261a..7835f7e 100644
--- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceControllerTest.java
@@ -19,10 +19,12 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.net.ConnectivityManager;
 import android.net.wifi.SoftApConfiguration;
@@ -31,6 +33,7 @@
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.widget.ValidatedEditTextPreference;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -46,6 +49,7 @@
 
     private static final String VALID_PASS = "12345678";
     private static final String VALID_PASS2 = "23456789";
+    private static final String INITIAL_PASSWORD = "test_password";
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private Context mContext;
     @Mock
@@ -56,6 +60,8 @@
     private WifiTetherBasePreferenceController.OnTetherConfigUpdateListener mListener;
     @Mock
     private PreferenceScreen mScreen;
+    @Mock
+    private MetricsFeatureProvider mMetricsFeatureProvider;
 
     private WifiTetherPasswordPreferenceController mController;
     private ValidatedEditTextPreference mPreference;
@@ -66,7 +72,8 @@
         MockitoAnnotations.initMocks(this);
         mPreference = new ValidatedEditTextPreference(RuntimeEnvironment.application);
         mConfig = new SoftApConfiguration.Builder().setSsid("test_1234")
-                .setPassphrase("test_password", SoftApConfiguration.SECURITY_TYPE_WPA2_PSK).build();
+                .setPassphrase(INITIAL_PASSWORD, SoftApConfiguration.SECURITY_TYPE_WPA2_PSK)
+                .build();
 
         when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mWifiManager);
         when(mWifiManager.getSoftApConfiguration()).thenReturn(mConfig);
@@ -76,7 +83,8 @@
         when(mContext.getResources()).thenReturn(RuntimeEnvironment.application.getResources());
         when(mScreen.findPreference(anyString())).thenReturn(mPreference);
 
-        mController = new WifiTetherPasswordPreferenceController(mContext, mListener);
+        mController = new WifiTetherPasswordPreferenceController(mContext, mListener,
+                mMetricsFeatureProvider);
     }
 
     @Test
@@ -102,6 +110,22 @@
     }
 
     @Test
+    public void changePreference_shouldLogActionWhenChanged() {
+        mController.displayPreference(mScreen);
+        mController.onPreferenceChange(mPreference, VALID_PASS);
+        verify(mMetricsFeatureProvider).action(mContext,
+                SettingsEnums.ACTION_SETTINGS_CHANGE_WIFI_HOTSPOT_PASSWORD);
+    }
+
+    @Test
+    public void changePreference_shouldNotLogActionWhenNotChanged() {
+        mController.displayPreference(mScreen);
+        mController.onPreferenceChange(mPreference, INITIAL_PASSWORD);
+        verify(mMetricsFeatureProvider, never()).action(mContext,
+                SettingsEnums.ACTION_SETTINGS_CHANGE_WIFI_HOTSPOT_PASSWORD);
+    }
+
+    @Test
     public void updateDisplay_shouldUpdateValue() {
         // Set controller password to anything and verify is set.
         mController.displayPreference(mScreen);
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceControllerTest.java
index fc38088..a6a9dda 100644
--- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceControllerTest.java
@@ -19,10 +19,12 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.net.ConnectivityManager;
 import android.net.wifi.SoftApConfiguration;
@@ -30,6 +32,8 @@
 
 import androidx.preference.PreferenceScreen;
 
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -52,6 +56,8 @@
     private WifiTetherBasePreferenceController.OnTetherConfigUpdateListener mListener;
     @Mock
     private PreferenceScreen mScreen;
+    @Mock
+    private MetricsFeatureProvider mMetricsFeatureProvider;
 
     private WifiTetherSSIDPreferenceController mController;
     private WifiTetherSsidPreference mPreference;
@@ -67,8 +73,8 @@
         when(mConnectivityManager.getTetherableWifiRegexs()).thenReturn(new String[]{"1", "2"});
         when(mContext.getResources()).thenReturn(RuntimeEnvironment.application.getResources());
         when(mScreen.findPreference(anyString())).thenReturn(mPreference);
-
-        mController = new WifiTetherSSIDPreferenceController(mContext, mListener);
+        mController = new WifiTetherSSIDPreferenceController(mContext, mListener,
+                mMetricsFeatureProvider);
     }
 
     @Test
@@ -103,6 +109,23 @@
     }
 
     @Test
+    public void changePreference_shouldLogActionWhenChanged() {
+        mController.displayPreference(mScreen);
+        mController.onPreferenceChange(mPreference, "1");
+        verify(mMetricsFeatureProvider).action(mContext,
+                SettingsEnums.ACTION_SETTINGS_CHANGE_WIFI_HOTSPOT_NAME);
+    }
+
+    @Test
+    public void changePreference_shouldNotLogActionWhenNotChanged() {
+        mController.displayPreference(mScreen);
+        mController.onPreferenceChange(mPreference,
+                WifiTetherSSIDPreferenceController.DEFAULT_SSID);
+        verify(mMetricsFeatureProvider, never()).action(mContext,
+                SettingsEnums.ACTION_SETTINGS_CHANGE_WIFI_HOTSPOT_NAME);
+    }
+
+    @Test
     public void updateDisplay_shouldUpdateValue() {
         // Set controller ssid to anything and verify is set.
         mController.displayPreference(mScreen);
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java
index e501689..e996b2d 100644
--- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java
@@ -33,11 +33,13 @@
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.util.FeatureFlagUtils;
 import android.widget.TextView;
 
 import androidx.fragment.app.FragmentActivity;
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.core.FeatureFlags;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.shadow.ShadowFragment;
 import com.android.settings.testutils.shadow.ShadowWifiManager;
@@ -83,6 +85,7 @@
 
     @Test
     public void wifiTetherNonIndexableKeys_tetherAvailable_keysNotReturned() {
+        FeatureFlagUtils.setEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE, false);
         // To let TetherUtil.isTetherAvailable return true, select one of the combinations
         setupIsTetherAvailable(true);