Merge "Make LightBarTransitionsController injectable." into tm-dev

This commit is contained in:
Dave Mankoff
2022-04-08 19:25:01 +00:00
committed by Android (Google) Code Review
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.Dependency;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.navigationbar.buttons.ButtonDispatcher; 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.CommandQueue;
import com.android.systemui.statusbar.phone.BarTransitions; import com.android.systemui.statusbar.phone.BarTransitions;
import com.android.systemui.statusbar.phone.LightBarTransitionsController; import com.android.systemui.statusbar.phone.LightBarTransitionsController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.ArrayList; import java.util.ArrayList;
@@ -83,7 +85,11 @@ public final class NavigationBarTransitions extends BarTransitions implements
super(view, R.drawable.nav_background); super(view, R.drawable.nav_background);
mView = view; mView = view;
mLightTransitionsController = new LightBarTransitionsController( mLightTransitionsController = new LightBarTransitionsController(
view.getContext(), this, commandQueue); view.getContext(),
this,
commandQueue,
Dependency.get(KeyguardStateController.class),
Dependency.get(StatusBarStateController.class));
mAllowAutoDimWallpaperNotVisible = view.getContext().getResources() mAllowAutoDimWallpaperNotVisible = view.getContext().getResources()
.getBoolean(R.bool.config_navigation_bar_enable_auto_dim_no_visible_wallpaper); .getBoolean(R.bool.config_navigation_bar_enable_auto_dim_no_visible_wallpaper);
mDarkIntensityListeners = new ArrayList(); mDarkIntensityListeners = new ArrayList();

View File

@@ -55,8 +55,8 @@ import android.view.WindowInsetsController.Behavior;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.android.internal.view.AppearanceRegion; import com.android.internal.view.AppearanceRegion;
import com.android.systemui.Dependency;
import com.android.systemui.Dumpable; import com.android.systemui.Dumpable;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.model.SysUiState; import com.android.systemui.model.SysUiState;
import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler; import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler;
@@ -78,9 +78,9 @@ import java.util.Optional;
import java.util.function.Consumer; import java.util.function.Consumer;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton;
@Singleton /** */
@SysUISingleton
public class TaskbarDelegate implements CommandQueue.Callbacks, public class TaskbarDelegate implements CommandQueue.Callbacks,
OverviewProxyService.OverviewProxyListener, NavigationModeController.ModeChangedListener, OverviewProxyService.OverviewProxyListener, NavigationModeController.ModeChangedListener,
ComponentCallbacks, Dumpable { ComponentCallbacks, Dumpable {
@@ -88,6 +88,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
private final EdgeBackGestureHandler mEdgeBackGestureHandler; private final EdgeBackGestureHandler mEdgeBackGestureHandler;
private final NavigationBarOverlayController mNavBarOverlayController; private final NavigationBarOverlayController mNavBarOverlayController;
private final LightBarTransitionsController.Factory mLightBarTransitionsControllerFactory;
private boolean mInitialized; private boolean mInitialized;
private CommandQueue mCommandQueue; private CommandQueue mCommandQueue;
private OverviewProxyService mOverviewProxyService; private OverviewProxyService mOverviewProxyService;
@@ -154,10 +155,15 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
private BackAnimation mBackAnimation; private BackAnimation mBackAnimation;
@Inject @Inject
public TaskbarDelegate(Context context) { public TaskbarDelegate(
mEdgeBackGestureHandler = Dependency.get(EdgeBackGestureHandler.Factory.class) Context context,
.create(context); EdgeBackGestureHandler.Factory edgeBackGestureHandlerFactory,
mNavBarOverlayController = Dependency.get(NavigationBarOverlayController.class); NavigationBarOverlayController navigationBarOverlayController,
LightBarTransitionsController.Factory lightBarTransitionsControllerFactory
) {
mLightBarTransitionsControllerFactory = lightBarTransitionsControllerFactory;
mEdgeBackGestureHandler = edgeBackGestureHandlerFactory.create(context);
mNavBarOverlayController = navigationBarOverlayController;
if (mNavBarOverlayController.isNavigationBarOverlayEnabled()) { if (mNavBarOverlayController.isNavigationBarOverlayEnabled()) {
mNavBarOverlayController.init(mNavbarOverlayVisibilityChangeCallback, mNavBarOverlayController.init(mNavbarOverlayVisibilityChangeCallback,
mEdgeBackGestureHandler::updateNavigationBarOverlayExcludeRegion); mEdgeBackGestureHandler::updateNavigationBarOverlayExcludeRegion);
@@ -185,14 +191,15 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
dumpManager.registerDumpable(this); dumpManager.registerDumpable(this);
mAutoHideController = autoHideController; mAutoHideController = autoHideController;
mLightBarController = lightBarController; mLightBarController = lightBarController;
mLightBarTransitionsController = createLightBarTransitionsController();
mPipOptional = pipOptional; mPipOptional = pipOptional;
mBackAnimation = backAnimation; mBackAnimation = backAnimation;
mLightBarTransitionsController = createLightBarTransitionsController();
} }
// Separated into a method to keep setDependencies() clean/readable. // Separated into a method to keep setDependencies() clean/readable.
private LightBarTransitionsController createLightBarTransitionsController() { private LightBarTransitionsController createLightBarTransitionsController() {
return new LightBarTransitionsController(mContext,
LightBarTransitionsController controller = mLightBarTransitionsControllerFactory.create(
new LightBarTransitionsController.DarkIntensityApplier() { new LightBarTransitionsController.DarkIntensityApplier() {
@Override @Override
public void applyDarkIntensity(float darkIntensity) { public void applyDarkIntensity(float darkIntensity) {
@@ -203,13 +210,10 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
public int getTintAnimationDuration() { public int getTintAnimationDuration() {
return LightBarTransitionsController.DEFAULT_TINT_ANIMATION_DURATION; return LightBarTransitionsController.DEFAULT_TINT_ANIMATION_DURATION;
} }
}, mCommandQueue) { });
@Override controller.overrideIconTintForNavMode(true);
public boolean supportsIconTintForNavMode(int navigationMode) {
// Always tint taskbar nav buttons (region sampling handles gesture bar separately). return controller;
return true;
}
};
} }
public void init(int displayId) { public void init(int displayId) {

View File

@@ -26,7 +26,6 @@ import android.widget.ImageView;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.statusbar.CommandQueue;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.ArrayList; import java.util.ArrayList;
@@ -53,12 +52,12 @@ public class DarkIconDispatcherImpl implements SysuiDarkIconDispatcher,
@Inject @Inject
public DarkIconDispatcherImpl( public DarkIconDispatcherImpl(
Context context, Context context,
CommandQueue commandQueue, LightBarTransitionsController.Factory lightBarTransitionsControllerFactory,
DumpManager dumpManager) { DumpManager dumpManager) {
mDarkModeIconColorSingleTone = context.getColor(R.color.dark_mode_icon_color_single_tone); mDarkModeIconColorSingleTone = context.getColor(R.color.dark_mode_icon_color_single_tone);
mLightModeIconColorSingleTone = context.getColor(R.color.light_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); dumpManager.registerDumpable(getClass().getSimpleName(), this);
} }

View File

@@ -24,7 +24,6 @@ import android.os.SystemClock;
import android.util.MathUtils; import android.util.MathUtils;
import android.util.TimeUtils; import android.util.TimeUtils;
import com.android.systemui.Dependency;
import com.android.systemui.Dumpable; import com.android.systemui.Dumpable;
import com.android.systemui.animation.Interpolators; import com.android.systemui.animation.Interpolators;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -35,6 +34,10 @@ import com.android.systemui.statusbar.policy.KeyguardStateController;
import java.io.PrintWriter; 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. * Class to control all aspects about light bar changes.
*/ */
@@ -69,13 +72,19 @@ public class LightBarTransitionsController implements Dumpable, Callbacks,
}; };
private final Context mContext; private final Context mContext;
private Boolean mOverrideIconTintForNavMode;
public LightBarTransitionsController(Context context, DarkIntensityApplier applier, @AssistedInject
CommandQueue commandQueue) { public LightBarTransitionsController(
Context context,
@Assisted DarkIntensityApplier applier,
CommandQueue commandQueue,
KeyguardStateController keyguardStateController,
StatusBarStateController statusBarStateController) {
mApplier = applier; mApplier = applier;
mHandler = new Handler(); mHandler = new Handler();
mKeyguardStateController = Dependency.get(KeyguardStateController.class); mKeyguardStateController = keyguardStateController;
mStatusBarStateController = Dependency.get(StatusBarStateController.class); mStatusBarStateController = statusBarStateController;
mCommandQueue = commandQueue; mCommandQueue = commandQueue;
mCommandQueue.addCallback(this); mCommandQueue.addCallback(this);
mStatusBarStateController.addCallback(this); mStatusBarStateController.addCallback(this);
@@ -229,12 +238,20 @@ public class LightBarTransitionsController implements Dumpable, Callbacks,
dispatchDark(); 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. * Return whether to use the tint calculated in this class for nav icons.
*/ */
public boolean supportsIconTintForNavMode(int navigationMode) { public boolean supportsIconTintForNavMode(int navigationMode) {
// In gesture mode, we already do region sampling to update tint based on content beneath. // 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);
} }
/** /**
@@ -244,4 +261,11 @@ public class LightBarTransitionsController implements Dumpable, Callbacks,
void applyDarkIntensity(float darkIntensity); void applyDarkIntensity(float darkIntensity);
int getTintAnimationDuration(); 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 @Mock
private DarkIntensityApplier mApplier; private DarkIntensityApplier mApplier;
@Mock
private KeyguardStateController mKeyguardStateController;
@Mock
private StatusBarStateController mStatusBarStateController;
private LightBarTransitionsController mLightBarTransitionsController; private LightBarTransitionsController mLightBarTransitionsController;
@Before @Before
public void setup() { public void setup() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mDependency.injectMockDependency(KeyguardStateController.class);
mDependency.injectMockDependency(StatusBarStateController.class);
mLightBarTransitionsController = new LightBarTransitionsController(mContext, mApplier, mLightBarTransitionsController = new LightBarTransitionsController(mContext, mApplier,
new CommandQueue(mContext)); new CommandQueue(mContext), mKeyguardStateController, mStatusBarStateController);
} }
@Test @Test