Merge "Add Settings support for Bluetooth Multi-A2DP and Multi-HFP"
diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java
index 127730b..2862083 100644
--- a/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java
+++ b/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java
@@ -27,14 +27,19 @@
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.connecteddevice.DevicePreferenceCallback;
import com.android.settings.widget.GearPreference;
+import com.android.settingslib.bluetooth.A2dpProfile;
import com.android.settingslib.bluetooth.BluetoothCallback;
import com.android.settingslib.bluetooth.BluetoothDeviceFilter;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.HeadsetProfile;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
+import java.util.Objects;
+
+import android.util.Log;
/**
* Update the bluetooth devices. It gets bluetooth event from {@link LocalBluetoothManager} using
@@ -45,6 +50,7 @@
* whether the {@link CachedBluetoothDevice} is relevant.
*/
public abstract class BluetoothDeviceUpdater implements BluetoothCallback {
+ private static final String TAG = "BluetoothDeviceUpdater";
private static final String BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_PROPERTY =
"persist.bluetooth.showdeviceswithoutnames";
@@ -55,6 +61,7 @@
private final boolean mShowDeviceWithoutNames;
private DashboardFragment mFragment;
+ private Preference.OnPreferenceClickListener mDevicePreferenceClickListener = null;
@VisibleForTesting
final GearPreference.OnGearClickListener mDeviceProfilesListener = pref -> {
@@ -73,6 +80,38 @@
};
+ private class PreferenceClickListener implements
+ Preference.OnPreferenceClickListener {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ final CachedBluetoothDevice device =
+ ((BluetoothDevicePreference) preference).getBluetoothDevice();
+ if (device == null) {
+ return false;
+ }
+
+ // Set the device as active per profile only if the device supports that profile
+ // TODO: The active device selector location might change in the future
+ Log.i(TAG, "OnPreferenceClickListener: device=" + device);
+ boolean result = false;
+ A2dpProfile a2dpProfile = mLocalManager.getProfileManager().getA2dpProfile();
+ if ((a2dpProfile != null) && device.isConnectedProfile(a2dpProfile)) {
+ if (a2dpProfile.setActiveDevice(device.getDevice())) {
+ Log.i(TAG, "OnPreferenceClickListener: A2DP active device=" + device);
+ result = true;
+ }
+ }
+ HeadsetProfile headsetProfile = mLocalManager.getProfileManager().getHeadsetProfile();
+ if ((headsetProfile != null) && device.isConnectedProfile(headsetProfile)) {
+ if (headsetProfile.setActiveDevice(device.getDevice())) {
+ Log.i(TAG, "OnPreferenceClickListener: Headset active device=" + device);
+ result = true;
+ }
+ }
+ return result;
+ }
+ }
+
public BluetoothDeviceUpdater(DashboardFragment fragment,
DevicePreferenceCallback devicePreferenceCallback) {
this(fragment, devicePreferenceCallback, Utils.getLocalBtManager(fragment.getContext()));
@@ -87,6 +126,7 @@
BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_PROPERTY, false);
mPreferenceMap = new HashMap<>();
mLocalManager = localManager;
+ mDevicePreferenceClickListener = new PreferenceClickListener();
}
/**
@@ -141,6 +181,18 @@
@Override
public void onConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state) {}
+ @Override
+ public void onActiveDeviceChanged(CachedBluetoothDevice activeDevice, int bluetoothProfile) {
+ Collection<CachedBluetoothDevice> cachedDevices =
+ mLocalManager.getCachedDeviceManager().getCachedDevicesCopy();
+ // TODO: The state update of the Cached Bluetooth Devices should be
+ // moved to the device manager: b/72316092
+ for (CachedBluetoothDevice cachedBluetoothDevice : cachedDevices) {
+ boolean isActive = Objects.equals(cachedBluetoothDevice, activeDevice);
+ cachedBluetoothDevice.setActiveDevice(isActive, bluetoothProfile);
+ }
+ }
+
/**
* Set the context to generate the {@link Preference}, so it could get the correct theme.
*/
@@ -176,6 +228,7 @@
new BluetoothDevicePreference(mPrefContext, cachedDevice,
mShowDeviceWithoutNames);
btPreference.setOnGearClickListener(mDeviceProfilesListener);
+ btPreference.setOnPreferenceClickListener(mDevicePreferenceClickListener);
mPreferenceMap.put(device, btPreference);
mDevicePreferenceCallback.onDeviceAdded(btPreference);
}
diff --git a/src/com/android/settings/bluetooth/BluetoothSummaryUpdater.java b/src/com/android/settings/bluetooth/BluetoothSummaryUpdater.java
index 662cd70..43d25e7 100644
--- a/src/com/android/settings/bluetooth/BluetoothSummaryUpdater.java
+++ b/src/com/android/settings/bluetooth/BluetoothSummaryUpdater.java
@@ -77,6 +77,10 @@
}
@Override
+ public void onActiveDeviceChanged(CachedBluetoothDevice activeDevice, int bluetoothProfile) {
+ }
+
+ @Override
public void register(boolean listening) {
if (mBluetoothAdapter == null) {
return;
diff --git a/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java b/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java
index 0a90edc..207a4b0 100644
--- a/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java
+++ b/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java
@@ -277,6 +277,9 @@
public void onConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state) { }
+ @Override
+ public void onActiveDeviceChanged(CachedBluetoothDevice activeDevice, int bluetoothProfile) { }
+
/**
* Return the key of the {@link PreferenceGroup} that contains the bluetooth devices
*/