From 84dce3c9a8f217e8dbc038ebb85fd96d2d66c5f6 Mon Sep 17 00:00:00 2001 From: Ajay Dudani Date: Mon, 22 Jun 2015 15:46:41 -0700 Subject: [PATCH] UsbDeviceManager: Add back support for persistent property Take into account the value of persist.sys.usb.config when updating sys.usb.config. The persistent prop can hold information regarding additional enumerations required for the device. Bug: 21929369 Change-Id: Ic11ebf62ce114f2d0a097ad4405de71173b23139 --- .../android/server/usb/UsbDeviceManager.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java index 934ff528aa1df..e7716c234d40e 100644 --- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java +++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java @@ -319,6 +319,7 @@ public class UsbDeviceManager { private String mCurrentFunctions; private UsbAccessory mCurrentAccessory; private int mUsbNotificationId; + private String mDefaultFunctions; private boolean mAdbNotificationShown; private int mCurrentUser = UserHandle.USER_NULL; @@ -341,12 +342,18 @@ public class UsbDeviceManager { public UsbHandler(Looper looper) { super(looper); try { - // Special note about persist.sys.usb.config: We only ever look at the adb value - // from that property. Other values are ignored. persist.sys.usb.config is now - // only used to determine if adb is enabled or not. // TODO: rename persist.sys.usb.config to something more descriptive. // persist.sys.usb.config should never be unset. But if it is, set it to "adb" // so we have a chance of debugging what happened. + mDefaultFunctions = SystemProperties.get("persist.sys.usb.config", "adb"); + + // sanity check the sys.usb.config system property + // this may be necessary if we crashed while switching USB configurations + String config = SystemProperties.get("sys.usb.config", "none"); + if (!config.equals(mDefaultFunctions)) { + Slog.w(TAG, "resetting config to persistent property: " + mDefaultFunctions); + SystemProperties.set("sys.usb.config", mDefaultFunctions); + } mAdbEnabled = containsFunction( SystemProperties.get(UsbManager.ADB_PERSISTENT_PROPERTY, "adb"), @@ -414,11 +421,11 @@ public class UsbDeviceManager { } private void updatePersistentProperty() { - String newValue = mAdbEnabled ? "adb" : "none"; + String newValue = getDefaultFunctions(); String value = SystemProperties.get(UsbManager.ADB_PERSISTENT_PROPERTY); if (DEBUG) { Slog.d(TAG, "updatePersistentProperty newValue=" + newValue + " value=" + value); } if (!newValue.equals(value)) { - SystemProperties.set(UsbManager.ADB_PERSISTENT_PROPERTY, mAdbEnabled ? "adb" : "none"); + SystemProperties.set(UsbManager.ADB_PERSISTENT_PROPERTY, getDefaultFunctions()); } waitForState(newValue); } @@ -797,7 +804,12 @@ public class UsbDeviceManager { } private String getDefaultFunctions() { - return mAdbEnabled ? UsbManager.USB_FUNCTION_ADB : UsbManager.USB_FUNCTION_MTP; + UserManager userManager = (UserManager)mContext.getSystemService(Context.USER_SERVICE); + if(userManager.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER, + new UserHandle(mCurrentUser))) { + return "none"; + } + return mDefaultFunctions; } public void dump(FileDescriptor fd, PrintWriter pw) {