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

Commit 69001a0a authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Broadcast any demotion action" into main

parents c4d92955 22818679
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