Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 679a239d authored by jabashque's avatar jabashque Committed by Michael Bestas
Browse files

fixup! Rewrite trust USB restriction handling

While using USB HAL v1.2 or earlier, one could call UsbManager's
enableUsbDataSignal(true) and it will return back true due to the USB
data status always being reported as DATA_STATUS_UNKNOWN. This ends up
breaking the logic to fallback to UsbRestrictor, since it was previously
assumed that enableUsbDataSignal() should always return false if on an
unsupported HAL version.

Instead, we should check the USB HAL version separately so that we can
use enableUsbDataSignal() only if we're on a supported HAL version. If
not, then we attempt to use UsbRestrictor instead.

Change-Id: Iddb4685d8d640d7ce223bb0ec44b0e1d5abf610b
parent c2c2f590
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -102,6 +102,7 @@ import java.io.File;
import java.io.FileDescriptor;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.RuntimeException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -1543,8 +1544,20 @@ public class UsbDeviceManager implements ActivityTaskManagerInternal.ScreenObser
            final boolean usbConnected = mConnected || mHostConnected;
            final boolean shouldRestrict = (restrictUsb == 1 && mIsKeyguardShowing && !usbConnected)
                    || restrictUsb == 2;

            UsbManager usbManager = mContext.getSystemService(UsbManager.class);
            if (usbManager == null || !usbManager.enableUsbDataSignal(!shouldRestrict)) {
            boolean useUsbManager = false;
            try {
                if (usbManager != null &&
                        usbManager.getUsbHalVersion() >= UsbManager.USB_HAL_V1_3) {
                    useUsbManager = true;
                }
            } catch (RuntimeException ignore) {
                // Can't get USB Hal version. Assume it's an unsupported version and
                // don't try using UsbManager to toggle USB data.
            }

            if (!useUsbManager || !usbManager.enableUsbDataSignal(!shouldRestrict)) {
                try {
                    if (mUsbRestrictor != null) {
                        mUsbRestrictor.setEnabled(shouldRestrict);