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 110b32b578789..fc0b317d04ff6 100644 --- a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java +++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java @@ -92,6 +92,7 @@ import com.android.systemui.statusbar.NotificationRemoteInputManager; import com.android.systemui.statusbar.NotificationViewHierarchyManager; 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.VibratorHelper; import com.android.systemui.statusbar.notification.BypassHeadsUpNotifier; @@ -131,7 +132,6 @@ import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler; import com.android.systemui.statusbar.policy.RemoteInputUriController; import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.ZenModeController; -import com.android.systemui.util.InjectionInflationController; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -244,7 +244,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt KeyguardUpdateMonitor keyguardUpdateMonitor, StatusBarIconController statusBarIconController, DozeLog dozeLog, - InjectionInflationController injectionInflationController, PulseExpansionHandler pulseExpansionHandler, NotificationWakeUpCoordinator notificationWakeUpCoordinator, KeyguardBypassController keyguardBypassController, @@ -303,6 +302,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt CommandQueue commandQueue, PluginManager pluginManager, RemoteInputUriController remoteInputUriController, + SuperStatusBarViewFactory superStatusBarViewFactory, /* Car Settings injected components. */ CarNavigationBarController carNavigationBarController) { super( @@ -313,7 +313,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt keyguardUpdateMonitor, statusBarIconController, dozeLog, - injectionInflationController, pulseExpansionHandler, notificationWakeUpCoordinator, keyguardBypassController, @@ -372,7 +371,8 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt dozeScrimController, commandQueue, pluginManager, - remoteInputUriController); + remoteInputUriController, + superStatusBarViewFactory); mScrimController = scrimController; mCarNavigationBarController = carNavigationBarController; } 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 9b49ff49864e0..b19fae891a580 100644 --- a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBarModule.java +++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBarModule.java @@ -48,6 +48,7 @@ import com.android.systemui.statusbar.NotificationRemoteInputManager; import com.android.systemui.statusbar.NotificationViewHierarchyManager; import com.android.systemui.statusbar.PulseExpansionHandler; import com.android.systemui.statusbar.StatusBarDependenciesModule; +import com.android.systemui.statusbar.SuperStatusBarViewFactory; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.VibratorHelper; import com.android.systemui.statusbar.notification.BypassHeadsUpNotifier; @@ -85,7 +86,6 @@ import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler; import com.android.systemui.statusbar.policy.RemoteInputUriController; import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.ZenModeController; -import com.android.systemui.util.InjectionInflationController; import javax.inject.Named; import javax.inject.Singleton; @@ -112,7 +112,6 @@ public class CarStatusBarModule { KeyguardUpdateMonitor keyguardUpdateMonitor, StatusBarIconController statusBarIconController, DozeLog dozeLog, - InjectionInflationController injectionInflationController, PulseExpansionHandler pulseExpansionHandler, NotificationWakeUpCoordinator notificationWakeUpCoordinator, KeyguardBypassController keyguardBypassController, @@ -171,6 +170,7 @@ public class CarStatusBarModule { CommandQueue commandQueue, PluginManager pluginManager, RemoteInputUriController remoteInputUriController, + SuperStatusBarViewFactory superStatusBarViewFactory, CarNavigationBarController carNavigationBarController) { return new CarStatusBar( context, @@ -180,7 +180,6 @@ public class CarStatusBarModule { keyguardUpdateMonitor, statusBarIconController, dozeLog, - injectionInflationController, pulseExpansionHandler, notificationWakeUpCoordinator, keyguardBypassController, @@ -239,6 +238,7 @@ public class CarStatusBarModule { commandQueue, pluginManager, remoteInputUriController, + superStatusBarViewFactory, carNavigationBarController); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SuperStatusBarViewFactory.java b/packages/SystemUI/src/com/android/systemui/statusbar/SuperStatusBarViewFactory.java new file mode 100644 index 0000000000000..bc7c22d65a446 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/SuperStatusBarViewFactory.java @@ -0,0 +1,92 @@ +/* + * 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 android.view.ViewGroup; + +import com.android.systemui.R; +import com.android.systemui.statusbar.phone.StatusBarWindowView; +import com.android.systemui.util.InjectionInflationController; + +import javax.inject.Inject; +import javax.inject.Singleton; + +/** + * Creates a single instance of super_status_bar that can be shared across various system ui + * objects. + */ +@Singleton +public class SuperStatusBarViewFactory { + + private final Context mContext; + private final InjectionInflationController mInjectionInflationController; + + private StatusBarWindowView mStatusBarWindowView; + private NotificationShelf mNotificationShelf; + + @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; + } + + /** + * Gets the inflated {@link NotificationShelf} from + * {@link R.layout#status_bar_notification_shelf}. + * Returns a cached instance, if it has already been inflated. + * + * @param container the expected container to hold the {@link NotificationShelf}. The view + * isn't immediately attached, but the layout params of this view is used + * during inflation. + */ + public NotificationShelf getNotificationShelf(ViewGroup container) { + if (mNotificationShelf != null) { + return mNotificationShelf; + } + + mNotificationShelf = (NotificationShelf) mInjectionInflationController.injectable( + LayoutInflater.from(mContext)).inflate(R.layout.status_bar_notification_shelf, + container, /* attachToRoot= */ false); + if (mNotificationShelf == null) { + throw new IllegalStateException( + "R.layout.status_bar_notification_shelf could not be properly inflated"); + } + return mNotificationShelf; + } +} 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 09632ae5129ff..b0104d65a2782 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -75,7 +75,6 @@ import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Configuration; -import android.content.res.Resources; import android.graphics.Point; import android.graphics.PointF; import android.media.AudioAttributes; @@ -109,7 +108,6 @@ import android.view.Display; import android.view.IWindowManager; import android.view.InsetsState.InternalInsetType; import android.view.KeyEvent; -import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.RemoteAnimationAdapter; import android.view.ThreadedRenderer; @@ -201,6 +199,7 @@ import com.android.systemui.statusbar.NotificationViewHierarchyManager; import com.android.systemui.statusbar.PulseExpansionHandler; import com.android.systemui.statusbar.ScrimView; import com.android.systemui.statusbar.StatusBarState; +import com.android.systemui.statusbar.SuperStatusBarViewFactory; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.VibratorHelper; import com.android.systemui.statusbar.notification.ActivityLaunchAnimator; @@ -242,7 +241,6 @@ import com.android.systemui.statusbar.policy.UserInfoController; import com.android.systemui.statusbar.policy.UserInfoControllerImpl; import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.ZenModeController; -import com.android.systemui.util.InjectionInflationController; import com.android.systemui.volume.VolumeComponent; import java.io.FileDescriptor; @@ -363,8 +361,6 @@ public class StatusBar extends SystemUI implements DemoMode, @Nullable private final KeyguardLiftController mKeyguardLiftController; - private int mNaturalBarHeight = -1; - private final Point mCurrentDisplaySize = new Point(); protected StatusBarWindowViewController mStatusBarWindowViewController; @@ -383,7 +379,6 @@ public class StatusBar extends SystemUI implements DemoMode, private final FeatureFlags mFeatureFlags; private final StatusBarIconController mIconController; private final DozeLog mDozeLog; - private final InjectionInflationController mInjectionInflater; private final PulseExpansionHandler mPulseExpansionHandler; private final NotificationWakeUpCoordinator mWakeUpCoordinator; private final KeyguardBypassController mKeyguardBypassController; @@ -402,6 +397,7 @@ public class StatusBar extends SystemUI implements DemoMode, private final Lazy mBiometricUnlockControllerLazy; private final PluginManager mPluginManager; private final RemoteInputUriController mRemoteInputUriController; + private final SuperStatusBarViewFactory mSuperStatusBarViewFactory; // expanded notifications protected NotificationPanelView mNotificationPanel; // the sliding/resizing panel within the notification window @@ -646,7 +642,6 @@ public class StatusBar extends SystemUI implements DemoMode, KeyguardUpdateMonitor keyguardUpdateMonitor, StatusBarIconController statusBarIconController, DozeLog dozeLog, - InjectionInflationController injectionInflationController, PulseExpansionHandler pulseExpansionHandler, NotificationWakeUpCoordinator notificationWakeUpCoordinator, KeyguardBypassController keyguardBypassController, @@ -705,7 +700,8 @@ public class StatusBar extends SystemUI implements DemoMode, DozeScrimController dozeScrimController, CommandQueue commandQueue, PluginManager pluginManager, - RemoteInputUriController remoteInputUriController) { + RemoteInputUriController remoteInputUriController, + SuperStatusBarViewFactory superStatusBarViewFactory) { super(context); mFeatureFlags = featureFlags; mLightBarController = lightBarController; @@ -713,7 +709,6 @@ public class StatusBar extends SystemUI implements DemoMode, mKeyguardUpdateMonitor = keyguardUpdateMonitor; mIconController = statusBarIconController; mDozeLog = dozeLog; - mInjectionInflater = injectionInflationController; mPulseExpansionHandler = pulseExpansionHandler; mWakeUpCoordinator = notificationWakeUpCoordinator; mKeyguardBypassController = keyguardBypassController; @@ -773,6 +768,8 @@ public class StatusBar extends SystemUI implements DemoMode, mCommandQueue = commandQueue; mPluginManager = pluginManager; mRemoteInputUriController = remoteInputUriController; + mSuperStatusBarViewFactory = superStatusBarViewFactory; + mBubbleExpandListener = (isExpanding, key) -> { mEntryManager.updateNotifications("onBubbleExpandChanged"); @@ -1367,10 +1364,7 @@ public class StatusBar extends SystemUI implements DemoMode, } private void inflateShelf() { - mNotificationShelf = - (NotificationShelf) mInjectionInflater.injectable( - LayoutInflater.from(mContext)).inflate( - R.layout.status_bar_notification_shelf, mStackScroller, false); + mNotificationShelf = mSuperStatusBarViewFactory.getNotificationShelf(mStackScroller); mNotificationShelf.setOnClickListener(mGoToLockedShadeListener); } @@ -1428,10 +1422,8 @@ public class StatusBar extends SystemUI implements DemoMode, } protected void inflateStatusBarWindow(Context context) { - mStatusBarWindow = (StatusBarWindowView) mInjectionInflater.injectable( - LayoutInflater.from(context)).inflate(R.layout.super_status_bar, null); + mStatusBarWindow = mSuperStatusBarViewFactory.getStatusBarWindowView(); mStatusBarWindowViewController = mStatusBarWindowViewControllerBuilder - .setStatusBarWindowView(mStatusBarWindow) .setShadeController(this) .build(); } @@ -1469,12 +1461,7 @@ public class StatusBar extends SystemUI implements DemoMode, } public int getStatusBarHeight() { - if (mNaturalBarHeight < 0) { - final Resources res = mContext.getResources(); - mNaturalBarHeight = - res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_height); - } - return mNaturalBarHeight; + return mStatusBarWindowController.getStatusBarHeight(); } protected boolean toggleSplitScreenMode(int metricsDockAction, int metricsUndockAction) { @@ -2648,7 +2635,7 @@ public class StatusBar extends SystemUI implements DemoMode, public void createAndAddWindows(@Nullable RegisterStatusBarResult result) { makeStatusBarView(result); - mStatusBarWindowController.add(mStatusBarWindow, getStatusBarHeight()); + mStatusBarWindowController.attach(); } // called by makeStatusbar and also by PhoneStatusBarView @@ -2926,7 +2913,7 @@ public class StatusBar extends SystemUI implements DemoMode, mQSPanel.updateResources(); } - loadDimens(); + mStatusBarWindowController.refreshStatusBarHeight(); if (mStatusBarView != null) { mStatusBarView.updateResources(); @@ -2939,19 +2926,6 @@ public class StatusBar extends SystemUI implements DemoMode, } } - protected void loadDimens() { - final Resources res = mContext.getResources(); - - int oldBarHeight = mNaturalBarHeight; - mNaturalBarHeight = res.getDimensionPixelSize( - com.android.internal.R.dimen.status_bar_height); - if (mStatusBarWindowController != null && mNaturalBarHeight != oldBarHeight) { - mStatusBarWindowController.setBarHeight(mNaturalBarHeight); - } - - if (DEBUG) Log.v(TAG, "defineSlots"); - } - // Visibility reporting protected void handleVisibleToUserChanged(boolean visibleToUser) { 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 6b7c6b387b38c..67f6a0ca6b721 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarModule.java @@ -49,6 +49,7 @@ import com.android.systemui.statusbar.NotificationRemoteInputManager; import com.android.systemui.statusbar.NotificationViewHierarchyManager; import com.android.systemui.statusbar.PulseExpansionHandler; import com.android.systemui.statusbar.StatusBarDependenciesModule; +import com.android.systemui.statusbar.SuperStatusBarViewFactory; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.VibratorHelper; import com.android.systemui.statusbar.notification.BypassHeadsUpNotifier; @@ -71,7 +72,6 @@ import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler; import com.android.systemui.statusbar.policy.RemoteInputUriController; import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.ZenModeController; -import com.android.systemui.util.InjectionInflationController; import javax.inject.Named; import javax.inject.Singleton; @@ -98,7 +98,6 @@ public class StatusBarModule { KeyguardUpdateMonitor keyguardUpdateMonitor, StatusBarIconController statusBarIconController, DozeLog dozeLog, - InjectionInflationController injectionInflationController, PulseExpansionHandler pulseExpansionHandler, NotificationWakeUpCoordinator notificationWakeUpCoordinator, KeyguardBypassController keyguardBypassController, @@ -157,7 +156,8 @@ public class StatusBarModule { DozeScrimController dozeScrimController, CommandQueue commandQueue, PluginManager pluginManager, - RemoteInputUriController remoteInputUriController) { + RemoteInputUriController remoteInputUriController, + SuperStatusBarViewFactory superStatusBarViewFactory) { return new StatusBar( context, featureFlags, @@ -166,7 +166,6 @@ public class StatusBarModule { keyguardUpdateMonitor, statusBarIconController, dozeLog, - injectionInflationController, pulseExpansionHandler, notificationWakeUpCoordinator, keyguardBypassController, @@ -225,6 +224,7 @@ public class StatusBarModule { dozeScrimController, commandQueue, pluginManager, - remoteInputUriController); + remoteInputUriController, + superStatusBarViewFactory); } } 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 ca7a936d58f7f..2ecceba2116a0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java @@ -41,11 +41,13 @@ import android.view.WindowManager.LayoutParams; import com.android.systemui.Dumpable; import com.android.systemui.R; import com.android.systemui.colorextraction.SysuiColorExtractor; +import com.android.systemui.dagger.qualifiers.MainResources; import com.android.systemui.keyguard.KeyguardViewMediator; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener; import com.android.systemui.statusbar.RemoteInputController.Callback; import com.android.systemui.statusbar.StatusBarState; +import com.android.systemui.statusbar.SuperStatusBarViewFactory; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener; @@ -69,6 +71,7 @@ import javax.inject.Singleton; public class StatusBarWindowController implements Callback, Dumpable, ConfigurationListener { private static final String TAG = "StatusBarWindowController"; + private static final boolean DEBUG = false; private final Context mContext; private final WindowManager mWindowManager; @@ -83,7 +86,7 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat private LayoutParams mLp; private boolean mHasTopUi; private boolean mHasTopUiChanged; - private int mBarHeight; + private int mBarHeight = -1; private float mScreenBrightnessDoze; private final State mCurrentState = new State(); private OtherwisedCollapsedListener mListener; @@ -92,13 +95,17 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat mCallbacks = Lists.newArrayList(); private final SysuiColorExtractor mColorExtractor; + private final SuperStatusBarViewFactory mSuperStatusBarViewFactory; + private final Resources mResources; @Inject public StatusBarWindowController(Context context, WindowManager windowManager, IActivityManager activityManager, DozeParameters dozeParameters, StatusBarStateController statusBarStateController, ConfigurationController configurationController, - KeyguardBypassController keyguardBypassController, SysuiColorExtractor colorExtractor) { + KeyguardBypassController keyguardBypassController, SysuiColorExtractor colorExtractor, + SuperStatusBarViewFactory superStatusBarViewFactory, + @MainResources Resources resources) { mContext = context; mWindowManager = windowManager; mActivityManager = activityManager; @@ -108,6 +115,15 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat mLpChanged = new LayoutParams(); mKeyguardBypassController = keyguardBypassController; mColorExtractor = colorExtractor; + mSuperStatusBarViewFactory = superStatusBarViewFactory; + mStatusBarView = mSuperStatusBarViewFactory.getStatusBarWindowView(); + mResources = resources; + + if (mBarHeight < 0) { + mBarHeight = mResources.getDimensionPixelSize( + com.android.internal.R.dimen.status_bar_height); + } + mLockScreenDisplayTimeout = context.getResources() .getInteger(R.integer.config_lockScreenDisplayTimeout); ((SysuiStatusBarStateController) statusBarStateController) @@ -149,20 +165,36 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat || res.getBoolean(R.bool.config_enableLockScreenRotation); } + public int getStatusBarHeight() { + return mBarHeight; + } + + /** + * Rereads the status_bar_height from configuration and reapplys the current state if the height + * is different. + */ + public void refreshStatusBarHeight() { + int heightFromConfig = mResources.getDimensionPixelSize( + com.android.internal.R.dimen.status_bar_height); + + if (mBarHeight != heightFromConfig) { + mBarHeight = heightFromConfig; + apply(mCurrentState); + } + + if (DEBUG) Log.v(TAG, "defineSlots"); + } + /** * Adds the status bar view to the window manager. - * - * @param statusBarView The view to add. - * @param barHeight The height of the status bar in collapsed state. */ - public void add(ViewGroup statusBarView, int barHeight) { - + public void attach() { // Now that the status bar window encompasses the sliding panel and its // translucent backdrop, the entire thing is made TRANSLUCENT and is // hardware-accelerated. mLp = new LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, - barHeight, + mBarHeight, LayoutParams.TYPE_STATUS_BAR, LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING @@ -176,8 +208,6 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat mLp.setTitle("StatusBar"); mLp.packageName = mContext.getPackageName(); mLp.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; - mStatusBarView = statusBarView; - mBarHeight = barHeight; mWindowManager.addView(mStatusBarView, mLp); mLpChanged.copyFrom(mLp); onThemeChanged(); @@ -534,11 +564,6 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat apply(mCurrentState); } - public void setBarHeight(int barHeight) { - mBarHeight = barHeight; - apply(mCurrentState); - } - public void setForcePluginOpen(boolean forcePluginOpen) { mCurrentState.forcePluginOpen = forcePluginOpen; apply(mCurrentState); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowViewController.java index b7ada5d35a081..f716443cbfe18 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowViewController.java @@ -43,6 +43,7 @@ import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.DragDownHelper; import com.android.systemui.statusbar.NotificationLockscreenUserManager; 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; @@ -492,7 +493,8 @@ public class StatusBarWindowViewController { private final DozeLog mDozeLog; private final DozeParameters mDozeParameters; private final CommandQueue mCommandQueue; - private StatusBarWindowView mView; + private final SuperStatusBarViewFactory mSuperStatusBarViewFactory; + private final StatusBarWindowView mView; @Inject public Builder( @@ -510,7 +512,8 @@ public class StatusBarWindowViewController { StatusBarStateController statusBarStateController, DozeLog dozeLog, DozeParameters dozeParameters, - CommandQueue commandQueue) { + CommandQueue commandQueue, + SuperStatusBarViewFactory superStatusBarViewFactory) { mInjectionInflationController = injectionInflationController; mCoordinator = coordinator; mPulseExpansionHandler = pulseExpansionHandler; @@ -526,14 +529,9 @@ public class StatusBarWindowViewController { mDozeLog = dozeLog; mDozeParameters = dozeParameters; mCommandQueue = commandQueue; - } + mSuperStatusBarViewFactory = superStatusBarViewFactory; - /** - * Provide {@link StatusBarWindowView} to attach this controller to. - */ - public Builder setStatusBarWindowView(StatusBarWindowView view) { - mView = view; - return this; + mView = mSuperStatusBarViewFactory.getStatusBarWindowView(); } /** diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java index 00681130074b1..b1a6bc6d41fd4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java @@ -46,18 +46,19 @@ import android.app.Notification; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; +import android.content.res.Resources; import android.graphics.drawable.Icon; import android.hardware.face.FaceManager; import android.service.notification.ZenModeConfig; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.WindowManager; -import android.widget.FrameLayout; import androidx.test.filters.SmallTest; import com.android.internal.colorextraction.ColorExtractor; import com.android.systemui.R; +import com.android.systemui.SystemUIFactory; import com.android.systemui.SysuiTestCase; import com.android.systemui.colorextraction.SysuiColorExtractor; import com.android.systemui.plugins.statusbar.StatusBarStateController; @@ -65,6 +66,7 @@ import com.android.systemui.statusbar.NotificationLockscreenUserManager; import com.android.systemui.statusbar.NotificationPresenter; import com.android.systemui.statusbar.NotificationRemoveInterceptor; import com.android.systemui.statusbar.NotificationTestHelper; +import com.android.systemui.statusbar.SuperStatusBarViewFactory; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.notification.NotificationEntryListener; import com.android.systemui.statusbar.notification.NotificationEntryManager; @@ -81,6 +83,7 @@ import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.statusbar.policy.ZenModeController; +import com.android.systemui.util.InjectionInflationController; import org.junit.Before; import org.junit.Test; @@ -119,7 +122,6 @@ public class BubbleControllerTest extends SysuiTestCase { @Mock private KeyguardBypassController mKeyguardBypassController; - private FrameLayout mStatusBarView; @Captor private ArgumentCaptor mEntryListenerCaptor; @Captor @@ -147,22 +149,28 @@ public class BubbleControllerTest extends SysuiTestCase { private SysuiColorExtractor mColorExtractor; @Mock ColorExtractor.GradientColors mGradientColors; + @Mock + private Resources mResources; + private SuperStatusBarViewFactory mSuperStatusBarViewFactory; private BubbleData mBubbleData; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); - mStatusBarView = new FrameLayout(mContext); mDependency.injectTestDependency(NotificationEntryManager.class, mNotificationEntryManager); mContext.addMockSystemService(FaceManager.class, mFaceManager); when(mColorExtractor.getNeutralColors()).thenReturn(mGradientColors); + mSuperStatusBarViewFactory = new SuperStatusBarViewFactory(mContext, + new InjectionInflationController(SystemUIFactory.getInstance().getRootComponent())); + // Bubbles get added to status bar window view mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager, mActivityManager, mDozeParameters, mStatusBarStateController, - mConfigurationController, mKeyguardBypassController, mColorExtractor); - mStatusBarWindowController.add(mStatusBarView, 120 /* height */); + mConfigurationController, mKeyguardBypassController, mColorExtractor, + mSuperStatusBarViewFactory, mResources); + mStatusBarWindowController.attach(); // Need notifications for bubbles mNotificationTestHelper = new NotificationTestHelper(mContext, mDependency); 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 c21e3ab079ffe..ecb2d8190cfc1 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 @@ -107,6 +107,7 @@ import com.android.systemui.statusbar.PulseExpansionHandler; import com.android.systemui.statusbar.RemoteInputController; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.StatusBarStateControllerImpl; +import com.android.systemui.statusbar.SuperStatusBarViewFactory; import com.android.systemui.statusbar.VibratorHelper; import com.android.systemui.statusbar.notification.BypassHeadsUpNotifier; import com.android.systemui.statusbar.notification.DynamicPrivacyController; @@ -134,7 +135,6 @@ import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler; import com.android.systemui.statusbar.policy.RemoteInputUriController; import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.ZenModeController; -import com.android.systemui.util.InjectionInflationController; import org.junit.Before; import org.junit.Test; @@ -208,7 +208,6 @@ public class StatusBarTest extends SysuiTestCase { @Mock private PulseExpansionHandler mPulseExpansionHandler; @Mock private NotificationWakeUpCoordinator mNotificationWakeUpCoordinator; @Mock private KeyguardBypassController mKeyguardBypassController; - @Mock private InjectionInflationController mInjectionInflationController; @Mock private DynamicPrivacyController mDynamicPrivacyController; @Mock private NewNotifPipeline mNewNotifPipeline; @Mock private ZenModeController mZenModeController; @@ -234,6 +233,7 @@ public class StatusBarTest extends SysuiTestCase { @Mock private KeyguardLiftController mKeyguardLiftController; @Mock private CommandQueue mCommandQueue; @Mock private PluginManager mPluginManager; + @Mock private SuperStatusBarViewFactory mSuperStatusBarViewFactory; @Before public void setup() throws Exception { @@ -309,7 +309,6 @@ public class StatusBarTest extends SysuiTestCase { mKeyguardUpdateMonitor, mStatusBarIconController, mDozeLog, - mInjectionInflationController, mPulseExpansionHandler, mNotificationWakeUpCoordinator, mKeyguardBypassController, @@ -372,7 +371,8 @@ public class StatusBarTest extends SysuiTestCase { mDozeScrimController, mCommandQueue, mPluginManager, - mRemoteInputUriController); + mRemoteInputUriController, + mSuperStatusBarViewFactory); when(mStatusBarWindowView.findViewById(R.id.lock_icon_container)).thenReturn( mLockIconContainer); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java index a21a658348c48..147edf6589e97 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java @@ -25,9 +25,9 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.IActivityManager; +import android.content.res.Resources; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper.RunWithLooper; -import android.view.ViewGroup; import android.view.WindowManager; import androidx.test.filters.SmallTest; @@ -35,6 +35,7 @@ import androidx.test.filters.SmallTest; import com.android.internal.colorextraction.ColorExtractor; import com.android.systemui.SysuiTestCase; import com.android.systemui.colorextraction.SysuiColorExtractor; +import com.android.systemui.statusbar.SuperStatusBarViewFactory; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.policy.ConfigurationController; @@ -52,13 +53,15 @@ public class StatusBarWindowControllerTest extends SysuiTestCase { @Mock private WindowManager mWindowManager; @Mock private DozeParameters mDozeParameters; - @Mock private ViewGroup mStatusBarView; + @Mock private StatusBarWindowView mStatusBarView; @Mock private IActivityManager mActivityManager; @Mock private SysuiStatusBarStateController mStatusBarStateController; @Mock private ConfigurationController mConfigurationController; @Mock private KeyguardBypassController mKeyguardBypassController; @Mock private SysuiColorExtractor mColorExtractor; @Mock ColorExtractor.GradientColors mGradientColors; + @Mock private SuperStatusBarViewFactory mSuperStatusBarViewFactory; + @Mock private Resources mResources; private StatusBarWindowController mStatusBarWindowController; @@ -67,11 +70,14 @@ public class StatusBarWindowControllerTest extends SysuiTestCase { MockitoAnnotations.initMocks(this); when(mDozeParameters.getAlwaysOn()).thenReturn(true); when(mColorExtractor.getNeutralColors()).thenReturn(mGradientColors); + when(mSuperStatusBarViewFactory.getStatusBarWindowView()).thenReturn(mStatusBarView); mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager, mActivityManager, mDozeParameters, mStatusBarStateController, - mConfigurationController, mKeyguardBypassController, mColorExtractor); - mStatusBarWindowController.add(mStatusBarView, 100 /* height */); + mConfigurationController, mKeyguardBypassController, mColorExtractor, + mSuperStatusBarViewFactory, mResources); + + mStatusBarWindowController.attach(); } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowViewTest.java index 20fb6599f66ea..bf81325eb6f8a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowViewTest.java @@ -35,6 +35,7 @@ import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.DragDownHelper; import com.android.systemui.statusbar.NotificationLockscreenUserManager; 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; @@ -72,6 +73,7 @@ public class StatusBarWindowViewTest extends SysuiTestCase { @Mock private StatusBar mStatusBar; @Mock private DozeLog mDozeLog; @Mock private DozeParameters mDozeParameters; + @Mock private SuperStatusBarViewFactory mSuperStatusBarViewFactory; @Before public void setUp() { @@ -82,6 +84,8 @@ public class StatusBarWindowViewTest extends SysuiTestCase { when(mStatusBar.isDozing()).thenReturn(false); mDependency.injectTestDependency(ShadeController.class, mShadeController); + when(mSuperStatusBarViewFactory.getStatusBarWindowView()).thenReturn(mView); + mController = new StatusBarWindowViewController.Builder( new InjectionInflationController( SystemUIFactory.getInstance().getRootComponent()), @@ -98,9 +102,9 @@ public class StatusBarWindowViewTest extends SysuiTestCase { mStatusBarStateController, mDozeLog, mDozeParameters, - new CommandQueue(mContext)) + new CommandQueue(mContext), + mSuperStatusBarViewFactory) .setShadeController(mShadeController) - .setStatusBarWindowView(mView) .build(); mController.setService(mStatusBar); mController.setDragDownHelper(mDragDownHelper);