summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortobrun <tobrun.van.nuland@gmail.com>2018-12-20 12:56:08 +0100
committertobrun <tobrun.van.nuland@gmail.com>2018-12-20 12:56:08 +0100
commit20bff0bf8aceaee1e0ef95315230e74eacc72cd0 (patch)
tree312198553edd2f70ab9c789d5c22862e203034c2
parentcf6c97ad687921596f53846905a786f8e73351ce (diff)
downloadqtlocation-mapboxgl-upstream/tvn-modular-library-loader.tar.gz
[android] - make library loader modularupstream/tvn-modular-library-loader
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/LibraryLoader.java102
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java56
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/ModuleProvider.java6
-rwxr-xr-xplatform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java6
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/ModuleProviderImpl.java (renamed from platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/ModuleProviderImpl.java)12
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/loader/LibraryLoaderImpl.java38
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/NativeConnectivityListener.java6
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java5
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java5
9 files changed, 181 insertions, 55 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/LibraryLoader.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/LibraryLoader.java
index fb0904f051..d1db94f53a 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/LibraryLoader.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/LibraryLoader.java
@@ -1,52 +1,58 @@
package com.mapbox.mapboxsdk;
-import com.mapbox.mapboxsdk.log.Logger;
-
-/**
- * Loads the mapbox-gl shared library
- * <p>
- * By default uses the {@link System#loadLibrary(String)},
- * use {@link #setLibraryLoader(LibraryLoader)} to provide an alternative library loading hook.
- * </p>
- */
-public abstract class LibraryLoader {
-
- private static final String TAG = "Mbgl-LibraryLoader";
-
- private static final LibraryLoader DEFAULT = new LibraryLoader() {
- @Override
- public void load(String name) {
- System.loadLibrary(name);
- }
- };
-
- private static volatile LibraryLoader loader = DEFAULT;
-
- /**
- * Set the library loader that loads the shared library.
- *
- * @param libraryLoader the library loader
- */
- public static void setLibraryLoader(LibraryLoader libraryLoader) {
- loader = libraryLoader;
- }
-
- /**
- * Loads "libmapbox-gl.so" native shared library.
- * <p>
- * Catches UnsatisfiedLinkErrors and prints a warning to logcat.
- * </p>
- */
- public static void load() {
- try {
- loader.load("mapbox-gl");
- } catch (UnsatisfiedLinkError error) {
- String message = "Failed to load native shared library.";
- Logger.e(TAG, message, error);
- MapStrictMode.strictModeViolation(message, error);
- }
- }
-
- public abstract void load(String name);
+
+public interface LibraryLoader {
+
+ void load();
+
}
+
+
+
+//
+///**
+
+
+//
+//public abstract class LibraryLoader {
+//
+// private static final String TAG = "Mbgl-LibraryLoader";
+//
+// private static final LibraryLoader DEFAULT = new LibraryLoader() {
+// @Override
+// public void load(String name) {
+// System.loadLibrary(name);
+// }
+// };
+//
+// private static volatile LibraryLoader loader = DEFAULT;
+//
+// /**
+// * Set the library loader that loads the shared library.
+// *
+// * @param libraryLoader the library loader
+// */
+// public static void setLibraryLoader(LibraryLoader libraryLoader) {
+// loader = libraryLoader;
+// }
+//
+// /**
+// * Loads "libmapbox-gl.so" native shared library.
+// * <p>
+// * Catches UnsatisfiedLinkErrors and prints a warning to logcat.
+// * </p>
+// */
+// public static void load() {
+// try {
+// loader.load("mapbox-gl");
+// } catch (UnsatisfiedLinkError error) {
+// String message = "Failed to load native shared library.";
+// Logger.e(TAG, message, error);
+// MapStrictMode.strictModeViolation(message, error);
+// }
+// }
+//
+// public abstract void load(String name);
+//}
+//
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java
index b761c85e1c..9c4752b030 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java
@@ -10,6 +10,7 @@ import com.mapbox.mapboxsdk.constants.MapboxConstants;
import com.mapbox.mapboxsdk.exceptions.MapboxConfigurationException;
import com.mapbox.mapboxsdk.log.Logger;
import com.mapbox.mapboxsdk.maps.TelemetryDefinition;
+import com.mapbox.mapboxsdk.module.ModuleProviderImpl;
import com.mapbox.mapboxsdk.net.ConnectivityReceiver;
import com.mapbox.mapboxsdk.storage.FileSource;
import com.mapbox.mapboxsdk.utils.ThreadUtils;
@@ -35,6 +36,8 @@ public final class Mapbox {
private String accessToken;
@Nullable
private TelemetryDefinition telemetry;
+ @Nullable
+ private LibraryLoader libraryLoader;
/**
* Get an instance of Mapbox.
@@ -49,14 +52,33 @@ public final class Mapbox {
@UiThread
@NonNull
public static synchronized Mapbox getInstance(@NonNull Context context, @Nullable String accessToken) {
+ return getInstance(context, accessToken, null);
+ }
+
+ /**
+ * Get an instance of Mapbox.
+ * <p>
+ * This class manages the Mapbox access token, application context, and connectivity state.
+ * </p>
+ *
+ * @param context Android context which holds or is an application context
+ * @param accessToken Mapbox access token
+ * @param libraryLoader Library loader used to load the native library
+ * @return the single instance of Mapbox
+ */
+ @UiThread
+ @NonNull
+ public static synchronized Mapbox getInstance(@NonNull Context context, @Nullable String accessToken,
+ @Nullable LibraryLoader libraryLoader) {
ThreadUtils.checkThread("Mapbox");
if (INSTANCE == null) {
Context appContext = context.getApplicationContext();
- FileSource.initializeFileDirsPaths(appContext);
INSTANCE = new Mapbox(appContext, accessToken);
+ initializeLibraryLoader(libraryLoader);
if (isAccessTokenValid(accessToken)) {
initializeTelemetry();
}
+ FileSource.initializeFileDirsPaths(appContext);
ConnectivityReceiver.instance(appContext);
}
return INSTANCE;
@@ -145,7 +167,36 @@ public final class Mapbox {
}
/**
- * Get the module provider
+ * Initializes library loader.
+ *
+ * @param libraryLoader the library loader used to load native libraries
+ */
+ private static void initializeLibraryLoader(LibraryLoader libraryLoader) {
+ if (libraryLoader != null) {
+ INSTANCE.libraryLoader = libraryLoader;
+ } else {
+ try {
+ INSTANCE.libraryLoader = getModuleProvider().obtainLibraryLoader();
+ } catch (Exception exception) {
+ String message = "Error occurred while initializing library loader";
+ Logger.e(TAG, message, exception);
+ MapStrictMode.strictModeViolation(message, exception);
+ }
+ }
+ }
+
+ /**
+ * Get an instance of LibraryLoader if initialised.
+ *
+ * @return library loader used to load native libraries
+ */
+ public static LibraryLoader getLibraryLoader() {
+ return INSTANCE.libraryLoader;
+ }
+
+
+ /**
+ * Get the module provider, internal use only
*
* @return moduleProvider
*/
@@ -157,6 +208,7 @@ public final class Mapbox {
return moduleProvider;
}
+
/**
* Runtime validation of Mapbox creation.
*/
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/ModuleProvider.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/ModuleProvider.java
index 12a10cd86e..f1cc1f1ab5 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/ModuleProvider.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/ModuleProvider.java
@@ -26,4 +26,10 @@ public interface ModuleProvider {
@Nullable
TelemetryDefinition obtainTelemetry();
+ /**
+ * Get the concrete implementation of LibraryLoader
+ */
+ @Nullable
+ LibraryLoader obtainLibraryLoader();
+
}
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 33d8a4881a..ac27ac9c0c 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
@@ -17,6 +17,7 @@ import com.mapbox.geojson.Feature;
import com.mapbox.geojson.Geometry;
import com.mapbox.mapboxsdk.LibraryLoader;
import com.mapbox.mapboxsdk.MapStrictMode;
+import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.annotations.Icon;
import com.mapbox.mapboxsdk.annotations.Marker;
import com.mapbox.mapboxsdk.annotations.Polygon;
@@ -81,7 +82,10 @@ final class NativeMapView {
private MapboxMap.SnapshotReadyCallback snapshotReadyCallback;
static {
- LibraryLoader.load();
+ LibraryLoader libraryLoader = Mapbox.getLibraryLoader();
+ if (libraryLoader != null) {
+ libraryLoader.load();
+ }
}
//
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/ModuleProviderImpl.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/ModuleProviderImpl.java
index c64e91767c..52f3ca163b 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/ModuleProviderImpl.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/ModuleProviderImpl.java
@@ -1,10 +1,14 @@
-package com.mapbox.mapboxsdk;
+package com.mapbox.mapboxsdk.module;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+
+import com.mapbox.mapboxsdk.LibraryLoader;
+import com.mapbox.mapboxsdk.ModuleProvider;
import com.mapbox.mapboxsdk.http.HttpRequest;
import com.mapbox.mapboxsdk.maps.TelemetryDefinition;
import com.mapbox.mapboxsdk.module.http.HttpRequestImpl;
+import com.mapbox.mapboxsdk.module.loader.LibraryLoaderImpl;
import com.mapbox.mapboxsdk.module.telemetry.TelemetryImpl;
public class ModuleProviderImpl implements ModuleProvider {
@@ -20,4 +24,10 @@ public class ModuleProviderImpl implements ModuleProvider {
public TelemetryDefinition obtainTelemetry() {
return new TelemetryImpl();
}
+
+ @Nullable
+ @Override
+ public LibraryLoader obtainLibraryLoader() {
+ return new LibraryLoaderImpl();
+ }
}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/loader/LibraryLoaderImpl.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/loader/LibraryLoaderImpl.java
new file mode 100644
index 0000000000..e376f2aca1
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/loader/LibraryLoaderImpl.java
@@ -0,0 +1,38 @@
+package com.mapbox.mapboxsdk.module.loader;
+
+import android.content.Context;
+
+import com.mapbox.mapboxsdk.LibraryLoader;
+import com.mapbox.mapboxsdk.MapStrictMode;
+import com.mapbox.mapboxsdk.log.Logger;
+
+import static android.content.ContentValues.TAG;
+
+/**
+ * Loads the mapbox-gl shared library
+ * <p>
+ * By default uses the {@link System#loadLibrary(String)},
+ * use {@link com.mapbox.mapboxsdk.Mapbox#getInstance(Context, String, LibraryLoader)} to provide an alternative
+ * library loading hook.
+ * </p>
+ */
+public class LibraryLoaderImpl implements LibraryLoader {
+
+ private boolean loaded;
+
+ @Override
+ public void load() {
+ if (loaded) {
+ return;
+ }
+
+ try {
+ System.loadLibrary("mapbox-gl");
+ loaded = true;
+ } catch (UnsatisfiedLinkError error) {
+ String message = "Failed to load native shared library.";
+ Logger.e(TAG, message, error);
+ MapStrictMode.strictModeViolation(message, error);
+ }
+ }
+} \ No newline at end of file
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/NativeConnectivityListener.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/NativeConnectivityListener.java
index 491013e874..73b8cd2d4c 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/NativeConnectivityListener.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/NativeConnectivityListener.java
@@ -3,6 +3,7 @@ package com.mapbox.mapboxsdk.net;
import android.support.annotation.Keep;
import com.mapbox.mapboxsdk.LibraryLoader;
+import com.mapbox.mapboxsdk.Mapbox;
/**
* Updates the native library's connectivity state
@@ -10,7 +11,10 @@ import com.mapbox.mapboxsdk.LibraryLoader;
class NativeConnectivityListener implements ConnectivityListener {
static {
- LibraryLoader.load();
+ LibraryLoader libraryLoader = Mapbox.getLibraryLoader();
+ if (libraryLoader != null) {
+ libraryLoader.load();
+ }
}
@Keep
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 6731efd4b8..50cafb14b0 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
@@ -39,7 +39,10 @@ public class OfflineManager {
//
static {
- LibraryLoader.load();
+ LibraryLoader libraryLoader = Mapbox.getLibraryLoader();
+ if (libraryLoader != null) {
+ libraryLoader.load();
+ }
}
// Native peer pointer
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 7bcc6ad234..96963bd689 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
@@ -25,7 +25,10 @@ public class OfflineRegion {
//
static {
- LibraryLoader.load();
+ LibraryLoader libraryLoader = Mapbox.getLibraryLoader();
+ if (libraryLoader != null) {
+ libraryLoader.load();
+ }
}
// Members