From 23e761882610acaefa3f995006c633d2d846fbde Mon Sep 17 00:00:00 2001 From: Caitlin Cassidy Date: Tue, 2 Nov 2021 18:08:42 +0000 Subject: [PATCH] [Status Bar Refactor] 3/3: Inject StatusBarWindowView instead of having the controller construct it. This will allow us to pass in a fake view for testing the controller. This CL also moves the window view and controller into its own package for slightly better organization. Fixes: 204583449 Test: atest SystemUITests Test: manual once-over of key user journeys Change-Id: I4c2cc3f0c3a18466b2d1a1012c999f530329d3f7 --- .../SystemUI/res/layout/super_status_bar.xml | 4 +- .../src/com/android/systemui/Dependency.java | 2 +- .../systemui/dagger/SystemUIModule.java | 2 + .../systemui/qs/QuickStatusBarHeader.java | 2 +- .../dagger/StatusBarDependenciesModule.java | 4 +- .../SystemEventChipAnimationController.kt | 2 +- .../events/SystemStatusAnimationScheduler.kt | 2 +- .../SwipeStatusBarAwayGestureHandler.kt | 2 +- .../phone/KeyguardStatusBarView.java | 1 + .../phone/NotificationIconAreaController.java | 1 + ...NotificationShadeWindowViewController.java | 1 + .../statusbar/phone/PhoneStatusBarView.java | 1 + .../systemui/statusbar/phone/StatusBar.java | 7 ++- .../phone/StatusBarHeadsUpChangeListener.java | 1 + .../phone/dagger/StatusBarComponent.java | 7 --- .../phone/dagger/StatusBarPhoneModule.java | 3 ++ .../ongoingcall/OngoingCallController.kt | 2 +- .../StatusBarWindowController.java | 17 ++----- .../statusbar/window/StatusBarWindowModule.kt | 47 +++++++++++++++++++ .../StatusBarWindowView.java | 4 +- .../NotificationIconAreaControllerTest.java | 1 + .../NotificationShadeWindowViewTest.java | 1 + .../statusbar/phone/StatusBarTest.java | 3 ++ .../ongoingcall/OngoingCallControllerTest.kt | 2 +- 24 files changed, 85 insertions(+), 34 deletions(-) rename packages/SystemUI/src/com/android/systemui/statusbar/{phone => window}/StatusBarWindowController.java (96%) create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowModule.kt rename packages/SystemUI/src/com/android/systemui/statusbar/{phone => window}/StatusBarWindowView.java (98%) diff --git a/packages/SystemUI/res/layout/super_status_bar.xml b/packages/SystemUI/res/layout/super_status_bar.xml index 5176d966a6949..6f5d7beb80083 100644 --- a/packages/SystemUI/res/layout/super_status_bar.xml +++ b/packages/SystemUI/res/layout/super_status_bar.xml @@ -18,7 +18,7 @@ --> - - + diff --git a/packages/SystemUI/src/com/android/systemui/Dependency.java b/packages/SystemUI/src/com/android/systemui/Dependency.java index 4e4034a28cb04..925fc5c3e2687 100644 --- a/packages/SystemUI/src/com/android/systemui/Dependency.java +++ b/packages/SystemUI/src/com/android/systemui/Dependency.java @@ -105,7 +105,6 @@ import com.android.systemui.statusbar.phone.NotificationGroupAlertTransferHelper import com.android.systemui.statusbar.phone.ShadeController; import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider; import com.android.systemui.statusbar.phone.StatusBarIconController; -import com.android.systemui.statusbar.phone.StatusBarWindowController; import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController; import com.android.systemui.statusbar.policy.AccessibilityController; import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper; @@ -129,6 +128,7 @@ import com.android.systemui.statusbar.policy.SmartReplyConstants; import com.android.systemui.statusbar.policy.UserInfoController; import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.ZenModeController; +import com.android.systemui.statusbar.window.StatusBarWindowController; import com.android.systemui.telephony.TelephonyListenerManager; import com.android.systemui.tracing.ProtoTracer; import com.android.systemui.tuner.TunablePadding.TunablePaddingService; diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java index 3fb8c1a95078d..e889f5e72d46f 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java @@ -70,6 +70,7 @@ import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.statusbar.policy.dagger.SmartRepliesInflationModule; import com.android.systemui.statusbar.policy.dagger.StatusBarPolicyModule; +import com.android.systemui.statusbar.window.StatusBarWindowModule; import com.android.systemui.tuner.dagger.TunerModule; import com.android.systemui.user.UserModule; import com.android.systemui.util.concurrency.SysUIConcurrencyModule; @@ -110,6 +111,7 @@ import dagger.Provides; SettingsUtilModule.class, SmartRepliesInflationModule.class, StatusBarPolicyModule.class, + StatusBarWindowModule.class, SysUIConcurrencyModule.class, TunerModule.class, UserModule.class, diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java index 071e0535e7c28..186054f810efa 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java @@ -40,10 +40,10 @@ import com.android.systemui.R; import com.android.systemui.battery.BatteryMeterView; import com.android.systemui.qs.QSDetail.Callback; import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager; -import com.android.systemui.statusbar.phone.StatusBarWindowView; import com.android.systemui.statusbar.phone.StatusIconContainer; import com.android.systemui.statusbar.policy.Clock; import com.android.systemui.statusbar.policy.VariableDateView; +import com.android.systemui.statusbar.window.StatusBarWindowView; import java.util.List; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java index bb697c3b08514..74ea19f4ca22a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java @@ -67,11 +67,13 @@ import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarIconControllerImpl; import com.android.systemui.statusbar.phone.StatusBarRemoteInputCallback; -import com.android.systemui.statusbar.phone.StatusBarWindowController; import com.android.systemui.statusbar.phone.SystemUIHostDialogProvider; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallLogger; import com.android.systemui.statusbar.policy.RemoteInputUriController; +import com.android.systemui.statusbar.window.StatusBarWindowController; +import com.android.systemui.statusbar.window.StatusBarWindowModule; +import com.android.systemui.statusbar.window.StatusBarWindowView; import com.android.systemui.tracing.ProtoTracer; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.time.SystemClock; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt index 7e4db03148c53..d5a0467c9b9ec 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt @@ -26,7 +26,7 @@ import android.view.ViewGroup.LayoutParams.WRAP_CONTENT import android.widget.FrameLayout import com.android.systemui.R import com.android.systemui.statusbar.phone.StatusBarLocationPublisher -import com.android.systemui.statusbar.phone.StatusBarWindowController +import com.android.systemui.statusbar.window.StatusBarWindowController import javax.inject.Inject /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationScheduler.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationScheduler.kt index dcf8e739a76e1..5a273294e87cf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationScheduler.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationScheduler.kt @@ -31,8 +31,8 @@ import com.android.systemui.Dumpable import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dump.DumpManager -import com.android.systemui.statusbar.phone.StatusBarWindowController import com.android.systemui.statusbar.policy.CallbackController +import com.android.systemui.statusbar.window.StatusBarWindowController import com.android.systemui.util.Assert import com.android.systemui.util.concurrency.DelayableExecutor import com.android.systemui.util.time.SystemClock diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/gesture/SwipeStatusBarAwayGestureHandler.kt b/packages/SystemUI/src/com/android/systemui/statusbar/gesture/SwipeStatusBarAwayGestureHandler.kt index 80577ee243171..7cdf69d1ecbf4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/gesture/SwipeStatusBarAwayGestureHandler.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/gesture/SwipeStatusBarAwayGestureHandler.kt @@ -26,7 +26,7 @@ import android.view.MotionEvent.* import com.android.systemui.dagger.SysUISingleton import com.android.systemui.shared.system.InputChannelCompat import com.android.systemui.shared.system.InputMonitorCompat -import com.android.systemui.statusbar.phone.StatusBarWindowController +import com.android.systemui.statusbar.window.StatusBarWindowController import javax.inject.Inject /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java index 03f3b0cab65c0..03786b9b58ee5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java @@ -47,6 +47,7 @@ import com.android.systemui.R; import com.android.systemui.animation.Interpolators; import com.android.systemui.battery.BatteryMeterView; import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver; +import com.android.systemui.statusbar.window.StatusBarWindowView; import java.io.FileDescriptor; import java.io.PrintWriter; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java index fbe59a2743b32..e66ad6144072f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java @@ -39,6 +39,7 @@ import com.android.systemui.statusbar.notification.PropertyAnimator; import com.android.systemui.statusbar.notification.collection.ListEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.stack.AnimationProperties; +import com.android.systemui.statusbar.window.StatusBarWindowController; import com.android.wm.shell.bubbles.Bubbles; import java.util.ArrayList; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java index 09bcb69790f48..0b3e040bd321b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java @@ -56,6 +56,7 @@ import com.android.systemui.statusbar.notification.stack.NotificationStackScroll import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController; import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.statusbar.window.StatusBarWindowController; import com.android.systemui.tuner.TunerService; import java.io.FileDescriptor; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java index 883313bdc096b..290e86b64da9c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java @@ -40,6 +40,7 @@ import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver; +import com.android.systemui.statusbar.window.StatusBarWindowView; import com.android.systemui.util.leak.RotationUtils; import java.util.List; 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 4798d18655945..2472e7e4247b3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -230,6 +230,8 @@ import com.android.systemui.statusbar.policy.ExtensionController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.UserInfoControllerImpl; import com.android.systemui.statusbar.policy.UserSwitcherController; +import com.android.systemui.statusbar.window.StatusBarWindowController; +import com.android.systemui.statusbar.window.StatusBarWindowView; import com.android.systemui.tuner.TunerService; import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation; import com.android.systemui.unfold.UnfoldTransitionWallpaperController; @@ -473,7 +475,7 @@ public class StatusBar extends SystemUI implements private AuthRippleController mAuthRippleController; private int mStatusBarWindowState = WINDOW_STATE_SHOWING; protected NotificationShadeWindowController mNotificationShadeWindowController; - protected StatusBarWindowController mStatusBarWindowController; + private final StatusBarWindowController mStatusBarWindowController; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; @VisibleForTesting DozeServiceHost mDozeServiceHost; @@ -710,6 +712,7 @@ public class StatusBar extends SystemUI implements NotificationsController notificationsController, LightBarController lightBarController, AutoHideController autoHideController, + StatusBarWindowController statusBarWindowController, KeyguardUpdateMonitor keyguardUpdateMonitor, PulseExpansionHandler pulseExpansionHandler, NotificationWakeUpCoordinator notificationWakeUpCoordinator, @@ -812,6 +815,7 @@ public class StatusBar extends SystemUI implements mNotificationsController = notificationsController; mLightBarController = lightBarController; mAutoHideController = autoHideController; + mStatusBarWindowController = statusBarWindowController; mKeyguardUpdateMonitor = keyguardUpdateMonitor; mPulseExpansionHandler = pulseExpansionHandler; mWakeUpCoordinator = notificationWakeUpCoordinator; @@ -1612,7 +1616,6 @@ public class StatusBar extends SystemUI implements .getNotificationShadeWindowViewController(); mNotificationShadeWindowController.setNotificationShadeView(mNotificationShadeWindowView); mNotificationShadeWindowViewController.setupExpandedStatusBar(); - mStatusBarWindowController = statusBarComponent.getStatusBarWindowController(); mNotificationPanelViewController = statusBarComponent.getNotificationPanelViewController(); statusBarComponent.getLockIconViewController().init(); mStackScrollerController = statusBarComponent.getNotificationStackScrollLayoutController(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeadsUpChangeListener.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeadsUpChangeListener.java index ca877af150dac..6eeae7f298396 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeadsUpChangeListener.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeadsUpChangeListener.java @@ -24,6 +24,7 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.init.NotificationsController; import com.android.systemui.statusbar.phone.dagger.StatusBarComponent; import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener; +import com.android.systemui.statusbar.window.StatusBarWindowController; import javax.inject.Inject; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarComponent.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarComponent.java index 418f5884ef62e..e06605eac46f3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarComponent.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarComponent.java @@ -29,7 +29,6 @@ import com.android.systemui.statusbar.phone.SplitShadeHeaderController; import com.android.systemui.statusbar.phone.StatusBarCommandQueueCallbacks; import com.android.systemui.statusbar.phone.StatusBarDemoMode; import com.android.systemui.statusbar.phone.StatusBarHeadsUpChangeListener; -import com.android.systemui.statusbar.phone.StatusBarWindowController; import java.lang.annotation.Documented; import java.lang.annotation.Retention; @@ -81,12 +80,6 @@ public interface StatusBarComponent { @StatusBarScope NotificationShadeWindowViewController getNotificationShadeWindowViewController(); - /** - * Creates a StatusBarWindowViewController. - */ - @StatusBarScope - StatusBarWindowController getStatusBarWindowController(); - /** * Creates a NotificationPanelViewController. */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java index adff2fd434250..c6b2aba57992e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java @@ -109,6 +109,7 @@ import com.android.systemui.statusbar.policy.ExtensionController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.UserInfoControllerImpl; import com.android.systemui.statusbar.policy.UserSwitcherController; +import com.android.systemui.statusbar.window.StatusBarWindowController; import com.android.systemui.tuner.TunerService; import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation; import com.android.systemui.unfold.UnfoldTransitionWallpaperController; @@ -147,6 +148,7 @@ public interface StatusBarPhoneModule { NotificationsController notificationsController, LightBarController lightBarController, AutoHideController autoHideController, + StatusBarWindowController statusBarWindowController, KeyguardUpdateMonitor keyguardUpdateMonitor, PulseExpansionHandler pulseExpansionHandler, NotificationWakeUpCoordinator notificationWakeUpCoordinator, @@ -251,6 +253,7 @@ public interface StatusBarPhoneModule { notificationsController, lightBarController, autoHideController, + statusBarWindowController, keyguardUpdateMonitor, pulseExpansionHandler, notificationWakeUpCoordinator, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt index 31cc823c54adb..12258136c011f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt @@ -39,8 +39,8 @@ import com.android.systemui.statusbar.gesture.SwipeStatusBarAwayGestureHandler import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener -import com.android.systemui.statusbar.phone.StatusBarWindowController import com.android.systemui.statusbar.policy.CallbackController +import com.android.systemui.statusbar.window.StatusBarWindowController import com.android.systemui.util.time.SystemClock import java.io.FileDescriptor import java.io.PrintWriter diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java b/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowController.java similarity index 96% rename from packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java rename to packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowController.java index f8895d338e136..85a6cd224b5fa 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.systemui.statusbar.phone; +package com.android.systemui.statusbar.window; import static android.app.WindowConfiguration.ROTATION_UNDEFINED; import static android.view.ViewRootImpl.INSETS_LAYOUT_GENERALIZATION; @@ -36,7 +36,6 @@ import android.os.RemoteException; import android.util.Log; import android.view.Gravity; import android.view.IWindowManager; -import android.view.LayoutInflater; import android.view.Surface; import android.view.View; import android.view.ViewGroup; @@ -49,6 +48,7 @@ import com.android.systemui.animation.DelegateLaunchAnimatorController; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.fragments.FragmentHostManager; +import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider; import java.util.Optional; @@ -80,6 +80,7 @@ public class StatusBarWindowController { @Inject public StatusBarWindowController( Context context, + @StatusBarWindowModule.InternalWindowView StatusBarWindowView statusBarWindowView, WindowManager windowManager, IWindowManager iWindowManager, StatusBarContentInsetsProvider contentInsetsProvider, @@ -88,7 +89,7 @@ public class StatusBarWindowController { mWindowManager = windowManager; mIWindowManager = iWindowManager; mContentInsetsProvider = contentInsetsProvider; - mStatusBarWindowView = createWindowView(mContext); + mStatusBarWindowView = statusBarWindowView; mLaunchAnimationContainer = mStatusBarWindowView.findViewById( R.id.status_bar_launch_animation_container); mLpChanged = new WindowManager.LayoutParams(); @@ -314,14 +315,4 @@ public class StatusBarWindowController { mLpChanged.privateFlags &= ~PRIVATE_FLAG_FORCE_SHOW_STATUS_BAR; } } - - private ViewGroup createWindowView(Context context) { - ViewGroup view = (ViewGroup) LayoutInflater.from(context).inflate( - R.layout.super_status_bar, /* root= */ null); - if (view == null) { - throw new IllegalStateException( - "R.layout.super_status_bar could not be properly inflated"); - } - return view; - } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowModule.kt new file mode 100644 index 0000000000000..874217a67613c --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowModule.kt @@ -0,0 +1,47 @@ +package com.android.systemui.statusbar.window + +import android.view.LayoutInflater +import com.android.systemui.R +import com.android.systemui.dagger.SysUISingleton +import dagger.Module +import dagger.Provides +import javax.inject.Qualifier + +/** Module providing dependencies related to the status bar window. */ +@Module +abstract class StatusBarWindowModule { + /** + * Provides a [StatusBarWindowView]. + * + * Only [StatusBarWindowController] should inject the view. + */ + @Module + companion object { + @JvmStatic + @Provides + @SysUISingleton + @InternalWindowView + fun providesStatusBarWindowView(layoutInflater: LayoutInflater): StatusBarWindowView { + return layoutInflater.inflate( + R.layout.super_status_bar, + /* root= */null + ) as StatusBarWindowView? + ?: throw IllegalStateException( + "R.layout.super_status_bar could not be properly inflated" + ) + } + } + + /** + * We want [StatusBarWindowView] to be provided to [StatusBarWindowController]'s constructor via + * dagger so that we can provide a fake window view when testing the controller. However, we wan + * want *only* the controller to be able to inject the window view. + * + * This protected qualifier annotation achieves this. [StatusBarWindowView] can only be injected + * if it's annotated with [InternalWindowView], and only classes inside this [statusbar.window] + * package can access the annotation. + */ + @Retention(AnnotationRetention.BINARY) + @Qualifier + protected annotation class InternalWindowView +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java b/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowView.java similarity index 98% rename from packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java rename to packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowView.java index 8465889876b42..8b11e4c1b3523 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowView.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.systemui.statusbar.phone; +package com.android.systemui.statusbar.window; import static android.view.MotionEvent.ACTION_DOWN; import static android.view.MotionEvent.ACTION_MOVE; @@ -47,7 +47,7 @@ import com.android.systemui.util.leak.RotationUtils; public class StatusBarWindowView extends FrameLayout { public static final String TAG = "PhoneStatusBarWindowView"; - public static final boolean DEBUG = StatusBar.DEBUG; + public static final boolean DEBUG = false; private int mLeftInset = 0; private int mRightInset = 0; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconAreaControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconAreaControllerTest.java index 25aa93aa37c26..bd4efdb32573f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconAreaControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconAreaControllerTest.java @@ -33,6 +33,7 @@ import com.android.systemui.statusbar.NotificationListener; import com.android.systemui.statusbar.NotificationMediaManager; import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator; import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection; +import com.android.systemui.statusbar.window.StatusBarWindowController; import com.android.wm.shell.bubbles.Bubbles; import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewTest.java index 4bf8821d1185b..1adba6e64c6da 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewTest.java @@ -54,6 +54,7 @@ import com.android.systemui.statusbar.notification.stack.NotificationStackScroll import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController; import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.statusbar.window.StatusBarWindowController; import com.android.systemui.tuner.TunerService; import org.junit.Before; 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 9fe142337bbe0..e2d8b00b23b1d 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 @@ -142,6 +142,7 @@ import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.UserInfoControllerImpl; import com.android.systemui.statusbar.policy.UserSwitcherController; +import com.android.systemui.statusbar.window.StatusBarWindowController; import com.android.systemui.tuner.TunerService; import com.android.systemui.unfold.UnfoldLightRevealOverlayAnimation; import com.android.systemui.unfold.UnfoldTransitionWallpaperController; @@ -225,6 +226,7 @@ public class StatusBarTest extends SysuiTestCase { @Mock private KeyguardBypassController mKeyguardBypassController; @Mock private DynamicPrivacyController mDynamicPrivacyController; @Mock private AutoHideController mAutoHideController; + @Mock private StatusBarWindowController mStatusBarWindowController; @Mock private NotificationViewHierarchyManager mNotificationViewHierarchyManager; @Mock private UserSwitcherController mUserSwitcherController; @Mock private NetworkController mNetworkController; @@ -368,6 +370,7 @@ public class StatusBarTest extends SysuiTestCase { mNotificationsController, mLightBarController, mAutoHideController, + mStatusBarWindowController, mKeyguardUpdateMonitor, mPulseExpansionHandler, mNotificationWakeUpCoordinator, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt index 3d2ff47e3cdd2..b385b7d62cff8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallControllerTest.kt @@ -42,7 +42,7 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener -import com.android.systemui.statusbar.phone.StatusBarWindowController +import com.android.systemui.statusbar.window.StatusBarWindowController import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.mockito.any import com.android.systemui.util.time.FakeSystemClock