Fix media output slice is empty even BT device is paired

Return the empty ListBuilder instead of return null in
getSlice().

Bug: 131140677
Test: make -j42 RunSettingsRobotests
Change-Id: I2b1a4bc0c6d2017ec85b2e9f8a5bfc08a0eba1b5
This commit is contained in:
hughchen
2019-04-23 17:53:48 +08:00
parent 37db031aa1
commit 53eb9eb24d
2 changed files with 39 additions and 15 deletions

View File

@@ -70,21 +70,27 @@ public class MediaOutputSlice implements CustomSliceable {
@Override @Override
public Slice getSlice() { public Slice getSlice() {
// Reload theme for switching dark mode on/off
mContext.getTheme().applyStyle(R.style.Theme_Settings_Home, true /* force */);
final ListBuilder listBuilder = new ListBuilder(mContext, getUri(), ListBuilder.INFINITY)
.setAccentColor(COLOR_NOT_TINTED);
final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
if (!adapter.isEnabled()) { if (!adapter.isEnabled()) {
Log.d(TAG, "getSlice() Bluetooth is off"); Log.d(TAG, "getSlice() Bluetooth is off");
return null; return listBuilder.build();
} }
if (getWorker() == null) { if (getWorker() == null) {
Log.d(TAG, "getSlice() Can not get worker through uri!"); Log.d(TAG, "getSlice() Can not get worker through uri!");
return null; return listBuilder.build();
} }
final List<MediaDevice> devices = getMediaDevices(); final List<MediaDevice> devices = getMediaDevices();
final MediaDevice connectedDevice = getWorker().getCurrentConnectedMediaDevice(); final MediaDevice connectedDevice = getWorker().getCurrentConnectedMediaDevice();
final ListBuilder listBuilder = buildActiveDeviceHeader(connectedDevice); listBuilder.addRow(getActiveDeviceHeaderRow(connectedDevice));
for (MediaDevice device : devices) { for (MediaDevice device : devices) {
if (!TextUtils.equals(connectedDevice.getId(), device.getId())) { if (!TextUtils.equals(connectedDevice.getId(), device.getId())) {
@@ -95,7 +101,7 @@ public class MediaOutputSlice implements CustomSliceable {
return listBuilder.build(); return listBuilder.build();
} }
private ListBuilder buildActiveDeviceHeader(MediaDevice device) { private ListBuilder.RowBuilder getActiveDeviceHeaderRow(MediaDevice device) {
final String title = device.getName(); final String title = device.getName();
final IconCompat icon = getDeviceIconCompat(device); final IconCompat icon = getDeviceIconCompat(device);
@@ -104,16 +110,13 @@ public class MediaOutputSlice implements CustomSliceable {
final SliceAction primarySliceAction = SliceAction.createDeeplink(broadcastAction, icon, final SliceAction primarySliceAction = SliceAction.createDeeplink(broadcastAction, icon,
ListBuilder.ICON_IMAGE, title); ListBuilder.ICON_IMAGE, title);
final ListBuilder listBuilder = new ListBuilder(mContext, MEDIA_OUTPUT_SLICE_URI, final ListBuilder.RowBuilder rowBuilder = new ListBuilder.RowBuilder()
ListBuilder.INFINITY)
.setAccentColor(COLOR_NOT_TINTED)
.addRow(new ListBuilder.RowBuilder()
.setTitleItem(icon, ListBuilder.ICON_IMAGE) .setTitleItem(icon, ListBuilder.ICON_IMAGE)
.setTitle(title) .setTitle(title)
.setSubtitle(device.getSummary()) .setSubtitle(device.getSummary())
.setPrimaryAction(primarySliceAction)); .setPrimaryAction(primarySliceAction);
return listBuilder; return rowBuilder;
} }
private IconCompat getDeviceIconCompat(MediaDevice device) { private IconCompat getDeviceIconCompat(MediaDevice device) {

View File

@@ -17,6 +17,9 @@
package com.android.settings.media; package com.android.settings.media;
import static android.app.slice.Slice.HINT_LIST_ITEM;
import static android.app.slice.SliceItem.FORMAT_SLICE;
import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_SLICE_URI; import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_SLICE_URI;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
@@ -36,6 +39,7 @@ import androidx.slice.Slice;
import androidx.slice.SliceMetadata; import androidx.slice.SliceMetadata;
import androidx.slice.SliceProvider; import androidx.slice.SliceProvider;
import androidx.slice.core.SliceAction; import androidx.slice.core.SliceAction;
import androidx.slice.core.SliceQuery;
import androidx.slice.widget.SliceLiveData; import androidx.slice.widget.SliceLiveData;
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter; import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
@@ -97,10 +101,27 @@ public class MediaOutputSliceTest {
} }
@Test @Test
public void getSlice_workerIsNull_shouldNotCrash() { public void getSlice_workerIsNull_shouldReturnZeroRow() {
mMediaOutputSlice.init(TEST_PACKAGE_NAME, null); mMediaOutputSlice.init(TEST_PACKAGE_NAME, null);
mMediaOutputSlice.getSlice(); final Slice slice = mMediaOutputSlice.getSlice();
final int rows = SliceQuery.findAll(slice, FORMAT_SLICE, HINT_LIST_ITEM,
null /* nonHints */).size();
assertThat(rows).isEqualTo(0);
}
@Test
public void getSlice_bluetoothIsDisable_shouldReturnZeroRow() {
mShadowBluetoothAdapter.setEnabled(false);
final Slice slice = mMediaOutputSlice.getSlice();
final int rows = SliceQuery.findAll(slice, FORMAT_SLICE, HINT_LIST_ITEM,
null /* nonHints */).size();
assertThat(rows).isEqualTo(0);
} }
@Test @Test