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

Commit 0199760a authored by Caitlin Shkuratov's avatar Caitlin Shkuratov
Browse files

[CS] Make the notification activity animators singletons.

Bug: 277762009
Test: tap notif -> verify animation into activity plays correctly
Test: tap a smart action on a notif -> verify animation into activity
plays correctly
Test: atest CentralSurfacesImplTest

Change-Id: Ia02c5f55b4ee739bb3d617498f3dcb32c47dda66
parent 17aaa251
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -24,15 +24,12 @@ import com.android.systemui.statusbar.notification.data.repository.NotificationE
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
import com.android.systemui.statusbar.notification.stack.NotificationListContainer
import com.android.systemui.statusbar.phone.HeadsUpManagerPhone
import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent
import com.android.systemui.statusbar.policy.HeadsUpUtil
import javax.inject.Inject
import kotlin.math.ceil
import kotlin.math.max

/** A provider of [NotificationLaunchAnimatorController]. */
@CentralSurfacesComponent.CentralSurfacesScope
class NotificationLaunchAnimatorControllerProvider @Inject constructor(
class NotificationLaunchAnimatorControllerProvider(
    private val notificationExpansionRepository: NotificationExpansionRepository,
    private val notificationListContainer: NotificationListContainer,
    private val headsUpManager: HeadsUpManagerPhone,
+25 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar.notification.dagger;

import android.content.Context;

import com.android.internal.jank.InteractionJankMonitor;
import com.android.systemui.R;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.UiBackground;
@@ -25,6 +26,8 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.shade.ShadeEventsModule;
import com.android.systemui.shade.ShadeExpansionStateManager;
import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.notification.NotificationActivityStarter;
import com.android.systemui.statusbar.notification.NotificationLaunchAnimatorControllerProvider;
import com.android.systemui.statusbar.notification.VisibilityLocationProvider;
import com.android.systemui.statusbar.notification.collection.NotifInflaterImpl;
import com.android.systemui.statusbar.notification.collection.NotifLiveDataStore;
@@ -50,6 +53,7 @@ import com.android.systemui.statusbar.notification.collection.render.GroupMember
import com.android.systemui.statusbar.notification.collection.render.NotifGutsViewManager;
import com.android.systemui.statusbar.notification.collection.render.NotifShadeEventSource;
import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
import com.android.systemui.statusbar.notification.data.repository.NotificationExpansionRepository;
import com.android.systemui.statusbar.notification.icon.ConversationIconManager;
import com.android.systemui.statusbar.notification.icon.IconManager;
import com.android.systemui.statusbar.notification.init.NotificationsController;
@@ -69,7 +73,9 @@ import com.android.systemui.statusbar.notification.stack.NotificationSectionsMan
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm;
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationListViewModelModule;
import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarter;

import dagger.Binds;
import dagger.Module;
@@ -152,6 +158,10 @@ public interface NotificationsModule {
    @Binds
    GroupExpansionManager provideGroupExpansionManager(GroupExpansionManagerImpl impl);

    /** Provides an instance of {@link NotificationActivityStarter}. */
    @Binds
    NotificationActivityStarter bindActivityStarter(StatusBarNotificationActivityStarter impl);

    /** Initializes the notification data pipeline (can be disabled via config). */
    @SysUISingleton
    @Provides
@@ -174,6 +184,21 @@ public interface NotificationsModule {
        return nsslController.getNotificationListContainer();
    }

    /** Provides notification launch animator. */
    @Provides
    @SysUISingleton
    static NotificationLaunchAnimatorControllerProvider provideNotifLaunchAnimControllerProvider(
            NotificationExpansionRepository notificationExpansionRepository,
            NotificationListContainer notificationListContainer,
            HeadsUpManagerPhone headsUpManager,
            InteractionJankMonitor jankMonitor) {
        return new NotificationLaunchAnimatorControllerProvider(
                notificationExpansionRepository,
                notificationListContainer,
                headsUpManager,
                jankMonitor);
    }

    /**
     * Provide the active notification collection managing the notifications to render.
     */
+6 −8
Original line number Diff line number Diff line
@@ -623,9 +623,9 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
    private final SysuiStatusBarStateController mStatusBarStateController;

    private final ActivityLaunchAnimator mActivityLaunchAnimator;
    private NotificationLaunchAnimatorControllerProvider mNotificationAnimationProvider;
    private final NotificationLaunchAnimatorControllerProvider mNotificationAnimationProvider;
    private final NotificationPresenter mPresenter;
    private NotificationActivityStarter mNotificationActivityStarter;
    private final NotificationActivityStarter mNotificationActivityStarter;
    private final Lazy<NotificationShadeDepthController> mNotificationShadeDepthControllerLazy;
    private final Optional<Bubbles> mBubblesOptional;
    private final Lazy<NoteTaskController> mNoteTaskControllerLazy;
@@ -726,6 +726,8 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
            NotificationShelfController notificationShelfController,
            NotificationStackScrollLayoutController notificationStackScrollLayoutController,
            NotificationPresenter notificationPresenter,
            NotificationActivityStarter notificationActivityStarter,
            NotificationLaunchAnimatorControllerProvider notifLaunchAnimatorControllerProvider,
            NotificationExpansionRepository notificationExpansionRepository,
            DozeParameters dozeParameters,
            ScrimController scrimController,
@@ -835,6 +837,8 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
        mStackScroller = mStackScrollerController.getView();
        mNotifListContainer = mStackScrollerController.getNotificationListContainer();
        mPresenter = notificationPresenter;
        mNotificationActivityStarter = notificationActivityStarter;
        mNotificationAnimationProvider = notifLaunchAnimatorControllerProvider;
        mNotificationExpansionRepository = notificationExpansionRepository;
        mDozeServiceHost = dozeServiceHost;
        mPowerManager = powerManager;
@@ -1550,11 +1554,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
        // Set up the initial notification state.
        mActivityLaunchAnimator.setCallback(mActivityLaunchAnimatorCallback);
        mActivityLaunchAnimator.addListener(mActivityLaunchAnimatorListener);
        mNotificationAnimationProvider = new NotificationLaunchAnimatorControllerProvider(
                mNotificationExpansionRepository,
                mNotifListContainer,
                mHeadsUpManager,
                mJankMonitor);
        mRemoteInputManager.addControllerCallback(mNotificationShadeWindowController);
        mStackScrollerController.setNotificationActivityStarter(mNotificationActivityStarter);
        mGutsManager.setNotificationActivityStarter(mNotificationActivityStarter);
@@ -1611,7 +1610,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
        mShadeController.setNotificationShadeWindowViewController(
                getNotificationShadeWindowViewController());
        mBackActionInteractor.setup(mQsController, mShadeSurface);
        mNotificationActivityStarter = mCentralSurfacesComponent.getNotificationActivityStarter();

        // Listen for demo mode changes
        mDemoModeController.addCallback(mDemoModeCallback);
+3 −3
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ import com.android.systemui.ActivityIntentHelper;
import com.android.systemui.EventLogTags;
import com.android.systemui.animation.ActivityLaunchAnimator;
import com.android.systemui.assist.AssistManager;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.DisplayId;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.plugins.ActivityStarter;
@@ -75,7 +76,6 @@ import com.android.systemui.statusbar.notification.interruption.NotificationInte
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRowDragController;
import com.android.systemui.statusbar.notification.row.OnUserInteractionCallback;
import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent;
import com.android.systemui.statusbar.policy.HeadsUpUtil;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.wmshell.BubblesManager;
@@ -92,8 +92,8 @@ import javax.inject.Inject;
/**
 * Status bar implementation of {@link NotificationActivityStarter}.
 */
@CentralSurfacesComponent.CentralSurfacesScope
class StatusBarNotificationActivityStarter implements NotificationActivityStarter {
@SysUISingleton
public class StatusBarNotificationActivityStarter implements NotificationActivityStarter {

    private final Context mContext;
    private final int mDisplayId;
+0 −29
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 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.phone;

import com.android.systemui.statusbar.notification.NotificationActivityStarter;

import dagger.Binds;
import dagger.Module;

@Module
public abstract class StatusBarNotificationActivityStarterModule {
    @Binds
    abstract NotificationActivityStarter bindActivityStarter(
            StatusBarNotificationActivityStarter impl);
}
Loading