diff options
author | Ned Burns <pixel@google.com> | 2019-08-09 22:21:45 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-08-09 22:21:45 +0000 |
commit | 68f3bb1305c48062f998e9ff2b3862594e4c9df1 (patch) | |
tree | ac6f7f4ee117bddd67feb017fa6923ea352dab84 | |
parent | fe2d421fab7c1feb62fc7bf6f96c4b09a356c8ec (diff) | |
parent | 6c34506dd8d1f917933f31183302c86a26d474a2 (diff) | |
download | base-68f3bb1305c48062f998e9ff2b3862594e4c9df1.tar.gz |
Merge "Ensure isTopBucket() gets set when there is just one notification" into qt-dev
2 files changed, 72 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationData.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationData.java index 13f8f1a6a548..fb100842f969 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationData.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationData.java @@ -422,7 +422,14 @@ public class NotificationData { } } - Collections.sort(mSortedAndFiltered, mRankingComparator); + if (mSortedAndFiltered.size() == 1) { + // HACK: We need the comparator to run on all children in order to set the + // isHighPriority field. If there is only one child, then the comparison won't be run, + // so we have to trigger it manually. Get rid of this code as soon as possible. + mRankingComparator.compare(mSortedAndFiltered.get(0), mSortedAndFiltered.get(0)); + } else { + Collections.sort(mSortedAndFiltered, mRankingComparator); + } } public void dump(PrintWriter pw, String indent) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java index 6e0ddbf0cc46..f629757e4c68 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java @@ -23,6 +23,7 @@ import static android.app.Notification.CATEGORY_CALL; import static android.app.Notification.CATEGORY_EVENT; import static android.app.Notification.CATEGORY_MESSAGE; import static android.app.Notification.CATEGORY_REMINDER; +import static android.app.NotificationManager.IMPORTANCE_DEFAULT; import static android.app.NotificationManager.IMPORTANCE_LOW; import static android.app.NotificationManager.IMPORTANCE_MIN; @@ -62,6 +63,8 @@ import android.testing.TestableLooper; import android.testing.TestableLooper.RunWithLooper; import android.util.ArraySet; +import androidx.test.filters.SmallTest; + import com.android.systemui.Dependency; import com.android.systemui.ForegroundServiceController; import com.android.systemui.InitController; @@ -84,8 +87,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import androidx.test.filters.SmallTest; - @SmallTest @RunWith(AndroidTestingRunner.class) @RunWithLooper @@ -113,6 +114,7 @@ public class NotificationDataTest extends SysuiTestCase { MockitoAnnotations.initMocks(this); when(mMockStatusBarNotification.getUid()).thenReturn(UID_NORMAL); when(mMockStatusBarNotification.cloneLight()).thenReturn(mMockStatusBarNotification); + when(mMockStatusBarNotification.getKey()).thenReturn("mock_key"); when(mMockPackageManager.checkUidPermission( eq(Manifest.permission.NOTIFICATION_DURING_SETUP), @@ -231,6 +233,7 @@ public class NotificationDataTest extends SysuiTestCase { Notification n = mMockStatusBarNotification.getNotification(); n.flags = Notification.FLAG_FOREGROUND_SERVICE; NotificationEntry entry = new NotificationEntry(mMockStatusBarNotification); + entry.setRow(mRow); mNotificationData.add(entry); Bundle override = new Bundle(); override.putInt(OVERRIDE_VIS_EFFECTS, 255); @@ -249,6 +252,7 @@ public class NotificationDataTest extends SysuiTestCase { n = nb.build(); when(mMockStatusBarNotification.getNotification()).thenReturn(n); NotificationEntry entry = new NotificationEntry(mMockStatusBarNotification); + entry.setRow(mRow); mNotificationData.add(entry); Bundle override = new Bundle(); override.putInt(OVERRIDE_VIS_EFFECTS, 255); @@ -262,6 +266,7 @@ public class NotificationDataTest extends SysuiTestCase { public void testIsExemptFromDndVisualSuppression_system() { initStatusBarNotification(false); NotificationEntry entry = new NotificationEntry(mMockStatusBarNotification); + entry.setRow(mRow); entry.mIsSystemNotification = true; mNotificationData.add(entry); Bundle override = new Bundle(); @@ -276,6 +281,7 @@ public class NotificationDataTest extends SysuiTestCase { public void testIsNotExemptFromDndVisualSuppression_hiddenCategories() { initStatusBarNotification(false); NotificationEntry entry = new NotificationEntry(mMockStatusBarNotification); + entry.setRow(mRow); entry.mIsSystemNotification = true; Bundle override = new Bundle(); override.putInt(OVERRIDE_VIS_EFFECTS, NotificationManager.Policy.SUPPRESSED_EFFECT_AMBIENT); @@ -528,6 +534,62 @@ public class NotificationDataTest extends SysuiTestCase { assertEquals(-1, mNotificationData.mRankingComparator.compare(a, b)); } + @Test + public void testSort_properlySetsIsTopBucket() { + + Notification notification = new Notification.Builder(mContext, "test") + .build(); + StatusBarNotification sbn = new StatusBarNotification( + "pkg", + "pkg", + 0, + "tag", + 0, + 0, + notification, + mContext.getUser(), + "", + 0); + + Bundle override = new Bundle(); + override.putInt(OVERRIDE_IMPORTANCE, IMPORTANCE_DEFAULT); + mNotificationData.rankingOverrides.put(sbn.getKey(), override); + + NotificationEntry entry = new NotificationEntry(sbn); + entry.setRow(mRow); + mNotificationData.add(entry); + + assertTrue(entry.isTopBucket()); + } + + @Test + public void testSort_properlySetsIsNotTopBucket() { + Notification notification = new Notification.Builder(mContext, "test") + .build(); + StatusBarNotification sbn = new StatusBarNotification( + "pkg", + "pkg", + 0, + "tag", + 0, + 0, + notification, + mContext.getUser(), + "", + 0); + + Bundle override = new Bundle(); + override.putInt(OVERRIDE_IMPORTANCE, IMPORTANCE_LOW); + mNotificationData.rankingOverrides.put(sbn.getKey(), override); + + NotificationEntry entry = new NotificationEntry(sbn); + entry.setRow(mRow); + + mNotificationData.add(entry); + + assertFalse(entry.isTopBucket()); + } + private void initStatusBarNotification(boolean allowDuringSetup) { Bundle bundle = new Bundle(); bundle.putBoolean(Notification.EXTRA_ALLOW_DURING_SETUP, allowDuringSetup); |