summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Lyn Han <lynhan@google.com> 2025-03-24 13:12:40 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2025-03-24 13:12:40 -0700
commit815fdd8475cf205bf81f7c17db2c0b7e306fbe0b (patch)
tree92cb9339cddac9fcbfdd98ac6b87e5c5d8bdb5e9
parent1d34ea3817f5bba0336c4b60c552e2d3331aeec8 (diff)
parente5f4c3af2001358076b2f0bd32a72e03967fd252 (diff)
Merge "Update all non-bundle sectioners to check isClassified" into main
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinatorTest.kt11
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinatorTest.kt29
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorTest.kt13
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/LockScreenMinimalismCoordinatorTest.kt34
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinatorTest.java23
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/BundleUtil.kt43
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinator.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinator.kt14
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/Coordinator.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/LockScreenMinimalismCoordinator.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinator.java15
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilderKosmos.kt14
13 files changed, 181 insertions, 39 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinatorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinatorTest.kt
index 3d7ced747450..43e72dd5f5aa 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinatorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinatorTest.kt
@@ -17,6 +17,7 @@ package com.android.systemui.statusbar.notification.collection.coordinator
import android.app.Notification
import android.app.Notification.FLAG_FOREGROUND_SERVICE
+import android.app.NotificationChannel.SYSTEM_RESERVED_IDS
import android.app.NotificationManager
import android.app.PendingIntent
import android.app.Person
@@ -45,6 +46,7 @@ import com.android.systemui.statusbar.notification.collection.buildOngoingCallEn
import com.android.systemui.statusbar.notification.collection.buildPromotedOngoingEntry
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifPromoter
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
+import com.android.systemui.statusbar.notification.collection.makeClassifiedConversation
import com.android.systemui.statusbar.notification.collection.notifPipeline
import com.android.systemui.statusbar.notification.domain.interactor.renderNotificationListInteractor
import com.android.systemui.statusbar.notification.promoted.PromotedNotificationUi
@@ -102,6 +104,15 @@ class ColorizedFgsCoordinatorTest : SysuiTestCase() {
}
@Test
+ fun testSectioner_reject_classifiedConversation() {
+ kosmos.runTest {
+ for (id in SYSTEM_RESERVED_IDS) {
+ assertFalse(sectioner.isInSection(kosmos.makeClassifiedConversation(id)))
+ }
+ }
+ }
+
+ @Test
fun testDiscludeFGSInSection_importanceMin() {
// GIVEN the notification represents a colorized foreground service with min importance
val entry = buildEntry {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinatorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinatorTest.kt
index fa185bcabf83..aab7900c3626 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinatorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinatorTest.kt
@@ -39,6 +39,7 @@ import com.android.systemui.statusbar.notification.collection.listbuilder.OnBefo
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifComparator
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifPromoter
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
+import com.android.systemui.statusbar.notification.collection.makeClassifiedConversation
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider
import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManagerImpl
import com.android.systemui.statusbar.notification.collection.render.NodeController
@@ -50,6 +51,7 @@ import com.android.systemui.statusbar.notification.people.PeopleNotificationIden
import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier.Companion.TYPE_NON_PERSON
import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier.Companion.TYPE_PERSON
import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifierImpl
+import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.eq
import com.android.systemui.util.mockito.withArgCaptor
import com.google.common.truth.Truth.assertThat
@@ -69,6 +71,8 @@ import org.mockito.kotlin.mock
@RunWith(AndroidJUnit4::class)
@TestableLooper.RunWithLooper
class ConversationCoordinatorTest : SysuiTestCase() {
+ private val kosmos = testKosmos()
+
// captured listeners and pluggables:
private lateinit var promoter: NotifPromoter
private lateinit var peopleAlertingSectioner: NotifSectioner
@@ -125,10 +129,10 @@ class ConversationCoordinatorTest : SysuiTestCase() {
}
@Test
- fun testPrioritySectioner_doesNotClaim_classifiedConversation() {
+ fun testPrioritySectioner_reject_classifiedConversation() {
val sectioner = coordinator.priorityPeopleSectioner
for (id in SYSTEM_RESERVED_IDS) {
- assertFalse(sectioner.isInSection(makeClassifiedConversation(id)))
+ assertFalse(sectioner.isInSection(kosmos.makeClassifiedConversation(id)))
}
}
@@ -175,10 +179,10 @@ class ConversationCoordinatorTest : SysuiTestCase() {
}
@Test
- fun testAlertingSectioner_doesNotClaim_classifiedConversation() {
+ fun testAlertingSectioner_reject_classifiedConversation() {
val sectioner = coordinator.peopleAlertingSectioner
for (id in SYSTEM_RESERVED_IDS) {
- assertFalse(sectioner.isInSection(makeClassifiedConversation(id)))
+ assertFalse(sectioner.isInSection(kosmos.makeClassifiedConversation(id)))
}
}
@@ -203,10 +207,10 @@ class ConversationCoordinatorTest : SysuiTestCase() {
@Test
@DisableFlags(Flags.FLAG_SORT_SECTION_BY_TIME)
- fun testSilentSectioner_doesNotClaim_classifiedConversation() {
+ fun testSilentSectioner_reject_classifiedConversation() {
val sectioner = coordinator.peopleSilentSectioner
for (id in SYSTEM_RESERVED_IDS) {
- assertFalse(sectioner.isInSection(makeClassifiedConversation(id)))
+ assertFalse(sectioner.isInSection(kosmos.makeClassifiedConversation(id)))
}
}
@@ -306,17 +310,4 @@ class ConversationCoordinatorTest : SysuiTestCase() {
assertEquals(type, peopleNotificationIdentifier.getPeopleNotificationType(entry))
return entry
}
-
- private fun makeClassifiedConversation(channelId: String): NotificationEntry {
- val channel = NotificationChannel(channelId, channelId, IMPORTANCE_LOW)
- val entry =
- NotificationEntryBuilder()
- .updateRanking {
- it.setIsConversation(true)
- it.setShortcutInfo(mock())
- it.setChannel(channel)
- }
- .build()
- return entry
- }
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorTest.kt
index 247c66aebad7..8776aa77e5fa 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorTest.kt
@@ -17,7 +17,9 @@ package com.android.systemui.statusbar.notification.collection.coordinator
import android.app.Notification.GROUP_ALERT_ALL
import android.app.Notification.GROUP_ALERT_SUMMARY
+import android.app.NotificationChannel
import android.app.NotificationChannel.SYSTEM_RESERVED_IDS
+import android.app.NotificationManager.IMPORTANCE_LOW
import android.platform.test.annotations.EnableFlags
import android.service.notification.Flags.FLAG_NOTIFICATION_CLASSIFICATION
import android.testing.TestableLooper.RunWithLooper
@@ -41,6 +43,7 @@ import com.android.systemui.statusbar.notification.collection.listbuilder.OnBefo
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifPromoter
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
import com.android.systemui.statusbar.notification.collection.mockNotifCollection
+import com.android.systemui.statusbar.notification.collection.makeClassifiedConversation
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender.OnEndLifetimeExtensionCallback
@@ -75,6 +78,7 @@ import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.anyString
import org.mockito.BDDMockito.clearInvocations
import org.mockito.BDDMockito.given
+import org.mockito.Mockito
import org.mockito.Mockito.never
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
@@ -363,7 +367,7 @@ class HeadsUpCoordinatorTest : SysuiTestCase() {
}
@Test
- fun testIncludeInSectionCurrentHUN() {
+ fun testHeadsUpSectioner_accepts_currentHUN() {
// GIVEN the current HUN is set to mEntry
addHUN(entry)
@@ -375,6 +379,13 @@ class HeadsUpCoordinatorTest : SysuiTestCase() {
}
@Test
+ fun testHeadsUpSectioner_rejects_classifiedConversation() {
+ for (id in SYSTEM_RESERVED_IDS) {
+ assertFalse(notifSectioner.isInSection(kosmos.makeClassifiedConversation(id)))
+ }
+ }
+
+ @Test
fun testLifetimeExtendsCurrentHUN() {
// GIVEN there is a HUN, mEntry
addHUN(entry)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/LockScreenMinimalismCoordinatorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/LockScreenMinimalismCoordinatorTest.kt
index e28e587d2cdc..7523af753f2e 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/LockScreenMinimalismCoordinatorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/LockScreenMinimalismCoordinatorTest.kt
@@ -16,6 +16,8 @@
package com.android.systemui.statusbar.notification.collection.coordinator
import android.app.Notification
+import android.app.NotificationChannel
+import android.app.NotificationChannel.SYSTEM_RESERVED_IDS
import android.app.NotificationManager.IMPORTANCE_DEFAULT
import android.app.NotificationManager.IMPORTANCE_LOW
import android.platform.test.annotations.EnableFlags
@@ -36,6 +38,7 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntryB
import com.android.systemui.statusbar.notification.collection.listbuilder.OnBeforeTransformGroupsListener
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifPromoter
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
+import com.android.systemui.statusbar.notification.collection.makeClassifiedConversation
import com.android.systemui.statusbar.notification.collection.modifyEntry
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener
import com.android.systemui.statusbar.notification.data.repository.FakeHeadsUpRowRepository
@@ -55,6 +58,7 @@ import kotlinx.coroutines.test.TestCoroutineScheduler
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest
+import org.junit.Assert.assertFalse
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.kotlin.argumentCaptor
@@ -81,7 +85,7 @@ class LockScreenMinimalismCoordinatorTest : SysuiTestCase() {
private var statusBarState: StatusBarState = StatusBarState.KEYGUARD
@Test
- fun topUnseenSectioner() {
+ fun testTopUnseenSectioner() {
val solo = NotificationEntryBuilder().setTag("solo").build()
val child1 = NotificationEntryBuilder().setTag("child1").build()
val child2 = NotificationEntryBuilder().setTag("child2").build()
@@ -121,7 +125,7 @@ class LockScreenMinimalismCoordinatorTest : SysuiTestCase() {
}
@Test
- fun topOngoingSectioner() {
+ fun testTopOngoingSectioner() {
val solo = NotificationEntryBuilder().setTag("solo").build()
val child1 = NotificationEntryBuilder().setTag("child1").build()
val child2 = NotificationEntryBuilder().setTag("child2").build()
@@ -207,6 +211,32 @@ class LockScreenMinimalismCoordinatorTest : SysuiTestCase() {
}
@Test
+ fun testTopOngoingSectioner_rejects_classifiedConversation() {
+ runCoordinatorTest {
+ for (id in SYSTEM_RESERVED_IDS) {
+ assertFalse(
+ topOngoingSectioner.isInSection(
+ kosmos.makeClassifiedConversation(id)
+ )
+ )
+ }
+ }
+ }
+
+ @Test
+ fun testTopUnseenSectioner_rejects_classifiedConversation() {
+ runCoordinatorTest {
+ for (id in SYSTEM_RESERVED_IDS) {
+ assertFalse(
+ topUnseenSectioner.isInSection(
+ kosmos.makeClassifiedConversation(id)
+ )
+ )
+ }
+ }
+ }
+
+ @Test
fun topOngoingIdentifier() {
val solo1 = defaultEntryBuilder().setTag("solo1").setRank(1).build()
val solo2 = defaultEntryBuilder().setTag("solo2").setRank(2).build()
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinatorTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinatorTest.java
index 340ce673e01e..7de4caff9031 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinatorTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinatorTest.java
@@ -299,12 +299,27 @@ public class RankingCoordinatorTest extends SysuiTestCase {
}
@Test
+ public void testSilentSectioner_rejects_classified() {
+ for (String id : SYSTEM_RESERVED_IDS) {
+ assertFalse(mSilentSectioner.isInSection(makeClassifiedNotifEntry(id, IMPORTANCE_LOW)));
+ }
+ }
+
+ @Test
public void testMinimizedSectioner_rejectsBundle() {
BundleEntry bundleEntry = new BundleEntry("testBundleKey");
assertFalse(mMinimizedSectioner.isInSection(bundleEntry));
}
@Test
+ public void testMinimizedSectioner_rejects_classified() {
+ for (String id : SYSTEM_RESERVED_IDS) {
+ assertFalse(mMinimizedSectioner.isInSection(
+ makeClassifiedNotifEntry(id, IMPORTANCE_LOW)));
+ }
+ }
+
+ @Test
public void testMinSection() {
when(mHighPriorityProvider.isHighPriority(mEntry)).thenReturn(false);
setRankingAmbient(true);
@@ -360,6 +375,14 @@ public class RankingCoordinatorTest extends SysuiTestCase {
}
@Test
+ public void testAlertingSectioner_rejects_classified() {
+ for (String id : SYSTEM_RESERVED_IDS) {
+ assertFalse(
+ mAlertingSectioner.isInSection(makeClassifiedNotifEntry(id, IMPORTANCE_LOW)));
+ }
+ }
+
+ @Test
public void statusBarStateCallbackTest() {
mStatusBarStateCallback.onDozeAmountChanged(1f, 1f);
verify(mInvalidationListener, times(1))
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/BundleUtil.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/BundleUtil.kt
new file mode 100644
index 000000000000..47889c9c9429
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/BundleUtil.kt
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2025 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.coordinator
+
+import android.app.NotificationChannel.SYSTEM_RESERVED_IDS
+import com.android.systemui.statusbar.notification.collection.NotificationClassificationFlag
+import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
+
+/**
+ * Helper class for classified notifications.
+ */
+class BundleUtil {
+ companion object {
+ fun isClassified(pipelineEntry: PipelineEntry): Boolean {
+ if (pipelineEntry !is NotificationEntry) {
+ return false
+ }
+ if (pipelineEntry.getRepresentativeEntry()!!.channel == null) {
+ return false
+ }
+ val channelId = pipelineEntry.getRepresentativeEntry()!!.channel.id
+ if (SYSTEM_RESERVED_IDS.contains(channelId)) {
+ return true
+ }
+ return false
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinator.java
index c8ec85d0a227..b125e47b115c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinator.java
@@ -97,11 +97,14 @@ public class ColorizedFgsCoordinator implements Coordinator {
NotificationPriorityBucketKt.BUCKET_FOREGROUND_SERVICE) {
@Override
public boolean isInSection(PipelineEntry entry) {
- NotificationEntry notificationEntry = entry.getRepresentativeEntry();
- if (notificationEntry != null) {
- return isRichOngoing(notificationEntry) || isPromotedNotifChip(notificationEntry);
+ NotificationEntry notifEntry = entry.getRepresentativeEntry();
+ if (notifEntry == null) {
+ return false;
}
- return false;
+ if (BundleUtil.Companion.isClassified(notifEntry)) {
+ return false;
+ }
+ return isRichOngoing(notifEntry) || isPromotedNotifChip(notifEntry);
}
/** get the sort key for any entry in the ongoing section */
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinator.kt
index 28923b0ab71e..cc7e329068c8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinator.kt
@@ -16,7 +16,6 @@
package com.android.systemui.statusbar.notification.collection.coordinator
-import android.app.NotificationChannel.SYSTEM_RESERVED_IDS
import com.android.systemui.statusbar.notification.collection.GroupEntry
import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotifPipeline
@@ -89,21 +88,24 @@ class ConversationCoordinator @Inject constructor(
val priorityPeopleSectioner =
object : NotifSectioner("Priority People", BUCKET_PRIORITY_PEOPLE) {
override fun isInSection(entry: PipelineEntry): Boolean {
+ if (BundleUtil.isClassified(entry)) {
+ return false
+ }
return getPeopleType(entry) == TYPE_IMPORTANT_PERSON
- && entry.representativeEntry?.channel?.id !in SYSTEM_RESERVED_IDS
}
}
// TODO(b/330193582): Rename to just "People"
val peopleAlertingSectioner = object : NotifSectioner("People(alerting)", BUCKET_PEOPLE) {
override fun isInSection(entry: PipelineEntry): Boolean {
+ if (BundleUtil.isClassified(entry)) {
+ return false
+ }
if (SortBySectionTimeFlag.isEnabled) {
return (highPriorityProvider.isHighPriorityConversation(entry)
|| isConversation(entry))
- && entry.representativeEntry?.channel?.id !in SYSTEM_RESERVED_IDS
} else {
return highPriorityProvider.isHighPriorityConversation(entry)
- && entry.representativeEntry?.channel?.id !in SYSTEM_RESERVED_IDS
}
}
@@ -119,8 +121,10 @@ class ConversationCoordinator @Inject constructor(
// that are alerting. All remaining conversations must be silent.
override fun isInSection(entry: PipelineEntry): Boolean {
SortBySectionTimeFlag.assertInLegacyMode()
+ if (BundleUtil.isClassified(entry)) {
+ return false
+ }
return isConversation(entry)
- && entry.representativeEntry?.channel?.id !in SYSTEM_RESERVED_IDS
}
override fun getComparator(): NotifComparator {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/Coordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/Coordinator.java
index 23570728d27c..f5ba7545dd1d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/Coordinator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/Coordinator.java
@@ -16,11 +16,12 @@
package com.android.systemui.statusbar.notification.collection.coordinator;
+import static android.app.NotificationChannel.SYSTEM_RESERVED_IDS;
+
import androidx.annotation.NonNull;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable;
-
/**
* Interface for registering callbacks to the {@link NotifPipeline}.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt
index a40a2285d8a2..ed82c3d402ef 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt
@@ -916,9 +916,13 @@ constructor(
val sectioner =
object : NotifSectioner("HeadsUp", BUCKET_HEADS_UP) {
- override fun isInSection(entry: PipelineEntry): Boolean =
+ override fun isInSection(entry: PipelineEntry): Boolean {
+ if (BundleUtil.isClassified(entry)) {
+ return false
+ }
// TODO: This check won't notice if a child of the group is going to HUN...
- isGoingToShowHunNoRetract(entry)
+ return isGoingToShowHunNoRetract(entry)
+ }
override fun getComparator(): NotifComparator {
return object : NotifComparator("HeadsUp") {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/LockScreenMinimalismCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/LockScreenMinimalismCoordinator.kt
index d542e67e665a..3a8a68522409 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/LockScreenMinimalismCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/LockScreenMinimalismCoordinator.kt
@@ -229,6 +229,7 @@ constructor(
override fun isInSection(entry: PipelineEntry): Boolean {
if (NotificationMinimalism.isUnexpectedlyInLegacyMode()) return false
if (!minimalismEnabled) return false
+ if (BundleUtil.isClassified(entry)) return false
return entry.anyEntry { notificationEntry ->
seenNotificationsInteractor.isTopOngoingNotification(notificationEntry)
}
@@ -240,6 +241,7 @@ constructor(
override fun isInSection(entry: PipelineEntry): Boolean {
if (NotificationMinimalism.isUnexpectedlyInLegacyMode()) return false
if (!minimalismEnabled) return false
+ if (BundleUtil.isClassified(entry)) return false
return entry.anyEntry { notificationEntry ->
seenNotificationsInteractor.isTopUnseenNotification(notificationEntry)
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinator.java
index cda535de86c4..661734a7ac96 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinator.java
@@ -101,11 +101,10 @@ public class RankingCoordinator implements Coordinator {
NotificationPriorityBucketKt.BUCKET_ALERTING) {
@Override
public boolean isInSection(PipelineEntry entry) {
- return mHighPriorityProvider.isHighPriority(entry)
- && entry.getRepresentativeEntry() != null
- && entry.getRepresentativeEntry().getChannel() != null
- && !SYSTEM_RESERVED_IDS.contains(
- entry.getRepresentativeEntry().getChannel().getId());
+ if (BundleUtil.Companion.isClassified(entry)) {
+ return false;
+ }
+ return mHighPriorityProvider.isHighPriority(entry);
}
@Nullable
@@ -126,6 +125,9 @@ public class RankingCoordinator implements Coordinator {
if (entry instanceof BundleEntry) {
return true;
}
+ if (BundleUtil.Companion.isClassified(entry)) {
+ return false;
+ }
return !mHighPriorityProvider.isHighPriority(entry)
&& entry.getRepresentativeEntry() != null
&& !entry.getRepresentativeEntry().isAmbient();
@@ -161,6 +163,9 @@ public class RankingCoordinator implements Coordinator {
NotificationPriorityBucketKt.BUCKET_SILENT) {
@Override
public boolean isInSection(PipelineEntry entry) {
+ if (BundleUtil.Companion.isClassified(entry)) {
+ return false;
+ }
return !mHighPriorityProvider.isHighPriority(entry)
&& entry.getRepresentativeEntry() != null
&& entry.getRepresentativeEntry().isAmbient();
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilderKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilderKosmos.kt
index 00c6c9445fe7..9b93fe4f63b7 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilderKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilderKosmos.kt
@@ -19,6 +19,7 @@ package com.android.systemui.statusbar.notification.collection
import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager.IMPORTANCE_DEFAULT
+import android.app.NotificationManager.IMPORTANCE_LOW
import android.app.PendingIntent
import android.app.Person
import android.content.Intent
@@ -141,3 +142,16 @@ fun Kosmos.makeEntryOfPeopleType(@PeopleNotificationType type: Int): Notificatio
}
return entry
}
+
+fun Kosmos.makeClassifiedConversation(channelId: String): NotificationEntry {
+ val channel = NotificationChannel(channelId, channelId, IMPORTANCE_LOW)
+ val entry =
+ NotificationEntryBuilder()
+ .updateRanking {
+ it.setIsConversation(true)
+ it.setShortcutInfo(mock())
+ it.setChannel(channel)
+ }
+ .build()
+ return entry
+} \ No newline at end of file