Loading android/app/src/com/android/bluetooth/btservice/ActiveDeviceManager.java +8 −1 Original line number Diff line number Diff line Loading @@ -800,9 +800,16 @@ public class ActiveDeviceManager implements AdapterService.BluetoothStateCallbac + device + ", mLeAudioActiveDevice=" + mLeAudioActiveDevice); if (device != null && !mLeAudioConnectedDevices.contains(device)) { mLeAudioConnectedDevices.add(device); Log.w( TAG, "Failed to activate device " + device + ". Reason: Device is not connected."); return; } // Just assign locally the new value if (device != null && !Objects.equals(mLeAudioActiveDevice, device)) { if (!Utils.isDualModeAudioEnabled()) { Loading android/app/tests/unit/src/com/android/bluetooth/btservice/ActiveDeviceManagerTest.java +25 −4 Original line number Diff line number Diff line Loading @@ -1070,8 +1070,9 @@ public class ActiveDeviceManagerTest { verify(mA2dpService, atLeastOnce()).setActiveDevice(mA2dpHeadsetDevice); verify(mHeadsetService, atLeastOnce()).setActiveDevice(mA2dpHeadsetDevice); leAudioActiveDeviceChanged(mLeAudioDevice); leAudioConnected(mLeAudioDevice); mTestLooper.dispatchAll(); verify(mLeAudioService).setActiveDevice(mLeAudioDevice); verify(mA2dpService).removeActiveDevice(false); verify(mHeadsetService).setActiveDevice(isNull()); } Loading @@ -1079,8 +1080,9 @@ public class ActiveDeviceManagerTest { /** An LE Audio is connected. Then a combo (A2DP + Headset) device is connected. */ @Test public void leAudioActive_setA2dpAndHeadsetActive() { leAudioActiveDeviceChanged(mLeAudioDevice); leAudioConnected(mLeAudioDevice); mTestLooper.dispatchAll(); verify(mLeAudioService).setActiveDevice(mLeAudioDevice); verify(mHeadsetService).setActiveDevice(null); a2dpConnected(mA2dpHeadsetDevice, true); Loading @@ -1093,8 +1095,9 @@ public class ActiveDeviceManagerTest { /** An LE Audio is connected. Then an A2DP active device is explicitly set. */ @Test public void leAudioActive_setA2dpActiveExplicitly() { leAudioActiveDeviceChanged(mLeAudioDevice); leAudioConnected(mLeAudioDevice); mTestLooper.dispatchAll(); verify(mLeAudioService).setActiveDevice(mLeAudioDevice); verify(mHeadsetService).setActiveDevice(null); a2dpConnected(mA2dpDevice, false); Loading @@ -1110,8 +1113,9 @@ public class ActiveDeviceManagerTest { /** An LE Audio is connected. Then a Headset active device is explicitly set. */ @Test public void leAudioActive_setHeadsetActiveExplicitly() { leAudioActiveDeviceChanged(mLeAudioDevice); leAudioConnected(mLeAudioDevice); mTestLooper.dispatchAll(); verify(mLeAudioService).setActiveDevice(mLeAudioDevice); verify(mHeadsetService).setActiveDevice(null); headsetConnected(mHeadsetDevice, false); Loading Loading @@ -1704,6 +1708,23 @@ public class ActiveDeviceManagerTest { verify(mLeAudioService, never()).setActiveDevice(any()); } /** * Verifies that a Le Audio Unicast device is not treated as connected when an active device * change is received after the device has been disconnected. */ @Test public void leAudioActiveDeviceChangeBeforeConnectedEvent() { /* Active device change comes after disconnection (device considered as not connected) */ leAudioActiveDeviceChanged(mLeAudioDevice); verify(mLeAudioService, never()).setActiveDevice(mLeAudioDevice); mTestLooper.dispatchAll(); /* Device is connected back */ leAudioConnected(mLeAudioDevice); mTestLooper.dispatchAll(); verify(mLeAudioService).setActiveDevice(mLeAudioDevice); } /** Helper to indicate A2dp connected for a device. */ private void a2dpConnected(BluetoothDevice device, boolean supportHfp) { mDatabaseManager.setProfileConnectionPolicy( Loading Loading
android/app/src/com/android/bluetooth/btservice/ActiveDeviceManager.java +8 −1 Original line number Diff line number Diff line Loading @@ -800,9 +800,16 @@ public class ActiveDeviceManager implements AdapterService.BluetoothStateCallbac + device + ", mLeAudioActiveDevice=" + mLeAudioActiveDevice); if (device != null && !mLeAudioConnectedDevices.contains(device)) { mLeAudioConnectedDevices.add(device); Log.w( TAG, "Failed to activate device " + device + ". Reason: Device is not connected."); return; } // Just assign locally the new value if (device != null && !Objects.equals(mLeAudioActiveDevice, device)) { if (!Utils.isDualModeAudioEnabled()) { Loading
android/app/tests/unit/src/com/android/bluetooth/btservice/ActiveDeviceManagerTest.java +25 −4 Original line number Diff line number Diff line Loading @@ -1070,8 +1070,9 @@ public class ActiveDeviceManagerTest { verify(mA2dpService, atLeastOnce()).setActiveDevice(mA2dpHeadsetDevice); verify(mHeadsetService, atLeastOnce()).setActiveDevice(mA2dpHeadsetDevice); leAudioActiveDeviceChanged(mLeAudioDevice); leAudioConnected(mLeAudioDevice); mTestLooper.dispatchAll(); verify(mLeAudioService).setActiveDevice(mLeAudioDevice); verify(mA2dpService).removeActiveDevice(false); verify(mHeadsetService).setActiveDevice(isNull()); } Loading @@ -1079,8 +1080,9 @@ public class ActiveDeviceManagerTest { /** An LE Audio is connected. Then a combo (A2DP + Headset) device is connected. */ @Test public void leAudioActive_setA2dpAndHeadsetActive() { leAudioActiveDeviceChanged(mLeAudioDevice); leAudioConnected(mLeAudioDevice); mTestLooper.dispatchAll(); verify(mLeAudioService).setActiveDevice(mLeAudioDevice); verify(mHeadsetService).setActiveDevice(null); a2dpConnected(mA2dpHeadsetDevice, true); Loading @@ -1093,8 +1095,9 @@ public class ActiveDeviceManagerTest { /** An LE Audio is connected. Then an A2DP active device is explicitly set. */ @Test public void leAudioActive_setA2dpActiveExplicitly() { leAudioActiveDeviceChanged(mLeAudioDevice); leAudioConnected(mLeAudioDevice); mTestLooper.dispatchAll(); verify(mLeAudioService).setActiveDevice(mLeAudioDevice); verify(mHeadsetService).setActiveDevice(null); a2dpConnected(mA2dpDevice, false); Loading @@ -1110,8 +1113,9 @@ public class ActiveDeviceManagerTest { /** An LE Audio is connected. Then a Headset active device is explicitly set. */ @Test public void leAudioActive_setHeadsetActiveExplicitly() { leAudioActiveDeviceChanged(mLeAudioDevice); leAudioConnected(mLeAudioDevice); mTestLooper.dispatchAll(); verify(mLeAudioService).setActiveDevice(mLeAudioDevice); verify(mHeadsetService).setActiveDevice(null); headsetConnected(mHeadsetDevice, false); Loading Loading @@ -1704,6 +1708,23 @@ public class ActiveDeviceManagerTest { verify(mLeAudioService, never()).setActiveDevice(any()); } /** * Verifies that a Le Audio Unicast device is not treated as connected when an active device * change is received after the device has been disconnected. */ @Test public void leAudioActiveDeviceChangeBeforeConnectedEvent() { /* Active device change comes after disconnection (device considered as not connected) */ leAudioActiveDeviceChanged(mLeAudioDevice); verify(mLeAudioService, never()).setActiveDevice(mLeAudioDevice); mTestLooper.dispatchAll(); /* Device is connected back */ leAudioConnected(mLeAudioDevice); mTestLooper.dispatchAll(); verify(mLeAudioService).setActiveDevice(mLeAudioDevice); } /** Helper to indicate A2dp connected for a device. */ private void a2dpConnected(BluetoothDevice device, boolean supportHfp) { mDatabaseManager.setProfileConnectionPolicy( Loading