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:
@@ -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)
|
.setTitleItem(icon, ListBuilder.ICON_IMAGE)
|
||||||
.setAccentColor(COLOR_NOT_TINTED)
|
.setTitle(title)
|
||||||
.addRow(new ListBuilder.RowBuilder()
|
.setSubtitle(device.getSummary())
|
||||||
.setTitleItem(icon, ListBuilder.ICON_IMAGE)
|
.setPrimaryAction(primarySliceAction);
|
||||||
.setTitle(title)
|
|
||||||
.setSubtitle(device.getSummary())
|
|
||||||
.setPrimaryAction(primarySliceAction));
|
|
||||||
|
|
||||||
return listBuilder;
|
return rowBuilder;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IconCompat getDeviceIconCompat(MediaDevice device) {
|
private IconCompat getDeviceIconCompat(MediaDevice device) {
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user