From 92fb2199d9e258b24917abaf2b3859bf612f2183 Mon Sep 17 00:00:00 2001 From: Tim Peng Date: Tue, 31 Mar 2020 11:34:20 +0800 Subject: [PATCH] No feedback when attempting to transfer to an unpowered BT device -Set transfering state when trying to connect -Reset to onTransferBluetoothDevice when failing connecting -Add test cases Bug: 152606143 Test: make -j50 RunSettingsLibRoboTests Change-Id: Ifc4cb16a5d7d2b2c85b1171aa070651a5feaa4e2 --- .../settingslib/media/LocalMediaManager.java | 10 ++++++++++ .../media/LocalMediaManagerTest.java | 20 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java index fb8a0b7f63ca6..5006e85a3fa2a 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java @@ -146,6 +146,7 @@ public class LocalMediaManager implements BluetoothCallback { ((BluetoothMediaDevice) device).getCachedDevice(); if (!cachedDevice.isConnected() && !cachedDevice.isBusy()) { mOnTransferBluetoothDevice = connectDevice; + device.setState(MediaDeviceState.STATE_CONNECTING); cachedDevice.connect(); return; } @@ -394,6 +395,7 @@ public class LocalMediaManager implements BluetoothCallback { dispatchDeviceListUpdate(); if (mOnTransferBluetoothDevice != null && mOnTransferBluetoothDevice.isConnected()) { connectDevice(mOnTransferBluetoothDevice); + mOnTransferBluetoothDevice.setState(MediaDeviceState.STATE_CONNECTED); mOnTransferBluetoothDevice = null; } } @@ -539,6 +541,14 @@ public class LocalMediaManager implements BluetoothCallback { @Override public void onDeviceAttributesChanged() { + if (mOnTransferBluetoothDevice != null + && !((BluetoothMediaDevice) mOnTransferBluetoothDevice).getCachedDevice() + .isBusy() + && !mOnTransferBluetoothDevice.isConnected()) { + // Failed to connect + mOnTransferBluetoothDevice.setState(MediaDeviceState.STATE_DISCONNECTED); + mOnTransferBluetoothDevice = null; + } dispatchDeviceAttributesChanged(); } } 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 1c690724b1c1d..bbf9e5e3841cb 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 @@ -463,6 +463,26 @@ public class LocalMediaManagerTest { verify(mCallback).onDeviceAttributesChanged(); } + @Test + public void onDeviceAttributesChanged_failingTransferring_shouldResetState() { + 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); + + mLocalMediaManager.mDeviceAttributeChangeCallback.onDeviceAttributesChanged(); + verify(device).setState(LocalMediaManager.MediaDeviceState.STATE_DISCONNECTED); + } + @Test public void onRequestFailed_checkDevicesState() { mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice1);