Remove call to getComponent(StatusBar) from OverviewProxyRecentsImpl.
StatusBar is now marked as an Optional component. This also makes implementations of RecentsImplementation injectable. Bug: 143224715 Test: atest SystemUITests && manual Change-Id: I9a8c4af477693d133f06b8dbda2f08d904cfdb57
This commit is contained in:
@@ -16,19 +16,87 @@
|
||||
|
||||
package com.android.systemui;
|
||||
|
||||
import static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.PowerManager;
|
||||
import android.util.DisplayMetrics;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||
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.colorextraction.SysuiColorExtractor;
|
||||
import com.android.systemui.doze.DozeLog;
|
||||
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||
import com.android.systemui.keyguard.ScreenLifecycle;
|
||||
import com.android.systemui.keyguard.WakefulnessLifecycle;
|
||||
import com.android.systemui.navigationbar.car.CarNavigationBar;
|
||||
import com.android.systemui.navigationbar.car.CarNavigationBarController;
|
||||
import com.android.systemui.pip.PipUI;
|
||||
import com.android.systemui.plugins.FalsingManager;
|
||||
import com.android.systemui.power.PowerUI;
|
||||
import com.android.systemui.recents.Recents;
|
||||
import com.android.systemui.recents.RecentsModule;
|
||||
import com.android.systemui.statusbar.FeatureFlags;
|
||||
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.SysuiStatusBarStateController;
|
||||
import com.android.systemui.statusbar.VibratorHelper;
|
||||
import com.android.systemui.statusbar.car.CarStatusBar;
|
||||
import com.android.systemui.statusbar.notification.BypassHeadsUpNotifier;
|
||||
import com.android.systemui.statusbar.notification.DynamicPrivacyController;
|
||||
import com.android.systemui.statusbar.notification.NewNotifPipeline;
|
||||
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.NotifLog;
|
||||
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.BiometricUnlockController;
|
||||
import com.android.systemui.statusbar.phone.DozeParameters;
|
||||
import com.android.systemui.statusbar.phone.DozeScrimController;
|
||||
import com.android.systemui.statusbar.phone.DozeServiceHost;
|
||||
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.LockscreenWallpaper;
|
||||
import com.android.systemui.statusbar.phone.NotificationGroupAlertTransferHelper;
|
||||
import com.android.systemui.statusbar.phone.NotificationGroupManager;
|
||||
import com.android.systemui.statusbar.phone.ScrimController;
|
||||
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.phone.StatusBarWindowViewController;
|
||||
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 com.android.systemui.util.leak.GarbageMonitor;
|
||||
import com.android.systemui.volume.VolumeUI;
|
||||
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Binds;
|
||||
import dagger.Lazy;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import dagger.multibindings.ClassKey;
|
||||
import dagger.multibindings.IntoMap;
|
||||
|
||||
@@ -100,4 +168,141 @@ public abstract class CarSystemUIBinder {
|
||||
@IntoMap
|
||||
@ClassKey(VolumeUI.class)
|
||||
public abstract SystemUI bindVolumeUI(VolumeUI sysui);
|
||||
|
||||
/**
|
||||
* Provides our instance of StatusBar which is considered optional.
|
||||
*/
|
||||
@Provides
|
||||
@Singleton
|
||||
static CarStatusBar provideStatusBar(
|
||||
Context context,
|
||||
FeatureFlags featureFlags,
|
||||
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,
|
||||
Lazy<NewNotifPipeline> newNotifPipeline,
|
||||
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,
|
||||
StatusBarWindowViewController.Builder statusBarWindowViewControllerBuilder,
|
||||
NotifLog notifLog,
|
||||
DozeParameters dozeParameters,
|
||||
ScrimController scrimController,
|
||||
Lazy<LockscreenWallpaper> lockscreenWallpaperLazy,
|
||||
Lazy<BiometricUnlockController> biometricUnlockControllerLazy,
|
||||
DozeServiceHost dozeServiceHost,
|
||||
PowerManager powerManager,
|
||||
DozeScrimController dozeScrimController,
|
||||
CarNavigationBarController carNavigationBarController) {
|
||||
return new CarStatusBar(
|
||||
context,
|
||||
featureFlags,
|
||||
lightBarController,
|
||||
autoHideController,
|
||||
keyguardUpdateMonitor,
|
||||
statusBarIconController,
|
||||
dozeLog,
|
||||
injectionInflationController,
|
||||
pulseExpansionHandler,
|
||||
notificationWakeUpCoordinator,
|
||||
keyguardBypassController,
|
||||
keyguardStateController,
|
||||
headsUpManagerPhone,
|
||||
dynamicPrivacyController,
|
||||
bypassHeadsUpNotifier,
|
||||
allowNotificationLongPress,
|
||||
newNotifPipeline,
|
||||
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,
|
||||
statusBarWindowViewControllerBuilder,
|
||||
notifLog,
|
||||
dozeParameters,
|
||||
scrimController,
|
||||
lockscreenWallpaperLazy,
|
||||
biometricUnlockControllerLazy,
|
||||
dozeServiceHost,
|
||||
powerManager,
|
||||
dozeScrimController,
|
||||
carNavigationBarController);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,16 +134,13 @@ import java.io.FileDescriptor;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Lazy;
|
||||
|
||||
/**
|
||||
* A status bar tailored for the automotive use case.
|
||||
*/
|
||||
@Singleton
|
||||
public class CarStatusBar extends StatusBar implements CarBatteryController.BatteryViewHandler {
|
||||
private static final String TAG = "CarStatusBar";
|
||||
// used to calculate how fast to open or close the window
|
||||
@@ -236,7 +233,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
|
||||
}
|
||||
};
|
||||
|
||||
@Inject
|
||||
public CarStatusBar(
|
||||
Context context,
|
||||
FeatureFlags featureFlags,
|
||||
|
||||
@@ -20,6 +20,7 @@ import android.app.Activity;
|
||||
import android.app.Service;
|
||||
|
||||
import com.android.systemui.SystemUI;
|
||||
import com.android.systemui.recents.RecentsImplementation;
|
||||
|
||||
/**
|
||||
* Interface necessary to make Dagger happy. See {@link ContextComponentResolver}.
|
||||
@@ -28,6 +29,9 @@ public interface ContextComponentHelper {
|
||||
/** Turns a classname into an instance of the class or returns null. */
|
||||
Activity resolveActivity(String className);
|
||||
|
||||
/** Turns a classname into an instance of the class or returns null. */
|
||||
RecentsImplementation resolveRecents(String className);
|
||||
|
||||
/** Turns a classname into an instance of the class or returns null. */
|
||||
Service resolveService(String className);
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ import android.app.Activity;
|
||||
import android.app.Service;
|
||||
|
||||
import com.android.systemui.SystemUI;
|
||||
import com.android.systemui.recents.RecentsImplementation;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@@ -35,15 +36,17 @@ public class ContextComponentResolver implements ContextComponentHelper {
|
||||
private final Map<Class<?>, Provider<Activity>> mActivityCreators;
|
||||
private final Map<Class<?>, Provider<Service>> mServiceCreators;
|
||||
private final Map<Class<?>, Provider<SystemUI>> mSystemUICreators;
|
||||
private final Map<Class<?>, Provider<RecentsImplementation>> mRecentsCreators;
|
||||
|
||||
@Inject
|
||||
ContextComponentResolver(
|
||||
Map<Class<?>, Provider<Activity>> activityCreators,
|
||||
ContextComponentResolver(Map<Class<?>, Provider<Activity>> activityCreators,
|
||||
Map<Class<?>, Provider<Service>> serviceCreators,
|
||||
Map<Class<?>, Provider<SystemUI>> systemUICreators) {
|
||||
Map<Class<?>, Provider<SystemUI>> systemUICreators,
|
||||
Map<Class<?>, Provider<RecentsImplementation>> recentsCreators) {
|
||||
mActivityCreators = activityCreators;
|
||||
mServiceCreators = serviceCreators;
|
||||
mSystemUICreators = systemUICreators;
|
||||
mRecentsCreators = recentsCreators;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -54,6 +57,14 @@ public class ContextComponentResolver implements ContextComponentHelper {
|
||||
return resolve(className, mActivityCreators);
|
||||
}
|
||||
|
||||
/**
|
||||
* Looks up the RecentsImplementation class name to see if Dagger has an instance of it.
|
||||
*/
|
||||
@Override
|
||||
public RecentsImplementation resolveRecents(String className) {
|
||||
return resolve(className, mRecentsCreators);
|
||||
}
|
||||
|
||||
/**
|
||||
* Looks up the Service class name to see if Dagger has an instance of it.
|
||||
*/
|
||||
|
||||
@@ -16,20 +16,89 @@
|
||||
|
||||
package com.android.systemui.dagger;
|
||||
|
||||
import static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.PowerManager;
|
||||
import android.util.DisplayMetrics;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||
import com.android.systemui.ForegroundServiceController;
|
||||
import com.android.systemui.LatencyTester;
|
||||
import com.android.systemui.ScreenDecorations;
|
||||
import com.android.systemui.SystemUI;
|
||||
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.colorextraction.SysuiColorExtractor;
|
||||
import com.android.systemui.doze.DozeLog;
|
||||
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||
import com.android.systemui.keyguard.ScreenLifecycle;
|
||||
import com.android.systemui.keyguard.WakefulnessLifecycle;
|
||||
import com.android.systemui.pip.PipUI;
|
||||
import com.android.systemui.plugins.FalsingManager;
|
||||
import com.android.systemui.power.PowerUI;
|
||||
import com.android.systemui.recents.Recents;
|
||||
import com.android.systemui.recents.RecentsModule;
|
||||
import com.android.systemui.statusbar.FeatureFlags;
|
||||
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.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.NewNotifPipeline;
|
||||
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.NotifLog;
|
||||
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.BiometricUnlockController;
|
||||
import com.android.systemui.statusbar.phone.DozeParameters;
|
||||
import com.android.systemui.statusbar.phone.DozeScrimController;
|
||||
import com.android.systemui.statusbar.phone.DozeServiceHost;
|
||||
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.LockscreenWallpaper;
|
||||
import com.android.systemui.statusbar.phone.NotificationGroupAlertTransferHelper;
|
||||
import com.android.systemui.statusbar.phone.NotificationGroupManager;
|
||||
import com.android.systemui.statusbar.phone.ScrimController;
|
||||
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.phone.StatusBarWindowViewController;
|
||||
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 com.android.systemui.util.leak.GarbageMonitor;
|
||||
import com.android.systemui.volume.VolumeUI;
|
||||
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Binds;
|
||||
import dagger.Lazy;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import dagger.multibindings.ClassKey;
|
||||
import dagger.multibindings.IntoMap;
|
||||
|
||||
@@ -93,4 +162,139 @@ public abstract class SystemUIBinder {
|
||||
@ClassKey(VolumeUI.class)
|
||||
public abstract SystemUI bindVolumeUI(VolumeUI sysui);
|
||||
|
||||
/**
|
||||
* Provides our instance of StatusBar which is considered optional.
|
||||
*/
|
||||
@Provides
|
||||
@Singleton
|
||||
static StatusBar provideStatusBar(
|
||||
Context context,
|
||||
FeatureFlags featureFlags,
|
||||
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,
|
||||
Lazy<NewNotifPipeline> newNotifPipeline,
|
||||
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,
|
||||
StatusBarWindowViewController.Builder statusBarWindowViewControllerBuilder,
|
||||
NotifLog notifLog,
|
||||
DozeParameters dozeParameters,
|
||||
ScrimController scrimController,
|
||||
Lazy<LockscreenWallpaper> lockscreenWallpaperLazy,
|
||||
Lazy<BiometricUnlockController> biometricUnlockControllerLazy,
|
||||
DozeServiceHost dozeServiceHost,
|
||||
PowerManager powerManager,
|
||||
DozeScrimController dozeScrimController) {
|
||||
return new StatusBar(
|
||||
context,
|
||||
featureFlags,
|
||||
lightBarController,
|
||||
autoHideController,
|
||||
keyguardUpdateMonitor,
|
||||
statusBarIconController,
|
||||
dozeLog,
|
||||
injectionInflationController,
|
||||
pulseExpansionHandler,
|
||||
notificationWakeUpCoordinator,
|
||||
keyguardBypassController,
|
||||
keyguardStateController,
|
||||
headsUpManagerPhone,
|
||||
dynamicPrivacyController,
|
||||
bypassHeadsUpNotifier,
|
||||
allowNotificationLongPress,
|
||||
newNotifPipeline,
|
||||
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,
|
||||
statusBarWindowViewControllerBuilder,
|
||||
notifLog,
|
||||
dozeParameters,
|
||||
scrimController,
|
||||
lockscreenWallpaperLazy,
|
||||
biometricUnlockControllerLazy,
|
||||
dozeServiceHost,
|
||||
powerManager,
|
||||
dozeScrimController);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -26,11 +26,13 @@ import com.android.systemui.model.SysUiState;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.notification.people.PeopleHubModule;
|
||||
import com.android.systemui.statusbar.phone.KeyguardLiftController;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
import com.android.systemui.util.sensors.AsyncSensorManager;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Binds;
|
||||
import dagger.BindsOptionalOf;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
|
||||
@@ -65,4 +67,7 @@ public abstract class SystemUIModule {
|
||||
static SysUiState provideSysUiState() {
|
||||
return new SysUiState();
|
||||
}
|
||||
|
||||
@BindsOptionalOf
|
||||
abstract StatusBar optionalStatusBar();
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
|
||||
import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
|
||||
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.app.ActivityManager;
|
||||
import android.app.trust.TrustManager;
|
||||
import android.content.Context;
|
||||
@@ -40,12 +41,22 @@ import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||
import com.android.systemui.stackdivider.Divider;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Lazy;
|
||||
|
||||
/**
|
||||
* An implementation of the Recents interface which proxies to the OverviewProxyService.
|
||||
*/
|
||||
@Singleton
|
||||
public class OverviewProxyRecentsImpl implements RecentsImplementation {
|
||||
|
||||
private final static String TAG = "OverviewProxyRecentsImpl";
|
||||
@Nullable
|
||||
private final Lazy<StatusBar> mStatusBarLazy;
|
||||
|
||||
private SysUiServiceProvider mSysUiServiceProvider;
|
||||
private Context mContext;
|
||||
@@ -53,6 +64,12 @@ public class OverviewProxyRecentsImpl implements RecentsImplementation {
|
||||
private TrustManager mTrustManager;
|
||||
private OverviewProxyService mOverviewProxyService;
|
||||
|
||||
@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
|
||||
@Inject
|
||||
public OverviewProxyRecentsImpl(Optional<Lazy<StatusBar>> statusBarLazy) {
|
||||
mStatusBarLazy = statusBarLazy.orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart(Context context, SysUiServiceProvider sysUiServiceProvider) {
|
||||
mContext = context;
|
||||
@@ -107,9 +124,8 @@ public class OverviewProxyRecentsImpl implements RecentsImplementation {
|
||||
}
|
||||
};
|
||||
// Preload only if device for current user is unlocked
|
||||
final StatusBar statusBar = mSysUiServiceProvider.getComponent(StatusBar.class);
|
||||
if (statusBar != null && statusBar.isKeyguardShowing()) {
|
||||
statusBar.executeRunnableDismissingKeyguard(() -> {
|
||||
if (mStatusBarLazy != null && mStatusBarLazy.get().isKeyguardShowing()) {
|
||||
mStatusBarLazy.get().executeRunnableDismissingKeyguard(() -> {
|
||||
// Flush trustmanager before checking device locked per user
|
||||
mTrustManager.reportKeyguardShowingChanged();
|
||||
mHandler.post(toggleRecents);
|
||||
|
||||
@@ -23,7 +23,10 @@ import com.android.systemui.SysUiServiceProvider;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
|
||||
interface RecentsImplementation {
|
||||
/**
|
||||
* API for creating a Recents view.
|
||||
*/
|
||||
public interface RecentsImplementation {
|
||||
default void onStart(Context context, SysUiServiceProvider sysUiServiceProvider) {}
|
||||
default void onBootCompleted() {}
|
||||
default void onAppTransitionFinished() {}
|
||||
|
||||
@@ -19,35 +19,53 @@ package com.android.systemui.recents;
|
||||
import android.content.Context;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.dagger.ContextComponentHelper;
|
||||
|
||||
import dagger.Binds;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import dagger.multibindings.ClassKey;
|
||||
import dagger.multibindings.IntoMap;
|
||||
|
||||
/**
|
||||
* Dagger injection module for {@link RecentsImplementation}
|
||||
*/
|
||||
@Module
|
||||
public class RecentsModule {
|
||||
public abstract class RecentsModule {
|
||||
|
||||
/**
|
||||
* @return The {@link RecentsImplementation} from the config.
|
||||
*/
|
||||
@Provides
|
||||
public RecentsImplementation provideRecentsImpl(Context context) {
|
||||
public static RecentsImplementation provideRecentsImpl(Context context,
|
||||
ContextComponentHelper componentHelper) {
|
||||
final String clsName = context.getString(R.string.config_recentsComponent);
|
||||
if (clsName == null || clsName.length() == 0) {
|
||||
throw new RuntimeException("No recents component configured", null);
|
||||
}
|
||||
Class<?> cls = null;
|
||||
try {
|
||||
cls = context.getClassLoader().loadClass(clsName);
|
||||
} catch (Throwable t) {
|
||||
throw new RuntimeException("Error loading recents component: " + clsName, t);
|
||||
}
|
||||
try {
|
||||
RecentsImplementation impl = (RecentsImplementation) cls.newInstance();
|
||||
return impl;
|
||||
} catch (Throwable t) {
|
||||
throw new RuntimeException("Error creating recents component: " + clsName, t);
|
||||
RecentsImplementation impl = componentHelper.resolveRecents(clsName);
|
||||
|
||||
if (impl == null) {
|
||||
Class<?> cls = null;
|
||||
try {
|
||||
cls = context.getClassLoader().loadClass(clsName);
|
||||
} catch (Throwable t) {
|
||||
throw new RuntimeException("Error loading recents component: " + clsName, t);
|
||||
}
|
||||
try {
|
||||
impl = (RecentsImplementation) cls.newInstance();
|
||||
} catch (Throwable t) {
|
||||
throw new RuntimeException("Error creating recents component: " + clsName, t);
|
||||
}
|
||||
}
|
||||
|
||||
return impl;
|
||||
}
|
||||
|
||||
/** */
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ClassKey(OverviewProxyRecentsImpl.class)
|
||||
public abstract RecentsImplementation bindOverviewProxyRecentsImpl(
|
||||
OverviewProxyRecentsImpl impl);
|
||||
}
|
||||
|
||||
@@ -156,6 +156,7 @@ import com.android.systemui.bubbles.BubbleController;
|
||||
import com.android.systemui.charging.WirelessChargingAnimation;
|
||||
import com.android.systemui.classifier.FalsingLog;
|
||||
import com.android.systemui.colorextraction.SysuiColorExtractor;
|
||||
import com.android.systemui.dagger.SystemUIBinder;
|
||||
import com.android.systemui.doze.DozeHost;
|
||||
import com.android.systemui.doze.DozeLog;
|
||||
import com.android.systemui.fragments.ExtensionFragmentListener;
|
||||
@@ -246,14 +247,11 @@ import java.io.StringWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Lazy;
|
||||
import dagger.Subcomponent;
|
||||
|
||||
@Singleton
|
||||
public class StatusBar extends SystemUI implements DemoMode,
|
||||
ActivityStarter, KeyguardStateController.Callback,
|
||||
OnHeadsUpChangedListener, CommandQueue.Callbacks, ZenModeController.Callback,
|
||||
@@ -626,7 +624,12 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
AppOpsManager.OP_COARSE_LOCATION,
|
||||
AppOpsManager.OP_FINE_LOCATION};
|
||||
|
||||
@Inject
|
||||
/**
|
||||
* Public constructor for StatusBar.
|
||||
*
|
||||
* StatusBar is considered optional, and therefore can not be marked as @Inject directly.
|
||||
* Instead, an @Provide method is included in {@link SystemUIBinder}.
|
||||
*/
|
||||
public StatusBar(
|
||||
Context context,
|
||||
FeatureFlags featureFlags,
|
||||
|
||||
Reference in New Issue
Block a user