diff options
author | Paul McLean <pmclean@google.com> | 2019-09-23 08:28:41 -0600 |
---|---|---|
committer | Paul McLean <pmclean@google.com> | 2019-10-03 11:54:05 -0600 |
commit | d33645321723b04823ba03c4ce1d10b0ef56e6a5 (patch) | |
tree | 16160bef3a1f823fc27ccc423b7f39bd75001c03 /services/usb | |
parent | 4252183449824d77f5c4035e8c12bf504619a5b1 (diff) |
Adding additional prompt to UsbPermissionsDialg for audio devices.
To support, adding members to UsbDevice to mark devices as having audio
playback and audio capture capabilities.
Bug: 136080195
Test: Run "UsbAccess" test bed. Connect audio and non-audio USB devices
and see the additional prompt shown/not-shown.
Change-Id: Ie7c614d9ed30a163c350b18a54b8a9115698779d
Diffstat (limited to 'services/usb')
3 files changed, 39 insertions, 9 deletions
diff --git a/services/usb/java/com/android/server/usb/UsbHostManager.java b/services/usb/java/com/android/server/usb/UsbHostManager.java index e899dff5e5a2..047fcecd5a5b 100644 --- a/services/usb/java/com/android/server/usb/UsbHostManager.java +++ b/services/usb/java/com/android/server/usb/UsbHostManager.java @@ -386,7 +386,7 @@ public class UsbHostManager { return false; } - UsbDevice.Builder newDeviceBuilder = parser.toAndroidUsbDevice(); + UsbDevice.Builder newDeviceBuilder = parser.toAndroidUsbDeviceBuilder(); if (newDeviceBuilder == null) { Slog.e(TAG, "Couldn't create UsbDevice object."); // Tracking diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java b/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java index 6ffbd43a7b1a..8e7babb40fc0 100644 --- a/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java +++ b/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java @@ -309,17 +309,17 @@ public final class UsbDescriptorParser { /** * @hide */ - public UsbDevice.Builder toAndroidUsbDevice() { + public UsbDevice.Builder toAndroidUsbDeviceBuilder() { if (mDeviceDescriptor == null) { Log.e(TAG, "toAndroidUsbDevice() ERROR - No Device Descriptor"); return null; } - UsbDevice.Builder device = mDeviceDescriptor.toAndroid(this); - if (device == null) { + UsbDevice.Builder builder = mDeviceDescriptor.toAndroid(this); + if (builder == null) { Log.e(TAG, "toAndroidUsbDevice() ERROR Creating Device"); } - return device; + return builder; } /** @@ -524,6 +524,37 @@ public final class UsbDescriptorParser { /** * @hide */ + public boolean hasAudioTerminal(int subType) { + for (UsbDescriptor descriptor : mDescriptors) { + if (descriptor instanceof UsbACInterface) { + if (((UsbACInterface) descriptor).getSubclass() + == UsbDescriptor.AUDIO_AUDIOCONTROL + && ((UsbACInterface) descriptor).getSubtype() + == subType) { + return true; + } + } + } + return false; + } + + /** + * @hide + */ + public boolean hasAudioPlayback() { + return hasAudioTerminal(UsbACInterface.ACI_OUTPUT_TERMINAL); + } + + /** + * @hide + */ + public boolean hasAudioCapture() { + return hasAudioTerminal(UsbACInterface.ACI_INPUT_TERMINAL); + } + + /** + * @hide + */ public boolean hasHIDInterface() { ArrayList<UsbDescriptor> descriptors = getInterfaceDescriptorsForClass(UsbDescriptor.CLASSID_HID); diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbDeviceDescriptor.java b/services/usb/java/com/android/server/usb/descriptors/UsbDeviceDescriptor.java index e6e10fef9f9a..9735502a4f69 100644 --- a/services/usb/java/com/android/server/usb/descriptors/UsbDeviceDescriptor.java +++ b/services/usb/java/com/android/server/usb/descriptors/UsbDeviceDescriptor.java @@ -156,11 +156,10 @@ public final class UsbDeviceDescriptor extends UsbDescriptor { for (int index = 0; index < mConfigDescriptors.size(); index++) { configs[index] = mConfigDescriptors.get(index).toAndroid(parser); } - UsbDevice.Builder device = new UsbDevice.Builder(parser.getDeviceAddr(), mVendorID, - mProductID, mDevClass, mDevSubClass, mProtocol, mfgName, prodName, versionString, - configs, serialStr); - return device; + return new UsbDevice.Builder(parser.getDeviceAddr(), mVendorID, + mProductID, mDevClass, mDevSubClass, mProtocol, mfgName, prodName, versionString, + configs, serialStr, parser.hasAudioPlayback(), parser.hasAudioCapture()); } @Override |