summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ned Burns <pixel@google.com> 2020-07-24 12:43:40 -0400
committer Ned Burns <pixel@google.com> 2020-07-28 00:29:26 -0400
commit94edc7b6158dc7960badeac971e474ef6e739c25 (patch)
tree435fb7d25d3898958e450e8e8f847bd160fe4207
parente87ebbe2fd1d1ff68c9e5bf9e0636fe05e135a6d (diff)
Introduce GroupEntryBuilder
Companion of NotificationEntryBuilder, allows us to construct instances of GroupEntry in tests. Also allows us to un-public the constructor of GroupEntry and some of its setters. Test: atest Change-Id: I6696029f2c9d2de1210987927f39834fe6a3b968
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/GroupEntry.java6
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/EntryUtil.kt2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/GroupEntryBuilder.java82
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/GroupEntryHelper.java42
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/HighPriorityProviderTest.java31
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.java28
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorTest.java8
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) {