diff options
7 files changed, 119 insertions, 80 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/GroupEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/GroupEntry.java index f5f7e3d86ac1..0ea685793214 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/GroupEntry.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/GroupEntry.java @@ -19,7 +19,6 @@ package com.android.systemui.statusbar.notification.collection; import android.annotation.NonNull; import android.annotation.Nullable; -import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.statusbar.notification.collection.coordinator.PreparationCoordinator; import java.util.ArrayList; @@ -39,7 +38,7 @@ public class GroupEntry extends ListEntry { Collections.unmodifiableList(mChildren); private int mUntruncatedChildCount; - public GroupEntry(String key, long creationTime) { + GroupEntry(String key, long creationTime) { super(key, creationTime); } @@ -58,8 +57,7 @@ public class GroupEntry extends ListEntry { return mUnmodifiableChildren; } - @VisibleForTesting - public void setSummary(@Nullable NotificationEntry summary) { + void setSummary(@Nullable NotificationEntry summary) { mSummary = summary; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/EntryUtil.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/EntryUtil.kt index 54163c705e42..62667bc5281f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/EntryUtil.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/EntryUtil.kt @@ -24,7 +24,7 @@ package com.android.systemui.statusbar.notification.collection */ inline fun modifyEntry( entry: NotificationEntry, - modifier: NotificationEntryBuilder.() -> Unit + crossinline modifier: NotificationEntryBuilder.() -> Unit ) { val builder = NotificationEntryBuilder(entry) modifier(builder) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/GroupEntryBuilder.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/GroupEntryBuilder.java new file mode 100644 index 000000000000..2971c05487c6 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/GroupEntryBuilder.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.notification.collection; + +import androidx.annotation.Nullable; + +import java.util.ArrayList; +import java.util.List; + +/** + * Builder to construct instances of {@link GroupEntry} for tests. + */ +public class GroupEntryBuilder { + private String mKey = "test_group_key"; + private long mCreationTime = 0; + @Nullable private GroupEntry mParent = GroupEntry.ROOT_ENTRY; + private NotificationEntry mSummary = null; + private List<NotificationEntry> mChildren = new ArrayList<>(); + + /** Builds a new instance of GroupEntry */ + public GroupEntry build() { + GroupEntry ge = new GroupEntry(mKey, mCreationTime); + ge.setParent(mParent); + + ge.setSummary(mSummary); + mSummary.setParent(ge); + + for (NotificationEntry child : mChildren) { + ge.addChild(child); + child.setParent(ge); + } + return ge; + } + + public GroupEntryBuilder setKey(String key) { + mKey = key; + return this; + } + + public GroupEntryBuilder setCreationTime(long creationTime) { + mCreationTime = creationTime; + return this; + } + + public GroupEntryBuilder setParent(@Nullable GroupEntry entry) { + mParent = entry; + return this; + } + + public GroupEntryBuilder setSummary( + NotificationEntry summary) { + mSummary = summary; + return this; + } + + public GroupEntryBuilder setChildren(List<NotificationEntry> children) { + mChildren.clear(); + mChildren.addAll(children); + return this; + } + + /** Adds a child to the existing list of children */ + public GroupEntryBuilder addChild(NotificationEntry entry) { + mChildren.add(entry); + return this; + } + +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/GroupEntryHelper.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/GroupEntryHelper.java deleted file mode 100644 index 038dd17a9814..000000000000 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/GroupEntryHelper.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.systemui.statusbar.notification.collection; - -import java.util.List; - -/** - * Helper class to provide methods for test classes that need {@link GroupEntry}'s for their tests. - */ -public class GroupEntryHelper { - /** - * Create a group entry for testing purposes. - * @param groupKey group key for the group and all its entries - * @param summary summary notification for group - * @param children group's children notifications - */ - public static final GroupEntry createGroup( - String groupKey, - NotificationEntry summary, - List<NotificationEntry> children) { - GroupEntry groupEntry = new GroupEntry(groupKey); - groupEntry.setSummary(summary); - for (NotificationEntry child : children) { - groupEntry.addChild(child); - } - return groupEntry; - } -} diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/HighPriorityProviderTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/HighPriorityProviderTest.java index 2b12c22cae39..386c866cdd03 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/HighPriorityProviderTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/HighPriorityProviderTest.java @@ -191,9 +191,10 @@ public class HighPriorityProviderTest extends SysuiTestCase { @Test public void testIsHighPriority_summaryUpdated() { // GIVEN a GroupEntry with a lowPrioritySummary and no children - final GroupEntry parentEntry = new GroupEntry("test_group_key"); final NotificationEntry lowPrioritySummary = createNotifEntry(false); - setSummary(parentEntry, lowPrioritySummary); + final GroupEntry parentEntry = new GroupEntryBuilder() + .setSummary(lowPrioritySummary) + .build(); assertFalse(mHighPriorityProvider.isHighPriority(parentEntry)); // WHEN the summary changes to high priority @@ -214,10 +215,11 @@ public class HighPriorityProviderTest extends SysuiTestCase { // GroupEntry = parentEntry, summary = lowPrioritySummary // NotificationEntry = lowPriorityChild // NotificationEntry = highPriorityChild - final GroupEntry parentEntry = new GroupEntry("test_group_key"); - setSummary(parentEntry, createNotifEntry(false)); - addChild(parentEntry, createNotifEntry(false)); - addChild(parentEntry, createNotifEntry(true)); + final GroupEntry parentEntry = new GroupEntryBuilder() + .setSummary(createNotifEntry(false)) + .addChild(createNotifEntry(false)) + .addChild(createNotifEntry(true)) + .build(); // THEN the GroupEntry parentEntry is high priority since it has a high priority child assertTrue(mHighPriorityProvider.isHighPriority(parentEntry)); @@ -228,10 +230,11 @@ public class HighPriorityProviderTest extends SysuiTestCase { // GIVEN: // GroupEntry = parentEntry, summary = lowPrioritySummary // NotificationEntry = lowPriorityChild - final GroupEntry parentEntry = new GroupEntry("test_group_key"); final NotificationEntry lowPriorityChild = createNotifEntry(false); - setSummary(parentEntry, createNotifEntry(false)); - addChild(parentEntry, lowPriorityChild); + final GroupEntry parentEntry = new GroupEntryBuilder() + .setSummary(createNotifEntry(false)) + .addChild(lowPriorityChild) + .build(); // WHEN the child entry ranking changes to high priority lowPriorityChild.setRanking( @@ -250,14 +253,4 @@ public class HighPriorityProviderTest extends SysuiTestCase { .setImportance(highPriority ? IMPORTANCE_HIGH : IMPORTANCE_MIN) .build(); } - - private void setSummary(GroupEntry parent, NotificationEntry summary) { - parent.setSummary(summary); - summary.setParent(parent); - } - - private void addChild(GroupEntry parent, NotificationEntry child) { - parent.addChild(child); - child.setParent(parent); - } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.java index f54252effdd3..917c049fd578 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.java @@ -21,9 +21,10 @@ import static android.app.Notification.VISIBILITY_SECRET; import static android.app.NotificationManager.IMPORTANCE_HIGH; import static android.app.NotificationManager.IMPORTANCE_MIN; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertTrue; +import static com.android.systemui.statusbar.notification.collection.EntryUtilKt.modifyEntry; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -41,6 +42,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.NotificationLockscreenUserManager; import com.android.systemui.statusbar.RankingBuilder; import com.android.systemui.statusbar.notification.collection.GroupEntry; +import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder; import com.android.systemui.statusbar.notification.collection.NotifPipeline; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder; @@ -71,13 +73,12 @@ public class KeyguardCoordinatorTest extends SysuiTestCase { @Mock private NotifPipeline mNotifPipeline; private NotificationEntry mEntry; - private KeyguardCoordinator mKeyguardCoordinator; private NotifFilter mKeyguardFilter; @Before public void setup() { MockitoAnnotations.initMocks(this); - mKeyguardCoordinator = new KeyguardCoordinator( + KeyguardCoordinator keyguardCoordinator = new KeyguardCoordinator( mContext, mMainHandler, mKeyguardStateController, mLockscreenUserManager, mBroadcastDispatcher, mStatusBarStateController, mKeyguardUpdateMonitor, mHighPriorityProvider); @@ -87,7 +88,7 @@ public class KeyguardCoordinatorTest extends SysuiTestCase { .build(); ArgumentCaptor<NotifFilter> filterCaptor = ArgumentCaptor.forClass(NotifFilter.class); - mKeyguardCoordinator.attach(mNotifPipeline); + keyguardCoordinator.attach(mNotifPipeline); verify(mNotifPipeline, times(1)).addFinalizeFilter(filterCaptor.capture()); mKeyguardFilter = filterCaptor.getValue(); } @@ -186,12 +187,18 @@ public class KeyguardCoordinatorTest extends SysuiTestCase { public void summaryExceedsThresholdToShow() { // GIVEN the notification doesn't exceed the threshold to show on the lockscreen // but it's part of a group (has a parent) - final GroupEntry parent = new GroupEntry("test_group_key"); final NotificationEntry entryWithParent = new NotificationEntryBuilder() - .setParent(parent) .setUser(new UserHandle(NOTIF_USER_ID)) .build(); + final GroupEntry parent = new GroupEntryBuilder() + .setKey("test_group_key") + .setSummary(new NotificationEntryBuilder() + .setImportance(IMPORTANCE_HIGH) + .build()) + .addChild(entryWithParent) + .build(); + setupUnfilteredState(entryWithParent); entryWithParent.setRanking(new RankingBuilder() .setKey(entryWithParent.getKey()) @@ -200,18 +207,15 @@ public class KeyguardCoordinatorTest extends SysuiTestCase { // WHEN its parent does exceed threshold tot show on the lockscreen when(mHighPriorityProvider.isHighPriority(parent)).thenReturn(true); - parent.setSummary(new NotificationEntryBuilder() - .setImportance(IMPORTANCE_HIGH) - .build()); // THEN don't filter out the entry assertFalse(mKeyguardFilter.shouldFilterOut(entryWithParent, 0)); // WHEN its parent doesn't exceed threshold to show on lockscreen when(mHighPriorityProvider.isHighPriority(parent)).thenReturn(false); - parent.setSummary(new NotificationEntryBuilder() + modifyEntry(parent.getSummary(), builder -> builder .setImportance(IMPORTANCE_MIN) - .build()); + .done()); // THEN filter out the entry assertTrue(mKeyguardFilter.shouldFilterOut(entryWithParent, 0)); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorTest.java index faf9da3aca8b..c1780fdbe235 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorTest.java @@ -34,7 +34,7 @@ import androidx.test.filters.SmallTest; import com.android.internal.statusbar.IStatusBarService; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.notification.collection.GroupEntry; -import com.android.systemui.statusbar.notification.collection.GroupEntryHelper; +import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder; import com.android.systemui.statusbar.notification.collection.NotifInflaterImpl; import com.android.systemui.statusbar.notification.collection.NotifPipeline; import com.android.systemui.statusbar.notification.collection.NotifViewBarn; @@ -199,7 +199,11 @@ public class PreparationCoordinatorTest extends SysuiTestCase { .build(); children.add(child); } - GroupEntry groupEntry = GroupEntryHelper.createGroup(TEST_GROUP_KEY, summary, children); + GroupEntry groupEntry = new GroupEntryBuilder() + .setKey(TEST_GROUP_KEY) + .setSummary(summary) + .setChildren(children) + .build(); mCollectionListener.onEntryInit(summary); for (NotificationEntry entry : children) { |