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
This commit is contained in:
Dave Mankoff
2022-02-09 11:21:15 -05:00
parent c9abbcf8cc
commit 6bc39ee20e
5 changed files with 65 additions and 29 deletions

View File

@@ -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();

View File

@@ -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) {

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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