diff options
| -rw-r--r-- | packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java | 7 | ||||
| -rw-r--r-- | packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java | 33 |
2 files changed, 37 insertions, 3 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java index b1300a97a324..922caeb0a817 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java @@ -66,6 +66,7 @@ public class LocalMediaManager implements BluetoothCallback { private LocalBluetoothManager mLocalBluetoothManager; private InfoMediaManager mInfoMediaManager; private String mPackageName; + private MediaDevice mOnTransferBluetoothDevice; @VisibleForTesting List<MediaDevice> mMediaDevices = new ArrayList<>(); @@ -143,7 +144,7 @@ public class LocalMediaManager implements BluetoothCallback { final CachedBluetoothDevice cachedDevice = ((BluetoothMediaDevice) device).getCachedDevice(); if (!cachedDevice.isConnected() && !cachedDevice.isBusy()) { - device.setState(MediaDeviceState.STATE_CONNECTING); + mOnTransferBluetoothDevice = connectDevice; cachedDevice.connect(); return; } @@ -389,6 +390,10 @@ public class LocalMediaManager implements BluetoothCallback { mCurrentConnectedDevice = infoMediaDevice != null ? infoMediaDevice : updateCurrentConnectedDevice(); dispatchDeviceListUpdate(); + if (mOnTransferBluetoothDevice != null && mOnTransferBluetoothDevice.isConnected()) { + connectDevice(mOnTransferBluetoothDevice); + mOnTransferBluetoothDevice = null; + } } private List<MediaDevice> buildDisconnectedBluetoothDevice() { diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java index 6b3a97f8c8de..4c61ef504090 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java @@ -23,6 +23,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -107,8 +108,8 @@ public class LocalMediaManagerTest { when(mLocalProfileManager.getA2dpProfile()).thenReturn(mA2dpProfile); when(mLocalProfileManager.getHearingAidProfile()).thenReturn(mHapProfile); - mInfoMediaDevice1 = new InfoMediaDevice(mContext, mMediaRouter2Manager, mRouteInfo1, - TEST_PACKAGE_NAME); + mInfoMediaDevice1 = spy(new InfoMediaDevice(mContext, mMediaRouter2Manager, mRouteInfo1, + TEST_PACKAGE_NAME)); mInfoMediaDevice2 = new InfoMediaDevice(mContext, mMediaRouter2Manager, mRouteInfo2, TEST_PACKAGE_NAME); mLocalMediaManager = new LocalMediaManager(mContext, mLocalBluetoothManager, @@ -565,6 +566,34 @@ public class LocalMediaManagerTest { } @Test + public void onDeviceListAdded_transferToDisconnectedBluetooth_verifyConnectDevice() { + final List<MediaDevice> devices = new ArrayList<>(); + final MediaDevice currentDevice = mock(MediaDevice.class); + final MediaDevice device = mock(BluetoothMediaDevice.class); + final CachedBluetoothDevice cachedDevice = mock(CachedBluetoothDevice.class); + mLocalMediaManager.mMediaDevices.add(device); + mLocalMediaManager.mMediaDevices.add(currentDevice); + + when(device.getId()).thenReturn(TEST_DEVICE_ID_1); + when(currentDevice.getId()).thenReturn(TEST_CURRENT_DEVICE_ID); + when(((BluetoothMediaDevice) device).getCachedDevice()).thenReturn(cachedDevice); + when(cachedDevice.isConnected()).thenReturn(false); + when(cachedDevice.isBusy()).thenReturn(false); + + mLocalMediaManager.registerCallback(mCallback); + mLocalMediaManager.connectDevice(device); + + verify(cachedDevice).connect(); + when(device.isConnected()).thenReturn(true); + mLocalMediaManager.mCurrentConnectedDevice = currentDevice; + devices.add(mInfoMediaDevice1); + devices.add(currentDevice); + mLocalMediaManager.mMediaDeviceCallback.onDeviceListAdded(devices); + + verify(mInfoMediaDevice1).connect(); + } + + @Test public void onRequestFailed_shouldDispatchOnRequestFailed() { mLocalMediaManager.registerCallback(mCallback); |