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

Commit b746374d authored by Iván Budnik's avatar Iván Budnik Committed by Android (Google) Code Review
Browse files

Merge "Use ic_media_tablet when showing built in speaker on tablet" into main

parents 1a73405f 76841507
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.media.MediaRoute2Info;
import android.os.SystemProperties;
import android.util.SparseIntArray;

import androidx.annotation.NonNull;
@@ -42,6 +43,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.settingslib.R;
import com.android.settingslib.media.flags.Flags;

import java.util.Arrays;
import java.util.Objects;

/** A util class to get the appropriate icon for different device types. */
@@ -50,18 +52,23 @@ public class DeviceIconUtil {
    private static final SparseIntArray AUDIO_DEVICE_TO_MEDIA_ROUTE_TYPE = new SparseIntArray();

    private final boolean mIsTv;
    private final boolean mIsTablet;
    private final Context mContext;
    public DeviceIconUtil(@NonNull Context context) {
        mContext = Objects.requireNonNull(context);
        mIsTv =
                mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK)
                        && Flags.enableTvMediaOutputDialog();
        mIsTablet =
                Arrays.asList(SystemProperties.get("ro.build.characteristics").split(","))
                        .contains("tablet");
    }

    @VisibleForTesting
    /* package */ DeviceIconUtil(boolean isTv) {
        mContext = null;
        mIsTv = isTv;
        mIsTablet = false;
    }

    /** Returns a drawable for an icon representing the given audioDeviceType. */
@@ -80,12 +87,17 @@ public class DeviceIconUtil {
    /** Returns a drawable res ID for an icon representing the given mediaRouteType. */
    @DrawableRes
    public int getIconResIdFromMediaRouteType(@MediaRoute2Info.Type int type) {
        return mIsTv ? getIconResourceIdForTv(type) : getIconResourceIdForPhone(type);
        return mIsTv
                ? getIconResourceIdForTv(type)
                : getIconResourceIdForPhoneOrTablet(type, mIsTablet);
    }

    @SuppressLint("SwitchIntDef")
    @DrawableRes
    private static int getIconResourceIdForPhone(@MediaRoute2Info.Type int type) {
    private static int getIconResourceIdForPhoneOrTablet(
            @MediaRoute2Info.Type int type, boolean isTablet) {
        int defaultResId = isTablet ? R.drawable.ic_media_tablet : R.drawable.ic_smartphone;

        return switch (type) {
            case MediaRoute2Info.TYPE_USB_DEVICE,
                            MediaRoute2Info.TYPE_USB_HEADSET,
@@ -98,7 +110,7 @@ public class DeviceIconUtil {
                            MediaRoute2Info.TYPE_HDMI_ARC,
                            MediaRoute2Info.TYPE_HDMI_EARC ->
                    R.drawable.ic_external_display;
            default -> R.drawable.ic_smartphone; // Includes TYPE_BUILTIN_SPEAKER.
            default -> defaultResId; // Includes TYPE_BUILTIN_SPEAKER.
        };
    }

+22 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settingslib.media;

import static com.google.common.truth.Truth.assertThat;

import android.content.Context;
import android.media.AudioDeviceInfo;
import android.media.MediaRoute2Info;
import android.platform.test.flag.junit.SetFlagsRule;
@@ -30,6 +31,8 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadows.ShadowSystemProperties;

@RunWith(RobolectricTestRunner.class)
public class DeviceIconUtilTest {
@@ -37,9 +40,12 @@ public class DeviceIconUtilTest {
    @Rule
    public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();

    private Context mContext;

    @Before
    public void setup() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_TV_MEDIA_OUTPUT_DIALOG);
        mContext = RuntimeEnvironment.getApplication();
    }

    @Test
@@ -170,6 +176,14 @@ public class DeviceIconUtilTest {
                .isEqualTo(R.drawable.ic_tv);
    }

    @Test
    public void getIconResIdFromMediaRouteType_onTablet_builtinSpeaker_isTablet() {
        ShadowSystemProperties.override("ro.build.characteristics", "tablet");
        assertThat(new DeviceIconUtil(mContext)
                .getIconResIdFromMediaRouteType(MediaRoute2Info.TYPE_BUILTIN_SPEAKER))
                .isEqualTo(R.drawable.ic_media_tablet);
    }

    @Test
    public void getIconResIdFromMediaRouteType_unsupportedType_isSmartphone() {
        assertThat(new DeviceIconUtil(/* isTv */ false)
@@ -177,6 +191,14 @@ public class DeviceIconUtilTest {
                .isEqualTo(R.drawable.ic_smartphone);
    }

    @Test
    public void getIconResIdFromMediaRouteType_onTablet_unsupportedType_isTablet() {
        ShadowSystemProperties.override("ro.build.characteristics", "tablet");
        assertThat(new DeviceIconUtil(mContext)
                .getIconResIdFromMediaRouteType(MediaRoute2Info.TYPE_UNKNOWN))
                .isEqualTo(R.drawable.ic_media_tablet);
    }

    @Test
    public void getIconResIdFromMediaRouteType_tv_unsupportedType_isSpeaker() {
        assertThat(new DeviceIconUtil(/* isTv */ true)
+1 −0
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@ class AudioOutputInteractorTest : SysuiTestCase() {
                addOverride(R.drawable.ic_headphone, testIcon)
                addOverride(R.drawable.ic_smartphone, testIcon)
                addOverride(R.drawable.ic_media_speaker_device, testIcon)
                addOverride(R.drawable.ic_media_tablet, testIcon)

                addOverride(com.android.internal.R.drawable.ic_bt_hearing_aid, testIcon)

+1 −0
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ class MediaOutputComponentInteractorTest : SysuiTestCase() {

            with(context.orCreateTestableResources) {
                addOverride(R.drawable.ic_smartphone, testIcon)
                addOverride(R.drawable.ic_media_tablet, testIcon)

                addOverride(R.string.media_transfer_this_device_name_tv, builtInDeviceName)
                addOverride(R.string.media_transfer_this_device_name_tablet, builtInDeviceName)