summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortobrun <tobrun.van.nuland@gmail.com>2018-06-25 13:36:57 +0200
committerTobrun <tobrun.van.nuland@gmail.com>2018-06-27 19:12:22 +0200
commitbd94cd35a4f4937ec872fb29d63c2482f4edeca5 (patch)
treedf38e9dd25040aa8ec3544a8d593f017dd6d3a60
parent561fa249a7130f0eed320188b649ed4ba6a8cc55 (diff)
downloadqtlocation-mapboxgl-upstream/backport-12210.tar.gz
- range alpha between 0 and 1 with android color conversionupstream/backport-12210
-rw-r--r--platform/android/MapboxGLAndroidSDK/build.gradle1
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java2
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java20
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/property_factory.java.ejs20
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java28
5 files changed, 53 insertions, 18 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/build.gradle b/platform/android/MapboxGLAndroidSDK/build.gradle
index 86919d21bc..8bbb2df842 100644
--- a/platform/android/MapboxGLAndroidSDK/build.gradle
+++ b/platform/android/MapboxGLAndroidSDK/build.gradle
@@ -123,6 +123,7 @@ android {
testOptions {
unitTests {
returnDefaultValues true
+ includeAndroidResources = true
}
}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java
index 72e8187b96..1aa0ce9093 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java
@@ -213,7 +213,7 @@ public class Expression {
* @return the color expression
*/
public static Expression color(@ColorInt int color) {
- int[] rgba = PropertyFactory.colorToRgbaArray(color);
+ float[] rgba = PropertyFactory.colorToRgbaArray(color);
return rgba(rgba[0], rgba[1], rgba[2], rgba[3]);
}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java
index 57638920be..ef373cc728 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java
@@ -6,6 +6,7 @@ import android.support.annotation.ColorInt;
import com.mapbox.mapboxsdk.style.expressions.Expression;
+import java.text.DecimalFormat;
import java.util.Locale;
/**
@@ -2377,22 +2378,29 @@ public class PropertyFactory {
/**
* Converts Android color int to "rbga(r, g, b, a)" String equivalent.
+ * <p>
+ * Alpha value will be converted from 0-255 range to 0-1.
+ * </p>
*
* @param color Android color int
* @return String rgba color
*/
public static String colorToRgbaString(@ColorInt int color) {
- return String.format(Locale.US, "rgba(%d, %d, %d, %d)",
- (color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF, (color >> 24) & 0xFF);
+ String alpha = new DecimalFormat("#.###").format(((float)((color >> 24) & 0xFF)) / 255.0f);
+ return String.format(Locale.US, "rgba(%d, %d, %d, %s)",
+ (color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF, alpha);
}
/**
- * Converts Android color int to rgba int array.
+ * Converts Android color int to rgba float array.
+ * <p>
+ * Alpha value will be converted from 0-255 range to 0-1.
+ * </p>
*
* @param color Android color int
* @return int rgba array
*/
- public static int[] colorToRgbaArray(@ColorInt int color) {
- return new int[] {(color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF, (color >> 24) & 0xFF};
+ public static float[] colorToRgbaArray(@ColorInt int color) {
+ return new float[] {(color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF, ((color >> 24) & 0xFF) / 255.0f};
}
-}
+} \ No newline at end of file
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/property_factory.java.ejs b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/property_factory.java.ejs
index ce0489409c..2fb51f4a47 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/property_factory.java.ejs
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/property_factory.java.ejs
@@ -10,6 +10,7 @@ import android.support.annotation.ColorInt;
import com.mapbox.mapboxsdk.style.expressions.Expression;
+import java.text.DecimalFormat;
import java.util.Locale;
/**
@@ -87,22 +88,29 @@ public class PropertyFactory {
<% } -%>
/**
* Converts Android color int to "rbga(r, g, b, a)" String equivalent.
+ * <p>
+ * Alpha value will be converted from 0-255 range to 0-1.
+ * </p>
*
* @param color Android color int
* @return String rgba color
*/
public static String colorToRgbaString(@ColorInt int color) {
- return String.format(Locale.US, "rgba(%d, %d, %d, %d)",
- (color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF, (color >> 24) & 0xFF);
+ String alpha = new DecimalFormat("#.###").format(((float)((color >> 24) & 0xFF)) / 255.0f);
+ return String.format(Locale.US, "rgba(%d, %d, %d, %s)",
+ (color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF, alpha);
}
/**
- * Converts Android color int to rgba int array.
+ * Converts Android color int to rgba float array.
+ * <p>
+ * Alpha value will be converted from 0-255 range to 0-1.
+ * </p>
*
* @param color Android color int
* @return int rgba array
*/
- public static int[] colorToRgbaArray(@ColorInt int color) {
- return new int[] {(color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF, (color >> 24) & 0xFF};
+ public static float[] colorToRgbaArray(@ColorInt int color) {
+ return new float[] {(color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF, ((color >> 24) & 0xFF) / 255.0f};
}
-}
+} \ No newline at end of file
diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java
index 1070a25f55..fb74904f96 100644
--- a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java
+++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java
@@ -3,6 +3,8 @@ package com.mapbox.mapboxsdk.style.expressions;
import android.graphics.Color;
import com.mapbox.mapboxsdk.style.layers.PropertyFactory;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
import java.util.Arrays;
@@ -85,6 +87,7 @@ import static org.junit.Assert.assertEquals;
/**
* Expression unit tests that validate the expression output with the expected Object[]array representation.
*/
+@RunWith(RobolectricTestRunner.class)
public class ExpressionTest {
@Test
@@ -117,7 +120,7 @@ public class ExpressionTest {
@Test
public void testToRgba() throws Exception {
- Object[] expected = new Object[] {"to-rgba", new Object[] {"to-color", "rgba(255, 0, 0, 255)"}};
+ Object[] expected = new Object[] {"to-rgba", new Object[] {"to-color", "rgba(255, 0, 0, 1)"}};
Object[] actual = toRgba(toColor(literal(PropertyFactory.colorToRgbaString(Color.RED)))).toArray();
assertTrue("expression should match", Arrays.deepEquals(expected, actual));
}
@@ -138,7 +141,7 @@ public class ExpressionTest {
@Test
public void testEqExpression() throws Exception {
- Object[] expected = new Object[] {"==",new Object[]{"get", "hello"}, 1f};
+ Object[] expected = new Object[] {"==", new Object[] {"get", "hello"}, 1f};
Object[] actual = eq(get("hello"), 1).toArray();
assertTrue("expression should match", Arrays.deepEquals(expected, actual));
}
@@ -159,7 +162,7 @@ public class ExpressionTest {
@Test
public void testNeqExpression() throws Exception {
- Object[] expected = new Object[] {"!=",new Object[]{"get", "hello"}, 1f};
+ Object[] expected = new Object[] {"!=", new Object[] {"get", "hello"}, 1f};
Object[] actual = neq(get("hello"), 1).toArray();
assertTrue("expression should match", Arrays.deepEquals(expected, actual));
}
@@ -1140,7 +1143,7 @@ public class ExpressionTest {
@Test
public void testColorConversion() {
Expression greenColor = color(0xFF00FF00);
- Object[] expected = new Object[] {"rgba", 0f, 255f, 0f, 255f};
+ Object[] expected = new Object[] {"rgba", 0f, 255f, 0f, 1f};
assertTrue("expression should match", Arrays.deepEquals(expected, greenColor.toArray()));
}
@@ -1250,7 +1253,7 @@ public class ExpressionTest {
public void testRawRgbaColor() {
Expression expected = interpolate(
exponential(2f), zoom(),
- literal(5f), literal("rgba(0, 0, 0, 255)"),
+ literal(5f), literal("rgba(0, 0, 0, 1)"),
literal(10.5f), literal("rgb(255, 0, 0)"),
literal(15), color(Color.GREEN),
literal(20), literal(PropertyFactory.colorToRgbaString(Color.BLUE)));
@@ -1272,4 +1275,19 @@ public class ExpressionTest {
stop("layer2", 2.7));
assertEquals("expressions should match", expected, raw(expected.toString()));
}
+
+ @Test
+ public void testAlphaValueInColorConversion() {
+ // regression test for #12198
+ Expression colorExpression = color(Color.parseColor("#41FF0000")); // 25.4% alpha red
+ Object[] result = colorExpression.toArray();
+ assertEquals("alpha value should match", 0.254f, (Float) result[4], 0.001f);
+ }
+
+ @Test
+ public void testAlphaValueInStringConversion() {
+ String color = PropertyFactory.colorToRgbaString(Color.parseColor("#41FF0000")).split(" ")[3];
+ String alpha = color.substring(0, color.length() - 1);
+ assertEquals("alpha value should match", 0.254f, Float.valueOf(alpha), 0.001f);
+ }
} \ No newline at end of file