From 53eb9eb24dd3a4c15ba5be3b6295ee151dc27e9f Mon Sep 17 00:00:00 2001 From: hughchen Date: Tue, 23 Apr 2019 17:53:48 +0800 Subject: [PATCH] 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 --- .../settings/media/MediaOutputSlice.java | 29 ++++++++++--------- .../settings/media/MediaOutputSliceTest.java | 25 ++++++++++++++-- 2 files changed, 39 insertions(+), 15 deletions(-) diff --git a/src/com/android/settings/media/MediaOutputSlice.java b/src/com/android/settings/media/MediaOutputSlice.java index 30551a9ae8f..dee5d624ae0 100644 --- a/src/com/android/settings/media/MediaOutputSlice.java +++ b/src/com/android/settings/media/MediaOutputSlice.java @@ -70,21 +70,27 @@ public class MediaOutputSlice implements CustomSliceable { @Override 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(); if (!adapter.isEnabled()) { Log.d(TAG, "getSlice() Bluetooth is off"); - return null; + return listBuilder.build(); } if (getWorker() == null) { Log.d(TAG, "getSlice() Can not get worker through uri!"); - return null; + return listBuilder.build(); } final List devices = getMediaDevices(); final MediaDevice connectedDevice = getWorker().getCurrentConnectedMediaDevice(); - final ListBuilder listBuilder = buildActiveDeviceHeader(connectedDevice); + listBuilder.addRow(getActiveDeviceHeaderRow(connectedDevice)); for (MediaDevice device : devices) { if (!TextUtils.equals(connectedDevice.getId(), device.getId())) { @@ -95,7 +101,7 @@ public class MediaOutputSlice implements CustomSliceable { return listBuilder.build(); } - private ListBuilder buildActiveDeviceHeader(MediaDevice device) { + private ListBuilder.RowBuilder getActiveDeviceHeaderRow(MediaDevice device) { final String title = device.getName(); final IconCompat icon = getDeviceIconCompat(device); @@ -104,16 +110,13 @@ public class MediaOutputSlice implements CustomSliceable { final SliceAction primarySliceAction = SliceAction.createDeeplink(broadcastAction, icon, ListBuilder.ICON_IMAGE, title); - final ListBuilder listBuilder = new ListBuilder(mContext, MEDIA_OUTPUT_SLICE_URI, - ListBuilder.INFINITY) - .setAccentColor(COLOR_NOT_TINTED) - .addRow(new ListBuilder.RowBuilder() - .setTitleItem(icon, ListBuilder.ICON_IMAGE) - .setTitle(title) - .setSubtitle(device.getSummary()) - .setPrimaryAction(primarySliceAction)); + final ListBuilder.RowBuilder rowBuilder = new ListBuilder.RowBuilder() + .setTitleItem(icon, ListBuilder.ICON_IMAGE) + .setTitle(title) + .setSubtitle(device.getSummary()) + .setPrimaryAction(primarySliceAction); - return listBuilder; + return rowBuilder; } private IconCompat getDeviceIconCompat(MediaDevice device) { diff --git a/tests/robotests/src/com/android/settings/media/MediaOutputSliceTest.java b/tests/robotests/src/com/android/settings/media/MediaOutputSliceTest.java index 205f295e724..4a3491921be 100644 --- a/tests/robotests/src/com/android/settings/media/MediaOutputSliceTest.java +++ b/tests/robotests/src/com/android/settings/media/MediaOutputSliceTest.java @@ -17,6 +17,9 @@ 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.google.common.truth.Truth.assertThat; @@ -36,6 +39,7 @@ import androidx.slice.Slice; import androidx.slice.SliceMetadata; import androidx.slice.SliceProvider; import androidx.slice.core.SliceAction; +import androidx.slice.core.SliceQuery; import androidx.slice.widget.SliceLiveData; import com.android.settings.testutils.shadow.ShadowBluetoothAdapter; @@ -97,10 +101,27 @@ public class MediaOutputSliceTest { } @Test - public void getSlice_workerIsNull_shouldNotCrash() { + public void getSlice_workerIsNull_shouldReturnZeroRow() { 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