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

Commit 8b2b5ea3 authored by tim peng's avatar tim peng Committed by Android (Google) Code Review
Browse files

Merge "Apply RichInputRangeBuilder"

parents 3be6da2a 6fc2f84a
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -146,6 +146,19 @@ public class MediaDeviceUpdateWorker extends SliceBackgroundWorker
        return mTopDevice;
    }

    /**
     * Request to set volume.
     *
     * @param device for the targeted device.
     * @param volume for the new value.
     *
     */
    public void adjustVolume(MediaDevice device, int volume) {
        ThreadUtils.postOnBackgroundThread(() -> {
            device.requestSetVolume(volume);
        });
    }

    private class DevicesChangedBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
+33 −10
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.settings.media;

import static android.app.slice.Slice.EXTRA_RANGE_VALUE;

import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_SLICE_URI;

import android.app.PendingIntent;
@@ -49,6 +51,7 @@ public class MediaOutputSlice implements CustomSliceable {

    private static final String TAG = "MediaOutputSlice";
    private static final String MEDIA_DEVICE_ID = "media_device_id";
    private static final int NON_SLIDER_VALUE = -1;

    public static final String MEDIA_PACKAGE_NAME = "media_package_name";

@@ -86,7 +89,7 @@ public class MediaOutputSlice implements CustomSliceable {
        final MediaDevice topDevice = isTouched ? worker.getTopDevice() : connectedDevice;

        if (topDevice != null) {
            listBuilder.addRow(getActiveDeviceHeaderRow(topDevice));
            listBuilder.addInputRange(getActiveDeviceHeaderRow(topDevice));
            worker.setTopDevice(topDevice);
        }

@@ -100,7 +103,7 @@ public class MediaOutputSlice implements CustomSliceable {
        return listBuilder.build();
    }

    private ListBuilder.RowBuilder getActiveDeviceHeaderRow(MediaDevice device) {
    private ListBuilder.InputRangeBuilder getActiveDeviceHeaderRow(MediaDevice device) {
        final String title = device.getName();
        final IconCompat icon = getDeviceIconCompat(device);

@@ -108,14 +111,23 @@ public class MediaOutputSlice implements CustomSliceable {
                getBroadcastIntent(mContext, device.getId(), device.hashCode());
        final SliceAction primarySliceAction = SliceAction.createDeeplink(broadcastAction, icon,
                ListBuilder.ICON_IMAGE, title);

        final ListBuilder.RowBuilder rowBuilder = new ListBuilder.RowBuilder()
        final ListBuilder.InputRangeBuilder builder = new ListBuilder.InputRangeBuilder()
                .setTitleItem(icon, ListBuilder.ICON_IMAGE)
                .setTitle(title)
                .setSubtitle(device.getSummary())
                .setPrimaryAction(primarySliceAction);
                .setPrimaryAction(primarySliceAction)
                .setInputAction(getSliderInputAction(device.hashCode(), device.getId()))
                .setMax(device.getMaxVolume())
                .setValue(device.getCurrentVolume());
        return builder;
    }

        return rowBuilder;
    private PendingIntent getSliderInputAction(int requestCode, String id) {
        final Intent intent = new Intent(getUri().toString())
                .setData(getUri())
                .putExtra(MEDIA_DEVICE_ID, id)
                .setClass(mContext, SliceBroadcastReceiver.class);

        return PendingIntent.getBroadcast(mContext, requestCode, intent, 0);
    }

    private IconCompat getDeviceIconCompat(MediaDevice device) {
@@ -152,7 +164,7 @@ public class MediaOutputSlice implements CustomSliceable {
                .setPrimaryAction(SliceAction.create(broadcastAction, deviceIcon,
                        ListBuilder.ICON_IMAGE, title))
                .setTitle(title)
                .setSubtitle(device.getSummary());
                .setSubtitle(device.isConnected() ? null : device.getSummary());

        return rowBuilder;
    }
@@ -162,7 +174,7 @@ public class MediaOutputSlice implements CustomSliceable {
        intent.setClass(context, SliceBroadcastReceiver.class);
        intent.putExtra(MEDIA_DEVICE_ID, id);
        intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
        return PendingIntent.getBroadcast(context, requestCode /* requestCode */, intent,
        return PendingIntent.getBroadcast(context, requestCode, intent,
                PendingIntent.FLAG_UPDATE_CURRENT);
    }

@@ -175,11 +187,22 @@ public class MediaOutputSlice implements CustomSliceable {
    public void onNotifyChange(Intent intent) {
        final MediaDeviceUpdateWorker worker = getWorker();
        final String id = intent != null ? intent.getStringExtra(MEDIA_DEVICE_ID) : "";
        if (TextUtils.isEmpty(id)) {
            return;
        }
        final MediaDevice device = worker.getMediaDeviceById(id);
        if (device != null) {
        if (device == null) {
            return;
        }
        final int newPosition = intent.getIntExtra(EXTRA_RANGE_VALUE, NON_SLIDER_VALUE);
        if (newPosition == NON_SLIDER_VALUE) {
            // Intent for device connection
            Log.d(TAG, "onNotifyChange() device name : " + device.getName());
            worker.setIsTouched(true);
            worker.connectDevice(device);
        } else {
            // Intent for volume adjustment
            worker.adjustVolume(device, newPosition);
        }
    }

+21 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@

package com.android.settings.media;

import static android.app.slice.Slice.EXTRA_RANGE_VALUE;
import static android.app.slice.Slice.HINT_LIST_ITEM;
import static android.app.slice.SliceItem.FORMAT_SLICE;

@@ -144,6 +145,7 @@ public class MediaOutputSliceTest {
        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(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(device);

        final Slice mediaSlice = mMediaOutputSlice.getSlice();
@@ -188,4 +190,23 @@ public class MediaOutputSliceTest {

        verify(mLocalMediaManager, never()).connectDevice(device);
    }

    @Test
    public void onNotifyChange_adjustVolume() {
        mDevices.clear();
        final MediaDevice device = mock(MediaDevice.class);
        when(device.getId()).thenReturn(TEST_DEVICE_1_ID);
        when(mLocalMediaManager.getMediaDeviceById(mDevices, TEST_DEVICE_1_ID)).thenReturn(device);
        mDevices.add(device);

        mMediaDeviceUpdateWorker.onDeviceListUpdate(mDevices);

        final Intent intent = new Intent();
        intent.putExtra("media_device_id", TEST_DEVICE_1_ID);
        intent.putExtra(EXTRA_RANGE_VALUE, 30);

        mMediaOutputSlice.onNotifyChange(intent);

        verify(device).requestSetVolume(30);
    }
}