diff options
author | Łukasz Paczos <lukas.paczos@gmail.com> | 2018-09-24 16:04:07 +0200 |
---|---|---|
committer | Łukasz Paczos <lukas.paczos@gmail.com> | 2018-09-24 16:04:07 +0200 |
commit | d361e724edc30cfccfc9d2ae9b67f274329eb262 (patch) | |
tree | f5d2709d2906242e5328f806d3d93ab23591731e /platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java | |
parent | 13e707da5e4a5bc8611f6d54394ad6390bd00c2d (diff) | |
download | qtlocation-mapboxgl-d361e724edc30cfccfc9d2ae9b67f274329eb262.tar.gz |
[android] check external database's read/write permissions asynchronouslyupstream/12692-android-offline-db-merge
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java')
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java | 39 |
1 files changed, 26 insertions, 13 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 fbbdf087b0..cb9260b3cd 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 @@ -15,6 +15,7 @@ import com.mapbox.mapboxsdk.geometry.LatLngBounds; import com.mapbox.mapboxsdk.log.Logger; import com.mapbox.mapboxsdk.net.ConnectivityReceiver; import com.mapbox.mapboxsdk.storage.FileSource; +import com.mapbox.mapboxsdk.utils.FileUtils; import java.io.File; import java.io.FileInputStream; @@ -235,20 +236,32 @@ public class OfflineManager { */ public void mergeOfflineRegions(@NonNull String path, @NonNull final MergeOfflineRegionsCallback callback) { File src = new File(path); - if (!src.canRead()) { - // path not readable, abort - callback.onError("Secondary database needs to be located in a readable path."); - return; - } + new FileUtils.CheckFileReadPermissionTask(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); + } - if (src.canWrite()) { - // path writable, merge and update schema in place if necessary - mergeOfflineDatabaseFiles(src, callback, false); - } else { - // 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(this, callback).execute(src, dst); - } + @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."); + } + }).execute(src); } private static final class CopyTempDatabaseFileTask extends AsyncTask<Object, Void, Object> { |