diff options
author | Howard Yen <howardyen@google.com> | 2019-01-15 03:55:00 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-01-15 03:55:00 +0000 |
commit | de18a38e3129edffff7cbea69a4236a29e7fc3f0 (patch) | |
tree | 2e154ad8d9f2bebbe778aedd182fdc0e4d860520 | |
parent | 2a8a4d56fec2313dae31b132fc915162f16feec1 (diff) | |
parent | ec1e90a786d092359bc6db78f36d8587086e24f2 (diff) | |
download | base-de18a38e3129edffff7cbea69a4236a29e7fc3f0.tar.gz |
Merge changes from topic "b/121448199" into pi-dev
* changes:
Make sure mCurrentUsbFunctionsRequested flag be updated currectly
Check for preexisting flag before enabling the gadget
-rw-r--r-- | services/usb/java/com/android/server/usb/UsbDeviceManager.java | 49 |
1 files changed, 32 insertions, 17 deletions
diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java index 9f8042c844de..d9710d9794c8 100644 --- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java +++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java @@ -152,6 +152,7 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver private static final int MSG_SET_FUNCTIONS_TIMEOUT = 15; private static final int MSG_GET_CURRENT_USB_FUNCTIONS = 16; private static final int MSG_FUNCTION_SWITCH_TIMEOUT = 17; + private static final int MSG_GADGET_HAL_REGISTERED = 18; private static final int AUDIO_MODE_SOURCE = 1; @@ -1732,10 +1733,16 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver protected static final String CTL_STOP = "ctl.stop"; /** - * Adb natvie daemon + * Adb native daemon. */ protected static final String ADBD = "adbd"; + /** + * Gadget HAL fully qualified instance name for registering for ServiceNotification. + */ + protected static final String GADGET_HAL_FQ_NAME = + "android.hardware.usb.gadget@1.0::IUsbGadget"; + protected boolean mCurrentUsbFunctionsRequested; UsbHandlerHal(Looper looper, Context context, UsbDeviceManager deviceManager, @@ -1746,8 +1753,7 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver ServiceNotification serviceNotification = new ServiceNotification(); boolean ret = IServiceManager.getService() - .registerForNotifications("android.hardware.usb.gadget@1.0::IUsbGadget", - "", serviceNotification); + .registerForNotifications(GADGET_HAL_FQ_NAME, "", serviceNotification); if (!ret) { Slog.e(TAG, "Failed to register usb gadget service start notification"); return; @@ -1758,8 +1764,8 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver mGadgetProxy.linkToDeath(new UsbGadgetDeathRecipient(), USB_GADGET_HAL_DEATH_COOKIE); mCurrentFunctions = UsbManager.FUNCTION_NONE; - mGadgetProxy.getCurrentUsbFunctions(new UsbGadgetCallback()); mCurrentUsbFunctionsRequested = true; + mGadgetProxy.getCurrentUsbFunctions(new UsbGadgetCallback()); } String state = FileUtils.readTextFile(new File(STATE_PATH), 0, null).trim(); updateState(state); @@ -1789,20 +1795,12 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver @Override public void onRegistration(String fqName, String name, boolean preexisting) { Slog.i(TAG, "Usb gadget hal service started " + fqName + " " + name); - synchronized (mGadgetProxyLock) { - try { - mGadgetProxy = IUsbGadget.getService(); - mGadgetProxy.linkToDeath(new UsbGadgetDeathRecipient(), - USB_GADGET_HAL_DEATH_COOKIE); - if (!mCurrentFunctionsApplied && !mCurrentUsbFunctionsRequested) { - setEnabledFunctions(mCurrentFunctions, false); - } - } catch (NoSuchElementException e) { - Slog.e(TAG, "Usb gadget hal not found", e); - } catch (RemoteException e) { - Slog.e(TAG, "Usb Gadget hal not responding", e); - } + if (!fqName.equals(GADGET_HAL_FQ_NAME)) { + Slog.e(TAG, "fqName does not match"); + return; } + + sendMessage(MSG_GADGET_HAL_REGISTERED, preexisting); } } @@ -1840,6 +1838,23 @@ public class UsbDeviceManager implements ActivityManagerInternal.ScreenObserver setEnabledFunctions(UsbManager.FUNCTION_NONE, !mAdbEnabled); } break; + case MSG_GADGET_HAL_REGISTERED: + boolean preexisting = msg.arg1 == 1; + synchronized (mGadgetProxyLock) { + try { + mGadgetProxy = IUsbGadget.getService(); + mGadgetProxy.linkToDeath(new UsbGadgetDeathRecipient(), + USB_GADGET_HAL_DEATH_COOKIE); + if (!mCurrentFunctionsApplied && !preexisting) { + setEnabledFunctions(mCurrentFunctions, false); + } + } catch (NoSuchElementException e) { + Slog.e(TAG, "Usb gadget hal not found", e); + } catch (RemoteException e) { + Slog.e(TAG, "Usb Gadget hal not responding", e); + } + } + break; default: super.handleMessage(msg); } |