summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolLayerActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolLayerActivity.java')
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolLayerActivity.java375
1 files changed, 0 insertions, 375 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
deleted file mode 100644
index ee562ad6e8..0000000000
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolLayerActivity.java
+++ /dev/null
@@ -1,375 +0,0 @@
-package com.mapbox.mapboxsdk.testapp.activity.style;
-
-import android.graphics.Bitmap;
-import android.graphics.Color;
-import android.graphics.PointF;
-import android.os.Bundle;
-import android.support.annotation.NonNull;
-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;
-import com.mapbox.geojson.FeatureCollection;
-import com.mapbox.geojson.Point;
-import com.mapbox.mapboxsdk.camera.CameraPosition;
-import com.mapbox.mapboxsdk.geometry.LatLng;
-import com.mapbox.mapboxsdk.maps.MapView;
-import com.mapbox.mapboxsdk.maps.MapboxMap;
-import com.mapbox.mapboxsdk.maps.MapboxMapOptions;
-import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
-import com.mapbox.mapboxsdk.maps.Style;
-import com.mapbox.mapboxsdk.style.expressions.Expression;
-import com.mapbox.mapboxsdk.style.layers.Property;
-import com.mapbox.mapboxsdk.style.layers.SymbolLayer;
-import com.mapbox.mapboxsdk.style.sources.GeoJsonSource;
-import com.mapbox.mapboxsdk.style.sources.Source;
-import com.mapbox.mapboxsdk.testapp.R;
-import com.mapbox.mapboxsdk.utils.BitmapUtils;
-import timber.log.Timber;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
-import java.util.Random;
-
-import static com.mapbox.mapboxsdk.style.expressions.Expression.FormatOption.formatFontScale;
-import static com.mapbox.mapboxsdk.style.expressions.Expression.FormatOption.formatTextColor;
-import static com.mapbox.mapboxsdk.style.expressions.Expression.FormatOption.formatTextFont;
-import static com.mapbox.mapboxsdk.style.expressions.Expression.NumberFormatOption.currency;
-import static com.mapbox.mapboxsdk.style.expressions.Expression.NumberFormatOption.locale;
-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.literal;
-import static com.mapbox.mapboxsdk.style.expressions.Expression.match;
-import static com.mapbox.mapboxsdk.style.expressions.Expression.numberFormat;
-import static com.mapbox.mapboxsdk.style.expressions.Expression.rgb;
-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;
-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;
-import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.textColor;
-import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.textField;
-import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.textFont;
-import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.textIgnorePlacement;
-import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.textRotationAlignment;
-import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.textSize;
-
-/**
- * Test activity showcasing runtime manipulation of symbol layers.
- * <p>
- * Showcases the ability to offline render a symbol layer by using a packaged style and fonts from the assets folder.
- * </p>
- */
-public class SymbolLayerActivity extends AppCompatActivity implements MapboxMap.OnMapClickListener, OnMapReadyCallback {
-
- private static final String ID_FEATURE_PROPERTY = "id";
- private static final String SELECTED_FEATURE_PROPERTY = "selected";
- private static final String TITLE_FEATURE_PROPERTY = "title";
-
- private static final String[] NORMAL_FONT_STACK = new String[] {"DIN Offc Pro Regular", "Arial Unicode MS Regular"};
- private static final String[] BOLD_FONT_STACK = new String[] {"DIN Offc Pro Bold", "Arial Unicode MS Regular"};
-
- // layer & source constants
- private static final String MARKER_SOURCE = "marker-source";
- private static final String MARKER_LAYER = "marker-layer";
- private static final String MAPBOX_SIGN_SOURCE = "mapbox-sign-source";
- private static final String MAPBOX_SIGN_LAYER = "mapbox-sign-layer";
- private static final String NUMBER_FORMAT_SOURCE = "mapbox-number-source";
- private static final String NUMBER_FORMAT_LAYER = "mapbox-number-layer";
-
- private static final Expression TEXT_FIELD_EXPRESSION =
- switchCase(toBool(get(SELECTED_FEATURE_PROPERTY)),
- format(
- formatEntry(
- get(TITLE_FEATURE_PROPERTY),
- formatTextFont(BOLD_FONT_STACK)
- ),
- formatEntry("\nis fun!", formatFontScale(0.75))
- ),
- format(
- formatEntry("This is", formatFontScale(0.75)),
- formatEntry(
- concat(literal("\n"), get(TITLE_FEATURE_PROPERTY)),
- formatFontScale(1.25),
- formatTextFont(BOLD_FONT_STACK)
- )
- )
- );
-
- private final Random random = new Random();
- private GeoJsonSource markerSource;
- private FeatureCollection markerCollection;
- private SymbolLayer markerSymbolLayer;
- private SymbolLayer mapboxSignSymbolLayer;
- private SymbolLayer numberFormatSymbolLayer;
- private MapboxMap mapboxMap;
- private MapView mapView;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_symbollayer);
-
- // Create map configuration
- MapboxMapOptions mapboxMapOptions = MapboxMapOptions.createFromAttributes(this);
- mapboxMapOptions.camera(new CameraPosition.Builder().target(
- new LatLng(52.35273, 4.91638))
- .zoom(13)
- .build()
- );
-
- // Create map programmatically, add to view hierarchy
- mapView = new MapView(this, mapboxMapOptions);
- mapView.getMapAsync(this);
- mapView.onCreate(savedInstanceState);
- ((ViewGroup) findViewById(R.id.container)).addView(mapView);
-
- // Use OnStyleImageMissing API to lazily load an icon
- mapView.addOnStyleImageMissingListener(id -> {
- Style style = mapboxMap.getStyle();
- if (style != null) {
- Timber.e("Adding image with id: %s", id);
- Bitmap androidIcon = BitmapUtils.getBitmapFromDrawable(getResources().getDrawable(R.drawable.ic_android_2));
- style.addImage(id, Objects.requireNonNull(androidIcon));
- }
- });
- }
-
- @Override
- public void onMapReady(@NonNull MapboxMap mapboxMap) {
- this.mapboxMap = mapboxMap;
- Bitmap carBitmap = BitmapUtils.getBitmapFromDrawable(
- getResources().getDrawable(R.drawable.ic_directions_car_black));
-
- // marker source
- markerCollection = FeatureCollection.fromFeatures(new Feature[] {
- Feature.fromGeometry(Point.fromLngLat(4.91638, 52.35673), featureProperties("1", "Android")),
- Feature.fromGeometry(Point.fromLngLat(4.91638, 52.34673), featureProperties("2", "Car"))
- });
- markerSource = new GeoJsonSource(MARKER_SOURCE, markerCollection);
-
- // marker layer
- markerSymbolLayer = new SymbolLayer(MARKER_LAYER, MARKER_SOURCE)
- .withProperties(
- iconImage(get(TITLE_FEATURE_PROPERTY)),
- iconIgnorePlacement(true),
- iconAllowOverlap(true),
- iconSize(switchCase(toBool(get(SELECTED_FEATURE_PROPERTY)), literal(1.5f), literal(1.0f))),
- iconAnchor(Property.ICON_ANCHOR_BOTTOM),
- iconColor(Color.BLUE),
- textField(TEXT_FIELD_EXPRESSION),
- textFont(NORMAL_FONT_STACK),
- textColor(Color.BLUE),
- textAllowOverlap(true),
- textIgnorePlacement(true),
- textAnchor(Property.TEXT_ANCHOR_TOP),
- textSize(10f)
- );
-
- // mapbox sign layer
- Source mapboxSignSource = new GeoJsonSource(MAPBOX_SIGN_SOURCE, Point.fromLngLat(4.91638, 52.3510));
- mapboxSignSymbolLayer = new SymbolLayer(MAPBOX_SIGN_LAYER, MAPBOX_SIGN_SOURCE);
- shuffleMapboxSign();
-
- // number format layer
- Source numberFormatSource = new GeoJsonSource(NUMBER_FORMAT_SOURCE, Point.fromLngLat(4.92756, 52.3516));
- numberFormatSymbolLayer = new SymbolLayer(NUMBER_FORMAT_LAYER, NUMBER_FORMAT_SOURCE);
- numberFormatSymbolLayer.setProperties(
- textField(
- numberFormat(123.456789, locale("nl-NL"), currency("EUR"))
- )
- );
-
- mapboxMap.setStyle(new Style.Builder()
- .fromUri("asset://streets.json")
- .withImage("Car", Objects.requireNonNull(carBitmap), false)
- .withSources(markerSource, mapboxSignSource, numberFormatSource)
- .withLayers(markerSymbolLayer, mapboxSignSymbolLayer, numberFormatSymbolLayer)
- );
-
- // Set a click-listener so we can manipulate the map
- mapboxMap.addOnMapClickListener(SymbolLayerActivity.this);
- }
-
- @Override
- public boolean onMapClick(@NonNull LatLng point) {
- // Query which features are clicked
- PointF screenLoc = mapboxMap.getProjection().toScreenLocation(point);
- List<Feature> markerFeatures = mapboxMap.queryRenderedFeatures(screenLoc, MARKER_LAYER);
- if (!markerFeatures.isEmpty()) {
- for (Feature feature : Objects.requireNonNull(markerCollection.features())) {
- if (feature.getStringProperty(ID_FEATURE_PROPERTY)
- .equals(markerFeatures.get(0).getStringProperty(ID_FEATURE_PROPERTY))) {
-
- // use DDS
- boolean selected = feature.getBooleanProperty(SELECTED_FEATURE_PROPERTY);
- feature.addBooleanProperty(SELECTED_FEATURE_PROPERTY, !selected);
-
- // validate symbol flicker regression for #13407
- markerSymbolLayer.setProperties(iconOpacity(match(
- get(ID_FEATURE_PROPERTY), literal(1.0f),
- stop(feature.getStringProperty("id"), selected ? 0.3f : 1.0f)
- )));
- }
- }
- markerSource.setGeoJson(markerCollection);
- } else {
- List<Feature> mapboxSignFeatures = mapboxMap.queryRenderedFeatures(screenLoc, MAPBOX_SIGN_LAYER);
- if (!mapboxSignFeatures.isEmpty()) {
- shuffleMapboxSign();
- }
- }
-
- return false;
- }
-
- private void toggleTextSize() {
- if (markerSymbolLayer != null) {
- Number size = markerSymbolLayer.getTextSize().getValue();
- if (size != null) {
- markerSymbolLayer.setProperties((float) size > 10 ? textSize(10f) : textSize(20f));
- }
- }
- }
-
- private void toggleTextField() {
- if (markerSymbolLayer != null) {
- if (TEXT_FIELD_EXPRESSION.equals(markerSymbolLayer.getTextField().getExpression())) {
- markerSymbolLayer.setProperties(textField("āA"));
- } else {
- markerSymbolLayer.setProperties(textField(TEXT_FIELD_EXPRESSION));
- }
- }
- }
-
- private void toggleTextFont() {
- if (markerSymbolLayer != null) {
- if (Arrays.equals(markerSymbolLayer.getTextFont().getValue(), NORMAL_FONT_STACK)) {
- markerSymbolLayer.setProperties(textFont(BOLD_FONT_STACK));
- } else {
- markerSymbolLayer.setProperties(textFont(NORMAL_FONT_STACK));
- }
- }
- }
-
- private void shuffleMapboxSign() {
- if (mapboxSignSymbolLayer != null) {
- mapboxSignSymbolLayer.setProperties(
- textField(
- format(
- formatEntry("M", formatFontScale(2)),
- getRandomColorEntryForString("a"),
- getRandomColorEntryForString("p"),
- getRandomColorEntryForString("b"),
- getRandomColorEntryForString("o"),
- getRandomColorEntryForString("x")
- )
- ),
- textColor(Color.BLACK),
- textFont(BOLD_FONT_STACK),
- textSize(25f),
- textRotationAlignment(Property.TEXT_ROTATION_ALIGNMENT_MAP)
- );
- }
- }
-
- private Expression.FormatEntry getRandomColorEntryForString(@NonNull String string) {
- return formatEntry(string,
- formatTextColor(
- rgb(
- random.nextInt(256),
- random.nextInt(256),
- random.nextInt(256)
- )
- ));
- }
-
- private JsonObject featureProperties(@NonNull String id, @NonNull 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;
- }
-
- @Override
- protected void onStart() {
- super.onStart();
- mapView.onStart();
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- mapView.onResume();
- }
-
- @Override
- protected void onPause() {
- super.onPause();
- mapView.onPause();
- }
-
- @Override
- protected void onStop() {
- super.onStop();
- mapView.onStop();
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- mapView.onSaveInstanceState(outState);
- }
-
- @Override
- public void onLowMemory() {
- super.onLowMemory();
- mapView.onLowMemory();
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- if (mapboxMap != null) {
- mapboxMap.removeOnMapClickListener(this);
- }
- mapView.onDestroy();
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.menu_symbol_layer, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.action_toggle_text_size:
- toggleTextSize();
- return true;
- case R.id.action_toggle_text_field:
- toggleTextField();
- return true;
- case R.id.action_toggle_text_font:
- toggleTextFont();
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
- }
-}