Refactored setCurrentFunction and setUsbDataUnlocked into single method.
am: 935372bfd6
Change-Id: I5436278e092f691c9179f7cc3709c4578b544e74
This commit is contained in:
@@ -50,7 +50,7 @@ public class UsbCommand extends Svc.Command {
|
||||
IUsbManager usbMgr = IUsbManager.Stub.asInterface(ServiceManager.getService(
|
||||
Context.USB_SERVICE));
|
||||
try {
|
||||
usbMgr.setCurrentFunction((args.length >=3 ? args[2] : null));
|
||||
usbMgr.setCurrentFunction((args.length >=3 ? args[2] : null), false);
|
||||
} catch (RemoteException e) {
|
||||
System.err.println("Error communicating with UsbManager: " + e);
|
||||
}
|
||||
|
||||
@@ -87,15 +87,13 @@ interface IUsbManager
|
||||
/* Returns true if the specified USB function is enabled. */
|
||||
boolean isFunctionEnabled(String function);
|
||||
|
||||
/* Sets the current USB function. */
|
||||
void setCurrentFunction(String function);
|
||||
|
||||
/* Sets whether USB data (for example, MTP exposed pictures) should be made
|
||||
* available on the USB connection. Unlocking data should only be done with
|
||||
* user involvement, since exposing pictures or other data could leak sensitive
|
||||
* user information.
|
||||
/* Sets the current USB function as well as whether USB data
|
||||
* (for example, MTP exposed pictures) should be made available
|
||||
* on the USB connection. Unlocking data should only be done with
|
||||
* user involvement, since exposing pictures or other data could
|
||||
* leak sensitive user information.
|
||||
*/
|
||||
void setUsbDataUnlocked(boolean unlock);
|
||||
void setCurrentFunction(String function, boolean usbDataUnlocked);
|
||||
|
||||
/* Allow USB debugging from the attached host. If alwaysAllow is true, add the
|
||||
* the public key to list of host keys that the user has approved.
|
||||
|
||||
@@ -530,33 +530,23 @@ public class UsbManager {
|
||||
* {@link #USB_FUNCTION_MIDI}, {@link #USB_FUNCTION_MTP}, {@link #USB_FUNCTION_PTP},
|
||||
* or {@link #USB_FUNCTION_RNDIS}.
|
||||
* </p><p>
|
||||
* Also sets whether USB data (for example, MTP exposed pictures) should be made available
|
||||
* on the USB connection when in device mode. Unlocking usb data should only be done with
|
||||
* user involvement, since exposing pictures or other data could leak sensitive
|
||||
* user information.
|
||||
* </p><p>
|
||||
* Note: This function is asynchronous and may fail silently without applying
|
||||
* the requested changes.
|
||||
* </p>
|
||||
*
|
||||
* @param function name of the USB function, or null to restore the default function
|
||||
* @param usbDataUnlocked whether user data is accessible
|
||||
*
|
||||
* {@hide}
|
||||
*/
|
||||
public void setCurrentFunction(String function) {
|
||||
public void setCurrentFunction(String function, boolean usbDataUnlocked) {
|
||||
try {
|
||||
mService.setCurrentFunction(function);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether USB data (for example, MTP exposed pictures) should be made available
|
||||
* on the USB connection when in device mode. Unlocking usb data should only be done with
|
||||
* user involvement, since exposing pictures or other data could leak sensitive
|
||||
* user information.
|
||||
*
|
||||
* {@hide}
|
||||
*/
|
||||
public void setUsbDataUnlocked(boolean unlocked) {
|
||||
try {
|
||||
mService.setUsbDataUnlocked(unlocked);
|
||||
mService.setCurrentFunction(function, usbDataUnlocked);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
|
||||
@@ -901,7 +901,7 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
|
||||
}
|
||||
} else {
|
||||
mUsbTetherRequested = true;
|
||||
usbManager.setCurrentFunction(UsbManager.USB_FUNCTION_RNDIS);
|
||||
usbManager.setCurrentFunction(UsbManager.USB_FUNCTION_RNDIS, false);
|
||||
}
|
||||
} else {
|
||||
final long ident = Binder.clearCallingIdentity();
|
||||
@@ -911,7 +911,7 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
|
||||
Binder.restoreCallingIdentity(ident);
|
||||
}
|
||||
if (mRndisEnabled) {
|
||||
usbManager.setCurrentFunction(null);
|
||||
usbManager.setCurrentFunction(null, false);
|
||||
}
|
||||
mUsbTetherRequested = false;
|
||||
}
|
||||
|
||||
@@ -109,9 +109,8 @@ public class UsbDeviceManager {
|
||||
private static final int MSG_SYSTEM_READY = 3;
|
||||
private static final int MSG_BOOT_COMPLETED = 4;
|
||||
private static final int MSG_USER_SWITCHED = 5;
|
||||
private static final int MSG_SET_USB_DATA_UNLOCKED = 6;
|
||||
private static final int MSG_UPDATE_USER_RESTRICTIONS = 7;
|
||||
private static final int MSG_UPDATE_HOST_STATE = 8;
|
||||
private static final int MSG_UPDATE_USER_RESTRICTIONS = 6;
|
||||
private static final int MSG_UPDATE_HOST_STATE = 7;
|
||||
|
||||
private static final int AUDIO_MODE_SOURCE = 1;
|
||||
|
||||
@@ -288,7 +287,7 @@ public class UsbDeviceManager {
|
||||
|
||||
if (functions != null) {
|
||||
mAccessoryModeRequestTime = SystemClock.elapsedRealtime();
|
||||
setCurrentFunctions(functions);
|
||||
setCurrentFunctions(functions, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -384,6 +383,14 @@ public class UsbDeviceManager {
|
||||
sendMessage(m);
|
||||
}
|
||||
|
||||
public void sendMessage(int what, Object arg, boolean arg1) {
|
||||
removeMessages(what);
|
||||
Message m = Message.obtain(this, what);
|
||||
m.obj = arg;
|
||||
m.arg1 = (arg1 ? 1 : 0);
|
||||
sendMessage(m);
|
||||
}
|
||||
|
||||
public void updateState(String state) {
|
||||
int connected, configured;
|
||||
|
||||
@@ -448,14 +455,6 @@ public class UsbDeviceManager {
|
||||
return waitForState(config);
|
||||
}
|
||||
|
||||
private void setUsbDataUnlocked(boolean enable) {
|
||||
if (DEBUG) Slog.d(TAG, "setUsbDataUnlocked: " + enable);
|
||||
mUsbDataUnlocked = enable;
|
||||
updateUsbNotification();
|
||||
updateUsbStateBroadcastIfNeeded();
|
||||
setEnabledFunctions(mCurrentFunctions, true);
|
||||
}
|
||||
|
||||
private void setAdbEnabled(boolean enable) {
|
||||
if (DEBUG) Slog.d(TAG, "setAdbEnabled: " + enable);
|
||||
if (enable != mAdbEnabled) {
|
||||
@@ -490,6 +489,12 @@ public class UsbDeviceManager {
|
||||
if (DEBUG) Slog.d(TAG, "setEnabledFunctions functions=" + functions + ", "
|
||||
+ "forceRestart=" + forceRestart);
|
||||
|
||||
if (usbDataUnlocked != mUsbDataUnlocked) {
|
||||
mUsbDataUnlocked = usbDataUnlocked;
|
||||
updateUsbNotification();
|
||||
forceRestart = true;
|
||||
}
|
||||
|
||||
// Try to set the enabled functions.
|
||||
final String oldFunctions = mCurrentFunctions;
|
||||
final boolean oldFunctionsApplied = mCurrentFunctionsApplied;
|
||||
@@ -592,7 +597,7 @@ public class UsbDeviceManager {
|
||||
// make sure accessory mode is off
|
||||
// and restore default functions
|
||||
Slog.d(TAG, "exited USB accessory mode");
|
||||
setEnabledFunctions(null, false);
|
||||
setEnabledFunctions(null, false, false);
|
||||
|
||||
if (mCurrentAccessory != null) {
|
||||
if (mBootCompleted) {
|
||||
@@ -721,10 +726,7 @@ public class UsbDeviceManager {
|
||||
case MSG_UPDATE_STATE:
|
||||
mConnected = (msg.arg1 == 1);
|
||||
mConfigured = (msg.arg2 == 1);
|
||||
if (!mConnected) {
|
||||
// When a disconnect occurs, relock access to sensitive user data
|
||||
mUsbDataUnlocked = false;
|
||||
}
|
||||
|
||||
updateUsbNotification();
|
||||
updateAdbNotification();
|
||||
if (UsbManager.containsFunction(mCurrentFunctions,
|
||||
@@ -732,7 +734,7 @@ public class UsbDeviceManager {
|
||||
updateCurrentAccessory();
|
||||
} else if (!mConnected) {
|
||||
// restore defaults when USB is disconnected
|
||||
setEnabledFunctions(null, false);
|
||||
setEnabledFunctions(null, false, false);
|
||||
}
|
||||
if (mBootCompleted) {
|
||||
updateUsbStateBroadcastIfNeeded();
|
||||
@@ -755,13 +757,10 @@ public class UsbDeviceManager {
|
||||
break;
|
||||
case MSG_SET_CURRENT_FUNCTIONS:
|
||||
String functions = (String)msg.obj;
|
||||
setEnabledFunctions(functions, false);
|
||||
setEnabledFunctions(functions, false, msg.arg1 == 1);
|
||||
break;
|
||||
case MSG_UPDATE_USER_RESTRICTIONS:
|
||||
setEnabledFunctions(mCurrentFunctions, false);
|
||||
break;
|
||||
case MSG_SET_USB_DATA_UNLOCKED:
|
||||
setUsbDataUnlocked(msg.arg1 == 1);
|
||||
setEnabledFunctions(mCurrentFunctions, false, mUsbDataUnlocked);
|
||||
break;
|
||||
case MSG_SYSTEM_READY:
|
||||
updateUsbNotification();
|
||||
@@ -789,8 +788,7 @@ public class UsbDeviceManager {
|
||||
Slog.v(TAG, "Current user switched to " + mCurrentUser
|
||||
+ "; resetting USB host stack for MTP or PTP");
|
||||
// avoid leaking sensitive data from previous user
|
||||
mUsbDataUnlocked = false;
|
||||
setEnabledFunctions(mCurrentFunctions, true);
|
||||
setEnabledFunctions(mCurrentFunctions, true, false);
|
||||
}
|
||||
mCurrentUser = msg.arg1;
|
||||
}
|
||||
@@ -974,14 +972,10 @@ public class UsbDeviceManager {
|
||||
return UsbManager.containsFunction(SystemProperties.get(USB_CONFIG_PROPERTY), function);
|
||||
}
|
||||
|
||||
public void setCurrentFunctions(String functions) {
|
||||
if (DEBUG) Slog.d(TAG, "setCurrentFunctions(" + functions + ")");
|
||||
mHandler.sendMessage(MSG_SET_CURRENT_FUNCTIONS, functions);
|
||||
}
|
||||
|
||||
public void setUsbDataUnlocked(boolean unlocked) {
|
||||
if (DEBUG) Slog.d(TAG, "setUsbDataUnlocked(" + unlocked + ")");
|
||||
mHandler.sendMessage(MSG_SET_USB_DATA_UNLOCKED, unlocked);
|
||||
public void setCurrentFunctions(String functions, boolean usbDataUnlocked) {
|
||||
if (DEBUG) Slog.d(TAG, "setCurrentFunctions(" + functions + ", " +
|
||||
usbDataUnlocked + ")");
|
||||
mHandler.sendMessage(MSG_SET_CURRENT_FUNCTIONS, functions, usbDataUnlocked);
|
||||
}
|
||||
|
||||
private void readOemUsbOverrideConfig() {
|
||||
|
||||
@@ -287,7 +287,7 @@ public class UsbService extends IUsbManager.Stub {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCurrentFunction(String function) {
|
||||
public void setCurrentFunction(String function, boolean usbDataUnlocked) {
|
||||
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
|
||||
|
||||
if (!isSupportedCurrentFunction(function)) {
|
||||
@@ -297,7 +297,7 @@ public class UsbService extends IUsbManager.Stub {
|
||||
}
|
||||
|
||||
if (mDeviceManager != null) {
|
||||
mDeviceManager.setCurrentFunctions(function);
|
||||
mDeviceManager.setCurrentFunctions(function, usbDataUnlocked);
|
||||
} else {
|
||||
throw new IllegalStateException("USB device mode not supported");
|
||||
}
|
||||
@@ -319,12 +319,6 @@ public class UsbService extends IUsbManager.Stub {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUsbDataUnlocked(boolean unlocked) {
|
||||
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
|
||||
mDeviceManager.setUsbDataUnlocked(unlocked);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void allowUsbDebugging(boolean alwaysAllow, String publicKey) {
|
||||
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
|
||||
|
||||
Reference in New Issue
Block a user