From 385e4e6ade58dbc51efde7d18843163c047337de Mon Sep 17 00:00:00 2001 From: Tobrun Van Nuland Date: Mon, 14 Aug 2017 09:57:51 +0200 Subject: [android] - style image accessor --- .../java/com/mapbox/mapboxsdk/maps/MapboxMap.java | 4 ++ .../com/mapbox/mapboxsdk/maps/NativeMapView.java | 9 ++++ .../mapbox/mapboxsdk/testapp/style/ImageTest.java | 54 ++++++++++++++++++++++ platform/android/src/native_map_view.cpp | 10 ++++ platform/android/src/native_map_view.hpp | 3 ++ 5 files changed, 80 insertions(+) create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/ImageTest.java diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java index becf337545..5389cd7e7a 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java @@ -473,6 +473,10 @@ public final class MapboxMap { nativeMapView.removeImage(name); } + public Bitmap getImage(@NonNull String name) { + return nativeMapView.getImage(name); + } + // // MinZoom // diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java index b2d49bdbf8..4f5037e4b3 100755 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java @@ -808,6 +808,13 @@ final class NativeMapView { nativeRemoveImage(name); } + public Bitmap getImage(String name) { + if (isDestroyedOn("getImage")) { + return null; + } + return nativeGetImage(name); + } + // Feature querying @NonNull @@ -1078,6 +1085,8 @@ final class NativeMapView { private native void nativeRemoveImage(String name); + private native Bitmap nativeGetImage(String name); + private native void nativeUpdatePolygon(long polygonId, Polygon polygon); private native void nativeUpdatePolyline(long polylineId, Polyline polyline); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/ImageTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/ImageTest.java new file mode 100644 index 0000000000..60cf4ced3d --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/ImageTest.java @@ -0,0 +1,54 @@ +package com.mapbox.mapboxsdk.testapp.style; + +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.support.test.espresso.UiController; +import android.support.test.runner.AndroidJUnit4; + +import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.testapp.R; +import com.mapbox.mapboxsdk.testapp.action.MapboxMapAction; +import com.mapbox.mapboxsdk.testapp.activity.BaseActivityTest; +import com.mapbox.mapboxsdk.testapp.activity.style.RuntimeStyleTestActivity; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +/** + * CRUD tests around Image + */ +@RunWith(AndroidJUnit4.class) +public class ImageTest extends BaseActivityTest { + + private static final String IMAGE_ID = "test.image"; + + @Override + protected Class getActivityClass() { + return RuntimeStyleTestActivity.class; + } + + @Test + public void testAddGetImage() { + validateTestSetup(); + MapboxMapAction.invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + Drawable drawable = rule.getActivity().getResources().getDrawable(R.drawable.ic_launcher_round); + assertTrue(drawable instanceof BitmapDrawable); + + Bitmap bitmapSet = ((BitmapDrawable) drawable).getBitmap(); + mapboxMap.addImage(IMAGE_ID, bitmapSet); + + Bitmap bitmapGet = mapboxMap.getImage(IMAGE_ID); + assertTrue(bitmapGet.sameAs(bitmapSet)); + + mapboxMap.removeImage(IMAGE_ID); + assertNull(mapboxMap.getImage(IMAGE_ID)); + } + }); + } +} diff --git a/platform/android/src/native_map_view.cpp b/platform/android/src/native_map_view.cpp index 58c39355d1..d859d929d3 100755 --- a/platform/android/src/native_map_view.cpp +++ b/platform/android/src/native_map_view.cpp @@ -50,6 +50,7 @@ #include "geometry/lat_lng_bounds.hpp" #include "map/camera_position.hpp" #include "style/light.hpp" +#include "bitmap_factory.hpp" namespace mbgl { namespace android { @@ -1043,6 +1044,14 @@ void NativeMapView::removeImage(JNIEnv& env, jni::String name) { map->getStyle().removeImage(jni::Make(env, name)); } +jni::Object NativeMapView::getImage(JNIEnv& env, jni::String name) { + const mbgl::style::Image *image = map->getStyle().getImage(jni::Make(env, name)); + if (image) { + return Bitmap::CreateBitmap(env, image->getImage()); + } else { + return jni::Object(); + } +} void NativeMapView::setPrefetchesTiles(JNIEnv&, jni::jboolean enable) { map->setPrefetchZoomDelta(enable ? util::DEFAULT_PREFETCH_ZOOM_DELTA : uint8_t(0)); @@ -1553,6 +1562,7 @@ void NativeMapView::registerNative(jni::JNIEnv& env) { METHOD(&NativeMapView::removeSource, "nativeRemoveSource"), METHOD(&NativeMapView::addImage, "nativeAddImage"), METHOD(&NativeMapView::removeImage, "nativeRemoveImage"), + METHOD(&NativeMapView::getImage, "nativeGetImage"), METHOD(&NativeMapView::setLatLngBounds, "nativeSetLatLngBounds"), METHOD(&NativeMapView::setPrefetchesTiles, "nativeSetPrefetchesTiles"), METHOD(&NativeMapView::getPrefetchesTiles, "nativeGetPrefetchesTiles") diff --git a/platform/android/src/native_map_view.hpp b/platform/android/src/native_map_view.hpp index ec82a36a5c..24c88f4e3f 100755 --- a/platform/android/src/native_map_view.hpp +++ b/platform/android/src/native_map_view.hpp @@ -24,6 +24,7 @@ #include "geometry/lat_lng_bounds.hpp" #include "map/camera_position.hpp" #include "style/light.hpp" +#include "bitmap.hpp" #include #include @@ -253,6 +254,8 @@ public: void removeImage(JNIEnv&, jni::String); + jni::Object getImage(JNIEnv&, jni::String); + void setPrefetchesTiles(JNIEnv&, jni::jboolean); jni::jboolean getPrefetchesTiles(JNIEnv&); -- cgit v1.2.1