diff options
| author | 2019-11-19 01:35:04 +0000 | |
|---|---|---|
| committer | 2019-11-19 01:35:04 +0000 | |
| commit | e5deb3f1c93e0750637252ca5d3b125e9d28bdc6 (patch) | |
| tree | 71dc157b6c5eb1822092fa4dfd5535e95ffd25c3 | |
| parent | a3f338f126a9780f3ec2ac320578e9571b158ce9 (diff) | |
| parent | 4c73e65592e432d8effdffa5a19258d6757e1576 (diff) | |
Merge "Make StatusBarNotificationActivityStarter injectable."
13 files changed, 241 insertions, 69 deletions
diff --git a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java index f944d553b282..bef769d7ba10 100644 --- a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java +++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java @@ -121,6 +121,7 @@ import com.android.systemui.statusbar.phone.ScrimController; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; +import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarter; import com.android.systemui.statusbar.phone.StatusBarWindowController; import com.android.systemui.statusbar.phone.StatusBarWindowViewController; import com.android.systemui.statusbar.policy.BatteryController; @@ -306,6 +307,8 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt Optional<Divider> dividerOptional, SuperStatusBarViewFactory superStatusBarViewFactory, LightsOutNotifController lightsOutNotifController, + StatusBarNotificationActivityStarter.Builder + statusBarNotificationActivityStarterBuilder, StatusBarKeyguardViewManager statusBarKeyguardViewManager, ViewMediatorCallback viewMediatorCallback, DismissCallbackRegistry dismissCallbackRegistry, @@ -383,6 +386,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt remoteInputUriController, dividerOptional, lightsOutNotifController, + statusBarNotificationActivityStarterBuilder, superStatusBarViewFactory, statusBarKeyguardViewManager, viewMediatorCallback, diff --git a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBarModule.java b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBarModule.java index eaf4ffb66227..6529868c19ad 100644 --- a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBarModule.java +++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBarModule.java @@ -80,6 +80,7 @@ import com.android.systemui.statusbar.phone.NotificationGroupManager; import com.android.systemui.statusbar.phone.ScrimController; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; +import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarter; import com.android.systemui.statusbar.phone.StatusBarWindowController; import com.android.systemui.statusbar.phone.StatusBarWindowViewController; import com.android.systemui.statusbar.policy.BatteryController; @@ -179,6 +180,8 @@ public class CarStatusBarModule { Optional<Divider> dividerOptional, SuperStatusBarViewFactory superStatusBarViewFactory, LightsOutNotifController lightsOutNotifController, + StatusBarNotificationActivityStarter.Builder + statusBarNotificationActivityStarterBuilder, StatusBarKeyguardViewManager statusBarKeyguardViewManager, ViewMediatorCallback viewMediatorCallback, DismissCallbackRegistry dismissCallbackRegistry, @@ -255,6 +258,7 @@ public class CarStatusBarModule { dividerOptional, superStatusBarViewFactory, lightsOutNotifController, + statusBarNotificationActivityStarterBuilder, statusBarKeyguardViewManager, viewMediatorCallback, dismissCallbackRegistry, diff --git a/packages/SystemUI/src/com/android/systemui/ActivityIntentHelper.java b/packages/SystemUI/src/com/android/systemui/ActivityIntentHelper.java index 2b62e040b1fd..63840bcb293a 100644 --- a/packages/SystemUI/src/com/android/systemui/ActivityIntentHelper.java +++ b/packages/SystemUI/src/com/android/systemui/ActivityIntentHelper.java @@ -24,14 +24,20 @@ import android.content.pm.ResolveInfo; import java.util.List; +import javax.inject.Inject; +import javax.inject.Singleton; + /** * Contains useful methods for querying properties of an Activity Intent. */ +@Singleton public class ActivityIntentHelper { private final Context mContext; + @Inject public ActivityIntentHelper(Context context) { + // TODO: inject a package manager, not a context. mContext = context; } diff --git a/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java b/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java index 87fe3a21186d..e31e44e7a736 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java @@ -33,7 +33,6 @@ import android.view.IWindowManager; import android.view.LayoutInflater; import com.android.internal.logging.MetricsLogger; -import com.android.internal.statusbar.IStatusBarService; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.ViewMediatorCallback; import com.android.systemui.broadcast.BroadcastDispatcher; @@ -141,13 +140,6 @@ public class DependencyProvider { return new DisplayMetrics(); } - @Singleton - @Provides - public IStatusBarService provideIStatusBarService() { - return IStatusBarService.Stub.asInterface( - ServiceManager.getService(Context.STATUS_BAR_SERVICE)); - } - /** */ @Singleton @Provides diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemServicesModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemServicesModule.java index fffba8cc1639..0d4cc0170be9 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/SystemServicesModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemServicesModule.java @@ -22,6 +22,7 @@ import android.app.ActivityManager; import android.app.AlarmManager; import android.app.IActivityManager; import android.app.IWallpaperManager; +import android.app.KeyguardManager; import android.app.WallpaperManager; import android.content.Context; import android.content.res.Resources; @@ -30,10 +31,13 @@ import android.os.Handler; import android.os.PowerManager; import android.os.ServiceManager; import android.os.UserHandle; +import android.service.dreams.DreamService; +import android.service.dreams.IDreamManager; import android.view.IWindowManager; import android.view.WindowManager; import android.view.WindowManagerGlobal; +import com.android.internal.statusbar.IStatusBarService; import com.android.internal.util.LatencyTracker; import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.systemui.dagger.qualifiers.BgHandler; @@ -64,6 +68,20 @@ public class SystemServicesModule { } @Provides + @Singleton + static IDreamManager provideIDreamManager() { + return IDreamManager.Stub.asInterface( + ServiceManager.checkService(DreamService.DREAM_SERVICE)); + } + + @Singleton + @Provides + static IStatusBarService provideIStatusBarService() { + return IStatusBarService.Stub.asInterface( + ServiceManager.getService(Context.STATUS_BAR_SERVICE)); + } + + @Provides @Nullable static IWallpaperManager provideIWallPaperManager() { return IWallpaperManager.Stub.asInterface( @@ -78,6 +96,12 @@ public class SystemServicesModule { @Singleton @Provides + static KeyguardManager provideKeyguardManager(Context context) { + return context.getSystemService(KeyguardManager.class); + } + + @Singleton + @Provides static LatencyTracker provideLatencyTracker(Context context) { return LatencyTracker.getInstance(context); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SuperStatusBarViewFactory.java b/packages/SystemUI/src/com/android/systemui/statusbar/SuperStatusBarViewFactory.java index e808ad12af0b..9398e6f689f6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/SuperStatusBarViewFactory.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/SuperStatusBarViewFactory.java @@ -22,6 +22,7 @@ import android.view.ViewGroup; import com.android.systemui.R; import com.android.systemui.statusbar.phone.LockIcon; +import com.android.systemui.statusbar.phone.NotificationPanelView; import com.android.systemui.statusbar.phone.StatusBarWindowView; import com.android.systemui.util.InjectionInflationController; @@ -95,4 +96,13 @@ public class SuperStatusBarViewFactory { } return mNotificationShelf; } + + public NotificationPanelView getNotificationPanelView() { + StatusBarWindowView statusBarWindowView = getStatusBarWindowView(); + if (statusBarWindowView == null) { + return null; + } + + return mStatusBarWindowView.findViewById(R.id.notification_panel); + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 2ace45c978e5..06183b780028 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -30,8 +30,6 @@ import static android.view.WindowInsetsController.APPEARANCE_LOW_PROFILE_BARS; import static android.view.WindowInsetsController.APPEARANCE_OPAQUE_TOP_BAR; import static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME; -import static com.android.systemui.Dependency.BG_HANDLER; -import static com.android.systemui.Dependency.MAIN_HANDLER; import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_ASLEEP; import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_AWAKE; import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_WAKING; @@ -123,7 +121,6 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.statusbar.IStatusBarService; import com.android.internal.statusbar.RegisterStatusBarResult; import com.android.internal.view.AppearanceRegion; -import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.keyguard.ViewMediatorCallback; @@ -386,6 +383,8 @@ public class StatusBar extends SystemUI implements DemoMode, private final PluginManager mPluginManager; private final RemoteInputUriController mRemoteInputUriController; private final Optional<Divider> mDividerOptional; + private final StatusBarNotificationActivityStarter.Builder + mStatusBarNotificationActivityStarterBuilder; private final SuperStatusBarViewFactory mSuperStatusBarViewFactory; private final LightsOutNotifController mLightsOutNotifController; private final DismissCallbackRegistry mDismissCallbackRegistry; @@ -678,6 +677,8 @@ public class StatusBar extends SystemUI implements DemoMode, RemoteInputUriController remoteInputUriController, Optional<Divider> dividerOptional, LightsOutNotifController lightsOutNotifController, + StatusBarNotificationActivityStarter.Builder + statusBarNotificationActivityStarterBuilder, SuperStatusBarViewFactory superStatusBarViewFactory, StatusBarKeyguardViewManager statusBarKeyguardViewManager, ViewMediatorCallback viewMediatorCallback, @@ -748,7 +749,7 @@ public class StatusBar extends SystemUI implements DemoMode, mPluginManager = pluginManager; mRemoteInputUriController = remoteInputUriController; mDividerOptional = dividerOptional; - + mStatusBarNotificationActivityStarterBuilder = statusBarNotificationActivityStarterBuilder; mSuperStatusBarViewFactory = superStatusBarViewFactory; mLightsOutNotifController = lightsOutNotifController; mStatusBarKeyguardViewManager = statusBarKeyguardViewManager; @@ -967,7 +968,7 @@ public class StatusBar extends SystemUI implements DemoMode, // TODO: Deal with the ugliness that comes from having some of the statusbar broken out // into fragments, but the rest here, it leaves some awkward lifecycle and whatnot. - mNotificationPanel = mStatusBarWindow.findViewById(R.id.notification_panel); + mNotificationPanel = mSuperStatusBarViewFactory.getNotificationPanelView(); mStackScroller = mStatusBarWindow.findViewById(R.id.notification_stack_scroller); NotificationListContainer notifListContainer = (NotificationListContainer) mStackScroller; @@ -1228,6 +1229,7 @@ public class StatusBar extends SystemUI implements DemoMode, mStatusBarStateController, mNotificationLogger); + // TODO: inject this. mPresenter = new StatusBarNotificationPresenter(mContext, mNotificationPanel, mHeadsUpManager, mStatusBarWindow, mStackScroller, mDozeScrimController, mScrimController, mActivityLaunchAnimator, mDynamicPrivacyController, @@ -1242,20 +1244,12 @@ public class StatusBar extends SystemUI implements DemoMode, mNotificationShelf.setOnActivatedListener(mPresenter); mRemoteInputManager.getController().addCallback(mStatusBarWindowController); - final StatusBarRemoteInputCallback mStatusBarRemoteInputCallback = - (StatusBarRemoteInputCallback) Dependency.get( - NotificationRemoteInputManager.Callback.class); - final ActivityStarter activityStarter = Dependency.get(ActivityStarter.class); - - mNotificationActivityStarter = new StatusBarNotificationActivityStarter(mContext, - mCommandQueue, mAssistManagerLazy.get(), mNotificationPanel, mPresenter, - mEntryManager, mHeadsUpManager, activityStarter, mActivityLaunchAnimator, - mBarService, mStatusBarStateController, mKeyguardManager, mDreamManager, - mRemoteInputManager, mStatusBarRemoteInputCallback, mGroupManager, - mLockscreenUserManager, this, mKeyguardStateController, - mNotificationInterruptionStateProvider, mMetricsLogger, - new LockPatternUtils(mContext), Dependency.get(MAIN_HANDLER), - Dependency.get(BG_HANDLER), mActivityIntentHelper, mBubbleController); + mNotificationActivityStarter = + mStatusBarNotificationActivityStarterBuilder + .setShadeController(this) + .setActivityLaunchAnimator(mActivityLaunchAnimator) + .setNotificationPresenter(mPresenter) + .build(); mGutsManager.setNotificationActivityStarter(mNotificationActivityStarter); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarModule.java index ffb5afe70915..5d69409d1d4c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarModule.java @@ -161,6 +161,8 @@ public class StatusBarModule { RemoteInputUriController remoteInputUriController, Optional<Divider> dividerOptional, LightsOutNotifController lightsOutNotifController, + StatusBarNotificationActivityStarter.Builder + statusBarNotificationActivityStarterBuilder, SuperStatusBarViewFactory superStatusBarViewFactory, StatusBarKeyguardViewManager statusBarKeyguardViewManager, ViewMediatorCallback viewMediatorCallback, @@ -233,6 +235,7 @@ public class StatusBarModule { remoteInputUriController, dividerOptional, lightsOutNotifController, + statusBarNotificationActivityStarterBuilder, superStatusBarViewFactory, statusBarKeyguardViewManager, viewMediatorCallback, 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 b340813b42f8..863874e788c6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java @@ -52,6 +52,8 @@ import com.android.systemui.EventLogTags; import com.android.systemui.UiOffloadThread; import com.android.systemui.assist.AssistManager; import com.android.systemui.bubbles.BubbleController; +import com.android.systemui.dagger.qualifiers.BgHandler; +import com.android.systemui.dagger.qualifiers.MainHandler; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.CommandQueue; @@ -60,6 +62,7 @@ import com.android.systemui.statusbar.NotificationPresenter; import com.android.systemui.statusbar.NotificationRemoteInputManager; import com.android.systemui.statusbar.RemoteInputController; import com.android.systemui.statusbar.StatusBarState; +import com.android.systemui.statusbar.SuperStatusBarViewFactory; import com.android.systemui.statusbar.notification.ActivityLaunchAnimator; import com.android.systemui.statusbar.notification.NotificationActivityStarter; import com.android.systemui.statusbar.notification.NotificationEntryListener; @@ -71,6 +74,11 @@ import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.policy.HeadsUpUtil; import com.android.systemui.statusbar.policy.KeyguardStateController; +import javax.inject.Inject; +import javax.inject.Singleton; + +import dagger.Lazy; + /** * Status bar implementation of {@link NotificationActivityStarter}. */ @@ -79,7 +87,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit private static final String TAG = "NotifActivityStarter"; protected static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); - private final AssistManager mAssistManager; + private final Lazy<AssistManager> mAssistManagerLazy; private final NotificationGroupManager mGroupManager; private final StatusBarRemoteInputCallback mStatusBarRemoteInputCallback; private final NotificationRemoteInputManager mRemoteInputManager; @@ -108,32 +116,20 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit private boolean mIsCollapsingToShowActivityOverLockscreen; - public StatusBarNotificationActivityStarter(Context context, - CommandQueue commandQueue, - AssistManager assistManager, - NotificationPanelView panel, - NotificationPresenter presenter, - NotificationEntryManager entryManager, - HeadsUpManagerPhone headsUpManager, - ActivityStarter activityStarter, - ActivityLaunchAnimator activityLaunchAnimator, - IStatusBarService statusBarService, - StatusBarStateController statusBarStateController, - KeyguardManager keyguardManager, - IDreamManager dreamManager, - NotificationRemoteInputManager remoteInputManager, - StatusBarRemoteInputCallback remoteInputCallback, - NotificationGroupManager groupManager, + private StatusBarNotificationActivityStarter(Context context, CommandQueue commandQueue, + Lazy<AssistManager> assistManagerLazy, NotificationPanelView panel, + NotificationPresenter presenter, NotificationEntryManager entryManager, + HeadsUpManagerPhone headsUpManager, ActivityStarter activityStarter, + ActivityLaunchAnimator activityLaunchAnimator, IStatusBarService statusBarService, + StatusBarStateController statusBarStateController, KeyguardManager keyguardManager, + IDreamManager dreamManager, NotificationRemoteInputManager remoteInputManager, + StatusBarRemoteInputCallback remoteInputCallback, NotificationGroupManager groupManager, NotificationLockscreenUserManager lockscreenUserManager, - ShadeController shadeController, - KeyguardStateController keyguardStateController, + ShadeController shadeController, KeyguardStateController keyguardStateController, NotificationInterruptionStateProvider notificationInterruptionStateProvider, - MetricsLogger metricsLogger, - LockPatternUtils lockPatternUtils, - Handler mainThreadHandler, - Handler backgroundHandler, - ActivityIntentHelper activityIntentHelper, - BubbleController bubbleController) { + MetricsLogger metricsLogger, LockPatternUtils lockPatternUtils, + Handler mainThreadHandler, Handler backgroundHandler, + ActivityIntentHelper activityIntentHelper, BubbleController bubbleController) { mContext = context; mNotificationPanel = panel; mPresenter = presenter; @@ -152,7 +148,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit mStatusBarStateController = statusBarStateController; mNotificationInterruptionStateProvider = notificationInterruptionStateProvider; mMetricsLogger = metricsLogger; - mAssistManager = assistManager; + mAssistManagerLazy = assistManagerLazy; mGroupManager = groupManager; mLockPatternUtils = lockPatternUtils; mBackgroundHandler = backgroundHandler; @@ -318,7 +314,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit startNotificationIntent(intent, fillInIntent, row, wasOccluded, isActivityIntent); } if (isActivityIntent || isBubble) { - mAssistManager.hideAssist(); + mAssistManagerLazy.get().hideAssist(); } if (shouldCollapse()) { collapseOnMainThread(); @@ -490,4 +486,128 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit } }); } + + /** + * Public builder for {@link StatusBarNotificationActivityStarter}. + */ + @Singleton + public static class Builder { + private final Context mContext; + private final CommandQueue mCommandQueue; + private final Lazy<AssistManager> mAssistManagerLazy; + private final NotificationEntryManager mEntryManager; + private final HeadsUpManagerPhone mHeadsUpManager; + private final ActivityStarter mActivityStarter; + private final IStatusBarService mStatusBarService; + private final StatusBarStateController mStatusBarStateController; + private final KeyguardManager mKeyguardManager; + private final IDreamManager mDreamManager; + private final NotificationRemoteInputManager mRemoteInputManager; + private final StatusBarRemoteInputCallback mRemoteInputCallback; + private final NotificationGroupManager mGroupManager; + private final NotificationLockscreenUserManager mLockscreenUserManager; + private final KeyguardStateController mKeyguardStateController; + private final NotificationInterruptionStateProvider mNotificationInterruptionStateProvider; + private final MetricsLogger mMetricsLogger; + private final LockPatternUtils mLockPatternUtils; + private final Handler mMainThreadHandler; + private final Handler mBackgroundHandler; + private final ActivityIntentHelper mActivityIntentHelper; + private final BubbleController mBubbleController; + private final SuperStatusBarViewFactory mSuperStatusBarViewFactory; + private ShadeController mShadeController; + private NotificationPresenter mNotificationPresenter; + private ActivityLaunchAnimator mActivityLaunchAnimator; + + @Inject + public Builder(Context context, + CommandQueue commandQueue, + Lazy<AssistManager> assistManagerLazy, + NotificationEntryManager entryManager, + HeadsUpManagerPhone headsUpManager, + ActivityStarter activityStarter, + IStatusBarService statusBarService, + StatusBarStateController statusBarStateController, + KeyguardManager keyguardManager, + IDreamManager dreamManager, + NotificationRemoteInputManager remoteInputManager, + StatusBarRemoteInputCallback remoteInputCallback, + NotificationGroupManager groupManager, + NotificationLockscreenUserManager lockscreenUserManager, + KeyguardStateController keyguardStateController, + NotificationInterruptionStateProvider notificationInterruptionStateProvider, + MetricsLogger metricsLogger, + LockPatternUtils lockPatternUtils, + @MainHandler Handler mainThreadHandler, + @BgHandler Handler backgroundHandler, + ActivityIntentHelper activityIntentHelper, + BubbleController bubbleController, + SuperStatusBarViewFactory superStatusBarViewFactory) { + mContext = context; + mCommandQueue = commandQueue; + mAssistManagerLazy = assistManagerLazy; + mEntryManager = entryManager; + mHeadsUpManager = headsUpManager; + mActivityStarter = activityStarter; + mStatusBarService = statusBarService; + mStatusBarStateController = statusBarStateController; + mKeyguardManager = keyguardManager; + mDreamManager = dreamManager; + mRemoteInputManager = remoteInputManager; + mRemoteInputCallback = remoteInputCallback; + mGroupManager = groupManager; + mLockscreenUserManager = lockscreenUserManager; + mKeyguardStateController = keyguardStateController; + mNotificationInterruptionStateProvider = notificationInterruptionStateProvider; + mMetricsLogger = metricsLogger; + mLockPatternUtils = lockPatternUtils; + mMainThreadHandler = mainThreadHandler; + mBackgroundHandler = backgroundHandler; + mActivityIntentHelper = activityIntentHelper; + mBubbleController = bubbleController; + mSuperStatusBarViewFactory = superStatusBarViewFactory; + } + public Builder setShadeController(ShadeController shadeController) { + mShadeController = shadeController; + return this; + } + + public Builder setNotificationPresenter(NotificationPresenter notificationPresenter) { + mNotificationPresenter = notificationPresenter; + return this; + } + + public Builder setActivityLaunchAnimator(ActivityLaunchAnimator activityLaunchAnimator) { + mActivityLaunchAnimator = activityLaunchAnimator; + return this; + } + + public StatusBarNotificationActivityStarter build() { + return new StatusBarNotificationActivityStarter(mContext, + mCommandQueue, mAssistManagerLazy, + mSuperStatusBarViewFactory.getNotificationPanelView(), + mNotificationPresenter, + mEntryManager, + mHeadsUpManager, + mActivityStarter, + mActivityLaunchAnimator, + mStatusBarService, + mStatusBarStateController, + mKeyguardManager, + mDreamManager, + mRemoteInputManager, + mRemoteInputCallback, + mGroupManager, + mLockscreenUserManager, + mShadeController, + mKeyguardStateController, + mNotificationInterruptionStateProvider, + mMetricsLogger, + mLockPatternUtils, + mMainThreadHandler, + mBackgroundHandler, + mActivityIntentHelper, + mBubbleController); + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java index 322b23fa50ee..3e6ba4dacb71 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java @@ -50,6 +50,8 @@ import com.android.systemui.statusbar.policy.KeyguardStateController; import javax.inject.Inject; import javax.inject.Singleton; +import dagger.Lazy; + /** */ @Singleton @@ -60,7 +62,7 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, private final SysuiStatusBarStateController mStatusBarStateController; private final NotificationLockscreenUserManager mLockscreenUserManager; private final ActivityStarter mActivityStarter; - private final ShadeController mShadeController; + private final Lazy<ShadeController> mShadeControllerLazy; private final Context mContext; private final ActivityIntentHelper mActivityIntentHelper; private final NotificationGroupManager mGroupManager; @@ -79,7 +81,7 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, NotificationLockscreenUserManager notificationLockscreenUserManager, KeyguardStateController keyguardStateController, StatusBarStateController statusBarStateController, - ActivityStarter activityStarter, ShadeController shadeController, + ActivityStarter activityStarter, Lazy<ShadeController> shadeControllerLazy, CommandQueue commandQueue) { mContext = context; mContext.registerReceiverAsUser(mChallengeReceiver, UserHandle.ALL, @@ -87,7 +89,7 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, mLockscreenUserManager = notificationLockscreenUserManager; mKeyguardStateController = keyguardStateController; mStatusBarStateController = (SysuiStatusBarStateController) statusBarStateController; - mShadeController = shadeController; + mShadeControllerLazy = shadeControllerLazy; mActivityStarter = activityStarter; mStatusBarStateController.addCallback(this); mKeyguardManager = context.getSystemService(KeyguardManager.class); @@ -116,7 +118,7 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, if (!row.isPinned()) { mStatusBarStateController.setLeaveOpenOnKeyguardHide(true); } - mShadeController.showBouncer(true /* scrimmed */); + mShadeControllerLazy.get().showBouncer(true /* scrimmed */); mPendingRemoteInputView = clicked; } @@ -162,8 +164,8 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, }); } }; - mShadeController.postOnShadeExpanded(clickPendingViewRunnable); - mShadeController.instantExpandNotificationsPanel(); + mShadeControllerLazy.get().postOnShadeExpanded(clickPendingViewRunnable); + mShadeControllerLazy.get().instantExpandNotificationsPanel(); } } @@ -251,7 +253,7 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, boolean handled = defaultHandler.handleClick(); // close the shade if it was open and maybe wait for activity start. - return handled && mShadeController.closeShadeIfOpen(); + return handled && mShadeControllerLazy.get().closeShadeIfOpen(); }, null, afterKeyguardGone); return true; } else { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java index 07be0d7efffb..6f5cfbecb5d0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java @@ -64,6 +64,7 @@ import com.android.systemui.statusbar.NotificationRemoteInputManager; import com.android.systemui.statusbar.NotificationTestHelper; import com.android.systemui.statusbar.RemoteInputController; import com.android.systemui.statusbar.StatusBarState; +import com.android.systemui.statusbar.SuperStatusBarViewFactory; import com.android.systemui.statusbar.notification.ActivityLaunchAnimator; import com.android.systemui.statusbar.notification.NotificationActivityStarter; import com.android.systemui.statusbar.notification.NotificationEntryManager; @@ -116,8 +117,11 @@ public class StatusBarNotificationActivityStarterTest extends SysuiTestCase { @Mock private Intent mContentIntentInner; @Mock - private NotificationActivityStarter mNotificationActivityStarter; + @Mock + private SuperStatusBarViewFactory mSuperStatusBarViewFactory; + @Mock + private NotificationPanelView mNotificationPanelView; private NotificationTestHelper mNotificationTestHelper; private ExpandableNotificationRow mNotificationRow; @@ -156,19 +160,25 @@ public class StatusBarNotificationActivityStarterTest extends SysuiTestCase { mActiveNotifications.add(mBubbleNotificationRow.getEntry()); when(mEntryManager.getVisibleNotifications()).thenReturn(mActiveNotifications); when(mStatusBarStateController.getState()).thenReturn(StatusBarState.SHADE); + when(mSuperStatusBarViewFactory.getNotificationPanelView()) + .thenReturn(mNotificationPanelView); - mNotificationActivityStarter = new StatusBarNotificationActivityStarter(getContext(), - mock(CommandQueue.class), mAssistManager, mock(NotificationPanelView.class), - mock(NotificationPresenter.class), mEntryManager, mock(HeadsUpManagerPhone.class), - mActivityStarter, mock(ActivityLaunchAnimator.class), mStatusBarService, + mNotificationActivityStarter = (new StatusBarNotificationActivityStarter.Builder( + getContext(), mock(CommandQueue.class), () -> mAssistManager, + mEntryManager, mock(HeadsUpManagerPhone.class), + mActivityStarter, mStatusBarService, mock(StatusBarStateController.class), mock(KeyguardManager.class), mock(IDreamManager.class), mRemoteInputManager, mock(StatusBarRemoteInputCallback.class), mock(NotificationGroupManager.class), - mock(NotificationLockscreenUserManager.class), mShadeController, + mock(NotificationLockscreenUserManager.class), mKeyguardStateController, mock(NotificationInterruptionStateProvider.class), mock(MetricsLogger.class), mock(LockPatternUtils.class), mHandler, mHandler, mActivityIntentHelper, - mBubbleController); + mBubbleController, mSuperStatusBarViewFactory)) + .setShadeController(mShadeController) + .setNotificationPresenter(mock(NotificationPresenter.class)) + .setActivityLaunchAnimator(mock(ActivityLaunchAnimator.class)) + .build(); // set up dismissKeyguardThenExecute to synchronously invoke the OnDismissAction arg doAnswer(mCallOnDismiss).when(mActivityStarter).dismissKeyguardThenExecute( diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java index b1b66b5360e3..9d76b425725f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java @@ -72,7 +72,7 @@ public class StatusBarRemoteInputCallbackTest extends SysuiTestCase { mRemoteInputCallback = spy(new StatusBarRemoteInputCallback(mContext, mock(NotificationGroupManager.class), mNotificationLockscreenUserManager, mKeyguardStateController, mStatusBarStateController, mActivityStarter, - mShadeController, new CommandQueue(mContext))); + () -> mShadeController, new CommandQueue(mContext))); mRemoteInputCallback.mChallengeReceiver = mRemoteInputCallback.new ChallengeReceiver(); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java index 8009ff0faa9d..e78fb9e521e1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java @@ -236,6 +236,8 @@ public class StatusBarTest extends SysuiTestCase { @Mock private ScreenPinningRequest mScreenPinningRequest; @Mock private NotificationEntryManager mEntryManager; @Mock private LockscreenLockIconController mLockscreenLockIconController; + @Mock private StatusBarNotificationActivityStarter.Builder + mStatusBarNotificationActivityStarterBuilder; @Before public void setup() throws Exception { @@ -369,6 +371,7 @@ public class StatusBarTest extends SysuiTestCase { mRemoteInputUriController, Optional.of(mDivider), mLightsOutNotifController, + mStatusBarNotificationActivityStarterBuilder, mSuperStatusBarViewFactory, mStatusBarKeyguardViewManager, mViewMediatorCallback, |