Move set member pair handle from settingLib to setting

Remove createBond from settingLib. SystemUI and Setting have the
individual settingLib instance. If we trigger pairing inside settingLib,
the action would be called twice.

Bug: 201758444
Bug: 150670922
Test: Pair the coordinated set devices, and check the set member pairing
would be done automatically without the pairing dialog

Change-Id: I289b8af857530f0fb207b777d09d94549cfdf553
This commit is contained in:
Alice Kuo
2021-10-13 19:14:22 +08:00
parent c03b0fa033
commit 423e648a82
3 changed files with 17 additions and 50 deletions

View File

@@ -127,9 +127,6 @@ public class BluetoothEventManager {
addHandler(BluetoothDevice.ACTION_ACL_CONNECTED, new AclStateChangedHandler());
addHandler(BluetoothDevice.ACTION_ACL_DISCONNECTED, new AclStateChangedHandler());
addHandler(BluetoothCsipSetCoordinator.ACTION_CSIS_SET_MEMBER_AVAILABLE,
new SetMemberAvailableHandler());
registerAdapterIntentReceiver();
}
@@ -515,29 +512,4 @@ public class BluetoothEventManager {
dispatchAudioModeChanged();
}
}
private class SetMemberAvailableHandler implements Handler {
@Override
public void onReceive(Context context, Intent intent, BluetoothDevice device) {
final String action = intent.getAction();
if (device == null) {
Log.e(TAG, "SetMemberAvailableHandler: device is null");
return;
}
if (action == null) {
Log.e(TAG, "SetMemberAvailableHandler: action is null");
return;
}
final int groupId = intent.getIntExtra(BluetoothCsipSetCoordinator.EXTRA_CSIS_GROUP_ID,
BluetoothCsipSetCoordinator.GROUP_ID_INVALID);
if (groupId == BluetoothCsipSetCoordinator.GROUP_ID_INVALID) {
Log.e(TAG, "SetMemberAvailableHandler: Invalid group id");
return;
}
mDeviceManager.onSetMemberAppear(device, groupId);
}
}
}

View File

@@ -340,22 +340,24 @@ public class CachedBluetoothDeviceManager {
/**
* Called when we found a set member of a group. The function will check the {@code groupId} if
* it exists and if there is a ongoing pair, the device would be ignored.
* it exists and the bond state of the device is BOND_NOE, and if there isn't any ongoing pair
* , and then return {@code true} to pair the device automatically.
*
* @param device The found device
* @param groupId The group id of the found device
*
* @return {@code true}, if the device should pair automatically; Otherwise, return
* {@code false}.
*/
public synchronized void onSetMemberAppear(BluetoothDevice device, int groupId) {
Log.d(TAG, "onSetMemberAppear, groupId: " + groupId + " device: " + device.toString());
if (mOngoingSetMemberPair != null) {
Log.d(TAG, "Ongoing set memberPairing in process, drop it!");
return;
public synchronized boolean shouldPairByCsip(BluetoothDevice device, int groupId) {
if (mOngoingSetMemberPair != null || device.getBondState() != BluetoothDevice.BOND_NONE
|| !mCsipDeviceManager.isExistedGroupId(groupId)) {
return false;
}
if (mCsipDeviceManager.onSetMemberAppear(device, groupId)) {
mOngoingSetMemberPair = device;
}
Log.d(TAG, "Bond " + device.getName() + " by CSIP");
mOngoingSetMemberPair = device;
return true;
}
/**

View File

@@ -240,22 +240,15 @@ public class CsipDeviceManager {
}
/**
* Called when we found a set member of a group. The function will check bond state, and
* the {@code groupId} if it exists, and then create the bond.
* Check if the {@code groupId} is existed.
*
* @param device The found device
* @param groupId The group id of the found device
* @param groupId The group id
*
* @return {@code true}, if the we create bond with the device. Otherwise, return
* {@code false}.
* @return {@code true}, if we could find a device with this {@code groupId}; Otherwise,
* return {@code false}.
*/
public boolean onSetMemberAppear(BluetoothDevice device, int groupId) {
if (device.getBondState() != BluetoothDevice.BOND_NONE) {
return false;
}
public boolean isExistedGroupId(int groupId) {
if (getCachedDevice(groupId) != null) {
device.createBond(BluetoothDevice.TRANSPORT_LE);
return true;
}