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

Commit 3d84cb4a authored by Sergey Nikolaienkov's avatar Sergey Nikolaienkov
Browse files

Introduce StatusBarModule

This CL is the 3rd in the series of CLs which intend to "unbind" StatusBar on TV.
In order to make StatusBar really optional and thus to allow us to unbind it, we also need to make some of the classes that depends on it optional as well. For all these cases we need to move from @Inject-annotated contructors to @Provides annotated methods. For this we are introducing StatusBarModule, as well as StatusBarPhoneDependenciesModule and StatusBarDependenciesModule - these two provide dependecies needed to build StatusBar, but not the StatusBar itself

Change-Id: Ie3551bda7056465159f2c7fde4989e009f277304
Test: make SystemUI; atest SystemUITests
Bug: 146188087
parent 6f157bd6
Loading
Loading
Loading
Loading
+5 −26
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import android.content.Context;
import android.os.Handler;
import android.os.PowerManager;
import android.util.DisplayMetrics;
import android.view.IWindowManager;

import com.android.internal.logging.MetricsLogger;
import com.android.keyguard.KeyguardUpdateMonitor;
@@ -34,7 +33,6 @@ import com.android.systemui.bubbles.BubbleController;
import com.android.systemui.car.CarServiceProvider;
import com.android.systemui.car.SystemUIPrimaryWindowController;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dagger.qualifiers.UiBackground;
import com.android.systemui.keyguard.DismissCallbackRegistry;
import com.android.systemui.keyguard.KeyguardViewMediator;
@@ -56,10 +54,10 @@ 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.StatusBarDependenciesModule;
import com.android.systemui.statusbar.SuperStatusBarViewFactory;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.VibratorHelper;
import com.android.systemui.statusbar.dagger.StatusBarDependenciesModule;
import com.android.systemui.statusbar.notification.BypassHeadsUpNotifier;
import com.android.systemui.statusbar.notification.DynamicPrivacyController;
import com.android.systemui.statusbar.notification.NotificationAlertingManager;
@@ -69,7 +67,7 @@ import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.notification.init.NotificationsController;
import com.android.systemui.statusbar.notification.logging.NotificationLogger;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
import com.android.systemui.statusbar.notification.row.RowContentBindStage;
import com.android.systemui.statusbar.notification.row.NotificationRowModule;
import com.android.systemui.statusbar.phone.AutoHideController;
import com.android.systemui.statusbar.phone.BiometricUnlockController;
import com.android.systemui.statusbar.phone.DozeParameters;
@@ -82,7 +80,6 @@ import com.android.systemui.statusbar.phone.LightBarController;
import com.android.systemui.statusbar.phone.LightsOutNotifController;
import com.android.systemui.statusbar.phone.LockscreenLockIconController;
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.NotificationShadeWindowController;
import com.android.systemui.statusbar.phone.ScrimController;
@@ -91,6 +88,7 @@ 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.dagger.StatusBarComponent;
import com.android.systemui.statusbar.phone.dagger.StatusBarPhoneDependenciesModule;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
@@ -116,7 +114,8 @@ import dagger.Provides;
/**
 * Dagger Module providing {@link CarStatusBar}.
 */
@Module(includes = {StatusBarDependenciesModule.class})
@Module(includes = {StatusBarDependenciesModule.class, StatusBarPhoneDependenciesModule.class,
        NotificationRowModule.class})
public class CarStatusBarModule {
    /**
     * Provides our instance of StatusBar which is considered optional.
@@ -285,24 +284,4 @@ public class CarStatusBarModule {
                carNavigationBarController,
                flingAnimationUtilsBuilder);
    }


    /** */
    @Singleton
    @Provides
    static AutoHideController newAutoHideController(Context context,
            @Main Handler handler,
            NotificationRemoteInputManager notificationRemoteInputManager,
            IWindowManager iWindowManager) {
        return new AutoHideController(context, handler, notificationRemoteInputManager,
                iWindowManager);
    }

    /** */
    @Singleton
    @Provides
    static NotificationGroupAlertTransferHelper provideNotificationGroupAlertTransferHelper(
            RowContentBindStage bindStage) {
        return new NotificationGroupAlertTransferHelper(bindStage);
    }
}
+2 −3
Original line number Diff line number Diff line
@@ -32,10 +32,9 @@ import com.android.systemui.recents.Recents;
import com.android.systemui.recents.RecentsModule;
import com.android.systemui.shortcut.ShortcutKeyDispatcher;
import com.android.systemui.stackdivider.Divider;
import com.android.systemui.statusbar.dagger.StatusBarModule;
import com.android.systemui.statusbar.notification.InstantAppNotifier;
import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.dagger.StatusBarPhoneModule;
import com.android.systemui.statusbar.tv.TvStatusBar;
import com.android.systemui.theme.ThemeOverlayController;
import com.android.systemui.toast.ToastUI;
@@ -50,7 +49,7 @@ import dagger.multibindings.IntoMap;
/**
 * SystemUI objects that are injectable should go here.
 */
@Module(includes = {RecentsModule.class, StatusBarPhoneModule.class, NotificationsModule.class})
@Module(includes = {RecentsModule.class, StatusBarModule.class})
public abstract class SystemUIBinder {
    /** Inject into AuthController. */
    @Binds
+4 −5
Original line number Diff line number Diff line
@@ -31,20 +31,17 @@ import android.service.notification.StatusBarNotification;
import android.util.Log;

import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.statusbar.dagger.StatusBarModule;
import com.android.systemui.statusbar.phone.NotificationListenerWithPlugins;

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;
import javax.inject.Singleton;

/**
 * This class handles listening to notification updates and passing them along to
 * NotificationPresenter to be displayed to the user.
 */
@SuppressLint("OverrideAbstract")
@Singleton
public class NotificationListener extends NotificationListenerWithPlugins {
    private static final String TAG = "NotificationListener";

@@ -54,7 +51,9 @@ public class NotificationListener extends NotificationListenerWithPlugins {
    private final List<NotificationHandler> mNotificationHandlers = new ArrayList<>();
    private final ArrayList<NotificationSettingsListener> mSettingsListeners = new ArrayList<>();

    @Inject
    /**
     * Injected constructor. See {@link StatusBarModule}.
     */
    public NotificationListener(
            Context context,
            NotificationManager notificationManager,
+9 −10
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ import com.android.systemui.Dumpable;
import com.android.systemui.Interpolators;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.dagger.StatusBarModule;
import com.android.systemui.statusbar.notification.NotificationEntryListener;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -73,16 +74,12 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.inject.Inject;
import javax.inject.Singleton;

import dagger.Lazy;

/**
 * Handles tasks and state related to media notifications. For example, there is a 'current' media
 * notification, which this class keeps track of.
 */
@Singleton
public class NotificationMediaManager implements Dumpable {
    private static final String TAG = "NotificationMediaManager";
    public static final boolean DEBUG_MEDIA = false;
@@ -101,11 +98,10 @@ public class NotificationMediaManager implements Dumpable {
        PAUSED_MEDIA_STATES.add(PlaybackState.STATE_ERROR);
    }


    private final NotificationEntryManager mEntryManager;

    @Nullable
    private Lazy<NotificationShadeWindowController> mStatusBarWindowController;
    private Lazy<NotificationShadeWindowController> mNotificationShadeWindowController;

    @Nullable
    private BiometricUnlockController mBiometricUnlockController;
@@ -176,11 +172,13 @@ public class NotificationMediaManager implements Dumpable {
        }
    };

    @Inject
    /**
     * Injected constructor. See {@link StatusBarModule}.
     */
    public NotificationMediaManager(
            Context context,
            Lazy<StatusBar> statusBarLazy,
            Lazy<NotificationShadeWindowController> statusBarWindowController,
            Lazy<NotificationShadeWindowController> notificationShadeWindowController,
            NotificationEntryManager notificationEntryManager,
            MediaArtworkProcessor mediaArtworkProcessor,
            KeyguardBypassController keyguardBypassController) {
@@ -194,7 +192,7 @@ public class NotificationMediaManager implements Dumpable {
                Context.MEDIA_SESSION_SERVICE);
        // TODO: use KeyguardStateController#isOccluded to remove this dependency
        mStatusBarLazy = statusBarLazy;
        mStatusBarWindowController = statusBarWindowController;
        mNotificationShadeWindowController = notificationShadeWindowController;
        mEntryManager = notificationEntryManager;
        notificationEntryManager.addNotificationEntryListener(new NotificationEntryListener() {
            @Override
@@ -525,7 +523,8 @@ public class NotificationMediaManager implements Dumpable {
            }
        }

        NotificationShadeWindowController windowController = mStatusBarWindowController.get();
        NotificationShadeWindowController windowController =
                mNotificationShadeWindowController.get();
        boolean hideBecauseOccluded = mStatusBarLazy.get().isOccluded();

        final boolean hasArtwork = artworkDrawable != null;
+4 −5
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ import com.android.systemui.Dumpable;
import com.android.systemui.R;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.dagger.StatusBarModule;
import com.android.systemui.statusbar.notification.NotificationEntryListener;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -70,9 +71,6 @@ import java.util.ArrayList;
import java.util.Objects;
import java.util.Set;

import javax.inject.Inject;
import javax.inject.Singleton;

import dagger.Lazy;

/**
@@ -81,7 +79,6 @@ import dagger.Lazy;
 * interaction, keeping track of notifications to remove when NotificationPresenter is collapsed,
 * and handling clicks on remote views.
 */
@Singleton
public class NotificationRemoteInputManager implements Dumpable {
    public static final boolean ENABLE_REMOTE_INPUT =
            SystemProperties.getBoolean("debug.enable_remote_input", true);
@@ -257,7 +254,9 @@ public class NotificationRemoteInputManager implements Dumpable {
        }
    };

    @Inject
    /**
     * Injected constructor. See {@link StatusBarModule}.
     */
    public NotificationRemoteInputManager(
            Context context,
            NotificationLockscreenUserManager lockscreenUserManager,
Loading