blob: e38e041a87dc1077eae456cc1a32e04fab1e9c79 [file] [log] [blame]
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settingslib.media;
import android.annotation.DrawableRes;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.media.AudioDeviceInfo;
import android.media.MediaRoute2Info;
import com.android.settingslib.R;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** A util class to get the appropriate icon for different device types. */
public class DeviceIconUtil {
// A map from a @AudioDeviceInfo.AudioDeviceType to full device information.
private final Map<Integer, Device> mAudioDeviceTypeToIconMap = new HashMap<>();
// A map from a @MediaRoute2Info.Type to full device information.
private final Map<Integer, Device> mMediaRouteTypeToIconMap = new HashMap<>();
// A default icon to use if the type is not present in the map.
@DrawableRes private static final int DEFAULT_ICON = R.drawable.ic_smartphone;
public DeviceIconUtil() {
List<Device> deviceList = Arrays.asList(
new Device(
AudioDeviceInfo.TYPE_USB_DEVICE,
MediaRoute2Info.TYPE_USB_DEVICE,
R.drawable.ic_headphone),
new Device(
AudioDeviceInfo.TYPE_USB_HEADSET,
MediaRoute2Info.TYPE_USB_HEADSET,
R.drawable.ic_headphone),
new Device(
AudioDeviceInfo.TYPE_USB_ACCESSORY,
MediaRoute2Info.TYPE_USB_ACCESSORY,
R.drawable.ic_headphone),
new Device(
AudioDeviceInfo.TYPE_DOCK,
MediaRoute2Info.TYPE_DOCK,
R.drawable.ic_dock_device),
new Device(
AudioDeviceInfo.TYPE_HDMI,
MediaRoute2Info.TYPE_HDMI,
R.drawable.ic_headphone),
new Device(
AudioDeviceInfo.TYPE_WIRED_HEADSET,
MediaRoute2Info.TYPE_WIRED_HEADSET,
R.drawable.ic_headphone),
new Device(
AudioDeviceInfo.TYPE_WIRED_HEADPHONES,
MediaRoute2Info.TYPE_WIRED_HEADPHONES,
R.drawable.ic_headphone),
new Device(
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER,
MediaRoute2Info.TYPE_BUILTIN_SPEAKER,
R.drawable.ic_smartphone));
for (int i = 0; i < deviceList.size(); i++) {
Device device = deviceList.get(i);
mAudioDeviceTypeToIconMap.put(device.mAudioDeviceType, device);
mMediaRouteTypeToIconMap.put(device.mMediaRouteType, device);
}
}
/** Returns a drawable for an icon representing the given audioDeviceType. */
public Drawable getIconFromAudioDeviceType(
@AudioDeviceInfo.AudioDeviceType int audioDeviceType, Context context) {
return context.getDrawable(getIconResIdFromAudioDeviceType(audioDeviceType));
}
/** Returns a drawable res ID for an icon representing the given audioDeviceType. */
@DrawableRes
public int getIconResIdFromAudioDeviceType(
@AudioDeviceInfo.AudioDeviceType int audioDeviceType) {
if (mAudioDeviceTypeToIconMap.containsKey(audioDeviceType)) {
return mAudioDeviceTypeToIconMap.get(audioDeviceType).mIconDrawableRes;
}
return DEFAULT_ICON;
}
/** Returns a drawable res ID for an icon representing the given mediaRouteType. */
@DrawableRes
public int getIconResIdFromMediaRouteType(
@MediaRoute2Info.Type int mediaRouteType) {
if (mMediaRouteTypeToIconMap.containsKey(mediaRouteType)) {
return mMediaRouteTypeToIconMap.get(mediaRouteType).mIconDrawableRes;
}
return DEFAULT_ICON;
}
private static class Device {
@AudioDeviceInfo.AudioDeviceType
private final int mAudioDeviceType;
@MediaRoute2Info.Type
private final int mMediaRouteType;
@DrawableRes
private final int mIconDrawableRes;
Device(@AudioDeviceInfo.AudioDeviceType int audioDeviceType,
@MediaRoute2Info.Type int mediaRouteType,
@DrawableRes int iconDrawableRes) {
mAudioDeviceType = audioDeviceType;
mMediaRouteType = mediaRouteType;
mIconDrawableRes = iconDrawableRes;
}
}
}