[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
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorController.kt
index c1b905a..3198029 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorController.kt
@@ -24,15 +24,12 @@
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,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java
index ea3a8f5..637637d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java
@@ -18,6 +18,7 @@
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.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.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.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 @@
@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 @@
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.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
index 8c0b156..4ee62d9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
@@ -623,9 +623,9 @@
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 @@
NotificationShelfController notificationShelfController,
NotificationStackScrollLayoutController notificationStackScrollLayoutController,
NotificationPresenter notificationPresenter,
+ NotificationActivityStarter notificationActivityStarter,
+ NotificationLaunchAnimatorControllerProvider notifLaunchAnimatorControllerProvider,
NotificationExpansionRepository notificationExpansionRepository,
DozeParameters dozeParameters,
ScrimController scrimController,
@@ -835,6 +837,8 @@
mStackScroller = mStackScrollerController.getView();
mNotifListContainer = mStackScrollerController.getNotificationListContainer();
mPresenter = notificationPresenter;
+ mNotificationActivityStarter = notificationActivityStarter;
+ mNotificationAnimationProvider = notifLaunchAnimatorControllerProvider;
mNotificationExpansionRepository = notificationExpansionRepository;
mDozeServiceHost = dozeServiceHost;
mPowerManager = powerManager;
@@ -1550,11 +1554,6 @@
// 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 @@
mShadeController.setNotificationShadeWindowViewController(
getNotificationShadeWindowViewController());
mBackActionInteractor.setup(mQsController, mShadeSurface);
- mNotificationActivityStarter = mCentralSurfacesComponent.getNotificationActivityStarter();
// Listen for demo mode changes
mDemoModeController.addCallback(mDemoModeCallback);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
index 8de213f..053c27c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
@@ -54,6 +54,7 @@
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.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 @@
/**
* 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;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterModule.java
deleted file mode 100644
index caa149e..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterModule.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * 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);
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/CentralSurfacesComponent.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/CentralSurfacesComponent.java
index 4fd3ae2..1a04b91 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/CentralSurfacesComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/CentralSurfacesComponent.java
@@ -21,9 +21,7 @@
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import com.android.systemui.shade.ShadeHeaderController;
-import com.android.systemui.statusbar.notification.NotificationActivityStarter;
import com.android.systemui.statusbar.phone.CentralSurfacesImpl;
-import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarterModule;
import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment;
import dagger.Subcomponent;
@@ -45,7 +43,6 @@
*/
@Subcomponent(modules = {
StatusBarViewModule.class,
- StatusBarNotificationActivityStarterModule.class,
})
@CentralSurfacesComponent.CentralSurfacesScope
public interface CentralSurfacesComponent {
@@ -76,6 +73,4 @@
*/
@Named(STATUS_BAR_FRAGMENT)
CollapsedStatusBarFragment createCollapsedStatusBarFragment();
-
- NotificationActivityStarter getNotificationActivityStarter();
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
index 37db5ee..f47efe3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
@@ -154,6 +154,8 @@
import com.android.systemui.statusbar.core.StatusBarInitializer;
import com.android.systemui.statusbar.notification.DynamicPrivacyController;
import com.android.systemui.statusbar.notification.NotifPipelineFlags;
+import com.android.systemui.statusbar.notification.NotificationActivityStarter;
+import com.android.systemui.statusbar.notification.NotificationLaunchAnimatorControllerProvider;
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
import com.android.systemui.statusbar.notification.collection.NotifLiveDataStore;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
@@ -248,7 +250,9 @@
@Mock private ShadeExpansionStateManager mShadeExpansionStateManager;
@Mock private BatteryController mBatteryController;
@Mock private DeviceProvisionedController mDeviceProvisionedController;
+ @Mock private NotificationLaunchAnimatorControllerProvider mNotifLaunchAnimControllerProvider;
@Mock private StatusBarNotificationPresenter mNotificationPresenter;
+ @Mock private NotificationActivityStarter mNotificationActivityStarter;
@Mock private AmbientDisplayConfiguration mAmbientDisplayConfiguration;
@Mock private NotificationLogger.ExpansionStateLogger mExpansionStateLogger;
@Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@@ -518,6 +522,8 @@
mNotificationShelfController,
mStackScrollerController,
mNotificationPresenter,
+ mNotificationActivityStarter,
+ mNotifLaunchAnimControllerProvider,
new NotificationExpansionRepository(),
mDozeParameters,
mScrimController,