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

Commit aef8ab99 authored by Ioana Alexandru's avatar Ioana Alexandru Committed by Android (Google) Code Review
Browse files

Merge "Fold SeenNotificationsProvider into new NotificationListInteractor." into main

parents 540b82d6 9611f4c1
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -37,8 +37,8 @@ import com.android.systemui.statusbar.notification.collection.coordinator.dagger
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener
import com.android.systemui.statusbar.notification.collection.provider.SectionHeaderVisibilityProvider
import com.android.systemui.statusbar.notification.collection.provider.SeenNotificationsProviderImpl
import com.android.systemui.statusbar.notification.interruption.KeyguardNotificationVisibilityProvider
import com.android.systemui.statusbar.notification.stack.domain.interactor.NotificationListInteractor
import com.android.systemui.statusbar.policy.HeadsUpManager
import com.android.systemui.statusbar.policy.headsUpEvents
import com.android.systemui.util.asIndenting
@@ -85,7 +85,7 @@ constructor(
    @Application private val scope: CoroutineScope,
    private val sectionHeaderVisibilityProvider: SectionHeaderVisibilityProvider,
    private val secureSettings: SecureSettings,
    private val seenNotifsProvider: SeenNotificationsProviderImpl,
    private val notificationListInteractor: NotificationListInteractor,
    private val statusBarStateController: StatusBarStateController,
) : Coordinator, Dumpable {

@@ -351,7 +351,7 @@ constructor(

            override fun onCleanup() {
                logger.logProviderHasFilteredOutSeenNotifs(hasFilteredAnyNotifs)
                seenNotifsProvider.hasFilteredOutSeenNotifications = hasFilteredAnyNotifs
                notificationListInteractor.setHasFilteredOutSeenNotifications(hasFilteredAnyNotifs)
                hasFilteredAnyNotifs = false
            }
        }
@@ -388,8 +388,8 @@ constructor(
    override fun dump(pw: PrintWriter, args: Array<out String>) =
        with(pw.asIndenting()) {
            println(
                "seenNotifsProvider.hasFilteredOutSeenNotifications=" +
                    seenNotifsProvider.hasFilteredOutSeenNotifications
                "notificationListInteractor.hasFilteredOutSeenNotifications.value=" +
                    notificationListInteractor.hasFilteredOutSeenNotifications.value
            )
            println("unseen notifications:")
            indentIfPossible {
+0 −2
Original line number Diff line number Diff line
@@ -45,7 +45,6 @@ import com.android.systemui.statusbar.notification.collection.notifcollection.Co
import com.android.systemui.statusbar.notification.collection.provider.NotificationDismissibilityProvider;
import com.android.systemui.statusbar.notification.collection.provider.NotificationDismissibilityProviderImpl;
import com.android.systemui.statusbar.notification.collection.provider.NotificationVisibilityProviderImpl;
import com.android.systemui.statusbar.notification.collection.provider.SeenNotificationsProviderModule;
import com.android.systemui.statusbar.notification.collection.provider.VisibilityLocationProviderDelegator;
import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManager;
import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManagerImpl;
@@ -95,7 +94,6 @@ import javax.inject.Provider;
@Module(includes = {
        CoordinatorsModule.class,
        KeyguardNotificationVisibilityProviderModule.class,
        SeenNotificationsProviderModule.class,
        ShadeEventsModule.class,
        NotifPipelineChoreographerModule.class,
        NotificationSectionHeadersModule.class,
+5 −5
Original line number Diff line number Diff line
@@ -99,7 +99,6 @@ import com.android.systemui.statusbar.notification.collection.PipelineDumper;
import com.android.systemui.statusbar.notification.collection.notifcollection.DismissedByUserStats;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
import com.android.systemui.statusbar.notification.collection.provider.NotificationDismissibilityProvider;
import com.android.systemui.statusbar.notification.collection.provider.SeenNotificationsProvider;
import com.android.systemui.statusbar.notification.collection.provider.VisibilityLocationProviderDelegator;
import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManager;
import com.android.systemui.statusbar.notification.collection.render.NotifStackController;
@@ -115,6 +114,7 @@ import com.android.systemui.statusbar.notification.row.ExpandableView;
import com.android.systemui.statusbar.notification.row.NotificationGuts;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
import com.android.systemui.statusbar.notification.row.NotificationSnooze;
import com.android.systemui.statusbar.notification.stack.domain.interactor.NotificationListInteractor;
import com.android.systemui.statusbar.notification.stack.ui.viewbinder.NotificationListViewBinder;
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationListViewModel;
import com.android.systemui.statusbar.phone.HeadsUpAppearanceController;
@@ -194,7 +194,7 @@ public class NotificationStackScrollLayoutController {

    private final GroupExpansionManager mGroupExpansionManager;
    private final NotifPipelineFlags mNotifPipelineFlags;
    private final SeenNotificationsProvider mSeenNotificationsProvider;
    private final NotificationListInteractor mNotificationListInteractor;
    private final KeyguardTransitionRepository mKeyguardTransitionRepo;

    private NotificationStackScrollLayout mView;
@@ -662,7 +662,7 @@ public class NotificationStackScrollLayoutController {
            UiEventLogger uiEventLogger,
            NotificationRemoteInputManager remoteInputManager,
            VisibilityLocationProviderDelegator visibilityLocationProviderDelegator,
            SeenNotificationsProvider seenNotificationsProvider,
            NotificationListInteractor notificationListInteractor,
            ShadeController shadeController,
            InteractionJankMonitor jankMonitor,
            StackStateLogger stackLogger,
@@ -715,7 +715,7 @@ public class NotificationStackScrollLayoutController {
        mUiEventLogger = uiEventLogger;
        mRemoteInputManager = remoteInputManager;
        mVisibilityLocationProviderDelegator = visibilityLocationProviderDelegator;
        mSeenNotificationsProvider = seenNotificationsProvider;
        mNotificationListInteractor = notificationListInteractor;
        mShadeController = shadeController;
        mNotifIconAreaController = notifIconAreaController;
        mFeatureFlags = featureFlags;
@@ -2006,7 +2006,7 @@ public class NotificationStackScrollLayoutController {
        public void setNotifStats(@NonNull NotifStats notifStats) {
            mNotifStats = notifStats;
            mView.setHasFilteredOutSeenNotifications(
                    mSeenNotificationsProvider.getHasFilteredOutSeenNotifications());
                    mNotificationListInteractor.getHasFilteredOutSeenNotifications().getValue());
            updateFooter();
            updateShowEmptyShadeView();
        }
+35 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 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.stack.data.repository

import com.android.systemui.dagger.SysUISingleton
import javax.inject.Inject
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow

/** Repository for information about the current notification list. */
@SysUISingleton
class NotificationListRepository @Inject constructor() {
    private val _hasFilteredOutSeenNotifications = MutableStateFlow(false)
    val hasFilteredOutSeenNotifications: StateFlow<Boolean> =
        _hasFilteredOutSeenNotifications.asStateFlow()

    fun setHasFilteredOutSeenNotifications(value: Boolean) {
        _hasFilteredOutSeenNotifications.value = value
    }
}
+38 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 * Copyright (C) 2023 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.
@@ -14,28 +14,25 @@
 * limitations under the License.
 */

package com.android.systemui.statusbar.notification.collection.provider
package com.android.systemui.statusbar.notification.stack.domain.interactor

import com.android.systemui.dagger.SysUISingleton
import dagger.Binds
import dagger.Module
import com.android.systemui.statusbar.notification.stack.data.repository.NotificationListRepository
import javax.inject.Inject
import kotlinx.coroutines.flow.StateFlow

/** Keeps track of whether "seen" notification content has been filtered out of the shade. */
interface SeenNotificationsProvider {
/** Interactor for business logic associated with the notification stack. */
@SysUISingleton
class NotificationListInteractor
@Inject
constructor(
    private val notificationListRepository: NotificationListRepository,
) {
    /** Are any already-seen notifications currently filtered out of the shade? */
    val hasFilteredOutSeenNotifications: Boolean
}
    val hasFilteredOutSeenNotifications: StateFlow<Boolean>
        get() = notificationListRepository.hasFilteredOutSeenNotifications

@Module
interface SeenNotificationsProviderModule {
    @Binds
    fun bindSeenNotificationsProvider(
        impl: SeenNotificationsProviderImpl
    ): SeenNotificationsProvider
    fun setHasFilteredOutSeenNotifications(value: Boolean) {
        notificationListRepository.setHasFilteredOutSeenNotifications(value)
    }

@SysUISingleton
class SeenNotificationsProviderImpl @Inject constructor() : SeenNotificationsProvider {
    override var hasFilteredOutSeenNotifications: Boolean = false
}
Loading