From 4557f254fa6bbe08f8a750a4c140c133fdcad362 Mon Sep 17 00:00:00 2001 From: Guardiola31337 Date: Fri, 3 May 2019 12:25:47 -0400 Subject: [android] fix offline callbacks not being fired off Co-authored-by: Dan Nesfeder --- .../mapbox/mapboxsdk/offline/OfflineManager.java | 31 +++++++------- .../java/com/mapbox/mapboxsdk/utils/FileUtils.java | 49 ++++++++++------------ 2 files changed, 38 insertions(+), 42 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 8684d7c6f1..5808411d43 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 @@ -225,7 +225,8 @@ public class OfflineManager { */ public void mergeOfflineRegions(@NonNull String path, @NonNull final MergeOfflineRegionsCallback callback) { final File src = new File(path); - new FileUtils.CheckFileReadPermissionTask(new FileUtils.OnCheckFileReadPermissionListener() { + final FileUtils.OnCheckFileReadPermissionListener fileReadPermissionListener = + new FileUtils.OnCheckFileReadPermissionListener() { @Override public void onReadPermissionGranted() { new FileUtils.CheckFileWritePermissionTask(new FileUtils.OnCheckFileWritePermissionListener() { @@ -250,18 +251,19 @@ public class OfflineManager { // path not readable, abort callback.onError("Secondary database needs to be located in a readable path."); } - }).execute(src); + }; + new FileUtils.CheckFileReadPermissionTask(fileReadPermissionListener).execute(src); } private static final class CopyTempDatabaseFileTask extends AsyncTask { @NonNull private final WeakReference offlineManagerWeakReference; @NonNull - private final WeakReference callbackWeakReference; + private MergeOfflineRegionsCallback callback; CopyTempDatabaseFileTask(OfflineManager offlineManager, MergeOfflineRegionsCallback callback) { this.offlineManagerWeakReference = new WeakReference<>(offlineManager); - this.callbackWeakReference = new WeakReference<>(callback); + this.callback = callback; } @Override @@ -279,17 +281,16 @@ public class OfflineManager { @Override protected void onPostExecute(Object object) { - MergeOfflineRegionsCallback callback = callbackWeakReference.get(); - if (callback != null) { - OfflineManager offlineManager = offlineManagerWeakReference.get(); - if (object instanceof File && offlineManager != null) { - // successfully copied the file, perform merge - File dst = (File) object; - offlineManager.mergeOfflineDatabaseFiles(dst, callback, true); - } else if (object instanceof String) { - // error occurred - callback.onError((String) object); - } + MergeOfflineRegionsCallback localCallback = callback; + callback = null; + OfflineManager offlineManager = offlineManagerWeakReference.get(); + if (object instanceof File && offlineManager != null) { + // successfully copied the file, perform merge + File dst = (File) object; + offlineManager.mergeOfflineDatabaseFiles(dst, localCallback, true); + } else if (object instanceof String) { + // error occurred + localCallback.onError((String) object); } } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/FileUtils.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/FileUtils.java index 500e784602..95509b670c 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/FileUtils.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/FileUtils.java @@ -6,7 +6,6 @@ import android.support.annotation.NonNull; import com.mapbox.mapboxsdk.log.Logger; import java.io.File; -import java.lang.ref.WeakReference; public class FileUtils { @@ -17,10 +16,10 @@ public class FileUtils { */ public static class CheckFileReadPermissionTask extends AsyncTask { @NonNull - private final WeakReference listenerWeakReference; + private OnCheckFileReadPermissionListener listener; public CheckFileReadPermissionTask(OnCheckFileReadPermissionListener listener) { - this.listenerWeakReference = new WeakReference<>(listener); + this.listener = listener; } @Override @@ -34,21 +33,19 @@ public class FileUtils { @Override protected void onCancelled() { - OnCheckFileReadPermissionListener listener = listenerWeakReference.get(); - if (listener != null) { - listener.onError(); - } + OnCheckFileReadPermissionListener localListener = listener; + listener = null; + localListener.onError(); } @Override protected void onPostExecute(Boolean result) { - OnCheckFileReadPermissionListener listener = listenerWeakReference.get(); - if (listener != null) { - if (result) { - listener.onReadPermissionGranted(); - } else { - listener.onError(); - } + OnCheckFileReadPermissionListener localListener = listener; + listener = null; + if (result) { + localListener.onReadPermissionGranted(); + } else { + localListener.onError(); } } } @@ -74,10 +71,10 @@ public class FileUtils { */ public static class CheckFileWritePermissionTask extends AsyncTask { @NonNull - private final WeakReference listenerWeakReference; + private OnCheckFileWritePermissionListener listener; public CheckFileWritePermissionTask(OnCheckFileWritePermissionListener listener) { - this.listenerWeakReference = new WeakReference<>(listener); + this.listener = listener; } @Override @@ -91,21 +88,19 @@ public class FileUtils { @Override protected void onCancelled() { - OnCheckFileWritePermissionListener listener = listenerWeakReference.get(); - if (listener != null) { - listener.onError(); - } + OnCheckFileWritePermissionListener localListener = listener; + listener = null; + localListener.onError(); } @Override protected void onPostExecute(Boolean result) { - OnCheckFileWritePermissionListener listener = listenerWeakReference.get(); - if (listener != null) { - if (result) { - listener.onWritePermissionGranted(); - } else { - listener.onError(); - } + OnCheckFileWritePermissionListener localListener = listener; + listener = null; + if (result) { + localListener.onWritePermissionGranted(); + } else { + localListener.onError(); } } } -- cgit v1.2.1