diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java index fbbe636e62208..4d2c3b958c568 100644 --- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java +++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java @@ -157,6 +157,7 @@ public class UsbDeviceManager { private final UsbAlsaManager mUsbAlsaManager; private final UsbSettingsManager mSettingsManager; private Intent mBroadcastedIntent; + private boolean mPendingBootBroadcast; private class AdbSettingsObserver extends ContentObserver { public AdbSettingsObserver() { @@ -755,13 +756,16 @@ public class UsbDeviceManager { if (UsbManager.containsFunction(mCurrentFunctions, UsbManager.USB_FUNCTION_ACCESSORY)) { updateCurrentAccessory(); - } else if (!mConnected) { - // restore defaults when USB is disconnected - setEnabledFunctions(null, false, false); } if (mBootCompleted) { + if (!mConnected) { + // restore defaults when USB is disconnected + setEnabledFunctions(null, false, false); + } updateUsbStateBroadcastIfNeeded(false); updateUsbFunctions(); + } else { + mPendingBootBroadcast = true; } break; case MSG_UPDATE_HOST_STATE: @@ -773,6 +777,8 @@ public class UsbDeviceManager { updateUsbNotification(); if (mBootCompleted) { updateUsbStateBroadcastIfNeeded(false); + } else { + mPendingBootBroadcast = true; } break; case MSG_ENABLE_ADB: @@ -792,6 +798,10 @@ public class UsbDeviceManager { break; case MSG_BOOT_COMPLETED: mBootCompleted = true; + if (mPendingBootBroadcast) { + updateUsbStateBroadcastIfNeeded(false); + mPendingBootBroadcast = false; + } setEnabledFunctions(null, false, false); if (mCurrentAccessory != null) { getCurrentSettings().accessoryAttached(mCurrentAccessory);