Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 22818679 authored by Jeff DeCew's avatar Jeff DeCew
Browse files

Broadcast any demotion action

Fixes: 391661009
Test: atest SystemUITests
Flag: com.android.systemui.promote_notifications_automatically
Change-Id: I0d45ce73186453723dc079ca06e3fbc822749388
parent 992e084d
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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
@@ -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
@@ -214,6 +216,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase(
                launcherApps,
                shortcutManager,
                channelEditorDialogController,
                packageDemotionInteractor,
                contextTracker,
                assistantFeedbackController,
                Optional.of(bubblesManager),
@@ -521,6 +524,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase(
                any<NotificationIconStyleProvider>(),
                eq(onUserInteractionCallback),
                eq(channelEditorDialogController),
                any<PackageDemotionInteractor>(),
                eq(statusBarNotification.packageName),
                any<NotificationChannel>(),
                eq(entry),
@@ -560,6 +564,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase(
                any<NotificationIconStyleProvider>(),
                eq(onUserInteractionCallback),
                eq(channelEditorDialogController),
                any<PackageDemotionInteractor>(),
                eq(statusBarNotification.packageName),
                any<NotificationChannel>(),
                eq(entry),
@@ -597,6 +602,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase(
                any<NotificationIconStyleProvider>(),
                eq(onUserInteractionCallback),
                eq(channelEditorDialogController),
                any<PackageDemotionInteractor>(),
                eq(statusBarNotification.packageName),
                any<NotificationChannel>(),
                eq(entry),
+4 −0
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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,
@@ -892,6 +895,7 @@ class NotificationInfoTest : SysuiTestCase() {
            iconStyleProvider,
            onUserInteractionCallback,
            channelEditorDialogController,
            packageDemotionInteractor,
            pkg,
            notificationChannel,
            entry,
+4 −0
Original line number Diff line number Diff line
@@ -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;

@@ -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;
@@ -138,6 +141,7 @@ public class PromotedNotificationInfoTest extends SysuiTestCase {
                mMockIconStyleProvider,
                mOnUserInteractionCallback,
                mChannelEditorDialogController,
                mPackageDemotionInteractor,
                TEST_PACKAGE_NAME,
                mNotificationChannel,
                mEntry,
+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
    }
}
+5 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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:
@@ -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,
@@ -184,6 +187,7 @@ public class NotificationGutsManager implements NotifGutsViewManager, CoreStarta
        mShortcutManager = shortcutManager;
        mContextTracker = contextTracker;
        mChannelEditorDialogController = channelEditorDialogController;
        mPackageDemotionInteractor = packageDemotionInteractor;
        mAssistantFeedbackController = assistantFeedbackController;
        mBubblesManagerOptional = bubblesManagerOptional;
        mUiEventLogger = uiEventLogger;
@@ -429,6 +433,7 @@ public class NotificationGutsManager implements NotifGutsViewManager, CoreStarta
                mIconStyleProvider,
                mOnUserInteractionCallback,
                mChannelEditorDialogController,
                mPackageDemotionInteractor,
                packageName,
                row.getEntry().getChannel(),
                row.getEntry(),
Loading