The switchMemberDeviceContent does not transmit the profile
Remove this function and don't switch the content. To switch CachedBluetoothDevice item in the CachedBluetoothDeviceManager. Bug: 260535339 Test: atest CachedBluetoothDeviceManagerTest Change-Id: If9f8a7f22762a1279bf1ae62ab1a77edb33944cf
This commit is contained in:
@@ -940,6 +940,7 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
|
||||
+ getName()
|
||||
+ ", groupId="
|
||||
+ mGroupId
|
||||
+ ", member= " + mMemberDevices
|
||||
+ ")";
|
||||
}
|
||||
|
||||
@@ -1493,33 +1494,6 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
|
||||
mMemberDevices.remove(memberDevice);
|
||||
}
|
||||
|
||||
/**
|
||||
* In order to show the preference for the whole group, we always set the main device as the
|
||||
* first connected device in the coordinated set, and then switch the content of the main
|
||||
* device and member devices.
|
||||
*
|
||||
* @param newMainDevice the new Main device which is from the previous main device's member
|
||||
* list.
|
||||
*/
|
||||
public void switchMemberDeviceContent(CachedBluetoothDevice newMainDevice) {
|
||||
// Backup from main device
|
||||
final BluetoothDevice tmpDevice = mDevice;
|
||||
final short tmpRssi = mRssi;
|
||||
final boolean tmpJustDiscovered = mJustDiscovered;
|
||||
// Set main device from sub device
|
||||
release();
|
||||
mDevice = newMainDevice.mDevice;
|
||||
mRssi = newMainDevice.mRssi;
|
||||
mJustDiscovered = newMainDevice.mJustDiscovered;
|
||||
|
||||
// Set sub device from backup
|
||||
newMainDevice.release();
|
||||
newMainDevice.mDevice = tmpDevice;
|
||||
newMainDevice.mRssi = tmpRssi;
|
||||
newMainDevice.mJustDiscovered = tmpJustDiscovered;
|
||||
fetchActiveDevices();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get cached bluetooth icon with description
|
||||
*/
|
||||
|
||||
@@ -463,6 +463,59 @@ public class CachedBluetoothDeviceManager {
|
||||
return !(mOngoingSetMemberPair == null) && mOngoingSetMemberPair.equals(device);
|
||||
}
|
||||
|
||||
/**
|
||||
* In order to show the preference for the whole group, we always set the main device as the
|
||||
* first connected device in the coordinated set, and then switch the relationship of the main
|
||||
* device and member devices.
|
||||
*
|
||||
* @param newMainDevice the new Main device which is from the previous main device's member
|
||||
* list.
|
||||
*/
|
||||
public void switchRelationshipFromMemberToMain(CachedBluetoothDevice newMainDevice) {
|
||||
if (newMainDevice == null) {
|
||||
log("switchRelationshipFromMemberToMain: input is null");
|
||||
return;
|
||||
}
|
||||
log("switchRelationshipFromMemberToMain: CachedBluetoothDevice list: " + mCachedDevices);
|
||||
|
||||
final CachedBluetoothDevice finalNewMainDevice = newMainDevice;
|
||||
int newMainGroupId = newMainDevice.getGroupId();
|
||||
CachedBluetoothDevice oldMainDevice = mCachedDevices.stream()
|
||||
.filter(cachedDevice -> !cachedDevice.equals(finalNewMainDevice)
|
||||
&& cachedDevice.getGroupId() == newMainGroupId).findFirst().orElse(null);
|
||||
boolean hasMainDevice = oldMainDevice != null;
|
||||
Set<CachedBluetoothDevice> memberSet =
|
||||
hasMainDevice ? oldMainDevice.getMemberDevice() : null;
|
||||
boolean isMemberDevice = memberSet != null && memberSet.contains(newMainDevice);
|
||||
if (!hasMainDevice || !isMemberDevice) {
|
||||
log("switchRelationshipFromMemberToMain: "
|
||||
+ newMainDevice.getDevice().getAnonymizedAddress()
|
||||
+ " is not the member device.");
|
||||
return;
|
||||
}
|
||||
|
||||
mCachedDevices.remove(oldMainDevice);
|
||||
// When both LE Audio devices are disconnected, receiving member device
|
||||
// connection. To switch content and dispatch to notify UI change
|
||||
mBtManager.getEventManager().dispatchDeviceRemoved(oldMainDevice);
|
||||
|
||||
for (CachedBluetoothDevice memberDeviceItem : memberSet) {
|
||||
if (memberDeviceItem.equals(newMainDevice)) {
|
||||
continue;
|
||||
}
|
||||
newMainDevice.addMemberDevice(memberDeviceItem);
|
||||
}
|
||||
memberSet.clear();
|
||||
newMainDevice.addMemberDevice(oldMainDevice);
|
||||
|
||||
mCachedDevices.add(newMainDevice);
|
||||
// It is necessary to do remove and add for updating the mapping on
|
||||
// preference and device
|
||||
mBtManager.getEventManager().dispatchDeviceAdded(newMainDevice);
|
||||
log("switchRelationshipFromMemberToMain: After change, CachedBluetoothDevice list: "
|
||||
+ mCachedDevices);
|
||||
}
|
||||
|
||||
private void log(String msg) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, msg);
|
||||
|
||||
@@ -238,14 +238,10 @@ public class CsipDeviceManager {
|
||||
mainDevice.refresh();
|
||||
return true;
|
||||
} else {
|
||||
// When both LE Audio devices are disconnected, receiving member device
|
||||
// connection. To switch content and dispatch to notify UI change
|
||||
mBtManager.getEventManager().dispatchDeviceRemoved(mainDevice);
|
||||
mainDevice.switchMemberDeviceContent(cachedDevice);
|
||||
mainDevice.refresh();
|
||||
// It is necessary to do remove and add for updating the mapping on
|
||||
// preference and device
|
||||
mBtManager.getEventManager().dispatchDeviceAdded(mainDevice);
|
||||
final CachedBluetoothDeviceManager deviceManager =
|
||||
mBtManager.getCachedDeviceManager();
|
||||
deviceManager.switchRelationshipFromMemberToMain(cachedDevice);
|
||||
cachedDevice.refresh();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -266,14 +262,10 @@ public class CsipDeviceManager {
|
||||
for (CachedBluetoothDevice device: memberSet) {
|
||||
if (device.isConnected()) {
|
||||
log("set device: " + device + " as the main device");
|
||||
// Main device is disconnected and sub device is connected
|
||||
// To copy data from sub device to main device
|
||||
mBtManager.getEventManager().dispatchDeviceRemoved(cachedDevice);
|
||||
cachedDevice.switchMemberDeviceContent(device);
|
||||
cachedDevice.refresh();
|
||||
// It is necessary to do remove and add for updating the mapping on
|
||||
// preference and device
|
||||
mBtManager.getEventManager().dispatchDeviceAdded(cachedDevice);
|
||||
final CachedBluetoothDeviceManager deviceManager =
|
||||
mBtManager.getCachedDeviceManager();
|
||||
deviceManager.switchRelationshipFromMemberToMain(device);
|
||||
device.refresh();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -604,4 +604,87 @@ public class CachedBluetoothDeviceManagerTest {
|
||||
verify(mDevice2).setPhonebookAccessPermission(BluetoothDevice.ACCESS_ALLOWED);
|
||||
verify(mDevice2).createBond(BluetoothDevice.TRANSPORT_LE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void switchRelationshipFromMemberToMain_switchesMainDevice_switchesSuccessful() {
|
||||
doReturn(CAP_GROUP1).when(mCsipSetCoordinatorProfile).getGroupUuidMapByDevice(mDevice1);
|
||||
CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1);
|
||||
doReturn(CAP_GROUP1).when(mCsipSetCoordinatorProfile).getGroupUuidMapByDevice(mDevice2);
|
||||
doReturn(CAP_GROUP2).when(mCsipSetCoordinatorProfile).getGroupUuidMapByDevice(mDevice3);
|
||||
CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2);
|
||||
CachedBluetoothDevice cachedDevice3 = mCachedDeviceManager.addDevice(mDevice3);
|
||||
assertThat(mCachedDeviceManager.isSubDevice(mDevice1)).isFalse();
|
||||
assertThat(mCachedDeviceManager.isSubDevice(mDevice2)).isTrue();
|
||||
assertThat(mCachedDeviceManager.isSubDevice(mDevice3)).isFalse();
|
||||
assertThat(cachedDevice1.getMemberDevice().contains(cachedDevice2)).isTrue();
|
||||
|
||||
mCachedDeviceManager.switchRelationshipFromMemberToMain(cachedDevice2);
|
||||
|
||||
assertThat(mCachedDeviceManager.isSubDevice(mDevice1)).isTrue();
|
||||
assertThat(mCachedDeviceManager.isSubDevice(mDevice2)).isFalse();
|
||||
assertThat(mCachedDeviceManager.isSubDevice(mDevice3)).isFalse();
|
||||
assertThat(cachedDevice2.getMemberDevice().contains(cachedDevice1)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void switchRelationshipFromMemberToMain_moreMembersCase_switchesSuccessful() {
|
||||
doReturn(CAP_GROUP1).when(mCsipSetCoordinatorProfile).getGroupUuidMapByDevice(mDevice1);
|
||||
CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1);
|
||||
doReturn(CAP_GROUP1).when(mCsipSetCoordinatorProfile).getGroupUuidMapByDevice(mDevice2);
|
||||
doReturn(CAP_GROUP1).when(mCsipSetCoordinatorProfile).getGroupUuidMapByDevice(mDevice3);
|
||||
CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2);
|
||||
CachedBluetoothDevice cachedDevice3 = mCachedDeviceManager.addDevice(mDevice3);
|
||||
assertThat(cachedDevice1.getMemberDevice().contains(cachedDevice2)).isTrue();
|
||||
assertThat(cachedDevice1.getMemberDevice().contains(cachedDevice3)).isTrue();
|
||||
|
||||
mCachedDeviceManager.switchRelationshipFromMemberToMain(cachedDevice2);
|
||||
|
||||
assertThat(mCachedDeviceManager.isSubDevice(mDevice1)).isTrue();
|
||||
assertThat(mCachedDeviceManager.isSubDevice(mDevice2)).isFalse();
|
||||
assertThat(mCachedDeviceManager.isSubDevice(mDevice3)).isTrue();
|
||||
assertThat(cachedDevice2.getMemberDevice().contains(cachedDevice1)).isTrue();
|
||||
assertThat(cachedDevice2.getMemberDevice().contains(cachedDevice3)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void switchRelationshipFromMemberToMain_inputDeviceIsMainDevice_doesNotChangelist() {
|
||||
doReturn(CAP_GROUP1).when(mCsipSetCoordinatorProfile).getGroupUuidMapByDevice(mDevice1);
|
||||
CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1);
|
||||
doReturn(CAP_GROUP1).when(mCsipSetCoordinatorProfile).getGroupUuidMapByDevice(mDevice2);
|
||||
doReturn(CAP_GROUP1).when(mCsipSetCoordinatorProfile).getGroupUuidMapByDevice(mDevice3);
|
||||
CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2);
|
||||
CachedBluetoothDevice cachedDevice3 = mCachedDeviceManager.addDevice(mDevice3);
|
||||
Collection<CachedBluetoothDevice> devices = mCachedDeviceManager.getCachedDevicesCopy();
|
||||
assertThat(cachedDevice1.getMemberDevice().contains(cachedDevice2)).isTrue();
|
||||
assertThat(cachedDevice1.getMemberDevice().contains(cachedDevice3)).isTrue();
|
||||
|
||||
mCachedDeviceManager.switchRelationshipFromMemberToMain(cachedDevice1);
|
||||
|
||||
devices = mCachedDeviceManager.getCachedDevicesCopy();
|
||||
assertThat(devices).contains(cachedDevice1);
|
||||
assertThat(cachedDevice1.getMemberDevice().contains(cachedDevice2)).isTrue();
|
||||
assertThat(cachedDevice1.getMemberDevice().contains(cachedDevice3)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void switchRelationshipFromMemberToMain_inputDeviceNotInMemberList_doesNotChangelist() {
|
||||
doReturn(CAP_GROUP1).when(mCsipSetCoordinatorProfile).getGroupUuidMapByDevice(mDevice1);
|
||||
CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1);
|
||||
doReturn(CAP_GROUP1).when(mCsipSetCoordinatorProfile).getGroupUuidMapByDevice(mDevice2);
|
||||
doReturn(CAP_GROUP1).when(mCsipSetCoordinatorProfile).getGroupUuidMapByDevice(mDevice3);
|
||||
CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2);
|
||||
cachedDevice1.getMemberDevice().remove(cachedDevice2);
|
||||
CachedBluetoothDevice cachedDevice3 = mCachedDeviceManager.addDevice(mDevice3);
|
||||
Collection<CachedBluetoothDevice> devices = mCachedDeviceManager.getCachedDevicesCopy();
|
||||
|
||||
assertThat(cachedDevice1.getMemberDevice().contains(cachedDevice2)).isFalse();
|
||||
assertThat(cachedDevice1.getMemberDevice().contains(cachedDevice3)).isTrue();
|
||||
|
||||
mCachedDeviceManager.switchRelationshipFromMemberToMain(cachedDevice2);
|
||||
|
||||
devices = mCachedDeviceManager.getCachedDevicesCopy();
|
||||
assertThat(devices).contains(cachedDevice1);
|
||||
assertThat(cachedDevice1.getMemberDevice().contains(cachedDevice2)).isFalse();
|
||||
assertThat(cachedDevice1.getMemberDevice().contains(cachedDevice3)).isTrue();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1137,25 +1137,6 @@ public class CachedBluetoothDeviceTest {
|
||||
assertThat(mCachedDevice.mDrawableCache.size()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void switchMemberDeviceContent_switchMainDevice_switchesSuccessful() {
|
||||
mCachedDevice.mRssi = RSSI_1;
|
||||
mCachedDevice.mJustDiscovered = JUSTDISCOVERED_1;
|
||||
mSubCachedDevice.mRssi = RSSI_2;
|
||||
mSubCachedDevice.mJustDiscovered = JUSTDISCOVERED_2;
|
||||
mCachedDevice.addMemberDevice(mSubCachedDevice);
|
||||
|
||||
mCachedDevice.switchMemberDeviceContent(mSubCachedDevice);
|
||||
|
||||
assertThat(mCachedDevice.mRssi).isEqualTo(RSSI_2);
|
||||
assertThat(mCachedDevice.mJustDiscovered).isEqualTo(JUSTDISCOVERED_2);
|
||||
assertThat(mCachedDevice.mDevice).isEqualTo(mSubDevice);
|
||||
assertThat(mSubCachedDevice.mRssi).isEqualTo(RSSI_1);
|
||||
assertThat(mSubCachedDevice.mJustDiscovered).isEqualTo(JUSTDISCOVERED_1);
|
||||
assertThat(mSubCachedDevice.mDevice).isEqualTo(mDevice);
|
||||
assertThat(mCachedDevice.getMemberDevice().contains(mSubCachedDevice)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isConnectedHearingAidDevice_isConnectedAshaHearingAidDevice_returnTrue() {
|
||||
when(mProfileManager.getHearingAidProfile()).thenReturn(mHearingAidProfile);
|
||||
|
||||
Reference in New Issue
Block a user