Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5e79cbb2 authored by Badhri Jagan Sridharan's avatar Badhri Jagan Sridharan
Browse files

Always reevaluate whether to show the notification for USB_DEVICE_* intents

The decision whether to show or hide the "Usb supplying power.."
notification is based on two different broadcasts
1. USB_DEVICE_ATTACHED/DETACHED
2. USB_PORT_CHANGED

Depending on how long the port takes to enumerate, the required
intents might arrive in different order. Previously, it was assumed
that the ATTACHED broadcast would arrive before the PORT_CHANGED
broadcast and the code was aggressive to reduce the number of
times the decision to display/hide the notification is made.
This might cause the notification to be displayed in some instances
when it is not supposed to be displayed. This CL makes the usb service
to always reevaluate whenever USB_DEVICE_ATTACHED/DETACHED is
received.

Also, adding logs to print whenever the notification in enqueued/
dequeued.

Bug: 63785369
Test: Verified that the notification is displayed when connecting
to another pixel device and hidden when mouse or headset is
connected.
Change-Id: I30650a2d9923d01a1fce4b9450e65ec7f4e6557b
parent f99ac67b
Loading
Loading
Loading
Loading
+16 −9
Original line number Diff line number Diff line
@@ -956,11 +956,6 @@ public class UsbDeviceManager {
                        Slog.i(TAG, "HOST_STATE connected:" + connected);
                    }

                    if ((mHideUsbNotification && connected)
                            || (!mHideUsbNotification && !connected)) {
                        break;
                    }

                    mHideUsbNotification = false;
                    while (devices.hasNext()) {
                        Map.Entry pair = (Map.Entry) devices.next();
@@ -1061,12 +1056,22 @@ public class UsbDeviceManager {

        private void updateUsbNotification(boolean force) {
            if (mNotificationManager == null || !mUseUsbNotification
                    || ("0".equals(SystemProperties.get("persist.charging.notify")))
                    || ("0".equals(SystemProperties.get("persist.charging.notify")))) {
                return;
            }

            // Dont show the notification when connected to a USB peripheral
            // and the link does not support PR_SWAP and DR_SWAP
                    || (mHideUsbNotification && !mSupportsAllCombinations)) {
            if (mHideUsbNotification && !mSupportsAllCombinations) {
                if (mUsbNotificationId != 0) {
                    mNotificationManager.cancelAsUser(null, mUsbNotificationId,
                            UserHandle.ALL);
                    mUsbNotificationId = 0;
                    Slog.d(TAG, "Clear notification");
                }
                return;
            }

            int id = 0;
            int titleRes = 0;
            Resources r = mContext.getResources();
@@ -1117,6 +1122,7 @@ public class UsbDeviceManager {
                if (mUsbNotificationId != 0) {
                    mNotificationManager.cancelAsUser(null, mUsbNotificationId,
                            UserHandle.ALL);
                    Slog.d(TAG, "Clear notification");
                    mUsbNotificationId = 0;
                }
                if (id != 0) {
@@ -1173,6 +1179,7 @@ public class UsbDeviceManager {

                    mNotificationManager.notifyAsUser(null, id, notification,
                            UserHandle.ALL);
                    Slog.d(TAG, "push notification:" + title);
                    mUsbNotificationId = id;
                }
            }