From fcea86e6851a1c51288b1281cbc0d32c54c126c9 Mon Sep 17 00:00:00 2001 From: Antonio Zugaldia Date: Wed, 17 Feb 2016 16:26:46 -0500 Subject: [PATCH] [android] #3891 - starting jni wiring --- .../mapboxsdk/offline/OfflineManager.java | 20 +++++++++ .../src/main/AndroidManifest.xml | 16 +++----- platform/android/src/jni.cpp | 41 +++++++++++++++++++ 3 files changed, 66 insertions(+), 11 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 a4752374a1f..3f7f7fc9579 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 @@ -1,6 +1,7 @@ package com.mapbox.mapboxsdk.offline; import android.content.Context; +import android.util.Log; import java.util.List; @@ -9,6 +10,11 @@ */ public class OfflineManager { + private final static String LOG_TAG = "OfflineManager"; + + // Holds the pointer to JNI DefaultFileSource + private long mDefaultFileSourcePtr = 0; + /* * Callbacks */ @@ -26,6 +32,14 @@ public interface CreateOfflineRegionCallback { */ public OfflineManager(Context context) { + String cachePath = context.getCacheDir().getAbsolutePath(); + Log.d(LOG_TAG, "cachePath: " + cachePath); + + String assetRoot = context.getFilesDir().getAbsolutePath(); + Log.d(LOG_TAG, "assetRoot: " + assetRoot); + + // Get pointer to DefaultFileSource instance + mDefaultFileSourcePtr = createDefaultFileSource(cachePath, assetRoot); } /* @@ -69,4 +83,10 @@ public void createOfflineRegion( } + /* + * Native methods + */ + + private native long createDefaultFileSource(String cachePath, String assetRoot); + } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml index 130584df3bc..df71063f1f2 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml @@ -19,11 +19,11 @@ - - + + - - + + - - - - - - + android:label="@string/activity_offline" /> ThrowNew(runtimeExceptionClass, msg) < 0) { env->ExceptionDescribe(); @@ -1620,6 +1626,19 @@ void JNICALL nativeRemoveCustomLayer(JNIEnv *env, jobject obj, jlong nativeMapVi nativeMapView->getMap().removeCustomLayer(std_string_from_jstring(env, id)); } +// Offline calls begin + +jlong JNICALL createDefaultFileSource(JNIEnv *env, jobject obj, jstring cachePath_, jstring assetRoot_) { + mbgl::Log::Debug(mbgl::Event::JNI, "createDefaultFileSource"); + std::string cachePath = std_string_from_jstring(env, cachePath_); + std::string assetRoot = std_string_from_jstring(env, assetRoot_); + mbgl::DefaultFileSource *defaultFileSource = new mbgl::DefaultFileSource(cachePath, assetRoot, 50 * 1024 * 1024); + jlong defaultFileSourcePtr = reinterpret_cast(defaultFileSource); + return defaultFileSourcePtr; +} + +// Offline calls end + } extern "C" { @@ -2003,6 +2022,15 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { env->ExceptionDescribe(); } + // Offline definitions begin + + customOfflineManagerClass = env->FindClass("com/mapbox/mapboxsdk/offline/OfflineManager"); + if (customOfflineManagerClass == nullptr) { + env->ExceptionDescribe(); + } + + // Offline definitions end + const std::vector methods = { {"nativeCreate", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;FIJ)J", reinterpret_cast(&nativeCreate)}, @@ -2139,6 +2167,19 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { return JNI_ERR; } + // Offline register begin + + const std::vector offlineMethods = { + {"createDefaultFileSource", "(Ljava/lang/String;Ljava/lang/String;)J", reinterpret_cast(&createDefaultFileSource)} + }; + + if (env->RegisterNatives(customOfflineManagerClass, offlineMethods.data(), offlineMethods.size()) < 0) { + env->ExceptionDescribe(); + return JNI_ERR; + } + + // Offline register end + latLngClass = reinterpret_cast(env->NewGlobalRef(latLngClass)); if (latLngClass == nullptr) { env->ExceptionDescribe();