diff --git a/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java b/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java
index 71775486f..9cc9554ca 100644
--- a/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java
+++ b/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java
@@ -1,10 +1,6 @@
package com.mapbox.mapboxsdk.style.expressions;
import android.annotation.SuppressLint;
-import androidx.annotation.ColorInt;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.annotation.Size;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
@@ -12,6 +8,7 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonNull;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
+import com.mapbox.geojson.Polygon;
import com.mapbox.mapboxsdk.style.layers.PropertyFactory;
import com.mapbox.mapboxsdk.style.layers.PropertyValue;
@@ -22,6 +19,11 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
+import androidx.annotation.ColorInt;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.Size;
+
import static com.mapbox.mapboxsdk.utils.ColorUtils.colorToRgbaArray;
/**
@@ -1539,8 +1541,8 @@ public class Expression {
/**
* Retrieves whether an item exists in an array or a substring exists in a string.
*
- * @param needle the item expression
- * @param haystack the array or string expression
+ * @param needle the item expression
+ * @param haystack the array or string expression
* @return true if exists.
* @see Style specification
*/
@@ -1551,8 +1553,8 @@ public class Expression {
/**
* Retrieves whether an item exists in an array or a substring exists in a string.
*
- * @param needle the item expression
- * @param haystack the array or string expression
+ * @param needle the item expression
+ * @param haystack the array or string expression
* @return true if exists.
* @see Style specification
*/
@@ -1563,8 +1565,8 @@ public class Expression {
/**
* Retrieves whether an item exists in an array or a substring exists in a string.
*
- * @param needle the item expression
- * @param haystack the array or string expression
+ * @param needle the item expression
+ * @param haystack the array or string expression
* @return true if exists.
* @see Style specification
*/
@@ -1572,6 +1574,15 @@ public class Expression {
return new Expression("in", literal(needle), haystack);
}
+ public static Expression within(@NonNull Polygon polygon) {
+ Map map = new HashMap<>();
+
+ map.put("type", literal(polygon.type()));
+ map.put("json", literal(polygon.toJson()));
+
+ return new Expression("within", new ExpressionMap(map));
+ }
+
/**
* Retrieves a property value from the current feature's properties,
* or from another object if a second argument is provided.
diff --git a/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java b/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java
index ca35c648e..62f3a71f0 100644
--- a/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java
+++ b/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java
@@ -2,6 +2,8 @@ package com.mapbox.mapboxsdk.style.expressions;
import android.graphics.Color;
+import com.mapbox.geojson.Point;
+import com.mapbox.geojson.Polygon;
import com.mapbox.mapboxsdk.style.layers.PropertyValue;
import com.mapbox.mapboxsdk.utils.ColorUtils;
@@ -10,7 +12,9 @@ import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -94,6 +98,7 @@ import static com.mapbox.mapboxsdk.style.expressions.Expression.toRgba;
import static com.mapbox.mapboxsdk.style.expressions.Expression.typeOf;
import static com.mapbox.mapboxsdk.style.expressions.Expression.upcase;
import static com.mapbox.mapboxsdk.style.expressions.Expression.var;
+import static com.mapbox.mapboxsdk.style.expressions.Expression.within;
import static com.mapbox.mapboxsdk.style.expressions.Expression.zoom;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.lineOpacity;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.lineWidth;
@@ -449,11 +454,32 @@ public class ExpressionTest {
@Test
public void testInString() throws Exception {
- Object[] expected = new Object[] {"in", "one", "onetwo"};
+ Object[] expected = new Object[] {"in", "one", "onetwo"};
Object[] actual = in(literal("one"), literal("onetwo")).toArray();
assertTrue("expression should match", Arrays.deepEquals(expected, actual));
}
+ @Test
+ public void testWithIn() throws Exception {
+ List> lngLats = Collections.singletonList(
+ Arrays.asList(
+ Point.fromLngLat(0, 0),
+ Point.fromLngLat(0, 5),
+ Point.fromLngLat(5, 5),
+ Point.fromLngLat(5, 0),
+ Point.fromLngLat(0, 0)
+ )
+ );
+
+ Polygon polygon = Polygon.fromLngLats(lngLats);
+ HashMap map = new HashMap<>();
+ map.put("type", "Polygon");
+ map.put("json", polygon.toJson());
+ Object[] expected = new Object[] {"within", map};
+ Object[] actual = within(polygon).toArray();
+ assertTrue("expression should match", Arrays.deepEquals(expected, actual));
+ }
+
@Test
public void testInNumber() throws Exception {
Object[] expected = new Object[] {"in", 1f, new Object[] {"literal", new Object[] {1f, 2f}}};
diff --git a/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java b/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java
index b9c72288f..63e9c9ca0 100644
--- a/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java
+++ b/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java
@@ -3,12 +3,14 @@ package com.mapbox.mapboxsdk.testapp.activity.style;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
-import androidx.appcompat.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
+
import com.mapbox.geojson.Feature;
import com.mapbox.geojson.FeatureCollection;
+import com.mapbox.geojson.Point;
+import com.mapbox.geojson.Polygon;
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.maps.MapView;
@@ -30,13 +32,16 @@ import com.mapbox.mapboxsdk.style.sources.TileSet;
import com.mapbox.mapboxsdk.style.sources.VectorSource;
import com.mapbox.mapboxsdk.testapp.R;
import com.mapbox.mapboxsdk.testapp.utils.ResourceUtils;
-import timber.log.Timber;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import androidx.appcompat.app.AppCompatActivity;
+import timber.log.Timber;
+
import static com.mapbox.mapboxsdk.style.expressions.Expression.all;
import static com.mapbox.mapboxsdk.style.expressions.Expression.color;
import static com.mapbox.mapboxsdk.style.expressions.Expression.eq;
@@ -50,6 +55,7 @@ import static com.mapbox.mapboxsdk.style.expressions.Expression.lt;
import static com.mapbox.mapboxsdk.style.expressions.Expression.stop;
import static com.mapbox.mapboxsdk.style.expressions.Expression.switchCase;
import static com.mapbox.mapboxsdk.style.expressions.Expression.toNumber;
+import static com.mapbox.mapboxsdk.style.expressions.Expression.within;
import static com.mapbox.mapboxsdk.style.expressions.Expression.zoom;
import static com.mapbox.mapboxsdk.style.layers.Property.FILL_TRANSLATE_ANCHOR_MAP;
import static com.mapbox.mapboxsdk.style.layers.Property.NONE;
@@ -67,6 +73,7 @@ import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.lineJoin;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.lineOpacity;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.lineWidth;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.symbolPlacement;
+import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.textOpacity;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.textSize;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.visibility;
@@ -79,6 +86,23 @@ public class RuntimeStyleActivity extends AppCompatActivity {
private MapboxMap mapboxMap;
private boolean styleLoaded;
+ List> lngLats = Collections.singletonList(
+ Arrays.asList(
+ Point.fromLngLat(-15.468749999999998,
+ 41.77131167976407),
+ Point.fromLngLat(15.468749999999998,
+ 41.77131167976407),
+ Point.fromLngLat(15.468749999999998,
+ 58.26328705248601),
+ Point.fromLngLat(-15.468749999999998,
+ 58.26328705248601),
+ Point.fromLngLat(-15.468749999999998,
+ 41.77131167976407)
+ )
+ );
+
+ Polygon polygon = Polygon.fromLngLats(lngLats);
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -93,13 +117,19 @@ public class RuntimeStyleActivity extends AppCompatActivity {
mapboxMap = map;
// Center and Zoom (Amsterdam, zoomed to streets)
- mapboxMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(52.379189, 4.899431), 14));
+ mapboxMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(52.379189, 4.899431), 1));
mapboxMap.setStyle(
new Style.Builder()
.fromUri(Style.MAPBOX_STREETS)
// set custom transition
- .withTransition(new TransitionOptions(250, 50)), style -> styleLoaded = true
+ .withTransition(new TransitionOptions(250, 50)), style -> {
+ styleLoaded = true;
+ SymbolLayer laber = (SymbolLayer) style.getLayer("country-label");
+ laber.setProperties(
+ textOpacity(switchCase(within(polygon), literal(1.0f), literal(0.5f)))
+ );
+ }
);
});
}
@@ -547,7 +577,7 @@ public class RuntimeStyleActivity extends AppCompatActivity {
states.setProperties(
textSize(switchCase(
in(get("name"), literal("Texas")), literal(25.0f),
- in(get("name"), literal(new Object[] {"California","Illinois"})), literal(25.0f),
+ in(get("name"), literal(new Object[] {"California", "Illinois"})), literal(25.0f),
literal(6.0f) // default value
)
)
diff --git a/vendor/mapbox-gl-native b/vendor/mapbox-gl-native
index 94a91c7c1..efc605bed 160000
--- a/vendor/mapbox-gl-native
+++ b/vendor/mapbox-gl-native
@@ -1 +1 @@
-Subproject commit 94a91c7c1ccc2e640e8905fcbd7176cce393924f
+Subproject commit efc605bed6f2d8f54b7097af1b91416c3fa13e06