Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.kt +9 −3 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ import com.android.systemui.statusbar.notification.collection.provider.HighPrior import com.android.systemui.statusbar.notification.domain.interactor.activeNotificationsInteractor import com.android.systemui.statusbar.notification.headsup.HeadsUpManager import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier import com.android.systemui.statusbar.notification.promoted.domain.interactor.PackageDemotionInteractor import com.android.systemui.statusbar.notification.row.icon.AppIconProvider import com.android.systemui.statusbar.notification.row.icon.NotificationIconStyleProvider import com.android.systemui.statusbar.notification.row.icon.appIconProvider Loading @@ -80,6 +81,9 @@ import com.android.systemui.statusbar.policy.DeviceProvisionedController import com.android.systemui.testKosmos import com.android.systemui.util.kotlin.JavaAdapter import com.android.systemui.wmshell.BubblesManager import java.util.Optional import kotlin.test.assertNotNull import kotlin.test.fail import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals Loading Loading @@ -107,9 +111,6 @@ import org.mockito.kotlin.verify import org.mockito.kotlin.whenever import platform.test.runner.parameterized.ParameterizedAndroidJunit4 import platform.test.runner.parameterized.Parameters import java.util.Optional import kotlin.test.assertNotNull import kotlin.test.fail /** Tests for [NotificationGutsManager]. */ @SmallTest Loading Loading @@ -149,6 +150,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase( @Mock private lateinit var launcherApps: LauncherApps @Mock private lateinit var shortcutManager: ShortcutManager @Mock private lateinit var channelEditorDialogController: ChannelEditorDialogController @Mock private lateinit var packageDemotionInteractor: PackageDemotionInteractor @Mock private lateinit var peopleNotificationIdentifier: PeopleNotificationIdentifier @Mock private lateinit var contextTracker: UserContextProvider @Mock private lateinit var bubblesManager: BubblesManager Loading Loading @@ -214,6 +216,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase( launcherApps, shortcutManager, channelEditorDialogController, packageDemotionInteractor, contextTracker, assistantFeedbackController, Optional.of(bubblesManager), Loading Loading @@ -521,6 +524,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase( any<NotificationIconStyleProvider>(), eq(onUserInteractionCallback), eq(channelEditorDialogController), any<PackageDemotionInteractor>(), eq(statusBarNotification.packageName), any<NotificationChannel>(), eq(entry), Loading Loading @@ -560,6 +564,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase( any<NotificationIconStyleProvider>(), eq(onUserInteractionCallback), eq(channelEditorDialogController), any<PackageDemotionInteractor>(), eq(statusBarNotification.packageName), any<NotificationChannel>(), eq(entry), Loading Loading @@ -597,6 +602,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase( any<NotificationIconStyleProvider>(), eq(onUserInteractionCallback), eq(channelEditorDialogController), any<PackageDemotionInteractor>(), eq(statusBarNotification.packageName), any<NotificationChannel>(), eq(entry), Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/NotificationInfoTest.kt +4 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ import com.android.systemui.statusbar.RankingBuilder import com.android.systemui.statusbar.notification.AssistantFeedbackController import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder import com.android.systemui.statusbar.notification.promoted.domain.interactor.PackageDemotionInteractor import com.android.systemui.statusbar.notification.row.icon.AppIconProvider import com.android.systemui.statusbar.notification.row.icon.NotificationIconStyleProvider import com.android.systemui.statusbar.notification.row.icon.appIconProvider Loading Loading @@ -105,6 +106,7 @@ class NotificationInfoTest : SysuiTestCase() { private val onUserInteractionCallback = mock<OnUserInteractionCallback>() private val mockINotificationManager = mock<INotificationManager>() private val channelEditorDialogController = mock<ChannelEditorDialogController>() private val packageDemotionInteractor = mock<PackageDemotionInteractor>() private val assistantFeedbackController = mock<AssistantFeedbackController>() @Before Loading Loading @@ -871,6 +873,7 @@ class NotificationInfoTest : SysuiTestCase() { onUserInteractionCallback: OnUserInteractionCallback = this.onUserInteractionCallback, channelEditorDialogController: ChannelEditorDialogController = this.channelEditorDialogController, packageDemotionInteractor: PackageDemotionInteractor = this.packageDemotionInteractor, pkg: String = TEST_PACKAGE_NAME, notificationChannel: NotificationChannel = this.notificationChannel, entry: NotificationEntry = this.entry, Loading @@ -892,6 +895,7 @@ class NotificationInfoTest : SysuiTestCase() { iconStyleProvider, onUserInteractionCallback, channelEditorDialogController, packageDemotionInteractor, pkg, notificationChannel, entry, Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/PromotedNotificationInfoTest.java +4 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.AssistantFeedbackController; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder; import com.android.systemui.statusbar.notification.promoted.domain.interactor.PackageDemotionInteractor; import com.android.systemui.statusbar.notification.row.icon.AppIconProvider; import com.android.systemui.statusbar.notification.row.icon.NotificationIconStyleProvider; Loading Loading @@ -92,6 +93,8 @@ public class PromotedNotificationInfoTest extends SysuiTestCase { @Mock private ChannelEditorDialogController mChannelEditorDialogController; @Mock private PackageDemotionInteractor mPackageDemotionInteractor; @Mock private AssistantFeedbackController mAssistantFeedbackController; @Mock private TelecomManager mTelecomManager; Loading Loading @@ -138,6 +141,7 @@ public class PromotedNotificationInfoTest extends SysuiTestCase { mMockIconStyleProvider, mOnUserInteractionCallback, mChannelEditorDialogController, mPackageDemotionInteractor, TEST_PACKAGE_NAME, mNotificationChannel, mEntry, Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/promoted/domain/interactor/PackageDemotionInteractor.kt 0 → 100644 +39 −0 Original line number Diff line number Diff line /* * 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.promoted.domain.interactor import com.android.systemui.dagger.SysUISingleton import javax.inject.Inject /** A class which can receive both a demotion signal and a single handler of that signal */ @SysUISingleton class PackageDemotionInteractor @Inject constructor() { private var demotionSignalHandler: ((packageName: String, uid: Int) -> Unit)? = null /** * called after sending a the demotion signal to * [android.app.INotificationManager.setCanBePromoted] */ fun onPackageDemoted(packageName: String, uid: Int) { demotionSignalHandler?.invoke(packageName, uid) } /** sets the [handler] that will be called when [onPackageDemoted] is called. */ fun setOnPackageDemotionHandler(handler: (packageName: String, uid: Int) -> Unit) { demotionSignalHandler = handler } } packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java +5 −0 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ import com.android.systemui.statusbar.notification.collection.provider.HighPrior import com.android.systemui.statusbar.notification.collection.render.NotifGutsViewListener; import com.android.systemui.statusbar.notification.collection.render.NotifGutsViewManager; import com.android.systemui.statusbar.notification.headsup.HeadsUpManager; import com.android.systemui.statusbar.notification.promoted.domain.interactor.PackageDemotionInteractor; import com.android.systemui.statusbar.notification.row.icon.AppIconProvider; import com.android.systemui.statusbar.notification.row.icon.NotificationIconStyleProvider; import com.android.systemui.statusbar.notification.shared.NotificationBundleUi; Loading Loading @@ -100,6 +101,7 @@ public class NotificationGutsManager implements NotifGutsViewManager, CoreStarta private final AccessibilityManager mAccessibilityManager; private final HighPriorityProvider mHighPriorityProvider; private final ChannelEditorDialogController mChannelEditorDialogController; private final PackageDemotionInteractor mPackageDemotionInteractor; private final OnUserInteractionCallback mOnUserInteractionCallback; // Dependencies: Loading Loading @@ -155,6 +157,7 @@ public class NotificationGutsManager implements NotifGutsViewManager, CoreStarta LauncherApps launcherApps, ShortcutManager shortcutManager, ChannelEditorDialogController channelEditorDialogController, PackageDemotionInteractor packageDemotionInteractor, UserContextProvider contextTracker, AssistantFeedbackController assistantFeedbackController, Optional<BubblesManager> bubblesManagerOptional, Loading Loading @@ -184,6 +187,7 @@ public class NotificationGutsManager implements NotifGutsViewManager, CoreStarta mShortcutManager = shortcutManager; mContextTracker = contextTracker; mChannelEditorDialogController = channelEditorDialogController; mPackageDemotionInteractor = packageDemotionInteractor; mAssistantFeedbackController = assistantFeedbackController; mBubblesManagerOptional = bubblesManagerOptional; mUiEventLogger = uiEventLogger; Loading Loading @@ -429,6 +433,7 @@ public class NotificationGutsManager implements NotifGutsViewManager, CoreStarta mIconStyleProvider, mOnUserInteractionCallback, mChannelEditorDialogController, mPackageDemotionInteractor, packageName, row.getEntry().getChannel(), row.getEntry(), Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.kt +9 −3 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ import com.android.systemui.statusbar.notification.collection.provider.HighPrior import com.android.systemui.statusbar.notification.domain.interactor.activeNotificationsInteractor import com.android.systemui.statusbar.notification.headsup.HeadsUpManager import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier import com.android.systemui.statusbar.notification.promoted.domain.interactor.PackageDemotionInteractor import com.android.systemui.statusbar.notification.row.icon.AppIconProvider import com.android.systemui.statusbar.notification.row.icon.NotificationIconStyleProvider import com.android.systemui.statusbar.notification.row.icon.appIconProvider Loading @@ -80,6 +81,9 @@ import com.android.systemui.statusbar.policy.DeviceProvisionedController import com.android.systemui.testKosmos import com.android.systemui.util.kotlin.JavaAdapter import com.android.systemui.wmshell.BubblesManager import java.util.Optional import kotlin.test.assertNotNull import kotlin.test.fail import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals Loading Loading @@ -107,9 +111,6 @@ import org.mockito.kotlin.verify import org.mockito.kotlin.whenever import platform.test.runner.parameterized.ParameterizedAndroidJunit4 import platform.test.runner.parameterized.Parameters import java.util.Optional import kotlin.test.assertNotNull import kotlin.test.fail /** Tests for [NotificationGutsManager]. */ @SmallTest Loading Loading @@ -149,6 +150,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase( @Mock private lateinit var launcherApps: LauncherApps @Mock private lateinit var shortcutManager: ShortcutManager @Mock private lateinit var channelEditorDialogController: ChannelEditorDialogController @Mock private lateinit var packageDemotionInteractor: PackageDemotionInteractor @Mock private lateinit var peopleNotificationIdentifier: PeopleNotificationIdentifier @Mock private lateinit var contextTracker: UserContextProvider @Mock private lateinit var bubblesManager: BubblesManager Loading Loading @@ -214,6 +216,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase( launcherApps, shortcutManager, channelEditorDialogController, packageDemotionInteractor, contextTracker, assistantFeedbackController, Optional.of(bubblesManager), Loading Loading @@ -521,6 +524,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase( any<NotificationIconStyleProvider>(), eq(onUserInteractionCallback), eq(channelEditorDialogController), any<PackageDemotionInteractor>(), eq(statusBarNotification.packageName), any<NotificationChannel>(), eq(entry), Loading Loading @@ -560,6 +564,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase( any<NotificationIconStyleProvider>(), eq(onUserInteractionCallback), eq(channelEditorDialogController), any<PackageDemotionInteractor>(), eq(statusBarNotification.packageName), any<NotificationChannel>(), eq(entry), Loading Loading @@ -597,6 +602,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase( any<NotificationIconStyleProvider>(), eq(onUserInteractionCallback), eq(channelEditorDialogController), any<PackageDemotionInteractor>(), eq(statusBarNotification.packageName), any<NotificationChannel>(), eq(entry), Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/NotificationInfoTest.kt +4 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ import com.android.systemui.statusbar.RankingBuilder import com.android.systemui.statusbar.notification.AssistantFeedbackController import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder import com.android.systemui.statusbar.notification.promoted.domain.interactor.PackageDemotionInteractor import com.android.systemui.statusbar.notification.row.icon.AppIconProvider import com.android.systemui.statusbar.notification.row.icon.NotificationIconStyleProvider import com.android.systemui.statusbar.notification.row.icon.appIconProvider Loading Loading @@ -105,6 +106,7 @@ class NotificationInfoTest : SysuiTestCase() { private val onUserInteractionCallback = mock<OnUserInteractionCallback>() private val mockINotificationManager = mock<INotificationManager>() private val channelEditorDialogController = mock<ChannelEditorDialogController>() private val packageDemotionInteractor = mock<PackageDemotionInteractor>() private val assistantFeedbackController = mock<AssistantFeedbackController>() @Before Loading Loading @@ -871,6 +873,7 @@ class NotificationInfoTest : SysuiTestCase() { onUserInteractionCallback: OnUserInteractionCallback = this.onUserInteractionCallback, channelEditorDialogController: ChannelEditorDialogController = this.channelEditorDialogController, packageDemotionInteractor: PackageDemotionInteractor = this.packageDemotionInteractor, pkg: String = TEST_PACKAGE_NAME, notificationChannel: NotificationChannel = this.notificationChannel, entry: NotificationEntry = this.entry, Loading @@ -892,6 +895,7 @@ class NotificationInfoTest : SysuiTestCase() { iconStyleProvider, onUserInteractionCallback, channelEditorDialogController, packageDemotionInteractor, pkg, notificationChannel, entry, Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/PromotedNotificationInfoTest.java +4 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import com.android.systemui.res.R; import com.android.systemui.statusbar.notification.AssistantFeedbackController; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder; import com.android.systemui.statusbar.notification.promoted.domain.interactor.PackageDemotionInteractor; import com.android.systemui.statusbar.notification.row.icon.AppIconProvider; import com.android.systemui.statusbar.notification.row.icon.NotificationIconStyleProvider; Loading Loading @@ -92,6 +93,8 @@ public class PromotedNotificationInfoTest extends SysuiTestCase { @Mock private ChannelEditorDialogController mChannelEditorDialogController; @Mock private PackageDemotionInteractor mPackageDemotionInteractor; @Mock private AssistantFeedbackController mAssistantFeedbackController; @Mock private TelecomManager mTelecomManager; Loading Loading @@ -138,6 +141,7 @@ public class PromotedNotificationInfoTest extends SysuiTestCase { mMockIconStyleProvider, mOnUserInteractionCallback, mChannelEditorDialogController, mPackageDemotionInteractor, TEST_PACKAGE_NAME, mNotificationChannel, mEntry, Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/promoted/domain/interactor/PackageDemotionInteractor.kt 0 → 100644 +39 −0 Original line number Diff line number Diff line /* * 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.promoted.domain.interactor import com.android.systemui.dagger.SysUISingleton import javax.inject.Inject /** A class which can receive both a demotion signal and a single handler of that signal */ @SysUISingleton class PackageDemotionInteractor @Inject constructor() { private var demotionSignalHandler: ((packageName: String, uid: Int) -> Unit)? = null /** * called after sending a the demotion signal to * [android.app.INotificationManager.setCanBePromoted] */ fun onPackageDemoted(packageName: String, uid: Int) { demotionSignalHandler?.invoke(packageName, uid) } /** sets the [handler] that will be called when [onPackageDemoted] is called. */ fun setOnPackageDemotionHandler(handler: (packageName: String, uid: Int) -> Unit) { demotionSignalHandler = handler } }
packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java +5 −0 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ import com.android.systemui.statusbar.notification.collection.provider.HighPrior import com.android.systemui.statusbar.notification.collection.render.NotifGutsViewListener; import com.android.systemui.statusbar.notification.collection.render.NotifGutsViewManager; import com.android.systemui.statusbar.notification.headsup.HeadsUpManager; import com.android.systemui.statusbar.notification.promoted.domain.interactor.PackageDemotionInteractor; import com.android.systemui.statusbar.notification.row.icon.AppIconProvider; import com.android.systemui.statusbar.notification.row.icon.NotificationIconStyleProvider; import com.android.systemui.statusbar.notification.shared.NotificationBundleUi; Loading Loading @@ -100,6 +101,7 @@ public class NotificationGutsManager implements NotifGutsViewManager, CoreStarta private final AccessibilityManager mAccessibilityManager; private final HighPriorityProvider mHighPriorityProvider; private final ChannelEditorDialogController mChannelEditorDialogController; private final PackageDemotionInteractor mPackageDemotionInteractor; private final OnUserInteractionCallback mOnUserInteractionCallback; // Dependencies: Loading Loading @@ -155,6 +157,7 @@ public class NotificationGutsManager implements NotifGutsViewManager, CoreStarta LauncherApps launcherApps, ShortcutManager shortcutManager, ChannelEditorDialogController channelEditorDialogController, PackageDemotionInteractor packageDemotionInteractor, UserContextProvider contextTracker, AssistantFeedbackController assistantFeedbackController, Optional<BubblesManager> bubblesManagerOptional, Loading Loading @@ -184,6 +187,7 @@ public class NotificationGutsManager implements NotifGutsViewManager, CoreStarta mShortcutManager = shortcutManager; mContextTracker = contextTracker; mChannelEditorDialogController = channelEditorDialogController; mPackageDemotionInteractor = packageDemotionInteractor; mAssistantFeedbackController = assistantFeedbackController; mBubblesManagerOptional = bubblesManagerOptional; mUiEventLogger = uiEventLogger; Loading Loading @@ -429,6 +433,7 @@ public class NotificationGutsManager implements NotifGutsViewManager, CoreStarta mIconStyleProvider, mOnUserInteractionCallback, mChannelEditorDialogController, mPackageDemotionInteractor, packageName, row.getEntry().getChannel(), row.getEntry(), Loading