Apply new preference and controller for Bluetooth developer option

- Modify XML to apply new preferences and controllers
- Remove old controller file
- Move codec optional codec to the uppler layer

Bug: 142227996
Test: make -j50 RunSettingsRoboTests
Change-Id: Ia8fca4bc5b228592fdacad206e010bf0219282d4
diff --git a/res/layout/bluetooth_audio_codec_dialog.xml b/res/layout/bluetooth_audio_codec_dialog.xml
index 9a6b768..9636427 100644
--- a/res/layout/bluetooth_audio_codec_dialog.xml
+++ b/res/layout/bluetooth_audio_codec_dialog.xml
@@ -54,17 +54,8 @@
             <include
                 android:id="@+id/bluetooth_audio_codec_ldac"
                 layout="@layout/preference_widget_dialog_radiobutton"/>
-
-            <include
-                android:id="@+id/bluetooth_audio_codec_enable_optional"
-                layout="@layout/preference_widget_dialog_radiobutton"/>
-
-            <include
-                android:id="@+id/bluetooth_audio_codec_disable_optional"
-                layout="@layout/preference_widget_dialog_radiobutton"/>
         </RadioGroup>
 
-
         <include
                 android:id="@+id/bluetooth_audio_codec_help_info"
                 layout="@layout/preference_widget_dialog_summary"/>
diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml
index ece9822..2607c09 100644
--- a/res/xml/development_settings.xml
+++ b/res/xml/development_settings.xml
@@ -288,40 +288,49 @@
             android:entries="@array/bluetooth_avrcp_versions"
             android:entryValues="@array/bluetooth_avrcp_version_values" />
 
-        <ListPreference
-            android:key="bluetooth_select_a2dp_codec"
+        <SwitchPreference
+            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:entries="@array/bluetooth_a2dp_codec_titles"
-            android:entryValues="@array/bluetooth_a2dp_codec_values" />
+            android:dialogLayout="@layout/bluetooth_audio_codec_dialog"
+            android:positiveButtonText=""
+            android:negativeButtonText="@string/dlg_ok"/>
 
-        <ListPreference
-            android:key="bluetooth_select_a2dp_sample_rate"
+        <com.android.settings.development.bluetooth.BluetoothSampleRateDialogPreference
+            android:key="bluetooth_sample_rate_settings"
             android:title="@string/bluetooth_select_a2dp_codec_sample_rate"
             android:dialogTitle="@string/bluetooth_select_a2dp_codec_sample_rate_dialog_title"
-            android:entries="@array/bluetooth_a2dp_codec_sample_rate_titles"
-            android:entryValues="@array/bluetooth_a2dp_codec_sample_rate_values" />
+            android:dialogLayout="@layout/bluetooth_audio_sample_rate_dialog"
+            android:positiveButtonText=""
+            android:negativeButtonText="@string/dlg_ok"/>
 
-        <ListPreference
-            android:key="bluetooth_select_a2dp_bits_per_sample"
+        <com.android.settings.development.bluetooth.BluetoothBitPerSampleDialogPreference
+            android:key="bluetooth_bit_per_sample_settings"
             android:title="@string/bluetooth_select_a2dp_codec_bits_per_sample"
             android:dialogTitle="@string/bluetooth_select_a2dp_codec_bits_per_sample_dialog_title"
-            android:entries="@array/bluetooth_a2dp_codec_bits_per_sample_titles"
-            android:entryValues="@array/bluetooth_a2dp_codec_bits_per_sample_values" />
+            android:dialogLayout="@layout/bluetooth_audio_bit_per_sample_dialog"
+            android:positiveButtonText=""
+            android:negativeButtonText="@string/dlg_ok"/>
 
-        <ListPreference
-            android:key="bluetooth_select_a2dp_channel_mode"
+        <com.android.settings.development.bluetooth.BluetoothChannelModeDialogPreference
+            android:key="bluetooth_channel_mode_settings"
             android:title="@string/bluetooth_select_a2dp_codec_channel_mode"
             android:dialogTitle="@string/bluetooth_select_a2dp_codec_channel_mode_dialog_title"
-            android:entries="@array/bluetooth_a2dp_codec_channel_mode_titles"
-            android:entryValues="@array/bluetooth_a2dp_codec_channel_mode_values" />
+            android:dialogLayout="@layout/bluetooth_audio_channel_mode_dialog"
+            android:positiveButtonText=""
+            android:negativeButtonText="@string/dlg_ok"/>
 
-        <ListPreference
-            android:key="bluetooth_select_a2dp_ldac_playback_quality"
+        <com.android.settings.development.bluetooth.BluetoothQualityDialogPreference
+            android:key="bluetooth_a2dp_ldac_playback_quality"
             android:title="@string/bluetooth_select_a2dp_codec_ldac_playback_quality"
             android:dialogTitle="@string/bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title"
-            android:entries="@array/bluetooth_a2dp_codec_ldac_playback_quality_titles"
-            android:entryValues="@array/bluetooth_a2dp_codec_ldac_playback_quality_values" />
+            android:dialogLayout="@layout/bluetooth_audio_quality_dialog"
+            android:positiveButtonText=""
+            android:negativeButtonText="@string/dlg_ok"/>
 
         <ListPreference
             android:key="bluetooth_max_connected_audio_devices"
diff --git a/src/com/android/settings/development/BluetoothAudioBitsPerSamplePreferenceController.java b/src/com/android/settings/development/BluetoothAudioBitsPerSamplePreferenceController.java
deleted file mode 100644
index f237ac1..0000000
--- a/src/com/android/settings/development/BluetoothAudioBitsPerSamplePreferenceController.java
+++ /dev/null
@@ -1,102 +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.BluetoothCodecConfig;
-import android.content.Context;
-
-import com.android.settings.R;
-import com.android.settingslib.core.lifecycle.Lifecycle;
-
-public class BluetoothAudioBitsPerSamplePreferenceController extends
-        AbstractBluetoothA2dpPreferenceController {
-
-    private static final int DEFAULT_INDEX = 0;
-    private static final String BLUETOOTH_SELECT_A2DP_BITS_PER_SAMPLE_KEY =
-            "bluetooth_select_a2dp_bits_per_sample";
-
-    public BluetoothAudioBitsPerSamplePreferenceController(Context context, Lifecycle lifecycle,
-            BluetoothA2dpConfigStore store) {
-        super(context, lifecycle, store);
-    }
-
-    @Override
-    public String getPreferenceKey() {
-        return BLUETOOTH_SELECT_A2DP_BITS_PER_SAMPLE_KEY;
-    }
-
-    @Override
-    protected String[] getListValues() {
-        return mContext.getResources().getStringArray(
-                R.array.bluetooth_a2dp_codec_bits_per_sample_values);
-    }
-
-    @Override
-    protected String[] getListSummaries() {
-        return mContext.getResources().getStringArray(
-                R.array.bluetooth_a2dp_codec_bits_per_sample_summaries);
-    }
-
-    @Override
-    protected int getDefaultIndex() {
-        return DEFAULT_INDEX;
-    }
-
-    @Override
-    protected void writeConfigurationValues(Object newValue) {
-        final int index = mPreference.findIndexOfValue(newValue.toString());
-        int bitsPerSampleValue = BluetoothCodecConfig.BITS_PER_SAMPLE_NONE; // default
-        switch (index) {
-            case 0:
-                // Reset to default
-                break;
-            case 1:
-                bitsPerSampleValue = BluetoothCodecConfig.BITS_PER_SAMPLE_16;
-                break;
-            case 2:
-                bitsPerSampleValue = BluetoothCodecConfig.BITS_PER_SAMPLE_24;
-                break;
-            case 3:
-                bitsPerSampleValue = BluetoothCodecConfig.BITS_PER_SAMPLE_32;
-                break;
-            default:
-                break;
-        }
-        mBluetoothA2dpConfigStore.setBitsPerSample(bitsPerSampleValue);
-    }
-
-    @Override
-    protected int getCurrentA2dpSettingIndex(BluetoothCodecConfig config) {
-        final int bitsPerSample = config.getBitsPerSample();
-        int index = DEFAULT_INDEX;
-        switch (bitsPerSample) {
-            case BluetoothCodecConfig.BITS_PER_SAMPLE_16:
-                index = 1;
-                break;
-            case BluetoothCodecConfig.BITS_PER_SAMPLE_24:
-                index = 2;
-                break;
-            case BluetoothCodecConfig.BITS_PER_SAMPLE_32:
-                index = 3;
-                break;
-            case BluetoothCodecConfig.BITS_PER_SAMPLE_NONE:
-            default:
-                break;
-        }
-        return index;
-    }
-}
diff --git a/src/com/android/settings/development/BluetoothAudioChannelModePreferenceController.java b/src/com/android/settings/development/BluetoothAudioChannelModePreferenceController.java
deleted file mode 100644
index a58c675..0000000
--- a/src/com/android/settings/development/BluetoothAudioChannelModePreferenceController.java
+++ /dev/null
@@ -1,96 +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.BluetoothCodecConfig;
-import android.content.Context;
-
-import com.android.settings.R;
-import com.android.settingslib.core.lifecycle.Lifecycle;
-
-public class BluetoothAudioChannelModePreferenceController extends
-        AbstractBluetoothA2dpPreferenceController {
-
-    private static final int DEFAULT_INDEX = 0;
-    private static final String BLUETOOTH_SELECT_A2DP_CHANNEL_MODE_KEY =
-            "bluetooth_select_a2dp_channel_mode";
-
-    public BluetoothAudioChannelModePreferenceController(Context context, Lifecycle lifecycle,
-            BluetoothA2dpConfigStore store) {
-        super(context, lifecycle, store);
-    }
-
-    @Override
-    public String getPreferenceKey() {
-        return BLUETOOTH_SELECT_A2DP_CHANNEL_MODE_KEY;
-    }
-
-    @Override
-    protected String[] getListValues() {
-        return mContext.getResources().getStringArray(
-                R.array.bluetooth_a2dp_codec_channel_mode_values);
-    }
-
-    @Override
-    protected String[] getListSummaries() {
-        return mContext.getResources().getStringArray(
-                R.array.bluetooth_a2dp_codec_channel_mode_summaries);
-    }
-
-    @Override
-    protected int getDefaultIndex() {
-        return DEFAULT_INDEX;
-    }
-
-    @Override
-    protected void writeConfigurationValues(Object newValue) {
-        final int index = mPreference.findIndexOfValue(newValue.toString());
-        int channelModeValue = BluetoothCodecConfig.CHANNEL_MODE_NONE; // default
-        switch (index) {
-            case 0:
-                // Reset to default
-                break;
-            case 1:
-                channelModeValue = BluetoothCodecConfig.CHANNEL_MODE_MONO;
-                break;
-            case 2:
-                channelModeValue = BluetoothCodecConfig.CHANNEL_MODE_STEREO;
-                break;
-            default:
-                break;
-        }
-        mBluetoothA2dpConfigStore.setChannelMode(channelModeValue);
-    }
-
-    @Override
-    protected int getCurrentA2dpSettingIndex(BluetoothCodecConfig config) {
-        final int channelMode = config.getChannelMode();
-        int index = DEFAULT_INDEX;
-        switch (channelMode) {
-            case BluetoothCodecConfig.CHANNEL_MODE_MONO:
-                index = 1;
-                break;
-            case BluetoothCodecConfig.CHANNEL_MODE_STEREO:
-                index = 2;
-                break;
-            case BluetoothCodecConfig.CHANNEL_MODE_NONE:
-            default:
-                break;
-        }
-        return index;
-    }
-}
diff --git a/src/com/android/settings/development/BluetoothAudioCodecPreferenceController.java b/src/com/android/settings/development/BluetoothAudioCodecPreferenceController.java
deleted file mode 100644
index b5c40a3..0000000
--- a/src/com/android/settings/development/BluetoothAudioCodecPreferenceController.java
+++ /dev/null
@@ -1,156 +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.BluetoothCodecConfig;
-import android.content.Context;
-
-import com.android.settings.R;
-import com.android.settingslib.core.lifecycle.Lifecycle;
-
-public class BluetoothAudioCodecPreferenceController extends
-        AbstractBluetoothA2dpPreferenceController {
-
-    private static final int DEFAULT_INDEX = 0;
-    private static final String BLUETOOTH_SELECT_A2DP_CODEC_KEY = "bluetooth_select_a2dp_codec";
-
-    public BluetoothAudioCodecPreferenceController(Context context, Lifecycle lifecycle,
-            BluetoothA2dpConfigStore store) {
-        super(context, lifecycle, store);
-    }
-
-    @Override
-    public String getPreferenceKey() {
-        return BLUETOOTH_SELECT_A2DP_CODEC_KEY;
-    }
-
-    @Override
-    protected String[] getListValues() {
-        return mContext.getResources().getStringArray(
-                R.array.bluetooth_a2dp_codec_values);
-    }
-
-    @Override
-    protected String[] getListSummaries() {
-        return mContext.getResources().getStringArray(
-                R.array.bluetooth_a2dp_codec_summaries);
-    }
-
-    @Override
-    protected int getDefaultIndex() {
-        return DEFAULT_INDEX;
-    }
-
-    @Override
-    protected void writeConfigurationValues(Object newValue) {
-        final int index = mPreference.findIndexOfValue(newValue.toString());
-        int codecTypeValue = BluetoothCodecConfig.SAMPLE_RATE_NONE; // default
-        int codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT;
-        switch (index) {
-            case 0:
-                // Reset the priority of the current codec to default
-                final String oldValue = mPreference.getValue();
-                switch (mPreference.findIndexOfValue(oldValue)) {
-                    case 0:
-                        break;      // No current codec
-                    case 1:
-                        codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC;
-                        break;
-                    case 2:
-                        codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC;
-                        break;
-                    case 3:
-                        codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX;
-                        break;
-                    case 4:
-                        codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD;
-                        break;
-                    case 5:
-                        codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC;
-                        break;
-                    default:
-                        break;
-                }
-                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:
-                synchronized (mBluetoothA2dpConfigStore) {
-                    if (mBluetoothA2dp != null) {
-                        mBluetoothA2dp.enableOptionalCodecs(null); // Use current active device
-                    }
-                }
-                return;
-            case 7:
-                synchronized (mBluetoothA2dpConfigStore) {
-                    if (mBluetoothA2dp != null) {
-                        mBluetoothA2dp.disableOptionalCodecs(null); // Use current active device
-                    }
-                }
-                return;
-            default:
-                break;
-        }
-        mBluetoothA2dpConfigStore.setCodecType(codecTypeValue);
-        mBluetoothA2dpConfigStore.setCodecPriority(codecPriorityValue);
-    }
-
-    @Override
-    protected int getCurrentA2dpSettingIndex(BluetoothCodecConfig config) {
-        final int codecType = config.getCodecType();
-        int index = DEFAULT_INDEX;
-        switch (codecType) {
-            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_INVALID:
-            default:
-                break;
-        }
-        return index;
-    }
-}
diff --git a/src/com/android/settings/development/BluetoothAudioQualityPreferenceController.java b/src/com/android/settings/development/BluetoothAudioQualityPreferenceController.java
deleted file mode 100644
index 7adf8e6..0000000
--- a/src/com/android/settings/development/BluetoothAudioQualityPreferenceController.java
+++ /dev/null
@@ -1,100 +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.BluetoothCodecConfig;
-import android.content.Context;
-
-import com.android.settings.R;
-import com.android.settingslib.core.lifecycle.Lifecycle;
-
-public class BluetoothAudioQualityPreferenceController extends
-        AbstractBluetoothA2dpPreferenceController {
-
-    private static final int DEFAULT_INDEX = 3;
-    private static final String BLUETOOTH_SELECT_A2DP_LDAC_PLAYBACK_QUALITY_KEY =
-            "bluetooth_select_a2dp_ldac_playback_quality";
-
-    public BluetoothAudioQualityPreferenceController(Context context, Lifecycle lifecycle,
-            BluetoothA2dpConfigStore store) {
-        super(context, lifecycle, store);
-    }
-
-    @Override
-    public String getPreferenceKey() {
-        return BLUETOOTH_SELECT_A2DP_LDAC_PLAYBACK_QUALITY_KEY;
-    }
-
-    @Override
-    protected String[] getListValues() {
-        return mContext.getResources().getStringArray(
-                R.array.bluetooth_a2dp_codec_ldac_playback_quality_values);
-    }
-
-    @Override
-    protected String[] getListSummaries() {
-        return mContext.getResources().getStringArray(
-                R.array.bluetooth_a2dp_codec_ldac_playback_quality_summaries);
-    }
-
-    @Override
-    protected int getDefaultIndex() {
-        return DEFAULT_INDEX;
-    }
-
-    @Override
-    protected void writeConfigurationValues(Object newValue) {
-        final int index = mPreference.findIndexOfValue(newValue.toString());
-        int codecSpecific1Value = 0; // default
-        switch (index) {
-            case 0:
-            case 1:
-            case 2:
-            case 3:
-                codecSpecific1Value = 1000 + index;
-                break;
-            default:
-                break;
-        }
-        mBluetoothA2dpConfigStore.setCodecSpecific1Value(codecSpecific1Value);
-    }
-
-    @Override
-    protected int getCurrentA2dpSettingIndex(BluetoothCodecConfig config) {
-        // The actual values are 0, 1, 2 - those are extracted
-        // as mod-10 remainders of a larger value.
-        // The reason is because within BluetoothCodecConfig we cannot use
-        // a codec-specific value of zero.
-        int index = (int) config.getCodecSpecific1();
-        if (index > 0) {
-            index %= 10;
-        } else {
-            index = DEFAULT_INDEX;
-        }
-        switch (index) {
-            case 0:
-            case 1:
-            case 2:
-            case 3:
-                break;
-            default:
-                index = DEFAULT_INDEX;
-                break;
-        }
-        return index;
-    }
-}
diff --git a/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceController.java b/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceController.java
deleted file mode 100644
index 35b449e..0000000
--- a/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceController.java
+++ /dev/null
@@ -1,110 +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.BluetoothCodecConfig;
-import android.content.Context;
-
-import com.android.settings.R;
-import com.android.settingslib.core.lifecycle.Lifecycle;
-
-public class BluetoothAudioSampleRatePreferenceController extends
-        AbstractBluetoothA2dpPreferenceController {
-
-    private static final int DEFAULT_INDEX = 0;
-    private static final String BLUETOOTH_SELECT_A2DP_SAMPLE_RATE_KEY =
-            "bluetooth_select_a2dp_sample_rate";
-
-    public BluetoothAudioSampleRatePreferenceController(Context context, Lifecycle lifecycle,
-            BluetoothA2dpConfigStore store) {
-        super(context, lifecycle, store);
-    }
-
-    @Override
-    public String getPreferenceKey() {
-        return BLUETOOTH_SELECT_A2DP_SAMPLE_RATE_KEY;
-    }
-
-    @Override
-    protected String[] getListValues() {
-        return mContext.getResources().getStringArray(
-                R.array.bluetooth_a2dp_codec_sample_rate_values);
-    }
-
-    @Override
-    protected String[] getListSummaries() {
-        return mContext.getResources().getStringArray(
-                R.array.bluetooth_a2dp_codec_sample_rate_summaries);
-    }
-
-    @Override
-    protected int getDefaultIndex() {
-        return DEFAULT_INDEX;
-    }
-
-    @Override
-    protected void writeConfigurationValues(Object newValue) {
-        final int index = mPreference.findIndexOfValue(newValue.toString());
-        int sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_NONE; // default
-        switch (index) {
-            case 0:
-                sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_NONE;
-                break;
-            case 1:
-                sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_44100;
-                break;
-            case 2:
-                sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_48000;
-                break;
-            case 3:
-                sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_88200;
-                break;
-            case 4:
-                sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_96000;
-                break;
-            default:
-                break;
-        }
-        mBluetoothA2dpConfigStore.setSampleRate(sampleRateValue);
-    }
-
-    @Override
-    protected int getCurrentA2dpSettingIndex(BluetoothCodecConfig config) {
-        final int sampleRate = config.getSampleRate();
-        int index = DEFAULT_INDEX;
-        switch (sampleRate) {
-            case BluetoothCodecConfig.SAMPLE_RATE_44100:
-                index = 1;
-                break;
-            case BluetoothCodecConfig.SAMPLE_RATE_48000:
-                index = 2;
-                break;
-            case BluetoothCodecConfig.SAMPLE_RATE_88200:
-                index = 3;
-                break;
-            case BluetoothCodecConfig.SAMPLE_RATE_96000:
-                index = 4;
-                break;
-            case BluetoothCodecConfig.SAMPLE_RATE_176400:
-            case BluetoothCodecConfig.SAMPLE_RATE_192000:
-            case BluetoothCodecConfig.SAMPLE_RATE_NONE:
-            default:
-                break;
-        }
-        return index;
-    }
-}
diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
index 7fc898b..8f1db0f 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -44,6 +44,14 @@
 import com.android.settings.dashboard.RestrictedDashboardFragment;
 import com.android.settings.development.autofill.AutofillLoggingLevelPreferenceController;
 import com.android.settings.development.autofill.AutofillResetOptionsPreferenceController;
+import com.android.settings.development.bluetooth.AbstractBluetoothDialogPreferenceController;
+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.BluetoothHDAudioPreferenceController;
+import com.android.settings.development.bluetooth.BluetoothQualityDialogPreferenceController;
+import com.android.settings.development.bluetooth.BluetoothSampleRateDialogPreferenceController;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.widget.SwitchBar;
 import com.android.settingslib.core.AbstractPreferenceController;
@@ -62,7 +70,8 @@
 public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFragment
         implements SwitchBar.OnSwitchChangeListener, OemUnlockDialogHost, AdbDialogHost,
         AdbClearKeysDialogHost, LogPersistDialogHost,
-        BluetoothA2dpHwOffloadRebootDialog.OnA2dpHwDialogConfirmedListener {
+        BluetoothA2dpHwOffloadRebootDialog.OnA2dpHwDialogConfirmedListener,
+        AbstractBluetoothPreferenceController.Callback {
 
     private static final String TAG = "DevSettingsDashboard";
 
@@ -455,16 +464,6 @@
         controllers.add(new BluetoothAbsoluteVolumePreferenceController(context));
         controllers.add(new BluetoothAvrcpVersionPreferenceController(context));
         controllers.add(new BluetoothA2dpHwOffloadPreferenceController(context, fragment));
-        controllers.add(new BluetoothAudioCodecPreferenceController(context, lifecycle,
-                bluetoothA2dpConfigStore));
-        controllers.add(new BluetoothAudioSampleRatePreferenceController(context, lifecycle,
-                bluetoothA2dpConfigStore));
-        controllers.add(new BluetoothAudioBitsPerSamplePreferenceController(context, lifecycle,
-                bluetoothA2dpConfigStore));
-        controllers.add(new BluetoothAudioChannelModePreferenceController(context, lifecycle,
-                bluetoothA2dpConfigStore));
-        controllers.add(new BluetoothAudioQualityPreferenceController(context, lifecycle,
-                bluetoothA2dpConfigStore));
         controllers.add(new BluetoothMaxConnectedAudioDevicesPreferenceController(context));
         controllers.add(new ShowTapsPreferenceController(context));
         controllers.add(new PointerLocationPreferenceController(context));
@@ -511,6 +510,19 @@
         controllers.add(new DefaultLaunchPreferenceController(context, "inactive_apps"));
         controllers.add(new AutofillLoggingLevelPreferenceController(context, lifecycle));
         controllers.add(new AutofillResetOptionsPreferenceController(context));
+        controllers.add(new BluetoothCodecDialogPreferenceController(context, lifecycle,
+                bluetoothA2dpConfigStore, fragment));
+        controllers.add(new BluetoothSampleRateDialogPreferenceController(context, lifecycle,
+                bluetoothA2dpConfigStore));
+        controllers.add(new BluetoothBitPerSampleDialogPreferenceController(context, lifecycle,
+                bluetoothA2dpConfigStore));
+        controllers.add(new BluetoothQualityDialogPreferenceController(context, lifecycle,
+                bluetoothA2dpConfigStore));
+        controllers.add(new BluetoothChannelModeDialogPreferenceController(context, lifecycle,
+                bluetoothA2dpConfigStore));
+        controllers.add(new BluetoothHDAudioPreferenceController(context, lifecycle,
+                bluetoothA2dpConfigStore, fragment));
+
         return controllers;
     }
 
@@ -519,6 +531,27 @@
         return use(clazz);
     }
 
+    @Override
+    public void onBluetoothCodecChanged() {
+        for (AbstractPreferenceController controller : mPreferenceControllers) {
+            if (controller instanceof AbstractBluetoothDialogPreferenceController
+                    && !(controller instanceof BluetoothCodecDialogPreferenceController)) {
+                ((AbstractBluetoothDialogPreferenceController) controller)
+                        .onBluetoothCodecUpdated();
+            }
+        }
+    }
+
+    @Override
+    public void onBluetoothHDAudioEnabled(boolean enabled) {
+        for (AbstractPreferenceController controller : mPreferenceControllers) {
+            if (controller instanceof AbstractBluetoothDialogPreferenceController) {
+                ((AbstractBluetoothDialogPreferenceController) controller).onHDAudioEnabled(
+                        enabled);
+            }
+        }
+    }
+
     /**
      * For Search.
      */
diff --git a/src/com/android/settings/development/bluetooth/BluetoothQualityDialogPreferenceController.java b/src/com/android/settings/development/bluetooth/BluetoothQualityDialogPreferenceController.java
index b97ca44..4ac389b 100644
--- a/src/com/android/settings/development/bluetooth/BluetoothQualityDialogPreferenceController.java
+++ b/src/com/android/settings/development/bluetooth/BluetoothQualityDialogPreferenceController.java
@@ -106,7 +106,7 @@
     @Override
     public void onHDAudioEnabled(boolean enabled) {
         mPreference.setEnabled(false);
-    };
+    }
 
     @VisibleForTesting
     int convertCfgToBtnIndex(int config) {
diff --git a/tests/robotests/src/com/android/settings/development/BluetoothAudioBitsPerSamplePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BluetoothAudioBitsPerSamplePreferenceControllerTest.java
deleted file mode 100644
index 8c5cfd0..0000000
--- a/tests/robotests/src/com/android/settings/development/BluetoothAudioBitsPerSamplePreferenceControllerTest.java
+++ /dev/null
@@ -1,114 +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.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-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.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 BluetoothAudioBitsPerSamplePreferenceControllerTest {
-
-    @Mock
-    private BluetoothCodecConfig mBluetoothCodecConfig;
-    @Mock
-    private ListPreference mPreference;
-    @Mock
-    private PreferenceScreen mScreen;
-    @Mock
-    private BluetoothA2dpConfigStore mBluetoothA2dpConfigStore;
-
-    /**
-     * 0: Use System Selection (Default)
-     * 1: 16 bits/sample
-     * 2: 24 bits/sample
-     * 3: 32 bits/sample
-     */
-    private String[] mListValues;
-    private Context mContext;
-    private BluetoothAudioBitsPerSamplePreferenceController mController;
-    private LifecycleOwner mLifecycleOwner;
-    private Lifecycle mLifecycle;
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
-        mLifecycleOwner = () -> mLifecycle;
-        mLifecycle = new Lifecycle(mLifecycleOwner);
-        mController = spy(new BluetoothAudioBitsPerSamplePreferenceController(mContext,
-                mLifecycle, mBluetoothA2dpConfigStore));
-        mListValues = mController.getListValues();
-        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
-        mController.displayPreference(mScreen);
-    }
-
-    @Test
-    public void writeConfigurationValues_option2_shouldWriteOption2ToSharedStore() {
-        when(mPreference.findIndexOfValue(mListValues[2])).thenReturn(2);
-        mController.writeConfigurationValues(mListValues[2]);
-
-        verify(mBluetoothA2dpConfigStore).setBitsPerSample(BluetoothCodecConfig.BITS_PER_SAMPLE_24);
-    }
-
-    @Test
-    public void writeConfigurationValues_default_shouldSetDefault() {
-        when(mPreference.findIndexOfValue(mListValues[0])).thenReturn(0);
-        mController.writeConfigurationValues(mListValues[0]);
-
-        verify(mBluetoothA2dpConfigStore).setBitsPerSample(
-                BluetoothCodecConfig.BITS_PER_SAMPLE_NONE);
-    }
-
-    @Test
-    public void getCurrentA2dpSettingIndex_option2_shouldReturnSecondIndex() {
-        when(mBluetoothCodecConfig.getBitsPerSample()).thenReturn(
-                BluetoothCodecConfig.BITS_PER_SAMPLE_24);
-
-        final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
-
-        assertThat(index).isEqualTo(2);
-    }
-
-    @Test
-    public void getCurrentA2dpSettingIndex_unknownOption_shouldReturnDefault() {
-        when(mBluetoothCodecConfig.getCodecType()).thenReturn(1381391835);
-
-        final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
-
-        assertThat(index).isEqualTo(0);
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/development/BluetoothAudioChannelModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BluetoothAudioChannelModePreferenceControllerTest.java
deleted file mode 100644
index d9a2671..0000000
--- a/tests/robotests/src/com/android/settings/development/BluetoothAudioChannelModePreferenceControllerTest.java
+++ /dev/null
@@ -1,112 +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.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-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.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 BluetoothAudioChannelModePreferenceControllerTest {
-
-    @Mock
-    private BluetoothCodecConfig mBluetoothCodecConfig;
-    @Mock
-    private ListPreference mPreference;
-    @Mock
-    private PreferenceScreen mScreen;
-    @Mock
-    private BluetoothA2dpConfigStore mBluetoothA2dpConfigStore;
-
-    /**
-     * 0: Use System Selection (Default)
-     * 1: Mono
-     * 2: Stereo
-     */
-    private String[] mListValues;
-    private Context mContext;
-    private BluetoothAudioChannelModePreferenceController mController;
-    private LifecycleOwner mLifecycleOwner;
-    private Lifecycle mLifecycle;
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
-        mLifecycleOwner = () -> mLifecycle;
-        mLifecycle = new Lifecycle(mLifecycleOwner);
-        mController = spy(new BluetoothAudioChannelModePreferenceController(mContext,
-                mLifecycle, mBluetoothA2dpConfigStore));
-        mListValues = mController.getListValues();
-        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
-        mController.displayPreference(mScreen);
-    }
-
-    @Test
-    public void writeConfigurationValues_option2_shouldWriteOption2ToSharedStore() {
-        when(mPreference.findIndexOfValue(mListValues[2])).thenReturn(2);
-        mController.writeConfigurationValues(mListValues[2]);
-
-        verify(mBluetoothA2dpConfigStore).setChannelMode(BluetoothCodecConfig.CHANNEL_MODE_STEREO);
-    }
-
-    @Test
-    public void writeConfigurationValues_default_shouldSetDefault() {
-        when(mPreference.findIndexOfValue(mListValues[0])).thenReturn(0);
-        mController.writeConfigurationValues(mListValues[0]);
-
-        verify(mBluetoothA2dpConfigStore).setChannelMode(BluetoothCodecConfig.CHANNEL_MODE_NONE);
-    }
-
-    @Test
-    public void getCurrentA2dpSettingIndex_option2_shouldReturnSecondIndex() {
-        when(mBluetoothCodecConfig.getChannelMode())
-            .thenReturn(BluetoothCodecConfig.CHANNEL_MODE_STEREO);
-
-        final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
-
-        assertThat(index).isEqualTo(2);
-    }
-
-    @Test
-    public void getCurrentA2dpSettingIndex_unknownOption_shouldReturnDefault() {
-        when(mBluetoothCodecConfig.getCodecType()).thenReturn(1381391835);
-
-        final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
-
-        assertThat(index).isEqualTo(0);
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/development/BluetoothAudioCodecPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BluetoothAudioCodecPreferenceControllerTest.java
deleted file mode 100644
index 7be8a88..0000000
--- a/tests/robotests/src/com/android/settings/development/BluetoothAudioCodecPreferenceControllerTest.java
+++ /dev/null
@@ -1,120 +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.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-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.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 BluetoothAudioCodecPreferenceControllerTest {
-
-    @Mock
-    private BluetoothCodecConfig mBluetoothCodecConfig;
-    @Mock
-    private ListPreference mPreference;
-    @Mock
-    private PreferenceScreen mScreen;
-    @Mock
-    private BluetoothA2dpConfigStore mBluetoothA2dpConfigStore;
-
-    /**
-     * 0: Use System Selection (Default)
-     * 1: SBC
-     * 2: AAC
-     * 3: Qualcomm aptX audio
-     * 4: Qualcomm aptX HD audio
-     * 5: LDAC
-     * 6: Enable Optional Codecs
-     * 7: Disable Optional Codecs
-     */
-    private String[] mListValues;
-    private Context mContext;
-    private BluetoothAudioCodecPreferenceController mController;
-    private LifecycleOwner mLifecycleOwner;
-    private Lifecycle mLifecycle;
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
-        mLifecycleOwner = () -> mLifecycle;
-        mLifecycle = new Lifecycle(mLifecycleOwner);
-        mController = spy(new BluetoothAudioCodecPreferenceController(mContext, mLifecycle,
-                mBluetoothA2dpConfigStore));
-        mListValues = mController.getListValues();
-        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
-        mController.displayPreference(mScreen);
-    }
-
-    @Test
-    public void writeConfigurationValues_option2_shouldWriteOption2ToSharedStore() {
-        when(mPreference.findIndexOfValue(mListValues[2])).thenReturn(2);
-        mController.writeConfigurationValues(mListValues[2]);
-
-        verify(mBluetoothA2dpConfigStore).setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC);
-        verify(mBluetoothA2dpConfigStore).setCodecPriority(
-                BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST);
-    }
-
-    @Test
-    public void writeConfigurationValues_default_shouldSetDefaultPriority() {
-        when(mPreference.findIndexOfValue(mListValues[0])).thenReturn(0);
-        mController.writeConfigurationValues(mListValues[0]);
-
-        verify(mBluetoothA2dpConfigStore).setCodecPriority(
-                BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT);
-    }
-
-    @Test
-    public void getCurrentA2dpSettingIndex_option2_shouldReturnSecondIndex() {
-        when(mBluetoothCodecConfig.getCodecType()).thenReturn(
-                BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC);
-
-        final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
-
-        assertThat(index).isEqualTo(2);
-    }
-
-    @Test
-    public void getCurrentA2dpSettingIndex_unknownOption_shouldReturnDefault() {
-        when(mBluetoothCodecConfig.getCodecType()).thenReturn(1381391835);
-
-        final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
-
-        assertThat(index).isEqualTo(0);
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/development/BluetoothAudioQualityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BluetoothAudioQualityPreferenceControllerTest.java
deleted file mode 100644
index 93d92fd..0000000
--- a/tests/robotests/src/com/android/settings/development/BluetoothAudioQualityPreferenceControllerTest.java
+++ /dev/null
@@ -1,111 +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.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-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.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 BluetoothAudioQualityPreferenceControllerTest {
-
-    @Mock
-    private BluetoothCodecConfig mBluetoothCodecConfig;
-    @Mock
-    private ListPreference mPreference;
-    @Mock
-    private PreferenceScreen mScreen;
-    @Mock
-    private BluetoothA2dpConfigStore mBluetoothA2dpConfigStore;
-
-    /**
-     * 0: Optimized for Audio Quality (990kbps/909kbps)
-     * 1: Balanced Audio And Connection Quality (660kbps/606kbps)
-     * 2: Stereo
-     */
-    private String[] mListValues;
-    private Context mContext;
-    private BluetoothAudioQualityPreferenceController mController;
-    private LifecycleOwner mLifecycleOwner;
-    private Lifecycle mLifecycle;
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
-        mLifecycleOwner = () -> mLifecycle;
-        mLifecycle = new Lifecycle(mLifecycleOwner);
-        mController = spy(new BluetoothAudioQualityPreferenceController(mContext,
-                mLifecycle, mBluetoothA2dpConfigStore));
-        mListValues = mController.getListValues();
-        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
-        mController.displayPreference(mScreen);
-    }
-
-    @Test
-    public void writeConfigurationValues_option3_shouldWrite1003ToSharedStore() {
-        when(mPreference.findIndexOfValue(mListValues[3])).thenReturn(3);
-        mController.writeConfigurationValues(mListValues[3]);
-
-        verify(mBluetoothA2dpConfigStore).setCodecSpecific1Value(1003);
-    }
-
-    @Test
-    public void writeConfigurationValues_default_shouldSetDefault() {
-        when(mPreference.findIndexOfValue(mListValues[0])).thenReturn(0);
-        mController.writeConfigurationValues(mListValues[0]);
-
-        verify(mBluetoothA2dpConfigStore).setCodecSpecific1Value(1000);
-    }
-
-    @Test
-    public void getCurrentA2dpSettingIndex_option2_shouldReturnSecondIndex() {
-        when(mBluetoothCodecConfig.getCodecSpecific1()).thenReturn(Long.valueOf(2));
-
-        final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
-
-        assertThat(index).isEqualTo(2);
-    }
-
-    @Test
-    public void getCurrentA2dpSettingIndex_unknownOption_shouldReturnDefault() {
-        when(mBluetoothCodecConfig.getCodecType()).thenReturn(1381391835);
-
-        final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
-
-        assertThat(index).isEqualTo(3);
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceControllerTest.java
deleted file mode 100644
index 3b469c5..0000000
--- a/tests/robotests/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceControllerTest.java
+++ /dev/null
@@ -1,106 +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.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-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.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 BluetoothAudioSampleRatePreferenceControllerTest {
-
-    @Mock
-    private BluetoothCodecConfig mBluetoothCodecConfig;
-    @Mock
-    private ListPreference mPreference;
-    @Mock
-    private PreferenceScreen mScreen;
-    @Mock
-    private BluetoothA2dpConfigStore mBluetoothA2dpConfigStore;
-
-    /**
-     * 0: Use System Selection (Default)
-     * 1: 44.1 kHz
-     * 2: 48.0 kHz
-     * 3: 88.2 kHz
-     * 4: 96.0 kHz
-     */
-    private String[] mListValues;
-    private LifecycleOwner mLifecycleOwner;
-    private Lifecycle mLifecycle;
-    private Context mContext;
-    private BluetoothAudioSampleRatePreferenceController mController;
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
-        mLifecycleOwner = () -> mLifecycle;
-        mLifecycle = new Lifecycle(mLifecycleOwner);
-        mController = spy(new BluetoothAudioSampleRatePreferenceController(mContext, mLifecycle,
-                mBluetoothA2dpConfigStore));
-        mListValues = mController.getListValues();
-        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
-        mController.displayPreference(mScreen);
-    }
-
-    @Test
-    public void writeConfigurationValues_option2_shouldWriteOption2ToSharedStore() {
-        when(mPreference.findIndexOfValue(mListValues[2])).thenReturn(2);
-        mController.writeConfigurationValues(mListValues[2]);
-
-        verify(mBluetoothA2dpConfigStore).setSampleRate(BluetoothCodecConfig.SAMPLE_RATE_48000);
-    }
-
-    @Test
-    public void getCurrentA2dpSettingIndex_option2_shouldReturnSecondIndex() {
-        when(mBluetoothCodecConfig.getSampleRate()).thenReturn(
-                BluetoothCodecConfig.SAMPLE_RATE_48000);
-
-        final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
-
-        assertThat(index).isEqualTo(2);
-    }
-
-    @Test
-    public void getCurrentA2dpSettingIndex_unknownOption_shouldReturnDefault() {
-        when(mBluetoothCodecConfig.getSampleRate()).thenReturn(1381391835);
-
-        final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
-
-        assertThat(index).isEqualTo(0);
-    }
-}