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

Commit 7f7a0bed authored by Chris Göllner's avatar Chris Göllner
Browse files

Prepare DarkIconDispatcher for multiple displays

- Turn it into an @AssistedInject class
- Add stop method
- Per display dumpable name
- Setup dagger bindings

Bug:
Test: atest SystemUITests
Flag: EXEMPT no behavior change
Change-Id: I3651e364bc60318e874caf28af2e1563d701365a
parent a3b251aa
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -16,7 +16,10 @@

package com.android.systemui.dagger;

import android.content.Context;

import com.android.systemui.classifier.FalsingManagerProxy;
import com.android.systemui.dagger.qualifiers.Default;
import com.android.systemui.globalactions.GlobalActionsComponent;
import com.android.systemui.globalactions.GlobalActionsImpl;
import com.android.systemui.plugins.ActivityStarter;
@@ -33,11 +36,12 @@ import com.android.systemui.volume.VolumeDialogControllerImpl;

import dagger.Binds;
import dagger.Module;
import dagger.Provides;

/**
 * Module for binding Plugin implementations.
 *
 * TODO(b/166258224): Many of these should be moved closer to their implementations.
 * <p>TODO(b/166258224): Many of these should be moved closer to their implementations.
 */
@Module
public abstract class PluginModule {
@@ -46,13 +50,23 @@ public abstract class PluginModule {
    @Binds
    abstract ActivityStarter provideActivityStarter(ActivityStarterImpl activityStarterImpl);

    /** */
    @Provides
    @SysUISingleton
    @Default
    static DarkIconDispatcherImpl darkIconDispatcherImpl(
            DarkIconDispatcherImpl.Factory factory, Context context) {
        return factory.create(context.getDisplayId(), context);
    }

    /** */
    @Binds
    abstract DarkIconDispatcher provideDarkIconDispatcher(DarkIconDispatcherImpl controllerImpl);
    abstract DarkIconDispatcher provideDarkIconDispatcher(
            @Default DarkIconDispatcherImpl controllerImpl);

    @Binds
    abstract SysuiDarkIconDispatcher provideSysuiDarkIconDispatcher(
            DarkIconDispatcherImpl controllerImpl);
            @Default DarkIconDispatcherImpl controllerImpl);

    /** */
    @Binds
+32 −8
Original line number Diff line number Diff line
@@ -23,11 +23,15 @@ import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.Rect;
import android.util.ArrayMap;
import android.view.Display;
import android.widget.ImageView;

import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dump.DumpManager;

import dagger.assisted.Assisted;
import dagger.assisted.AssistedFactory;
import dagger.assisted.AssistedInject;

import kotlinx.coroutines.flow.FlowKt;
import kotlinx.coroutines.flow.MutableStateFlow;
import kotlinx.coroutines.flow.StateFlow;
@@ -36,17 +40,15 @@ import kotlinx.coroutines.flow.StateFlowKt;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.inject.Inject;

/**
 */
@SysUISingleton
public class DarkIconDispatcherImpl implements SysuiDarkIconDispatcher,
        LightBarTransitionsController.DarkIntensityApplier {

    private final LightBarTransitionsController mTransitionsController;
    private final ArrayList<Rect> mTintAreas = new ArrayList<>();
    private final ArrayMap<Object, DarkReceiver> mReceivers = new ArrayMap<>();
    private final DumpManager mDumpManager;

    private int mIconTint = DEFAULT_ICON_TINT;
    private int mContrastTint = DEFAULT_INVERSE_ICON_TINT;
@@ -61,14 +63,24 @@ public class DarkIconDispatcherImpl implements SysuiDarkIconDispatcher,
    private final MutableStateFlow<DarkChange> mDarkChangeFlow = StateFlowKt.MutableStateFlow(
            DarkChange.EMPTY);

    private final String mDumpableName;

    /** */
    @AssistedFactory
    public interface Factory {
        /** */
        DarkIconDispatcherImpl create(int displayId, Context context);
    }

    /**
     */
    @Inject
    @AssistedInject
    public DarkIconDispatcherImpl(
            Context context,
            @Assisted int displayId,
            @Assisted Context context,
            LightBarTransitionsController.Factory lightBarTransitionsControllerFactory,
            DumpManager dumpManager) {

        mDumpManager = dumpManager;
        if (newStatusBarIcons()) {
            mDarkModeIconColorSingleTone = Color.BLACK;
            mLightModeIconColorSingleTone = Color.WHITE;
@@ -81,7 +93,19 @@ public class DarkIconDispatcherImpl implements SysuiDarkIconDispatcher,

        mTransitionsController = lightBarTransitionsControllerFactory.create(this);

        dumpManager.registerDumpable(getClass().getSimpleName(), this);
        mDumpableName = getDumpableName(displayId);
        dumpManager.registerNormalDumpable(mDumpableName, this);
    }

    /** Called when work should stop and resources should be cleaned up. */
    public void stop() {
        mDumpManager.unregisterDumpable(mDumpableName);
    }

    private String getDumpableName(int displayId) {
        String dumpableNameSuffix =
                displayId == Display.DEFAULT_DISPLAY ? "" : String.valueOf(displayId);
        return getClass().getSimpleName() + dumpableNameSuffix;
    }

    public LightBarTransitionsController getTransitionsController() {