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

Commit c196a64c authored by Dave Mankoff's avatar Dave Mankoff Committed by Android (Google) Code Review
Browse files

Merge "SysUIComponent#init removal" into main

parents 5ea7b15c 95fb8c81
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -22,10 +22,10 @@ import android.os.Handler;
import android.os.HandlerThread;
import android.util.Log;

import com.android.systemui.res.R;
import com.android.systemui.dagger.GlobalRootComponent;
import com.android.systemui.dagger.SysUIComponent;
import com.android.systemui.dagger.WMComponent;
import com.android.systemui.res.R;
import com.android.systemui.util.InitializationChecker;
import com.android.wm.shell.dagger.WMShellConcurrencyModule;
import com.android.wm.shell.keyguard.KeyguardTransitions;
@@ -124,9 +124,6 @@ public abstract class SystemUIInitializer {
                    .setDesktopMode(Optional.ofNullable(null));
        }
        mSysUIComponent = builder.build();
        if (initializeComponents) {
            mSysUIComponent.init();
        }

        // Every other part of our codebase currently relies on Dependency, so we
        // really need to ensure the Dependency gets initialized early on.
+8 −0
Original line number Diff line number Diff line
@@ -26,10 +26,13 @@ import com.android.keyguard.KeyguardViewController;
import com.android.systemui.ScreenDecorationsModule;
import com.android.systemui.accessibility.SystemActionsModule;
import com.android.systemui.battery.BatterySaverModule;
import com.android.systemui.display.ui.viewmodel.ConnectingDisplayViewModel;
import com.android.systemui.dock.DockManager;
import com.android.systemui.dock.DockManagerImpl;
import com.android.systemui.doze.DozeHost;
import com.android.systemui.media.dagger.MediaModule;
import com.android.systemui.media.muteawait.MediaMuteAwaitConnectionCli;
import com.android.systemui.media.nearby.NearbyMediaDevicesManager;
import com.android.systemui.navigationbar.NavigationBarControllerModule;
import com.android.systemui.navigationbar.gestural.GestureModule;
import com.android.systemui.plugins.qs.QSFactory;
@@ -63,6 +66,7 @@ import com.android.systemui.statusbar.policy.IndividualSensorPrivacyControllerIm
import com.android.systemui.statusbar.policy.SensorPrivacyController;
import com.android.systemui.statusbar.policy.SensorPrivacyControllerImpl;
import com.android.systemui.toast.ToastModule;
import com.android.systemui.unfold.SysUIUnfoldStartableModule;
import com.android.systemui.unfold.UnfoldTransitionModule;
import com.android.systemui.volume.dagger.VolumeModule;
import com.android.systemui.wallpapers.dagger.WallpaperModule;
@@ -92,12 +96,15 @@ import javax.inject.Named;
        AospPolicyModule.class,
        BatterySaverModule.class,
        CollapsedStatusBarFragmentStartableModule.class,
        ConnectingDisplayViewModel.StartableModule.class,
        GestureModule.class,
        HeadsUpModule.class,
        KeyboardShortcutsModule.class,
        MediaModule.class,
        MediaMuteAwaitConnectionCli.StartableModule.class,
        MultiUserUtilsModule.class,
        NavigationBarControllerModule.class,
        NearbyMediaDevicesManager.StartableModule.class,
        PowerModule.class,
        QSModule.class,
        RearDisplayModule.class,
@@ -108,6 +115,7 @@ import javax.inject.Named;
        ShadeModule.class,
        StartCentralSurfacesModule.class,
        SceneContainerFrameworkModule.class,
        SysUIUnfoldStartableModule.class,
        UnfoldTransitionModule.Startables.class,
        ToastModule.class,
        VolumeModule.class,
+0 −93
Original line number Diff line number Diff line
@@ -19,25 +19,15 @@ package com.android.systemui.dagger;
import com.android.systemui.BootCompleteCacheImpl;
import com.android.systemui.CoreStartable;
import com.android.systemui.Dependency;
import com.android.systemui.Flags;
import com.android.systemui.InitController;
import com.android.systemui.SystemUIAppComponentFactoryBase;
import com.android.systemui.dagger.qualifiers.PerUser;
import com.android.systemui.display.ui.viewmodel.ConnectingDisplayViewModel;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.KeyguardSliceProvider;
import com.android.systemui.media.muteawait.MediaMuteAwaitConnectionCli;
import com.android.systemui.media.nearby.NearbyMediaDevicesManager;
import com.android.systemui.people.PeopleProvider;
import com.android.systemui.statusbar.NotificationInsetsModule;
import com.android.systemui.statusbar.QsFrameTranslateModule;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.unfold.FoldStateLogger;
import com.android.systemui.unfold.FoldStateLoggingProvider;
import com.android.systemui.unfold.SysUIUnfoldComponent;
import com.android.systemui.unfold.UnfoldTransitionProgressProvider;
import com.android.systemui.unfold.dagger.UnfoldBg;
import com.android.systemui.unfold.progress.UnfoldTransitionProgressForwarder;
import com.android.wm.shell.back.BackAnimation;
import com.android.wm.shell.bubbles.Bubbles;
import com.android.wm.shell.desktopmode.DesktopMode;
@@ -125,42 +115,6 @@ public interface SysUIComponent {
        SysUIComponent build();
    }

    /**
     * Initializes all the SysUI components.
     */
    default void init() {
        // Initialize components that have no direct tie to the dagger dependency graph,
        // but are critical to this component's operation
        getSysUIUnfoldComponent()
                .ifPresent(
                        c -> {
                            c.getFullScreenLightRevealAnimations().forEach(it -> it.init());
                            c.getUnfoldTransitionWallpaperController().init();
                            c.getUnfoldHapticsPlayer();
                            c.getNaturalRotationUnfoldProgressProvider().init();
                            c.getUnfoldLatencyTracker().init();
                        });
        // No init method needed, just needs to be gotten so that it's created.
        getMediaMuteAwaitConnectionCli();
        getNearbyMediaDevicesManager();
        getConnectingDisplayViewModel().init();
        getFoldStateLoggingProvider().ifPresent(FoldStateLoggingProvider::init);
        getFoldStateLogger().ifPresent(FoldStateLogger::init);

        Optional<UnfoldTransitionProgressProvider> unfoldTransitionProgressProvider;

        if (Flags.unfoldAnimationBackgroundProgress()) {
            unfoldTransitionProgressProvider = getBgUnfoldTransitionProgressProvider();
        } else {
            unfoldTransitionProgressProvider = getUnfoldTransitionProgressProvider();
        }
        unfoldTransitionProgressProvider
                .ifPresent(
                        (progressProvider) ->
                                getUnfoldTransitionProgressForwarder()
                                        .ifPresent(progressProvider::addCallback));
    }

    /**
     * Provides a BootCompleteCache.
     */
@@ -179,37 +133,6 @@ public interface SysUIComponent {
    @SysUISingleton
    ContextComponentHelper getContextComponentHelper();

    /**
     * Creates a UnfoldTransitionProgressProvider that calculates progress in the background.
     */
    @SysUISingleton
    @UnfoldBg
    Optional<UnfoldTransitionProgressProvider> getBgUnfoldTransitionProgressProvider();

    /**
     * Creates a UnfoldTransitionProgressProvider that calculates progress in the main thread.
     */
    @SysUISingleton
    Optional<UnfoldTransitionProgressProvider> getUnfoldTransitionProgressProvider();

    /**
     * Creates a UnfoldTransitionProgressForwarder.
     */
    @SysUISingleton
    Optional<UnfoldTransitionProgressForwarder> getUnfoldTransitionProgressForwarder();

    /**
     * Creates a FoldStateLoggingProvider.
     */
    @SysUISingleton
    Optional<FoldStateLoggingProvider> getFoldStateLoggingProvider();

    /**
     * Creates a FoldStateLogger.
     */
    @SysUISingleton
    Optional<FoldStateLogger> getFoldStateLogger();

    /**
     * Main dependency providing module.
     */
@@ -226,22 +149,6 @@ public interface SysUIComponent {
    @SysUISingleton
    InitController getInitController();

    /**
     * For devices with a hinge: access objects within this component
     */
    Optional<SysUIUnfoldComponent> getSysUIUnfoldComponent();

    /** */
    MediaMuteAwaitConnectionCli getMediaMuteAwaitConnectionCli();

    /** */
    NearbyMediaDevicesManager getNearbyMediaDevicesManager();

    /**
     * Creates a ConnectingDisplayViewModel
     */
    ConnectingDisplayViewModel getConnectingDisplayViewModel();

    /**
     * Returns {@link CoreStartable}s that should be started with the application.
     */
+15 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.display.ui.viewmodel
import android.app.Dialog
import android.content.Context
import com.android.server.policy.feature.flags.Flags
import com.android.systemui.CoreStartable
import com.android.systemui.biometrics.Utils
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
@@ -26,6 +27,10 @@ import com.android.systemui.display.domain.interactor.ConnectedDisplayInteractor
import com.android.systemui.display.domain.interactor.ConnectedDisplayInteractor.PendingDisplay
import com.android.systemui.display.ui.view.MirroringConfirmationDialog
import com.android.systemui.statusbar.policy.ConfigurationController
import dagger.Binds
import dagger.Module
import dagger.multibindings.ClassKey
import dagger.multibindings.IntoMap
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
@@ -47,12 +52,12 @@ constructor(
    @Application private val scope: CoroutineScope,
    @Background private val bgDispatcher: CoroutineDispatcher,
    private val configurationController: ConfigurationController,
) {
) : CoreStartable {

    private var dialog: Dialog? = null

    /** Starts listening for pending displays. */
    fun init() {
    override fun start() {
        val pendingDisplayFlow = connectedDisplayInteractor.pendingDisplay
        val concurrentDisplaysInProgessFlow =
            if (Flags.enableDualDisplayBlocking()) {
@@ -96,4 +101,12 @@ constructor(
        dialog?.hide()
        dialog = null
    }

    @Module
    interface StartableModule {
        @Binds
        @IntoMap
        @ClassKey(ConnectingDisplayViewModel::class)
        fun bindsConnectingDisplayViewModel(impl: ConnectingDisplayViewModel): CoreStartable
    }
}
+19 −7
Original line number Diff line number Diff line
@@ -16,13 +16,18 @@

package com.android.systemui.media.muteawait

import android.content.Context
import android.annotation.SuppressLint
import android.media.AudioAttributes.USAGE_MEDIA
import android.media.AudioDeviceAttributes
import android.media.AudioManager
import com.android.systemui.CoreStartable
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.statusbar.commandline.Command
import com.android.systemui.statusbar.commandline.CommandRegistry
import dagger.Binds
import dagger.Module
import dagger.multibindings.ClassKey
import dagger.multibindings.IntoMap
import java.io.PrintWriter
import java.util.concurrent.TimeUnit
import javax.inject.Inject
@@ -30,14 +35,15 @@ import javax.inject.Inject
/** A command line interface to manually test [MediaMuteAwaitConnectionManager]. */
@SysUISingleton
class MediaMuteAwaitConnectionCli @Inject constructor(
    commandRegistry: CommandRegistry,
    private val context: Context
) {
    init {
    private val commandRegistry: CommandRegistry,
    private val audioManager: AudioManager,
) : CoreStartable {
    override fun start() {
        commandRegistry.registerCommand(MEDIA_MUTE_AWAIT_COMMAND) { MuteAwaitCommand() }
    }

    inner class MuteAwaitCommand : Command {
        @SuppressLint("MissingPermission")
        override fun execute(pw: PrintWriter, args: List<String>) {
            val device = AudioDeviceAttributes(
                AudioDeviceAttributes.ROLE_OUTPUT,
@@ -49,8 +55,6 @@ class MediaMuteAwaitConnectionCli @Inject constructor(
            )
            val startOrCancel = args[2]

            val audioManager: AudioManager =
                context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
            when (startOrCancel) {
                START ->
                    audioManager.muteAwaitConnection(
@@ -65,6 +69,14 @@ class MediaMuteAwaitConnectionCli @Inject constructor(
                    "[type] [name] [$START|$CANCEL]")
        }
    }

    @Module
    interface StartableModule {
        @Binds
        @IntoMap
        @ClassKey(MediaMuteAwaitConnectionCli::class)
        fun bindsMediaMuteAwaitConnectionCli(impl: MediaMuteAwaitConnectionCli): CoreStartable
    }
}

private const val MEDIA_MUTE_AWAIT_COMMAND = "media-mute-await"
Loading