Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 53eb9eb2 authored by hughchen's avatar hughchen
Browse files

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
parent 37db031a
Loading
Loading
Loading
Loading
+16 −13
Original line number Diff line number Diff line
@@ -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<MediaDevice> 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()
        final ListBuilder.RowBuilder rowBuilder = new ListBuilder.RowBuilder()
                .setTitleItem(icon, ListBuilder.ICON_IMAGE)
                .setTitle(title)
                .setSubtitle(device.getSummary())
                        .setPrimaryAction(primarySliceAction));
                .setPrimaryAction(primarySliceAction);

        return listBuilder;
        return rowBuilder;
    }

    private IconCompat getDeviceIconCompat(MediaDevice device) {
+23 −2
Original line number Diff line number Diff line
@@ -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