summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java4
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java10
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegionMetadata.java40
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/OfflineActivity.java12
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/offline/CustomMetadata.java20
-rwxr-xr-xplatform/android/src/jni.cpp73
-rw-r--r--platform/android/src/jni.hpp4
7 files changed, 41 insertions, 122 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java
index b56ecfc057..e632bcd765 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java
@@ -126,7 +126,7 @@ public class OfflineManager {
*/
public void createOfflineRegion(
@NonNull OfflineRegionDefinition definition,
- @NonNull OfflineRegionMetadata metadata,
+ @NonNull byte[] metadata,
@NonNull final CreateOfflineRegionCallback callback) {
createOfflineRegion(mDefaultFileSourcePtr, definition, metadata, new CreateOfflineRegionCallback() {
@@ -176,7 +176,7 @@ public class OfflineManager {
private native void createOfflineRegion(
long defaultFileSourcePtr, OfflineRegionDefinition definition,
- OfflineRegionMetadata metadata, CreateOfflineRegionCallback callback);
+ byte[] metadata, CreateOfflineRegionCallback callback);
private native void setOfflineMapboxTileCountLimit(
long defaultFileSourcePtr, long limit);
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java
index 9e518f1e6a..0f05549338 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java
@@ -23,7 +23,13 @@ public class OfflineRegion {
// Members
private long mId = 0;
private OfflineRegionDefinition mDefinition = null;
- private OfflineRegionMetadata mMetadata = null;
+
+ /**
+ * Arbitrary binary region metadata. The contents are opaque to the SDK implementation;
+ * it just stores and retrieves a byte[]. Check the `OfflineActivity` in the TestApp
+ * for a sample implementation that uses JSON to store an offline region name.
+ */
+ private byte[] mMetadata = null;
// Holds the pointer to JNI OfflineRegion
private long mOfflineRegionPtr = 0;
@@ -122,7 +128,7 @@ public class OfflineRegion {
return mDefinition;
}
- public OfflineRegionMetadata getMetadata() {
+ public byte[] getMetadata() {
return mMetadata;
}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegionMetadata.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegionMetadata.java
deleted file mode 100644
index d4445ca037..0000000000
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegionMetadata.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.mapbox.mapboxsdk.offline;
-
-/**
- * Arbitrary binary region metadata. The contents are opaque to the SDK implementation;
- * it just stores and retrieves a byte[].
- */
-public class OfflineRegionMetadata {
-
- private byte[] metadata;
-
- /*
- * Constructor
- */
-
- public OfflineRegionMetadata(byte[] metadata) {
- this.metadata = metadata;
- }
-
- /*
- * Getters and setters
- */
-
- public byte[] getMetadata() {
- return metadata;
- }
-
- public void setMetadata(byte[] metadata) {
- this.metadata = metadata;
- }
-
- /*
- * Overrides
- */
-
- @Override
- public String toString() {
- return "OfflineRegionMetadata{metadata=" + metadata + "}";
- }
-
-}
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/OfflineActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/OfflineActivity.java
index 23a8be54a7..b5e6a92ae0 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/OfflineActivity.java
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/OfflineActivity.java
@@ -13,7 +13,6 @@ import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;
-import com.google.gson.Gson;
import com.mapbox.mapboxsdk.camera.CameraPosition;
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
import com.mapbox.mapboxsdk.constants.Style;
@@ -24,7 +23,6 @@ import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
import com.mapbox.mapboxsdk.offline.OfflineManager;
import com.mapbox.mapboxsdk.offline.OfflineRegion;
-import com.mapbox.mapboxsdk.offline.OfflineRegionMetadata;
import com.mapbox.mapboxsdk.offline.OfflineTilePyramidRegionDefinition;
import com.mapbox.mapboxsdk.offline.OfflineRegionError;
import com.mapbox.mapboxsdk.offline.OfflineRegionStatus;
@@ -224,8 +222,7 @@ public class OfflineActivity extends AppCompatActivity
String regionName;
try {
- String json = new String(offlineRegion.getMetadata().getMetadata(), CustomMetadata.CHARSET);
- CustomMetadata customMetadata = new Gson().fromJson(json, CustomMetadata.class);
+ CustomMetadata customMetadata = CustomMetadata.decode(offlineRegion.getMetadata());
regionName = customMetadata.getRegionName();
} catch (UnsupportedEncodingException e) {
Log.e(LOG_TAG, "Failed to decode metadata: " + e.getMessage());
@@ -262,13 +259,10 @@ public class OfflineActivity extends AppCompatActivity
styleURL, bounds, minZoom, maxZoom, pixelRatio);
// Sample way of encoding metadata
- OfflineRegionMetadata metadata;
+ byte[] metadata;
try {
CustomMetadata customMetadata = new CustomMetadata(regionName);
- byte[] encoded = new Gson()
- .toJson(customMetadata, CustomMetadata.class)
- .getBytes(CustomMetadata.CHARSET);
- metadata = new OfflineRegionMetadata(encoded);
+ metadata = customMetadata.encode();
} catch (UnsupportedEncodingException e) {
Log.e(LOG_TAG, "Failed to encode metadata: " + e.getMessage());
metadata = null;
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/offline/CustomMetadata.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/offline/CustomMetadata.java
index 27bdef6312..75c5f719f5 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/offline/CustomMetadata.java
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/offline/CustomMetadata.java
@@ -1,5 +1,9 @@
package com.mapbox.mapboxsdk.testapp.offline;
+import com.google.gson.Gson;
+
+import java.io.UnsupportedEncodingException;
+
/**
* A custom metadata class
*/
@@ -33,4 +37,20 @@ public class CustomMetadata {
this.regionName = regionName;
}
+ /*
+ * Helper methods to encode/decode metadata into/from byte[]
+ */
+
+ public byte[] encode() throws UnsupportedEncodingException {
+ return new Gson()
+ .toJson(this, CustomMetadata.class)
+ .getBytes(CustomMetadata.CHARSET);
+ }
+
+ public static CustomMetadata decode(byte[] metadata) throws UnsupportedEncodingException {
+ String json = new String(metadata, CustomMetadata.CHARSET);
+ return new Gson()
+ .fromJson(json, CustomMetadata.class);
+ }
+
}
diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp
index 9855529c66..c60721ceb3 100755
--- a/platform/android/src/jni.cpp
+++ b/platform/android/src/jni.cpp
@@ -141,10 +141,6 @@ jfieldID offlineRegionDefinitionMinZoomId = nullptr;
jfieldID offlineRegionDefinitionMaxZoomId = nullptr;
jfieldID offlineRegionDefinitionPixelRatioId = nullptr;
-jclass offlineRegionMetadataClass = nullptr;
-jmethodID offlineRegionMetadataConstructorId = nullptr;
-jfieldID offlineRegionMetadataMetadataId = nullptr;
-
jclass createOfflineRegionCallbackClass = nullptr;
jmethodID createOnCreateMethodId = nullptr;
jmethodID createOnErrorMethodId = nullptr;
@@ -1779,8 +1775,7 @@ void JNICALL listOfflineRegions(JNIEnv *env, jobject obj, jlong defaultFileSourc
// Metadata object
jbyteArray metadata = metadata_from_native(env2, region.getMetadata());
- jobject jmetadata = env2->NewObject(offlineRegionMetadataClass, offlineRegionMetadataConstructorId, metadata);
- env2->SetObjectField(jregion, offlineRegionMetadataId, jmetadata);
+ env2->SetObjectField(jregion, offlineRegionMetadataId, metadata);
// Moves the region on the stack into a heap-allocated one
env2->SetLongField(jregion, offlineRegionPtrId,
@@ -1801,7 +1796,7 @@ void JNICALL listOfflineRegions(JNIEnv *env, jobject obj, jlong defaultFileSourc
});
}
-void JNICALL createOfflineRegion(JNIEnv *env, jobject obj, jlong defaultFileSourcePtr, jobject definition_, jobject metadata_, jobject createCallback) {
+void JNICALL createOfflineRegion(JNIEnv *env, jobject obj, jlong defaultFileSourcePtr, jobject definition_, jbyteArray metadata_, jobject createCallback) {
mbgl::Log::Debug(mbgl::Event::JNI, "createOfflineRegion");
// Checks
@@ -1827,9 +1822,8 @@ void JNICALL createOfflineRegion(JNIEnv *env, jobject obj, jlong defaultFileSour
// Metadata
mbgl::OfflineRegionMetadata metadata;
- jbyteArray jmetadata = (jbyteArray)env->GetObjectField(metadata_, offlineRegionMetadataMetadataId);
- if (jmetadata != nullptr) {
- metadata = metadata_from_java(env, jmetadata);
+ if (metadata_ != nullptr) {
+ metadata = metadata_from_java(env, metadata_);
}
// Makes sure the objects don't get GC'ed
@@ -1857,9 +1851,8 @@ void JNICALL createOfflineRegion(JNIEnv *env, jobject obj, jlong defaultFileSour
env2->SetLongField(jregion, offlineRegionIdId, region->getID());
// Metadata object
- jbyteArray xmetadata = metadata_from_native(env2, region->getMetadata());
- jobject xjmetadata = env2->NewObject(offlineRegionMetadataClass, offlineRegionMetadataConstructorId, xmetadata);
- env2->SetObjectField(jregion, offlineRegionMetadataId, xjmetadata);
+ jbyteArray jmetadata = metadata_from_native(env2, region->getMetadata());
+ env2->SetObjectField(jregion, offlineRegionMetadataId, jmetadata);
// Moves the region on the stack into a heap-allocated one
env2->SetLongField(jregion, offlineRegionPtrId,
@@ -2582,7 +2575,7 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
return JNI_ERR;
}
- offlineRegionMetadataId = env->GetFieldID(offlineRegionClass, "mMetadata", "Lcom/mapbox/mapboxsdk/offline/OfflineRegionMetadata;");
+ offlineRegionMetadataId = env->GetFieldID(offlineRegionClass, "mMetadata", "[B");
if (offlineRegionMetadataId == nullptr) {
env->ExceptionDescribe();
return JNI_ERR;
@@ -2637,24 +2630,6 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
return JNI_ERR;
}
- offlineRegionMetadataClass = env->FindClass("com/mapbox/mapboxsdk/offline/OfflineRegionMetadata");
- if (offlineRegionMetadataClass == nullptr) {
- env->ExceptionDescribe();
- return JNI_ERR;
- }
-
- offlineRegionMetadataConstructorId = env->GetMethodID(offlineRegionMetadataClass, "<init>", "([B)V");
- if (offlineRegionMetadataConstructorId == nullptr) {
- env->ExceptionDescribe();
- return JNI_ERR;
- }
-
- offlineRegionMetadataMetadataId = env->GetFieldID(offlineRegionMetadataClass, "metadata", "[B");
- if (offlineRegionMetadataMetadataId == nullptr) {
- env->ExceptionDescribe();
- return JNI_ERR;
- }
-
createOfflineRegionCallbackClass = env->FindClass("com/mapbox/mapboxsdk/offline/OfflineManager$CreateOfflineRegionCallback");
if (createOfflineRegionCallbackClass == nullptr) {
env->ExceptionDescribe();
@@ -2944,7 +2919,7 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
{"setAccessToken", "(JLjava/lang/String;)V", reinterpret_cast<void *>(&setAccessToken)},
{"getAccessToken", "(J)Ljava/lang/String;", reinterpret_cast<void *>(&getAccessToken)},
{"listOfflineRegions", "(JLcom/mapbox/mapboxsdk/offline/OfflineManager$ListOfflineRegionsCallback;)V", reinterpret_cast<void *>(&listOfflineRegions)},
- {"createOfflineRegion", "(JLcom/mapbox/mapboxsdk/offline/OfflineRegionDefinition;Lcom/mapbox/mapboxsdk/offline/OfflineRegionMetadata;Lcom/mapbox/mapboxsdk/offline/OfflineManager$CreateOfflineRegionCallback;)V", reinterpret_cast<void *>(&createOfflineRegion)},
+ {"createOfflineRegion", "(JLcom/mapbox/mapboxsdk/offline/OfflineRegionDefinition;[BLcom/mapbox/mapboxsdk/offline/OfflineManager$CreateOfflineRegionCallback;)V", reinterpret_cast<void *>(&createOfflineRegion)},
{"setOfflineMapboxTileCountLimit", "(JJ)V", reinterpret_cast<void *>(&setOfflineMapboxTileCountLimit)}
};
@@ -3223,28 +3198,6 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
env->DeleteGlobalRef(offlineRegionClass);
}
- offlineRegionMetadataClass = reinterpret_cast<jclass>(env->NewGlobalRef(offlineRegionMetadataClass));
- if (offlineRegionMetadataClass == nullptr) {
- env->ExceptionDescribe();
- env->DeleteGlobalRef(latLngClass);
- env->DeleteGlobalRef(latLngBoundsClass);
- env->DeleteGlobalRef(iconClass);
- env->DeleteGlobalRef(markerClass);
- env->DeleteGlobalRef(polylineClass);
- env->DeleteGlobalRef(polygonClass);
- env->DeleteGlobalRef(runtimeExceptionClass);
- env->DeleteGlobalRef(nullPointerExceptionClass);
- env->DeleteGlobalRef(arrayListClass);
- env->DeleteGlobalRef(projectedMetersClass);
- env->DeleteGlobalRef(pointFClass);
- env->DeleteGlobalRef(rectFClass);
- env->DeleteGlobalRef(httpContextClass);
- env->DeleteGlobalRef(offlineManagerClass);
- env->DeleteGlobalRef(listOfflineRegionsCallbackClass);
- env->DeleteGlobalRef(offlineRegionClass);
- env->DeleteGlobalRef(offlineRegionDefinitionClass);
- }
-
createOfflineRegionCallbackClass = reinterpret_cast<jclass>(env->NewGlobalRef(createOfflineRegionCallbackClass));
if (createOfflineRegionCallbackClass == nullptr) {
env->ExceptionDescribe();
@@ -3265,7 +3218,6 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
env->DeleteGlobalRef(listOfflineRegionsCallbackClass);
env->DeleteGlobalRef(offlineRegionClass);
env->DeleteGlobalRef(offlineRegionDefinitionClass);
- env->DeleteGlobalRef(offlineRegionMetadataClass);
}
offlineRegionObserverClass = reinterpret_cast<jclass>(env->NewGlobalRef(offlineRegionObserverClass));
@@ -3288,7 +3240,6 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
env->DeleteGlobalRef(listOfflineRegionsCallbackClass);
env->DeleteGlobalRef(offlineRegionClass);
env->DeleteGlobalRef(offlineRegionDefinitionClass);
- env->DeleteGlobalRef(offlineRegionMetadataClass);
env->DeleteGlobalRef(createOfflineRegionCallbackClass);
}
@@ -3312,7 +3263,6 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
env->DeleteGlobalRef(listOfflineRegionsCallbackClass);
env->DeleteGlobalRef(offlineRegionClass);
env->DeleteGlobalRef(offlineRegionDefinitionClass);
- env->DeleteGlobalRef(offlineRegionMetadataClass);
env->DeleteGlobalRef(createOfflineRegionCallbackClass);
env->DeleteGlobalRef(offlineRegionObserverClass);
}
@@ -3337,7 +3287,6 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
env->DeleteGlobalRef(listOfflineRegionsCallbackClass);
env->DeleteGlobalRef(offlineRegionClass);
env->DeleteGlobalRef(offlineRegionDefinitionClass);
- env->DeleteGlobalRef(offlineRegionMetadataClass);
env->DeleteGlobalRef(createOfflineRegionCallbackClass);
env->DeleteGlobalRef(offlineRegionObserverClass);
env->DeleteGlobalRef(offlineRegionStatusClass);
@@ -3363,7 +3312,6 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
env->DeleteGlobalRef(listOfflineRegionsCallbackClass);
env->DeleteGlobalRef(offlineRegionClass);
env->DeleteGlobalRef(offlineRegionDefinitionClass);
- env->DeleteGlobalRef(offlineRegionMetadataClass);
env->DeleteGlobalRef(createOfflineRegionCallbackClass);
env->DeleteGlobalRef(offlineRegionObserverClass);
env->DeleteGlobalRef(offlineRegionStatusClass);
@@ -3390,7 +3338,6 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
env->DeleteGlobalRef(listOfflineRegionsCallbackClass);
env->DeleteGlobalRef(offlineRegionClass);
env->DeleteGlobalRef(offlineRegionDefinitionClass);
- env->DeleteGlobalRef(offlineRegionMetadataClass);
env->DeleteGlobalRef(createOfflineRegionCallbackClass);
env->DeleteGlobalRef(offlineRegionObserverClass);
env->DeleteGlobalRef(offlineRegionStatusClass);
@@ -3528,10 +3475,6 @@ extern "C" JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved) {
offlineRegionDefinitionMaxZoomId = nullptr;
offlineRegionDefinitionPixelRatioId = nullptr;
- env->DeleteGlobalRef(offlineRegionMetadataClass);
- offlineRegionMetadataConstructorId = nullptr;
- offlineRegionMetadataMetadataId = nullptr;
-
env->DeleteGlobalRef(createOfflineRegionCallbackClass);
createOnCreateMethodId = nullptr;
createOnErrorMethodId = nullptr;
diff --git a/platform/android/src/jni.hpp b/platform/android/src/jni.hpp
index 2995ea0b35..6a3c248373 100644
--- a/platform/android/src/jni.hpp
+++ b/platform/android/src/jni.hpp
@@ -127,10 +127,6 @@ extern jfieldID offlineRegionDefinitionMinZoomId;
extern jfieldID offlineRegionDefinitionMaxZoomId;
extern jfieldID offlineRegionDefinitionPixelRatioId;
-extern jclass offlineRegionMetadataClass;
-extern jmethodID offlineRegionMetadataConstructorId;
-extern jfieldID offlineRegionMetadataMetadataId;
-
extern jclass createOfflineRegionCallbackClass;
extern jmethodID createOnCreateMethodId;
extern jmethodID createOnErrorMethodId;