summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ioana Alexandru <aioana@google.com> 2023-07-25 15:38:00 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2023-07-25 15:38:00 +0000
commit80b44f6ef5c7c57adc133ce53f66f3377380ff74 (patch)
treefd89fa52e6e486b900e6dd104e9463c038f9d7af
parentdc17b1a8e929dd5407ed2057e71f799e66aca0b0 (diff)
parent83b7fafe2390af338a858271765ffa0ba7b93c51 (diff)
Merge changes Ieb3493f2,Iff1926d2 into udc-qpr-dev am: 83b7fafe23
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/24161705 Change-Id: Ic42657d184b40f7eef8365e9f71b01509c587ca5 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--packages/SystemUI/src/com/android/systemui/flags/Flags.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerImpl.java23
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerTest.kt87
3 files changed, 111 insertions, 5 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
index c11e48574497..66813f90bac4 100644
--- a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
+++ b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
@@ -112,6 +112,12 @@ object Flags {
default = true
)
+ /** Only notify group expansion listeners when a change happens. */
+ // TODO(b/292213543): Tracking Bug
+ @JvmField
+ val NOTIFICATION_GROUP_EXPANSION_CHANGE =
+ unreleasedFlag(292213543, "notification_group_expansion_change", teamfood = false)
+
// 200 - keyguard/lockscreen
// ** Flag retired **
// public static final BooleanFlag KEYGUARD_LAYOUT =
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerImpl.java
index 4568c0ca1458..46af03a438f5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerImpl.java
@@ -21,6 +21,8 @@ import androidx.annotation.NonNull;
import com.android.systemui.Dumpable;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dump.DumpManager;
+import com.android.systemui.flags.FeatureFlags;
+import com.android.systemui.flags.Flags;
import com.android.systemui.statusbar.notification.collection.GroupEntry;
import com.android.systemui.statusbar.notification.collection.ListEntry;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
@@ -44,14 +46,21 @@ public class GroupExpansionManagerImpl implements GroupExpansionManager, Dumpabl
private final GroupMembershipManager mGroupMembershipManager;
private final Set<OnGroupExpansionChangeListener> mOnGroupChangeListeners = new HashSet<>();
- // Set of summary keys whose groups are expanded
+ /**
+ * Set of summary keys whose groups are expanded.
+ * NOTE: This should not be modified without notifying listeners, so prefer using
+ * {@code setGroupExpanded} when making changes.
+ */
private final Set<NotificationEntry> mExpandedGroups = new HashSet<>();
+ private final FeatureFlags mFeatureFlags;
+
@Inject
public GroupExpansionManagerImpl(DumpManager dumpManager,
- GroupMembershipManager groupMembershipManager) {
+ GroupMembershipManager groupMembershipManager, FeatureFlags featureFlags) {
mDumpManager = dumpManager;
mGroupMembershipManager = groupMembershipManager;
+ mFeatureFlags = featureFlags;
}
/**
@@ -85,13 +94,17 @@ public class GroupExpansionManagerImpl implements GroupExpansionManager, Dumpabl
@Override
public void setGroupExpanded(NotificationEntry entry, boolean expanded) {
final NotificationEntry groupSummary = mGroupMembershipManager.getGroupSummary(entry);
+ boolean changed;
if (expanded) {
- mExpandedGroups.add(groupSummary);
+ changed = mExpandedGroups.add(groupSummary);
} else {
- mExpandedGroups.remove(groupSummary);
+ changed = mExpandedGroups.remove(groupSummary);
}
- sendOnGroupExpandedChange(entry, expanded);
+ // Only notify listeners if something changed.
+ if (!mFeatureFlags.isEnabled(Flags.NOTIFICATION_GROUP_EXPANSION_CHANGE) || changed) {
+ sendOnGroupExpandedChange(entry, expanded);
+ }
}
@Override
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerTest.kt
new file mode 100644
index 000000000000..4a94dc819a9e
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerTest.kt
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2023 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.render
+
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.dump.DumpManager
+import com.android.systemui.flags.FakeFeatureFlags
+import com.android.systemui.flags.Flags
+import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder
+import com.android.systemui.util.mockito.mock
+import org.junit.Assert
+import org.junit.Before
+import org.junit.Test
+import org.mockito.Mockito.`when` as whenever
+
+@SmallTest
+class GroupExpansionManagerTest : SysuiTestCase() {
+ private lateinit var gem: GroupExpansionManagerImpl
+
+ private val dumpManager: DumpManager = mock()
+ private val groupMembershipManager: GroupMembershipManager = mock()
+ private val featureFlags = FakeFeatureFlags()
+
+ private val entry1 = NotificationEntryBuilder().build()
+ private val entry2 = NotificationEntryBuilder().build()
+
+ @Before
+ fun setUp() {
+ whenever(groupMembershipManager.getGroupSummary(entry1)).thenReturn(entry1)
+ whenever(groupMembershipManager.getGroupSummary(entry2)).thenReturn(entry2)
+
+ gem = GroupExpansionManagerImpl(dumpManager, groupMembershipManager, featureFlags)
+ }
+
+ @Test
+ fun testNotifyOnlyOnChange_enabled() {
+ featureFlags.set(Flags.NOTIFICATION_GROUP_EXPANSION_CHANGE, true)
+
+ var listenerCalledCount = 0
+ gem.registerGroupExpansionChangeListener { _, _ -> listenerCalledCount++ }
+
+ gem.setGroupExpanded(entry1, false)
+ Assert.assertEquals(0, listenerCalledCount)
+ gem.setGroupExpanded(entry1, true)
+ Assert.assertEquals(1, listenerCalledCount)
+ gem.setGroupExpanded(entry2, true)
+ Assert.assertEquals(2, listenerCalledCount)
+ gem.setGroupExpanded(entry1, true)
+ Assert.assertEquals(2, listenerCalledCount)
+ gem.setGroupExpanded(entry2, false)
+ Assert.assertEquals(3, listenerCalledCount)
+ }
+
+ @Test
+ fun testNotifyOnlyOnChange_disabled() {
+ featureFlags.set(Flags.NOTIFICATION_GROUP_EXPANSION_CHANGE, false)
+
+ var listenerCalledCount = 0
+ gem.registerGroupExpansionChangeListener { _, _ -> listenerCalledCount++ }
+
+ gem.setGroupExpanded(entry1, false)
+ Assert.assertEquals(1, listenerCalledCount)
+ gem.setGroupExpanded(entry1, true)
+ Assert.assertEquals(2, listenerCalledCount)
+ gem.setGroupExpanded(entry2, true)
+ Assert.assertEquals(3, listenerCalledCount)
+ gem.setGroupExpanded(entry1, true)
+ Assert.assertEquals(4, listenerCalledCount)
+ gem.setGroupExpanded(entry2, false)
+ Assert.assertEquals(5, listenerCalledCount)
+ }
+}