summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Mady Mellor <madym@google.com> 2019-01-09 19:52:26 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-01-09 19:52:26 +0000
commit1fba2a6213bbf3a423ff1eeecda2ac4736ba7510 (patch)
tree8c39c48de1e5a96fe590d8a8e0c46e0cf60fe644
parentccee30ed1be39f056a7368392cfe59dae3cbe757 (diff)
parent0ad5b9defd621c99d35f324538ee8e3af41e3cc2 (diff)
Merge "NotificationEntryListener: pre & post onEntryUpdated"
-rw-r--r--packages/SystemUI/src/com/android/systemui/ForegroundServiceNotificationListener.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationAlertingManager.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryListener.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java38
8 files changed, 55 insertions, 9 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/ForegroundServiceNotificationListener.java b/packages/SystemUI/src/com/android/systemui/ForegroundServiceNotificationListener.java
index 96f216e357af..96b62ac918ab 100644
--- a/packages/SystemUI/src/com/android/systemui/ForegroundServiceNotificationListener.java
+++ b/packages/SystemUI/src/com/android/systemui/ForegroundServiceNotificationListener.java
@@ -54,7 +54,7 @@ public class ForegroundServiceNotificationListener {
}
@Override
- public void onEntryUpdated(NotificationEntry entry) {
+ public void onPostEntryUpdated(NotificationEntry entry) {
updateNotification(entry.notification, entry.importance);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationAlertingManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationAlertingManager.java
index c24698deabde..60d8cf460627 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationAlertingManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationAlertingManager.java
@@ -77,7 +77,7 @@ public class NotificationAlertingManager {
}
@Override
- public void onEntryUpdated(NotificationEntry entry) {
+ public void onPostEntryUpdated(NotificationEntry entry) {
updateAlertState(entry);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryListener.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryListener.java
index c6407604290f..eea44906029d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryListener.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryListener.java
@@ -40,9 +40,15 @@ public interface NotificationEntryListener {
}
/**
- * Called when a notification was updated.
+ * Called when a notification is updated, before any filtering of notifications have occurred.
*/
- default void onEntryUpdated(NotificationEntry entry) {
+ default void onPreEntryUpdated(NotificationEntry entry) {
+ }
+
+ /**
+ * Called when a notification was updated, after any filtering of notifications have occurred.
+ */
+ default void onPostEntryUpdated(NotificationEntry entry) {
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
index 038efdd0d1db..e698e643534b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
@@ -447,6 +447,10 @@ public class NotificationEntryManager implements
getRowBinder().inflateViews(entry, () -> performRemoveNotification(notification),
mNotificationData.get(entry.key) != null);
+ for (NotificationEntryListener listener : mNotificationEntryListeners) {
+ listener.onPreEntryUpdated(entry);
+ }
+
updateNotifications();
if (DEBUG) {
@@ -457,7 +461,7 @@ public class NotificationEntryManager implements
}
for (NotificationEntryListener listener : mNotificationEntryListeners) {
- listener.onEntryUpdated(entry);
+ listener.onPostEntryUpdated(entry);
}
maybeScheduleUpdateNotificationViews(entry);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
index e4b00dd6d38c..80db6c11e324 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
@@ -521,7 +521,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd
mEntryManager.addNotificationEntryListener(new NotificationEntryListener() {
@Override
- public void onEntryUpdated(NotificationEntry entry) {
+ public void onPostEntryUpdated(NotificationEntry entry) {
if (!entry.notification.isClearable()) {
// The user may have performed a dismiss action on the notification, since it's
// not clearable we should snap it back.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java
index 2c9def24a1a3..df7f53b3b63a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java
@@ -191,7 +191,7 @@ public class StatusBarNotificationPresenter implements NotificationPresenter,
}
@Override
- public void onEntryUpdated(NotificationEntry entry) {
+ public void onPostEntryUpdated(NotificationEntry entry) {
mShadeController.updateAreThereNotifications();
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java
index 9400d6d723e9..31e8071f5677 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java
@@ -404,6 +404,6 @@ public class ForegroundServiceControllerTest extends SysuiTestCase {
private void entryUpdated(StatusBarNotification notification, int importance) {
NotificationEntry entry = new NotificationEntry(notification);
entry.importance = importance;
- mEntryListener.onEntryUpdated(entry);
+ mEntryListener.onPostEntryUpdated(entry);
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java
index 4d22536f34f0..d937f93482d5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java
@@ -26,6 +26,7 @@ import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
@@ -65,6 +66,7 @@ import com.android.systemui.statusbar.NotificationRemoteInputManager;
import com.android.systemui.statusbar.RemoteInputController;
import com.android.systemui.statusbar.SmartReplyController;
import com.android.systemui.statusbar.StatusBarIconView;
+import com.android.systemui.statusbar.notification.collection.NotificationData;
import com.android.systemui.statusbar.notification.collection.NotificationData.KeyguardEnvironment;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
@@ -83,6 +85,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
+import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@@ -137,6 +140,10 @@ public class NotificationEntryManagerTest extends SysuiTestCase {
mCountDownLatch = new CountDownLatch(1);
}
+ public void setNotificationData(NotificationData data) {
+ mNotificationData = data;
+ }
+
@Override
public void onAsyncInflationFinished(NotificationEntry entry,
@NotificationInflater.InflationFlag int inflatedFlags) {
@@ -292,14 +299,43 @@ public class NotificationEntryManagerTest extends SysuiTestCase {
verify(mEntryListener, never()).onInflationError(any(), any());
+ verify(mEntryListener).onPreEntryUpdated(mEntry);
verify(mPresenter).updateNotificationViews();
- verify(mEntryListener).onEntryUpdated(mEntry);
+ verify(mEntryListener).onPostEntryUpdated(mEntry);
+
assertNotNull(mEntry.getRow());
assertEquals(mEntry.userSentiment,
NotificationListenerService.Ranking.USER_SENTIMENT_NEGATIVE);
}
@Test
+ public void testUpdateNotification_prePostEntryOrder() throws Exception {
+ com.android.systemui.util.Assert.isNotMainThread();
+ TestableLooper.get(this).processAllMessages();
+
+ NotificationData notifData = mock(NotificationData.class);
+ when(notifData.get(mEntry.key)).thenReturn(mEntry);
+
+ mEntryManager.setNotificationData(notifData);
+
+ mEntryManager.updateNotification(mSbn, mRankingMap);
+ TestableLooper.get(this).processMessages(1);
+ // Wait for content update.
+ assertTrue(mEntryManager.getCountDownLatch().await(10, TimeUnit.SECONDS));
+
+ verify(mEntryListener, never()).onInflationError(any(), any());
+
+ // Ensure that update callbacks happen in correct order
+ InOrder order = inOrder(mEntryListener, notifData, mPresenter, mEntryListener);
+ order.verify(mEntryListener).onPreEntryUpdated(mEntry);
+ order.verify(notifData).filterAndSort();
+ order.verify(mPresenter).updateNotificationViews();
+ order.verify(mEntryListener).onPostEntryUpdated(mEntry);
+
+ assertNotNull(mEntry.getRow());
+ }
+
+ @Test
public void testRemoveNotification() throws Exception {
com.android.systemui.util.Assert.isNotMainThread();