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 2322d8211..bdeeeb092 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 @@ -2848,6 +2848,66 @@ public class Expression { return new Expression("resolved-locale", collator); } + /** + * Returns true if the input string is expected to render legibly. + * Returns false if the input string contains sections that cannot be rendered without potential loss of meaning + * (e.g. Indic scripts that require complex text shaping, + * or right-to-left scripts if the the mapbox-gl-rtl-text plugin is not in use in Mapbox GL JS). + *
+ * Example usage: + *
+ *
+ * {@code
+ * mapboxMap.addLayer(new SymbolLayer("layer-id", "source-id")
+ * .withProperties(
+ * textField(
+ * switchCase(
+ * isSupportedScript(get("name_property")), get("name_property"),
+ * literal("not-compatible")
+ * )
+ * )
+ * ));
+ * }
+ *
+ *
+ * @param expression the expression to evaluate
+ * @return expression
+ * @see Style specification
+ */
+ public static Expression isSupportedScript(Expression expression) {
+ return new Expression("is-supported-script", expression);
+ }
+
+ /**
+ * Returns true if the input string is expected to render legibly.
+ * Returns false if the input string contains sections that cannot be rendered without potential loss of meaning
+ * (e.g. Indic scripts that require complex text shaping,
+ * or right-to-left scripts if the the mapbox-gl-rtl-text plugin is not in use in Mapbox GL JS).
+ * + * Example usage: + *
+ *
+ * {@code
+ * mapboxMap.addLayer(new SymbolLayer("layer-id", "source-id")
+ * .withProperties(
+ * textField(
+ * switchCase(
+ * isSupportedScript("ಗೌರವಾರ್ಥವಾಗಿ"), literal("ಗೌರವಾರ್ಥವಾಗಿ"),
+ * literal("not-compatible")
+ * )
+ * )
+ * );
+ * }
+ *
+ *
+ * @param string the string to evaluate
+ * @return expression
+ * @see Style specification
+ */
+ public static Expression isSupportedScript(String string) {
+ return new Expression("is-supported-script", literal(string));
+ }
+
/**
* Returns the input string converted to uppercase.
* 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 054d9da8a..61105d89b 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 @@ -43,6 +43,7 @@ import static com.mapbox.mapboxsdk.style.expressions.Expression.has; import static com.mapbox.mapboxsdk.style.expressions.Expression.heatmapDensity; import static com.mapbox.mapboxsdk.style.expressions.Expression.id; import static com.mapbox.mapboxsdk.style.expressions.Expression.interpolate; +import static com.mapbox.mapboxsdk.style.expressions.Expression.isSupportedScript; import static com.mapbox.mapboxsdk.style.expressions.Expression.length; import static com.mapbox.mapboxsdk.style.expressions.Expression.let; import static com.mapbox.mapboxsdk.style.expressions.Expression.linear; @@ -1388,4 +1389,18 @@ public class ExpressionTest { String actual = Expression.toString(get("name_en")).toString(); assertEquals("Reverse string conversion should match", expected, actual); } + + @Test + public void testIsSupportedScriptLiteral() { + Object[] expected = new Object[] {"is-supported-script", "ಗೌರವಾರ್ಥವಾಗಿ"}; + Object[] actual = isSupportedScript("ಗೌರವಾರ್ಥವಾಗಿ").toArray(); + assertTrue("expression should match", Arrays.deepEquals(expected, actual)); + } + + @Test + public void testIsSupportedScriptExpressions() { + Object[] expected = new Object[] {"is-supported-script", new Object[] {"get", "property_name"}}; + Object[] actual = isSupportedScript(get("property_name")).toArray(); + assertTrue("expression should match", Arrays.deepEquals(expected, actual)); + } } \ No newline at end of file