Loading packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java +6 −0 Original line number Diff line number Diff line Loading @@ -367,8 +367,14 @@ public class BluetoothEventManager { if (bondState == BluetoothDevice.BOND_NONE) { // Check if we need to remove other Coordinated set member devices / Hearing Aid // devices if (DEBUG) { Log.d(TAG, "BondStateChangedHandler: cachedDevice.getGroupId() = " + cachedDevice.getGroupId() + ", cachedDevice.getHiSyncId()= " + cachedDevice.getHiSyncId()); } if (cachedDevice.getGroupId() != BluetoothCsipSetCoordinator.GROUP_ID_INVALID || cachedDevice.getHiSyncId() != BluetoothHearingAid.HI_SYNC_ID_INVALID) { Log.d(TAG, "BondStateChangedHandler: Start onDeviceUnpaired"); mDeviceManager.onDeviceUnpaired(cachedDevice); } int reason = intent.getIntExtra(BluetoothDevice.EXTRA_UNBOND_REASON, Loading packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java +4 −6 Original line number Diff line number Diff line Loading @@ -1431,11 +1431,10 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> * first connected device in the coordinated set, and then switch the content of the main * device and member devices. * * @param prevMainDevice the previous Main device, it will be added into the member device set. * @param newMainDevice the new Main device, it will be removed from the member device set. * @param newMainDevice the new Main device which is from the previous main device's member * list. */ public void switchMemberDeviceContent(CachedBluetoothDevice prevMainDevice, CachedBluetoothDevice newMainDevice) { public void switchMemberDeviceContent(CachedBluetoothDevice newMainDevice) { // Backup from main device final BluetoothDevice tmpDevice = mDevice; final short tmpRssi = mRssi; Loading @@ -1444,8 +1443,7 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> mDevice = newMainDevice.mDevice; mRssi = newMainDevice.mRssi; mJustDiscovered = newMainDevice.mJustDiscovered; addMemberDevice(prevMainDevice); mMemberDevices.remove(newMainDevice); // Set sub device from backup newMainDevice.mDevice = tmpDevice; newMainDevice.mRssi = tmpRssi; Loading packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java +3 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.settingslib.bluetooth; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothCsipSetCoordinator; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothProfile; import android.content.Context; Loading Loading @@ -317,12 +318,14 @@ public class CachedBluetoothDeviceManager { } public synchronized void onDeviceUnpaired(CachedBluetoothDevice device) { device.setGroupId(BluetoothCsipSetCoordinator.GROUP_ID_INVALID); CachedBluetoothDevice mainDevice = mCsipDeviceManager.findMainDevice(device); final Set<CachedBluetoothDevice> memberDevices = device.getMemberDevice(); if (!memberDevices.isEmpty()) { // Main device is unpaired, to unpair the member device for (CachedBluetoothDevice memberDevice : memberDevices) { memberDevice.unpair(); memberDevice.setGroupId(BluetoothCsipSetCoordinator.GROUP_ID_INVALID); device.removeMemberDevice(memberDevice); } } else if (mainDevice != null) { Loading packages/SettingsLib/src/com/android/settingslib/bluetooth/CsipDeviceManager.java +3 −2 Original line number Diff line number Diff line Loading @@ -231,7 +231,7 @@ public class CsipDeviceManager { // 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(mainDevice, cachedDevice); mainDevice.switchMemberDeviceContent(cachedDevice); mainDevice.refresh(); // It is necessary to do remove and add for updating the mapping on // preference and device Loading @@ -255,10 +255,11 @@ 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); cachedDevice.switchMemberDeviceContent(device); cachedDevice.refresh(); // It is necessary to do remove and add for updating the mapping on // preference and device Loading packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManagerTest.java +12 −1 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.bluetooth.BluetoothClass; import android.bluetooth.BluetoothCsipSetCoordinator; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothUuid; import android.content.Context; Loading Loading @@ -518,7 +519,8 @@ public class CachedBluetoothDeviceManagerTest { */ @Test public void onDeviceUnpaired_unpairCsipMainDevice() { when(mDevice1.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); when(mDevice1.getBondState()).thenReturn(BluetoothDevice.BOND_NONE); when(mDevice2.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2); cachedDevice1.setGroupId(1); Loading @@ -527,7 +529,12 @@ public class CachedBluetoothDeviceManagerTest { // Call onDeviceUnpaired for the one in mCachedDevices. mCachedDeviceManager.onDeviceUnpaired(cachedDevice1); verify(mDevice2).removeBond(); assertThat(cachedDevice1.getGroupId()).isEqualTo( BluetoothCsipSetCoordinator.GROUP_ID_INVALID); assertThat(cachedDevice2.getGroupId()).isEqualTo( BluetoothCsipSetCoordinator.GROUP_ID_INVALID); } /** Loading @@ -536,6 +543,7 @@ public class CachedBluetoothDeviceManagerTest { @Test public void onDeviceUnpaired_unpairCsipSubDevice() { when(mDevice1.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); when(mDevice2.getBondState()).thenReturn(BluetoothDevice.BOND_NONE); CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2); cachedDevice1.setGroupId(1); Loading @@ -544,7 +552,10 @@ public class CachedBluetoothDeviceManagerTest { // Call onDeviceUnpaired for the one in mCachedDevices. mCachedDeviceManager.onDeviceUnpaired(cachedDevice2); verify(mDevice1).removeBond(); assertThat(cachedDevice2.getGroupId()).isEqualTo( BluetoothCsipSetCoordinator.GROUP_ID_INVALID); } /** Loading Loading
packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java +6 −0 Original line number Diff line number Diff line Loading @@ -367,8 +367,14 @@ public class BluetoothEventManager { if (bondState == BluetoothDevice.BOND_NONE) { // Check if we need to remove other Coordinated set member devices / Hearing Aid // devices if (DEBUG) { Log.d(TAG, "BondStateChangedHandler: cachedDevice.getGroupId() = " + cachedDevice.getGroupId() + ", cachedDevice.getHiSyncId()= " + cachedDevice.getHiSyncId()); } if (cachedDevice.getGroupId() != BluetoothCsipSetCoordinator.GROUP_ID_INVALID || cachedDevice.getHiSyncId() != BluetoothHearingAid.HI_SYNC_ID_INVALID) { Log.d(TAG, "BondStateChangedHandler: Start onDeviceUnpaired"); mDeviceManager.onDeviceUnpaired(cachedDevice); } int reason = intent.getIntExtra(BluetoothDevice.EXTRA_UNBOND_REASON, Loading
packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java +4 −6 Original line number Diff line number Diff line Loading @@ -1431,11 +1431,10 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> * first connected device in the coordinated set, and then switch the content of the main * device and member devices. * * @param prevMainDevice the previous Main device, it will be added into the member device set. * @param newMainDevice the new Main device, it will be removed from the member device set. * @param newMainDevice the new Main device which is from the previous main device's member * list. */ public void switchMemberDeviceContent(CachedBluetoothDevice prevMainDevice, CachedBluetoothDevice newMainDevice) { public void switchMemberDeviceContent(CachedBluetoothDevice newMainDevice) { // Backup from main device final BluetoothDevice tmpDevice = mDevice; final short tmpRssi = mRssi; Loading @@ -1444,8 +1443,7 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> mDevice = newMainDevice.mDevice; mRssi = newMainDevice.mRssi; mJustDiscovered = newMainDevice.mJustDiscovered; addMemberDevice(prevMainDevice); mMemberDevices.remove(newMainDevice); // Set sub device from backup newMainDevice.mDevice = tmpDevice; newMainDevice.mRssi = tmpRssi; Loading
packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java +3 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.settingslib.bluetooth; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothCsipSetCoordinator; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothProfile; import android.content.Context; Loading Loading @@ -317,12 +318,14 @@ public class CachedBluetoothDeviceManager { } public synchronized void onDeviceUnpaired(CachedBluetoothDevice device) { device.setGroupId(BluetoothCsipSetCoordinator.GROUP_ID_INVALID); CachedBluetoothDevice mainDevice = mCsipDeviceManager.findMainDevice(device); final Set<CachedBluetoothDevice> memberDevices = device.getMemberDevice(); if (!memberDevices.isEmpty()) { // Main device is unpaired, to unpair the member device for (CachedBluetoothDevice memberDevice : memberDevices) { memberDevice.unpair(); memberDevice.setGroupId(BluetoothCsipSetCoordinator.GROUP_ID_INVALID); device.removeMemberDevice(memberDevice); } } else if (mainDevice != null) { Loading
packages/SettingsLib/src/com/android/settingslib/bluetooth/CsipDeviceManager.java +3 −2 Original line number Diff line number Diff line Loading @@ -231,7 +231,7 @@ public class CsipDeviceManager { // 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(mainDevice, cachedDevice); mainDevice.switchMemberDeviceContent(cachedDevice); mainDevice.refresh(); // It is necessary to do remove and add for updating the mapping on // preference and device Loading @@ -255,10 +255,11 @@ 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); cachedDevice.switchMemberDeviceContent(device); cachedDevice.refresh(); // It is necessary to do remove and add for updating the mapping on // preference and device Loading
packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManagerTest.java +12 −1 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.bluetooth.BluetoothClass; import android.bluetooth.BluetoothCsipSetCoordinator; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothUuid; import android.content.Context; Loading Loading @@ -518,7 +519,8 @@ public class CachedBluetoothDeviceManagerTest { */ @Test public void onDeviceUnpaired_unpairCsipMainDevice() { when(mDevice1.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); when(mDevice1.getBondState()).thenReturn(BluetoothDevice.BOND_NONE); when(mDevice2.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2); cachedDevice1.setGroupId(1); Loading @@ -527,7 +529,12 @@ public class CachedBluetoothDeviceManagerTest { // Call onDeviceUnpaired for the one in mCachedDevices. mCachedDeviceManager.onDeviceUnpaired(cachedDevice1); verify(mDevice2).removeBond(); assertThat(cachedDevice1.getGroupId()).isEqualTo( BluetoothCsipSetCoordinator.GROUP_ID_INVALID); assertThat(cachedDevice2.getGroupId()).isEqualTo( BluetoothCsipSetCoordinator.GROUP_ID_INVALID); } /** Loading @@ -536,6 +543,7 @@ public class CachedBluetoothDeviceManagerTest { @Test public void onDeviceUnpaired_unpairCsipSubDevice() { when(mDevice1.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); when(mDevice2.getBondState()).thenReturn(BluetoothDevice.BOND_NONE); CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2); cachedDevice1.setGroupId(1); Loading @@ -544,7 +552,10 @@ public class CachedBluetoothDeviceManagerTest { // Call onDeviceUnpaired for the one in mCachedDevices. mCachedDeviceManager.onDeviceUnpaired(cachedDevice2); verify(mDevice1).removeBond(); assertThat(cachedDevice2.getGroupId()).isEqualTo( BluetoothCsipSetCoordinator.GROUP_ID_INVALID); } /** Loading