aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Shalamov <alexander.shalamov@mapbox.com>2019-06-18 14:43:13 +0300
committerAlexander Shalamov <alexander.shalamov@mapbox.com>2019-08-13 13:32:56 +0300
commitdad43ba8fcd04698230fefa9c6af93931f6c10f3 (patch)
tree3af84d15a40193e5f23870dd56135324e233e670
parente9ca844d666619886141d7dd8ef943e86f4f55e4 (diff)
[android] Android bindings for new 'text-writing-mode' layout property
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Property.java21
-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/SymbolLayer.java16
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java13
-rwxr-xr-xplatform/android/scripts/generate-style-code.js11
-rw-r--r--platform/android/src/style/layers/symbol_layer.cpp6
-rw-r--r--platform/android/src/style/layers/symbol_layer.hpp2
7 files changed, 88 insertions, 1 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Property.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Property.java
index 8ffcf6ddb..52ed6c23a 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Property.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Property.java
@@ -669,6 +669,27 @@ public final class Property {
@Retention(RetentionPolicy.SOURCE)
public @interface ANCHOR {}
+ // TEXT_WRITING_MODE: The property allows control over a symbol's orientation. Note that the property values act as a hint, so that a symbol whose language doesn’t support the provided orientation will be laid out in its natural orientation. Example: English point symbol will be rendered horizontally even if array value contains single 'vertical' enum value. The order of elements in an array define priority order for the placement of an orientation variant.
+
+ /**
+ * If a text's language supports horizontal writing mode, symbols with point placement would be laid out horizontally.
+ */
+ public static final String TEXT_WRITING_MODE_HORIZONTAL = "horizontal";
+ /**
+ * If a text's language supports vertical writing mode, symbols with point placement would be laid out vertically.
+ */
+ public static final String TEXT_WRITING_MODE_VERTICAL = "vertical";
+
+ /**
+ * The property allows control over a symbol's orientation. Note that the property values act as a hint, so that a symbol whose language doesn’t support the provided orientation will be laid out in its natural orientation. Example: English point symbol will be rendered horizontally even if array value contains single 'vertical' enum value. The order of elements in an array define priority order for the placement of an orientation variant.
+ */
+ @StringDef({
+ TEXT_WRITING_MODE_HORIZONTAL,
+ TEXT_WRITING_MODE_VERTICAL,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface TEXT_WRITING_MODE {}
+
private Property() {
}
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 3f2771a30..82085b171 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
@@ -2376,6 +2376,26 @@ public class PropertyFactory {
}
/**
+ * The property allows control over a symbol's orientation. Note that the property values act as a hint, so that a symbol whose language doesn’t support the provided orientation will be laid out in its natural orientation. Example: English point symbol will be rendered horizontally even if array value contains single 'vertical' enum value. The order of elements in an array define priority order for the placement of an orientation variant.
+ *
+ * @param value a String[] value
+ * @return property wrapper around String[]
+ */
+ public static PropertyValue<String[]> textWritingMode(String[] value) {
+ return new LayoutPropertyValue<>("text-writing-mode", value);
+ }
+
+ /**
+ * The property allows control over a symbol's orientation. Note that the property values act as a hint, so that a symbol whose language doesn’t support the provided orientation will be laid out in its natural orientation. Example: English point symbol will be rendered horizontally even if array value contains single 'vertical' enum value. The order of elements in an array define priority order for the placement of an orientation variant.
+ *
+ * @param value a String[] value
+ * @return property wrapper around String[]
+ */
+ public static PropertyValue<Expression> textWritingMode(Expression value) {
+ return new LayoutPropertyValue<>("text-writing-mode", value);
+ }
+
+ /**
* Rotates the text clockwise.
*
* @param value a Float value
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/SymbolLayer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/SymbolLayer.java
index 1d8bad7e8..5ab47def4 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/SymbolLayer.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/SymbolLayer.java
@@ -530,6 +530,18 @@ public class SymbolLayer extends Layer {
}
/**
+ * Get the TextWritingMode property
+ *
+ * @return property wrapper value around String[]
+ */
+ @NonNull
+ @SuppressWarnings("unchecked")
+ public PropertyValue<String[]> getTextWritingMode() {
+ checkThread();
+ return (PropertyValue<String[]>) new PropertyValue("text-writing-mode", nativeGetTextWritingMode());
+ }
+
+ /**
* Get the TextRotate property
*
* @return property wrapper value around Float
@@ -1243,6 +1255,10 @@ public class SymbolLayer extends Layer {
@NonNull
@Keep
+ private native Object nativeGetTextWritingMode();
+
+ @NonNull
+ @Keep
private native Object nativeGetTextRotate();
@NonNull
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java
index 60e305d60..c65e37019 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java
@@ -670,6 +670,19 @@ public class SymbolLayerTest extends BaseLayerTest {
@Test
@UiThreadTest
+ public void testTextWritingModeAsConstant() {
+ Timber.i("text-writing-mode");
+ assertNotNull(layer);
+ assertNull(layer.getTextWritingMode().getValue());
+
+ // Set and Get
+ String[] propertyValue = new String[0];
+ layer.setProperties(textWritingMode(propertyValue));
+ assertEquals(layer.getTextWritingMode().getValue(), propertyValue);
+ }
+
+ @Test
+ @UiThreadTest
public void testTextRotateAsConstant() {
Timber.i("text-rotate");
assertNotNull(layer);
diff --git a/platform/android/scripts/generate-style-code.js b/platform/android/scripts/generate-style-code.js
index 8c34113de..fa814f89a 100755
--- a/platform/android/scripts/generate-style-code.js
+++ b/platform/android/scripts/generate-style-code.js
@@ -49,10 +49,19 @@ var layers = Object.keys(spec.layer.type.values).map((type) => {
});
// Process all layer properties
+const uniqueArrayEnum = (prop, enums) => {
+ if (prop.value !== 'enum') return false;
+ const enumsEqual = (val1, val2) => val1.length === val1.length && val1.every((val, i) => val === val2[i]);
+ return enums.filter(e => enumsEqual(Object.keys(prop.values).sort(), Object.keys(e.values).sort())).length == 0;
+};
+
const layoutProperties = _(layers).map('layoutProperties').flatten().value();
const paintProperties = _(layers).map('paintProperties').flatten().value();
const allProperties = _(layoutProperties).union(paintProperties).union(lightProperties).value();
-const enumProperties = _(allProperties).filter({'type': 'enum'}).value();
+let allEnumProperties = _(allProperties).filter({'type': 'enum'}).value();
+const uniqueArrayEnumProperties = _(allProperties).filter({'type': 'array'}).filter(prop => uniqueArrayEnum(prop, allEnumProperties)).value();
+const enumProperties = _(allEnumProperties).union(uniqueArrayEnumProperties).value();
+
global.propertyType = function propertyType(property) {
switch (property.type) {
diff --git a/platform/android/src/style/layers/symbol_layer.cpp b/platform/android/src/style/layers/symbol_layer.cpp
index fb0625591..53b35a9a1 100644
--- a/platform/android/src/style/layers/symbol_layer.cpp
+++ b/platform/android/src/style/layers/symbol_layer.cpp
@@ -201,6 +201,11 @@ namespace android {
return std::move(*convert<jni::Local<jni::Object<>>>(env, toSymbolLayer(layer).getTextMaxAngle()));
}
+ jni::Local<jni::Object<>> SymbolLayer::getTextWritingMode(jni::JNIEnv& env) {
+ using namespace mbgl::android::conversion;
+ return std::move(*convert<jni::Local<jni::Object<>>>(env, toSymbolLayer(layer).getTextWritingMode()));
+ }
+
jni::Local<jni::Object<>> SymbolLayer::getTextRotate(jni::JNIEnv& env) {
using namespace mbgl::android::conversion;
return std::move(*convert<jni::Local<jni::Object<>>>(env, toSymbolLayer(layer).getTextRotate()));
@@ -534,6 +539,7 @@ namespace android {
METHOD(&SymbolLayer::getTextVariableAnchor, "nativeGetTextVariableAnchor"),
METHOD(&SymbolLayer::getTextAnchor, "nativeGetTextAnchor"),
METHOD(&SymbolLayer::getTextMaxAngle, "nativeGetTextMaxAngle"),
+ METHOD(&SymbolLayer::getTextWritingMode, "nativeGetTextWritingMode"),
METHOD(&SymbolLayer::getTextRotate, "nativeGetTextRotate"),
METHOD(&SymbolLayer::getTextPadding, "nativeGetTextPadding"),
METHOD(&SymbolLayer::getTextKeepUpright, "nativeGetTextKeepUpright"),
diff --git a/platform/android/src/style/layers/symbol_layer.hpp b/platform/android/src/style/layers/symbol_layer.hpp
index d2ced8919..9e494e678 100644
--- a/platform/android/src/style/layers/symbol_layer.hpp
+++ b/platform/android/src/style/layers/symbol_layer.hpp
@@ -90,6 +90,8 @@ public:
jni::Local<jni::Object<jni::ObjectTag>> getTextMaxAngle(jni::JNIEnv&);
+ jni::Local<jni::Object<jni::ObjectTag>> getTextWritingMode(jni::JNIEnv&);
+
jni::Local<jni::Object<jni::ObjectTag>> getTextRotate(jni::JNIEnv&);
jni::Local<jni::Object<jni::ObjectTag>> getTextPadding(jni::JNIEnv&);