OSDN Git Service

Fixed an issue where the notification wouldn't go away
authorSelim Cinek <cinek@google.com>
Thu, 18 Jan 2018 00:24:36 +0000 (16:24 -0800)
committerSelim Cinek <cinek@google.com>
Thu, 18 Jan 2018 00:24:36 +0000 (16:24 -0800)
When autocancelling, the logic wasn't working anymore after
we kept a notification around for a while.
This is now properly working.

Change-Id: I73f5485577e6ae081411638a4e3bd4f08cffc23c
Fixes: 27851227
Bug: 63708826
Test: add notification with auto-cancel, reply from it, click on it again

packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java
packages/SystemUI/src/com/android/systemui/statusbar/NotificationEntryManager.java
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java

index 9c893b6..127f3f9 100644 (file)
@@ -272,6 +272,11 @@ public class NotificationData {
         public Throwable getDebugThrowable() {
             return mDebugThrowable;
         }
+
+        public void onRemoteInputInserted() {
+            lastRemoteInputSent = NOT_LAUNCHED_YET;
+            remoteInputTextWhenReset = null;
+        }
     }
 
     private final ArrayMap<String, Entry> mEntries = new ArrayMap<>();
index 6249ace..5b06874 100644 (file)
@@ -498,6 +498,7 @@ public class NotificationEntryManager implements Dumpable, NotificationInflater.
                     sbn.getId(), sbn.getTag(), sbn.getUid(), sbn.getInitialPid(),
                     newNotification, sbn.getUser(), sbn.getOverrideGroupKey(), sbn.getPostTime());
             boolean updated = false;
+            entry.onRemoteInputInserted();
             try {
                 updateNotificationInternal(newSbn, null);
                 updated = true;
index af65a86..5e08ec3 100644 (file)
@@ -4931,18 +4931,11 @@ public class StatusBar extends SystemUI implements DemoMode,
                     // system process is dead if we're here.
                 }
                 if (parentToCancelFinal != null) {
-                    // We have to post it to the UI thread for synchronization
-                    mHandler.post(() -> {
-                        Runnable removeRunnable =
-                                () -> mEntryManager.performRemoveNotification(parentToCancelFinal);
-                        if (isCollapsing()) {
-                            // To avoid lags we're only performing the remove
-                            // after the shade was collapsed
-                            addPostCollapseAction(removeRunnable);
-                        } else {
-                            removeRunnable.run();
-                        }
-                    });
+                    removeNotification(parentToCancelFinal);
+                }
+                if (shouldAutoCancel(sbn)) {
+                    // Automatically remove all notifications that we may have kept around longer
+                    removeNotification(sbn);
                 }
             };
 
@@ -4966,6 +4959,21 @@ public class StatusBar extends SystemUI implements DemoMode,
         }, afterKeyguardGone);
     }
 
+    private void removeNotification(StatusBarNotification notification) {
+        // We have to post it to the UI thread for synchronization
+        mHandler.post(() -> {
+            Runnable removeRunnable =
+                    () -> mEntryManager.performRemoveNotification(notification);
+            if (isCollapsing()) {
+                // To avoid lags we're only performing the remove
+                // after the shade was collapsed
+                addPostCollapseAction(removeRunnable);
+            } else {
+                removeRunnable.run();
+            }
+        });
+    }
+
     protected NotificationListener mNotificationListener;
 
     protected void notifyUserAboutHiddenNotifications() {