Merge "USB: update logic for reporting playback and capture capability of USB devices." into tm-qpr-dev am: 154475ba7a

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23479325

Change-Id: I273887a70bbc8131ce048d6290cf938994a89fc1
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
TreeHugger Robot
2023-05-31 13:50:57 +00:00
committed by Automerger Merge Worker

View File

@@ -584,15 +584,34 @@ public final class UsbDescriptorParser {
} }
/** /**
* Returns true only if there is a terminal whose subtype and terminal type are the same as
* the given values.
* @hide * @hide
*/ */
public boolean hasAudioTerminal(int subType) { public boolean hasAudioTerminal(int subType, int terminalType) {
for (UsbDescriptor descriptor : mDescriptors) { for (UsbDescriptor descriptor : mDescriptors) {
if (descriptor instanceof UsbACInterface) { if (descriptor instanceof UsbACTerminal) {
if (((UsbACInterface) descriptor).getSubclass() if (((UsbACTerminal) descriptor).getSubclass() == UsbDescriptor.AUDIO_AUDIOCONTROL
== UsbDescriptor.AUDIO_AUDIOCONTROL && ((UsbACTerminal) descriptor).getSubtype() == subType
&& ((UsbACInterface) descriptor).getSubtype() && ((UsbACTerminal) descriptor).getTerminalType() == terminalType) {
== subType) { return true;
}
}
}
return false;
}
/**
* Returns true only if there is an interface whose subtype is the same as the given one and
* terminal type is different from the given one.
* @hide
*/
public boolean hasAudioTerminalExcludeType(int subType, int excludedTerminalType) {
for (UsbDescriptor descriptor : mDescriptors) {
if (descriptor instanceof UsbACTerminal) {
if (((UsbACTerminal) descriptor).getSubclass() == UsbDescriptor.AUDIO_AUDIOCONTROL
&& ((UsbACTerminal) descriptor).getSubtype() == subType
&& ((UsbACTerminal) descriptor).getTerminalType() != excludedTerminalType) {
return true; return true;
} }
} }
@@ -604,14 +623,21 @@ public final class UsbDescriptorParser {
* @hide * @hide
*/ */
public boolean hasAudioPlayback() { public boolean hasAudioPlayback() {
return hasAudioTerminal(UsbACInterface.ACI_OUTPUT_TERMINAL); return hasAudioTerminalExcludeType(
UsbACInterface.ACI_OUTPUT_TERMINAL, UsbTerminalTypes.TERMINAL_USB_STREAMING)
&& hasAudioTerminal(
UsbACInterface.ACI_INPUT_TERMINAL, UsbTerminalTypes.TERMINAL_USB_STREAMING);
} }
/** /**
* @hide * @hide
*/ */
public boolean hasAudioCapture() { public boolean hasAudioCapture() {
return hasAudioTerminal(UsbACInterface.ACI_INPUT_TERMINAL); return hasAudioTerminalExcludeType(
UsbACInterface.ACI_INPUT_TERMINAL, UsbTerminalTypes.TERMINAL_USB_STREAMING)
&& hasAudioTerminal(
UsbACInterface.ACI_OUTPUT_TERMINAL,
UsbTerminalTypes.TERMINAL_USB_STREAMING);
} }
/** /**