diff options
Diffstat (limited to 'platform/android/MapboxGLAndroidSDKTestApp/src')
3 files changed, 103 insertions, 5 deletions
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/maps/ImageMissingTest.kt b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/maps/ImageMissingTest.kt new file mode 100644 index 0000000000..c4ea4d2c19 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/maps/ImageMissingTest.kt @@ -0,0 +1,91 @@ +package com.mapbox.mapboxsdk.testapp.maps + +import android.support.test.rule.ActivityTestRule +import android.support.test.runner.AndroidJUnit4 +import com.mapbox.mapboxsdk.maps.MapView +import com.mapbox.mapboxsdk.maps.Style +import com.mapbox.mapboxsdk.testapp.R +import com.mapbox.mapboxsdk.testapp.activity.espresso.EspressoTestActivity +import junit.framework.Assert.assertEquals +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit +import java.util.concurrent.TimeoutException + +@RunWith(AndroidJUnit4::class) +class ImageMissingTest { + + @Rule + @JvmField + var rule = ActivityTestRule(EspressoTestActivity::class.java) + + private lateinit var mapView: MapView + private val latch = CountDownLatch(1) + + @Test + fun testMissingImage() { + rule.runOnUiThread { + initMap().addOnStyleImageMissingListener { + assertEquals("missing-icon", it) + latch.countDown() + } + } + + if(!latch.await(5, TimeUnit.SECONDS)){ + throw TimeoutException() + } + } + + private fun initMap(): MapView { + mapView = rule.activity.findViewById(R.id.mapView) + mapView.getMapAsync { it.setStyle(Style.Builder().fromJson(styleJson)) } + return mapView + } + + companion object { + private const val styleJson = """ + { + "version": 8, + "name": "Mapbox Streets", + "sprite": "mapbox://sprites/mapbox/streets-v8", + "glyphs": "mapbox://fonts/mapbox/{fontstack}/{range}.pbf", + "sources": { + "point": { + "type": "geojson", + "data": { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [0, 0] + } + } + } + }, + "layers": [{ + "id": "bg", + "type": "background", + "paint": { + "background-color": "#f00" + } + }, { + "id": "point", + "type": "circle", + "source": "point", + "paint": { + "circle-radius": 100 + } + }, { + "id": "icon", + "type": "symbol", + "source": "point", + "layout": { + "icon-image": "missing-icon" + } + }] + } + """ + } +}
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java index 1a2b6c3030..24bfe62e75 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java @@ -362,7 +362,7 @@ public class SymbolGeneratorActivity extends AppCompatActivity implements OnMapR @Override protected void onPostExecute(HashMap<String, Bitmap> bitmapHashMap) { super.onPostExecute(bitmapHashMap); - mapboxMap.getStyle().addImages(bitmapHashMap); + mapboxMap.getStyle().addImagesAsync(bitmapHashMap); } } }
\ No newline at end of file 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 244101746b..6eed142fc4 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 @@ -9,7 +9,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; @@ -29,6 +28,7 @@ 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; @@ -126,13 +126,21 @@ public class SymbolLayerActivity extends AppCompatActivity implements MapboxMap. 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; - // marker image - Bitmap androidBitmap = BitmapUtils.getBitmapFromDrawable(getResources().getDrawable(R.drawable.ic_android_2)); Bitmap carBitmap = BitmapUtils.getBitmapFromDrawable( getResources().getDrawable(R.drawable.ic_directions_car_black)); @@ -168,7 +176,6 @@ public class SymbolLayerActivity extends AppCompatActivity implements MapboxMap. mapboxMap.setStyle(new Style.Builder() .fromUrl("asset://streets.json") - .withImage("Android", Objects.requireNonNull(androidBitmap), false) .withImage("Car", Objects.requireNonNull(carBitmap), false) .withSources(markerSource, mapboxSignSource) .withLayers(markerSymbolLayer, mapboxSignSymbolLayer) |