summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Snoeberger <snoeberger@google.com>2019-04-02 13:21:42 -0400
committerRobert Snoeberger <snoeberger@google.com>2019-04-02 15:15:38 -0400
commita6684f67139406a47fe2606938f6bf12d62881a3 (patch)
tree9726ddb230de1b29682561e0b17532c23be0f0ff
parent60a54acbbf5c10ae11d17aa2b94af07744506379 (diff)
Pick the primary color as the best color to use.
Previously, the best color was picked by checking the colors against the blacklist. The logic was for picking the best color was broken When the blacklist was removed for b/124180048. Fixes: b129762944 Test: New test points added to TonalTest.java Change-Id: Ie51806735910bb40e5e66d7baf545ea213e4a01e
-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));