Loading packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java +15 −0 Original line number Diff line number Diff line Loading @@ -233,7 +233,22 @@ public class BluetoothEventManager { @Nullable CachedBluetoothDevice activeDevice, int bluetoothProfile) { for (CachedBluetoothDevice cachedDevice : mDeviceManager.getCachedDevicesCopy()) { Set<CachedBluetoothDevice> memberSet = cachedDevice.getMemberDevice(); boolean isActive = Objects.equals(cachedDevice, activeDevice); if (!isActive && !memberSet.isEmpty()) { for (CachedBluetoothDevice memberCachedDevice : memberSet) { isActive = Objects.equals(memberCachedDevice, activeDevice); if (isActive) { Log.d(TAG, "The active device is the member device " + activeDevice.getDevice().getAnonymizedAddress() + ". change activeDevice as main device " + cachedDevice.getDevice().getAnonymizedAddress()); activeDevice = cachedDevice; break; } } } cachedDevice.onActiveDeviceChanged(isActive, bluetoothProfile); } for (BluetoothCallback callback : mCallbacks) { Loading packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothEventManagerTest.java +44 −1 Original line number Diff line number Diff line Loading @@ -70,10 +70,14 @@ public class BluetoothEventManagerTest { @Mock private HearingAidProfile mHearingAidProfile; @Mock private LeAudioProfile mLeAudioProfile; @Mock private BluetoothDevice mDevice1; @Mock private BluetoothDevice mDevice2; @Mock private BluetoothDevice mDevice3; @Mock private LocalBluetoothProfileManager mLocalProfileManager; @Mock private BluetoothUtils.ErrorListener mErrorListener; Loading @@ -83,6 +87,7 @@ public class BluetoothEventManagerTest { private BluetoothEventManager mBluetoothEventManager; private CachedBluetoothDevice mCachedDevice1; private CachedBluetoothDevice mCachedDevice2; private CachedBluetoothDevice mCachedDevice3; @Before public void setUp() { Loading @@ -95,9 +100,10 @@ public class BluetoothEventManagerTest { when(mHfpProfile.isProfileReady()).thenReturn(true); when(mA2dpProfile.isProfileReady()).thenReturn(true); when(mHearingAidProfile.isProfileReady()).thenReturn(true); when(mLeAudioProfile.isProfileReady()).thenReturn(true); mCachedDevice1 = new CachedBluetoothDevice(mContext, mLocalProfileManager, mDevice1); mCachedDevice2 = new CachedBluetoothDevice(mContext, mLocalProfileManager, mDevice2); mCachedDevice3 = new CachedBluetoothDevice(mContext, mLocalProfileManager, mDevice3); BluetoothUtils.setErrorListener(mErrorListener); } Loading Loading @@ -293,6 +299,43 @@ public class BluetoothEventManagerTest { assertThat(mCachedDevice2.isActiveDevice(BluetoothProfile.HEADSET)).isFalse(); } @Test public void dispatchActiveDeviceChanged_connectedMemberDevices_activeDeviceChanged() { final List<CachedBluetoothDevice> cachedDevices = new ArrayList<>(); cachedDevices.add(mCachedDevice1); cachedDevices.add(mCachedDevice2); int group1 = 1; when(mDevice3.getAddress()).thenReturn("testAddress3"); mCachedDevice1.setGroupId(group1); mCachedDevice3.setGroupId(group1); mCachedDevice1.addMemberDevice(mCachedDevice3); when(mDevice1.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); when(mDevice2.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); when(mDevice3.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); when(mCachedDeviceManager.getCachedDevicesCopy()).thenReturn(cachedDevices); // Connect device1 and device3 for LE and device2 for A2DP and HFP mCachedDevice1.onProfileStateChanged(mLeAudioProfile, BluetoothProfile.STATE_CONNECTED); mCachedDevice3.onProfileStateChanged(mLeAudioProfile, BluetoothProfile.STATE_CONNECTED); mCachedDevice2.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_CONNECTED); mCachedDevice2.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED); // Verify that both devices are connected and none is Active assertThat(mCachedDevice1.isActiveDevice(BluetoothProfile.LE_AUDIO)).isFalse(); assertThat(mCachedDevice2.isActiveDevice(BluetoothProfile.A2DP)).isFalse(); assertThat(mCachedDevice2.isActiveDevice(BluetoothProfile.HEADSET)).isFalse(); assertThat(mCachedDevice3.isActiveDevice(BluetoothProfile.LE_AUDIO)).isFalse(); // The member device is active. mBluetoothEventManager.dispatchActiveDeviceChanged(mCachedDevice3, BluetoothProfile.LE_AUDIO); // The main device is active since the member is active. assertThat(mCachedDevice1.isActiveDevice(BluetoothProfile.LE_AUDIO)).isTrue(); } /** * Test to verify onActiveDeviceChanged() with A2DP and Hearing Aid. */ Loading Loading
packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java +15 −0 Original line number Diff line number Diff line Loading @@ -233,7 +233,22 @@ public class BluetoothEventManager { @Nullable CachedBluetoothDevice activeDevice, int bluetoothProfile) { for (CachedBluetoothDevice cachedDevice : mDeviceManager.getCachedDevicesCopy()) { Set<CachedBluetoothDevice> memberSet = cachedDevice.getMemberDevice(); boolean isActive = Objects.equals(cachedDevice, activeDevice); if (!isActive && !memberSet.isEmpty()) { for (CachedBluetoothDevice memberCachedDevice : memberSet) { isActive = Objects.equals(memberCachedDevice, activeDevice); if (isActive) { Log.d(TAG, "The active device is the member device " + activeDevice.getDevice().getAnonymizedAddress() + ". change activeDevice as main device " + cachedDevice.getDevice().getAnonymizedAddress()); activeDevice = cachedDevice; break; } } } cachedDevice.onActiveDeviceChanged(isActive, bluetoothProfile); } for (BluetoothCallback callback : mCallbacks) { Loading
packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothEventManagerTest.java +44 −1 Original line number Diff line number Diff line Loading @@ -70,10 +70,14 @@ public class BluetoothEventManagerTest { @Mock private HearingAidProfile mHearingAidProfile; @Mock private LeAudioProfile mLeAudioProfile; @Mock private BluetoothDevice mDevice1; @Mock private BluetoothDevice mDevice2; @Mock private BluetoothDevice mDevice3; @Mock private LocalBluetoothProfileManager mLocalProfileManager; @Mock private BluetoothUtils.ErrorListener mErrorListener; Loading @@ -83,6 +87,7 @@ public class BluetoothEventManagerTest { private BluetoothEventManager mBluetoothEventManager; private CachedBluetoothDevice mCachedDevice1; private CachedBluetoothDevice mCachedDevice2; private CachedBluetoothDevice mCachedDevice3; @Before public void setUp() { Loading @@ -95,9 +100,10 @@ public class BluetoothEventManagerTest { when(mHfpProfile.isProfileReady()).thenReturn(true); when(mA2dpProfile.isProfileReady()).thenReturn(true); when(mHearingAidProfile.isProfileReady()).thenReturn(true); when(mLeAudioProfile.isProfileReady()).thenReturn(true); mCachedDevice1 = new CachedBluetoothDevice(mContext, mLocalProfileManager, mDevice1); mCachedDevice2 = new CachedBluetoothDevice(mContext, mLocalProfileManager, mDevice2); mCachedDevice3 = new CachedBluetoothDevice(mContext, mLocalProfileManager, mDevice3); BluetoothUtils.setErrorListener(mErrorListener); } Loading Loading @@ -293,6 +299,43 @@ public class BluetoothEventManagerTest { assertThat(mCachedDevice2.isActiveDevice(BluetoothProfile.HEADSET)).isFalse(); } @Test public void dispatchActiveDeviceChanged_connectedMemberDevices_activeDeviceChanged() { final List<CachedBluetoothDevice> cachedDevices = new ArrayList<>(); cachedDevices.add(mCachedDevice1); cachedDevices.add(mCachedDevice2); int group1 = 1; when(mDevice3.getAddress()).thenReturn("testAddress3"); mCachedDevice1.setGroupId(group1); mCachedDevice3.setGroupId(group1); mCachedDevice1.addMemberDevice(mCachedDevice3); when(mDevice1.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); when(mDevice2.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); when(mDevice3.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); when(mCachedDeviceManager.getCachedDevicesCopy()).thenReturn(cachedDevices); // Connect device1 and device3 for LE and device2 for A2DP and HFP mCachedDevice1.onProfileStateChanged(mLeAudioProfile, BluetoothProfile.STATE_CONNECTED); mCachedDevice3.onProfileStateChanged(mLeAudioProfile, BluetoothProfile.STATE_CONNECTED); mCachedDevice2.onProfileStateChanged(mA2dpProfile, BluetoothProfile.STATE_CONNECTED); mCachedDevice2.onProfileStateChanged(mHfpProfile, BluetoothProfile.STATE_CONNECTED); // Verify that both devices are connected and none is Active assertThat(mCachedDevice1.isActiveDevice(BluetoothProfile.LE_AUDIO)).isFalse(); assertThat(mCachedDevice2.isActiveDevice(BluetoothProfile.A2DP)).isFalse(); assertThat(mCachedDevice2.isActiveDevice(BluetoothProfile.HEADSET)).isFalse(); assertThat(mCachedDevice3.isActiveDevice(BluetoothProfile.LE_AUDIO)).isFalse(); // The member device is active. mBluetoothEventManager.dispatchActiveDeviceChanged(mCachedDevice3, BluetoothProfile.LE_AUDIO); // The main device is active since the member is active. assertThat(mCachedDevice1.isActiveDevice(BluetoothProfile.LE_AUDIO)).isTrue(); } /** * Test to verify onActiveDeviceChanged() with A2DP and Hearing Aid. */ Loading