Remove color extraction from scrims
Fixes: 129295950
Test: atest SysuiColorExtractorTests
Test: atest ScrimControllerTest
Test: atest ScrimViewTest
Test: visual
Change-Id: Ie45fd3f2e7b022236f0dda22fa1c854c0eff19ea
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsActivity.java
index cec97ab..79c691c 100644
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsActivity.java
+++ b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/RecentsActivity.java
@@ -87,13 +87,13 @@
import com.android.systemui.recents.events.ui.focus.NavigateTaskViewEvent;
import com.android.systemui.recents.events.ui.focus.NavigateTaskViewEvent.Direction;
import com.android.systemui.recents.misc.SystemServicesProxy;
-import com.android.systemui.recents.utilities.Utilities;
import com.android.systemui.recents.model.RecentsTaskLoadPlan;
import com.android.systemui.recents.model.RecentsTaskLoader;
-import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.recents.model.TaskStack;
+import com.android.systemui.recents.utilities.Utilities;
import com.android.systemui.recents.views.RecentsView;
import com.android.systemui.recents.views.SystemBarScrimViews;
+import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import java.io.FileDescriptor;
@@ -370,8 +370,7 @@
MetricsLogger.visible(this, MetricsEvent.OVERVIEW_ACTIVITY);
// Getting system scrim colors ignoring wallpaper visibility since it should never be grey.
- ColorExtractor.GradientColors systemColors = mColorExtractor.getColors(
- ColorExtractor.TYPE_DARK, WallpaperManager.FLAG_SYSTEM, true);
+ ColorExtractor.GradientColors systemColors = mColorExtractor.getNeutralColors();
// We don't want to interpolate colors because we're defining the initial state.
// Gradient should be set/ready when you open "Recents".
mRecentsView.setScrimColors(systemColors, false);
@@ -397,9 +396,7 @@
if ((which & WallpaperManager.FLAG_SYSTEM) != 0) {
// Recents doesn't care about the wallpaper being visible or not, it always
// wants to scrim with wallpaper colors
- ColorExtractor.GradientColors colors = mColorExtractor.getColors(
- WallpaperManager.FLAG_SYSTEM,
- ColorExtractor.TYPE_DARK, true /* ignoreVis */);
+ ColorExtractor.GradientColors colors = mColorExtractor.getNeutralColors();
boolean darkText = colors.supportsDarkText();
if (darkText != mUsingDarkText) {
mUsingDarkText = darkText;
diff --git a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsView.java
index 8723fb9..e60ffba 100644
--- a/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsView.java
+++ b/packages/SystemUI/legacy/recents/src/com/android/systemui/recents/views/RecentsView.java
@@ -34,7 +34,6 @@
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Handler;
-import android.os.IRemoteCallback;
import android.util.ArraySet;
import android.util.AttributeSet;
import android.util.Log;
@@ -50,7 +49,7 @@
import android.widget.TextView;
import com.android.internal.colorextraction.ColorExtractor;
-import com.android.internal.colorextraction.drawable.GradientDrawable;
+import com.android.internal.colorextraction.drawable.ScrimDrawable;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settingslib.Utils;
@@ -87,9 +86,9 @@
import com.android.systemui.recents.events.ui.dragndrop.DragStartEvent;
import com.android.systemui.recents.misc.ReferenceCountedTrigger;
import com.android.systemui.recents.misc.SystemServicesProxy;
-import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.recents.model.TaskStack;
import com.android.systemui.recents.utilities.Utilities;
+import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.shared.recents.view.AppTransitionAnimationSpecCompat;
import com.android.systemui.shared.recents.view.AppTransitionAnimationSpecsFuture;
import com.android.systemui.shared.recents.view.RecentsTransition;
@@ -134,7 +133,7 @@
private int mDividerSize;
private float mBusynessFactor;
- private GradientDrawable mBackgroundScrim;
+ private ScrimDrawable mBackgroundScrim;
private ColorDrawable mMultiWindowBackgroundScrim;
private ValueAnimator mBackgroundScrimAnimator;
private Point mTmpDisplaySize = new Point();
@@ -172,7 +171,7 @@
mDividerSize = ssp.getDockedDividerSize(context);
mTouchHandler = new RecentsViewTouchHandler(this);
mFlingAnimationUtils = new FlingAnimationUtils(context, 0.3f);
- mBackgroundScrim = new GradientDrawable(context);
+ mBackgroundScrim = new ScrimDrawable();
mMultiWindowBackgroundScrim = new ColorDrawable();
LayoutInflater inflater = LayoutInflater.from(context);
@@ -395,7 +394,7 @@
* @param animated Interpolate colors if true.
*/
public void setScrimColors(ColorExtractor.GradientColors scrimColors, boolean animated) {
- mBackgroundScrim.setColors(scrimColors, animated);
+ mBackgroundScrim.setColor(scrimColors.getMainColor(), animated);
int alpha = mMultiWindowBackgroundScrim.getAlpha();
mMultiWindowBackgroundScrim.setColor(scrimColors.getMainColor());
mMultiWindowBackgroundScrim.setAlpha(alpha);
@@ -467,7 +466,6 @@
// Needs to know the screen size since the gradient never scales up or down
// even when bounds change.
mContext.getDisplay().getRealSize(mTmpDisplaySize);
- mBackgroundScrim.setScreenSize(mTmpDisplaySize.x, mTmpDisplaySize.y);
mBackgroundScrim.setBounds(left, top, right, bottom);
mMultiWindowBackgroundScrim.setBounds(0, 0, mTmpDisplaySize.x, mTmpDisplaySize.y);
diff --git a/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java b/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java
index a74c328..05665b5 100644
--- a/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java
+++ b/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java
@@ -34,6 +34,7 @@
import com.android.internal.colorextraction.types.Tonal;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.Dumpable;
+import com.android.systemui.statusbar.policy.ConfigurationController;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -46,7 +47,8 @@
* ColorExtractor aware of wallpaper visibility
*/
@Singleton
-public class SysuiColorExtractor extends ColorExtractor implements Dumpable {
+public class SysuiColorExtractor extends ColorExtractor implements Dumpable,
+ ConfigurationController.ConfigurationListener {
private static final String TAG = "SysuiColorExtractor";
private final Tonal mTonal;
private boolean mWallpaperVisible;
@@ -55,15 +57,17 @@
private final GradientColors mWpHiddenColors;
@Inject
- public SysuiColorExtractor(Context context) {
- this(context, new Tonal(context), true);
+ public SysuiColorExtractor(Context context, ConfigurationController configurationController) {
+ this(context, new Tonal(context), configurationController, true);
}
@VisibleForTesting
- public SysuiColorExtractor(Context context, ExtractionType type, boolean registerVisibility) {
+ public SysuiColorExtractor(Context context, ExtractionType type,
+ ConfigurationController configurationController, boolean registerVisibility) {
super(context, type, false /* immediately */);
mTonal = type instanceof Tonal ? (Tonal) type : new Tonal(context);
mWpHiddenColors = new GradientColors();
+ configurationController.addCallback(this);
WallpaperColors systemColors = getWallpaperColors(WallpaperManager.FLAG_SYSTEM);
updateDefaultGradients(systemColors);
@@ -113,8 +117,21 @@
}
}
- @VisibleForTesting
- GradientColors getFallbackColors() {
+ @Override
+ public void onUiModeChanged() {
+ WallpaperColors systemColors = getWallpaperColors(WallpaperManager.FLAG_SYSTEM);
+ updateDefaultGradients(systemColors);
+ }
+
+ /**
+ * Colors the should be using for scrims.
+ *
+ * They will be:
+ * - A light gray if the wallpaper is light
+ * - A dark gray if the wallpaper is very dark or we're in night mode.
+ * - Black otherwise
+ */
+ public GradientColors getNeutralColors() {
return mWpHiddenColors;
}
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
index 7a3f3be..411536c 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
@@ -35,7 +35,6 @@
import android.content.IntentFilter;
import android.content.pm.UserInfo;
import android.database.ContentObserver;
-import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.media.AudioManager;
import android.net.ConnectivityManager;
@@ -73,7 +72,7 @@
import com.android.internal.R;
import com.android.internal.colorextraction.ColorExtractor;
import com.android.internal.colorextraction.ColorExtractor.GradientColors;
-import com.android.internal.colorextraction.drawable.GradientDrawable;
+import com.android.internal.colorextraction.drawable.ScrimDrawable;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.telephony.TelephonyIntents;
@@ -1503,7 +1502,7 @@
private final MyAdapter mAdapter;
private MultiListLayout mGlobalActionsLayout;
private Drawable mBackgroundDrawable;
- private final ColorExtractor mColorExtractor;
+ private final SysuiColorExtractor mColorExtractor;
private final GlobalActionsPanelPlugin.PanelViewController mPanelController;
private boolean mKeyguardShowing;
private boolean mShowing;
@@ -1582,7 +1581,7 @@
if (!shouldUsePanel()) {
if (mBackgroundDrawable == null) {
- mBackgroundDrawable = new GradientDrawable(mContext);
+ mBackgroundDrawable = new ScrimDrawable();
}
mScrimAlpha = ScrimController.GRADIENT_SCRIM_ALPHA;
} else {
@@ -1610,16 +1609,9 @@
super.onStart();
mGlobalActionsLayout.updateList();
- if (mBackgroundDrawable instanceof GradientDrawable) {
- Point displaySize = new Point();
- mContext.getDisplay().getRealSize(displaySize);
+ if (mBackgroundDrawable instanceof ScrimDrawable) {
mColorExtractor.addOnColorsChangedListener(this);
- ((GradientDrawable) mBackgroundDrawable)
- .setScreenSize(displaySize.x, displaySize.y);
- GradientColors colors = mColorExtractor.getColors(
- mKeyguardShowing
- ? WallpaperManager.FLAG_LOCK
- : WallpaperManager.FLAG_SYSTEM);
+ GradientColors colors = mColorExtractor.getNeutralColors();
updateColors(colors, false /* animate */);
}
}
@@ -1630,10 +1622,10 @@
* @param animate Interpolates gradient if true, just sets otherwise.
*/
private void updateColors(GradientColors colors, boolean animate) {
- if (!(mBackgroundDrawable instanceof GradientDrawable)) {
+ if (!(mBackgroundDrawable instanceof ScrimDrawable)) {
return;
}
- ((GradientDrawable) mBackgroundDrawable).setColors(colors, animate);
+ ((ScrimDrawable) mBackgroundDrawable).setColor(colors.getMainColor(), animate);
View decorView = getWindow().getDecorView();
if (colors.supportsDarkText()) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR |
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java
index 4cf58b7..4065d5b 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java
@@ -19,9 +19,7 @@
import android.app.Dialog;
import android.app.KeyguardManager;
-import android.app.WallpaperManager;
import android.content.Context;
-import android.graphics.Point;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
@@ -31,7 +29,7 @@
import com.android.internal.R;
import com.android.internal.colorextraction.ColorExtractor.GradientColors;
-import com.android.internal.colorextraction.drawable.GradientDrawable;
+import com.android.internal.colorextraction.drawable.ScrimDrawable;
import com.android.settingslib.Utils;
import com.android.systemui.Dependency;
import com.android.systemui.SysUiServiceProvider;
@@ -87,7 +85,7 @@
@Override
public void showShutdownUi(boolean isReboot, String reason) {
- GradientDrawable background = new GradientDrawable(mContext);
+ ScrimDrawable background = new ScrimDrawable();
background.setAlpha((int) (SHUTDOWN_SCRIM_ALPHA * 255));
Dialog d = new Dialog(mContext,
@@ -129,12 +127,8 @@
message.setTextColor(color);
if (isReboot) message.setText(R.string.reboot_to_reset_message);
- Point displaySize = new Point();
- mContext.getDisplay().getRealSize(displaySize);
- GradientColors colors = Dependency.get(SysuiColorExtractor.class).getColors(
- onKeyguard ? WallpaperManager.FLAG_LOCK : WallpaperManager.FLAG_SYSTEM);
- background.setColors(colors, false);
- background.setScreenSize(displaySize.x, displaySize.y);
+ GradientColors colors = Dependency.get(SysuiColorExtractor.class).getNeutralColors();
+ background.setColor(colors.getMainColor(), false);
d.show();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ScrimView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ScrimView.java
index cf6e64c..04f1c32 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ScrimView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ScrimView.java
@@ -16,61 +16,33 @@
package com.android.systemui.statusbar;
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
import android.annotation.NonNull;
import android.content.Context;
-import android.content.res.Configuration;
import android.graphics.Canvas;
import android.graphics.Color;
-import android.graphics.Point;
import android.graphics.PorterDuff;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
-import android.util.Log;
-import android.view.Display;
import android.view.View;
-import android.view.WindowManager;
import androidx.core.graphics.ColorUtils;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.colorextraction.ColorExtractor;
-import com.android.internal.colorextraction.drawable.GradientDrawable;
-import com.android.settingslib.Utils;
-import com.android.systemui.Dependency;
-import com.android.systemui.statusbar.policy.ConfigurationController;
+import com.android.internal.colorextraction.drawable.ScrimDrawable;
/**
* A view which can draw a scrim
*/
-public class ScrimView extends View implements ConfigurationController.ConfigurationListener {
- private static final String TAG = "ScrimView";
+public class ScrimView extends View {
private final ColorExtractor.GradientColors mColors;
- private int mDensity;
private float mViewAlpha = 1.0f;
- private ValueAnimator mAlphaAnimator;
private Drawable mDrawable;
private PorterDuffColorFilter mColorFilter;
private int mTintColor;
- private ValueAnimator.AnimatorUpdateListener mAlphaUpdateListener = animation -> {
- if (mDrawable == null) {
- Log.w(TAG, "Trying to animate null drawable");
- return;
- }
- mDrawable.setAlpha((int) (255 * (float) animation.getAnimatedValue()));
- };
- private AnimatorListenerAdapter mClearAnimatorListener = new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- mAlphaAnimator = null;
- }
- };
private Runnable mChangeRunnable;
- private int mCornerRadius;
public ScrimView(Context context) {
this(context, null);
@@ -87,47 +59,10 @@
public ScrimView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
- mDrawable = new GradientDrawable(context);
+ mDrawable = new ScrimDrawable();
mDrawable.setCallback(this);
mColors = new ColorExtractor.GradientColors();
- updateScreenSize();
updateColorWithTint(false);
- initView();
- final Configuration currentConfig = mContext.getResources().getConfiguration();
- mDensity = currentConfig.densityDpi;
- }
-
- private void initView() {
- mCornerRadius = getResources().getDimensionPixelSize(
- Utils.getThemeAttr(mContext, android.R.attr.dialogCornerRadius));
- }
-
- @Override
- protected void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- int densityDpi = newConfig.densityDpi;
- if (mDensity != densityDpi) {
- mDensity = densityDpi;
- initView();
- }
- }
-
- @Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
-
- // We need to know about configuration changes to update the gradient size
- // since it's independent from view bounds.
- ConfigurationController config = Dependency.get(ConfigurationController.class);
- config.addCallback(this);
- }
-
- @Override
- protected void onDetachedFromWindow() {
- super.onDetachedFromWindow();
-
- ConfigurationController config = Dependency.get(ConfigurationController.class);
- config.removeCallback(this);
}
@Override
@@ -142,7 +77,6 @@
mDrawable.setCallback(this);
mDrawable.setBounds(getLeft(), getTop(), getRight(), getBottom());
mDrawable.setAlpha((int) (255 * mViewAlpha));
- updateScreenSize();
invalidate();
}
@@ -200,15 +134,13 @@
}
private void updateColorWithTint(boolean animated) {
- if (mDrawable instanceof GradientDrawable) {
+ if (mDrawable instanceof ScrimDrawable) {
// Optimization to blend colors and avoid a color filter
- GradientDrawable drawable = (GradientDrawable) mDrawable;
+ ScrimDrawable drawable = (ScrimDrawable) mDrawable;
float tintAmount = Color.alpha(mTintColor) / 255f;
int mainTinted = ColorUtils.blendARGB(mColors.getMainColor(), mTintColor,
tintAmount);
- int secondaryTinted = ColorUtils.blendARGB(mColors.getSecondaryColor(), mTintColor,
- tintAmount);
- drawable.setColors(mainTinted, secondaryTinted, animated);
+ drawable.setColor(mainTinted, animated);
} else {
boolean hasAlpha = Color.alpha(mTintColor) != 0;
if (hasAlpha) {
@@ -250,10 +182,6 @@
if (alpha != mViewAlpha) {
mViewAlpha = alpha;
- if (mAlphaAnimator != null) {
- mAlphaAnimator.cancel();
- }
-
mDrawable.setAlpha((int) (255 * alpha));
if (mChangeRunnable != null) {
mChangeRunnable.run();
@@ -270,27 +198,6 @@
}
@Override
- public void onConfigChanged(Configuration newConfig) {
- updateScreenSize();
- }
-
- private void updateScreenSize() {
- if (mDrawable instanceof GradientDrawable) {
- WindowManager wm = mContext.getSystemService(WindowManager.class);
- if (wm == null) {
- Log.w(TAG, "Can't resize gradient drawable to fit the screen");
- return;
- }
- Display display = wm.getDefaultDisplay();
- if (display != null) {
- Point size = new Point();
- display.getRealSize(size);
- ((GradientDrawable) mDrawable).setScreenSize(size.x, size.y);
- }
- }
- }
-
- @Override
protected boolean canReceivePointerEvents() {
return false;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
index 0d2fe13..ed79476 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
@@ -20,7 +20,6 @@
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.app.AlarmManager;
-import android.app.WallpaperManager;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
@@ -121,8 +120,7 @@
private final Handler mHandler;
private final SysuiColorExtractor mColorExtractor;
- private GradientColors mLockColors;
- private GradientColors mSystemColors;
+ private GradientColors mColors;
private boolean mNeedsDrawableColorUpdate;
protected float mScrimBehindAlpha;
@@ -190,10 +188,7 @@
mColorExtractor = Dependency.get(SysuiColorExtractor.class);
mColorExtractor.addOnColorsChangedListener(this);
- mLockColors = mColorExtractor.getColors(WallpaperManager.FLAG_LOCK,
- ColorExtractor.TYPE_DARK, true /* ignoreVisibility */);
- mSystemColors = mColorExtractor.getColors(WallpaperManager.FLAG_SYSTEM,
- ColorExtractor.TYPE_DARK, true /* ignoreVisibility */);
+ mColors = mColorExtractor.getNeutralColors();
mNeedsDrawableColorUpdate = true;
final ScrimState[] states = ScrimState.values();
@@ -201,7 +196,6 @@
states[i].init(mScrimInFront, mScrimBehind, mDozeParameters);
states[i].setScrimBehindAlphaKeyguard(mScrimBehindAlphaKeyguard);
}
- mState = ScrimState.UNINITIALIZED;
mScrimBehind.setDefaultFocusHighlightEnabled(false);
mScrimInFront.setDefaultFocusHighlightEnabled(false);
@@ -488,17 +482,15 @@
// Make sure we have the right gradients and their opacities will satisfy GAR.
if (mNeedsDrawableColorUpdate) {
mNeedsDrawableColorUpdate = false;
- boolean isKeyguard = mKeyguardUpdateMonitor.isKeyguardVisible() && !mKeyguardOccluded;
- GradientColors currentScrimColors = isKeyguard ? mLockColors : mSystemColors;
// Only animate scrim color if the scrim view is actually visible
boolean animateScrimInFront = mScrimInFront.getViewAlpha() != 0 && !mBlankScreen;
boolean animateScrimBehind = mScrimBehind.getViewAlpha() != 0 && !mBlankScreen;
- mScrimInFront.setColors(currentScrimColors, animateScrimInFront);
- mScrimBehind.setColors(currentScrimColors, animateScrimBehind);
+ mScrimInFront.setColors(mColors, animateScrimInFront);
+ mScrimBehind.setColors(mColors, animateScrimBehind);
// Calculate minimum scrim opacity for white or black text.
- int textColor = currentScrimColors.supportsDarkText() ? Color.BLACK : Color.WHITE;
- int mainColor = currentScrimColors.getMainColor();
+ int textColor = mColors.supportsDarkText() ? Color.BLACK : Color.WHITE;
+ int mainColor = mColors.getMainColor();
float minOpacity = ColorUtils.calculateMinimumBackgroundAlpha(textColor, mainColor,
4.5f /* minimumContrast */) / 255f;
mScrimBehindAlpha = Math.max(mScrimBehindAlphaResValue, minOpacity);
@@ -815,7 +807,7 @@
}
public int getBackgroundColor() {
- int color = mLockColors.getMainColor();
+ int color = mColors.getMainColor();
return Color.argb((int) (mScrimBehind.getViewAlpha() * Color.alpha(color)),
Color.red(color), Color.green(color), Color.blue(color));
}
@@ -830,18 +822,9 @@
@Override
public void onColorsChanged(ColorExtractor colorExtractor, int which) {
- if ((which & WallpaperManager.FLAG_LOCK) != 0) {
- mLockColors = mColorExtractor.getColors(WallpaperManager.FLAG_LOCK,
- ColorExtractor.TYPE_DARK, true /* ignoreVisibility */);
- mNeedsDrawableColorUpdate = true;
- scheduleUpdate();
- }
- if ((which & WallpaperManager.FLAG_SYSTEM) != 0) {
- mSystemColors = mColorExtractor.getColors(WallpaperManager.FLAG_SYSTEM,
- ColorExtractor.TYPE_DARK, mState != ScrimState.UNLOCKED);
- mNeedsDrawableColorUpdate = true;
- scheduleUpdate();
- }
+ mColors = mColorExtractor.getNeutralColors();
+ mNeedsDrawableColorUpdate = true;
+ scheduleUpdate();
}
@VisibleForTesting
diff --git a/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java b/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java
index 1649f98..67df60a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java
@@ -18,6 +18,11 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.verify;
import android.app.WallpaperColors;
import android.app.WallpaperManager;
@@ -27,7 +32,9 @@
import androidx.test.runner.AndroidJUnit4;
import com.android.internal.colorextraction.ColorExtractor;
+import com.android.internal.colorextraction.types.Tonal;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.statusbar.policy.ConfigurationController;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -57,7 +64,7 @@
simulateEvent(extractor);
extractor.setWallpaperVisible(false);
- ColorExtractor.GradientColors fallbackColors = extractor.getFallbackColors();
+ ColorExtractor.GradientColors fallbackColors = extractor.getNeutralColors();
for (int type : sTypes) {
assertEquals("Not using fallback!",
@@ -96,7 +103,7 @@
extractor.setWallpaperVisible(true);
extractor.setHasBackdrop(true);
- ColorExtractor.GradientColors fallbackColors = extractor.getFallbackColors();
+ ColorExtractor.GradientColors fallbackColors = extractor.getNeutralColors();
for (int type : sTypes) {
assertEquals("Not using fallback!",
@@ -106,6 +113,19 @@
}
}
+ @Test
+ public void onUiModeChanged_reloadsColors() {
+ Tonal tonal = mock(Tonal.class);
+ ConfigurationController configurationController = mock(ConfigurationController.class);
+ SysuiColorExtractor sysuiColorExtractor = new SysuiColorExtractor(getContext(),
+ tonal, configurationController, false /* registerVisibility */);
+ verify(configurationController).addCallback(eq(sysuiColorExtractor));
+
+ reset(tonal);
+ sysuiColorExtractor.onUiModeChanged();
+ verify(tonal).applyFallback(any(), any());
+ }
+
private SysuiColorExtractor getTestableExtractor(ColorExtractor.GradientColors colors) {
return new SysuiColorExtractor(getContext(),
(inWallpaperColors, outGradientColorsNormal, outGradientColorsDark,
@@ -113,7 +133,7 @@
outGradientColorsNormal.set(colors);
outGradientColorsDark.set(colors);
outGradientColorsExtraDark.set(colors);
- }, false);
+ }, mock(ConfigurationController.class), false);
}
private void simulateEvent(SysuiColorExtractor extractor) {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/ScrimViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/ScrimViewTest.java
index 2020d4b..87a7757 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/ScrimViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/ScrimViewTest.java
@@ -30,7 +30,7 @@
import androidx.test.filters.SmallTest;
import com.android.internal.colorextraction.ColorExtractor;
-import com.android.internal.colorextraction.drawable.GradientDrawable;
+import com.android.internal.colorextraction.drawable.ScrimDrawable;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.utils.leaks.LeakCheckedTest;
@@ -70,12 +70,10 @@
@Test
public void testCreation_initialColor() {
- GradientDrawable drawable = (GradientDrawable) mView.getDrawable();
+ ScrimDrawable drawable = (ScrimDrawable) mView.getDrawable();
ColorExtractor.GradientColors colors = mView.getColors();
assertEquals("Main color should be set upon creation",
drawable.getMainColor(), colors.getMainColor());
- assertEquals("Secondary color should be set upon creation",
- drawable.getSecondaryColor(), colors.getSecondaryColor());
}
@Test