summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/colorextraction/types/Tonal.java28
-rw-r--r--tests/Internal/Android.bp1
-rw-r--r--tests/Internal/src/com/android/internal/colorextraction/types/TonalTest.java32
3 files changed, 36 insertions, 25 deletions
diff --git a/core/java/com/android/internal/colorextraction/types/Tonal.java b/core/java/com/android/internal/colorextraction/types/Tonal.java
index 9d85a039420c..b9aab21b1e4c 100644
--- a/core/java/com/android/internal/colorextraction/types/Tonal.java
+++ b/core/java/com/android/internal/colorextraction/types/Tonal.java
@@ -109,42 +109,20 @@ public class Tonal implements ExtractionType {
final int mainColorsSize = mainColors.size();
final int hints = inWallpaperColors.getColorHints();
final boolean supportsDarkText = (hints & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) != 0;
- final boolean generatedFromBitmap = (hints & WallpaperColors.HINT_FROM_BITMAP) != 0;
if (mainColorsSize == 0) {
return false;
}
- // Decide what's the best color to use.
- // We have 2 options:
- // • Just pick the primary color
- // • Filter out blacklisted colors. This is useful when palette is generated
- // automatically from a bitmap.
- Color bestColor = null;
- final float[] hsl = new float[3];
- for (int i = 0; i < mainColorsSize; i++) {
- final Color color = mainColors.get(i);
- final int colorValue = color.toArgb();
- ColorUtils.RGBToHSL(Color.red(colorValue), Color.green(colorValue),
- Color.blue(colorValue), hsl);
-
- // Stop when we find a color that meets our criteria
- if (!generatedFromBitmap) {
- bestColor = color;
- break;
- }
- }
-
- // Fail if not found
- if (bestColor == null) {
- return false;
- }
+ // Pick the primary color as the best color to use.
+ final Color bestColor = mainColors.get(0);
// Tonal is not really a sort, it takes a color from the extracted
// palette and finds a best fit amongst a collection of pre-defined
// palettes. The best fit is tweaked to be closer to the source color
// and replaces the original palette.
int colorValue = bestColor.toArgb();
+ final float[] hsl = new float[3];
ColorUtils.RGBToHSL(Color.red(colorValue), Color.green(colorValue), Color.blue(colorValue),
hsl);
diff --git a/tests/Internal/Android.bp b/tests/Internal/Android.bp
index 4cb9f8d5e1e6..e233fed7e785 100644
--- a/tests/Internal/Android.bp
+++ b/tests/Internal/Android.bp
@@ -10,6 +10,7 @@ android_test {
"junit",
"androidx.test.rules",
"mockito-target-minus-junit4",
+ "truth-prebuilt",
],
java_resource_dirs: ["res"],
certificate: "platform",
diff --git a/tests/Internal/src/com/android/internal/colorextraction/types/TonalTest.java b/tests/Internal/src/com/android/internal/colorextraction/types/TonalTest.java
index 300182dd5791..768e47c03b17 100644
--- a/tests/Internal/src/com/android/internal/colorextraction/types/TonalTest.java
+++ b/tests/Internal/src/com/android/internal/colorextraction/types/TonalTest.java
@@ -15,6 +15,8 @@
*/
package com.android.internal.colorextraction.types;
+import static com.google.common.truth.Truth.assertThat;
+
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -67,6 +69,36 @@ public class TonalTest {
}
@Test
+ public void extractInto_fromBitmap() {
+ Tonal tonal = new Tonal(InstrumentationRegistry.getContext());
+ GradientColors normal = new GradientColors();
+ GradientColors dark = new GradientColors();
+ GradientColors extraDark = new GradientColors();
+ WallpaperColors wallColors = new WallpaperColors(Color.valueOf(Color.RED), null, null,
+ WallpaperColors.HINT_FROM_BITMAP);
+
+ // WHEN colors are extracted from a wallpaper with only a red primary color.
+ tonal.extractInto(wallColors, normal, dark, extraDark);
+ // THEN the main extracted color is red
+ assertThat(normal.getMainColor()).isEqualTo(Color.RED);
+ }
+
+ @Test
+ public void extractInto_supportsDarkText() {
+ Tonal tonal = new Tonal(InstrumentationRegistry.getContext());
+ GradientColors normal = new GradientColors();
+ GradientColors dark = new GradientColors();
+ GradientColors extraDark = new GradientColors();
+ WallpaperColors wallColors = new WallpaperColors(Color.valueOf(Color.RED), null, null,
+ WallpaperColors.HINT_SUPPORTS_DARK_TEXT);
+
+ // WHEN colors are extracted from a wallpaper with only a red primary color.
+ tonal.extractInto(wallColors, normal, dark, extraDark);
+ // THEN the main extracted color is red
+ assertThat(normal.getMainColor()).isEqualTo(Color.RED);
+ }
+
+ @Test
public void colorRange_containsColor() {
Tonal.ColorRange colorRange = new Tonal.ColorRange(new Range<>(0f, 50f),
new Range<>(0f, 1f), new Range<>(0f, 1f));