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

Commit 626e4c54 authored by Tim Peng's avatar Tim Peng Committed by tim peng
Browse files

Unable to show correct device icon in Output Switcher

-Media framework does not report "TYPE_GROUP" when selecting a group
of Chromecast devices or the StaticGroup
-MediaRouter2Info::getType() does not provide correct types for group
and video
-Add "getDrawableResIdByFeature()" to get correct type icon
-Use MediaRouter2Info::getFeatures() to get device type
-Designer updates the video icon

Bug: 160113560
Test: make -j50 RunSettingsLibRoboTests
Change-Id: I1c8e9c2729013b9ee49b664e40c04550f315a516
parent e44b5a26
Loading
Loading
Loading
Loading
+6 −10
Original line number Diff line number Diff line
@@ -15,16 +15,12 @@
    limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="14dp"
        android:height="11dp"
        android:viewportWidth="14"
        android:viewportHeight="11"
        android:tint="?android:attr/colorControlNormal">
        android:width="18dp"
        android:height="18dp"
        android:viewportWidth="18"
        android:viewportHeight="18">
    <path
        android:pathData="M10,10v1H4v-1H1.5A1.5,1.5 0,0 1,0 8.5v-7A1.5,1.5 0,
        0 1,1.5 0h11A1.5,1.5 0,0 1,14 1.5v7a1.5,1.5 0,0 1,-1.5 1.5H10zM1.5,
        1a0.5,0.5 0,0 0,-0.5 0.5v7a0.5,0.5 0,0 0,0.5 0.5h11a0.5,0.5 0,0 0,
        0.5 -0.5v-7a0.5,0.5 0,0 0,-0.5 -0.5h-11z"
        android:fillColor="#000000"
        android:pathData="M12,14V15H6V14H3.5C3.1022,14 2.7206,13.842 2.4393,13.5607C2.158,13.2794 2,12.8978 2,12.5V5.5C2,5.1022 2.158,4.7206 2.4393,4.4393C2.7206,4.158 3.1022,4 3.5,4H14.5C14.8978,4 15.2794,4.158 15.5607,4.4393C15.842,4.7206 16,5.1022 16,5.5V12.5C16,12.8978 15.842,13.2794 15.5607,13.5607C15.2794,13.842 14.8978,14 14.5,14H12ZM3.5,5C3.3674,5 3.2402,5.0527 3.1465,5.1465C3.0527,5.2402 3,5.3674 3,5.5V12.5C3,12.6326 3.0527,12.7598 3.1465,12.8536C3.2402,12.9473 3.3674,13 3.5,13H14.5C14.6326,13 14.7598,12.9473 14.8536,12.8536C14.9473,12.7598 15,12.6326 15,12.5V5.5C15,5.3674 14.9473,5.2402 14.8536,5.1465C14.7598,5.0527 14.6326,5 14.5,5H3.5Z"
        android:fillColor="#5F6368"
        android:fillType="evenOdd"/>
</vector>
 No newline at end of file
+20 −1
Original line number Diff line number Diff line
@@ -15,6 +15,8 @@
 */
package com.android.settingslib.media;

import static android.media.MediaRoute2Info.FEATURE_REMOTE_GROUP_PLAYBACK;
import static android.media.MediaRoute2Info.FEATURE_REMOTE_VIDEO_PLAYBACK;
import static android.media.MediaRoute2Info.TYPE_GROUP;
import static android.media.MediaRoute2Info.TYPE_REMOTE_SPEAKER;
import static android.media.MediaRoute2Info.TYPE_REMOTE_TV;
@@ -29,6 +31,8 @@ import androidx.annotation.VisibleForTesting;
import com.android.settingslib.R;
import com.android.settingslib.bluetooth.BluetoothUtils;

import java.util.List;

/**
 * InfoMediaDevice extends MediaDevice to represents wifi device.
 */
@@ -62,7 +66,7 @@ public class InfoMediaDevice extends MediaDevice {

    @Override
    public Drawable getIconWithoutBackground() {
        return mContext.getDrawable(getDrawableResId());
        return mContext.getDrawable(getDrawableResIdByFeature());
    }

    @VisibleForTesting
@@ -83,6 +87,21 @@ public class InfoMediaDevice extends MediaDevice {
        return resId;
    }

    @VisibleForTesting
    int getDrawableResIdByFeature() {
        int resId;
        final List<String> features = mRouteInfo.getFeatures();
        if (features.contains(FEATURE_REMOTE_GROUP_PLAYBACK)) {
            resId = R.drawable.ic_media_group_device;
        } else if (features.contains(FEATURE_REMOTE_VIDEO_PLAYBACK)) {
            resId = R.drawable.ic_media_display_device;
        } else {
            resId = R.drawable.ic_media_speaker_device;
        }

        return resId;
    }

    @Override
    public String getId() {
        return MediaDeviceUtils.getId(mRouteInfo);
+29 −0
Original line number Diff line number Diff line
@@ -16,6 +16,9 @@

package com.android.settingslib.media;

import static android.media.MediaRoute2Info.FEATURE_REMOTE_AUDIO_PLAYBACK;
import static android.media.MediaRoute2Info.FEATURE_REMOTE_GROUP_PLAYBACK;
import static android.media.MediaRoute2Info.FEATURE_REMOTE_VIDEO_PLAYBACK;
import static android.media.MediaRoute2Info.TYPE_GROUP;
import static android.media.MediaRoute2Info.TYPE_REMOTE_SPEAKER;
import static android.media.MediaRoute2Info.TYPE_REMOTE_TV;
@@ -38,6 +41,8 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;

import java.util.ArrayList;

@RunWith(RobolectricTestRunner.class)
public class InfoMediaDeviceTest {

@@ -107,4 +112,28 @@ public class InfoMediaDeviceTest {

        assertThat(mInfoMediaDevice.getDrawableResId()).isEqualTo(R.drawable.ic_media_group_device);
    }

    @Test
    public void getDrawableResIdByFeature_returnCorrectResId() {
        final ArrayList<String> features = new ArrayList<>();
        features.add(FEATURE_REMOTE_VIDEO_PLAYBACK);
        when(mRouteInfo.getFeatures()).thenReturn(features);

        assertThat(mInfoMediaDevice.getDrawableResIdByFeature()).isEqualTo(
                R.drawable.ic_media_display_device);

        features.clear();
        features.add(FEATURE_REMOTE_AUDIO_PLAYBACK);
        when(mRouteInfo.getFeatures()).thenReturn(features);

        assertThat(mInfoMediaDevice.getDrawableResIdByFeature()).isEqualTo(
                R.drawable.ic_media_speaker_device);

        features.clear();
        features.add(FEATURE_REMOTE_GROUP_PLAYBACK);
        when(mRouteInfo.getFeatures()).thenReturn(features);

        assertThat(mInfoMediaDevice.getDrawableResIdByFeature()).isEqualTo(
                R.drawable.ic_media_group_device);
    }
}