summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuardiola31337 <pablo.guardiola@mapbox.com>2019-05-06 11:28:03 -0400
committerGuardiola31337 <pablo.guardiola@mapbox.com>2019-05-06 11:28:03 -0400
commitba73e507b845764f21228e023df111cddc9f7518 (patch)
tree3e2699d79f8d4c36b385c452d23c4bc4c661738b
parent4557f254fa6bbe08f8a750a4c140c133fdcad362 (diff)
downloadqtlocation-mapboxgl-upstream/14297-fix-offline-callbacks.tar.gz
[android] convert context and resources cache path change callback from FileSource#setResourcesCachePath and offline manager from CopyTempDatabaseFileTask into hard referencesupstream/14297-fix-offline-callbacks
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java62
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java11
2 files changed, 33 insertions, 40 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 5808411d43..2be5418f1f 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
@@ -7,6 +7,7 @@ import android.os.Handler;
import android.os.Looper;
import android.support.annotation.Keep;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import com.mapbox.mapboxsdk.LibraryLoader;
import com.mapbox.mapboxsdk.Mapbox;
@@ -21,7 +22,6 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
-import java.lang.ref.WeakReference;
import java.nio.channels.FileChannel;
/**
@@ -227,42 +227,43 @@ public class OfflineManager {
final File src = new File(path);
final FileUtils.OnCheckFileReadPermissionListener fileReadPermissionListener =
new FileUtils.OnCheckFileReadPermissionListener() {
- @Override
- public void onReadPermissionGranted() {
- new FileUtils.CheckFileWritePermissionTask(new FileUtils.OnCheckFileWritePermissionListener() {
- @Override
- public void onWritePermissionGranted() {
- // path writable, merge and update schema in place if necessary
- mergeOfflineDatabaseFiles(src, callback, false);
- }
-
- @Override
- public void onError() {
- // path not writable, copy the the file to temp directory, then merge and update schema on a copy if
- // necessary
- File dst = new File(FileSource.getInternalCachePath(context), src.getName());
- new CopyTempDatabaseFileTask(OfflineManager.this, callback).execute(src, dst);
- }
- }).execute(src);
- }
+ @Override
+ public void onReadPermissionGranted() {
+ new FileUtils.CheckFileWritePermissionTask(new FileUtils.OnCheckFileWritePermissionListener() {
+ @Override
+ public void onWritePermissionGranted() {
+ // path writable, merge and update schema in place if necessary
+ mergeOfflineDatabaseFiles(src, callback, false);
+ }
- @Override
- public void onError() {
- // path not readable, abort
- callback.onError("Secondary database needs to be located in a readable path.");
- }
- };
+ @Override
+ public void onError() {
+ // path not writable, copy the the file to temp directory, then merge and update schema on a copy if
+ // necessary
+ File dst = new File(FileSource.getInternalCachePath(context), src.getName());
+ new CopyTempDatabaseFileTask(OfflineManager.this, callback).execute(src, dst);
+ }
+ }).execute(src);
+ }
+
+ @Override
+ public void onError() {
+ // path not readable, abort
+ callback.onError("Secondary database needs to be located in a readable path.");
+ }
+ };
new FileUtils.CheckFileReadPermissionTask(fileReadPermissionListener).execute(src);
}
private static final class CopyTempDatabaseFileTask extends AsyncTask<Object, Void, Object> {
+ // Safe to retain as it enforces only retaining the Application context
@NonNull
- private final WeakReference<OfflineManager> offlineManagerWeakReference;
- @NonNull
+ private final OfflineManager offlineManager;
+ @Nullable
private MergeOfflineRegionsCallback callback;
- CopyTempDatabaseFileTask(OfflineManager offlineManager, MergeOfflineRegionsCallback callback) {
- this.offlineManagerWeakReference = new WeakReference<>(offlineManager);
+ CopyTempDatabaseFileTask(@NonNull OfflineManager offlineManager, @Nullable MergeOfflineRegionsCallback callback) {
+ this.offlineManager = offlineManager;
this.callback = callback;
}
@@ -283,8 +284,7 @@ public class OfflineManager {
protected void onPostExecute(Object object) {
MergeOfflineRegionsCallback localCallback = callback;
callback = null;
- OfflineManager offlineManager = offlineManagerWeakReference.get();
- if (object instanceof File && offlineManager != null) {
+ if (object instanceof File) {
// successfully copied the file, perform merge
File dst = (File) object;
offlineManager.mergeOfflineDatabaseFiles(dst, localCallback, true);
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java
index cc4988b549..82bd3b5f19 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java
@@ -20,7 +20,6 @@ import com.mapbox.mapboxsdk.utils.FileUtils;
import com.mapbox.mapboxsdk.utils.ThreadUtils;
import java.io.File;
-import java.lang.ref.WeakReference;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
@@ -270,9 +269,9 @@ public class FileSource {
* @param path the new database path
* @param callback the callback to obtain the result
*/
- public static void setResourcesCachePath(@NonNull Context context,
+ public static void setResourcesCachePath(final Context context,
@NonNull final String path,
- @NonNull ResourcesCachePathChangeCallback callback) {
+ final ResourcesCachePathChangeCallback callback) {
final String fileSourceActivatedMessage = "Cannot set path, file source is activated."
+ " Make sure that the map or a resources download is not running.";
if (getInstance(context).isActivated()) {
@@ -282,14 +281,9 @@ public class FileSource {
// no need to change the path
callback.onSuccess(path);
} else {
- final WeakReference<Context> contextWeakReference = new WeakReference<>(context);
- final WeakReference<ResourcesCachePathChangeCallback> callbackWeakReference = new WeakReference<>(callback);
new FileUtils.CheckFileWritePermissionTask(new FileUtils.OnCheckFileWritePermissionListener() {
@Override
public void onWritePermissionGranted() {
- final Context context = contextWeakReference.get();
- final ResourcesCachePathChangeCallback callback = callbackWeakReference.get();
-
if (callback == null) {
Logger.w(TAG, "Lost callback reference.");
return;
@@ -316,7 +310,6 @@ public class FileSource {
@Override
public void onError() {
- final ResourcesCachePathChangeCallback callback = callbackWeakReference.get();
if (callback != null) {
String message = "Path is not writable: " + path;
Logger.e(TAG, message);