summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/fs/FileSource.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/fs/FileSource.java')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/fs/FileSource.java41
1 files changed, 41 insertions, 0 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/fs/FileSource.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/fs/FileSource.java
new file mode 100644
index 0000000000..1ec6a8db61
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/fs/FileSource.java
@@ -0,0 +1,41 @@
+package com.mapbox.mapboxsdk.fs;
+
+import android.content.Context;
+
+import com.mapbox.mapboxsdk.offline.OfflineManager;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * Holds a central reference to the core's DefaultFileSource for as long as
+ * there are active mapviews / offline managers
+ */
+public class FileSource {
+
+ // Use weak reference to avoid blocking GC on this reference.
+ // Should only block when mapview / Offline manager instances
+ // are alive
+ private static WeakReference<FileSource> INSTANCE;
+
+ public static synchronized FileSource getInstance(Context context) {
+ if (INSTANCE == null || INSTANCE.get() == null) {
+ String cachePath = OfflineManager.getDatabasePath(context);
+ String apkPath = context.getPackageCodePath();
+ INSTANCE = new WeakReference<>(new FileSource(cachePath, apkPath));
+ }
+
+ return INSTANCE.get();
+ }
+
+ private long nativePtr;
+
+ private FileSource(String cachePath, String apkPath) {
+ initialize(cachePath, apkPath);
+ }
+
+ private native void initialize(String cachePath, String apkPath);
+
+ @Override
+ protected native void finalize() throws Throwable;
+
+}