* commit 'b2c718146b1be18942bc5d76be68e0d437cbbe8b': UsbDeviceManager: fix b/21429947 regression (try #2)
This commit is contained in:
@@ -97,9 +97,6 @@ interface IUsbManager
|
|||||||
*/
|
*/
|
||||||
void setUsbDataUnlocked(boolean unlock);
|
void setUsbDataUnlocked(boolean unlock);
|
||||||
|
|
||||||
/* Returns true iff sensitive user data is exposed on the USB connection. */
|
|
||||||
boolean isUsbDataUnlocked();
|
|
||||||
|
|
||||||
/* Allow USB debugging from the attached host. If alwaysAllow is true, add the
|
/* 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.
|
* the public key to list of host keys that the user has approved.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -519,21 +519,6 @@ public class UsbManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns {@code true} iff access to sensitive USB data is currently allowed when
|
|
||||||
* in device mode.
|
|
||||||
*
|
|
||||||
* {@hide}
|
|
||||||
*/
|
|
||||||
public boolean isUsbDataUnlocked() {
|
|
||||||
try {
|
|
||||||
return mService.isUsbDataUnlocked();
|
|
||||||
} catch (RemoteException e) {
|
|
||||||
Log.e(TAG, "RemoteException in isUsbDataUnlocked", e);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a list of physical USB ports on the device.
|
* Returns a list of physical USB ports on the device.
|
||||||
* <p>
|
* <p>
|
||||||
|
|||||||
@@ -49,10 +49,8 @@ import com.android.internal.util.IndentingPrintWriter;
|
|||||||
import com.android.server.FgThread;
|
import com.android.server.FgThread;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileDescriptor;
|
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintWriter;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -316,6 +314,9 @@ public class UsbDeviceManager {
|
|||||||
// Restore default functions.
|
// Restore default functions.
|
||||||
mCurrentFunctions = SystemProperties.get(USB_CONFIG_PROPERTY,
|
mCurrentFunctions = SystemProperties.get(USB_CONFIG_PROPERTY,
|
||||||
UsbManager.USB_FUNCTION_NONE);
|
UsbManager.USB_FUNCTION_NONE);
|
||||||
|
if (UsbManager.USB_FUNCTION_NONE.equals(mCurrentFunctions)) {
|
||||||
|
mCurrentFunctions = UsbManager.USB_FUNCTION_MTP;
|
||||||
|
}
|
||||||
mCurrentFunctionsApplied = mCurrentFunctions.equals(
|
mCurrentFunctionsApplied = mCurrentFunctions.equals(
|
||||||
SystemProperties.get(USB_STATE_PROPERTY));
|
SystemProperties.get(USB_STATE_PROPERTY));
|
||||||
mAdbEnabled = UsbManager.containsFunction(getDefaultFunctions(),
|
mAdbEnabled = UsbManager.containsFunction(getDefaultFunctions(),
|
||||||
@@ -400,6 +401,14 @@ public class UsbDeviceManager {
|
|||||||
return waitForState(config);
|
return waitForState(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setUsbDataUnlocked(boolean enable) {
|
||||||
|
if (DEBUG) Slog.d(TAG, "setUsbDataUnlocked: " + enable);
|
||||||
|
mUsbDataUnlocked = enable;
|
||||||
|
updateUsbNotification();
|
||||||
|
updateUsbStateBroadcast();
|
||||||
|
setEnabledFunctions(mCurrentFunctions, true);
|
||||||
|
}
|
||||||
|
|
||||||
private void setAdbEnabled(boolean enable) {
|
private void setAdbEnabled(boolean enable) {
|
||||||
if (DEBUG) Slog.d(TAG, "setAdbEnabled: " + enable);
|
if (DEBUG) Slog.d(TAG, "setAdbEnabled: " + enable);
|
||||||
if (enable != mAdbEnabled) {
|
if (enable != mAdbEnabled) {
|
||||||
@@ -471,7 +480,6 @@ public class UsbDeviceManager {
|
|||||||
}
|
}
|
||||||
functions = applyAdbFunction(functions);
|
functions = applyAdbFunction(functions);
|
||||||
functions = applyOemOverrideFunction(functions);
|
functions = applyOemOverrideFunction(functions);
|
||||||
functions = applyUserRestrictions(functions);
|
|
||||||
|
|
||||||
if (!mCurrentFunctions.equals(functions) || !mCurrentFunctionsApplied
|
if (!mCurrentFunctions.equals(functions) || !mCurrentFunctionsApplied
|
||||||
|| forceRestart) {
|
|| forceRestart) {
|
||||||
@@ -502,13 +510,9 @@ public class UsbDeviceManager {
|
|||||||
return functions;
|
return functions;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String applyUserRestrictions(String functions) {
|
private boolean isUsbTransferAllowed() {
|
||||||
UserManager userManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
|
UserManager userManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
|
||||||
if (userManager.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER)) {
|
return !userManager.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER);
|
||||||
functions = UsbManager.removeFunction(functions, UsbManager.USB_FUNCTION_MTP);
|
|
||||||
functions = UsbManager.removeFunction(functions, UsbManager.USB_FUNCTION_PTP);
|
|
||||||
}
|
|
||||||
return functions;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateCurrentAccessory() {
|
private void updateCurrentAccessory() {
|
||||||
@@ -555,7 +559,7 @@ public class UsbDeviceManager {
|
|||||||
| Intent.FLAG_RECEIVER_FOREGROUND);
|
| Intent.FLAG_RECEIVER_FOREGROUND);
|
||||||
intent.putExtra(UsbManager.USB_CONNECTED, mConnected);
|
intent.putExtra(UsbManager.USB_CONNECTED, mConnected);
|
||||||
intent.putExtra(UsbManager.USB_CONFIGURED, mConfigured);
|
intent.putExtra(UsbManager.USB_CONFIGURED, mConfigured);
|
||||||
intent.putExtra(UsbManager.USB_DATA_UNLOCKED, mUsbDataUnlocked);
|
intent.putExtra(UsbManager.USB_DATA_UNLOCKED, isUsbTransferAllowed() && mUsbDataUnlocked);
|
||||||
|
|
||||||
if (mCurrentFunctions != null) {
|
if (mCurrentFunctions != null) {
|
||||||
String[] functions = mCurrentFunctions.split(",");
|
String[] functions = mCurrentFunctions.split(",");
|
||||||
@@ -659,10 +663,7 @@ public class UsbDeviceManager {
|
|||||||
setEnabledFunctions(mCurrentFunctions, false);
|
setEnabledFunctions(mCurrentFunctions, false);
|
||||||
break;
|
break;
|
||||||
case MSG_SET_USB_DATA_UNLOCKED:
|
case MSG_SET_USB_DATA_UNLOCKED:
|
||||||
mUsbDataUnlocked = (msg.arg1 == 1);
|
setUsbDataUnlocked(msg.arg1 == 1);
|
||||||
updateUsbNotification();
|
|
||||||
updateUsbStateBroadcast();
|
|
||||||
setEnabledFunctions(mCurrentFunctions, true);
|
|
||||||
break;
|
break;
|
||||||
case MSG_SYSTEM_READY:
|
case MSG_SYSTEM_READY:
|
||||||
updateUsbNotification();
|
updateUsbNotification();
|
||||||
@@ -807,8 +808,12 @@ public class UsbDeviceManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getDefaultFunctions() {
|
private String getDefaultFunctions() {
|
||||||
return SystemProperties.get(USB_PERSISTENT_CONFIG_PROPERTY,
|
String func = SystemProperties.get(USB_PERSISTENT_CONFIG_PROPERTY,
|
||||||
UsbManager.USB_FUNCTION_ADB);
|
UsbManager.USB_FUNCTION_NONE);
|
||||||
|
if (UsbManager.USB_FUNCTION_NONE.equals(func)) {
|
||||||
|
func = UsbManager.USB_FUNCTION_MTP;
|
||||||
|
}
|
||||||
|
return func;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dump(IndentingPrintWriter pw) {
|
public void dump(IndentingPrintWriter pw) {
|
||||||
@@ -817,6 +822,7 @@ public class UsbDeviceManager {
|
|||||||
pw.println(" mCurrentFunctionsApplied: " + mCurrentFunctionsApplied);
|
pw.println(" mCurrentFunctionsApplied: " + mCurrentFunctionsApplied);
|
||||||
pw.println(" mConnected: " + mConnected);
|
pw.println(" mConnected: " + mConnected);
|
||||||
pw.println(" mConfigured: " + mConfigured);
|
pw.println(" mConfigured: " + mConfigured);
|
||||||
|
pw.println(" mUsbDataUnlocked: " + mUsbDataUnlocked);
|
||||||
pw.println(" mCurrentAccessory: " + mCurrentAccessory);
|
pw.println(" mCurrentAccessory: " + mCurrentAccessory);
|
||||||
try {
|
try {
|
||||||
pw.println(" Kernel state: "
|
pw.println(" Kernel state: "
|
||||||
@@ -864,11 +870,6 @@ public class UsbDeviceManager {
|
|||||||
mHandler.sendMessage(MSG_SET_USB_DATA_UNLOCKED, unlocked);
|
mHandler.sendMessage(MSG_SET_USB_DATA_UNLOCKED, unlocked);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isUsbDataUnlocked() {
|
|
||||||
if (DEBUG) Slog.d(TAG, "isUsbDataUnlocked() -> " + mHandler.mUsbDataUnlocked);
|
|
||||||
return mHandler.mUsbDataUnlocked;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void readOemUsbOverrideConfig() {
|
private void readOemUsbOverrideConfig() {
|
||||||
String[] configList = mContext.getResources().getStringArray(
|
String[] configList = mContext.getResources().getStringArray(
|
||||||
com.android.internal.R.array.config_oemUsbModeOverride);
|
com.android.internal.R.array.config_oemUsbModeOverride);
|
||||||
|
|||||||
@@ -322,22 +322,9 @@ public class UsbService extends IUsbManager.Stub {
|
|||||||
@Override
|
@Override
|
||||||
public void setUsbDataUnlocked(boolean unlocked) {
|
public void setUsbDataUnlocked(boolean unlocked) {
|
||||||
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
|
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
|
||||||
// If attempt to change USB function while file transfer is restricted, ensure that
|
|
||||||
// usb data is always locked, and return.
|
|
||||||
UserManager userManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
|
|
||||||
if (userManager.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER)) {
|
|
||||||
if (mDeviceManager != null) mDeviceManager.setUsbDataUnlocked(false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mDeviceManager.setUsbDataUnlocked(unlocked);
|
mDeviceManager.setUsbDataUnlocked(unlocked);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isUsbDataUnlocked() {
|
|
||||||
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
|
|
||||||
return mDeviceManager.isUsbDataUnlocked();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void allowUsbDebugging(boolean alwaysAllow, String publicKey) {
|
public void allowUsbDebugging(boolean alwaysAllow, String publicKey) {
|
||||||
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
|
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
|
||||||
|
|||||||
Reference in New Issue
Block a user