summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegion.java75
1 files changed, 68 insertions, 7 deletions
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 863219854b..2217850a2e 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
@@ -7,7 +7,6 @@ import android.support.annotation.IntDef;
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;
import com.mapbox.mapboxsdk.net.ConnectivityReceiver;
@@ -148,6 +147,25 @@ public class OfflineRegion {
}
/**
+ * This callback receives an asynchronous response containing a notification when
+ * an offline region has been invalidated, or a {@link String} error message otherwise.
+ */
+ @Keep
+ public interface OfflineRegionInvalidateCallback {
+ /**
+ * Receives the invalidate notification
+ */
+ void onInvalidate();
+
+ /**
+ * Receives the error message
+ *
+ * @param error the error message
+ */
+ void onError(String error);
+ }
+
+ /**
* This callback receives an asynchronous response containing the newly update
* OfflineMetadata in the database, or an error message otherwise.
*/
@@ -337,14 +355,14 @@ public class OfflineRegion {
* @param callback the callback to invoked.
*/
public void getStatus(@NonNull final OfflineRegionStatusCallback callback) {
- FileSource.getInstance(Mapbox.getApplicationContext()).activate();
+ fileSource.activate();
getOfflineRegionStatus(new OfflineRegionStatusCallback() {
@Override
public void onStatus(final OfflineRegionStatus status) {
handler.post(new Runnable() {
@Override
public void run() {
- FileSource.getInstance(Mapbox.getApplicationContext()).deactivate();
+ fileSource.deactivate();
callback.onStatus(status);
}
});
@@ -355,7 +373,7 @@ public class OfflineRegion {
handler.post(new Runnable() {
@Override
public void run() {
- FileSource.getInstance(Mapbox.getApplicationContext()).deactivate();
+ fileSource.deactivate();
callback.onError(error);
}
});
@@ -383,14 +401,14 @@ public class OfflineRegion {
public void delete(@NonNull final OfflineRegionDeleteCallback callback) {
if (!isDeleted) {
isDeleted = true;
- FileSource.getInstance(Mapbox.getApplicationContext()).activate();
+ fileSource.activate();
deleteOfflineRegion(new OfflineRegionDeleteCallback() {
@Override
public void onDelete() {
handler.post(new Runnable() {
@Override
public void run() {
- FileSource.getInstance(Mapbox.getApplicationContext()).deactivate();
+ fileSource.deactivate();
callback.onDelete();
OfflineRegion.this.finalize();
}
@@ -403,7 +421,7 @@ public class OfflineRegion {
@Override
public void run() {
isDeleted = false;
- FileSource.getInstance(Mapbox.getApplicationContext()).deactivate();
+ fileSource.deactivate();
callback.onError(error);
}
});
@@ -413,6 +431,46 @@ public class OfflineRegion {
}
/**
+ * Invalidate all the tiles from an offline region forcing Mapbox GL to revalidate
+ * the tiles with the server before using. This is more efficient than deleting the
+ * offline region and downloading it again because if the data on the cache matches
+ * the server, no new data gets transmitted.
+ *
+ * @param callback the callback to be invoked
+ */
+ public void invalidate(@Nullable final OfflineRegionInvalidateCallback callback) {
+ fileSource.activate();
+ invalidateOfflineRegion(new OfflineRegionInvalidateCallback() {
+
+ @Override
+ public void onInvalidate() {
+ handler.post(new Runnable() {
+ @Override
+ public void run() {
+ fileSource.deactivate();
+ if (callback != null) {
+ callback.onInvalidate();
+ }
+ }
+ });
+ }
+
+ @Override
+ public void onError(@NonNull final String message) {
+ handler.post(new Runnable() {
+ @Override
+ public void run() {
+ fileSource.deactivate();
+ if (callback != null) {
+ callback.onError(message);
+ }
+ }
+ });
+ }
+ });
+ }
+
+ /**
* Update an offline region metadata from the database.
* <p>
* When the operation is complete or encounters an error, the given callback will be
@@ -469,4 +527,7 @@ public class OfflineRegion {
@Keep
private native void updateOfflineRegionMetadata(byte[] metadata, OfflineRegionUpdateMetadataCallback callback);
+ @Keep
+ private native void invalidateOfflineRegion(OfflineRegionInvalidateCallback callback);
+
}