diff options
author | 2025-03-24 13:12:40 -0700 | |
---|---|---|
committer | 2025-03-24 13:12:40 -0700 | |
commit | 815fdd8475cf205bf81f7c17db2c0b7e306fbe0b (patch) | |
tree | 92cb9339cddac9fcbfdd98ac6b87e5c5d8bdb5e9 | |
parent | 1d34ea3817f5bba0336c4b60c552e2d3331aeec8 (diff) | |
parent | e5f4c3af2001358076b2f0bd32a72e03967fd252 (diff) |
Merge "Update all non-bundle sectioners to check isClassified" into main
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 |