am c9ac3f51
: Merge "DO NOT MERGE: UsbService: Make sure the USB accessory function is disabled when we disconnect" into gingerbread
* commit 'c9ac3f5183be3f124f34ed49ac5766e0ba1aff77': DO NOT MERGE: UsbService: Make sure the USB accessory function is disabled when we disconnect
This commit is contained in:
@ -92,8 +92,8 @@ public class UsbService extends IUsbManager.Stub {
|
|||||||
private boolean mSystemReady;
|
private boolean mSystemReady;
|
||||||
|
|
||||||
private UsbAccessory mCurrentAccessory;
|
private UsbAccessory mCurrentAccessory;
|
||||||
// functions to restore after exiting accessory mode
|
// USB functions that are enabled by default, to restore after exiting accessory mode
|
||||||
private final ArrayList<String> mAccessoryRestoreFunctions = new ArrayList<String>();
|
private final ArrayList<String> mDefaultFunctions = new ArrayList<String>();
|
||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final Object mLock = new Object();
|
private final Object mLock = new Object();
|
||||||
@ -107,20 +107,6 @@ public class UsbService extends IUsbManager.Stub {
|
|||||||
boolean enteringAccessoryMode =
|
boolean enteringAccessoryMode =
|
||||||
(mHasUsbAccessory && enabled && UsbManager.USB_FUNCTION_ACCESSORY.equals(function));
|
(mHasUsbAccessory && enabled && UsbManager.USB_FUNCTION_ACCESSORY.equals(function));
|
||||||
|
|
||||||
if (enteringAccessoryMode) {
|
|
||||||
// keep a list of functions to reenable after exiting accessory mode
|
|
||||||
mAccessoryRestoreFunctions.clear();
|
|
||||||
int count = mEnabledFunctions.size();
|
|
||||||
for (int i = 0; i < count; i++) {
|
|
||||||
String f = mEnabledFunctions.get(i);
|
|
||||||
// RNDIS should not be restored and adb is handled automatically
|
|
||||||
if (!UsbManager.USB_FUNCTION_RNDIS.equals(f) &&
|
|
||||||
!UsbManager.USB_FUNCTION_ADB.equals(f) &&
|
|
||||||
!UsbManager.USB_FUNCTION_ACCESSORY.equals(f)) {
|
|
||||||
mAccessoryRestoreFunctions.add(f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
if (!mEnabledFunctions.contains(function)) {
|
if (!mEnabledFunctions.contains(function)) {
|
||||||
mEnabledFunctions.add(function);
|
mEnabledFunctions.add(function);
|
||||||
@ -246,6 +232,11 @@ public class UsbService extends IUsbManager.Stub {
|
|||||||
String functionName = files[i].getName();
|
String functionName = files[i].getName();
|
||||||
if (value == 1) {
|
if (value == 1) {
|
||||||
mEnabledFunctions.add(functionName);
|
mEnabledFunctions.add(functionName);
|
||||||
|
// adb is enabled/disabled automatically by the adbd daemon,
|
||||||
|
// so don't treat it as a default function
|
||||||
|
if (!UsbManager.USB_FUNCTION_ADB.equals(functionName)) {
|
||||||
|
mDefaultFunctions.add(functionName);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
mDisabledFunctions.add(functionName);
|
mDisabledFunctions.add(functionName);
|
||||||
}
|
}
|
||||||
@ -338,29 +329,24 @@ public class UsbService extends IUsbManager.Stub {
|
|||||||
switch (msg.what) {
|
switch (msg.what) {
|
||||||
case MSG_UPDATE_STATE:
|
case MSG_UPDATE_STATE:
|
||||||
if (mConnected != mLastConnected || mConfiguration != mLastConfiguration) {
|
if (mConnected != mLastConnected || mConfiguration != mLastConfiguration) {
|
||||||
if (mConnected == 0 && mCurrentAccessory != null) {
|
if (mConnected == 0) {
|
||||||
// turn off accessory mode when we are disconnected
|
// make sure accessory mode is off, and restore default functions
|
||||||
if (UsbManager.setFunctionEnabled(
|
if (UsbManager.setFunctionEnabled(
|
||||||
UsbManager.USB_FUNCTION_ACCESSORY, false)) {
|
UsbManager.USB_FUNCTION_ACCESSORY, false)) {
|
||||||
Log.d(TAG, "exited USB accessory mode");
|
Log.d(TAG, "exited USB accessory mode");
|
||||||
|
|
||||||
// restore previously enabled functions
|
int count = mDefaultFunctions.size();
|
||||||
for (String function : mAccessoryRestoreFunctions) {
|
for (int i = 0; i < count; i++) {
|
||||||
|
String function = mDefaultFunctions.get(i);
|
||||||
if (UsbManager.setFunctionEnabled(function, true)) {
|
if (UsbManager.setFunctionEnabled(function, true)) {
|
||||||
Log.e(TAG, "could not reenable function " + function);
|
Log.e(TAG, "could not reenable function " + function);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mAccessoryRestoreFunctions.clear();
|
}
|
||||||
|
|
||||||
|
if (mCurrentAccessory != null) {
|
||||||
mDeviceManager.accessoryDetached(mCurrentAccessory);
|
mDeviceManager.accessoryDetached(mCurrentAccessory);
|
||||||
mCurrentAccessory = null;
|
mCurrentAccessory = null;
|
||||||
|
|
||||||
// this will cause an immediate reset of the USB bus,
|
|
||||||
// so there is no point in sending the
|
|
||||||
// function disabled broadcast.
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
Log.e(TAG, "could not disable USB_FUNCTION_ACCESSORY");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -416,8 +402,13 @@ public class UsbService extends IUsbManager.Stub {
|
|||||||
pw.print(mDisabledFunctions.get(i) + " ");
|
pw.print(mDisabledFunctions.get(i) + " ");
|
||||||
}
|
}
|
||||||
pw.println("");
|
pw.println("");
|
||||||
|
pw.print(" Default Functions: ");
|
||||||
|
for (int i = 0; i < mDefaultFunctions.size(); i++) {
|
||||||
|
pw.print(mDefaultFunctions.get(i) + " ");
|
||||||
|
}
|
||||||
|
pw.println("");
|
||||||
pw.println(" mConnected: " + mConnected + ", mConfiguration: " + mConfiguration);
|
pw.println(" mConnected: " + mConnected + ", mConfiguration: " + mConfiguration);
|
||||||
pw.println(" mCurrentAccessory: " + mCurrentAccessory);
|
pw.println(" mCurrentAccessory: " + mCurrentAccessory);
|
||||||
|
|
||||||
mDeviceManager.dump(fd, pw);
|
mDeviceManager.dump(fd, pw);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user