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

Commit 6bc39ee2 authored by Dave Mankoff's avatar Dave Mankoff
Browse files

Make LightBarTransitionsController injectable.

Give it a factory that allows it be injected, removing its reliance on
Dependency#get.

More changes to follow this one, as NavigationBarTransitions is still
not injectable, so more calls to Dependency#get had to be added to
compensate.

Bug: 218354102
Test: atest SystemUITests
Change-Id: I891467cf0e49f78577533eb8c74fe26816f8d854
parent c9abbcf8
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -32,9 +32,11 @@ import android.view.View;
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.navigationbar.buttons.ButtonDispatcher;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.phone.BarTransitions;
import com.android.systemui.statusbar.phone.LightBarTransitionsController;
import com.android.systemui.statusbar.policy.KeyguardStateController;

import java.io.PrintWriter;
import java.util.ArrayList;
@@ -83,7 +85,11 @@ public final class NavigationBarTransitions extends BarTransitions implements
        super(view, R.drawable.nav_background);
        mView = view;
        mLightTransitionsController = new LightBarTransitionsController(
                view.getContext(), this, commandQueue);
                view.getContext(),
                this,
                commandQueue,
                Dependency.get(KeyguardStateController.class),
                Dependency.get(StatusBarStateController.class));
        mAllowAutoDimWallpaperNotVisible = view.getContext().getResources()
                .getBoolean(R.bool.config_navigation_bar_enable_auto_dim_no_visible_wallpaper);
        mDarkIntensityListeners = new ArrayList();
+20 −16
Original line number Diff line number Diff line
@@ -55,8 +55,8 @@ import android.view.WindowInsetsController.Behavior;
import androidx.annotation.NonNull;

import com.android.internal.view.AppearanceRegion;
import com.android.systemui.Dependency;
import com.android.systemui.Dumpable;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.model.SysUiState;
import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler;
@@ -79,9 +79,9 @@ import java.util.Optional;
import java.util.function.Consumer;

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

@Singleton
/** */
@SysUISingleton
public class TaskbarDelegate implements CommandQueue.Callbacks,
        OverviewProxyService.OverviewProxyListener, NavigationModeController.ModeChangedListener,
        ComponentCallbacks, Dumpable {
@@ -89,6 +89,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,

    private final EdgeBackGestureHandler mEdgeBackGestureHandler;
    private final NavigationBarOverlayController mNavBarOverlayController;
    private final LightBarTransitionsController.Factory mLightBarTransitionsControllerFactory;
    private boolean mInitialized;
    private CommandQueue mCommandQueue;
    private OverviewProxyService mOverviewProxyService;
@@ -155,10 +156,15 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
    private BackAnimation mBackAnimation;

    @Inject
    public TaskbarDelegate(Context context) {
        mEdgeBackGestureHandler = Dependency.get(EdgeBackGestureHandler.Factory.class)
                .create(context);
        mNavBarOverlayController = Dependency.get(NavigationBarOverlayController.class);
    public TaskbarDelegate(
            Context context,
            EdgeBackGestureHandler.Factory edgeBackGestureHandlerFactory,
            NavigationBarOverlayController navigationBarOverlayController,
            LightBarTransitionsController.Factory lightBarTransitionsControllerFactory
    ) {
        mLightBarTransitionsControllerFactory = lightBarTransitionsControllerFactory;
        mEdgeBackGestureHandler = edgeBackGestureHandlerFactory.create(context);
        mNavBarOverlayController = navigationBarOverlayController;
        if (mNavBarOverlayController.isNavigationBarOverlayEnabled()) {
            mNavBarOverlayController.init(mNavbarOverlayVisibilityChangeCallback,
                    mEdgeBackGestureHandler::updateNavigationBarOverlayExcludeRegion);
@@ -186,14 +192,15 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
        dumpManager.registerDumpable(this);
        mAutoHideController = autoHideController;
        mLightBarController = lightBarController;
        mLightBarTransitionsController = createLightBarTransitionsController();
        mPipOptional = pipOptional;
        mBackAnimation = backAnimation;
        mLightBarTransitionsController = createLightBarTransitionsController();
    }

    // Separated into a method to keep setDependencies() clean/readable.
    private LightBarTransitionsController createLightBarTransitionsController() {
        return new LightBarTransitionsController(mContext,

        LightBarTransitionsController controller =  mLightBarTransitionsControllerFactory.create(
                new LightBarTransitionsController.DarkIntensityApplier() {
                    @Override
                    public void applyDarkIntensity(float darkIntensity) {
@@ -204,13 +211,10 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
                    public int getTintAnimationDuration() {
                        return LightBarTransitionsController.DEFAULT_TINT_ANIMATION_DURATION;
                    }
                }, mCommandQueue) {
            @Override
            public boolean supportsIconTintForNavMode(int navigationMode) {
                // Always tint taskbar nav buttons (region sampling handles gesture bar separately).
                return true;
            }
        };
                });
        controller.overrideIconTintForNavMode(true);

        return controller;
    }

    public void init(int displayId) {
+2 −3
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ import android.widget.ImageView;
import com.android.systemui.R;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.statusbar.CommandQueue;

import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -54,12 +53,12 @@ public class DarkIconDispatcherImpl implements SysuiDarkIconDispatcher,
    @Inject
    public DarkIconDispatcherImpl(
            Context context,
            CommandQueue commandQueue,
            LightBarTransitionsController.Factory lightBarTransitionsControllerFactory,
            DumpManager dumpManager) {
        mDarkModeIconColorSingleTone = context.getColor(R.color.dark_mode_icon_color_single_tone);
        mLightModeIconColorSingleTone = context.getColor(R.color.light_mode_icon_color_single_tone);

        mTransitionsController = new LightBarTransitionsController(context, this, commandQueue);
        mTransitionsController = lightBarTransitionsControllerFactory.create(this);

        dumpManager.registerDumpable(getClass().getSimpleName(), this);
    }
+30 −6
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import android.os.SystemClock;
import android.util.MathUtils;
import android.util.TimeUtils;

import com.android.systemui.Dependency;
import com.android.systemui.Dumpable;
import com.android.systemui.animation.Interpolators;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -36,6 +35,10 @@ import com.android.systemui.statusbar.policy.KeyguardStateController;
import java.io.FileDescriptor;
import java.io.PrintWriter;

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

/**
 * Class to control all aspects about light bar changes.
 */
@@ -70,13 +73,19 @@ public class LightBarTransitionsController implements Dumpable, Callbacks,
    };

    private final Context mContext;
    private Boolean mOverrideIconTintForNavMode;

    public LightBarTransitionsController(Context context, DarkIntensityApplier applier,
            CommandQueue commandQueue) {
    @AssistedInject
    public LightBarTransitionsController(
            Context context,
            @Assisted DarkIntensityApplier applier,
            CommandQueue commandQueue,
            KeyguardStateController keyguardStateController,
            StatusBarStateController statusBarStateController) {
        mApplier = applier;
        mHandler = new Handler();
        mKeyguardStateController = Dependency.get(KeyguardStateController.class);
        mStatusBarStateController = Dependency.get(StatusBarStateController.class);
        mKeyguardStateController = keyguardStateController;
        mStatusBarStateController = statusBarStateController;
        mCommandQueue = commandQueue;
        mCommandQueue.addCallback(this);
        mStatusBarStateController.addCallback(this);
@@ -230,12 +239,20 @@ public class LightBarTransitionsController implements Dumpable, Callbacks,
        dispatchDark();
    }

    /**
     * Specify an override value to return for {@link #overrideIconTintForNavMode(boolean)}.
     */
    public void overrideIconTintForNavMode(boolean overrideValue) {
        mOverrideIconTintForNavMode = overrideValue;
    }
    /**
     * Return whether to use the tint calculated in this class for nav icons.
     */
    public boolean supportsIconTintForNavMode(int navigationMode) {
        // In gesture mode, we already do region sampling to update tint based on content beneath.
        return !QuickStepContract.isGesturalMode(navigationMode);
        return mOverrideIconTintForNavMode != null
                ? mOverrideIconTintForNavMode
                : !QuickStepContract.isGesturalMode(navigationMode);
    }

    /**
@@ -245,4 +262,11 @@ public class LightBarTransitionsController implements Dumpable, Callbacks,
        void applyDarkIntensity(float darkIntensity);
        int getTintAnimationDuration();
    }

    /** Injectable factory for construction a LightBarTransitionsController. */
    @AssistedFactory
    public interface Factory {
        /** */
        LightBarTransitionsController create(DarkIntensityApplier darkIntensityApplier);
    }
}
+6 −3
Original line number Diff line number Diff line
@@ -45,15 +45,18 @@ public class LightBarTransitionsControllerTest extends SysuiTestCase {

    @Mock
    private DarkIntensityApplier mApplier;
    @Mock
    private KeyguardStateController mKeyguardStateController;
    @Mock
    private StatusBarStateController mStatusBarStateController;

    private LightBarTransitionsController mLightBarTransitionsController;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
        mDependency.injectMockDependency(KeyguardStateController.class);
        mDependency.injectMockDependency(StatusBarStateController.class);
        mLightBarTransitionsController = new LightBarTransitionsController(mContext, mApplier,
                new CommandQueue(mContext));
                new CommandQueue(mContext), mKeyguardStateController, mStatusBarStateController);
    }

    @Test