From c1bc0a844d2e8fdb9bc6f73d80579f69e2701f62 Mon Sep 17 00:00:00 2001 From: Jerry Zhang Date: Mon, 23 Jan 2017 14:14:09 -0800 Subject: [PATCH 1/2] Only send usb disconnect intents after boot. This prevents cases where the device starts up and attempts to change the config, but intents cannot yet be sent. A patch to resend this skipped intent is necessary to finish fixing the bug. Bug: 34451258 Test: Check that usb state is properly handled on boot Change-Id: I9d79c67ce8982fd5b43fa40781b66bb9ae820694 --- .../usb/java/com/android/server/usb/UsbDeviceManager.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java index b3f5630b8e257..c93acfc5e6e88 100644 --- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java +++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java @@ -740,11 +740,12 @@ 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(); } From af6d473ab06afc5ca60bf61513e1197886d56af6 Mon Sep 17 00:00:00 2001 From: Badhri Jagan Sridharan Date: Mon, 23 Jan 2017 16:28:38 -0800 Subject: [PATCH 2/2] Check and send usb state broadcast when devices boots Broadcasts are not sent until BOOT_COMPLETED is received. When the device boots with usb plugged, the UPDATE_STATE for connted and configured would be received way before BOOT_COMPLETED is received. Since, devices can continue to stay in same usb configuration(set through persistent property trigger), check and send a usb state broadcast if needed. BUG: 34451258 Test: Manually checked to verify the broadcasts sent. Change-Id: I8eca5f241ad758f5c4f1afa6c9807868dfd6195a --- .../java/com/android/server/usb/UsbDeviceManager.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java index c93acfc5e6e88..00c36f989df3b 100644 --- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java +++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java @@ -150,6 +150,7 @@ public class UsbDeviceManager { private UsbDebuggingManager mDebuggingManager; private final UsbAlsaManager mUsbAlsaManager; private Intent mBroadcastedIntent; + private boolean mPendingBootBroadcast; private class AdbSettingsObserver extends ContentObserver { public AdbSettingsObserver() { @@ -748,6 +749,8 @@ public class UsbDeviceManager { } updateUsbStateBroadcastIfNeeded(false); updateUsbFunctions(); + } else { + mPendingBootBroadcast = true; } break; case MSG_UPDATE_HOST_STATE: @@ -759,6 +762,8 @@ public class UsbDeviceManager { updateUsbNotification(); if (mBootCompleted) { updateUsbStateBroadcastIfNeeded(false); + } else { + mPendingBootBroadcast = true; } break; case MSG_ENABLE_ADB: @@ -778,6 +783,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);