bt: Fix displaying late bond device name
In a case when we are pairing set members the action SET_MEMBER_AVAILABLE may come before advertising information was able to arrive to Java layer and thus the information like device name was not cached and is not available for the new set member device. In this case we want to use the first set member device's name to have some name displayed to the user instead of an address. Bug: 282193044 Test: manual Tag: #feature Change-Id: I25eb50702f8c41cd5917cf9ea29eb0c3c17d2bd5
This commit is contained in:
@@ -51,6 +51,7 @@ public class CachedBluetoothDeviceManager {
|
||||
CsipDeviceManager mCsipDeviceManager;
|
||||
BluetoothDevice mOngoingSetMemberPair;
|
||||
boolean mIsLateBonding;
|
||||
int mGroupIdOfLateBonding;
|
||||
|
||||
public CachedBluetoothDeviceManager(Context context, LocalBluetoothManager localBtManager) {
|
||||
mContext = context;
|
||||
@@ -213,6 +214,14 @@ public class CachedBluetoothDeviceManager {
|
||||
* @return The name, or if unavailable, the address.
|
||||
*/
|
||||
public String getName(BluetoothDevice device) {
|
||||
if (isOngoingPairByCsip(device)) {
|
||||
CachedBluetoothDevice firstDevice =
|
||||
mCsipDeviceManager.getFirstMemberDevice(mGroupIdOfLateBonding);
|
||||
if (firstDevice != null && firstDevice.getName() != null) {
|
||||
return firstDevice.getName();
|
||||
}
|
||||
}
|
||||
|
||||
CachedBluetoothDevice cachedDevice = findDevice(device);
|
||||
if (cachedDevice != null && cachedDevice.getName() != null) {
|
||||
return cachedDevice.getName();
|
||||
@@ -314,6 +323,7 @@ public class CachedBluetoothDeviceManager {
|
||||
// To clear the SetMemberPair flag when the Bluetooth is turning off.
|
||||
mOngoingSetMemberPair = null;
|
||||
mIsLateBonding = false;
|
||||
mGroupIdOfLateBonding = BluetoothCsipSetCoordinator.GROUP_ID_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -426,6 +436,7 @@ public class CachedBluetoothDeviceManager {
|
||||
return false;
|
||||
}
|
||||
|
||||
Log.d(TAG, "isLateBonding: " + mIsLateBonding);
|
||||
return mIsLateBonding;
|
||||
}
|
||||
|
||||
@@ -444,11 +455,13 @@ public class CachedBluetoothDeviceManager {
|
||||
Log.d(TAG, "Bond " + device.getAnonymizedAddress() + " groupId=" + groupId + " by CSIP ");
|
||||
mOngoingSetMemberPair = device;
|
||||
mIsLateBonding = checkLateBonding(groupId);
|
||||
mGroupIdOfLateBonding = groupId;
|
||||
syncConfigFromMainDevice(device, groupId);
|
||||
if (!device.createBond(BluetoothDevice.TRANSPORT_LE)) {
|
||||
Log.d(TAG, "Bonding could not be started");
|
||||
mOngoingSetMemberPair = null;
|
||||
mIsLateBonding = false;
|
||||
mGroupIdOfLateBonding = BluetoothCsipSetCoordinator.GROUP_ID_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -494,6 +507,7 @@ public class CachedBluetoothDeviceManager {
|
||||
|
||||
mOngoingSetMemberPair = null;
|
||||
mIsLateBonding = false;
|
||||
mGroupIdOfLateBonding = BluetoothCsipSetCoordinator.GROUP_ID_INVALID;
|
||||
if (bondState != BluetoothDevice.BOND_NONE) {
|
||||
if (findDevice(device) == null) {
|
||||
final LocalBluetoothProfileManager profileManager = mBtManager.getProfileManager();
|
||||
|
||||
Reference in New Issue
Block a user