From 33914e738d05fbba5fdee5f900ad32ea8149b474 Mon Sep 17 00:00:00 2001 From: Tim Peng Date: Wed, 27 May 2020 16:40:12 +0800 Subject: [PATCH] Improve feedback when failing transferring a disconnected device -Set "failed" string for subtitle -Add test case Bug: 157139936 Test: make -j42 RunSettingsRoboTests Change-Id: I1fcd51f954a63cbc9ac0e573e5a8bb43cca6f087 --- .../settings/media/MediaOutputSlice.java | 9 ++++- .../settings/media/MediaOutputSliceTest.java | 38 +++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/media/MediaOutputSlice.java b/src/com/android/settings/media/MediaOutputSlice.java index 773013e4d9e..59bfac2f81b 100644 --- a/src/com/android/settings/media/MediaOutputSlice.java +++ b/src/com/android/settings/media/MediaOutputSlice.java @@ -287,11 +287,16 @@ public class MediaOutputSlice implements CustomSliceable { if (device.getDeviceType() == MediaDevice.MediaDeviceType.TYPE_BLUETOOTH_DEVICE && !device.isConnected()) { - if (device.getState() == LocalMediaManager.MediaDeviceState.STATE_CONNECTING) { + final int state = device.getState(); + if (state == LocalMediaManager.MediaDeviceState.STATE_CONNECTING + || state == LocalMediaManager.MediaDeviceState.STATE_CONNECTING_FAILED) { rowBuilder.setTitle(deviceName); rowBuilder.setPrimaryAction(SliceAction.create(broadcastAction, deviceIcon, ListBuilder.ICON_IMAGE, deviceName)); - rowBuilder.setSubtitle(mContext.getText(R.string.media_output_switching)); + rowBuilder.setSubtitle( + (state == LocalMediaManager.MediaDeviceState.STATE_CONNECTING) + ? mContext.getText(R.string.media_output_switching) + : mContext.getText(R.string.bluetooth_connect_failed)); } else { // Append status to title only for the disconnected Bluetooth device. final SpannableString spannableTitle = new SpannableString( diff --git a/tests/robotests/src/com/android/settings/media/MediaOutputSliceTest.java b/tests/robotests/src/com/android/settings/media/MediaOutputSliceTest.java index 4e258014a58..0a8ffa7e87e 100644 --- a/tests/robotests/src/com/android/settings/media/MediaOutputSliceTest.java +++ b/tests/robotests/src/com/android/settings/media/MediaOutputSliceTest.java @@ -512,6 +512,44 @@ public class MediaOutputSliceTest { .isNotEqualTo(-1); } + @Test + public void getSlice_disconnectedBtOnTransferringFailed_containTransferringFailedSubtitle() { + final List mSelectedDevices = new ArrayList<>(); + final List mSelectableDevices = new ArrayList<>(); + mDevices.clear(); + final MediaDevice device = mock(MediaDevice.class); + when(device.getName()).thenReturn(TEST_DEVICE_1_NAME); + when(device.getIcon()).thenReturn(mTestDrawable); + when(device.getMaxVolume()).thenReturn(100); + when(device.isConnected()).thenReturn(true); + when(device.getDeviceType()).thenReturn(MediaDevice.MediaDeviceType.TYPE_BLUETOOTH_DEVICE); + when(device.getId()).thenReturn(TEST_DEVICE_1_ID); + final MediaDevice device2 = mock(MediaDevice.class); + when(device2.getName()).thenReturn(TEST_DEVICE_2_NAME); + when(device2.getIcon()).thenReturn(mTestDrawable); + when(device2.getMaxVolume()).thenReturn(100); + when(device2.isConnected()).thenReturn(false); + when(device2.getState()).thenReturn( + LocalMediaManager.MediaDeviceState.STATE_CONNECTING_FAILED); + when(device2.getDeviceType()).thenReturn(MediaDevice.MediaDeviceType.TYPE_BLUETOOTH_DEVICE); + when(device2.getId()).thenReturn(TEST_DEVICE_2_ID); + mSelectedDevices.add(device); + mSelectableDevices.add(device2); + when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(device); + mDevices.add(device); + mDevices.add(device2); + when(mLocalMediaManager.getSelectedMediaDevice()).thenReturn(mSelectedDevices); + when(mLocalMediaManager.getSelectableMediaDevice()).thenReturn(mSelectableDevices); + mMediaDeviceUpdateWorker.onDeviceListUpdate(mDevices); + + final Slice mediaSlice = mMediaOutputSlice.getSlice(); + final String sliceInfo = SliceQuery.findAll(mediaSlice, FORMAT_SLICE, HINT_LIST_ITEM, + null).toString(); + + assertThat(TextUtils.indexOf(sliceInfo, + mContext.getText(R.string.bluetooth_connect_failed))).isNotEqualTo(-1); + } + @Test public void onNotifyChange_foundMediaDevice_connect() { mDevices.clear();