Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c1bbce19 authored by Dave Mankoff's avatar Dave Mankoff
Browse files

Build StatusBar Controllers with a Subcomponent

This is an important change. We have a lot of circular dependencies
and strange order of operations in our view inflation and controller
attachment. This is a first attempt to straighten them out.

This change introduces the idea of a Dagger "Subcomponent". When
inflating top-level views related to the StatusBar (only
StatusBarWindowView for now), we supply those views to the
StatusBarComponent, which can then be used to created injected
controllers. That is to say, the views do not create their
controllers directly.

Subcomponent lifetime can be tied to view lifecycle events, allowing
controllers to be implicitly destroyed and recreated along with their
views.

Bug: 144503618
Test: atest SystemUITests && manual
Change-Id: I68252c55810b4a8f280f43596416cf99f8f17306
parent 0fc0ed81
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -119,11 +119,11 @@ 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.StatusBarComponent;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarter;
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;
@@ -140,6 +140,7 @@ import java.util.Map;
import java.util.Optional;

import javax.inject.Named;
import javax.inject.Provider;

import dagger.Lazy;

@@ -156,7 +157,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
    private static final float FLING_SPEED_UP_FACTOR = 0.6f;

    private final ScrimController mScrimController;
    private final StatusBarWindowViewController mStatusBarWindowViewController;
    private final LockscreenLockIconController mLockscreenLockIconController;

    private float mOpeningVelocity = DEFAULT_FLING_VELOCITY;
@@ -289,7 +289,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
            NotificationListener notificationListener,
            ConfigurationController configurationController,
            StatusBarWindowController statusBarWindowController,
            StatusBarWindowViewController statusBarWindowViewController,
            LockscreenLockIconController lockscreenLockIconController,
            DozeParameters dozeParameters,
            ScrimController scrimController,
@@ -302,6 +301,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
            VolumeComponent volumeComponent,
            CommandQueue commandQueue,
            Optional<Recents> recents,
            Provider<StatusBarComponent.Builder> statusBarComponentBuilder,
            PluginManager pluginManager,
            RemoteInputUriController remoteInputUriController,
            Optional<Divider> dividerOptional,
@@ -368,7 +368,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
                notificationListener,
                configurationController,
                statusBarWindowController,
                statusBarWindowViewController,
                lockscreenLockIconController,
                dozeParameters,
                scrimController,
@@ -382,6 +381,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
                volumeComponent,
                commandQueue,
                recents,
                statusBarComponentBuilder,
                pluginManager,
                remoteInputUriController,
                dividerOptional,
@@ -392,7 +392,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
                viewMediatorCallback,
                dismissCallbackRegistry);
        mScrimController = scrimController;
        mStatusBarWindowViewController = statusBarWindowViewController;
        mLockscreenLockIconController = lockscreenLockIconController;
        mDeviceProvisionedController = deviceProvisionedController;
        mCarServiceProvider = carServiceProvider;
+4 −3
Original line number Diff line number Diff line
@@ -78,11 +78,11 @@ 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.StatusBarComponent;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarter;
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;
@@ -96,6 +96,7 @@ import com.android.systemui.volume.VolumeComponent;
import java.util.Optional;

import javax.inject.Named;
import javax.inject.Provider;
import javax.inject.Singleton;

import dagger.Lazy;
@@ -162,7 +163,6 @@ public class CarStatusBarModule {
            NotificationListener notificationListener,
            ConfigurationController configurationController,
            StatusBarWindowController statusBarWindowController,
            StatusBarWindowViewController statusBarWindowViewController,
            LockscreenLockIconController lockscreenLockIconController,
            DozeParameters dozeParameters,
            ScrimController scrimController,
@@ -175,6 +175,7 @@ public class CarStatusBarModule {
            VolumeComponent volumeComponent,
            CommandQueue commandQueue,
            Optional<Recents> recentsOptional,
            Provider<StatusBarComponent.Builder> statusBarComponentBuilder,
            PluginManager pluginManager,
            RemoteInputUriController remoteInputUriController,
            Optional<Divider> dividerOptional,
@@ -240,7 +241,6 @@ public class CarStatusBarModule {
                notificationListener,
                configurationController,
                statusBarWindowController,
                statusBarWindowViewController,
                lockscreenLockIconController,
                dozeParameters,
                scrimController,
@@ -253,6 +253,7 @@ public class CarStatusBarModule {
                volumeComponent,
                commandQueue,
                recentsOptional,
                statusBarComponentBuilder,
                pluginManager,
                remoteInputUriController,
                dividerOptional,
+3 −1
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import com.android.systemui.statusbar.notification.collection.listbuilder.NotifL
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.statusbar.phone.StatusBarComponent;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.util.sensors.AsyncSensorManager;
import com.android.systemui.util.time.SystemClock;
@@ -50,7 +51,8 @@ import dagger.Provides;
 * implementation.
 */
@Module(includes = {AssistModule.class,
                    PeopleHubModule.class})
                    PeopleHubModule.class},
        subcomponents = {StatusBarComponent.class})
public abstract class SystemUIModule {
    /** */
    @Binds
+0 −7
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import com.android.systemui.Dependency;
import com.android.systemui.SystemUIAppComponentFactory;
import com.android.systemui.SystemUIFactory;
import com.android.systemui.fragments.FragmentService;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.util.InjectionInflationController;

@@ -65,12 +64,6 @@ public interface SystemUIRootComponent {
    @Singleton
    Dependency.DependencyInjector createDependency();

    /**
     * Injects the StatusBar.
     */
    @Singleton
    StatusBar.StatusBarInjector getStatusBarInjector();

    /**
     * FragmentCreator generates all Fragments that need injection.
     */
+3 −6
Original line number Diff line number Diff line
@@ -88,10 +88,9 @@ public final class DozeServiceHost implements DozeHost {
    private final PulseExpansionHandler mPulseExpansionHandler;
    private final StatusBarWindowController mStatusBarWindowController;
    private final NotificationWakeUpCoordinator mNotificationWakeUpCoordinator;
    private final StatusBarWindowViewController mStatusBarWindowViewController;
    private StatusBarWindowViewController mStatusBarWindowViewController;
    private final LockscreenLockIconController mLockscreenLockIconController;
    private NotificationIconAreaController mNotificationIconAreaController;
    private StatusBarWindowView mStatusBarWindow;
    private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
    private NotificationPanelView mNotificationPanel;
    private View mAmbientIndicationContainer;
@@ -112,7 +111,6 @@ public final class DozeServiceHost implements DozeHost {
            PulseExpansionHandler pulseExpansionHandler,
            StatusBarWindowController statusBarWindowController,
            NotificationWakeUpCoordinator notificationWakeUpCoordinator,
            StatusBarWindowViewController statusBarWindowViewController,
            LockscreenLockIconController lockscreenLockIconController) {
        super();
        mDozeLog = dozeLog;
@@ -132,7 +130,6 @@ public final class DozeServiceHost implements DozeHost {
        mPulseExpansionHandler = pulseExpansionHandler;
        mStatusBarWindowController = statusBarWindowController;
        mNotificationWakeUpCoordinator = notificationWakeUpCoordinator;
        mStatusBarWindowViewController = statusBarWindowViewController;
        mLockscreenLockIconController = lockscreenLockIconController;
    }

@@ -143,14 +140,14 @@ public final class DozeServiceHost implements DozeHost {
     */
    public void initialize(StatusBar statusBar,
            NotificationIconAreaController notificationIconAreaController,
            StatusBarWindowView statusBarWindow,
            StatusBarKeyguardViewManager statusBarKeyguardViewManager,
            StatusBarWindowViewController statusBarWindowViewController,
            NotificationPanelView notificationPanel, View ambientIndicationContainer) {
        mStatusBar = statusBar;
        mNotificationIconAreaController = notificationIconAreaController;
        mStatusBarWindow = statusBarWindow;
        mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
        mNotificationPanel = notificationPanel;
        mStatusBarWindowViewController = statusBarWindowViewController;
        mAmbientIndicationContainer = ambientIndicationContainer;
        mBiometricUnlockController = mBiometricUnlockControllerLazy.get();
    }
Loading