From 1eb90c14485b8064fbbbbb255d83e8ca1f67210e Mon Sep 17 00:00:00 2001 From: Tobrun Date: Thu, 22 Mar 2018 12:40:43 -0400 Subject: Literal array conversion of primitive arrays (#11500) * [android] - literal array conversion of primitives types --- .../mapboxsdk/style/expressions/Expression.java | 24 ++++++++++++++++++++++ .../style/expressions/ExpressionTest.java | 8 ++++++++ .../activity/style/SymbolGeneratorActivity.java | 8 +++++++- 3 files changed, 39 insertions(+), 1 deletion(-) 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 8af140019f..e567408090 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 @@ -112,6 +112,9 @@ public class Expression { * @return the expression */ public static Expression literal(@NonNull Object object) { + if (object.getClass().isArray()) { + return literal(ExpressionArray.toObjectArray(object)); + } return new ExpressionLiteral(object); } @@ -2033,6 +2036,11 @@ public class Expression { }; } + /** + * Convert the expression array to a string representation. + * + * @return the string representation of the expression array + */ @Override public String toString() { StringBuilder builder = new StringBuilder("[\"literal\"], ["); @@ -2053,4 +2061,20 @@ public class Expression { return builder.toString(); } } + + /** + * Converts an object that is a primitive array to an Object[] + * + * @param object the object to convert to an object array + * @return the converted object array + */ + static Object[] toObjectArray(Object object) { + // object is a primitive array + int len = java.lang.reflect.Array.getLength(object); + Object[] objects = new Object[len]; + for (int i = 0; i < len; i++) { + objects[i] = java.lang.reflect.Array.get(object, i); + } + return objects; + } } \ 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 a2cf34738d..535efe5fdd 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 @@ -1081,4 +1081,12 @@ public class ExpressionTest { String actual = literal(array).toString(); assertEquals("literal array should match", expected, actual); } + + @Test + public void testLiteralPrimitiveArrayConversion() throws Exception { + float[] array = new float[] {0.2f, 0.5f}; + Object[] expected = new Object[] {"literal", new Object[] {0.2f, 0.5f}}; + Object[] actual = literal(array).toArray(); + assertEquals("primitive array should be convered", expected, actual); + } } \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java index e200670bf7..c42f264478 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java @@ -45,8 +45,11 @@ import static com.mapbox.mapboxsdk.style.expressions.Expression.number; import static com.mapbox.mapboxsdk.style.expressions.Expression.pi; import static com.mapbox.mapboxsdk.style.expressions.Expression.product; import static com.mapbox.mapboxsdk.style.expressions.Expression.rgba; +import static com.mapbox.mapboxsdk.style.expressions.Expression.step; +import static com.mapbox.mapboxsdk.style.expressions.Expression.stop; import static com.mapbox.mapboxsdk.style.expressions.Expression.string; import static com.mapbox.mapboxsdk.style.expressions.Expression.upcase; +import static com.mapbox.mapboxsdk.style.expressions.Expression.zoom; import static com.mapbox.mapboxsdk.style.layers.Property.ICON_ANCHOR_BOTTOM; import static com.mapbox.mapboxsdk.style.layers.Property.TEXT_ANCHOR_TOP; import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconAllowOverlap; @@ -265,7 +268,10 @@ public class SymbolGeneratorActivity extends AppCompatActivity implements OnMapR iconAllowOverlap(false), iconSize(iconSizeExpression), iconAnchor(ICON_ANCHOR_BOTTOM), - iconOffset(new Float[] {0.0f, -5.0f}), + iconOffset(step(zoom(), literal(new float[] {0f, 0f}), + stop(1, new Float[] {0f, 0f}), + stop(10, new Float[] {0f, -35f}) + )), // text field configuration textField(textFieldExpression), -- cgit v1.2.1