Loading services/usb/java/com/android/server/usb/UsbService.java +36 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import android.hardware.usb.UsbPort; import android.hardware.usb.UsbPortStatus; import android.os.Binder; import android.os.Bundle; import android.os.Looper; import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.os.UserHandle; Loading @@ -65,6 +66,7 @@ import com.android.internal.util.DumpUtils; import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; import com.android.internal.util.dump.DualDumpOutputStream; import com.android.internal.widget.LockPatternUtils; import com.android.server.FgThread; import com.android.server.SystemServerInitThreadPool; import com.android.server.SystemService; Loading Loading @@ -151,6 +153,7 @@ public class UsbService extends IUsbManager.Stub { private final UsbPermissionManager mPermissionManager; static final int PACKAGE_MONITOR_OPERATION_ID = 1; static final int STRONG_AUTH_OPERATION_ID = 2; /** * The user id of the current user. There might be several profiles (with separate user ids) * per user. Loading Loading @@ -272,6 +275,10 @@ public class UsbService extends IUsbManager.Stub { if (android.hardware.usb.flags.Flags.enableUsbDataSignalStaking()) { new PackageUninstallMonitor() .register(mContext, UserHandle.ALL, BackgroundThread.getHandler()); new LockPatternUtils(mContext) .registerStrongAuthTracker(new StrongAuthTracker(mContext, BackgroundThread.getHandler().getLooper())); } } Loading Loading @@ -1408,4 +1415,33 @@ public class UsbService extends IUsbManager.Stub { } } } /** * Implements a callback within StrongAuthTracker to disable USB data signaling * when the device enters lockdown mode. This likely involves updating a state * that controls USB data behavior. */ private class StrongAuthTracker extends LockPatternUtils.StrongAuthTracker { private boolean mLockdownModeStatus; StrongAuthTracker(Context context, Looper looper) { super(context, looper); } @Override public synchronized void onStrongAuthRequiredChanged(int userId) { boolean lockDownTriggeredByUser = (getStrongAuthForUser(userId) & STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN) != 0; //if it goes into the same lockdown status, no change is needed if (mLockdownModeStatus == lockDownTriggeredByUser) { return; } mLockdownModeStatus = lockDownTriggeredByUser; for (UsbPort port: mPortManager.getPorts()) { enableUsbData(port.getId(), !lockDownTriggeredByUser, STRONG_AUTH_OPERATION_ID, new IUsbOperationInternal.Default()); } } } } Loading
services/usb/java/com/android/server/usb/UsbService.java +36 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import android.hardware.usb.UsbPort; import android.hardware.usb.UsbPortStatus; import android.os.Binder; import android.os.Bundle; import android.os.Looper; import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.os.UserHandle; Loading @@ -65,6 +66,7 @@ import com.android.internal.util.DumpUtils; import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; import com.android.internal.util.dump.DualDumpOutputStream; import com.android.internal.widget.LockPatternUtils; import com.android.server.FgThread; import com.android.server.SystemServerInitThreadPool; import com.android.server.SystemService; Loading Loading @@ -151,6 +153,7 @@ public class UsbService extends IUsbManager.Stub { private final UsbPermissionManager mPermissionManager; static final int PACKAGE_MONITOR_OPERATION_ID = 1; static final int STRONG_AUTH_OPERATION_ID = 2; /** * The user id of the current user. There might be several profiles (with separate user ids) * per user. Loading Loading @@ -272,6 +275,10 @@ public class UsbService extends IUsbManager.Stub { if (android.hardware.usb.flags.Flags.enableUsbDataSignalStaking()) { new PackageUninstallMonitor() .register(mContext, UserHandle.ALL, BackgroundThread.getHandler()); new LockPatternUtils(mContext) .registerStrongAuthTracker(new StrongAuthTracker(mContext, BackgroundThread.getHandler().getLooper())); } } Loading Loading @@ -1408,4 +1415,33 @@ public class UsbService extends IUsbManager.Stub { } } } /** * Implements a callback within StrongAuthTracker to disable USB data signaling * when the device enters lockdown mode. This likely involves updating a state * that controls USB data behavior. */ private class StrongAuthTracker extends LockPatternUtils.StrongAuthTracker { private boolean mLockdownModeStatus; StrongAuthTracker(Context context, Looper looper) { super(context, looper); } @Override public synchronized void onStrongAuthRequiredChanged(int userId) { boolean lockDownTriggeredByUser = (getStrongAuthForUser(userId) & STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN) != 0; //if it goes into the same lockdown status, no change is needed if (mLockdownModeStatus == lockDownTriggeredByUser) { return; } mLockdownModeStatus = lockDownTriggeredByUser; for (UsbPort port: mPortManager.getPorts()) { enableUsbData(port.getId(), !lockDownTriggeredByUser, STRONG_AUTH_OPERATION_ID, new IUsbOperationInternal.Default()); } } } }