diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java index 55aad5d5d145d..d333341ccd623 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java @@ -18,6 +18,7 @@ package com.android.systemui.dagger; import android.app.INotificationManager; import android.content.Context; +import android.view.LayoutInflater; import androidx.annotation.Nullable; @@ -26,6 +27,7 @@ import com.android.keyguard.clock.ClockModule; import com.android.keyguard.dagger.KeyguardBouncerComponent; import com.android.systemui.BootCompleteCache; import com.android.systemui.BootCompleteCacheImpl; +import com.android.systemui.R; import com.android.systemui.SystemUIFactory; import com.android.systemui.appops.dagger.AppOpsModule; import com.android.systemui.assist.AssistModule; @@ -61,6 +63,7 @@ import com.android.systemui.statusbar.notification.row.dagger.NotificationRowCom import com.android.systemui.statusbar.notification.row.dagger.NotificationShelfComponent; import com.android.systemui.statusbar.phone.ShadeController; import com.android.systemui.statusbar.phone.StatusBar; +import com.android.systemui.statusbar.phone.StatusBarWindowView; import com.android.systemui.statusbar.phone.dagger.StatusBarComponent; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.HeadsUpManager; @@ -69,6 +72,7 @@ import com.android.systemui.statusbar.policy.dagger.SmartRepliesInflationModule; import com.android.systemui.statusbar.policy.dagger.StatusBarPolicyModule; import com.android.systemui.tuner.dagger.TunerModule; import com.android.systemui.user.UserModule; +import com.android.systemui.util.InjectionInflationController; import com.android.systemui.util.concurrency.SysUIConcurrencyModule; import com.android.systemui.util.dagger.UtilModule; import com.android.systemui.util.sensors.SensorModule; @@ -198,4 +202,19 @@ public abstract class SystemUIModule { groupManager, entryManager, notifPipeline, sysUiState, featureFlags, dumpManager, sysuiMainExecutor)); } + + @Provides + @SysUISingleton + static StatusBarWindowView providesStatusBarWindowView(Context context, + InjectionInflationController injectionInflationController) { + StatusBarWindowView view = + (StatusBarWindowView) injectionInflationController.injectable( + 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/SuperStatusBarViewFactory.java b/packages/SystemUI/src/com/android/systemui/statusbar/SuperStatusBarViewFactory.java deleted file mode 100644 index b8ff298b532c0..0000000000000 --- a/packages/SystemUI/src/com/android/systemui/statusbar/SuperStatusBarViewFactory.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2019 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; - -import android.content.Context; -import android.view.LayoutInflater; - -import com.android.systemui.R; -import com.android.systemui.dagger.SysUISingleton; -import com.android.systemui.statusbar.phone.StatusBarWindowView; -import com.android.systemui.util.InjectionInflationController; - -import javax.inject.Inject; - -/** - * Creates a single instance of super_status_bar and super_notification_shade that can be shared - * across various system ui objects. - */ -@SysUISingleton -public class SuperStatusBarViewFactory { - - private final Context mContext; - private final InjectionInflationController mInjectionInflationController; - - private StatusBarWindowView mStatusBarWindowView; - - @Inject - public SuperStatusBarViewFactory(Context context, - InjectionInflationController injectionInflationController) { - mContext = context; - mInjectionInflationController = injectionInflationController; - } - - /** - * Gets the inflated {@link StatusBarWindowView} from {@link R.layout#super_status_bar}. - * Returns a cached instance, if it has already been inflated. - */ - public StatusBarWindowView getStatusBarWindowView() { - if (mStatusBarWindowView != null) { - return mStatusBarWindowView; - } - - mStatusBarWindowView = - (StatusBarWindowView) mInjectionInflationController.injectable( - LayoutInflater.from(mContext)).inflate(R.layout.super_status_bar, - /* root= */ null); - if (mStatusBarWindowView == null) { - throw new IllegalStateException( - "R.layout.super_status_bar could not be properly inflated"); - } - return mStatusBarWindowView; - } -} 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 7291b5a8be3b7..589446f3b075e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt @@ -24,13 +24,10 @@ import android.view.View import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.ViewGroup.LayoutParams.WRAP_CONTENT import android.widget.FrameLayout - import com.android.systemui.R -import com.android.systemui.statusbar.SuperStatusBarViewFactory import com.android.systemui.statusbar.phone.StatusBarLocationPublisher import com.android.systemui.statusbar.phone.StatusBarWindowController import com.android.systemui.statusbar.phone.StatusBarWindowView - import javax.inject.Inject /** @@ -38,7 +35,7 @@ import javax.inject.Inject */ class SystemEventChipAnimationController @Inject constructor( private val context: Context, - private val statusBarViewFactory: SuperStatusBarViewFactory, + private val statusBarWindowView: StatusBarWindowView, private val statusBarWindowController: StatusBarWindowController, private val locationPublisher: StatusBarLocationPublisher ) : SystemStatusChipAnimationCallback { @@ -51,7 +48,6 @@ class SystemEventChipAnimationController @Inject constructor( private lateinit var animationWindowView: FrameLayout private lateinit var animationDotView: View - private lateinit var statusBarWindowView: StatusBarWindowView private var currentAnimatedView: View? = null // TODO: move to dagger @@ -125,7 +121,6 @@ class SystemEventChipAnimationController @Inject constructor( private fun init() { initialized = true - statusBarWindowView = statusBarViewFactory.statusBarWindowView animationWindowView = LayoutInflater.from(context) .inflate(R.layout.system_event_animation_window, null) as FrameLayout animationDotView = animationWindowView.findViewById(R.id.dot_view) 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 b5d9bd67bd2d9..8b9dd1d5e2077 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java @@ -47,7 +47,6 @@ import com.android.systemui.statusbar.NotificationLockscreenUserManager; import com.android.systemui.statusbar.NotificationShadeDepthController; import com.android.systemui.statusbar.NotificationShadeWindowController; import com.android.systemui.statusbar.PulseExpansionHandler; -import com.android.systemui.statusbar.SuperStatusBarViewFactory; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.notification.DynamicPrivacyController; import com.android.systemui.statusbar.notification.NotificationEntryManager; @@ -106,7 +105,7 @@ public class NotificationShadeWindowViewController { private boolean mExpandingBelowNotch; private final DockManager mDockManager; private final NotificationPanelViewController mNotificationPanelViewController; - private final SuperStatusBarViewFactory mStatusBarViewFactory; + private final StatusBarWindowView mStatusBarWindowView; // Used for determining view / touch intersection private int[] mTempLocation = new int[2]; @@ -136,7 +135,7 @@ public class NotificationShadeWindowViewController { NotificationShadeDepthController depthController, NotificationShadeWindowView notificationShadeWindowView, NotificationPanelViewController notificationPanelViewController, - SuperStatusBarViewFactory statusBarViewFactory, + StatusBarWindowView statusBarWindowView, NotificationStackScrollLayoutController notificationStackScrollLayoutController, StatusBarKeyguardViewManager statusBarKeyguardViewManager) { mInjectionInflationController = injectionInflationController; @@ -160,7 +159,7 @@ public class NotificationShadeWindowViewController { mDockManager = dockManager; mNotificationPanelViewController = notificationPanelViewController; mDepthController = depthController; - mStatusBarViewFactory = statusBarViewFactory; + mStatusBarWindowView = statusBarWindowView; mNotificationStackScrollLayoutController = notificationStackScrollLayoutController; mStatusBarKeyguardViewManager = statusBarKeyguardViewManager; @@ -465,11 +464,10 @@ public class NotificationShadeWindowViewController { public void setStatusBarView(PhoneStatusBarView statusBarView) { mStatusBarView = statusBarView; - if (statusBarView != null && mStatusBarViewFactory != null) { + if (statusBarView != null) { mBarTransitions = new PhoneStatusBarTransitions( statusBarView, - mStatusBarViewFactory.getStatusBarWindowView() - .findViewById(R.id.status_bar_container)); + mStatusBarWindowView.findViewById(R.id.status_bar_container)); } } 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 154b04782a66a..84665ab23a2e3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -194,7 +194,6 @@ import com.android.systemui.statusbar.OperatorNameViewController; import com.android.systemui.statusbar.PowerButtonReveal; import com.android.systemui.statusbar.PulseExpansionHandler; import com.android.systemui.statusbar.StatusBarState; -import com.android.systemui.statusbar.SuperStatusBarViewFactory; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; import com.android.systemui.statusbar.notification.DynamicPrivacyController; @@ -458,7 +457,6 @@ public class StatusBar extends SystemUI implements private final Point mCurrentDisplaySize = new Point(); protected NotificationShadeWindowView mNotificationShadeWindowView; - protected StatusBarWindowView mPhoneStatusBarWindow; protected PhoneStatusBarView mStatusBarView; private PhoneStatusBarViewController mPhoneStatusBarViewController; private AuthRippleController mAuthRippleController; @@ -496,7 +494,7 @@ public class StatusBar extends SystemUI implements private final StatusBarNotificationActivityStarter.Builder mStatusBarNotificationActivityStarterBuilder; private final ShadeController mShadeController; - private final SuperStatusBarViewFactory mSuperStatusBarViewFactory; + private final StatusBarWindowView mStatusBarWindowView; private final LightsOutNotifController mLightsOutNotifController; private final InitController mInitController; @@ -750,7 +748,7 @@ public class StatusBar extends SystemUI implements StatusBarNotificationActivityStarter.Builder statusBarNotificationActivityStarterBuilder, ShadeController shadeController, - SuperStatusBarViewFactory superStatusBarViewFactory, + StatusBarWindowView statusBarWindowView, StatusBarKeyguardViewManager statusBarKeyguardViewManager, ViewMediatorCallback viewMediatorCallback, InitController initController, @@ -845,7 +843,7 @@ public class StatusBar extends SystemUI implements mSplitScreenOptional = splitScreenOptional; mStatusBarNotificationActivityStarterBuilder = statusBarNotificationActivityStarterBuilder; mShadeController = shadeController; - mSuperStatusBarViewFactory = superStatusBarViewFactory; + mStatusBarWindowView = statusBarWindowView; mLightsOutNotifController = lightsOutNotifController; mStatusBarKeyguardViewManager = statusBarKeyguardViewManager; mKeyguardViewMediatorCallback = viewMediatorCallback; @@ -1119,7 +1117,7 @@ public class StatusBar extends SystemUI implements // Allow plugins to reference DarkIconDispatcher and StatusBarStateController mPluginDependencyProvider.allowPluginDependency(DarkIconDispatcher.class); mPluginDependencyProvider.allowPluginDependency(StatusBarStateController.class); - FragmentHostManager.get(mPhoneStatusBarWindow) + FragmentHostManager.get(mStatusBarWindowView) .addTagListener(CollapsedStatusBarFragment.TAG, (tag, fragment) -> { CollapsedStatusBarFragment statusBarFragment = (CollapsedStatusBarFragment) fragment; @@ -1530,7 +1528,6 @@ public class StatusBar extends SystemUI implements mNotificationShadeWindowController.setNotificationShadeView(mNotificationShadeWindowView); mNotificationShadeWindowViewController.setupExpandedStatusBar(); mStatusBarWindowController = statusBarComponent.getStatusBarWindowController(); - mPhoneStatusBarWindow = mSuperStatusBarViewFactory.getStatusBarWindowView(); mNotificationPanelViewController = statusBarComponent.getNotificationPanelViewController(); statusBarComponent.getLockIconViewController().init(); mStackScrollerController = statusBarComponent.getNotificationStackScrollLayoutController(); @@ -1611,7 +1608,7 @@ public class StatusBar extends SystemUI implements } public StatusBarWindowView getStatusBarWindow() { - return mPhoneStatusBarWindow; + return mStatusBarWindowView; } public NotificationShadeWindowViewController getNotificationShadeWindowViewController() { @@ -2564,7 +2561,7 @@ public class StatusBar extends SystemUI implements private ActivityLaunchAnimator.Controller wrapAnimationController( ActivityLaunchAnimator.Controller animationController, boolean dismissShade) { View rootView = animationController.getLaunchContainer().getRootView(); - if (rootView == mSuperStatusBarViewFactory.getStatusBarWindowView()) { + if (rootView == mStatusBarWindowView) { // We are animating a view in the status bar. We have to make sure that the status bar // window matches the full screen during the animation and that we are expanding the // view below the other status bar text. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java index 3d3b58ae0c1f6..aec27d0ac2010 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java @@ -43,7 +43,6 @@ import android.view.WindowManager; import com.android.systemui.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; -import com.android.systemui.statusbar.SuperStatusBarViewFactory; import javax.inject.Inject; @@ -58,14 +57,13 @@ public class StatusBarWindowController { private final Context mContext; private final WindowManager mWindowManager; private final IWindowManager mIWindowManager; - private final SuperStatusBarViewFactory mSuperStatusBarViewFactory; private final StatusBarContentInsetsProvider mContentInsetsProvider; private final Resources mResources; private int mBarHeight = -1; private final State mCurrentState = new State(); - private ViewGroup mStatusBarView; - private ViewGroup mLaunchAnimationContainer; + private final ViewGroup mStatusBarView; + private final ViewGroup mLaunchAnimationContainer; private WindowManager.LayoutParams mLp; private final WindowManager.LayoutParams mLpChanged; @@ -74,15 +72,14 @@ public class StatusBarWindowController { Context context, WindowManager windowManager, IWindowManager iWindowManager, - SuperStatusBarViewFactory superStatusBarViewFactory, + StatusBarWindowView statusBarWindowView, StatusBarContentInsetsProvider contentInsetsProvider, @Main Resources resources) { mContext = context; mWindowManager = windowManager; mIWindowManager = iWindowManager; mContentInsetsProvider = contentInsetsProvider; - mSuperStatusBarViewFactory = superStatusBarViewFactory; - mStatusBarView = mSuperStatusBarViewFactory.getStatusBarWindowView(); + mStatusBarView = statusBarWindowView; mLaunchAnimationContainer = mStatusBarView.findViewById( R.id.status_bar_launch_animation_container); mLpChanged = new WindowManager.LayoutParams(); 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 e11ef0ac7ef69..a7b57b966c229 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 @@ -58,7 +58,6 @@ import com.android.systemui.statusbar.NotificationShadeWindowController; import com.android.systemui.statusbar.NotificationViewHierarchyManager; import com.android.systemui.statusbar.OperatorNameViewController; import com.android.systemui.statusbar.PulseExpansionHandler; -import com.android.systemui.statusbar.SuperStatusBarViewFactory; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; import com.android.systemui.statusbar.notification.DynamicPrivacyController; @@ -92,6 +91,7 @@ import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarLocationPublisher; import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarter; import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager; +import com.android.systemui.statusbar.phone.StatusBarWindowView; import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; import com.android.systemui.statusbar.policy.BatteryController; @@ -193,7 +193,7 @@ public interface StatusBarPhoneModule { StatusBarNotificationActivityStarter.Builder statusBarNotificationActivityStarterBuilder, ShadeController shadeController, - SuperStatusBarViewFactory superStatusBarViewFactory, + StatusBarWindowView statusBarWindowView, StatusBarKeyguardViewManager statusBarKeyguardViewManager, ViewMediatorCallback viewMediatorCallback, InitController initController, @@ -286,7 +286,7 @@ public interface StatusBarPhoneModule { lightsOutNotifController, statusBarNotificationActivityStarterBuilder, shadeController, - superStatusBarViewFactory, + statusBarWindowView, statusBarKeyguardViewManager, viewMediatorCallback, initController, 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 6c1a3c90d83d4..9a7a55921c7dc 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 @@ -41,7 +41,6 @@ import com.android.systemui.statusbar.NotificationLockscreenUserManager; import com.android.systemui.statusbar.NotificationShadeDepthController; import com.android.systemui.statusbar.NotificationShadeWindowController; import com.android.systemui.statusbar.PulseExpansionHandler; -import com.android.systemui.statusbar.SuperStatusBarViewFactory; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.notification.DynamicPrivacyController; import com.android.systemui.statusbar.notification.NotificationEntryManager; @@ -85,7 +84,7 @@ public class NotificationShadeWindowViewTest extends SysuiTestCase { @Mock private NotificationPanelViewController mNotificationPanelViewController; @Mock private NotificationStackScrollLayout mNotificationStackScrollLayout; @Mock private NotificationShadeDepthController mNotificationShadeDepthController; - @Mock private SuperStatusBarViewFactory mStatusBarViewFactory; + @Mock private StatusBarWindowView mStatusBarWindowView; @Mock private NotificationShadeWindowController mNotificationShadeWindowController; @Mock private NotificationStackScrollLayoutController mNotificationStackScrollLayoutController; @Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; @@ -129,7 +128,7 @@ public class NotificationShadeWindowViewTest extends SysuiTestCase { mNotificationShadeDepthController, mView, mNotificationPanelViewController, - mStatusBarViewFactory, + mStatusBarWindowView, mNotificationStackScrollLayoutController, mStatusBarKeyguardViewManager); mController.setupExpandedStatusBar(); 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 1adaee2a9f8fb..a1c158ebdcc82 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 @@ -109,7 +109,6 @@ import com.android.systemui.statusbar.OperatorNameViewController; import com.android.systemui.statusbar.PulseExpansionHandler; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.StatusBarStateControllerImpl; -import com.android.systemui.statusbar.SuperStatusBarViewFactory; import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; import com.android.systemui.statusbar.notification.DynamicPrivacyController; import com.android.systemui.statusbar.notification.NotificationEntryManager; @@ -237,7 +236,7 @@ public class StatusBarTest extends SysuiTestCase { @Mock private StatusBarComponent mStatusBarComponent; @Mock private PluginManager mPluginManager; @Mock private LegacySplitScreen mLegacySplitScreen; - @Mock private SuperStatusBarViewFactory mSuperStatusBarViewFactory; + @Mock private StatusBarWindowView mStatusBarWindowView; @Mock private LightsOutNotifController mLightsOutNotifController; @Mock private ViewMediatorCallback mViewMediatorCallback; @Mock private StatusBarTouchableRegionManager mStatusBarTouchableRegionManager; @@ -409,7 +408,7 @@ public class StatusBarTest extends SysuiTestCase { mLightsOutNotifController, mStatusBarNotificationActivityStarterBuilder, mShadeController, - mSuperStatusBarViewFactory, + mStatusBarWindowView, mStatusBarKeyguardViewManager, mViewMediatorCallback, mInitController,