Loading core/java/android/hardware/usb/UsbManager.java +26 −8 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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 Loading @@ -1202,12 +1201,31 @@ 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 true; } private boolean isPortDisabled(UsbPort usbPort) { return (getPortStatus(usbPort).getUsbDataStatus() & DATA_STATUS_DISABLED_FORCE) == DATA_STATUS_DISABLED_FORCE; } /** * Returns a list of physical USB ports on the device. Loading Loading
core/java/android/hardware/usb/UsbManager.java +26 −8 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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 Loading @@ -1202,12 +1201,31 @@ 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 true; } private boolean isPortDisabled(UsbPort usbPort) { return (getPortStatus(usbPort).getUsbDataStatus() & DATA_STATUS_DISABLED_FORCE) == DATA_STATUS_DISABLED_FORCE; } /** * Returns a list of physical USB ports on the device. Loading