diff options
| author | 2023-10-20 11:56:04 +0000 | |
|---|---|---|
| committer | 2023-10-20 11:56:04 +0000 | |
| commit | 1e5628c1228c29fb2a2385be872c0a401d500582 (patch) | |
| tree | 4f0ca16d573de615a9f7835654f84080c1378d22 | |
| parent | 2134c42556b4cc39b8e833e8439dcc144b992375 (diff) | |
| parent | 25290b37580559aebdc9296bec43ab24f135b7fb (diff) | |
Merge "Add HDMI (e)ARC types to MediaRoute2Info." into main
8 files changed, 102 insertions, 37 deletions
diff --git a/core/api/current.txt b/core/api/current.txt index 51cdfc538663..8a08c024de76 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -23779,6 +23779,8 @@ package android.media { field public static final int TYPE_DOCK = 13; // 0xd field public static final int TYPE_GROUP = 2000; // 0x7d0 field public static final int TYPE_HDMI = 9; // 0x9 + field @FlaggedApi("com.android.media.flags.enable_audio_policies_device_and_bluetooth_controller") public static final int TYPE_HDMI_ARC = 10; // 0xa + field @FlaggedApi("com.android.media.flags.enable_audio_policies_device_and_bluetooth_controller") public static final int TYPE_HDMI_EARC = 29; // 0x1d field public static final int TYPE_HEARING_AID = 23; // 0x17 field public static final int TYPE_REMOTE_AUDIO_VIDEO_RECEIVER = 1003; // 0x3eb field public static final int TYPE_REMOTE_CAR = 1008; // 0x3f0 diff --git a/media/java/android/media/MediaRoute2Info.java b/media/java/android/media/MediaRoute2Info.java index 91fa873078fc..cccf6f1caca7 100644 --- a/media/java/android/media/MediaRoute2Info.java +++ b/media/java/android/media/MediaRoute2Info.java @@ -18,6 +18,9 @@ package android.media; import static android.media.MediaRouter2Utils.toUniqueId; +import static com.android.media.flags.Flags.FLAG_ENABLE_AUDIO_POLICIES_DEVICE_AND_BLUETOOTH_CONTROLLER; + +import android.annotation.FlaggedApi; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; @@ -141,6 +144,8 @@ public final class MediaRoute2Info implements Parcelable { TYPE_WIRED_HEADPHONES, TYPE_BLUETOOTH_A2DP, TYPE_HDMI, + TYPE_HDMI_ARC, + TYPE_HDMI_EARC, TYPE_USB_DEVICE, TYPE_USB_ACCESSORY, TYPE_DOCK, @@ -206,6 +211,22 @@ public final class MediaRoute2Info implements Parcelable { public static final int TYPE_HDMI = AudioDeviceInfo.TYPE_HDMI; /** + * Indicates the route is an Audio Return Channel of an HDMI connection. + * + * @see #getType + */ + @FlaggedApi(FLAG_ENABLE_AUDIO_POLICIES_DEVICE_AND_BLUETOOTH_CONTROLLER) + public static final int TYPE_HDMI_ARC = AudioDeviceInfo.TYPE_HDMI_ARC; + + /** + * Indicates the route is an Enhanced Audio Return Channel of an HDMI connection. + * + * @see #getType + */ + @FlaggedApi(FLAG_ENABLE_AUDIO_POLICIES_DEVICE_AND_BLUETOOTH_CONTROLLER) + public static final int TYPE_HDMI_EARC = AudioDeviceInfo.TYPE_HDMI_EARC; + + /** * Indicates the route is a USB audio device. * * @see #getType @@ -907,6 +928,10 @@ public final class MediaRoute2Info implements Parcelable { return "BLUETOOTH_A2DP"; case TYPE_HDMI: return "HDMI"; + case TYPE_HDMI_ARC: + return "HDMI_ARC"; + case TYPE_HDMI_EARC: + return "HDMI_EARC"; case TYPE_DOCK: return "DOCK"; case TYPE_USB_DEVICE: diff --git a/packages/SettingsLib/src/com/android/settingslib/media/DeviceIconUtil.java b/packages/SettingsLib/src/com/android/settingslib/media/DeviceIconUtil.java index e38e041a87dc..2a2841745fa0 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/DeviceIconUtil.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/DeviceIconUtil.java @@ -39,39 +39,50 @@ public class DeviceIconUtil { @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)); + 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), + // TODO: b/306359110 - Put proper iconography for HDMI_ARC type. + new Device( + AudioDeviceInfo.TYPE_HDMI_ARC, + MediaRoute2Info.TYPE_HDMI_ARC, + R.drawable.ic_headphone), + // TODO: b/306359110 - Put proper iconography for HDMI_EARC type. + new Device( + AudioDeviceInfo.TYPE_HDMI_EARC, + MediaRoute2Info.TYPE_HDMI_EARC, + 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); diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java index bf63f5d80450..016b44064249 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java @@ -21,6 +21,8 @@ import static android.media.MediaRoute2Info.TYPE_BUILTIN_SPEAKER; import static android.media.MediaRoute2Info.TYPE_DOCK; import static android.media.MediaRoute2Info.TYPE_GROUP; import static android.media.MediaRoute2Info.TYPE_HDMI; +import static android.media.MediaRoute2Info.TYPE_HDMI_ARC; +import static android.media.MediaRoute2Info.TYPE_HDMI_EARC; import static android.media.MediaRoute2Info.TYPE_HEARING_AID; import static android.media.MediaRoute2Info.TYPE_REMOTE_AUDIO_VIDEO_RECEIVER; import static android.media.MediaRoute2Info.TYPE_REMOTE_CAR; @@ -635,6 +637,8 @@ public abstract class InfoMediaManager extends MediaManager { case TYPE_USB_ACCESSORY: case TYPE_DOCK: case TYPE_HDMI: + case TYPE_HDMI_ARC: + case TYPE_HDMI_EARC: case TYPE_WIRED_HEADSET: case TYPE_WIRED_HEADPHONES: mediaDevice = @@ -671,8 +675,8 @@ public abstract class InfoMediaManager extends MediaManager { default: Log.w(TAG, "addMediaDevice() unknown device type : " + deviceType); break; - } + if (mediaDevice != null && !TextUtils.isEmpty(mPackageName) && getRoutingSessionInfo().getSelectedRoutes().contains(route.getId())) { mediaDevice.setState(STATE_SELECTED); diff --git a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java index 147412d08d2c..8085c998abea 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java @@ -21,6 +21,8 @@ import static android.media.MediaRoute2Info.TYPE_BUILTIN_SPEAKER; import static android.media.MediaRoute2Info.TYPE_DOCK; import static android.media.MediaRoute2Info.TYPE_GROUP; import static android.media.MediaRoute2Info.TYPE_HDMI; +import static android.media.MediaRoute2Info.TYPE_HDMI_ARC; +import static android.media.MediaRoute2Info.TYPE_HDMI_EARC; import static android.media.MediaRoute2Info.TYPE_HEARING_AID; import static android.media.MediaRoute2Info.TYPE_REMOTE_AUDIO_VIDEO_RECEIVER; import static android.media.MediaRoute2Info.TYPE_REMOTE_SPEAKER; @@ -140,7 +142,6 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { mType = MediaDeviceType.TYPE_BLUETOOTH_DEVICE; return; } - switch (info.getType()) { case TYPE_GROUP: mType = MediaDeviceType.TYPE_CAST_GROUP_DEVICE; @@ -157,6 +158,8 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { case TYPE_USB_ACCESSORY: case TYPE_DOCK: case TYPE_HDMI: + case TYPE_HDMI_ARC: + case TYPE_HDMI_EARC: mType = MediaDeviceType.TYPE_USB_C_AUDIO_DEVICE; break; case TYPE_HEARING_AID: diff --git a/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java index a63bbdf36fa8..c44f66e99d00 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java @@ -18,6 +18,8 @@ package com.android.settingslib.media; import static android.media.MediaRoute2Info.TYPE_BUILTIN_SPEAKER; import static android.media.MediaRoute2Info.TYPE_DOCK; import static android.media.MediaRoute2Info.TYPE_HDMI; +import static android.media.MediaRoute2Info.TYPE_HDMI_ARC; +import static android.media.MediaRoute2Info.TYPE_HDMI_EARC; import static android.media.MediaRoute2Info.TYPE_USB_ACCESSORY; import static android.media.MediaRoute2Info.TYPE_USB_DEVICE; import static android.media.MediaRoute2Info.TYPE_USB_HEADSET; @@ -71,6 +73,8 @@ public class PhoneMediaDevice extends MediaDevice { name = context.getString(R.string.media_transfer_this_device_name); break; case TYPE_HDMI: + case TYPE_HDMI_ARC: + case TYPE_HDMI_EARC: name = context.getString(R.string.media_transfer_external_device_name); break; default: @@ -144,6 +148,8 @@ public class PhoneMediaDevice extends MediaDevice { case TYPE_USB_ACCESSORY: case TYPE_DOCK: case TYPE_HDMI: + case TYPE_HDMI_ARC: + case TYPE_HDMI_EARC: id = USB_HEADSET_ID; break; case TYPE_BUILTIN_SPEAKER: diff --git a/services/core/java/com/android/server/media/AudioAttributesUtils.java b/services/core/java/com/android/server/media/AudioAttributesUtils.java index 5d5d59bcb6ef..8cb334dc2260 100644 --- a/services/core/java/com/android/server/media/AudioAttributesUtils.java +++ b/services/core/java/com/android/server/media/AudioAttributesUtils.java @@ -23,6 +23,8 @@ import android.media.AudioDeviceAttributes; import android.media.AudioDeviceInfo; import android.media.MediaRoute2Info; +import com.android.media.flags.Flags; + /* package */ final class AudioAttributesUtils { /* package */ static final AudioAttributes ATTRIBUTES_MEDIA = new AudioAttributes.Builder() @@ -36,6 +38,14 @@ import android.media.MediaRoute2Info; @MediaRoute2Info.Type /* package */ static int mapToMediaRouteType( @NonNull AudioDeviceAttributes audioDeviceAttributes) { + if (Flags.enableAudioPoliciesDeviceAndBluetoothController()) { + switch (audioDeviceAttributes.getType()) { + case AudioDeviceInfo.TYPE_HDMI_ARC: + return MediaRoute2Info.TYPE_HDMI_ARC; + case AudioDeviceInfo.TYPE_HDMI_EARC: + return MediaRoute2Info.TYPE_HDMI_EARC; + } + } switch (audioDeviceAttributes.getType()) { case AudioDeviceInfo.TYPE_BUILTIN_EARPIECE: case AudioDeviceInfo.TYPE_BUILTIN_SPEAKER: @@ -64,7 +74,6 @@ import android.media.MediaRoute2Info; } } - /* package */ static boolean isDeviceOutputAttributes( @Nullable AudioDeviceAttributes audioDeviceAttributes) { if (audioDeviceAttributes == null) { diff --git a/services/core/java/com/android/server/media/AudioPoliciesDeviceRouteController.java b/services/core/java/com/android/server/media/AudioPoliciesDeviceRouteController.java index 33190ade4f42..360a6a721988 100644 --- a/services/core/java/com/android/server/media/AudioPoliciesDeviceRouteController.java +++ b/services/core/java/com/android/server/media/AudioPoliciesDeviceRouteController.java @@ -22,6 +22,8 @@ import static android.media.MediaRoute2Info.FEATURE_LOCAL_PLAYBACK; import static android.media.MediaRoute2Info.TYPE_BUILTIN_SPEAKER; import static android.media.MediaRoute2Info.TYPE_DOCK; import static android.media.MediaRoute2Info.TYPE_HDMI; +import static android.media.MediaRoute2Info.TYPE_HDMI_ARC; +import static android.media.MediaRoute2Info.TYPE_HDMI_EARC; import static android.media.MediaRoute2Info.TYPE_USB_DEVICE; import static android.media.MediaRoute2Info.TYPE_WIRED_HEADPHONES; import static android.media.MediaRoute2Info.TYPE_WIRED_HEADSET; @@ -160,7 +162,6 @@ import java.util.Objects; @NonNull private MediaRoute2Info createRouteFromAudioInfo(@MediaRoute2Info.Type int type) { int name = R.string.default_audio_route_name; - switch (type) { case TYPE_WIRED_HEADPHONES: case TYPE_WIRED_HEADSET: @@ -170,6 +171,8 @@ import java.util.Objects; name = R.string.default_audio_route_name_dock_speakers; break; case TYPE_HDMI: + case TYPE_HDMI_ARC: + case TYPE_HDMI_EARC: name = R.string.default_audio_route_name_external_device; break; case TYPE_USB_DEVICE: @@ -211,6 +214,8 @@ import java.util.Objects; case TYPE_WIRED_HEADSET: case TYPE_DOCK: case TYPE_HDMI: + case TYPE_HDMI_ARC: + case TYPE_HDMI_EARC: case TYPE_USB_DEVICE: return true; default: |