From 50f5bbcdab9009f5e68f865a4fcf77874c0434ff Mon Sep 17 00:00:00 2001 From: tobrun Date: Thu, 10 Jan 2019 12:20:54 +0100 Subject: [android] - update symbol layer example with regression test for symbols flashing --- .../activity/style/SymbolLayerActivity.java | 31 +++++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolLayerActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolLayerActivity.java index e1ec66cd1d..e6bcbe2bfc 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolLayerActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolLayerActivity.java @@ -10,7 +10,6 @@ import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import android.view.ViewGroup; - import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import com.mapbox.geojson.Feature; @@ -30,6 +29,7 @@ import com.mapbox.mapboxsdk.testapp.R; import com.mapbox.mapboxsdk.utils.BitmapUtils; import java.util.List; +import java.util.Objects; import static com.mapbox.mapboxsdk.style.expressions.Expression.FormatOption.formatFontScale; import static com.mapbox.mapboxsdk.style.expressions.Expression.FormatOption.formatTextFont; @@ -37,7 +37,10 @@ import static com.mapbox.mapboxsdk.style.expressions.Expression.concat; import static com.mapbox.mapboxsdk.style.expressions.Expression.format; import static com.mapbox.mapboxsdk.style.expressions.Expression.formatEntry; import static com.mapbox.mapboxsdk.style.expressions.Expression.get; +import static com.mapbox.mapboxsdk.style.expressions.Expression.id; import static com.mapbox.mapboxsdk.style.expressions.Expression.literal; +import static com.mapbox.mapboxsdk.style.expressions.Expression.match; +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.toBool; import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconAllowOverlap; @@ -45,6 +48,7 @@ import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconAnchor; import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconColor; import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconIgnorePlacement; import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconImage; +import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconOpacity; import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconSize; import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.textAllowOverlap; import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.textAnchor; @@ -65,11 +69,13 @@ public class SymbolLayerActivity extends AppCompatActivity implements MapboxMap. private static final String MARKER_SOURCE = "marker-source"; private static final String MARKER_LAYER = "marker-layer"; private static final String MARKER_ICON = "my-layers-image"; + public static final String ID_FEATURE_PROPERTY = "id"; public static final String SELECTED_FEATURE_PROPERTY = "selected"; public static final String TITLE_FEATURE_PROPERTY = "title"; private GeoJsonSource geoJsonSource; private FeatureCollection markerCollection; + private SymbolLayer symbolLayer; private MapboxMap mapboxMap; private MapView mapView; private boolean initialFont; @@ -104,13 +110,13 @@ public class SymbolLayerActivity extends AppCompatActivity implements MapboxMap. // source markerCollection = FeatureCollection.fromFeatures(new Feature[] { - Feature.fromGeometry(Point.fromLngLat(4.91638, 52.35673), featureProperties("Marker 1")), - Feature.fromGeometry(Point.fromLngLat(4.91638, 52.34673), featureProperties("Marker 2")) + Feature.fromGeometry(Point.fromLngLat(4.91638, 52.35673), featureProperties("1", "Marker 1")), + Feature.fromGeometry(Point.fromLngLat(4.91638, 52.34673), featureProperties("2", "Marker 2")) }); geoJsonSource = new GeoJsonSource(MARKER_SOURCE, markerCollection); // layer - SymbolLayer layer = new SymbolLayer(MARKER_LAYER, MARKER_SOURCE) + symbolLayer = new SymbolLayer(MARKER_LAYER, MARKER_SOURCE) .withProperties( iconImage(MARKER_ICON), iconIgnorePlacement(true), @@ -138,9 +144,9 @@ public class SymbolLayerActivity extends AppCompatActivity implements MapboxMap. mapboxMap.setStyle(new Style.Builder() .fromUrl("asset://streets.json") - .withImage(MARKER_ICON, icLayersBitmap) + .withImage(MARKER_ICON, Objects.requireNonNull(icLayersBitmap), true) .withSource(geoJsonSource) - .withLayer(layer), + .withLayer(symbolLayer), style -> styleLoaded = true ); @@ -157,11 +163,21 @@ public class SymbolLayerActivity extends AppCompatActivity implements MapboxMap. for (Feature feature : markerCollection.features()) { if (feature.getStringProperty(TITLE_FEATURE_PROPERTY) .equals(features.get(0).getStringProperty(TITLE_FEATURE_PROPERTY))) { + + // use DDS boolean selected = feature.getBooleanProperty(SELECTED_FEATURE_PROPERTY); feature.addBooleanProperty(SELECTED_FEATURE_PROPERTY, !selected); + + // validate symbol flicker regression for #13407 + symbolLayer.setProperties(iconOpacity(match( + get(ID_FEATURE_PROPERTY), literal(1.0f), + stop(feature.getStringProperty("id"), 0.3f) + ))); } } geoJsonSource.setGeoJson(markerCollection); + + } return false; @@ -187,8 +203,9 @@ public class SymbolLayerActivity extends AppCompatActivity implements MapboxMap. initialFont = !initialFont; } - private JsonObject featureProperties(String title) { + private JsonObject featureProperties(String id, String title) { JsonObject object = new JsonObject(); + object.add(ID_FEATURE_PROPERTY, new JsonPrimitive(id)); object.add(TITLE_FEATURE_PROPERTY, new JsonPrimitive(title)); object.add(SELECTED_FEATURE_PROPERTY, new JsonPrimitive(false)); return object; -- cgit v1.2.1