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

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

Merge "Append status to title for the disconnected Bluetooth device" into rvc-dev

parents f302ee2a 95bd75e9
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -11637,6 +11637,8 @@
    <string name="media_output_panel_title">Switch output</string>
    <!-- Summary for represent which device is playing media [CHAR LIMIT=NONE] -->
    <string name="media_output_panel_summary_of_playing_device">Currently playing on <xliff:g id="device_name" example="Bose headphone">%1$s</xliff:g></string>
    <!-- Summary for disconnected status [CHAR LIMIT=50] -->
    <string name="media_output_disconnected_status"><xliff:g id="device_name" example="My device">%1$s</xliff:g> (disconnected)</string>
    <!-- Label for the title on wfc disclaimer fragment. [CHAR LIMIT=40] -->
    <string name="wfc_disclaimer_title_text">Important information</string>
+21 −4
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.text.Spanned.SPAN_EXCLUSIVE_EXCLUSIVE;

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

@@ -24,9 +25,12 @@ import android.app.PendingIntent;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.util.Log;

import androidx.annotation.VisibleForTesting;
@@ -162,7 +166,7 @@ public class MediaOutputSlice implements CustomSliceable {
    }

    private ListBuilder.RowBuilder getMediaDeviceRow(MediaDevice device) {
        final String title = device.getName();
        final String deviceName = device.getName();
        final PendingIntent broadcastAction =
                getBroadcastIntent(mContext, device.getId(), device.hashCode());
        final IconCompat deviceIcon = getDeviceIconCompat(device);
@@ -170,9 +174,22 @@ public class MediaOutputSlice implements CustomSliceable {
        final ListBuilder.RowBuilder rowBuilder = new ListBuilder.RowBuilder()
                .setTitleItem(deviceIcon, ListBuilder.ICON_IMAGE)
                .setPrimaryAction(SliceAction.create(broadcastAction, deviceIcon,
                        ListBuilder.ICON_IMAGE, title))
                .setTitle(title)
                .setSubtitle(device.isConnected() ? null : device.getSummary());
                        ListBuilder.ICON_IMAGE, deviceName));
        // Append status to tile only for the disconnected Bluetooth device.
        if (device.getDeviceType() == MediaDevice.MediaDeviceType.TYPE_BLUETOOTH_DEVICE
                && !device.isConnected()) {
            final SpannableString spannableTitle = new SpannableString(
                    mContext.getString(R.string.media_output_disconnected_status, deviceName));
            spannableTitle.setSpan(new ForegroundColorSpan(Color.GRAY), deviceName.length(),
                    spannableTitle.length(), SPAN_EXCLUSIVE_EXCLUSIVE);
            rowBuilder.setTitle(spannableTitle);
            rowBuilder.setPrimaryAction(SliceAction.create(broadcastAction, deviceIcon,
                    ListBuilder.ICON_IMAGE, spannableTitle));
        } else {
            rowBuilder.setTitle(deviceName);
            rowBuilder.setPrimaryAction(SliceAction.create(broadcastAction, deviceIcon,
                    ListBuilder.ICON_IMAGE, deviceName));
        }

        return rowBuilder;
    }
+21 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import androidx.slice.core.SliceAction;
import androidx.slice.core.SliceQuery;
import androidx.slice.widget.SliceLiveData;

import com.android.settings.R;
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
import com.android.settingslib.media.LocalMediaManager;
import com.android.settingslib.media.MediaDevice;
@@ -155,6 +156,26 @@ public class MediaOutputSliceTest {
        assertThat(primaryAction.getTitle().toString()).isEqualTo(TEST_DEVICE_1_NAME);
    }

    @Test
    public void getSlice_disconnectedBluetooth_verifyTitle() {
        mDevices.clear();
        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(device.isConnected()).thenReturn(false);

        mDevices.add(device);
        mMediaDeviceUpdateWorker.onDeviceListUpdate(mDevices);

        final Slice mediaSlice = mMediaOutputSlice.getSlice();
        final SliceMetadata metadata = SliceMetadata.from(mContext, mediaSlice);

        final SliceAction primaryAction = metadata.getPrimaryAction();
        assertThat(primaryAction.getTitle().toString()).isEqualTo(TEST_DEVICE_1_NAME + " ("
                + mContext.getText(R.string.media_output_disconnected_status) + ")");
    }

    @Test
    public void onNotifyChange_foundMediaDevice_connect() {
        mDevices.clear();