diff --git a/aconfig/Android.bp b/aconfig/Android.bp
index 8be93f0..768db02 100644
--- a/aconfig/Android.bp
+++ b/aconfig/Android.bp
@@ -6,7 +6,7 @@
 aconfig_declarations {
     name: "aconfig_settings_flags",
     package: "com.android.settings.flags",
-    container: "system",
+    container: "system_ext",
     srcs: [
         "*.aconfig",
         "catalyst/*.aconfig",
@@ -21,7 +21,7 @@
 aconfig_declarations {
     name: "factory_reset_flags",
     package: "com.android.settings.factory_reset",
-    container: "system",
+    container: "system_ext",
     srcs: ["factory_reset/*.aconfig"],
 }
 
@@ -33,7 +33,7 @@
 aconfig_declarations {
     name: "media_drm_flags",
     package: "com.android.settings.media_drm",
-    container: "system",
+    container: "system_ext",
     srcs: ["media_drm/*.aconfig"],
 }
 
@@ -45,7 +45,7 @@
 aconfig_declarations {
     name: "accessibility_flags",
     package: "com.android.settings.accessibility",
-    container: "system",
+    container: "system_ext",
     srcs: ["accessibility/*.aconfig"],
 }
 
@@ -57,7 +57,7 @@
 aconfig_declarations {
     name: "development_settings_flags",
     package: "com.android.settings.development",
-    container: "system",
+    container: "system_ext",
     srcs: [
         "development/**/*.aconfig",
     ],
@@ -71,7 +71,7 @@
 aconfig_declarations {
     name: "keyboard_flags",
     package: "com.android.settings.keyboard",
-    container: "system",
+    container: "system_ext",
     srcs: ["keyboard/*.aconfig"],
 }
 
diff --git a/aconfig/accessibility/accessibility_flags.aconfig b/aconfig/accessibility/accessibility_flags.aconfig
index 4a741a1..1871172 100644
--- a/aconfig/accessibility/accessibility_flags.aconfig
+++ b/aconfig/accessibility/accessibility_flags.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.accessibility"
-container: "system"
+container: "system_ext"
 
 # NOTE: Keep alphabetized to help limit merge conflicts from multiple simultaneous editors.
 
diff --git a/aconfig/catalyst/about_phone.aconfig b/aconfig/catalyst/about_phone.aconfig
index 5403b65..59a2228 100644
--- a/aconfig/catalyst/about_phone.aconfig
+++ b/aconfig/catalyst/about_phone.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 flag {
   name: "catalyst_legal_information"
diff --git a/aconfig/development/settings_core_flag_declarations.aconfig b/aconfig/development/settings_core_flag_declarations.aconfig
index fec67f6..45768f4 100644
--- a/aconfig/development/settings_core_flag_declarations.aconfig
+++ b/aconfig/development/settings_core_flag_declarations.aconfig
@@ -1,12 +1,5 @@
 package: "com.android.settings.development"
-container: "system"
-
-flag {
-  name: "a2dp_offload_codec_extensibility_settings"
-  namespace: "bluetooth"
-  description: "Feature flag for Bluetooth Audio Codec extensibility in Settings"
-  bug: "323319530"
-}
+container: "system_ext"
 
 flag {
   name: "deprecate_list_activity"
diff --git a/aconfig/factory_reset/factory_reset_flag_declarations.aconfig b/aconfig/factory_reset/factory_reset_flag_declarations.aconfig
index 7feebf5..dc7d8d4 100644
--- a/aconfig/factory_reset/factory_reset_flag_declarations.aconfig
+++ b/aconfig/factory_reset/factory_reset_flag_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.factory_reset"
-container: "system"
+container: "system_ext"
 
 flag {
   name: "enable_factory_reset_wizard"
diff --git a/aconfig/keyboard/settings_physical_keyboard_a11y_features.aconfig b/aconfig/keyboard/settings_physical_keyboard_a11y_features.aconfig
index 00c0b18..ca5cb8d 100644
--- a/aconfig/keyboard/settings_physical_keyboard_a11y_features.aconfig
+++ b/aconfig/keyboard/settings_physical_keyboard_a11y_features.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.keyboard"
-container: "system"
+container: "system_ext"
 
 flag {
   name: "keyboard_and_touchpad_a11y_new_page_enabled"
diff --git a/aconfig/media_drm/settings_mediadrm_flag_declarations.aconfig b/aconfig/media_drm/settings_mediadrm_flag_declarations.aconfig
index 3969b29..10579eb 100644
--- a/aconfig/media_drm/settings_mediadrm_flag_declarations.aconfig
+++ b/aconfig/media_drm/settings_mediadrm_flag_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.media_drm"
-container: "system"
+container: "system_ext"
 
 flag {
     name: "force_l3_enabled"
diff --git a/aconfig/settings_accessibility_flag_declarations_legacy.aconfig b/aconfig/settings_accessibility_flag_declarations_legacy.aconfig
index 6e02bfe..d0e5850 100644
--- a/aconfig/settings_accessibility_flag_declarations_legacy.aconfig
+++ b/aconfig/settings_accessibility_flag_declarations_legacy.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 # NOTE: Don't add new accessibility flags here, since the package name doesn't follow
 # the best practice for setting's feature flag go/settings-trunk-stable
diff --git a/aconfig/settings_biometrics_framework_flag_declarations.aconfig b/aconfig/settings_biometrics_framework_flag_declarations.aconfig
index 820786e..e81c68e 100644
--- a/aconfig/settings_biometrics_framework_flag_declarations.aconfig
+++ b/aconfig/settings_biometrics_framework_flag_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 flag {
   name: "biometric_settings_provider"
diff --git a/aconfig/settings_biometrics_integration_declarations.aconfig b/aconfig/settings_biometrics_integration_declarations.aconfig
index ea3ac19..66d794b 100644
--- a/aconfig/settings_biometrics_integration_declarations.aconfig
+++ b/aconfig/settings_biometrics_integration_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 flag {
   name: "sfps_enroll_refinement"
diff --git a/aconfig/settings_bluetooth_declarations.aconfig b/aconfig/settings_bluetooth_declarations.aconfig
index 835a637..0c423b5 100644
--- a/aconfig/settings_bluetooth_declarations.aconfig
+++ b/aconfig/settings_bluetooth_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 flag {
   name: "enable_offload_bluetooth_operations_to_background_thread"
diff --git a/aconfig/settings_connecteddevice_flag_declarations.aconfig b/aconfig/settings_connecteddevice_flag_declarations.aconfig
index 8720260..ee0c233 100644
--- a/aconfig/settings_connecteddevice_flag_declarations.aconfig
+++ b/aconfig/settings_connecteddevice_flag_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 flag {
   name: "rotation_connected_display_setting"
diff --git a/aconfig/settings_contacts_default_account_flag_declarations.aconfig b/aconfig/settings_contacts_default_account_flag_declarations.aconfig
index eb877af..621714d 100644
--- a/aconfig/settings_contacts_default_account_flag_declarations.aconfig
+++ b/aconfig/settings_contacts_default_account_flag_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 flag {
   name: "enable_contacts_default_account_in_settings"
diff --git a/aconfig/settings_datetime_flag_declarations.aconfig b/aconfig/settings_datetime_flag_declarations.aconfig
index 3d9d8b3..dc3f1f4 100644
--- a/aconfig/settings_datetime_flag_declarations.aconfig
+++ b/aconfig/settings_datetime_flag_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 flag {
     name: "datetime_feedback"
diff --git a/aconfig/settings_development_flag_declarations.aconfig b/aconfig/settings_development_flag_declarations.aconfig
index 318f862..b9a084f 100644
--- a/aconfig/settings_development_flag_declarations.aconfig
+++ b/aconfig/settings_development_flag_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 # NOTE: Keep alphabetized to help limit merge conflicts from multiple simultaneous editors.
 
diff --git a/aconfig/settings_device_diagnostics_declarations.aconfig b/aconfig/settings_device_diagnostics_declarations.aconfig
index 7423f2b..90a12db 100644
--- a/aconfig/settings_device_diagnostics_declarations.aconfig
+++ b/aconfig/settings_device_diagnostics_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 flag {
   name: "enable_device_diagnostics_in_settings"
diff --git a/aconfig/settings_display_flag_declarations.aconfig b/aconfig/settings_display_flag_declarations.aconfig
index 9fe587b..52b9603 100644
--- a/aconfig/settings_display_flag_declarations.aconfig
+++ b/aconfig/settings_display_flag_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 flag {
     name: "protect_screen_timeout_with_auth"
diff --git a/aconfig/settings_experience_flag_declarations.aconfig b/aconfig/settings_experience_flag_declarations.aconfig
index 17d0059..d5caccf 100644
--- a/aconfig/settings_experience_flag_declarations.aconfig
+++ b/aconfig/settings_experience_flag_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 flag {
     name: "new_apn_page_enabled"
diff --git a/aconfig/settings_flag_declarations.aconfig b/aconfig/settings_flag_declarations.aconfig
index a9c7bd5..37a8798 100644
--- a/aconfig/settings_flag_declarations.aconfig
+++ b/aconfig/settings_flag_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 flag {
     name: "show_factory_reset_cancel_button"
diff --git a/aconfig/settings_globalintl_flag_declarations.aconfig b/aconfig/settings_globalintl_flag_declarations.aconfig
index 12a61294..2f046d0 100644
--- a/aconfig/settings_globalintl_flag_declarations.aconfig
+++ b/aconfig/settings_globalintl_flag_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 flag {
     name: "terms_of_address_enabled"
diff --git a/aconfig/settings_notification_flag_declarations.aconfig b/aconfig/settings_notification_flag_declarations.aconfig
index bdb6573..f2ef428 100644
--- a/aconfig/settings_notification_flag_declarations.aconfig
+++ b/aconfig/settings_notification_flag_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 flag {
   name: "dedupe_dnd_settings_channels"
diff --git a/aconfig/settings_onboarding_experience_flag_declarations.aconfig b/aconfig/settings_onboarding_experience_flag_declarations.aconfig
index 8d58d40..830c101 100644
--- a/aconfig/settings_onboarding_experience_flag_declarations.aconfig
+++ b/aconfig/settings_onboarding_experience_flag_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 flag {
   name: "enable_sound_backup"
diff --git a/aconfig/settings_perform_backup_tasks_flag_declarations.aconfig b/aconfig/settings_perform_backup_tasks_flag_declarations.aconfig
index 86bae9d..dcb876b 100644
--- a/aconfig/settings_perform_backup_tasks_flag_declarations.aconfig
+++ b/aconfig/settings_perform_backup_tasks_flag_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 flag {
   name: "enable_perform_backup_tasks_in_settings"
diff --git a/aconfig/settings_security_flag_declarations.aconfig b/aconfig/settings_security_flag_declarations.aconfig
index 3684212..e27f835 100644
--- a/aconfig/settings_security_flag_declarations.aconfig
+++ b/aconfig/settings_security_flag_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 flag {
   name: "protect_lock_after_timeout_with_auth"
diff --git a/aconfig/settings_telephony_flag_declarations.aconfig b/aconfig/settings_telephony_flag_declarations.aconfig
index dab1b45..c12de7a 100644
--- a/aconfig/settings_telephony_flag_declarations.aconfig
+++ b/aconfig/settings_telephony_flag_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 flag {
     name: "remove_key_hide_enable_2g"
diff --git a/aconfig/settings_threadnetwork_flag_declarations.aconfig b/aconfig/settings_threadnetwork_flag_declarations.aconfig
index e5448a9..9966467 100644
--- a/aconfig/settings_threadnetwork_flag_declarations.aconfig
+++ b/aconfig/settings_threadnetwork_flag_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 flag {
     name: "thread_settings_enabled"
diff --git a/aconfig/settings_voice_activation_apps_flag_declarations.aconfig b/aconfig/settings_voice_activation_apps_flag_declarations.aconfig
index d72e67f..9ca3525 100644
--- a/aconfig/settings_voice_activation_apps_flag_declarations.aconfig
+++ b/aconfig/settings_voice_activation_apps_flag_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 flag {
   name: "enable_voice_activation_apps_in_settings"
diff --git a/aconfig/settings_wifi_flag_declarations.aconfig b/aconfig/settings_wifi_flag_declarations.aconfig
index 67ed943..cb8007f 100644
--- a/aconfig/settings_wifi_flag_declarations.aconfig
+++ b/aconfig/settings_wifi_flag_declarations.aconfig
@@ -1,5 +1,5 @@
 package: "com.android.settings.flags"
-container: "system"
+container: "system_ext"
 
 # NOTE: Keep alphabetized to help limit merge conflicts from multiple simultaneous editors.
 
diff --git a/res/layout/bluetooth_audio_codec_dialog.xml b/res/layout/bluetooth_audio_codec_dialog.xml
deleted file mode 100644
index 3a260a6..0000000
--- a/res/layout/bluetooth_audio_codec_dialog.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2019 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<ScrollView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content">
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical"
-        android:padding="8dp">
-
-        <RadioGroup
-            android:id="@+id/bluetooth_audio_codec_radio_group"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/developer_option_dialog_margin_start">
-
-            <include
-                android:id="@+id/bluetooth_audio_codec_default"
-                layout="@layout/preference_widget_dialog_radiobutton"/>
-
-            <include
-                android:id="@+id/bluetooth_audio_codec_sbc"
-                layout="@layout/preference_widget_dialog_radiobutton"/>
-
-            <include
-                android:id="@+id/bluetooth_audio_codec_aac"
-                layout="@layout/preference_widget_dialog_radiobutton"/>
-
-            <include
-                android:id="@+id/bluetooth_audio_codec_aptx"
-                layout="@layout/preference_widget_dialog_radiobutton"/>
-
-            <include
-                android:id="@+id/bluetooth_audio_codec_aptx_hd"
-                layout="@layout/preference_widget_dialog_radiobutton"/>
-
-            <include
-                android:id="@+id/bluetooth_audio_codec_ldac"
-                layout="@layout/preference_widget_dialog_radiobutton"/>
-
-            <include
-                android:id="@+id/bluetooth_audio_codec_lc3"
-                layout="@layout/preference_widget_dialog_radiobutton"/>
-
-            <include
-                android:id="@+id/bluetooth_audio_codec_opus"
-                layout="@layout/preference_widget_dialog_radiobutton"/>
-
-        </RadioGroup>
-
-        <include
-                android:id="@+id/bluetooth_audio_codec_help_info"
-                layout="@layout/preference_widget_dialog_summary"/>
-
-    </LinearLayout>
-
-</ScrollView>
-
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7e363e6..2366f3b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -13046,7 +13046,7 @@
     <string name="thread_network_settings_learn_more">Learn more about Thread</string>
 
     <!-- URL for Thread network settings learn more link [CHAR_LIMIT=NONE] -->
-    <string name="thread_network_settings_learn_more_link" translatable="false">https://developers.home.google.com</string>
+    <string name="thread_network_settings_learn_more_link" translatable="false">https://support.google.com/android?p=thread_toggle</string>
 
     <!-- Label for the camera use toggle [CHAR LIMIT=40] -->
     <string name="camera_toggle_title">Camera access</string>
diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml
index 7fa514c..2beb96d 100644
--- a/res/xml/development_settings.xml
+++ b/res/xml/development_settings.xml
@@ -429,14 +429,6 @@
             android:key="bluetooth_hd_audio_settings"
             android:title="@string/bluetooth_profile_a2dp_high_quality_unknown_codec"/>
 
-        <com.android.settings.development.bluetooth.BluetoothCodecDialogPreference
-            android:key="bluetooth_audio_codec_settings"
-            android:title="@string/bluetooth_select_a2dp_codec_type"
-            android:dialogTitle="@string/bluetooth_select_a2dp_codec_type_dialog_title"
-            android:dialogLayout="@layout/bluetooth_audio_codec_dialog"
-            android:positiveButtonText=""
-            android:negativeButtonText="@string/dlg_ok"/>
-
         <ListPreference
             android:key="bluetooth_audio_codec_settings_list"
             android:title="@string/bluetooth_select_a2dp_codec_type"
diff --git a/src/com/android/settings/accounts/OWNERS b/src/com/android/settings/accounts/OWNERS
new file mode 100644
index 0000000..8ddd950
--- /dev/null
+++ b/src/com/android/settings/accounts/OWNERS
@@ -0,0 +1,11 @@
+# Default reviewers for account settings.
+jcivelli@google.com
+aseemk@google.com
+dementyev@google.com
+
+# For CredMan related reviews.
+reemabajwa@google.com
+helenqin@google.com
+sgjerry@google.com
+jbabs@google.com
+leecam@google.com
\ No newline at end of file
diff --git a/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceController.java b/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceController.java
deleted file mode 100644
index 09f3871..0000000
--- a/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceController.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.development;
-
-import android.bluetooth.BluetoothA2dp;
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothCodecConfig;
-import android.bluetooth.BluetoothCodecStatus;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothManager;
-import android.bluetooth.BluetoothProfile;
-import android.content.Context;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.ListPreference;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceScreen;
-
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.core.lifecycle.Lifecycle;
-import com.android.settingslib.core.lifecycle.LifecycleObserver;
-import com.android.settingslib.core.lifecycle.events.OnDestroy;
-import com.android.settingslib.development.DeveloperOptionsPreferenceController;
-
-import java.util.List;
-
-public abstract class AbstractBluetoothA2dpPreferenceController extends
-        DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
-        PreferenceControllerMixin, BluetoothServiceConnectionListener, LifecycleObserver,
-        OnDestroy {
-
-    @VisibleForTesting
-    static final int STREAMING_LABEL_ID =
-            com.android.settingslib.R.string.bluetooth_select_a2dp_codec_streaming_label;
-
-    protected final BluetoothA2dpConfigStore mBluetoothA2dpConfigStore;
-    protected BluetoothA2dp mBluetoothA2dp;
-    protected ListPreference mPreference;
-    private final String[] mListValues;
-    private final String[] mListSummaries;
-
-    @VisibleForTesting
-    BluetoothAdapter mBluetoothAdapter;
-
-    public AbstractBluetoothA2dpPreferenceController(Context context, Lifecycle lifecycle,
-            BluetoothA2dpConfigStore store) {
-        super(context);
-
-        mBluetoothA2dpConfigStore = store;
-        mBluetoothAdapter = context.getSystemService(BluetoothManager.class).getAdapter();
-        mListValues = getListValues();
-        mListSummaries = getListSummaries();
-
-        if (lifecycle != null) {
-            lifecycle.addObserver(this);
-        }
-    }
-
-    @Override
-    public void displayPreference(PreferenceScreen screen) {
-        super.displayPreference(screen);
-
-        mPreference = screen.findPreference(getPreferenceKey());
-
-        // Set a default value because BluetoothCodecConfig is null initially.
-        mPreference.setValue(mListValues[getDefaultIndex()]);
-        mPreference.setSummary(mListSummaries[getDefaultIndex()]);
-    }
-
-    @Override
-    public boolean onPreferenceChange(Preference preference, Object newValue) {
-        if (mBluetoothA2dp == null) {
-            return false;
-        }
-
-        writeConfigurationValues(newValue);
-
-        final BluetoothCodecConfig codecConfig = mBluetoothA2dpConfigStore.createCodecConfig();
-        synchronized (mBluetoothA2dpConfigStore) {
-            BluetoothDevice activeDevice = getA2dpActiveDevice();
-            if (activeDevice == null) {
-                return false;
-            }
-            setCodecConfigPreference(activeDevice, codecConfig);
-        }
-        // Because the setting is not persisted into permanent storage, we cannot call update state
-        // here to update the preference.
-        // Instead, we just assume it was set and update the preference here.
-        final int index = mPreference.findIndexOfValue(newValue.toString());
-        // We only want to append "Streaming" if not using default
-        if (index == getDefaultIndex()) {
-            mPreference.setSummary(mListSummaries[index]);
-        } else {
-            mPreference.setSummary(
-                    mContext.getResources().getString(STREAMING_LABEL_ID, mListSummaries[index]));
-        }
-        return true;
-    }
-
-    @Override
-    public void updateState(Preference preference) {
-        BluetoothDevice activeDevice = getA2dpActiveDevice();
-        if (activeDevice == null || getCodecConfig(activeDevice) == null || mPreference == null) {
-            return;
-        }
-
-        BluetoothCodecConfig codecConfig;
-        synchronized (mBluetoothA2dpConfigStore) {
-            codecConfig = getCodecConfig(activeDevice);
-        }
-
-        final int index = getCurrentA2dpSettingIndex(codecConfig);
-        mPreference.setValue(mListValues[index]);
-
-        // We only want to append "Streaming" if not using default
-        if (index == getDefaultIndex()) {
-            mPreference.setSummary(mListSummaries[index]);
-        } else {
-            mPreference.setSummary(
-                    mContext.getResources().getString(STREAMING_LABEL_ID, mListSummaries[index]));
-        }
-
-        writeConfigurationValues(mListValues[index]);
-    }
-
-    @Override
-    public void onBluetoothServiceConnected(BluetoothA2dp bluetoothA2dp) {
-        mBluetoothA2dp = bluetoothA2dp;
-        updateState(mPreference);
-    }
-
-    @Override
-    public void onBluetoothCodecUpdated() {
-        // intentional no-op
-        // We do not want to call update state here because the setting is not persisted in
-        // permanent storage.
-    }
-
-    @Override
-    public void onBluetoothServiceDisconnected() {
-        mBluetoothA2dp = null;
-    }
-
-    @Override
-    public void onDestroy() {
-        mBluetoothA2dp = null;
-    }
-
-    /**
-     * @return an array of string values that correspond to the current {@link ListPreference}.
-     */
-    protected abstract String[] getListValues();
-
-    /**
-     * @return an array of string summaries that correspond to the current {@link ListPreference}.
-     */
-    protected abstract String[] getListSummaries();
-
-    /**
-     * Updates the new value to the {@link BluetoothA2dpConfigStore} and the {@link BluetoothA2dp}.
-     *
-     * @param newValue the new setting value
-     */
-    protected abstract void writeConfigurationValues(Object newValue);
-
-    /**
-     * @return the current selected index for the {@link ListPreference}.
-     */
-    protected abstract int getCurrentA2dpSettingIndex(BluetoothCodecConfig config);
-
-    /**
-     * @return default setting index for the {@link ListPreference}.
-     */
-    protected abstract int getDefaultIndex();
-
-    @VisibleForTesting
-    void setCodecConfigPreference(BluetoothDevice device,
-            BluetoothCodecConfig config) {
-        BluetoothDevice bluetoothDevice =
-                (device != null) ? device : getA2dpActiveDevice();
-        if (bluetoothDevice == null) {
-            return;
-        }
-        mBluetoothA2dp.setCodecConfigPreference(bluetoothDevice, config);
-    }
-
-    @VisibleForTesting
-    BluetoothCodecConfig getCodecConfig(BluetoothDevice device) {
-        if (mBluetoothA2dp != null) {
-            BluetoothDevice bluetoothDevice =
-                    (device != null) ? device : getA2dpActiveDevice();
-            if (bluetoothDevice == null) {
-                return null;
-            }
-            BluetoothCodecStatus codecStatus = mBluetoothA2dp.getCodecStatus(bluetoothDevice);
-            if (codecStatus != null) {
-                return codecStatus.getCodecConfig();
-            }
-        }
-        return null;
-    }
-
-    private BluetoothDevice getA2dpActiveDevice() {
-        if (mBluetoothAdapter == null) {
-            return null;
-        }
-        List<BluetoothDevice> activeDevices =
-                mBluetoothAdapter.getActiveDevices(BluetoothProfile.A2DP);
-        return (activeDevices.size() > 0) ? activeDevices.get(0) : null;
-    }
-}
diff --git a/src/com/android/settings/development/BluetoothA2dpConfigStore.java b/src/com/android/settings/development/BluetoothA2dpConfigStore.java
index 0fef49f..ec4ec58 100644
--- a/src/com/android/settings/development/BluetoothA2dpConfigStore.java
+++ b/src/com/android/settings/development/BluetoothA2dpConfigStore.java
@@ -16,11 +16,9 @@
 
 package com.android.settings.development;
 
-import android.annotation.FlaggedApi;
 import android.bluetooth.BluetoothCodecConfig;
 import android.bluetooth.BluetoothCodecType;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
 /** Utility class for storing current Bluetooth A2DP profile values */
@@ -38,10 +36,6 @@
     private long mCodecSpecific3Value;
     private long mCodecSpecific4Value;
 
-    public void setCodecType(int codecType) {
-        mCodecTypeNative = codecType;
-    }
-
     public void setCodecType(@Nullable BluetoothCodecType codecType) {
         mCodecType = codecType;
     }
@@ -82,6 +76,7 @@
     public BluetoothCodecConfig createCodecConfig() {
         BluetoothCodecConfig.Builder builder = new BluetoothCodecConfig.Builder()
                 .setCodecPriority(mCodecPriority)
+                .setExtendedCodecType(mCodecType)
                 .setSampleRate(mSampleRate)
                 .setBitsPerSample(mBitsPerSample)
                 .setChannelMode(mChannelMode)
@@ -89,27 +84,6 @@
                 .setCodecSpecific2(mCodecSpecific2Value)
                 .setCodecSpecific3(mCodecSpecific3Value)
                 .setCodecSpecific4(mCodecSpecific4Value);
-        if (Flags.a2dpOffloadCodecExtensibilitySettings()) {
-            builder.setExtendedCodecType(mCodecType);
-        } else {
-            builder.setCodecType(mCodecTypeNative);
-        }
         return builder.build();
     }
-
-    /** Create codec config utilizing {@link BluetoothCodecType} */
-    @FlaggedApi(Flags.FLAG_A2DP_OFFLOAD_CODEC_EXTENSIBILITY_SETTINGS)
-    public @NonNull BluetoothCodecConfig createCodecConfigFromCodecType() {
-        return new BluetoothCodecConfig.Builder()
-                .setExtendedCodecType(mCodecType)
-                .setCodecPriority(mCodecPriority)
-                .setSampleRate(mSampleRate)
-                .setBitsPerSample(mBitsPerSample)
-                .setChannelMode(mChannelMode)
-                .setCodecSpecific1(mCodecSpecific1Value)
-                .setCodecSpecific2(mCodecSpecific2Value)
-                .setCodecSpecific3(mCodecSpecific3Value)
-                .setCodecSpecific4(mCodecSpecific4Value)
-                .build();
-    }
 }
diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
index d07d17d..b014152 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -67,7 +67,6 @@
 import com.android.settings.development.bluetooth.AbstractBluetoothPreferenceController;
 import com.android.settings.development.bluetooth.BluetoothBitPerSampleDialogPreferenceController;
 import com.android.settings.development.bluetooth.BluetoothChannelModeDialogPreferenceController;
-import com.android.settings.development.bluetooth.BluetoothCodecDialogPreferenceController;
 import com.android.settings.development.bluetooth.BluetoothCodecListPreferenceController;
 import com.android.settings.development.bluetooth.BluetoothHDAudioPreferenceController;
 import com.android.settings.development.bluetooth.BluetoothQualityDialogPreferenceController;
@@ -802,8 +801,6 @@
         controllers.add(new AutofillCategoryController(context, lifecycle));
         controllers.add(new AutofillLoggingLevelPreferenceController(context, lifecycle));
         controllers.add(new AutofillResetOptionsPreferenceController(context));
-        controllers.add(new BluetoothCodecDialogPreferenceController(context, lifecycle,
-                bluetoothA2dpConfigStore, fragment));
         controllers.add(
                 new BluetoothCodecListPreferenceController(
                         context, lifecycle, bluetoothA2dpConfigStore, fragment));
@@ -838,8 +835,7 @@
     @Override
     public void onBluetoothCodecChanged() {
         for (AbstractPreferenceController controller : mPreferenceControllers) {
-            if (controller instanceof AbstractBluetoothDialogPreferenceController
-                    && !(controller instanceof BluetoothCodecDialogPreferenceController)) {
+            if (controller instanceof AbstractBluetoothDialogPreferenceController) {
                 ((AbstractBluetoothDialogPreferenceController) controller)
                         .onBluetoothCodecUpdated();
             }
diff --git a/src/com/android/settings/development/PageAgnosticNotificationService.java b/src/com/android/settings/development/PageAgnosticNotificationService.java
index d33f1da..58c26df 100644
--- a/src/com/android/settings/development/PageAgnosticNotificationService.java
+++ b/src/com/android/settings/development/PageAgnosticNotificationService.java
@@ -36,7 +36,11 @@
             "com.android.settings.development.PageAgnosticNotificationService";
     public static final String INTENT_ACTION_DISMISSED =
             "com.android.settings.development.NOTIFICATION_DISMISSED";
-    private static final int NOTIFICATION_ID = 1;
+
+    // Updating the notification ID to avoid the notification being dismissed
+    // accidentally by other notifications. ID used is the bug id where this was
+    // reported.
+    private static final int NOTIFICATION_ID = 388678898;
 
     static final int DISABLE_UPDATES_SETTING = 1;
 
diff --git a/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceController.java b/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceController.java
index ac42ee3..ea90b4f 100644
--- a/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceController.java
+++ b/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceController.java
@@ -118,7 +118,7 @@
         if (config == null) {
             return;
         }
-        mBluetoothA2dpConfigStore.setCodecType(config.getCodecType());
+        mBluetoothA2dpConfigStore.setCodecType(config.getExtendedCodecType());
         mBluetoothA2dpConfigStore.setSampleRate(config.getSampleRate());
         mBluetoothA2dpConfigStore.setBitsPerSample(config.getBitsPerSample());
         mBluetoothA2dpConfigStore.setChannelMode(config.getChannelMode());
diff --git a/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreference.java b/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreference.java
deleted file mode 100644
index 11cfd34..0000000
--- a/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreference.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.development.bluetooth;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.widget.RadioGroup;
-
-import com.android.settings.R;
-
-/**
- * Dialog preference to set the Bluetooth A2DP config of codec
- */
-public class BluetoothCodecDialogPreference extends BaseBluetoothDialogPreference implements
-        RadioGroup.OnCheckedChangeListener {
-
-    public BluetoothCodecDialogPreference(Context context) {
-        super(context);
-        initialize(context);
-    }
-
-    public BluetoothCodecDialogPreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        initialize(context);
-    }
-
-    public BluetoothCodecDialogPreference(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-        initialize(context);
-    }
-
-    public BluetoothCodecDialogPreference(Context context, AttributeSet attrs, int defStyleAttr,
-                                          int defStyleRes) {
-        super(context, attrs, defStyleAttr, defStyleRes);
-        initialize(context);
-    }
-
-    @Override
-    protected int getRadioButtonGroupId() {
-        return R.id.bluetooth_audio_codec_radio_group;
-    }
-
-    private void initialize(Context context) {
-        mRadioButtonIds.add(R.id.bluetooth_audio_codec_default);
-        mRadioButtonIds.add(R.id.bluetooth_audio_codec_sbc);
-        mRadioButtonIds.add(R.id.bluetooth_audio_codec_aac);
-        mRadioButtonIds.add(R.id.bluetooth_audio_codec_aptx);
-        mRadioButtonIds.add(R.id.bluetooth_audio_codec_aptx_hd);
-        mRadioButtonIds.add(R.id.bluetooth_audio_codec_ldac);
-        mRadioButtonIds.add(R.id.bluetooth_audio_codec_lc3);
-        mRadioButtonIds.add(R.id.bluetooth_audio_codec_opus);
-        String[] stringArray = context.getResources().getStringArray(
-                com.android.settingslib.R.array.bluetooth_a2dp_codec_titles);
-        for (int i = 0; i < stringArray.length; i++) {
-            mRadioButtonStrings.add(stringArray[i]);
-        }
-        stringArray = context.getResources()
-                .getStringArray(com.android.settingslib.R.array.bluetooth_a2dp_codec_summaries);
-        for (int i = 0; i < stringArray.length; i++) {
-            mSummaryStrings.add(stringArray[i]);
-        }
-    }
-}
diff --git a/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceController.java b/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceController.java
deleted file mode 100644
index 6b29b8e..0000000
--- a/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceController.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.development.bluetooth;
-
-import android.bluetooth.BluetoothA2dp;
-import android.bluetooth.BluetoothCodecConfig;
-import android.bluetooth.BluetoothDevice;
-import android.content.Context;
-import android.util.Log;
-
-import androidx.annotation.Nullable;
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.PreferenceScreen;
-
-import com.android.settings.development.BluetoothA2dpConfigStore;
-import com.android.settings.development.Flags;
-import com.android.settingslib.core.lifecycle.Lifecycle;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Dialog preference controller to set the Bluetooth A2DP config of codec
- */
-public class BluetoothCodecDialogPreferenceController extends
-        AbstractBluetoothDialogPreferenceController {
-
-    private static final String KEY = "bluetooth_audio_codec_settings";
-    private static final String TAG = "BtCodecCtr";
-
-    @Nullable private final Callback mCallback;
-
-    public BluetoothCodecDialogPreferenceController(Context context, Lifecycle lifecycle,
-                                                    BluetoothA2dpConfigStore store,
-                                                    @Nullable Callback callback) {
-        super(context, lifecycle, store);
-        mCallback = callback;
-    }
-
-    @Override
-    public boolean isAvailable() {
-        return !Flags.a2dpOffloadCodecExtensibilitySettings();
-    }
-
-    @Override
-    public String getPreferenceKey() {
-        return KEY;
-    }
-
-    @Override
-    public void displayPreference(PreferenceScreen screen) {
-        super.displayPreference(screen);
-        ((BaseBluetoothDialogPreference) mPreference).setCallback(this);
-    }
-
-    @Override
-    public List<Integer> getSelectableIndex() {
-        List<Integer> index = new ArrayList<>();
-        final BluetoothA2dp bluetoothA2dp = mBluetoothA2dp;
-
-        index.add(getDefaultIndex());
-        if (bluetoothA2dp == null) {
-            return index;
-        }
-        final BluetoothDevice activeDevice = getA2dpActiveDevice();
-        if (activeDevice == null) {
-            Log.d(TAG, "Unable to get selectable index. No Active Bluetooth device");
-            return index;
-        }
-        // Check HD audio is enabled, display the available list.
-        if (bluetoothA2dp.isOptionalCodecsEnabled(activeDevice)
-                == BluetoothA2dp.OPTIONAL_CODECS_PREF_ENABLED) {
-            List<BluetoothCodecConfig> configs = getSelectableConfigs(activeDevice);
-            if (configs != null) {
-                return getIndexFromConfig(configs);
-            }
-        }
-        // If HD audio is disabled, SBC is the only one available codec.
-        index.add(convertCfgToBtnIndex(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC));
-        return index;
-    }
-
-    @Override
-    protected void writeConfigurationValues(final int index) {
-        int codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC; // default
-        int codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT;
-        switch (index) {
-            case 0:
-                final BluetoothDevice activeDevice = getA2dpActiveDevice();
-                codecTypeValue = getHighestCodec(mBluetoothA2dp, activeDevice,
-                        getSelectableConfigs(activeDevice));
-                codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
-                break;
-            case 1:
-                codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC;
-                codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
-                break;
-            case 2:
-                codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC;
-                codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
-                break;
-            case 3:
-                codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX;
-                codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
-                break;
-            case 4:
-                codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD;
-                codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
-                break;
-            case 5:
-                codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC;
-                codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
-                break;
-            case 6:
-                codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_LC3;
-                codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
-                break;
-            case 7:
-                codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_OPUS;
-                codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
-                break;
-            default:
-                break;
-        }
-        mBluetoothA2dpConfigStore.setCodecType(codecTypeValue);
-        mBluetoothA2dpConfigStore.setCodecPriority(codecPriorityValue);
-
-        // Once user changes codec, to reset configs with highest quality.
-        final BluetoothCodecConfig config = getSelectableByCodecType(codecTypeValue);
-        if (config == null) {
-            Log.d(TAG, "Selectable config is null. Unable to reset");
-        }
-        mBluetoothA2dpConfigStore.setSampleRate(getHighestSampleRate(config));
-        mBluetoothA2dpConfigStore.setBitsPerSample(getHighestBitsPerSample(config));
-        mBluetoothA2dpConfigStore.setChannelMode(getHighestChannelMode(config));
-    }
-
-    @Override
-    protected int getCurrentIndexByConfig(BluetoothCodecConfig config) {
-        if (config == null) {
-            Log.e(TAG, "Unable to get current config index. Config is null.");
-        }
-        return convertCfgToBtnIndex(config.getCodecType());
-    }
-
-    @Override
-    public void onIndexUpdated(int index) {
-        super.onIndexUpdated(index);
-        mCallback.onBluetoothCodecChanged();
-    }
-
-    @Override
-    public void onHDAudioEnabled(boolean enabled) {
-        writeConfigurationValues(/* index= */ 0);
-    }
-
-    private List<Integer> getIndexFromConfig(List<BluetoothCodecConfig> configs) {
-        List<Integer> indexArray = new ArrayList<>();
-        for (BluetoothCodecConfig config : configs) {
-            indexArray.add(convertCfgToBtnIndex(config.getCodecType()));
-        }
-        return indexArray;
-    }
-
-    @VisibleForTesting
-    int convertCfgToBtnIndex(int config) {
-        int index = getDefaultIndex();
-        switch (config) {
-            case BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC:
-                index = 1;
-                break;
-            case BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC:
-                index = 2;
-                break;
-            case BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX:
-                index = 3;
-                break;
-            case BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD:
-                index = 4;
-                break;
-            case BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC:
-                index = 5;
-                break;
-            case BluetoothCodecConfig.SOURCE_CODEC_TYPE_OPUS:
-                index = 7;
-                break;
-            default:
-                Log.e(TAG, "Unsupported config:" + config);
-                break;
-        }
-        return index;
-    }
-}
diff --git a/src/com/android/settings/development/bluetooth/BluetoothCodecListPreferenceController.java b/src/com/android/settings/development/bluetooth/BluetoothCodecListPreferenceController.java
index 72da505..11ed93c 100644
--- a/src/com/android/settings/development/bluetooth/BluetoothCodecListPreferenceController.java
+++ b/src/com/android/settings/development/bluetooth/BluetoothCodecListPreferenceController.java
@@ -32,7 +32,6 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.settings.development.BluetoothA2dpConfigStore;
-import com.android.settings.development.Flags;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import java.util.ArrayList;
@@ -62,9 +61,7 @@
 
     @Override
     public boolean isAvailable() {
-        boolean available = Flags.a2dpOffloadCodecExtensibilitySettings();
-        Log.d(TAG, "isAvailable: " + available);
-        return available;
+        return true;
     }
 
     @Override
@@ -80,10 +77,6 @@
 
     @Override
     public boolean onPreferenceChange(@Nullable Preference preference, @NonNull Object newValue) {
-        if (!Flags.a2dpOffloadCodecExtensibilitySettings()) {
-            return false;
-        }
-
         if (mListPreference == null) {
             Log.e(TAG, "onPreferenceChange: List preference is null");
             return false;
@@ -115,7 +108,7 @@
         }
 
         BluetoothCodecConfig codecConfig =
-                mBluetoothA2dpConfigStore.createCodecConfigFromCodecType();
+                mBluetoothA2dpConfigStore.createCodecConfig();
         Log.d(TAG, "onPreferenceChange: setCodecConfigPreference: " + codecConfig.toString());
         bluetoothA2dp.setCodecConfigPreference(activeDevice, codecConfig);
         if (mCallback != null) {
@@ -128,9 +121,6 @@
     @Override
     public void updateState(@Nullable Preference preference) {
         super.updateState(preference);
-        if (!Flags.a2dpOffloadCodecExtensibilitySettings()) {
-            return;
-        }
 
         if (!isHDAudioEnabled()) {
             Log.d(TAG, "updateState: HD Audio is disabled");
diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
index b5ee1d8..89f286c 100644
--- a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
+++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
@@ -100,11 +100,17 @@
     @VisibleForTesting
     static final int MAX_PHONE_COUNT_SINGLE_SIM = 1;
 
-    private final OnSubscriptionsChangedListener mOnSubscriptionsChangedListener =
+    @VisibleForTesting
+    final OnSubscriptionsChangedListener mOnSubscriptionsChangedListener =
             new OnSubscriptionsChangedListener() {
                 @Override
                 public void onSubscriptionsChanged() {
+                    SubscriptionInfo oldSubInfo = mSubscriptionInfo;
                     mSubscriptionInfo = getPhoneSubscriptionInfo(mSlotIndex);
+                    if (getSubId(oldSubInfo) != getSubId(mSubscriptionInfo)) {
+                      unregisterTelephonyCallback(oldSubInfo);
+                      registerTelephonyCallback(mSubscriptionInfo);
+                    }
                     updateSubscriptionStatus();
                 }
             };
@@ -123,7 +129,6 @@
     private final Context mContext;
 
     private boolean mShowLatestAreaInfo;
-    private boolean mIsRegisteredListener = false;
 
     private final BroadcastReceiver mAreaInfoReceiver = new BroadcastReceiver() {
         @Override
@@ -137,7 +142,8 @@
     };
 
     @VisibleForTesting
-    protected SimStatusDialogTelephonyCallback mTelephonyCallback;
+    protected final SimStatusDialogTelephonyCallback mTelephonyCallback =
+            new SimStatusDialogTelephonyCallback();
 
     private CellBroadcastServiceConnection mCellBroadcastServiceConnection;
 
@@ -181,8 +187,6 @@
         mContext = dialog.getContext();
         mSlotIndex = slotId;
         mSubscriptionInfo = getPhoneSubscriptionInfo(slotId);
-
-        mTelephonyManager = mContext.getSystemService(TelephonyManager.class);
         mCarrierConfigManager = mContext.getSystemService(CarrierConfigManager.class);
         mEuiccManager = mContext.getSystemService(EuiccManager.class);
         mSubscriptionManager = mContext.getSystemService(SubscriptionManager.class);
@@ -201,11 +205,13 @@
 
     public void initialize() {
         if (mSubscriptionInfo == null) {
-            return;
+            // Should not depend on default sub TelephonyManager, but lots of code already uses it
+            mTelephonyManager = mContext.getSystemService(TelephonyManager.class);
+        } else {
+            mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
+                .createForSubscriptionId(mSubscriptionInfo.getSubscriptionId());
         }
-        mTelephonyManager =
-            getTelephonyManager().createForSubscriptionId(mSubscriptionInfo.getSubscriptionId());
-        mTelephonyCallback = new SimStatusDialogTelephonyCallback();
+
         updateLatestAreaInfo();
         updateSubscriptionStatus();
     }
@@ -222,6 +228,10 @@
         updateNetworkType();
         updateRoamingStatus(serviceState);
         updateIccidNumber();
+
+        if (mSubscriptionInfo == null) {
+            updateDataState(TelephonyManager.DATA_UNKNOWN);
+        }
     }
 
     /**
@@ -242,13 +252,9 @@
      */
     @Override
     public void onResume(@NonNull LifecycleOwner owner) {
-        if (mSubscriptionInfo == null) {
-            return;
-        }
-        mTelephonyManager = getTelephonyManager().createForSubscriptionId(
-                mSubscriptionInfo.getSubscriptionId());
-        getTelephonyManager()
-                .registerTelephonyCallback(mContext.getMainExecutor(), mTelephonyCallback);
+        // get the latest sub info for it may be updated in onPause/onStop status.
+        mSubscriptionInfo = getPhoneSubscriptionInfo(mSlotIndex);
+        registerTelephonyCallback(mSubscriptionInfo);
         mSubscriptionManager.addOnSubscriptionsChangedListener(
                 mContext.getMainExecutor(), mOnSubscriptionsChangedListener);
         collectSimStatusDialogInfo(owner);
@@ -259,8 +265,6 @@
                     new IntentFilter(CellBroadcastIntents.ACTION_AREA_INFO_UPDATED),
                     Context.RECEIVER_EXPORTED/*UNAUDITED*/);
         }
-
-        mIsRegisteredListener = true;
     }
 
     /**
@@ -268,22 +272,9 @@
      */
     @Override
     public void onPause(@NonNull LifecycleOwner owner) {
-        if (mSubscriptionInfo == null) {
-            if (mIsRegisteredListener) {
-                mSubscriptionManager.removeOnSubscriptionsChangedListener(
-                        mOnSubscriptionsChangedListener);
-                getTelephonyManager().unregisterTelephonyCallback(mTelephonyCallback);
-                if (mShowLatestAreaInfo) {
-                    mContext.unregisterReceiver(mAreaInfoReceiver);
-                }
-                mIsRegisteredListener = false;
-            }
-            return;
-        }
-
-        mSubscriptionManager.removeOnSubscriptionsChangedListener(mOnSubscriptionsChangedListener);
-        getTelephonyManager().unregisterTelephonyCallback(mTelephonyCallback);
-
+        mSubscriptionManager.removeOnSubscriptionsChangedListener(
+                mOnSubscriptionsChangedListener);
+        unregisterTelephonyCallback(mSubscriptionInfo);
         if (mShowLatestAreaInfo) {
             mContext.unregisterReceiver(mAreaInfoReceiver);
         }
@@ -555,6 +546,34 @@
         return SubscriptionManager.from(mContext).getActiveSubscriptionInfoForSimSlotIndex(slotId);
     }
 
+    private void registerTelephonyCallback(SubscriptionInfo subInfo) {
+        if (subInfo == null) {
+            return;
+        }
+
+        // No need to have a member to hold mTelephonyManager, leaving it as lots of code
+        // depending on it
+        mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
+                .createForSubscriptionId(subInfo.getSubscriptionId());
+        mTelephonyManager.registerTelephonyCallback(
+                mContext.getMainExecutor(), mTelephonyCallback);
+    }
+
+    private void unregisterTelephonyCallback(SubscriptionInfo subInfo) {
+        if (subInfo == null) {
+          return;
+        }
+
+        mContext.getSystemService(TelephonyManager.class)
+                .createForSubscriptionId(subInfo.getSubscriptionId())
+                .unregisterTelephonyCallback(mTelephonyCallback);
+    }
+
+    private int getSubId(SubscriptionInfo subInfo) {
+        return subInfo == null ? SubscriptionManager.INVALID_SUBSCRIPTION_ID :
+                subInfo.getSubscriptionId();
+    }
+
     @VisibleForTesting
     class SimStatusDialogTelephonyCallback extends TelephonyCallback implements
             TelephonyCallback.DataConnectionStateListener,
diff --git a/src/com/android/settings/vpn2/OWNERS b/src/com/android/settings/vpn2/OWNERS
index 4135645..919c56e 100644
--- a/src/com/android/settings/vpn2/OWNERS
+++ b/src/com/android/settings/vpn2/OWNERS
@@ -1,13 +1,7 @@
 # People who can approve changes for submission.
-jchalard@google.com
-lorenzo@google.com
-maze@google.com
-reminv@google.com
+file:platform/packages/modules/Connectivity:main:/OWNERS_core_networking_xts
 xiaom@google.com
 hughchen@google.com
 robertluo@google.com
 timhypeng@google.com
 vincentwei@google.com
-
-# Emergency approvers in case the above are not available
-satk@google.com
diff --git a/tests/Enable16KbTests/test_16kb_app/src/com/android/settings/development/test/Enable16KbDeviceTest.java b/tests/Enable16KbTests/test_16kb_app/src/com/android/settings/development/test/Enable16KbDeviceTest.java
index 9e489cf..ecb3123 100644
--- a/tests/Enable16KbTests/test_16kb_app/src/com/android/settings/development/test/Enable16KbDeviceTest.java
+++ b/tests/Enable16KbTests/test_16kb_app/src/com/android/settings/development/test/Enable16KbDeviceTest.java
@@ -37,6 +37,8 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.util.Locale;
+
 @RunWith(AndroidJUnit4.class)
 public class Enable16KbDeviceTest {
     private static final long TIMEOUT = 2000;
@@ -92,7 +94,15 @@
         // Verify that ext4 toggle is visible
         verifyTextOnScreen(EXT4_TITLE);
 
-        mDevice.wait(Until.findObject(By.text(EXT4_CONFIRMATION)), TIMEOUT).click();
+        UiObject2 confirmationObject =
+            mDevice.wait(Until.findObject(By.text(EXT4_CONFIRMATION)), TIMEOUT);
+        if (confirmationObject == null) {
+            // Workaround for (b/390535191). AOSP targets display the string in all caps.
+            confirmationObject = mDevice.wait(
+                Until.findObject(By.text(EXT4_CONFIRMATION.toUpperCase(Locale.ROOT))), TIMEOUT);
+        }
+        assertTrue(confirmationObject != null);
+        confirmationObject.click();
     }
 
     @Test
diff --git a/tests/robotests/Android.bp b/tests/robotests/Android.bp
index 7f33d14..3b70def 100644
--- a/tests/robotests/Android.bp
+++ b/tests/robotests/Android.bp
@@ -102,8 +102,6 @@
         "SettingsLib-search",
     ],
 
-    upstream: true,
-
     strict_mode: false,
 }
 
@@ -111,7 +109,7 @@
     name: "Settings-robo-testutils",
     srcs: ["testutils/**/*.java"],
     libs: [
-        "Robolectric_all-target_upstream",
+        "Robolectric_all-target",
         "Settings-core",
         "mockito-robolectric-prebuilt",
         "truth",
diff --git a/tests/robotests/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceControllerTest.java
deleted file mode 100644
index 783c2ed..0000000
--- a/tests/robotests/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceControllerTest.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.development;
-
-import static com.android.settings.development.AbstractBluetoothA2dpPreferenceController
-        .STREAMING_LABEL_ID;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.bluetooth.BluetoothA2dp;
-import android.bluetooth.BluetoothCodecConfig;
-import android.content.Context;
-
-import androidx.lifecycle.LifecycleOwner;
-import androidx.preference.ListPreference;
-import androidx.preference.PreferenceScreen;
-
-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.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-@RunWith(RobolectricTestRunner.class)
-public class AbstractBluetoothA2dpPreferenceControllerTest {
-
-    @Mock
-    private BluetoothA2dp mBluetoothA2dp;
-    @Mock
-    private BluetoothCodecConfig mBluetoothCodecConfig;
-    @Mock
-    private ListPreference mPreference;
-    @Mock
-    private PreferenceScreen mScreen;
-    @Mock
-    private BluetoothA2dpConfigStore mBluetoothA2dpConfigStore;
-
-    private LifecycleOwner mLifecycleOwner;
-    private Lifecycle mLifecycle;
-    private Context mContext;
-    private AbstractBluetoothA2dpPreferenceController mController;
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
-        mLifecycleOwner = () -> mLifecycle;
-        mLifecycle = new Lifecycle(mLifecycleOwner);
-        mController = spy(new AbstractBluetoothA2dpPreferenceControllerImpl(mContext, mLifecycle,
-                mBluetoothA2dpConfigStore));
-        mController.mBluetoothAdapter = null;
-        doReturn(mBluetoothCodecConfig).when(mController).getCodecConfig(null);
-        doNothing().when(mController).setCodecConfigPreference(any(), any());
-        when(mBluetoothA2dpConfigStore.createCodecConfig()).thenReturn(mBluetoothCodecConfig);
-        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
-        mController.displayPreference(mScreen);
-    }
-
-    @Test
-    @Ignore
-    public void onPreferenceChange_bluetoothConnected_shouldUpdateCodec() {
-        mController.onBluetoothServiceConnected(mBluetoothA2dp);
-
-        mController.onPreferenceChange(mPreference, "" /* new value */);
-
-        verify(mController).setCodecConfigPreference(any(), any());
-    }
-
-    @Test
-    public void onPreferenceChange_bluetoothNotConnected_shouldNotUpdateCodec() {
-        mController.onBluetoothServiceDisconnected();
-
-        mController.onPreferenceChange(mPreference, "" /* new value */);
-
-        verify(mController, never()).setCodecConfigPreference(any(), any());
-    }
-
-    @Test
-    @Ignore
-    public void updateState_option2Set_shouldUpdateToOption2() {
-        when(mBluetoothCodecConfig.getSampleRate()).thenReturn(
-                BluetoothCodecConfig.SAMPLE_RATE_48000);
-
-        doReturn(2).when(mController).getCurrentA2dpSettingIndex(any());
-        mController.updateState(mPreference);
-
-        verify(mPreference).setValue(mController.getListValues()[2]);
-        verify(mPreference).setSummary(mContext.getString(STREAMING_LABEL_ID,
-            mController.getListSummaries()[2]));
-    }
-
-    @Test
-    public void onBluetoothServiceConnected_shouldUpdateState() {
-        mController.onBluetoothServiceConnected(mBluetoothA2dp);
-
-        verify(mController).updateState(mPreference);
-    }
-
-    private static class AbstractBluetoothA2dpPreferenceControllerImpl
-        extends AbstractBluetoothA2dpPreferenceController {
-
-        private AbstractBluetoothA2dpPreferenceControllerImpl(Context context,
-                Lifecycle lifecycle, BluetoothA2dpConfigStore store) {
-            super(context, lifecycle, store);
-        }
-
-        @Override
-        public String getPreferenceKey() {
-            return null;
-        }
-
-        @Override
-        protected String[] getListValues() {
-            return new String[]{"1", "2", "3"};
-        }
-
-        @Override
-        protected String[] getListSummaries() {
-            return new String[]{"foo", "bar", "foobar"};
-        }
-
-        @Override
-        protected void writeConfigurationValues(Object newValue) {
-        }
-
-        @Override
-        protected int getCurrentA2dpSettingIndex(BluetoothCodecConfig config) {
-            return 0;
-        }
-
-        @Override
-        protected int getDefaultIndex() {
-            return 0;
-        }
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceControllerTest.java
index 42b889c..9825c99 100644
--- a/tests/robotests/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceControllerTest.java
@@ -220,7 +220,7 @@
             mActiveDevice)).thenReturn(mCodecStatus);
         mController.onBluetoothServiceConnected(mBluetoothA2dp);
 
-        verify(mBluetoothA2dpConfigStore).setCodecType(mCodecConfigAAC.getCodecType());
+        verify(mBluetoothA2dpConfigStore).setCodecType(mCodecConfigAAC.getExtendedCodecType());
         verify(mBluetoothA2dpConfigStore).setSampleRate(mCodecConfigAAC.getSampleRate());
         verify(mBluetoothA2dpConfigStore).setBitsPerSample(mCodecConfigAAC.getBitsPerSample());
         verify(mBluetoothA2dpConfigStore).setChannelMode(mCodecConfigAAC.getChannelMode());
diff --git a/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceControllerTest.java
deleted file mode 100644
index de2b363..0000000
--- a/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceControllerTest.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.development.bluetooth;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.atLeastOnce;
-import static org.mockito.Mockito.eq;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.bluetooth.BluetoothA2dp;
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothCodecConfig;
-import android.bluetooth.BluetoothCodecStatus;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothProfile;
-import android.content.Context;
-
-import androidx.lifecycle.LifecycleOwner;
-import androidx.preference.PreferenceScreen;
-
-import com.android.settings.development.BluetoothA2dpConfigStore;
-import com.android.settingslib.core.lifecycle.Lifecycle;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-import java.util.Arrays;
-import java.util.List;
-
-@RunWith(RobolectricTestRunner.class)
-public class BluetoothCodecDialogPreferenceControllerTest {
-
-    private static final String DEVICE_ADDRESS = "00:11:22:33:44:55";
-
-    @Mock
-    private BluetoothA2dp mBluetoothA2dp;
-    @Mock
-    private BluetoothAdapter mBluetoothAdapter;
-    @Mock
-    private PreferenceScreen mScreen;
-    @Mock
-    private AbstractBluetoothPreferenceController.Callback mCallback;
-
-    private BluetoothCodecDialogPreferenceController mController;
-    private BluetoothCodecDialogPreference mPreference;
-    private BluetoothA2dpConfigStore mBluetoothA2dpConfigStore;
-    private BluetoothCodecStatus mCodecStatus;
-    private BluetoothCodecConfig mCodecConfigAAC;
-    private BluetoothCodecConfig mCodecConfigSBC;
-    private BluetoothCodecConfig mCodecConfigAPTX;
-    private BluetoothCodecConfig mCodecConfigAPTXHD;
-    private BluetoothCodecConfig mCodecConfigLDAC;
-    private BluetoothCodecConfig mCodecConfigOPUS;
-    private BluetoothDevice mActiveDevice;
-    private Context mContext;
-    private LifecycleOwner mLifecycleOwner;
-    private Lifecycle mLifecycle;
-
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
-        mLifecycleOwner = () -> mLifecycle;
-        mLifecycle = new Lifecycle(mLifecycleOwner);
-        mBluetoothA2dpConfigStore = spy(new BluetoothA2dpConfigStore());
-        mActiveDevice = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(DEVICE_ADDRESS);
-        mController = new BluetoothCodecDialogPreferenceController(mContext, mLifecycle,
-                mBluetoothA2dpConfigStore, mCallback);
-        mController.mBluetoothAdapter = mBluetoothAdapter;
-        mPreference = new BluetoothCodecDialogPreference(mContext);
-        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
-        mController.displayPreference(mScreen);
-        mCodecConfigSBC = new BluetoothCodecConfig.Builder()
-                .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC)
-                .setCodecPriority(BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST)
-                .setSampleRate(BluetoothCodecConfig.SAMPLE_RATE_96000
-                        | BluetoothCodecConfig.SAMPLE_RATE_176400)
-                .setBitsPerSample(BluetoothCodecConfig.BITS_PER_SAMPLE_32)
-                .setChannelMode(BluetoothCodecConfig.CHANNEL_MODE_MONO
-                        | BluetoothCodecConfig.CHANNEL_MODE_STEREO)
-                .build();
-        mCodecConfigAAC = new BluetoothCodecConfig.Builder()
-                .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC)
-                .setCodecPriority(BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST)
-                .setSampleRate(BluetoothCodecConfig.SAMPLE_RATE_48000
-                        | BluetoothCodecConfig.SAMPLE_RATE_88200)
-                .setBitsPerSample(BluetoothCodecConfig.BITS_PER_SAMPLE_16
-                        | BluetoothCodecConfig.BITS_PER_SAMPLE_24)
-                .setChannelMode(BluetoothCodecConfig.CHANNEL_MODE_STEREO)
-                .build();
-        mCodecConfigAPTX = new BluetoothCodecConfig.Builder()
-                .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX)
-                .build();
-        mCodecConfigAPTXHD = new BluetoothCodecConfig.Builder()
-                .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD)
-                .build();
-        mCodecConfigLDAC = new BluetoothCodecConfig.Builder()
-                .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC)
-                .build();
-        mCodecConfigOPUS = new BluetoothCodecConfig.Builder()
-                .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_OPUS)
-                .build();
-        when(mBluetoothAdapter.getActiveDevices(eq(BluetoothProfile.A2DP)))
-                .thenReturn(Arrays.asList(mActiveDevice));
-    }
-
-    @Test
-    public void writeConfigurationValues_selectDefault_setHighest() {
-        BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigOPUS, mCodecConfigAAC,
-                                                mCodecConfigSBC};
-        mCodecStatus = new BluetoothCodecStatus.Builder()
-                .setCodecConfig(mCodecConfigSBC)
-                .setCodecsSelectableCapabilities(Arrays.asList(mCodecConfigs))
-                .build();
-        when(mBluetoothA2dp.getCodecStatus(mActiveDevice)).thenReturn(mCodecStatus);
-        when(mBluetoothA2dp.isOptionalCodecsEnabled(mActiveDevice)).thenReturn(
-                BluetoothA2dp.OPTIONAL_CODECS_PREF_ENABLED);
-        mController.onBluetoothServiceConnected(mBluetoothA2dp);
-
-        mController.writeConfigurationValues(0);
-        verify(mBluetoothA2dpConfigStore).setCodecType(
-                BluetoothCodecConfig.SOURCE_CODEC_TYPE_OPUS);
-    }
-
-    @Test
-    public void writeConfigurationValues_checkCodec() {
-        BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigOPUS, mCodecConfigAAC,
-                mCodecConfigSBC, mCodecConfigAPTX, mCodecConfigAPTXHD, mCodecConfigLDAC};
-        mCodecStatus = new BluetoothCodecStatus.Builder()
-                .setCodecConfig(mCodecConfigSBC)
-                .setCodecsSelectableCapabilities(Arrays.asList(mCodecConfigs))
-                .build();
-        when(mBluetoothA2dp.getCodecStatus(mActiveDevice)).thenReturn(mCodecStatus);
-        mController.onBluetoothServiceConnected(mBluetoothA2dp);
-
-        mController.writeConfigurationValues(1);
-        verify(mBluetoothA2dpConfigStore, atLeastOnce()).setCodecType(
-                BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC);
-
-        mController.writeConfigurationValues(2);
-        verify(mBluetoothA2dpConfigStore).setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC);
-
-        mController.writeConfigurationValues(3);
-        verify(mBluetoothA2dpConfigStore).setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX);
-
-        mController.writeConfigurationValues(4);
-        verify(mBluetoothA2dpConfigStore).setCodecType(
-                BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD);
-
-        mController.writeConfigurationValues(5);
-        verify(mBluetoothA2dpConfigStore).setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC);
-
-        mController.writeConfigurationValues(7);
-        verify(mBluetoothA2dpConfigStore).setCodecType(
-                BluetoothCodecConfig.SOURCE_CODEC_TYPE_OPUS);
-    }
-
-    @Test
-    public void writeConfigurationValues_resetHighestConfig() {
-        BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigAAC, mCodecConfigSBC, mCodecConfigAPTX,
-                mCodecConfigAPTXHD, mCodecConfigLDAC, mCodecConfigOPUS};
-        mCodecStatus = new BluetoothCodecStatus.Builder()
-                .setCodecConfig(mCodecConfigAAC)
-                .setCodecsSelectableCapabilities(Arrays.asList(mCodecConfigs))
-                .build();
-        when(mBluetoothA2dp.getCodecStatus(mActiveDevice)).thenReturn(mCodecStatus);
-        mController.onBluetoothServiceConnected(mBluetoothA2dp);
-        mController.writeConfigurationValues(2);
-
-        verify(mBluetoothA2dpConfigStore, atLeastOnce()).setCodecPriority(
-                BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST);
-        verify(mBluetoothA2dpConfigStore, atLeastOnce()).setSampleRate(
-                BluetoothCodecConfig.SAMPLE_RATE_88200);
-        verify(mBluetoothA2dpConfigStore, atLeastOnce()).setBitsPerSample(
-                BluetoothCodecConfig.BITS_PER_SAMPLE_24);
-        verify(mBluetoothA2dpConfigStore, atLeastOnce()).setChannelMode(
-                BluetoothCodecConfig.CHANNEL_MODE_STEREO);
-    }
-
-    @Test
-    public void getCurrentIndexByConfig_verifyIndex() {
-        assertThat(mController.getCurrentIndexByConfig(mCodecConfigAAC)).isEqualTo(
-                mController.convertCfgToBtnIndex(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC));
-    }
-
-    @Test
-    public void getCurrentIndexByConfig_verifyOpusIndex() {
-        assertThat(mController.getCurrentIndexByConfig(mCodecConfigOPUS)).isEqualTo(
-                mController.convertCfgToBtnIndex(
-                    BluetoothCodecConfig.SOURCE_CODEC_TYPE_OPUS));
-    }
-
-
-    @Test
-    public void onIndexUpdated_notifyPreference() {
-        mController.onIndexUpdated(0);
-
-        verify(mCallback).onBluetoothCodecChanged();
-    }
-
-    @Test
-    public void onHDAudioEnabled_optionalCodecEnabled_setsCodecTypeAsOpus() {
-        List<BluetoothCodecConfig> mCodecConfigs = Arrays.asList(mCodecConfigOPUS,
-                                                   mCodecConfigAAC, mCodecConfigSBC);
-        mCodecStatus = new BluetoothCodecStatus.Builder()
-                .setCodecConfig(mCodecConfigOPUS)
-                .setCodecsSelectableCapabilities(mCodecConfigs)
-                .build();
-        when(mBluetoothA2dp.getCodecStatus(mActiveDevice)).thenReturn(mCodecStatus);
-        when(mBluetoothA2dp.isOptionalCodecsEnabled(mActiveDevice)).thenReturn(
-                BluetoothA2dp.OPTIONAL_CODECS_PREF_ENABLED);
-        mController.onBluetoothServiceConnected(mBluetoothA2dp);
-
-        mController.onHDAudioEnabled(/* enabled= */ true);
-
-        verify(mBluetoothA2dpConfigStore, atLeastOnce()).setCodecType(
-                eq(BluetoothCodecConfig.SOURCE_CODEC_TYPE_OPUS));
-    }
-
-    @Test
-    public void onHDAudioEnabled_optionalCodecEnabled_setsCodecTypeAsAAC() {
-        List<BluetoothCodecConfig> mCodecConfigs = Arrays.asList(mCodecConfigOPUS,
-                                                   mCodecConfigAAC, mCodecConfigSBC);
-        mCodecStatus = new BluetoothCodecStatus.Builder()
-                .setCodecConfig(mCodecConfigAAC)
-                .setCodecsSelectableCapabilities(mCodecConfigs)
-                .build();
-        when(mBluetoothA2dp.getCodecStatus(mActiveDevice)).thenReturn(mCodecStatus);
-        when(mBluetoothA2dp.isOptionalCodecsEnabled(mActiveDevice)).thenReturn(
-                BluetoothA2dp.OPTIONAL_CODECS_PREF_ENABLED);
-        mController.onBluetoothServiceConnected(mBluetoothA2dp);
-
-        mController.onHDAudioEnabled(/* enabled= */ true);
-
-        verify(mBluetoothA2dpConfigStore, atLeastOnce()).setCodecType(
-                eq(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC));
-    }
-    @Test
-    public void onHDAudioEnabled_optionalCodecDisabled_setsCodecTypeAsSBC() {
-        List<BluetoothCodecConfig> mCodecConfigs = Arrays.asList(mCodecConfigOPUS,
-                                                   mCodecConfigAAC, mCodecConfigSBC);
-        mCodecStatus = new BluetoothCodecStatus.Builder()
-                .setCodecConfig(mCodecConfigAAC)
-                .setCodecsSelectableCapabilities(mCodecConfigs)
-                .build();
-        when(mBluetoothA2dp.getCodecStatus(mActiveDevice)).thenReturn(mCodecStatus);
-        when(mBluetoothA2dp.isOptionalCodecsEnabled(mActiveDevice)).thenReturn(
-                BluetoothA2dp.OPTIONAL_CODECS_PREF_DISABLED);
-        mController.onBluetoothServiceConnected(mBluetoothA2dp);
-
-        mController.onHDAudioEnabled(/* enabled= */ false);
-
-        verify(mBluetoothA2dpConfigStore, atLeastOnce()).setCodecType(
-                eq(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC));
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceTest.java b/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceTest.java
deleted file mode 100644
index 4b8df16..0000000
--- a/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.development.bluetooth;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import android.content.Context;
-
-import com.android.settings.R;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-@RunWith(RobolectricTestRunner.class)
-public class BluetoothCodecDialogPreferenceTest {
-
-    private BluetoothCodecDialogPreference mPreference;
-    private Context mContext;
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
-        mPreference = new BluetoothCodecDialogPreference(mContext);
-    }
-
-    @Test
-    public void getRadioButtonGroupId() {
-        assertThat(mPreference.getRadioButtonGroupId())
-                .isEqualTo(R.id.bluetooth_audio_codec_radio_group);
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothCodecListPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothCodecListPreferenceControllerTest.java
index 4ac5dff..a99dc2b 100644
--- a/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothCodecListPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothCodecListPreferenceControllerTest.java
@@ -18,7 +18,6 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.atLeastOnce;
@@ -35,14 +34,12 @@
 import android.bluetooth.BluetoothDevice;
 import android.bluetooth.BluetoothProfile;
 import android.content.Context;
-import android.platform.test.annotations.EnableFlags;
 
 import androidx.lifecycle.LifecycleOwner;
 import androidx.preference.ListPreference;
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.development.BluetoothA2dpConfigStore;
-import com.android.settings.development.Flags;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import org.junit.Before;
@@ -73,6 +70,7 @@
     private BluetoothCodecType mCodecTypeAAC;
     private BluetoothCodecType mCodecTypeSBC;
     private BluetoothCodecType mCodecTypeAPTX;
+    private BluetoothCodecType mCodecTypeAPTXHD;
     private BluetoothCodecType mCodecTypeLDAC;
     private BluetoothCodecType mCodecTypeOPUS;
     private List<BluetoothCodecType> mCodecTypes;
@@ -114,6 +112,8 @@
                 BluetoothCodecType.createFromType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC);
         mCodecTypeAPTX =
                 BluetoothCodecType.createFromType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX);
+        mCodecTypeAPTXHD =
+                BluetoothCodecType.createFromType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD);
         mCodecTypeLDAC =
                 BluetoothCodecType.createFromType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC);
         mCodecTypeOPUS =
@@ -125,6 +125,7 @@
                         mCodecTypeSBC,
                         mCodecTypeAAC,
                         mCodecTypeAPTX,
+                        mCodecTypeAPTXHD,
                         mCodecTypeLDAC,
                         mCodecTypeOPUS));
 
@@ -213,6 +214,11 @@
         verify(mBluetoothA2dpConfigStore).setCodecType(mCodecTypeAPTX);
 
         assertTrue(
+                mController.writeConfigurationValues(String.valueOf(
+                        mCodecTypeAPTXHD.getCodecId())));
+        verify(mBluetoothA2dpConfigStore).setCodecType(mCodecTypeAPTXHD);
+
+        assertTrue(
                 mController.writeConfigurationValues(String.valueOf(mCodecTypeLDAC.getCodecId())));
         verify(mBluetoothA2dpConfigStore).setCodecType(mCodecTypeLDAC);
 
@@ -244,7 +250,6 @@
     }
 
     @Test
-    @EnableFlags(Flags.FLAG_A2DP_OFFLOAD_CODEC_EXTENSIBILITY_SETTINGS)
     public void onPreferenceChange_notifyPreference() {
         assertFalse(
                 mController.onPreferenceChange(
@@ -271,7 +276,6 @@
     }
 
     @Test
-    @EnableFlags(Flags.FLAG_A2DP_OFFLOAD_CODEC_EXTENSIBILITY_SETTINGS)
     public void onPreferenceChange_listPreferenceIsNull() {
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(null);
         assertFalse(
@@ -280,13 +284,11 @@
     }
 
     @Test
-    @EnableFlags(Flags.FLAG_A2DP_OFFLOAD_CODEC_EXTENSIBILITY_SETTINGS)
     public void onPreferenceChange_unknownCodecId() {
         assertFalse(mController.onPreferenceChange(mPreference, String.valueOf(TEST_ENTRY_VALUE)));
     }
 
     @Test
-    @EnableFlags(Flags.FLAG_A2DP_OFFLOAD_CODEC_EXTENSIBILITY_SETTINGS)
     public void onPreferenceChange_codecSelection() {
         when(mBluetoothA2dp.getCodecStatus(mActiveDevice)).thenReturn(mCodecStatus);
         when(mBluetoothA2dp.isOptionalCodecsEnabled(mActiveDevice))
@@ -327,6 +329,14 @@
                         mPreference, String.valueOf(mCodecTypeAPTX.getCodecId())));
         mCodecStatus =
                 new BluetoothCodecStatus.Builder()
+                        .setCodecConfig(mCodecConfigAPTXHD)
+                        .setCodecsSelectableCapabilities(mCodecConfigs)
+                        .build();
+        assertTrue(
+                mController.onPreferenceChange(
+                        mPreference, String.valueOf(mCodecTypeAPTXHD.getCodecId())));
+        mCodecStatus =
+                new BluetoothCodecStatus.Builder()
                         .setCodecConfig(mCodecConfigOPUS)
                         .setCodecsSelectableCapabilities(mCodecConfigs)
                         .build();
@@ -336,7 +346,6 @@
     }
 
     @Test
-    @EnableFlags(Flags.FLAG_A2DP_OFFLOAD_CODEC_EXTENSIBILITY_SETTINGS)
     public void updateState_notifyPreference() {
         assertFalse(
                 mController.onPreferenceChange(
@@ -437,7 +446,6 @@
     }
 
     @Test
-    @EnableFlags(Flags.FLAG_A2DP_OFFLOAD_CODEC_EXTENSIBILITY_SETTINGS)
     public void onBluetoothServiceConnected_verifyBluetoothA2dpConfigStore() {
         mCodecStatus =
                 new BluetoothCodecStatus.Builder()
diff --git a/tests/screenshot/Android.bp b/tests/screenshot/Android.bp
index f79d00f..d3f4160 100644
--- a/tests/screenshot/Android.bp
+++ b/tests/screenshot/Android.bp
@@ -72,7 +72,6 @@
         "truth",
     ],
 
-    upstream: true,
     instrumentation_for: "ScreenshotTestStub",
     java_resource_dirs: ["config"],
 }
diff --git a/tests/unit/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java b/tests/unit/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java
index 3fa3808..d68ffa8 100644
--- a/tests/unit/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java
+++ b/tests/unit/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java
@@ -17,6 +17,7 @@
 package com.android.settings.deviceinfo.simstatus;
 
 import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.CELL_DATA_NETWORK_TYPE_VALUE_ID;
+import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.CELLULAR_NETWORK_STATE;
 import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.CELL_VOICE_NETWORK_TYPE_VALUE_ID;
 import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.ICCID_INFO_LABEL_ID;
 import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.ICCID_INFO_VALUE_ID;
@@ -30,8 +31,10 @@
 import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.SERVICE_STATE_VALUE_ID;
 
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -42,6 +45,7 @@
 import android.telephony.ServiceState;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyCallback;
 import android.telephony.TelephonyManager;
 import android.telephony.UiccCardInfo;
 import android.telephony.euicc.EuiccManager;
@@ -65,6 +69,7 @@
 import java.util.HashMap;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.Executor;
 
 @RunWith(AndroidJUnit4.class)
 public class SimStatusDialogControllerTest {
@@ -74,6 +79,10 @@
     @Mock
     private TelephonyManager mTelephonyManager;
     @Mock
+    private TelephonyManager mTelephonyManagerForSub1;
+    @Mock
+    private TelephonyManager mTelephonyManagerForSub2;
+    @Mock
     private SubscriptionInfo mSubscriptionInfo;
     @Mock
     private ServiceState mServiceState;
@@ -94,6 +103,9 @@
 
     private static final int MAX_PHONE_COUNT_DUAL_SIM = 2;
 
+    private static final int TEST_SUB_ID_1 = 1;
+    private static final int TEST_SUB_ID_2 = 2;
+
     @Before
     @UiThreadTest
     public void setup() {
@@ -106,6 +118,7 @@
         mSubscriptionManager = spy(mContext.getSystemService(SubscriptionManager.class));
         doReturn(mSubscriptionInfo).when(mSubscriptionManager)
                 .getActiveSubscriptionInfoForSimSlotIndex(anyInt());
+        doReturn(TEST_SUB_ID_1).when(mSubscriptionInfo).getSubscriptionId();
 
         when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
         when(mContext.getSystemService(CarrierConfigManager.class)).thenReturn(
@@ -113,8 +126,10 @@
         when(mContext.getSystemService(EuiccManager.class)).thenReturn(mEuiccManager);
         when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager);
 
-        doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(
-                anyInt());
+        doReturn(mTelephonyManagerForSub1).when(mTelephonyManager).createForSubscriptionId(
+                TEST_SUB_ID_1);
+        doReturn(mTelephonyManagerForSub2).when(mTelephonyManager).createForSubscriptionId(
+                TEST_SUB_ID_2);
         doReturn(2).when(mTelephonyManager).getCardIdForDefaultEuicc();
         doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mTelephonyManager).getDataNetworkType();
 
@@ -340,4 +355,45 @@
         verify(mDialog).setSettingVisibility(IMS_REGISTRATION_STATE_LABEL_ID, false);
         verify(mDialog).setSettingVisibility(IMS_REGISTRATION_STATE_VALUE_ID, false);
     }
+
+    @Test
+    public void onSubscriptionsChanged_updateSubInfoToNewSub_testTelephonyCallbackUnregRereg() {
+        // sub id changed from 1 to 2
+        SubscriptionInfo subInfo2 = mock(SubscriptionInfo.class);
+        doReturn(TEST_SUB_ID_2).when(subInfo2).getSubscriptionId();
+        doReturn(subInfo2).when(mSubscriptionManager)
+                .getActiveSubscriptionInfoForSimSlotIndex(anyInt());
+        mController.mOnSubscriptionsChangedListener.onSubscriptionsChanged();
+        verify(mTelephonyManagerForSub2).registerTelephonyCallback(any(Executor.class),
+                any(TelephonyCallback.class));
+
+        // sub id changed from 2 to 1
+        SubscriptionInfo subInfo1 = mock(SubscriptionInfo.class);
+        doReturn(TEST_SUB_ID_1).when(subInfo1).getSubscriptionId();
+        doReturn(subInfo1).when(mSubscriptionManager)
+                .getActiveSubscriptionInfoForSimSlotIndex(anyInt());
+        mController.mOnSubscriptionsChangedListener.onSubscriptionsChanged();
+        verify(mTelephonyManagerForSub2).unregisterTelephonyCallback(
+                mController.mTelephonyCallback);
+        verify(mTelephonyManagerForSub1).registerTelephonyCallback(any(Executor.class),
+                any(TelephonyCallback.class));
+    }
+
+    @Test
+    public void onSubscriptionsChanged_updateSubInfoToNull_testTelephonyCallbackUnreg() {
+        doReturn(null).when(mSubscriptionManager).getActiveSubscriptionInfoForSimSlotIndex(
+                anyInt());
+        mController.mOnSubscriptionsChangedListener.onSubscriptionsChanged();
+        verify(mTelephonyManagerForSub1).unregisterTelephonyCallback(
+                mController.mTelephonyCallback);
+    }
+
+    @Test
+    public void onSubscriptionsChanged_updateSubInfoToNull_shouldUpdateDataStatusToUnknown() {
+        doReturn(null).when(mSubscriptionManager).getActiveSubscriptionInfoForSimSlotIndex(
+                anyInt());
+        mController.mOnSubscriptionsChangedListener.onSubscriptionsChanged();
+        final String unknownText = ResourcesUtils.getResourcesString(mContext, "radioInfo_unknown");
+        verify(mDialog).setText(CELLULAR_NETWORK_STATE, unknownText);
+    }
 }
