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

Commit 9611f4c1 authored by Ioana Alexandru's avatar Ioana Alexandru
Browse files

Fold SeenNotificationsProvider into new NotificationListInteractor.

This is just renaming/restructuring things a little bit for the
FooterView refactor.

Bug: 293167744
Test: tested manually that "Unlock to see older notifications" shows up
correctly + existing tests (no behavior change)

Change-Id: I421ad493150e32ec8271484a5d41afac969e7bcd
parent fd173d1c
Loading
Loading
Loading
Loading
+5 −5
Original line number Original line 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.listbuilder.pluggable.NotifFilter
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener
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.SectionHeaderVisibilityProvider
import com.android.systemui.statusbar.notification.collection.provider.SeenNotificationsProviderImpl
import com.android.systemui.statusbar.notification.interruption.KeyguardNotificationVisibilityProvider
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.HeadsUpManager
import com.android.systemui.statusbar.policy.headsUpEvents
import com.android.systemui.statusbar.policy.headsUpEvents
import com.android.systemui.util.asIndenting
import com.android.systemui.util.asIndenting
@@ -85,7 +85,7 @@ constructor(
    @Application private val scope: CoroutineScope,
    @Application private val scope: CoroutineScope,
    private val sectionHeaderVisibilityProvider: SectionHeaderVisibilityProvider,
    private val sectionHeaderVisibilityProvider: SectionHeaderVisibilityProvider,
    private val secureSettings: SecureSettings,
    private val secureSettings: SecureSettings,
    private val seenNotifsProvider: SeenNotificationsProviderImpl,
    private val notificationListInteractor: NotificationListInteractor,
    private val statusBarStateController: StatusBarStateController,
    private val statusBarStateController: StatusBarStateController,
) : Coordinator, Dumpable {
) : Coordinator, Dumpable {


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


            override fun onCleanup() {
            override fun onCleanup() {
                logger.logProviderHasFilteredOutSeenNotifs(hasFilteredAnyNotifs)
                logger.logProviderHasFilteredOutSeenNotifs(hasFilteredAnyNotifs)
                seenNotifsProvider.hasFilteredOutSeenNotifications = hasFilteredAnyNotifs
                notificationListInteractor.setHasFilteredOutSeenNotifications(hasFilteredAnyNotifs)
                hasFilteredAnyNotifs = false
                hasFilteredAnyNotifs = false
            }
            }
        }
        }
@@ -388,8 +388,8 @@ constructor(
    override fun dump(pw: PrintWriter, args: Array<out String>) =
    override fun dump(pw: PrintWriter, args: Array<out String>) =
        with(pw.asIndenting()) {
        with(pw.asIndenting()) {
            println(
            println(
                "seenNotifsProvider.hasFilteredOutSeenNotifications=" +
                "notificationListInteractor.hasFilteredOutSeenNotifications.value=" +
                    seenNotifsProvider.hasFilteredOutSeenNotifications
                    notificationListInteractor.hasFilteredOutSeenNotifications.value
            )
            )
            println("unseen notifications:")
            println("unseen notifications:")
            indentIfPossible {
            indentIfPossible {
+1 −3
Original line number Original line Diff line number Diff line
@@ -20,10 +20,10 @@ import android.content.Context;


import com.android.internal.jank.InteractionJankMonitor;
import com.android.internal.jank.InteractionJankMonitor;
import com.android.systemui.CoreStartable;
import com.android.systemui.CoreStartable;
import com.android.systemui.res.R;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.UiBackground;
import com.android.systemui.dagger.qualifiers.UiBackground;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.res.R;
import com.android.systemui.scene.domain.interactor.WindowRootViewVisibilityInteractor;
import com.android.systemui.scene.domain.interactor.WindowRootViewVisibilityInteractor;
import com.android.systemui.shade.ShadeEventsModule;
import com.android.systemui.shade.ShadeEventsModule;
import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.NotificationListener;
@@ -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.NotificationDismissibilityProvider;
import com.android.systemui.statusbar.notification.collection.provider.NotificationDismissibilityProviderImpl;
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.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.provider.VisibilityLocationProviderDelegator;
import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManager;
import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManager;
import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManagerImpl;
import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManagerImpl;
@@ -95,7 +94,6 @@ import javax.inject.Provider;
@Module(includes = {
@Module(includes = {
        CoordinatorsModule.class,
        CoordinatorsModule.class,
        KeyguardNotificationVisibilityProviderModule.class,
        KeyguardNotificationVisibilityProviderModule.class,
        SeenNotificationsProviderModule.class,
        ShadeEventsModule.class,
        ShadeEventsModule.class,
        NotifPipelineChoreographerModule.class,
        NotifPipelineChoreographerModule.class,
        NotificationSectionHeadersModule.class,
        NotificationSectionHeadersModule.class,
+5 −5
Original line number Original line 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.DismissedByUserStats;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
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.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.provider.VisibilityLocationProviderDelegator;
import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManager;
import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManager;
import com.android.systemui.statusbar.notification.collection.render.NotifStackController;
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.NotificationGuts;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
import com.android.systemui.statusbar.notification.row.NotificationSnooze;
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.viewbinder.NotificationListViewBinder;
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationListViewModel;
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationListViewModel;
import com.android.systemui.statusbar.phone.HeadsUpAppearanceController;
import com.android.systemui.statusbar.phone.HeadsUpAppearanceController;
@@ -194,7 +194,7 @@ public class NotificationStackScrollLayoutController {


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


    private NotificationStackScrollLayout mView;
    private NotificationStackScrollLayout mView;
@@ -662,7 +662,7 @@ public class NotificationStackScrollLayoutController {
            UiEventLogger uiEventLogger,
            UiEventLogger uiEventLogger,
            NotificationRemoteInputManager remoteInputManager,
            NotificationRemoteInputManager remoteInputManager,
            VisibilityLocationProviderDelegator visibilityLocationProviderDelegator,
            VisibilityLocationProviderDelegator visibilityLocationProviderDelegator,
            SeenNotificationsProvider seenNotificationsProvider,
            NotificationListInteractor notificationListInteractor,
            ShadeController shadeController,
            ShadeController shadeController,
            InteractionJankMonitor jankMonitor,
            InteractionJankMonitor jankMonitor,
            StackStateLogger stackLogger,
            StackStateLogger stackLogger,
@@ -715,7 +715,7 @@ public class NotificationStackScrollLayoutController {
        mUiEventLogger = uiEventLogger;
        mUiEventLogger = uiEventLogger;
        mRemoteInputManager = remoteInputManager;
        mRemoteInputManager = remoteInputManager;
        mVisibilityLocationProviderDelegator = visibilityLocationProviderDelegator;
        mVisibilityLocationProviderDelegator = visibilityLocationProviderDelegator;
        mSeenNotificationsProvider = seenNotificationsProvider;
        mNotificationListInteractor = notificationListInteractor;
        mShadeController = shadeController;
        mShadeController = shadeController;
        mNotifIconAreaController = notifIconAreaController;
        mNotifIconAreaController = notifIconAreaController;
        mFeatureFlags = featureFlags;
        mFeatureFlags = featureFlags;
@@ -2006,7 +2006,7 @@ public class NotificationStackScrollLayoutController {
        public void setNotifStats(@NonNull NotifStats notifStats) {
        public void setNotifStats(@NonNull NotifStats notifStats) {
            mNotifStats = notifStats;
            mNotifStats = notifStats;
            mView.setHasFilteredOutSeenNotifications(
            mView.setHasFilteredOutSeenNotifications(
                    mSeenNotificationsProvider.getHasFilteredOutSeenNotifications());
                    mNotificationListInteractor.getHasFilteredOutSeenNotifications().getValue());
            updateFooter();
            updateFooter();
            updateShowEmptyShadeView();
            updateShowEmptyShadeView();
        }
        }
+35 −0
Original line number Original line 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 Original line 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");
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * you may not use this file except in compliance with the License.
@@ -14,28 +14,25 @@
 * limitations under the License.
 * 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 com.android.systemui.dagger.SysUISingleton
import dagger.Binds
import com.android.systemui.statusbar.notification.stack.data.repository.NotificationListRepository
import dagger.Module
import javax.inject.Inject
import javax.inject.Inject
import kotlinx.coroutines.flow.StateFlow


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


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

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