Make LayoutInflation a separate injectable class

Next step would be move ShadeController into a separate injectable
object outside of StatusBar to remove circular dependency in
StatusBarWindowViewController.

Bug: 138786270
Test: manual on sdk_gphone_x86-userdebug, atest SystemUITests
Change-Id: I4064278d33d3ae5652e70e109deaa20db86512b3
This commit is contained in:
Heemin Seog
2019-11-04 16:05:19 -08:00
parent 6450a582fa
commit afb3dbc69d
11 changed files with 195 additions and 88 deletions

View File

@@ -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;
}

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -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<BiometricUnlockController> 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) {

View File

@@ -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);
}
}

View File

@@ -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);

View File

@@ -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();
}
/**

View File

@@ -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<NotificationEntryListener> 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);

View File

@@ -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);

View File

@@ -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

View File

@@ -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);