Merge "Update all usb ports in enableUsbDataSignal" into tm-dev

This commit is contained in:
Alex Johnston
2022-03-29 18:24:54 +00:00
committed by Android (Google) Code Review

View File

@@ -17,6 +17,8 @@
package android.hardware.usb;
import static android.hardware.usb.UsbPortStatus.DATA_STATUS_DISABLED_FORCE;
import android.Manifest;
import android.annotation.IntDef;
import android.annotation.LongDef;
@@ -36,8 +38,6 @@ import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.hardware.usb.gadget.V1_0.GadgetFunction;
import android.hardware.usb.gadget.V1_2.UsbSpeed;
import android.hardware.usb.IUsbOperationInternal;
import android.hardware.usb.UsbPort;
import android.os.Build;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
@@ -1189,9 +1189,8 @@ public class UsbManager {
/**
* Enable/Disable the USB data signaling.
* <p>
* Enables/Disables USB data path of the first port..
* Enables/Disables USB data path of all USB ports.
* It will force to stop or restore USB data signaling.
* Call UsbPort API if the device has more than one UsbPort.
* </p>
*
* @param enable enable or disable USB data signaling
@@ -1202,11 +1201,30 @@ public class UsbManager {
*/
@RequiresPermission(Manifest.permission.MANAGE_USB)
public boolean enableUsbDataSignal(boolean enable) {
List<UsbPort> usbPorts = getPorts();
if (usbPorts.size() == 1) {
return usbPorts.get(0).enableUsbData(enable) == UsbPort.ENABLE_USB_DATA_SUCCESS;
return setUsbDataSignal(getPorts(), !enable, /* revertOnFailure= */ true);
}
private boolean setUsbDataSignal(List<UsbPort> usbPorts, boolean disable,
boolean revertOnFailure) {
List<UsbPort> changedPorts = new ArrayList<>();
for (int i = 0; i < usbPorts.size(); i++) {
UsbPort port = usbPorts.get(i);
if (isPortDisabled(port) != disable) {
changedPorts.add(port);
if (port.enableUsbData(!disable) != UsbPort.ENABLE_USB_DATA_SUCCESS
&& revertOnFailure) {
Log.e(TAG, "Failed to set usb data signal for portID(" + port.getId() + ")");
setUsbDataSignal(changedPorts, !disable, /* revertOnFailure= */ false);
return false;
}
}
}
return false;
return true;
}
private boolean isPortDisabled(UsbPort usbPort) {
return (getPortStatus(usbPort).getUsbDataStatus() & DATA_STATUS_DISABLED_FORCE)
== DATA_STATUS_DISABLED_FORCE;
}
/**