Loading core/java/com/android/internal/colorextraction/ColorExtractor.java +11 −3 Original line number Original line Diff line number Diff line Loading @@ -22,7 +22,6 @@ import android.app.WallpaperColors; import android.app.WallpaperManager; import android.app.WallpaperManager; import android.content.Context; import android.content.Context; import android.os.Trace; import android.os.Trace; import android.os.UserHandle; import android.util.Log; import android.util.Log; import android.util.SparseArray; import android.util.SparseArray; Loading @@ -32,7 +31,6 @@ import com.android.internal.colorextraction.types.Tonal; import java.lang.ref.WeakReference; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.ArrayList; import java.util.Iterator; /** /** * Class to process wallpaper colors and generate a tonal palette based on them. * Class to process wallpaper colors and generate a tonal palette based on them. Loading Loading @@ -222,6 +220,7 @@ public class ColorExtractor implements WallpaperManager.OnColorsChangedListener public static class GradientColors { public static class GradientColors { private int mMainColor; private int mMainColor; private int mSecondaryColor; private int mSecondaryColor; private int[] mColorPalette; private boolean mSupportsDarkText; private boolean mSupportsDarkText; public void setMainColor(int mainColor) { public void setMainColor(int mainColor) { Loading @@ -232,6 +231,10 @@ public class ColorExtractor implements WallpaperManager.OnColorsChangedListener mSecondaryColor = secondaryColor; mSecondaryColor = secondaryColor; } } public void setColorPalette(int[] colorPalette) { mColorPalette = colorPalette; } public void setSupportsDarkText(boolean supportsDarkText) { public void setSupportsDarkText(boolean supportsDarkText) { mSupportsDarkText = supportsDarkText; mSupportsDarkText = supportsDarkText; } } Loading @@ -239,6 +242,7 @@ public class ColorExtractor implements WallpaperManager.OnColorsChangedListener public void set(GradientColors other) { public void set(GradientColors other) { mMainColor = other.mMainColor; mMainColor = other.mMainColor; mSecondaryColor = other.mSecondaryColor; mSecondaryColor = other.mSecondaryColor; mColorPalette = other.mColorPalette; mSupportsDarkText = other.mSupportsDarkText; mSupportsDarkText = other.mSupportsDarkText; } } Loading @@ -250,6 +254,10 @@ public class ColorExtractor implements WallpaperManager.OnColorsChangedListener return mSecondaryColor; return mSecondaryColor; } } public int[] getColorPalette() { return mColorPalette; } public boolean supportsDarkText() { public boolean supportsDarkText() { return mSupportsDarkText; return mSupportsDarkText; } } Loading core/java/com/android/internal/colorextraction/types/Tonal.java +22 −2 Original line number Original line Diff line number Diff line Loading @@ -173,6 +173,7 @@ public class Tonal implements ExtractionType { Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY); Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY); float[] s = fit(palette.s, hsl[1], fitIndex, 0.0f, 1.0f); float[] s = fit(palette.s, hsl[1], fitIndex, 0.0f, 1.0f); float[] l = fit(palette.l, hsl[2], fitIndex, 0.0f, 1.0f); float[] l = fit(palette.l, hsl[2], fitIndex, 0.0f, 1.0f); int[] colorPalette = getColorPalette(h, s, l); if (DEBUG) { if (DEBUG) { StringBuilder builder = new StringBuilder("Tonal Palette - index: " + fitIndex + StringBuilder builder = new StringBuilder("Tonal Palette - index: " + fitIndex + Loading Loading @@ -209,6 +210,7 @@ public class Tonal implements ExtractionType { // Normal colors: // Normal colors: outColorsNormal.setMainColor(mainColor); outColorsNormal.setMainColor(mainColor); outColorsNormal.setSecondaryColor(mainColor); outColorsNormal.setSecondaryColor(mainColor); outColorsNormal.setColorPalette(colorPalette); // Dark colors: // Dark colors: // Stops at 4th color, only lighter if dark text is supported // Stops at 4th color, only lighter if dark text is supported Loading @@ -222,6 +224,7 @@ public class Tonal implements ExtractionType { mainColor = getColorInt(primaryIndex, h, s, l); mainColor = getColorInt(primaryIndex, h, s, l); outColorsDark.setMainColor(mainColor); outColorsDark.setMainColor(mainColor); outColorsDark.setSecondaryColor(mainColor); outColorsDark.setSecondaryColor(mainColor); outColorsDark.setColorPalette(colorPalette); // Extra Dark: // Extra Dark: // Stay close to dark colors until dark text is supported // Stay close to dark colors until dark text is supported Loading @@ -235,6 +238,7 @@ public class Tonal implements ExtractionType { mainColor = getColorInt(primaryIndex, h, s, l); mainColor = getColorInt(primaryIndex, h, s, l); outColorsExtraDark.setMainColor(mainColor); outColorsExtraDark.setMainColor(mainColor); outColorsExtraDark.setSecondaryColor(mainColor); outColorsExtraDark.setSecondaryColor(mainColor); outColorsExtraDark.setColorPalette(colorPalette); outColorsNormal.setSupportsDarkText(supportsDarkText); outColorsNormal.setSupportsDarkText(supportsDarkText); outColorsDark.setSupportsDarkText(supportsDarkText); outColorsDark.setSupportsDarkText(supportsDarkText); Loading Loading @@ -262,16 +266,19 @@ public class Tonal implements ExtractionType { * @param inWallpaperColors Colors to read. * @param inWallpaperColors Colors to read. * @param outGradientColors Destination. * @param outGradientColors Destination. */ */ public static void applyFallback(@Nullable WallpaperColors inWallpaperColors, public void applyFallback(@Nullable WallpaperColors inWallpaperColors, @NonNull GradientColors outGradientColors) { @NonNull GradientColors outGradientColors) { boolean light = inWallpaperColors != null boolean light = inWallpaperColors != null && (inWallpaperColors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) && (inWallpaperColors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) != 0; != 0; final int color = light ? MAIN_COLOR_LIGHT : MAIN_COLOR_DARK; final int color = light ? MAIN_COLOR_LIGHT : MAIN_COLOR_DARK; final float[] hsl = new float[3]; ColorUtils.colorToHSL(color, hsl); outGradientColors.setMainColor(color); outGradientColors.setMainColor(color); outGradientColors.setSecondaryColor(color); outGradientColors.setSecondaryColor(color); outGradientColors.setSupportsDarkText(light); outGradientColors.setSupportsDarkText(light); outGradientColors.setColorPalette(getColorPalette(findTonalPalette(hsl[0], hsl[1]))); } } private int getColorInt(int fitIndex, float[] h, float[] s, float[] l) { private int getColorInt(int fitIndex, float[] h, float[] s, float[] l) { Loading @@ -281,6 +288,19 @@ public class Tonal implements ExtractionType { return ColorUtils.HSLToColor(mTmpHSL); return ColorUtils.HSLToColor(mTmpHSL); } } private int[] getColorPalette(float[] h, float[] s, float[] l) { int[] colorPalette = new int[h.length]; for (int i = 0; i < colorPalette.length; i++) { colorPalette[i] = getColorInt(i, h, s, l); } return colorPalette; } private int[] getColorPalette(TonalPalette palette) { return getColorPalette(palette.h, palette.s, palette.l); } /** /** * Checks if a given color exists in the blacklist * Checks if a given color exists in the blacklist * @param hsl float array with 3 components (H 0..360, S 0..1 and L 0..1) * @param hsl float array with 3 components (H 0..360, S 0..1 and L 0..1) Loading packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockPlugin.java +8 −1 Original line number Original line Diff line number Diff line Loading @@ -54,6 +54,13 @@ public interface ClockPlugin extends Plugin { */ */ void setTextColor(int color); void setTextColor(int color); /** * Sets the color palette for the clock face. * @param supportsDarkText Whether dark text can be displayed. * @param colors Colors that should be used on the clock face, ordered from darker to lighter. */ default void setColorPalette(boolean supportsDarkText, int[] colors) {} /** /** * Notifies that time tick alarm from doze service fired. * Notifies that time tick alarm from doze service fired. */ */ Loading packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java +38 −0 Original line number Original line Diff line number Diff line package com.android.keyguard; package com.android.keyguard; import android.app.WallpaperManager; import android.content.Context; import android.content.Context; import android.graphics.Paint; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.Paint.Style; Loading @@ -12,8 +13,10 @@ import android.widget.TextClock; import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting; import com.android.internal.colorextraction.ColorExtractor; import com.android.keyguard.clock.ClockManager; import com.android.keyguard.clock.ClockManager; import com.android.systemui.Dependency; import com.android.systemui.Dependency; import com.android.systemui.colorextraction.SysuiColorExtractor; import com.android.systemui.plugins.ClockPlugin; import com.android.systemui.plugins.ClockPlugin; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.StatusBarState; Loading Loading @@ -50,6 +53,8 @@ public class KeyguardClockSwitch extends RelativeLayout { * Maintain state so that a newly connected plugin can be initialized. * Maintain state so that a newly connected plugin can be initialized. */ */ private float mDarkAmount; private float mDarkAmount; private boolean mSupportsDarkText; private int[] mColorPalette; private final StatusBarStateController.StateListener mStateListener = private final StatusBarStateController.StateListener mStateListener = new StatusBarStateController.StateListener() { new StatusBarStateController.StateListener() { Loading @@ -72,6 +77,21 @@ public class KeyguardClockSwitch extends RelativeLayout { private ClockManager.ClockChangedListener mClockChangedListener = this::setClockPlugin; private ClockManager.ClockChangedListener mClockChangedListener = this::setClockPlugin; /** * Listener for changes to the color palette. * * The color palette changes when the wallpaper is changed. */ private SysuiColorExtractor.OnColorsChangedListener mColorsListener = (extractor, which) -> { if ((which & WallpaperManager.FLAG_LOCK) != 0) { if (extractor instanceof SysuiColorExtractor) { updateColors((SysuiColorExtractor) extractor); } else { updateColors(Dependency.get(SysuiColorExtractor.class)); } } }; public KeyguardClockSwitch(Context context) { public KeyguardClockSwitch(Context context) { this(context, null); this(context, null); } } Loading Loading @@ -100,6 +120,9 @@ public class KeyguardClockSwitch extends RelativeLayout { super.onAttachedToWindow(); super.onAttachedToWindow(); Dependency.get(ClockManager.class).addOnClockChangedListener(mClockChangedListener); Dependency.get(ClockManager.class).addOnClockChangedListener(mClockChangedListener); Dependency.get(StatusBarStateController.class).addCallback(mStateListener); Dependency.get(StatusBarStateController.class).addCallback(mStateListener); SysuiColorExtractor colorExtractor = Dependency.get(SysuiColorExtractor.class); colorExtractor.addOnColorsChangedListener(mColorsListener); updateColors(colorExtractor); } } @Override @Override Loading @@ -107,6 +130,8 @@ public class KeyguardClockSwitch extends RelativeLayout { super.onDetachedFromWindow(); super.onDetachedFromWindow(); Dependency.get(ClockManager.class).removeOnClockChangedListener(mClockChangedListener); Dependency.get(ClockManager.class).removeOnClockChangedListener(mClockChangedListener); Dependency.get(StatusBarStateController.class).removeCallback(mStateListener); Dependency.get(StatusBarStateController.class).removeCallback(mStateListener); Dependency.get(SysuiColorExtractor.class) .removeOnColorsChangedListener(mColorsListener); } } private void setClockPlugin(ClockPlugin plugin) { private void setClockPlugin(ClockPlugin plugin) { Loading Loading @@ -149,6 +174,9 @@ public class KeyguardClockSwitch extends RelativeLayout { mClockPlugin.setStyle(getPaint().getStyle()); mClockPlugin.setStyle(getPaint().getStyle()); mClockPlugin.setTextColor(getCurrentTextColor()); mClockPlugin.setTextColor(getCurrentTextColor()); mClockPlugin.setDarkAmount(mDarkAmount); mClockPlugin.setDarkAmount(mDarkAmount); if (mColorPalette != null) { mClockPlugin.setColorPalette(mSupportsDarkText, mColorPalette); } } } /** /** Loading Loading @@ -246,6 +274,16 @@ public class KeyguardClockSwitch extends RelativeLayout { } } } } private void updateColors(SysuiColorExtractor colorExtractor) { ColorExtractor.GradientColors colors = colorExtractor.getColors(WallpaperManager.FLAG_LOCK, true); mSupportsDarkText = colors.supportsDarkText(); mColorPalette = colors.getColorPalette(); if (mClockPlugin != null) { mClockPlugin.setColorPalette(mSupportsDarkText, mColorPalette); } } @VisibleForTesting (otherwise = VisibleForTesting.NONE) @VisibleForTesting (otherwise = VisibleForTesting.NONE) ClockManager.ClockChangedListener getClockChangedListener() { ClockManager.ClockChangedListener getClockChangedListener() { return mClockChangedListener; return mClockChangedListener; Loading packages/SystemUI/src/com/android/keyguard/clock/BubbleClockController.java +11 −1 Original line number Original line Diff line number Diff line Loading @@ -89,7 +89,17 @@ public class BubbleClockController implements ClockPlugin { @Override @Override public void setTextColor(int color) { public void setTextColor(int color) { mLockClock.setTextColor(color); mLockClock.setTextColor(color); mDigitalClock.setTextColor(color); } @Override public void setColorPalette(boolean supportsDarkText, int[] colorPalette) { if (colorPalette == null || colorPalette.length == 0) { return; } final int length = colorPalette.length; mDigitalClock.setTextColor(colorPalette[Math.max(0, length - 6)]); mAnalogClock.setClockColors(colorPalette[Math.max(0, length - 6)], colorPalette[Math.max(0, length - 3)]); } } @Override @Override Loading Loading
core/java/com/android/internal/colorextraction/ColorExtractor.java +11 −3 Original line number Original line Diff line number Diff line Loading @@ -22,7 +22,6 @@ import android.app.WallpaperColors; import android.app.WallpaperManager; import android.app.WallpaperManager; import android.content.Context; import android.content.Context; import android.os.Trace; import android.os.Trace; import android.os.UserHandle; import android.util.Log; import android.util.Log; import android.util.SparseArray; import android.util.SparseArray; Loading @@ -32,7 +31,6 @@ import com.android.internal.colorextraction.types.Tonal; import java.lang.ref.WeakReference; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.ArrayList; import java.util.Iterator; /** /** * Class to process wallpaper colors and generate a tonal palette based on them. * Class to process wallpaper colors and generate a tonal palette based on them. Loading Loading @@ -222,6 +220,7 @@ public class ColorExtractor implements WallpaperManager.OnColorsChangedListener public static class GradientColors { public static class GradientColors { private int mMainColor; private int mMainColor; private int mSecondaryColor; private int mSecondaryColor; private int[] mColorPalette; private boolean mSupportsDarkText; private boolean mSupportsDarkText; public void setMainColor(int mainColor) { public void setMainColor(int mainColor) { Loading @@ -232,6 +231,10 @@ public class ColorExtractor implements WallpaperManager.OnColorsChangedListener mSecondaryColor = secondaryColor; mSecondaryColor = secondaryColor; } } public void setColorPalette(int[] colorPalette) { mColorPalette = colorPalette; } public void setSupportsDarkText(boolean supportsDarkText) { public void setSupportsDarkText(boolean supportsDarkText) { mSupportsDarkText = supportsDarkText; mSupportsDarkText = supportsDarkText; } } Loading @@ -239,6 +242,7 @@ public class ColorExtractor implements WallpaperManager.OnColorsChangedListener public void set(GradientColors other) { public void set(GradientColors other) { mMainColor = other.mMainColor; mMainColor = other.mMainColor; mSecondaryColor = other.mSecondaryColor; mSecondaryColor = other.mSecondaryColor; mColorPalette = other.mColorPalette; mSupportsDarkText = other.mSupportsDarkText; mSupportsDarkText = other.mSupportsDarkText; } } Loading @@ -250,6 +254,10 @@ public class ColorExtractor implements WallpaperManager.OnColorsChangedListener return mSecondaryColor; return mSecondaryColor; } } public int[] getColorPalette() { return mColorPalette; } public boolean supportsDarkText() { public boolean supportsDarkText() { return mSupportsDarkText; return mSupportsDarkText; } } Loading
core/java/com/android/internal/colorextraction/types/Tonal.java +22 −2 Original line number Original line Diff line number Diff line Loading @@ -173,6 +173,7 @@ public class Tonal implements ExtractionType { Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY); Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY); float[] s = fit(palette.s, hsl[1], fitIndex, 0.0f, 1.0f); float[] s = fit(palette.s, hsl[1], fitIndex, 0.0f, 1.0f); float[] l = fit(palette.l, hsl[2], fitIndex, 0.0f, 1.0f); float[] l = fit(palette.l, hsl[2], fitIndex, 0.0f, 1.0f); int[] colorPalette = getColorPalette(h, s, l); if (DEBUG) { if (DEBUG) { StringBuilder builder = new StringBuilder("Tonal Palette - index: " + fitIndex + StringBuilder builder = new StringBuilder("Tonal Palette - index: " + fitIndex + Loading Loading @@ -209,6 +210,7 @@ public class Tonal implements ExtractionType { // Normal colors: // Normal colors: outColorsNormal.setMainColor(mainColor); outColorsNormal.setMainColor(mainColor); outColorsNormal.setSecondaryColor(mainColor); outColorsNormal.setSecondaryColor(mainColor); outColorsNormal.setColorPalette(colorPalette); // Dark colors: // Dark colors: // Stops at 4th color, only lighter if dark text is supported // Stops at 4th color, only lighter if dark text is supported Loading @@ -222,6 +224,7 @@ public class Tonal implements ExtractionType { mainColor = getColorInt(primaryIndex, h, s, l); mainColor = getColorInt(primaryIndex, h, s, l); outColorsDark.setMainColor(mainColor); outColorsDark.setMainColor(mainColor); outColorsDark.setSecondaryColor(mainColor); outColorsDark.setSecondaryColor(mainColor); outColorsDark.setColorPalette(colorPalette); // Extra Dark: // Extra Dark: // Stay close to dark colors until dark text is supported // Stay close to dark colors until dark text is supported Loading @@ -235,6 +238,7 @@ public class Tonal implements ExtractionType { mainColor = getColorInt(primaryIndex, h, s, l); mainColor = getColorInt(primaryIndex, h, s, l); outColorsExtraDark.setMainColor(mainColor); outColorsExtraDark.setMainColor(mainColor); outColorsExtraDark.setSecondaryColor(mainColor); outColorsExtraDark.setSecondaryColor(mainColor); outColorsExtraDark.setColorPalette(colorPalette); outColorsNormal.setSupportsDarkText(supportsDarkText); outColorsNormal.setSupportsDarkText(supportsDarkText); outColorsDark.setSupportsDarkText(supportsDarkText); outColorsDark.setSupportsDarkText(supportsDarkText); Loading Loading @@ -262,16 +266,19 @@ public class Tonal implements ExtractionType { * @param inWallpaperColors Colors to read. * @param inWallpaperColors Colors to read. * @param outGradientColors Destination. * @param outGradientColors Destination. */ */ public static void applyFallback(@Nullable WallpaperColors inWallpaperColors, public void applyFallback(@Nullable WallpaperColors inWallpaperColors, @NonNull GradientColors outGradientColors) { @NonNull GradientColors outGradientColors) { boolean light = inWallpaperColors != null boolean light = inWallpaperColors != null && (inWallpaperColors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) && (inWallpaperColors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) != 0; != 0; final int color = light ? MAIN_COLOR_LIGHT : MAIN_COLOR_DARK; final int color = light ? MAIN_COLOR_LIGHT : MAIN_COLOR_DARK; final float[] hsl = new float[3]; ColorUtils.colorToHSL(color, hsl); outGradientColors.setMainColor(color); outGradientColors.setMainColor(color); outGradientColors.setSecondaryColor(color); outGradientColors.setSecondaryColor(color); outGradientColors.setSupportsDarkText(light); outGradientColors.setSupportsDarkText(light); outGradientColors.setColorPalette(getColorPalette(findTonalPalette(hsl[0], hsl[1]))); } } private int getColorInt(int fitIndex, float[] h, float[] s, float[] l) { private int getColorInt(int fitIndex, float[] h, float[] s, float[] l) { Loading @@ -281,6 +288,19 @@ public class Tonal implements ExtractionType { return ColorUtils.HSLToColor(mTmpHSL); return ColorUtils.HSLToColor(mTmpHSL); } } private int[] getColorPalette(float[] h, float[] s, float[] l) { int[] colorPalette = new int[h.length]; for (int i = 0; i < colorPalette.length; i++) { colorPalette[i] = getColorInt(i, h, s, l); } return colorPalette; } private int[] getColorPalette(TonalPalette palette) { return getColorPalette(palette.h, palette.s, palette.l); } /** /** * Checks if a given color exists in the blacklist * Checks if a given color exists in the blacklist * @param hsl float array with 3 components (H 0..360, S 0..1 and L 0..1) * @param hsl float array with 3 components (H 0..360, S 0..1 and L 0..1) Loading
packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockPlugin.java +8 −1 Original line number Original line Diff line number Diff line Loading @@ -54,6 +54,13 @@ public interface ClockPlugin extends Plugin { */ */ void setTextColor(int color); void setTextColor(int color); /** * Sets the color palette for the clock face. * @param supportsDarkText Whether dark text can be displayed. * @param colors Colors that should be used on the clock face, ordered from darker to lighter. */ default void setColorPalette(boolean supportsDarkText, int[] colors) {} /** /** * Notifies that time tick alarm from doze service fired. * Notifies that time tick alarm from doze service fired. */ */ Loading
packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java +38 −0 Original line number Original line Diff line number Diff line package com.android.keyguard; package com.android.keyguard; import android.app.WallpaperManager; import android.content.Context; import android.content.Context; import android.graphics.Paint; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.Paint.Style; Loading @@ -12,8 +13,10 @@ import android.widget.TextClock; import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting; import com.android.internal.colorextraction.ColorExtractor; import com.android.keyguard.clock.ClockManager; import com.android.keyguard.clock.ClockManager; import com.android.systemui.Dependency; import com.android.systemui.Dependency; import com.android.systemui.colorextraction.SysuiColorExtractor; import com.android.systemui.plugins.ClockPlugin; import com.android.systemui.plugins.ClockPlugin; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.StatusBarState; Loading Loading @@ -50,6 +53,8 @@ public class KeyguardClockSwitch extends RelativeLayout { * Maintain state so that a newly connected plugin can be initialized. * Maintain state so that a newly connected plugin can be initialized. */ */ private float mDarkAmount; private float mDarkAmount; private boolean mSupportsDarkText; private int[] mColorPalette; private final StatusBarStateController.StateListener mStateListener = private final StatusBarStateController.StateListener mStateListener = new StatusBarStateController.StateListener() { new StatusBarStateController.StateListener() { Loading @@ -72,6 +77,21 @@ public class KeyguardClockSwitch extends RelativeLayout { private ClockManager.ClockChangedListener mClockChangedListener = this::setClockPlugin; private ClockManager.ClockChangedListener mClockChangedListener = this::setClockPlugin; /** * Listener for changes to the color palette. * * The color palette changes when the wallpaper is changed. */ private SysuiColorExtractor.OnColorsChangedListener mColorsListener = (extractor, which) -> { if ((which & WallpaperManager.FLAG_LOCK) != 0) { if (extractor instanceof SysuiColorExtractor) { updateColors((SysuiColorExtractor) extractor); } else { updateColors(Dependency.get(SysuiColorExtractor.class)); } } }; public KeyguardClockSwitch(Context context) { public KeyguardClockSwitch(Context context) { this(context, null); this(context, null); } } Loading Loading @@ -100,6 +120,9 @@ public class KeyguardClockSwitch extends RelativeLayout { super.onAttachedToWindow(); super.onAttachedToWindow(); Dependency.get(ClockManager.class).addOnClockChangedListener(mClockChangedListener); Dependency.get(ClockManager.class).addOnClockChangedListener(mClockChangedListener); Dependency.get(StatusBarStateController.class).addCallback(mStateListener); Dependency.get(StatusBarStateController.class).addCallback(mStateListener); SysuiColorExtractor colorExtractor = Dependency.get(SysuiColorExtractor.class); colorExtractor.addOnColorsChangedListener(mColorsListener); updateColors(colorExtractor); } } @Override @Override Loading @@ -107,6 +130,8 @@ public class KeyguardClockSwitch extends RelativeLayout { super.onDetachedFromWindow(); super.onDetachedFromWindow(); Dependency.get(ClockManager.class).removeOnClockChangedListener(mClockChangedListener); Dependency.get(ClockManager.class).removeOnClockChangedListener(mClockChangedListener); Dependency.get(StatusBarStateController.class).removeCallback(mStateListener); Dependency.get(StatusBarStateController.class).removeCallback(mStateListener); Dependency.get(SysuiColorExtractor.class) .removeOnColorsChangedListener(mColorsListener); } } private void setClockPlugin(ClockPlugin plugin) { private void setClockPlugin(ClockPlugin plugin) { Loading Loading @@ -149,6 +174,9 @@ public class KeyguardClockSwitch extends RelativeLayout { mClockPlugin.setStyle(getPaint().getStyle()); mClockPlugin.setStyle(getPaint().getStyle()); mClockPlugin.setTextColor(getCurrentTextColor()); mClockPlugin.setTextColor(getCurrentTextColor()); mClockPlugin.setDarkAmount(mDarkAmount); mClockPlugin.setDarkAmount(mDarkAmount); if (mColorPalette != null) { mClockPlugin.setColorPalette(mSupportsDarkText, mColorPalette); } } } /** /** Loading Loading @@ -246,6 +274,16 @@ public class KeyguardClockSwitch extends RelativeLayout { } } } } private void updateColors(SysuiColorExtractor colorExtractor) { ColorExtractor.GradientColors colors = colorExtractor.getColors(WallpaperManager.FLAG_LOCK, true); mSupportsDarkText = colors.supportsDarkText(); mColorPalette = colors.getColorPalette(); if (mClockPlugin != null) { mClockPlugin.setColorPalette(mSupportsDarkText, mColorPalette); } } @VisibleForTesting (otherwise = VisibleForTesting.NONE) @VisibleForTesting (otherwise = VisibleForTesting.NONE) ClockManager.ClockChangedListener getClockChangedListener() { ClockManager.ClockChangedListener getClockChangedListener() { return mClockChangedListener; return mClockChangedListener; Loading
packages/SystemUI/src/com/android/keyguard/clock/BubbleClockController.java +11 −1 Original line number Original line Diff line number Diff line Loading @@ -89,7 +89,17 @@ public class BubbleClockController implements ClockPlugin { @Override @Override public void setTextColor(int color) { public void setTextColor(int color) { mLockClock.setTextColor(color); mLockClock.setTextColor(color); mDigitalClock.setTextColor(color); } @Override public void setColorPalette(boolean supportsDarkText, int[] colorPalette) { if (colorPalette == null || colorPalette.length == 0) { return; } final int length = colorPalette.length; mDigitalClock.setTextColor(colorPalette[Math.max(0, length - 6)]); mAnalogClock.setClockColors(colorPalette[Math.max(0, length - 6)], colorPalette[Math.max(0, length - 3)]); } } @Override @Override Loading