DO NOT MERGE Add developer menu to select max number of connected audio devices

The new developer option modifies the system property
"persist.bluetooth.maxconnectedaudiodevices"; it allows testing
multiple connected devices for A2DP, AVRCP, HFP.

Bug: 71603731
Test: Robolectric test
Change-Id: If8c2c26ad4c9a2b7458a2d16a0c29d5f9b4df5c7
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 5e1a468..3984c21 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -316,6 +316,24 @@
         <item>Never time out</item>
     </string-array>
 
+    <!-- Bluetooth developer settings: Titles for maximum number of connected audio devices -->
+    <string-array name="bluetooth_max_connected_audio_devices">
+        <item>1 (Default)</item>
+        <item>2</item>
+        <item>3</item>
+        <item>4</item>
+        <item>5</item>
+    </string-array>
+
+    <!-- Bluetooth developer settings: Values for maximum number of connected audio devices -->
+    <string-array name="bluetooth_max_connected_audio_devices_values">
+        <item>1</item>
+        <item>2</item>
+        <item>3</item>
+        <item>4</item>
+        <item>5</item>
+    </string-array>
+
     <!-- Match this with drawable.wifi_signal. --> <skip />
     <!-- Wi-Fi settings. The signal strength a Wi-Fi network has. -->
     <string-array name="wifi_signal">
diff --git a/res/values/strings.xml b/res/values/strings.xml
index a05fbfc..8a685e6 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1606,6 +1606,11 @@
     <!-- Summary of checkbox for disabling Bluetooth inband ringing in Development Settings -->
     <string name="bluetooth_disable_inband_ringing_summary">Don’t play custom phone ringtones on Bluetooth headsets</string>
 
+    <!-- Bluetooth developer settings: Maximum number of connected audio devices -->
+    <string name="bluetooth_max_connected_audio_devices_string">Maximum number of connected Bluetooth audio devices</string>
+    <!-- Bluetooth developer settings: Maximum number of connected audio devices -->
+    <string name="bluetooth_max_connected_audio_devices_dialog_title">Select maximum number of connected Bluetooth audio devices</string>
+
     <!-- Wifi Display settings. The title of the screen. [CHAR LIMIT=40] -->
     <string name="wifi_display_settings_title">Cast</string>
     <!-- Wifi Display settings. The title of a menu item to enable wireless display [CHAR LIMIT=40] -->
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index bf83a5e..fb73ec4 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -270,6 +270,13 @@
             android:entries="@array/bluetooth_a2dp_codec_ldac_playback_quality_titles"
             android:entryValues="@array/bluetooth_a2dp_codec_ldac_playback_quality_values" />
 
+        <ListPreference
+            android:key="bluetooth_max_connected_audio_devices"
+            android:title="@string/bluetooth_max_connected_audio_devices_string"
+            android:dialogTitle="@string/bluetooth_max_connected_audio_devices_dialog_title"
+            android:entries="@array/bluetooth_max_connected_audio_devices"
+            android:entryValues="@array/bluetooth_max_connected_audio_devices_values" />
+
         <com.android.settings.development.PrivateDnsModeDialogPreference
             android:key="select_private_dns_configuration"
             android:title="@string/select_private_dns_configuration_title"
diff --git a/src/com/android/settings/development/DevelopmentSettings.java b/src/com/android/settings/development/DevelopmentSettings.java
index ffe9db4..1ffee1b 100644
--- a/src/com/android/settings/development/DevelopmentSettings.java
+++ b/src/com/android/settings/development/DevelopmentSettings.java
@@ -215,6 +215,9 @@
     private static final String BLUETOOTH_BTSNOOP_ENABLE_PROPERTY =
                                     "persist.bluetooth.btsnoopenable";
 
+    static final String BLUETOOTH_MAX_CONNECTED_AUDIO_DEVICES_PROPERTY =
+            "persist.bluetooth.maxconnectedaudiodevices";
+
     private static final String BLUETOOTH_DISABLE_INBAND_RINGING_KEY = "bluetooth_disable_inband_ringing";
     private static final String BLUETOOTH_SELECT_AVRCP_VERSION_KEY = "bluetooth_select_avrcp_version";
     private static final String BLUETOOTH_SELECT_A2DP_CODEC_KEY = "bluetooth_select_a2dp_codec";
@@ -222,6 +225,8 @@
     private static final String BLUETOOTH_SELECT_A2DP_BITS_PER_SAMPLE_KEY = "bluetooth_select_a2dp_bits_per_sample";
     private static final String BLUETOOTH_SELECT_A2DP_CHANNEL_MODE_KEY = "bluetooth_select_a2dp_channel_mode";
     private static final String BLUETOOTH_SELECT_A2DP_LDAC_PLAYBACK_QUALITY_KEY = "bluetooth_select_a2dp_ldac_playback_quality";
+    private static final String BLUETOOTH_MAX_CONNECTED_AUDIO_DEVICES_KEY =
+            "bluetooth_max_connected_audio_devices";
 
     private static final String PRIVATE_DNS_PREF_KEY = "select_private_dns_configuration";
 
@@ -301,6 +306,7 @@
     private ListPreference mBluetoothSelectA2dpBitsPerSample;
     private ListPreference mBluetoothSelectA2dpChannelMode;
     private ListPreference mBluetoothSelectA2dpLdacPlaybackQuality;
+    private ListPreference mBluetoothSelectMaxConnectedAudioDevices;
 
     private SwitchPreference mOtaDisableAutomaticUpdate;
     private SwitchPreference mWifiAllowScansWithTraffic;
@@ -525,6 +531,7 @@
         mBluetoothSelectA2dpBitsPerSample = addListPreference(BLUETOOTH_SELECT_A2DP_BITS_PER_SAMPLE_KEY);
         mBluetoothSelectA2dpChannelMode = addListPreference(BLUETOOTH_SELECT_A2DP_CHANNEL_MODE_KEY);
         mBluetoothSelectA2dpLdacPlaybackQuality = addListPreference(BLUETOOTH_SELECT_A2DP_LDAC_PLAYBACK_QUALITY_KEY);
+        mBluetoothSelectMaxConnectedAudioDevices = addListPreference(BLUETOOTH_MAX_CONNECTED_AUDIO_DEVICES_KEY);
         initBluetoothConfigurationValues();
 
         updatePrivateDnsSummary();
@@ -1858,6 +1865,13 @@
         index = 3;
         mBluetoothSelectA2dpLdacPlaybackQuality.setValue(values[index]);
         mBluetoothSelectA2dpLdacPlaybackQuality.setSummary(summaries[index]);
+
+        // Init the maximum connected devices - Default
+        values = getResources().getStringArray(R.array.bluetooth_max_connected_audio_devices_values);
+        summaries = getResources().getStringArray(R.array.bluetooth_max_connected_audio_devices);
+        index = 0;
+        mBluetoothSelectMaxConnectedAudioDevices.setValue(values[index]);
+        mBluetoothSelectMaxConnectedAudioDevices.setSummary(summaries[index]);
     }
 
     private void writeBluetoothAvrcpVersion(Object newValue) {
@@ -2026,6 +2040,15 @@
         }
     }
 
+    private void writeBluetoothMaxConnectedAudioDevices(Object newValue) {
+        SystemProperties.set(BLUETOOTH_MAX_CONNECTED_AUDIO_DEVICES_PROPERTY, newValue.toString());
+        int index = mBluetoothSelectMaxConnectedAudioDevices.findIndexOfValue(newValue.toString());
+        if (index >= 0) {
+            String[] titles = getResources().getStringArray(R.array.bluetooth_max_connected_audio_devices);
+            mBluetoothSelectMaxConnectedAudioDevices.setSummary(titles[index]);
+        }
+    }
+
     private void writeBluetoothConfigurationOption(Preference preference,
                                                    Object newValue) {
         String[] summaries;
@@ -2621,6 +2644,9 @@
                    (preference == mBluetoothSelectA2dpLdacPlaybackQuality)) {
             writeBluetoothConfigurationOption(preference, newValue);
             return true;
+        } else if (preference == mBluetoothSelectMaxConnectedAudioDevices) {
+            writeBluetoothMaxConnectedAudioDevices(newValue);
+            return true;
         } else if (preference == mLogdSize) {
             writeLogdSizeOption(newValue);
             return true;