summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/CarSystemUI/src/com/android/systemui/CarSystemUIModule.java8
-rw-r--r--packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java162
-rw-r--r--packages/SystemUI/README.md6
-rw-r--r--packages/SystemUI/res/values/config.xml2
-rw-r--r--packages/SystemUI/src/com/android/systemui/DependencyBinder.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/DependencyProvider.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/SystemBars.java88
-rw-r--r--packages/SystemUI/src/com/android/systemui/SystemUIBinder.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/SystemUIDefaultModule.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/classifier/FalsingLog.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java21
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java280
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java304
13 files changed, 504 insertions, 397 deletions
diff --git a/packages/CarSystemUI/src/com/android/systemui/CarSystemUIModule.java b/packages/CarSystemUI/src/com/android/systemui/CarSystemUIModule.java
index 9a063aa7b791..5ec1baee5b14 100644
--- a/packages/CarSystemUI/src/com/android/systemui/CarSystemUIModule.java
+++ b/packages/CarSystemUI/src/com/android/systemui/CarSystemUIModule.java
@@ -29,6 +29,7 @@ import com.android.systemui.power.EnhancedEstimates;
import com.android.systemui.power.EnhancedEstimatesImpl;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationLockscreenUserManagerImpl;
+import com.android.systemui.statusbar.car.CarStatusBar;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
import com.android.systemui.statusbar.notification.collection.NotificationData;
@@ -42,6 +43,8 @@ import javax.inject.Singleton;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
+import dagger.multibindings.ClassKey;
+import dagger.multibindings.IntoMap;
@Module
abstract class CarSystemUIModule {
@@ -94,4 +97,9 @@ abstract class CarSystemUIModule {
@Binds
abstract SystemUIRootComponent bindSystemUIRootComponent(
CarSystemUIRootComponent systemUIRootComponent);
+
+ @Binds
+ @IntoMap
+ @ClassKey(StatusBar.class)
+ public abstract SystemUI providesStatusBar(CarStatusBar statusBar);
}
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 b0ab5b49f340..d21f09ce160a 100644
--- a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
+++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
@@ -16,6 +16,8 @@
package com.android.systemui.statusbar.car;
+import static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME;
+
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
@@ -34,6 +36,7 @@ import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.inputmethodservice.InputMethodService;
import android.os.IBinder;
+import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.GestureDetector;
@@ -57,36 +60,83 @@ import com.android.car.notification.NotificationClickHandlerFactory;
import com.android.car.notification.NotificationDataManager;
import com.android.car.notification.NotificationViewController;
import com.android.car.notification.PreprocessingManager;
+import com.android.internal.logging.MetricsLogger;
import com.android.internal.statusbar.RegisterStatusBarResult;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.BatteryMeterView;
import com.android.systemui.CarSystemUIFactory;
import com.android.systemui.Dependency;
+import com.android.systemui.ForegroundServiceController;
import com.android.systemui.Prefs;
import com.android.systemui.R;
import com.android.systemui.SystemUIFactory;
+import com.android.systemui.UiOffloadThread;
+import com.android.systemui.appops.AppOpsController;
+import com.android.systemui.assist.AssistManager;
+import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.bubbles.BubbleController;
import com.android.systemui.classifier.FalsingLog;
+import com.android.systemui.colorextraction.SysuiColorExtractor;
+import com.android.systemui.doze.DozeLog;
import com.android.systemui.fragments.FragmentHostManager;
+import com.android.systemui.keyguard.KeyguardViewMediator;
import com.android.systemui.keyguard.ScreenLifecycle;
+import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.qs.QS;
import com.android.systemui.qs.car.CarQSFragment;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.TaskStackChangeListener;
import com.android.systemui.statusbar.FlingAnimationUtils;
+import com.android.systemui.statusbar.NavigationBarController;
+import com.android.systemui.statusbar.NotificationListener;
+import com.android.systemui.statusbar.NotificationLockscreenUserManager;
+import com.android.systemui.statusbar.NotificationMediaManager;
+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.SysuiStatusBarStateController;
+import com.android.systemui.statusbar.VibratorHelper;
import com.android.systemui.statusbar.car.hvac.HvacController;
import com.android.systemui.statusbar.car.hvac.TemperatureView;
+import com.android.systemui.statusbar.notification.BypassHeadsUpNotifier;
+import com.android.systemui.statusbar.notification.DynamicPrivacyController;
+import com.android.systemui.statusbar.notification.NotifPipelineInitializer;
+import com.android.systemui.statusbar.notification.NotificationAlertingManager;
+import com.android.systemui.statusbar.notification.NotificationEntryManager;
+import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
+import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
+import com.android.systemui.statusbar.notification.VisualStabilityManager;
+import com.android.systemui.statusbar.notification.logging.NotificationLogger;
+import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
+import com.android.systemui.statusbar.phone.AutoHideController;
import com.android.systemui.statusbar.phone.CollapsedStatusBarFragment;
+import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
+import com.android.systemui.statusbar.phone.KeyguardBypassController;
+import com.android.systemui.statusbar.phone.LightBarController;
+import com.android.systemui.statusbar.phone.NotificationGroupAlertTransferHelper;
+import com.android.systemui.statusbar.phone.NotificationGroupManager;
import com.android.systemui.statusbar.phone.StatusBar;
+import com.android.systemui.statusbar.phone.StatusBarIconController;
+import com.android.systemui.statusbar.phone.StatusBarWindowController;
import com.android.systemui.statusbar.policy.BatteryController;
+import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
+import com.android.systemui.statusbar.policy.NetworkController;
+import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
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;
import java.util.Map;
+import javax.inject.Inject;
+import javax.inject.Named;
+
/**
* A status bar (and navigation bar) tailored for the automotive use case.
*/
@@ -175,6 +225,8 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
private boolean mHideNavBarForKeyboard;
private boolean mBottomNavBarVisible;
+ private final NavigationBarController mNavigationBarController;
+
private final CarPowerStateListener mCarPowerStateListener =
(int state) -> {
// When the car powers on, clear all notifications and mute/unread states.
@@ -189,6 +241,116 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
}
};
+ @Inject
+ public CarStatusBar(
+ LightBarController lightBarController,
+ AutoHideController autoHideController,
+ KeyguardUpdateMonitor keyguardUpdateMonitor,
+ StatusBarIconController statusBarIconController,
+ DozeLog dozeLog,
+ InjectionInflationController injectionInflationController,
+ PulseExpansionHandler pulseExpansionHandler,
+ NotificationWakeUpCoordinator notificationWakeUpCoordinator,
+ KeyguardBypassController keyguardBypassController,
+ KeyguardStateController keyguardStateController,
+ HeadsUpManagerPhone headsUpManagerPhone,
+ DynamicPrivacyController dynamicPrivacyController,
+ BypassHeadsUpNotifier bypassHeadsUpNotifier,
+ @Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME) boolean allowNotificationLongPress,
+ NotifPipelineInitializer notifPipelineInitializer,
+ FalsingManager falsingManager,
+ BroadcastDispatcher broadcastDispatcher,
+ RemoteInputQuickSettingsDisabler remoteInputQuickSettingsDisabler,
+ NotificationGutsManager notificationGutsManager,
+ NotificationLogger notificationLogger,
+ NotificationEntryManager notificationEntryManager,
+ NotificationInterruptionStateProvider notificationInterruptionStateProvider,
+ NotificationViewHierarchyManager notificationViewHierarchyManager,
+ ForegroundServiceController foregroundServiceController,
+ AppOpsController appOpsController,
+ KeyguardViewMediator keyguardViewMediator,
+ ZenModeController zenModeController,
+ NotificationAlertingManager notificationAlertingManager,
+ DisplayMetrics displayMetrics,
+ MetricsLogger metricsLogger,
+ UiOffloadThread uiOffloadThread,
+ NotificationMediaManager notificationMediaManager,
+ NotificationLockscreenUserManager lockScreenUserManager,
+ NotificationRemoteInputManager remoteInputManager,
+ UserSwitcherController userSwitcherController,
+ NetworkController networkController,
+ BatteryController batteryController,
+ SysuiColorExtractor colorExtractor,
+ ScreenLifecycle screenLifecycle,
+ WakefulnessLifecycle wakefulnessLifecycle,
+ SysuiStatusBarStateController statusBarStateController,
+ VibratorHelper vibratorHelper,
+ BubbleController bubbleController,
+ NotificationGroupManager groupManager,
+ NotificationGroupAlertTransferHelper groupAlertTransferHelper,
+ VisualStabilityManager visualStabilityManager,
+ DeviceProvisionedController deviceProvisionedController,
+ NavigationBarController navigationBarController,
+ AssistManager assistManager,
+ NotificationListener notificationListener,
+ ConfigurationController configurationController,
+ StatusBarWindowController statusBarWindowController) {
+ super(
+ lightBarController,
+ autoHideController,
+ keyguardUpdateMonitor,
+ statusBarIconController,
+ dozeLog,
+ injectionInflationController,
+ pulseExpansionHandler,
+ notificationWakeUpCoordinator,
+ keyguardBypassController,
+ keyguardStateController,
+ headsUpManagerPhone,
+ dynamicPrivacyController,
+ bypassHeadsUpNotifier,
+ allowNotificationLongPress,
+ notifPipelineInitializer,
+ falsingManager,
+ broadcastDispatcher,
+ remoteInputQuickSettingsDisabler,
+ notificationGutsManager,
+ notificationLogger,
+ notificationEntryManager,
+ notificationInterruptionStateProvider,
+ notificationViewHierarchyManager,
+ foregroundServiceController,
+ appOpsController,
+ keyguardViewMediator,
+ zenModeController,
+ notificationAlertingManager,
+ displayMetrics,
+ metricsLogger,
+ uiOffloadThread,
+ notificationMediaManager,
+ lockScreenUserManager,
+ remoteInputManager,
+ userSwitcherController,
+ networkController,
+ batteryController,
+ colorExtractor,
+ screenLifecycle,
+ wakefulnessLifecycle,
+ statusBarStateController,
+ vibratorHelper,
+ bubbleController,
+ groupManager,
+ groupAlertTransferHelper,
+ visualStabilityManager,
+ deviceProvisionedController,
+ navigationBarController,
+ assistManager,
+ notificationListener,
+ configurationController,
+ statusBarWindowController);
+ mNavigationBarController = navigationBarController;
+ }
+
@Override
public void start() {
// get the provisioned state before calling the parent class since it's that flow that
diff --git a/packages/SystemUI/README.md b/packages/SystemUI/README.md
index a8ce196cc359..a3d420ee4cdf 100644
--- a/packages/SystemUI/README.md
+++ b/packages/SystemUI/README.md
@@ -104,12 +104,6 @@ it should be shown.
Shows the drag handle for the divider between two apps when in split screen
mode.
-### [com.android.systemui.SystemBars](/packages/SystemUI/src/com/android/systemui/SystemBars.java)
-
-This is a proxy to the actual SystemUI for the status bar. This loads from
-config_statusBarComponent which defaults to StatusBar. (maybe this should be
-removed and copy how config_systemUiVendorServiceComponent works)
-
### [com.android.systemui.status.phone.StatusBar](/packages/SystemUI/src/com/android/systemui/status/phone/StatusBar.java)
This shows the UI for the status bar and the notification shade it contains.
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 61210d3e0011..105b27eb7e1b 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -279,7 +279,7 @@
<item>com.android.systemui.recents.Recents</item>
<item>com.android.systemui.volume.VolumeUI</item>
<item>com.android.systemui.stackdivider.Divider</item>
- <item>com.android.systemui.SystemBars</item>
+ <item>com.android.systemui.statusbar.phone.StatusBar</item>
<item>com.android.systemui.usb.StorageNotification</item>
<item>com.android.systemui.power.PowerUI</item>
<item>com.android.systemui.media.RingtonePlayer</item>
diff --git a/packages/SystemUI/src/com/android/systemui/DependencyBinder.java b/packages/SystemUI/src/com/android/systemui/DependencyBinder.java
index c4dce1e70051..f9f0f1bad2fa 100644
--- a/packages/SystemUI/src/com/android/systemui/DependencyBinder.java
+++ b/packages/SystemUI/src/com/android/systemui/DependencyBinder.java
@@ -200,6 +200,12 @@ public abstract class DependencyBinder {
/**
*/
@Binds
+ public abstract SysuiStatusBarStateController providesSysuiStatusBarStateController(
+ StatusBarStateControllerImpl statusBarStateControllerImpl);
+
+ /**
+ */
+ @Binds
public abstract StatusBarIconController provideStatusBarIconController(
StatusBarIconControllerImpl controllerImpl);
@@ -235,10 +241,4 @@ public abstract class DependencyBinder {
*/
@Binds
public abstract FalsingManager provideFalsingmanager(FalsingManagerProxy falsingManagerImpl);
-
- /**
- */
- @Binds
- public abstract SysuiStatusBarStateController providesSysuiStatusBarStateController(
- StatusBarStateControllerImpl statusBarStateControllerImpl);
}
diff --git a/packages/SystemUI/src/com/android/systemui/DependencyProvider.java b/packages/SystemUI/src/com/android/systemui/DependencyProvider.java
index 239cbfe38975..0d24321d8db7 100644
--- a/packages/SystemUI/src/com/android/systemui/DependencyProvider.java
+++ b/packages/SystemUI/src/com/android/systemui/DependencyProvider.java
@@ -40,6 +40,7 @@ import android.view.WindowManagerGlobal;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.statusbar.IStatusBarService;
+import com.android.internal.widget.LockPatternUtils;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.systemui.plugins.PluginInitializerImpl;
import com.android.systemui.shared.plugins.PluginManager;
@@ -238,4 +239,10 @@ public class DependencyProvider {
public AlarmManager provideAlarmManager(Context context) {
return context.getSystemService(AlarmManager.class);
}
+
+ /** */
+ @Provides
+ public LockPatternUtils provideLockPatternUtils(Context context) {
+ return new LockPatternUtils(context);
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/SystemBars.java b/packages/SystemUI/src/com/android/systemui/SystemBars.java
deleted file mode 100644
index c4c0fd6da124..000000000000
--- a/packages/SystemUI/src/com/android/systemui/SystemBars.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2017 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;
-
-import android.util.Log;
-
-import com.android.systemui.statusbar.phone.StatusBar;
-
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-
-/**
- * Ensure a single status bar service implementation is running at all times, using the in-process
- * implementation according to the product config.
- */
-public class SystemBars extends SystemUI {
- private static final String TAG = "SystemBars";
- private static final boolean DEBUG = false;
- private static final int WAIT_FOR_BARS_TO_DIE = 500;
-
- // in-process fallback implementation, per the product config
- private SystemUI mStatusBar;
-
- @Override
- public void start() {
- if (DEBUG) Log.d(TAG, "start");
- createStatusBarFromConfig();
- }
-
- @Override
- public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- if (mStatusBar != null) {
- mStatusBar.dump(fd, pw, args);
- }
- }
-
- @Override
- public void onBootCompleted() {
- if (mStatusBar != null) {
- mStatusBar.onBootCompleted();
- }
- }
-
- private void createStatusBarFromConfig() {
- if (DEBUG) Log.d(TAG, "createStatusBarFromConfig");
- final String clsName = mContext.getString(R.string.config_statusBarComponent);
- if (clsName == null || clsName.length() == 0) {
- throw andLog("No status bar component configured", null);
- }
- Class<?> cls = null;
- try {
- cls = mContext.getClassLoader().loadClass(clsName);
- } catch (Throwable t) {
- throw andLog("Error loading status bar component: " + clsName, t);
- }
- try {
- mStatusBar = (SystemUI) cls.newInstance();
- } catch (Throwable t) {
- throw andLog("Error creating status bar component: " + clsName, t);
- }
- mStatusBar.mContext = mContext;
- mStatusBar.mComponents = mComponents;
- if (mStatusBar instanceof StatusBar) {
- SystemUIFactory.getInstance().getRootComponent()
- .getStatusBarInjector()
- .createStatusBar((StatusBar) mStatusBar);
- }
- mStatusBar.start();
- if (DEBUG) Log.d(TAG, "started " + mStatusBar.getClass().getSimpleName());
- }
-
- private RuntimeException andLog(String msg, Throwable t) {
- Log.w(TAG, msg, t);
- throw new RuntimeException(msg, t);
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIBinder.java b/packages/SystemUI/src/com/android/systemui/SystemUIBinder.java
index ba2dec0ff116..785038f2b7f7 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIBinder.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIBinder.java
@@ -44,7 +44,7 @@ public abstract class SystemUIBinder {
@ClassKey(PowerUI.class)
public abstract SystemUI bindPowerUI(PowerUI sysui);
- /** Inject into StatusBar. */
+ /** Inject into Recents. */
@Binds
@IntoMap
@ClassKey(Recents.class)
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIDefaultModule.java b/packages/SystemUI/src/com/android/systemui/SystemUIDefaultModule.java
index 262b5ec50d83..72831e99e122 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIDefaultModule.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIDefaultModule.java
@@ -40,6 +40,8 @@ import javax.inject.Singleton;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
+import dagger.multibindings.ClassKey;
+import dagger.multibindings.IntoMap;
/**
* A dagger module for injecting default implementations of components of System UI that may be
@@ -76,6 +78,11 @@ abstract class SystemUIDefaultModule {
return SysUiServiceProvider.getComponent(context, StatusBar.class);
}
+ @Binds
+ @IntoMap
+ @ClassKey(StatusBar.class)
+ public abstract SystemUI providesStatusBar(StatusBar statusBar);
+
@Singleton
@Provides
@Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME)
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingLog.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingLog.java
index cb7c998fad8e..8105c6a6e940 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingLog.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingLog.java
@@ -37,7 +37,7 @@ import java.util.Locale;
* adb shell setprop debug.falsing_log true
*
* The log gets dumped as part of the SystemUI services. To dump on demand:
- * adb shell dumpsys activity service com.android.systemui SystemBars | grep -A 999 FALSING | less
+ * adb shell dumpsys activity service com.android.systemui StatusBar | grep -A 999 FALSING | less
*
* To dump into logcat:
* adb shell setprop debug.falsing_logcat true
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index 6a7b21a9b9d2..a8027c025cf2 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -234,7 +234,7 @@ public class KeyguardViewMediator extends SystemUI {
*/
private PowerManager.WakeLock mShowKeyguardWakeLock;
- private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
+ private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
// these are protected by synchronized (this)
@@ -317,7 +317,7 @@ public class KeyguardViewMediator extends SystemUI {
* the keyguard.
*/
private boolean mWaitingUntilKeyguardVisible = false;
- private LockPatternUtils mLockPatternUtils;
+ private final LockPatternUtils mLockPatternUtils;
private boolean mKeyguardDonePending = false;
private boolean mHideAnimationRun = false;
private boolean mHideAnimationRunning = false;
@@ -681,10 +681,21 @@ public class KeyguardViewMediator extends SystemUI {
};
@Inject
- public KeyguardViewMediator(FalsingManager falsingManager) {
+ public KeyguardViewMediator(
+ Context context,
+ FalsingManager falsingManager,
+ LockPatternUtils lockPatternUtils) {
super();
+ mContext = context;
mFalsingManager = falsingManager;
+
+ mLockPatternUtils = lockPatternUtils;
+ mStatusBarKeyguardViewManager =
+ SystemUIFactory.getInstance().createStatusBarKeyguardViewManager(
+ mContext,
+ mViewMediatorCallback,
+ mLockPatternUtils);
}
public void userActivity() {
@@ -722,7 +733,6 @@ public class KeyguardViewMediator extends SystemUI {
mUpdateMonitor = Dependency.get(KeyguardUpdateMonitor.class);
- mLockPatternUtils = new LockPatternUtils(mContext);
KeyguardUpdateMonitor.setCurrentUser(ActivityManager.getCurrentUser());
// Assume keyguard is showing (unless it's disabled) until we know for sure, unless Keyguard
@@ -736,9 +746,6 @@ public class KeyguardViewMediator extends SystemUI {
setShowingLocked(false /* showing */, true /* forceCallbacks */);
}
- mStatusBarKeyguardViewManager =
- SystemUIFactory.getInstance().createStatusBarKeyguardViewManager(mContext,
- mViewMediatorCallback, mLockPatternUtils);
final ContentResolver cr = mContext.getContentResolver();
mDeviceInteractive = mPM.isInteractive();
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 e79f14175377..da5931a50ba8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -347,10 +347,9 @@ public class StatusBar extends SystemUI implements DemoMode,
private BrightnessMirrorController mBrightnessMirrorController;
private boolean mBrightnessMirrorVisible;
protected BiometricUnlockController mBiometricUnlockController;
- @Inject LightBarController mLightBarController;
+ private final LightBarController mLightBarController;
protected LockscreenWallpaper mLockscreenWallpaper;
- @VisibleForTesting
- @Inject AutoHideController mAutoHideController;
+ private final AutoHideController mAutoHideController;
private int mNaturalBarHeight = -1;
@@ -360,8 +359,7 @@ public class StatusBar extends SystemUI implements DemoMode,
protected PhoneStatusBarView mStatusBarView;
private int mStatusBarWindowState = WINDOW_STATE_SHOWING;
protected StatusBarWindowController mStatusBarWindowController;
- @VisibleForTesting
- @Inject KeyguardUpdateMonitor mKeyguardUpdateMonitor;
+ private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@VisibleForTesting
DozeServiceHost mDozeServiceHost = new DozeServiceHost();
private boolean mWakeUpComingFromTouch;
@@ -369,38 +367,21 @@ public class StatusBar extends SystemUI implements DemoMode,
private final Object mQueueLock = new Object();
- @Inject StatusBarIconController mIconController;
- @Inject
- DozeLog mDozeLog;
- @Inject
- InjectionInflationController mInjectionInflater;
- @Inject
- PulseExpansionHandler mPulseExpansionHandler;
- @Inject
- NotificationWakeUpCoordinator mWakeUpCoordinator;
- @Inject
- KeyguardBypassController mKeyguardBypassController;
- @Inject
- KeyguardStateController mKeyguardStateController;
- @Inject
- protected HeadsUpManagerPhone mHeadsUpManager;
- @Inject
- DynamicPrivacyController mDynamicPrivacyController;
- @Inject
- BypassHeadsUpNotifier mBypassHeadsUpNotifier;
- @Nullable
- @Inject
- protected KeyguardLiftController mKeyguardLiftController;
- @Inject
- @Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME)
- boolean mAllowNotificationLongPress;
- @Inject
- protected NotifPipelineInitializer mNotifPipelineInitializer;
- @Inject
- protected FalsingManager mFalsingManager;
-
- @VisibleForTesting
- @Inject BroadcastDispatcher mBroadcastDispatcher;
+ private final StatusBarIconController mIconController;
+ private final DozeLog mDozeLog;
+ private final InjectionInflationController mInjectionInflater;
+ private final PulseExpansionHandler mPulseExpansionHandler;
+ private final NotificationWakeUpCoordinator mWakeUpCoordinator;
+ private final KeyguardBypassController mKeyguardBypassController;
+ private final KeyguardStateController mKeyguardStateController;
+ private final HeadsUpManagerPhone mHeadsUpManager;
+ private final DynamicPrivacyController mDynamicPrivacyController;
+ private final BypassHeadsUpNotifier mBypassHeadsUpNotifier;
+ private final boolean mAllowNotificationLongPress;
+ private final NotifPipelineInitializer mNotifPipelineInitializer;
+ private final FalsingManager mFalsingManager;
+ private final BroadcastDispatcher mBroadcastDispatcher;
+ private final ConfigurationController mConfigurationController;
// expanded notifications
protected NotificationPanelView mNotificationPanel; // the sliding/resizing panel within the notification window
@@ -413,7 +394,7 @@ public class StatusBar extends SystemUI implements DemoMode,
// RemoteInputView to be activated after unlock
private View mPendingRemoteInputView;
- @Inject RemoteInputQuickSettingsDisabler mRemoteInputQuickSettingsDisabler;
+ private final RemoteInputQuickSettingsDisabler mRemoteInputQuickSettingsDisabler;
private View mReportRejectedTouch;
@@ -422,17 +403,17 @@ public class StatusBar extends SystemUI implements DemoMode,
private final int[] mAbsPos = new int[2];
private final ArrayList<Runnable> mPostCollapseRunnables = new ArrayList<>();
- @Inject NotificationGutsManager mGutsManager;
- @Inject NotificationLogger mNotificationLogger;
- @Inject NotificationEntryManager mEntryManager;
+ private final NotificationGutsManager mGutsManager;
+ private final NotificationLogger mNotificationLogger;
+ private final NotificationEntryManager mEntryManager;
private NotificationListController mNotificationListController;
- @Inject NotificationInterruptionStateProvider mNotificationInterruptionStateProvider;
- @Inject NotificationViewHierarchyManager mViewHierarchyManager;
- @Inject ForegroundServiceController mForegroundServiceController;
- @Inject AppOpsController mAppOpsController;
- @Inject KeyguardViewMediator mKeyguardViewMediator;
- @Inject ZenModeController mZenController;
- @Inject NotificationAlertingManager mNotificationAlertingManager;
+ private final NotificationInterruptionStateProvider mNotificationInterruptionStateProvider;
+ private final NotificationViewHierarchyManager mViewHierarchyManager;
+ private final ForegroundServiceController mForegroundServiceController;
+ private final AppOpsController mAppOpsController;
+ private final KeyguardViewMediator mKeyguardViewMediator;
+ private final ZenModeController mZenController;
+ private final NotificationAlertingManager mNotificationAlertingManager;
// for disabling the status bar
private int mDisabled1 = 0;
@@ -443,7 +424,7 @@ public class StatusBar extends SystemUI implements DemoMode,
private final Rect mLastFullscreenStackBounds = new Rect();
private final Rect mLastDockedStackBounds = new Rect();
- @Inject DisplayMetrics mDisplayMetrics;
+ private final DisplayMetrics mDisplayMetrics;
// XXX: gesture research
private final GestureRecorder mGestureRec = DEBUG_GESTURES
@@ -452,7 +433,7 @@ public class StatusBar extends SystemUI implements DemoMode,
private ScreenPinningRequest mScreenPinningRequest;
- @Inject MetricsLogger mMetricsLogger;
+ private final MetricsLogger mMetricsLogger;
// ensure quick settings is disabled until the current user makes it through the setup wizard
@VisibleForTesting
@@ -489,14 +470,14 @@ public class StatusBar extends SystemUI implements DemoMode,
private ViewMediatorCallback mKeyguardViewMediatorCallback;
protected ScrimController mScrimController;
protected DozeScrimController mDozeScrimController;
- @Inject UiOffloadThread mUiOffloadThread;
+ private final UiOffloadThread mUiOffloadThread;
protected boolean mDozing;
private boolean mDozingRequested;
- @Inject NotificationMediaManager mMediaManager;
- @Inject NotificationLockscreenUserManager mLockscreenUserManager;
- @Inject NotificationRemoteInputManager mRemoteInputManager;
+ private final NotificationMediaManager mMediaManager;
+ private final NotificationLockscreenUserManager mLockscreenUserManager;
+ private final NotificationRemoteInputManager mRemoteInputManager;
private boolean mWallpaperSupported;
private final BroadcastReceiver mWallpaperChangedReceiver = new BroadcastReceiver() {
@@ -567,18 +548,18 @@ public class StatusBar extends SystemUI implements DemoMode,
};
private KeyguardUserSwitcher mKeyguardUserSwitcher;
- @Inject UserSwitcherController mUserSwitcherController;
- @Inject NetworkController mNetworkController;
- @Inject BatteryController mBatteryController;
+ private final UserSwitcherController mUserSwitcherController;
+ private final NetworkController mNetworkController;
+ private final BatteryController mBatteryController;
protected boolean mPanelExpanded;
private UiModeManager mUiModeManager;
protected boolean mIsKeyguard;
private LogMaker mStatusBarStateLog;
protected NotificationIconAreaController mNotificationIconAreaController;
@Nullable private View mAmbientIndicationContainer;
- @Inject SysuiColorExtractor mColorExtractor;
- @Inject ScreenLifecycle mScreenLifecycle;
- @Inject @VisibleForTesting WakefulnessLifecycle mWakefulnessLifecycle;
+ private final SysuiColorExtractor mColorExtractor;
+ private final ScreenLifecycle mScreenLifecycle;
+ private final WakefulnessLifecycle mWakefulnessLifecycle;
private final View.OnClickListener mGoToLockedShadeListener = v -> {
if (mState == StatusBarState.KEYGUARD) {
@@ -587,7 +568,7 @@ public class StatusBar extends SystemUI implements DemoMode,
}
};
private boolean mNoAnimationOnNextBarModeChange;
- @Inject SysuiStatusBarStateController mStatusBarStateController;
+ private final SysuiStatusBarStateController mStatusBarStateController;
private final KeyguardUpdateMonitorCallback mUpdateCallback =
new KeyguardUpdateMonitorCallback() {
@@ -608,17 +589,13 @@ public class StatusBar extends SystemUI implements DemoMode,
private HeadsUpAppearanceController mHeadsUpAppearanceController;
private boolean mVibrateOnOpening;
- @Inject VibratorHelper mVibratorHelper;
+ private final VibratorHelper mVibratorHelper;
private ActivityLaunchAnimator mActivityLaunchAnimator;
protected StatusBarNotificationPresenter mPresenter;
private NotificationActivityStarter mNotificationActivityStarter;
private boolean mPulsing;
- @Inject BubbleController mBubbleController;
- private final BubbleController.BubbleExpandListener mBubbleExpandListener =
- (isExpanding, key) -> {
- mEntryManager.updateNotifications();
- updateScrimController();
- };
+ private final BubbleController mBubbleController;
+ private final BubbleController.BubbleExpandListener mBubbleExpandListener;
private ActivityIntentHelper mActivityIntentHelper;
@Override
@@ -635,6 +612,120 @@ public class StatusBar extends SystemUI implements DemoMode,
AppOpsManager.OP_COARSE_LOCATION,
AppOpsManager.OP_FINE_LOCATION};
+ @Inject
+ public StatusBar(
+ LightBarController lightBarController,
+ AutoHideController autoHideController,
+ KeyguardUpdateMonitor keyguardUpdateMonitor,
+ StatusBarIconController statusBarIconController,
+ DozeLog dozeLog,
+ InjectionInflationController injectionInflationController,
+ PulseExpansionHandler pulseExpansionHandler,
+ NotificationWakeUpCoordinator notificationWakeUpCoordinator,
+ KeyguardBypassController keyguardBypassController,
+ KeyguardStateController keyguardStateController,
+ HeadsUpManagerPhone headsUpManagerPhone,
+ DynamicPrivacyController dynamicPrivacyController,
+ BypassHeadsUpNotifier bypassHeadsUpNotifier,
+ @Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME) boolean allowNotificationLongPress,
+ NotifPipelineInitializer notifPipelineInitializer,
+ FalsingManager falsingManager,
+ BroadcastDispatcher broadcastDispatcher,
+ RemoteInputQuickSettingsDisabler remoteInputQuickSettingsDisabler,
+ NotificationGutsManager notificationGutsManager,
+ NotificationLogger notificationLogger,
+ NotificationEntryManager notificationEntryManager,
+ NotificationInterruptionStateProvider notificationInterruptionStateProvider,
+ NotificationViewHierarchyManager notificationViewHierarchyManager,
+ ForegroundServiceController foregroundServiceController,
+ AppOpsController appOpsController,
+ KeyguardViewMediator keyguardViewMediator,
+ ZenModeController zenModeController,
+ NotificationAlertingManager notificationAlertingManager,
+ DisplayMetrics displayMetrics,
+ MetricsLogger metricsLogger,
+ UiOffloadThread uiOffloadThread,
+ NotificationMediaManager notificationMediaManager,
+ NotificationLockscreenUserManager lockScreenUserManager,
+ NotificationRemoteInputManager remoteInputManager,
+ UserSwitcherController userSwitcherController,
+ NetworkController networkController,
+ BatteryController batteryController,
+ SysuiColorExtractor colorExtractor,
+ ScreenLifecycle screenLifecycle,
+ WakefulnessLifecycle wakefulnessLifecycle,
+ SysuiStatusBarStateController statusBarStateController,
+ VibratorHelper vibratorHelper,
+ BubbleController bubbleController,
+ NotificationGroupManager groupManager,
+ NotificationGroupAlertTransferHelper groupAlertTransferHelper,
+ VisualStabilityManager visualStabilityManager,
+ DeviceProvisionedController deviceProvisionedController,
+ NavigationBarController navigationBarController,
+ AssistManager assistManager,
+ NotificationListener notificationListener,
+ ConfigurationController configurationController,
+ StatusBarWindowController statusBarWindowController) {
+ mLightBarController = lightBarController;
+ mAutoHideController = autoHideController;
+ mKeyguardUpdateMonitor = keyguardUpdateMonitor;
+ mIconController = statusBarIconController;
+ mDozeLog = dozeLog;
+ mInjectionInflater = injectionInflationController;
+ mPulseExpansionHandler = pulseExpansionHandler;
+ mWakeUpCoordinator = notificationWakeUpCoordinator;
+ mKeyguardBypassController = keyguardBypassController;
+ mKeyguardStateController = keyguardStateController;
+ mHeadsUpManager = headsUpManagerPhone;
+ mDynamicPrivacyController = dynamicPrivacyController;
+ mBypassHeadsUpNotifier = bypassHeadsUpNotifier;
+ mAllowNotificationLongPress = allowNotificationLongPress;
+ mNotifPipelineInitializer = notifPipelineInitializer;
+ mFalsingManager = falsingManager;
+ mBroadcastDispatcher = broadcastDispatcher;
+ mRemoteInputQuickSettingsDisabler = remoteInputQuickSettingsDisabler;
+ mGutsManager = notificationGutsManager;
+ mNotificationLogger = notificationLogger;
+ mEntryManager = notificationEntryManager;
+ mNotificationInterruptionStateProvider = notificationInterruptionStateProvider;
+ mViewHierarchyManager = notificationViewHierarchyManager;
+ mForegroundServiceController = foregroundServiceController;
+ mAppOpsController = appOpsController;
+ mKeyguardViewMediator = keyguardViewMediator;
+ mZenController = zenModeController;
+ mNotificationAlertingManager = notificationAlertingManager;
+ mDisplayMetrics = displayMetrics;
+ mMetricsLogger = metricsLogger;
+ mUiOffloadThread = uiOffloadThread;
+ mMediaManager = notificationMediaManager;
+ mLockscreenUserManager = lockScreenUserManager;
+ mRemoteInputManager = remoteInputManager;
+ mUserSwitcherController = userSwitcherController;
+ mNetworkController = networkController;
+ mBatteryController = batteryController;
+ mColorExtractor = colorExtractor;
+ mScreenLifecycle = screenLifecycle;
+ mWakefulnessLifecycle = wakefulnessLifecycle;
+ mStatusBarStateController = statusBarStateController;
+ mVibratorHelper = vibratorHelper;
+ mBubbleController = bubbleController;
+ mGroupManager = groupManager;
+ mGroupAlertTransferHelper = groupAlertTransferHelper;
+ mVisualStabilityManager = visualStabilityManager;
+ mDeviceProvisionedController = deviceProvisionedController;
+ mNavigationBarController = navigationBarController;
+ mAssistManager = assistManager;
+ mNotificationListener = notificationListener;
+ mConfigurationController = configurationController;
+ mStatusBarWindowController = statusBarWindowController;
+
+ mBubbleExpandListener =
+ (isExpanding, key) -> {
+ mEntryManager.updateNotifications();
+ updateScrimController();
+ };
+ }
+
@Override
public void start() {
mNotificationListener.registerAsSystemService();
@@ -772,7 +863,7 @@ public class StatusBar extends SystemUI implements DemoMode,
Dependency.get(ActivityStarterDelegate.class).setActivityStarterImpl(this);
- Dependency.get(ConfigurationController.class).addCallback(this);
+ mConfigurationController.addCallback(this);
// set the initial view visibility
Dependency.get(InitController.class).addPostInitTask(this::updateAreThereNotifications);
@@ -805,6 +896,8 @@ public class StatusBar extends SystemUI implements DemoMode,
NotificationListContainer notifListContainer = (NotificationListContainer) mStackScroller;
mNotificationLogger.setUpWithContainer(notifListContainer);
+ // TODO: make this injectable. Currently that would create a circular dependency between
+ // NotificationIconAreaController and StatusBar.
mNotificationIconAreaController = SystemUIFactory.getInstance()
.createNotificationIconAreaController(context, this,
mWakeUpCoordinator, mKeyguardBypassController,
@@ -869,7 +962,7 @@ public class StatusBar extends SystemUI implements DemoMode,
.commit();
mHeadsUpManager.setUp(mStatusBarWindow, mGroupManager, this, mVisualStabilityManager);
- Dependency.get(ConfigurationController.class).addCallback(mHeadsUpManager);
+ mConfigurationController.addCallback(mHeadsUpManager);
mHeadsUpManager.addListener(this);
mHeadsUpManager.addListener(mNotificationPanel);
mHeadsUpManager.addListener(mGroupManager);
@@ -1004,11 +1097,10 @@ public class StatusBar extends SystemUI implements DemoMode,
});
}
- PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
- if (!pm.isScreenOn()) {
+ if (!mPowerManager.isScreenOn()) {
mBroadcastReceiver.onReceive(mContext, new Intent(Intent.ACTION_SCREEN_OFF));
}
- mGestureWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK,
+ mGestureWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK,
"GestureWakeLock");
mVibrator = mContext.getSystemService(Vibrator.class);
int[] pattern = mContext.getResources().getIntArray(
@@ -1131,8 +1223,8 @@ public class StatusBar extends SystemUI implements DemoMode,
@Override
public void wakeUpIfDozing(long time, View where, String why) {
if (mDozing) {
- PowerManager pm = mContext.getSystemService(PowerManager.class);
- pm.wakeUp(time, PowerManager.WAKE_REASON_GESTURE, "com.android.systemui:" + why);
+ mPowerManager.wakeUp(
+ time, PowerManager.WAKE_REASON_GESTURE, "com.android.systemui:" + why);
mWakeUpComingFromTouch = true;
where.getLocationInWindow(mTmpInt2);
mWakeUpTouchLocation = new PointF(mTmpInt2[0] + where.getWidth() / 2,
@@ -1232,13 +1324,12 @@ public class StatusBar extends SystemUI implements DemoMode,
protected void startKeyguard() {
Trace.beginSection("StatusBar#startKeyguard");
- KeyguardViewMediator keyguardViewMediator = getComponent(KeyguardViewMediator.class);
mBiometricUnlockController = new BiometricUnlockController(mContext,
- mDozeScrimController, keyguardViewMediator,
+ mDozeScrimController, mKeyguardViewMediator,
mScrimController, this, mKeyguardStateController, new Handler(),
mKeyguardUpdateMonitor, mKeyguardBypassController);
putComponent(BiometricUnlockController.class, mBiometricUnlockController);
- mStatusBarKeyguardViewManager = keyguardViewMediator.registerStatusBar(this,
+ mStatusBarKeyguardViewManager = mKeyguardViewMediator.registerStatusBar(this,
getBouncerContainer(), mNotificationPanel, mBiometricUnlockController,
mStatusBarWindow.findViewById(R.id.lock_icon_container), mStackScroller,
mKeyguardBypassController);
@@ -1248,7 +1339,7 @@ public class StatusBar extends SystemUI implements DemoMode,
mRemoteInputManager.getController().addCallback(mStatusBarKeyguardViewManager);
mDynamicPrivacyController.setStatusBarKeyguardViewManager(mStatusBarKeyguardViewManager);
- mKeyguardViewMediatorCallback = keyguardViewMediator.getViewMediatorCallback();
+ mKeyguardViewMediatorCallback = mKeyguardViewMediator.getViewMediatorCallback();
mLightBarController.setBiometricUnlockController(mBiometricUnlockController);
mMediaManager.setBiometricUnlockController(mBiometricUnlockController);
Dependency.get(KeyguardDismissUtil.class).setDismissHandler(this::executeWhenUnlocked);
@@ -1734,6 +1825,16 @@ public class StatusBar extends SystemUI implements DemoMode,
return mPresenter;
}
+ @VisibleForTesting
+ void setBarStateForTest(int state) {
+ mState = state;
+ }
+
+ @VisibleForTesting
+ void setUserSetupForTest(boolean userSetup) {
+ mUserSetup = userSetup;
+ }
+
/**
* All changes to the status bar and notifications funnel through here and are batched.
*/
@@ -2425,7 +2526,6 @@ public class StatusBar extends SystemUI implements DemoMode,
public void createAndAddWindows(@Nullable RegisterStatusBarResult result) {
makeStatusBarView(result);
- mStatusBarWindowController = Dependency.get(StatusBarWindowController.class);
mStatusBarWindowController.add(mStatusBarWindow, getStatusBarHeight());
}
@@ -2669,7 +2769,6 @@ public class StatusBar extends SystemUI implements DemoMode,
}
}
- // SystemUIService notifies SystemBars of configuration changes, which then calls down here
@Override
public void onConfigChanged(Configuration newConfig) {
updateResources();
@@ -3251,7 +3350,7 @@ public class StatusBar extends SystemUI implements DemoMode,
final int themeResId = lockDarkText ? R.style.Theme_SystemUI_Light : R.style.Theme_SystemUI;
if (mContext.getThemeResId() != themeResId) {
mContext.setTheme(themeResId);
- Dependency.get(ConfigurationController.class).notifyThemeChanged();
+ mConfigurationController.notifyThemeChanged();
}
}
@@ -3798,8 +3897,7 @@ public class StatusBar extends SystemUI implements DemoMode,
return;
}
if (!mDeviceInteractive) {
- PowerManager pm = mContext.getSystemService(PowerManager.class);
- pm.wakeUp(SystemClock.uptimeMillis(), PowerManager.WAKE_REASON_CAMERA_LAUNCH,
+ mPowerManager.wakeUp(SystemClock.uptimeMillis(), PowerManager.WAKE_REASON_CAMERA_LAUNCH,
"com.android.systemui:CAMERA_GESTURE");
}
vibrateForCameraGesture();
@@ -4188,11 +4286,11 @@ public class StatusBar extends SystemUI implements DemoMode,
// all notifications
protected ViewGroup mStackScroller;
- @Inject NotificationGroupManager mGroupManager;
- @Inject NotificationGroupAlertTransferHelper mGroupAlertTransferHelper;
+ private final NotificationGroupManager mGroupManager;
+ private final NotificationGroupAlertTransferHelper mGroupAlertTransferHelper;
// handling reordering
- @Inject VisualStabilityManager mVisualStabilityManager;
+ private final VisualStabilityManager mVisualStabilityManager;
protected AccessibilityManager mAccessibilityManager;
@@ -4208,9 +4306,9 @@ public class StatusBar extends SystemUI implements DemoMode,
protected StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
protected KeyguardManager mKeyguardManager;
- @Inject DeviceProvisionedController mDeviceProvisionedController;
+ private final DeviceProvisionedController mDeviceProvisionedController;
- @Inject protected NavigationBarController mNavigationBarController;
+ private final NavigationBarController mNavigationBarController;
// UI-specific methods
@@ -4226,7 +4324,7 @@ public class StatusBar extends SystemUI implements DemoMode,
protected NotificationShelf mNotificationShelf;
protected EmptyShadeView mEmptyShadeView;
- @Inject AssistManager mAssistManager;
+ private final AssistManager mAssistManager;
public boolean isDeviceInteractive() {
return mDeviceInteractive;
@@ -4285,7 +4383,7 @@ public class StatusBar extends SystemUI implements DemoMode,
}
}
- @Inject NotificationListener mNotificationListener;
+ private final NotificationListener mNotificationListener;
public void setNotificationSnoozed(StatusBarNotification sbn, SnoozeOption snoozeOption) {
if (snoozeOption.getSnoozeCriterion() != null) {
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 f163886193b4..144935212c27 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
@@ -65,7 +65,7 @@ import android.view.ViewGroup.LayoutParams;
import androidx.test.filters.SmallTest;
-import com.android.internal.logging.MetricsLogger;
+import com.android.internal.colorextraction.ColorExtractor;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.logging.testing.FakeMetricsLogger;
import com.android.internal.statusbar.IStatusBarService;
@@ -89,7 +89,6 @@ import com.android.systemui.keyguard.KeyguardViewMediator;
import com.android.systemui.keyguard.ScreenLifecycle;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.plugins.ActivityStarter.OnDismissAction;
-import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.KeyguardIndicationController;
@@ -100,14 +99,15 @@ import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.NotificationPresenter;
import com.android.systemui.statusbar.NotificationRemoteInputManager;
-import com.android.systemui.statusbar.NotificationShelf;
import com.android.systemui.statusbar.NotificationViewHierarchyManager;
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.SysuiStatusBarStateController;
+import com.android.systemui.statusbar.VibratorHelper;
import com.android.systemui.statusbar.notification.BypassHeadsUpNotifier;
+import com.android.systemui.statusbar.notification.DynamicPrivacyController;
+import com.android.systemui.statusbar.notification.NotifPipelineInitializer;
import com.android.systemui.statusbar.notification.NotificationAlertingManager;
import com.android.systemui.statusbar.notification.NotificationEntryListener;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
@@ -122,10 +122,14 @@ import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
import com.android.systemui.statusbar.policy.BatteryController;
+import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
+import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
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;
@@ -144,6 +148,15 @@ import java.util.HashSet;
@RunWith(AndroidTestingRunner.class)
@RunWithLooper(setAsMainLooper = true)
public class StatusBarTest extends SysuiTestCase {
+
+ private StatusBar mStatusBar;
+ private FakeMetricsLogger mMetricsLogger;
+ private PowerManager mPowerManager;
+ private TestableNotificationInterruptionStateProvider mNotificationInterruptionStateProvider;
+ private CommandQueue mCommandQueue;
+
+ @Mock private LightBarController mLightBarController;
+ @Mock private StatusBarIconController mStatusBarIconController;
@Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
@Mock private KeyguardStateController mKeyguardStateController;
@Mock private KeyguardIndicationController mKeyguardIndicationController;
@@ -158,7 +171,6 @@ public class StatusBarTest extends SysuiTestCase {
@Mock private BiometricUnlockController mBiometricUnlockController;
@Mock private NotificationData mNotificationData;
@Mock private NotificationInterruptionStateProvider.HeadsUpSuppressor mHeadsUpSuppressor;
- @Mock private NotificationViewHierarchyManager mViewHierarchyManager;
@Mock private VisualStabilityManager mVisualStabilityManager;
@Mock private NotificationListener mNotificationListener;
@Mock private KeyguardViewMediator mKeyguardViewMediator;
@@ -185,17 +197,25 @@ public class StatusBarTest extends SysuiTestCase {
@Mock private NavigationBarController mNavigationBarController;
@Mock private BypassHeadsUpNotifier mBypassHeadsUpNotifier;
@Mock private SysuiColorExtractor mColorExtractor;
+ @Mock private ColorExtractor.GradientColors mGradientColors;
@Mock private DozeLog mDozeLog;
@Mock private PulseExpansionHandler mPulseExpansionHandler;
- @Mock private RemoteInputQuickSettingsDisabler mRemoteInputQuickSettingsDisabler;
@Mock private NotificationWakeUpCoordinator mNotificationWakeUpCoordinator;
@Mock private KeyguardBypassController mKeyguardBypassController;
-
- private TestableStatusBar mStatusBar;
- private FakeMetricsLogger mMetricsLogger;
- private PowerManager mPowerManager;
- private TestableNotificationInterruptionStateProvider mNotificationInterruptionStateProvider;
- private CommandQueue mCommandQueue;
+ @Mock private InjectionInflationController mInjectionInflationController;
+ @Mock private DynamicPrivacyController mDynamicPrivacyController;
+ @Mock private NotifPipelineInitializer mNotifPipelineInitializer;
+ @Mock private ZenModeController mZenModeController;
+ @Mock private AutoHideController mAutoHideController;
+ @Mock private NotificationViewHierarchyManager mNotificationViewHierarchyManager;
+ @Mock private UserSwitcherController mUserSwitcherController;
+ @Mock private NetworkController mNetworkController;
+ @Mock private VibratorHelper mVibratorHelper;
+ @Mock private BubbleController mBubbleController;
+ @Mock private NotificationGroupManager mGroupManager;
+ @Mock private NotificationGroupAlertTransferHelper mGroupAlertTransferHelper;
+ @Mock private StatusBarWindowController mStatusBarWindowController;
+ @Mock private NotificationIconAreaController mNotificationIconAreaController;
@Before
public void setup() throws Exception {
@@ -249,65 +269,88 @@ public class StatusBarTest extends SysuiTestCase {
mHeadsUpManager, mHeadsUpSuppressor);
when(mRemoteInputManager.getController()).thenReturn(mRemoteInputController);
- mStatusBar = new TestableStatusBar(
- mStatusBarKeyguardViewManager,
- mKeyguardIndicationController,
- mStackScroller,
- mPowerManager,
- mNotificationPanelView,
- mBarService,
- mNotificationListener,
- notificationLogger,
- mVisualStabilityManager,
- mViewHierarchyManager,
- entryManager,
- mScrimController,
- mBiometricUnlockController,
- mKeyguardViewMediator,
- mRemoteInputManager,
- mock(NotificationGroupManager.class),
- mock(NotificationGroupAlertTransferHelper.class),
- new FalsingManagerFake(),
- mock(StatusBarWindowController.class),
- mock(NotificationIconAreaController.class),
- mDozeScrimController,
- mock(NotificationShelf.class),
- mLockscreenUserManager,
- mCommandQueue,
- mNotificationPresenter,
- mock(BubbleController.class),
- mNavigationBarController,
- mock(AutoHideController.class),
+
+ WakefulnessLifecycle wakefulnessLifecycle = new WakefulnessLifecycle();
+ wakefulnessLifecycle.dispatchStartedWakingUp();
+ wakefulnessLifecycle.dispatchFinishedWakingUp();
+
+ when(mGradientColors.supportsDarkText()).thenReturn(true);
+ when(mColorExtractor.getNeutralColors()).thenReturn(mGradientColors);
+ ConfigurationController configurationController = new ConfigurationControllerImpl(mContext);
+
+ mStatusBar = new StatusBar(
+ mLightBarController,
+ mAutoHideController,
mKeyguardUpdateMonitor,
- mStatusBarWindowView,
+ mStatusBarIconController,
+ mDozeLog,
+ mInjectionInflationController,
+ mPulseExpansionHandler,
+ mNotificationWakeUpCoordinator,
+ mKeyguardBypassController,
+ mKeyguardStateController,
+ mHeadsUpManager,
+ mDynamicPrivacyController,
+ mBypassHeadsUpNotifier,
+ true,
+ mNotifPipelineInitializer,
+ new FalsingManagerFake(),
mBroadcastDispatcher,
- mAssistManager,
+ new RemoteInputQuickSettingsDisabler(
+ mContext,
+ configurationController
+ ),
mNotificationGutsManager,
- mNotificationMediaManager,
+ notificationLogger,
+ entryManager,
+ mNotificationInterruptionStateProvider,
+ mNotificationViewHierarchyManager,
mForegroundServiceController,
mAppOpsController,
- mStatusBarStateController,
- mDeviceProvisionedController,
+ mKeyguardViewMediator,
+ mZenModeController,
mNotificationAlertingManager,
- mNotificationInterruptionStateProvider,
- mMetricsLogger,
- mHeadsUpManager,
- mKeyguardStateController,
- new ScreenLifecycle(),
- mBypassHeadsUpNotifier,
- mColorExtractor,
new DisplayMetrics(),
+ mMetricsLogger,
Dependency.get(UiOffloadThread.class),
- mDozeLog,
- mPulseExpansionHandler,
- new RemoteInputQuickSettingsDisabler(
- mContext,
- new ConfigurationControllerImpl(mContext)
- ),
- mNotificationWakeUpCoordinator,
- mKeyguardBypassController);
+ mNotificationMediaManager,
+ mLockscreenUserManager,
+ mRemoteInputManager,
+ mUserSwitcherController,
+ mNetworkController,
+ mBatteryController,
+ mColorExtractor,
+ new ScreenLifecycle(),
+ wakefulnessLifecycle,
+ mStatusBarStateController,
+ mVibratorHelper,
+ mBubbleController,
+ mGroupManager,
+ mGroupAlertTransferHelper,
+ mVisualStabilityManager,
+ mDeviceProvisionedController,
+ mNavigationBarController,
+ mAssistManager,
+ mNotificationListener,
+ configurationController,
+ mStatusBarWindowController);
+ // TODO: we should be able to call mStatusBar.start() and have all the below values
+ // initialized automatically.
mStatusBar.mContext = mContext;
mStatusBar.mComponents = mContext.getComponents();
+ mStatusBar.mStatusBarKeyguardViewManager = mStatusBarKeyguardViewManager;
+ mStatusBar.mStatusBarWindow = mStatusBarWindowView;
+ mStatusBar.mBiometricUnlockController = mBiometricUnlockController;
+ mStatusBar.mScrimController = mScrimController;
+ mStatusBar.mNotificationPanel = mNotificationPanelView;
+ mStatusBar.mCommandQueue = mCommandQueue;
+ mStatusBar.mDozeScrimController = mDozeScrimController;
+ mStatusBar.mNotificationIconAreaController = mNotificationIconAreaController;
+ mStatusBar.mPresenter = mNotificationPresenter;
+ mStatusBar.mKeyguardIndicationController = mKeyguardIndicationController;
+ mStatusBar.mPowerManager = mPowerManager;
+ mStatusBar.mBarService = mBarService;
+ mStatusBar.mStackScroller = mStackScroller;
mStatusBar.putComponent(StatusBar.class, mStatusBar);
Dependency.get(InitController.class).executePostInitTasks();
entryManager.setUpForTest(mock(NotificationPresenter.class), mStackScroller,
@@ -636,8 +679,8 @@ public class StatusBarTest extends SysuiTestCase {
@Test
@RunWithLooper(setAsMainLooper = true)
public void testUpdateKeyguardState_DoesNotCrash() {
- mStatusBar.mState = StatusBarState.KEYGUARD;
- when(mStatusBar.mLockscreenUserManager.getCurrentProfiles()).thenReturn(
+ mStatusBar.setBarStateForTest(StatusBarState.KEYGUARD);
+ when(mLockscreenUserManager.getCurrentProfiles()).thenReturn(
new SparseArray<>());
mStatusBar.onStateChanged(StatusBarState.SHADE);
}
@@ -768,8 +811,7 @@ public class StatusBarTest extends SysuiTestCase {
verify(mStatusBarStateController).setState(eq(StatusBarState.KEYGUARD));
// If useFullscreenUserSwitcher is true, state is set to FULLSCREEN_USER_SWITCHER.
- mStatusBar.mUserSwitcherController = mock(UserSwitcherController.class);
- when(mStatusBar.mUserSwitcherController.useFullscreenUserSwitcher()).thenReturn(true);
+ when(mUserSwitcherController.useFullscreenUserSwitcher()).thenReturn(true);
mStatusBar.showKeyguardImpl();
verify(mStatusBarStateController).setState(eq(StatusBarState.FULLSCREEN_USER_SWITCHER));
}
@@ -821,136 +863,6 @@ public class StatusBarTest extends SysuiTestCase {
any(UserHandle.class));
}
- static class TestableStatusBar extends StatusBar {
- public TestableStatusBar(StatusBarKeyguardViewManager man,
- KeyguardIndicationController key,
- NotificationStackScrollLayout stack,
- PowerManager pm, NotificationPanelView panelView,
- IStatusBarService barService, NotificationListener notificationListener,
- NotificationLogger notificationLogger,
- VisualStabilityManager visualStabilityManager,
- NotificationViewHierarchyManager viewHierarchyManager,
- TestableNotificationEntryManager entryManager, ScrimController scrimController,
- BiometricUnlockController biometricUnlockController,
- KeyguardViewMediator keyguardViewMediator,
- NotificationRemoteInputManager notificationRemoteInputManager,
- NotificationGroupManager notificationGroupManager,
- NotificationGroupAlertTransferHelper notificationGroupAlertTransferHelper,
- FalsingManager falsingManager,
- StatusBarWindowController statusBarWindowController,
- NotificationIconAreaController notificationIconAreaController,
- DozeScrimController dozeScrimController,
- NotificationShelf notificationShelf,
- NotificationLockscreenUserManager notificationLockscreenUserManager,
- CommandQueue commandQueue,
- StatusBarNotificationPresenter notificationPresenter,
- BubbleController bubbleController,
- NavigationBarController navBarController,
- AutoHideController autoHideController,
- KeyguardUpdateMonitor keyguardUpdateMonitor,
- StatusBarWindowView statusBarWindow,
- BroadcastDispatcher broadcastDispatcher,
- AssistManager assistManager,
- NotificationGutsManager notificationGutsManager,
- NotificationMediaManager notificationMediaManager,
- ForegroundServiceController foregroundServiceController,
- AppOpsController appOpsController,
- SysuiStatusBarStateController statusBarStateController,
- DeviceProvisionedController deviceProvisionedController,
- NotificationAlertingManager notificationAlertingManager,
- NotificationInterruptionStateProvider notificationInterruptionStateProvider,
- MetricsLogger metricsLogger,
- HeadsUpManagerPhone headsUpManager,
- KeyguardStateController keyguardStateController,
- ScreenLifecycle screenLifecycle,
- BypassHeadsUpNotifier bypassHeadsUpNotifier,
- SysuiColorExtractor colorExtractor, DisplayMetrics displayMetrics,
- UiOffloadThread uiOffloadThread,
- DozeLog dozeLog,
- PulseExpansionHandler pulseExpansionHandler,
- RemoteInputQuickSettingsDisabler remoteInputQuickSettingsDisabler,
- NotificationWakeUpCoordinator notificationWakeUpCoordinator,
- KeyguardBypassController keyguardBypassController) {
- mStatusBarKeyguardViewManager = man;
- mKeyguardIndicationController = key;
- mStackScroller = stack;
- mPowerManager = pm;
- mNotificationPanel = panelView;
- mBarService = barService;
- mNotificationListener = notificationListener;
- mNotificationLogger = notificationLogger;
- mWakefulnessLifecycle = createAwakeWakefulnessLifecycle();
- mVisualStabilityManager = visualStabilityManager;
- mViewHierarchyManager = viewHierarchyManager;
- mEntryManager = entryManager;
- mScrimController = scrimController;
- mBiometricUnlockController = biometricUnlockController;
- mKeyguardViewMediator = keyguardViewMediator;
- mRemoteInputManager = notificationRemoteInputManager;
- mGroupManager = notificationGroupManager;
- mGroupAlertTransferHelper = notificationGroupAlertTransferHelper;
- mFalsingManager = falsingManager;
- mStatusBarWindowController = statusBarWindowController;
- mNotificationIconAreaController = notificationIconAreaController;
- mDozeScrimController = dozeScrimController;
- mNotificationShelf = notificationShelf;
- mLockscreenUserManager = notificationLockscreenUserManager;
- mCommandQueue = commandQueue;
- mPresenter = notificationPresenter;
- mGestureWakeLock = mock(PowerManager.WakeLock.class);
- mBubbleController = bubbleController;
- mNavigationBarController = navBarController;
- mAutoHideController = autoHideController;
- mKeyguardUpdateMonitor = keyguardUpdateMonitor;
- mStatusBarWindow = statusBarWindow;
- mDozeServiceHost.mWakeLockScreenPerformsAuth = false;
- mBroadcastDispatcher = broadcastDispatcher;
- mAssistManager = assistManager;
- mGutsManager = notificationGutsManager;
- mMediaManager = notificationMediaManager;
- mForegroundServiceController = foregroundServiceController;
- mAppOpsController = appOpsController;
- mStatusBarStateController = statusBarStateController;
- mDeviceProvisionedController = deviceProvisionedController;
- mNotificationAlertingManager = notificationAlertingManager;
- mNotificationInterruptionStateProvider = notificationInterruptionStateProvider;
- mMetricsLogger = metricsLogger;
- mHeadsUpManager = headsUpManager;
- mKeyguardStateController = keyguardStateController;
- mScreenLifecycle = screenLifecycle;
- mBypassHeadsUpNotifier = bypassHeadsUpNotifier;
- mColorExtractor = colorExtractor;
- mDisplayMetrics = displayMetrics;
- mUiOffloadThread = uiOffloadThread;
- mDozeLog = dozeLog;
- mPulseExpansionHandler = pulseExpansionHandler;
- mRemoteInputQuickSettingsDisabler = remoteInputQuickSettingsDisabler;
- mWakeUpCoordinator = notificationWakeUpCoordinator;
- mKeyguardBypassController = keyguardBypassController;
- }
-
- private WakefulnessLifecycle createAwakeWakefulnessLifecycle() {
- WakefulnessLifecycle wakefulnessLifecycle = new WakefulnessLifecycle();
- wakefulnessLifecycle.dispatchStartedWakingUp();
- wakefulnessLifecycle.dispatchFinishedWakingUp();
- return wakefulnessLifecycle;
- }
-
- @Override
- protected void updateTheme() {
- // Do nothing for now, until we have more mocking and StatusBar is smaller.
- }
-
- public void setBarStateForTest(int state) {
- mState = state;
- }
-
- public void setUserSetupForTest(boolean userSetup) {
- mUserSetup = userSetup;
- }
-
- }
-
public static class TestableNotificationEntryManager extends NotificationEntryManager {
public TestableNotificationEntryManager(Context context) {
@@ -969,7 +881,7 @@ public class StatusBarTest extends SysuiTestCase {
public static class TestableNotificationInterruptionStateProvider extends
NotificationInterruptionStateProvider {
- public TestableNotificationInterruptionStateProvider(
+ TestableNotificationInterruptionStateProvider(
Context context,
PowerManager powerManager,
IDreamManager dreamManager,