Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Commit

Permalink
[android] #3891 - ground work for createOfflineRegion
Browse files Browse the repository at this point in the history
  • Loading branch information
zugaldia committed Feb 18, 2016
1 parent bb5d895 commit 290982d
Show file tree
Hide file tree
Showing 4 changed files with 141 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ public interface ListOfflineRegionsCallback {

public interface CreateOfflineRegionCallback {
void onCreate(OfflineRegion offlineRegion);
void onError(String error);
}

/*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,11 @@ public void onCreate(OfflineRegion offlineRegion) {
mOfflineRegion = offlineRegion;
launchDownload();
}

@Override
public void onError(String error) {
Log.e(LOG_TAG, "Error: " + error);
}
});
}

Expand Down
139 changes: 130 additions & 9 deletions platform/android/src/jni.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,10 +118,16 @@ jfieldID customLayerDeinitializeFunctionId = nullptr;

// Offline declarations start

jclass customOfflineManagerClass = nullptr;
jclass offlineManagerClass = nullptr;

jclass listOfflineRegionsCallbackClass = nullptr;
jmethodID onErrorMethodId = nullptr;

jclass offlineRegionClass = nullptr;
jclass offlineRegionDefinitionClass = nullptr;
jclass offlineRegionMetadataClass = nullptr;
jclass createOfflineRegionCallbackClass = nullptr;

// Offline declarations end

bool throw_jni_error(JNIEnv *env, const char *msg) {
Expand Down Expand Up @@ -1680,6 +1686,10 @@ void JNICALL listOfflineRegions(JNIEnv *env, jobject obj, jlong defaultFileSourc
});
}

void JNICALL createOfflineRegion(JNIEnv *env, jobject obj, jlong defaultFileSourcePtr, jobject definition, jobject metadata, jobject callback) {
mbgl::Log::Debug(mbgl::Event::JNI, "createOfflineRegion");
}

// Offline calls end

}
Expand Down Expand Up @@ -2067,8 +2077,8 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {

// Offline definitions begin

customOfflineManagerClass = env->FindClass("com/mapbox/mapboxsdk/offline/OfflineManager");
if (customOfflineManagerClass == nullptr) {
offlineManagerClass = env->FindClass("com/mapbox/mapboxsdk/offline/OfflineManager");
if (offlineManagerClass == nullptr) {
env->ExceptionDescribe();
}

Expand All @@ -2082,6 +2092,26 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
env->ExceptionDescribe();
}

offlineRegionClass = env->FindClass("com/mapbox/mapboxsdk/offline/OfflineRegion");
if (offlineRegionClass == nullptr) {
env->ExceptionDescribe();
}

offlineRegionDefinitionClass = env->FindClass("com/mapbox/mapboxsdk/offline/OfflineRegionDefinition");
if (offlineRegionDefinitionClass == nullptr) {
env->ExceptionDescribe();
}

offlineRegionMetadataClass = env->FindClass("com/mapbox/mapboxsdk/offline/OfflineRegionMetadata");
if (offlineRegionMetadataClass == nullptr) {
env->ExceptionDescribe();
}

createOfflineRegionCallbackClass = env->FindClass("com/mapbox/mapboxsdk/offline/OfflineManager$CreateOfflineRegionCallback");
if (createOfflineRegionCallbackClass == nullptr) {
env->ExceptionDescribe();
}

// Offline definitions end

const std::vector<JNINativeMethod> methods = {
Expand Down Expand Up @@ -2226,10 +2256,11 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
{"createDefaultFileSource", "(Ljava/lang/String;Ljava/lang/String;)J", reinterpret_cast<void *>(&createDefaultFileSource)},
{"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)}
{"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)}
};

if (env->RegisterNatives(customOfflineManagerClass, offlineMethods.data(), offlineMethods.size()) < 0) {
if (env->RegisterNatives(offlineManagerClass, offlineMethods.data(), offlineMethods.size()) < 0) {
env->ExceptionDescribe();
return JNI_ERR;
}
Expand Down Expand Up @@ -2412,8 +2443,8 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {

// Offline global definitions begin

customOfflineManagerClass = reinterpret_cast<jclass>(env->NewGlobalRef(customOfflineManagerClass));
if (customOfflineManagerClass == nullptr) {
offlineManagerClass = reinterpret_cast<jclass>(env->NewGlobalRef(offlineManagerClass));
if (offlineManagerClass == nullptr) {
env->ExceptionDescribe();
env->DeleteGlobalRef(latLngClass);
env->DeleteGlobalRef(latLngBoundsClass);
Expand Down Expand Up @@ -2447,7 +2478,93 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
env->DeleteGlobalRef(pointFClass);
env->DeleteGlobalRef(rectFClass);
env->DeleteGlobalRef(httpContextClass);
env->DeleteGlobalRef(customOfflineManagerClass);
env->DeleteGlobalRef(offlineManagerClass);
}

offlineRegionClass = reinterpret_cast<jclass>(env->NewGlobalRef(offlineRegionClass));
if (offlineRegionClass == 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);
}

offlineRegionDefinitionClass = reinterpret_cast<jclass>(env->NewGlobalRef(offlineRegionDefinitionClass));
if (offlineRegionDefinitionClass == 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);
}

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();
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);
env->DeleteGlobalRef(offlineRegionMetadataClass);
}

// Offline global definitions end
Expand Down Expand Up @@ -2556,9 +2673,13 @@ extern "C" JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved) {

// Offline delete begins

env->DeleteGlobalRef(customOfflineManagerClass);
env->DeleteGlobalRef(offlineManagerClass);
env->DeleteGlobalRef(listOfflineRegionsCallbackClass);
onErrorMethodId = nullptr;
env->DeleteGlobalRef(offlineRegionClass);
env->DeleteGlobalRef(offlineRegionDefinitionClass);
env->DeleteGlobalRef(offlineRegionMetadataClass);
env->DeleteGlobalRef(createOfflineRegionCallbackClass);

// Offline delete ends

Expand Down
6 changes: 5 additions & 1 deletion platform/android/src/jni.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -103,9 +103,13 @@ extern jclass httpRequestClass;
extern jmethodID httpRequestStartId;
extern jmethodID httpRequestCancelId;

extern jclass customOfflineManagerClass;
extern jclass offlineManagerClass;
extern jclass listOfflineRegionsCallbackClass;
extern jmethodID onErrorMethodId;
extern jclass offlineRegionClass;
extern jclass offlineRegionDefinitionClass;
extern jclass offlineRegionMetadataClass;
extern jclass createOfflineRegionCallbackClass;

extern bool throw_jni_error(JNIEnv *env, const char *msg);
extern bool attach_jni_thread(JavaVM* vm, JNIEnv** env, std::string threadName);
Expand Down

0 comments on commit 290982d

Please sign in to comment.