From 761af0d76b0c85add3075d735a74b8adec8a806d Mon Sep 17 00:00:00 2001 From: Ned Burns Date: Thu, 3 Jan 2019 13:51:29 -0500 Subject: [PATCH] Fix NPE in NotificationLogger for real this time Previous nullcheck just caused another NPE. Actually checking the null value and adding a test this time. Bug: 122169343 Test: atest Change-Id: I4acc055b8d5039ea65fded43526780be883eaf74 --- .../notification/logging/NotificationLogger.java | 2 +- .../notification/logging/NotificationLoggerTest.java | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java index 32acb8df173cf..610d3003f0e93 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java @@ -174,7 +174,7 @@ public class NotificationLogger implements StateListener { NotificationVisibility visibility, boolean lifetimeExtended, boolean removedByUser) { - if (removedByUser && visibility != null && entry.notification != null) { + if (removedByUser && visibility != null && entry != null) { logNotificationClear(key, entry.notification, visibility); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationLoggerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationLoggerTest.java index 7b96518ad13f1..983ca837b6396 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationLoggerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationLoggerTest.java @@ -42,6 +42,7 @@ import com.android.systemui.UiOffloadThread; import com.android.systemui.statusbar.NotificationListener; import com.android.systemui.statusbar.StatusBarStateController; import com.android.systemui.statusbar.notification.NotificationData; +import com.android.systemui.statusbar.notification.NotificationEntryListener; import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.stack.NotificationListContainer; @@ -51,6 +52,8 @@ import com.google.android.collect.Lists; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; @@ -72,9 +75,11 @@ public class NotificationLoggerTest extends SysuiTestCase { // Dependency mocks: @Mock private NotificationEntryManager mEntryManager; @Mock private NotificationListener mListener; + @Captor private ArgumentCaptor mEntryListenerCaptor; private NotificationData.Entry mEntry; private TestableNotificationLogger mLogger; + private NotificationEntryListener mNotificationEntryListener; private ConcurrentLinkedQueue mErrorQueue = new ConcurrentLinkedQueue<>(); @Before @@ -94,6 +99,8 @@ public class NotificationLoggerTest extends SysuiTestCase { mLogger = new TestableNotificationLogger(mListener, Dependency.get(UiOffloadThread.class), mEntryManager, mock(StatusBarStateController.class), mBarService); mLogger.setUpWithContainer(mListContainer); + verify(mEntryManager).addNotificationEntryListener(mEntryListenerCaptor.capture()); + mNotificationEntryListener = mEntryListenerCaptor.getValue(); } @Test @@ -152,6 +159,11 @@ public class NotificationLoggerTest extends SysuiTestCase { verify(mBarService, times(1)).onNotificationVisibilityChanged(any(), any()); } + @Test + public void testHandleNullEntryOnEntryRemoved() { + mNotificationEntryListener.onEntryRemoved(null, "foobar", null, null, false, false); + } + private class TestableNotificationLogger extends NotificationLogger { TestableNotificationLogger(NotificationListener notificationListener,