diff options
author | tobrun <tobrun.van.nuland@gmail.com> | 2019-07-31 13:02:45 +0300 |
---|---|---|
committer | tobrun <tobrun.van.nuland@gmail.com> | 2019-07-31 13:02:45 +0300 |
commit | 2901b09c5d6b8adbe58b697353ae5d09734331b3 (patch) | |
tree | 20e191a974010b0ec7b22ad030d563bfa6f2f439 | |
parent | f86f0226dd7f87fef97378cff225754ae5d69c90 (diff) |
test
4 files changed, 137 insertions, 34 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 5bd0dd4bf..c6b65d3b5 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 @@ -166,7 +166,7 @@ public class OfflineManager { * @param callback the callback to be invoked */ public void listOfflineRegions(@NonNull final ListOfflineRegionsCallback callback) { - fileSource.activate(); + // fileSource.activate(); listOfflineRegions(fileSource, new ListOfflineRegionsCallback() { @Override @@ -174,7 +174,7 @@ public class OfflineManager { handler.post(new Runnable() { @Override public void run() { - fileSource.deactivate(); + //fileSource.deactivate(); callback.onList(offlineRegions); } }); @@ -185,7 +185,7 @@ public class OfflineManager { handler.post(new Runnable() { @Override public void run() { - fileSource.deactivate(); + //fileSource.deactivate(); callback.onError(error); } }); @@ -276,14 +276,14 @@ public class OfflineManager { * @param callback the callback to be invoked when the database was reset or when the operation erred. */ public void resetDatabase(@Nullable final FileSourceCallback callback) { - fileSource.activate(); + //fileSource.activate(); nativeResetDatabase(new FileSourceCallback() { @Override public void onSuccess() { handler.post(new Runnable() { @Override public void run() { - fileSource.deactivate(); + //fileSource.deactivate(); if (callback != null) { callback.onSuccess(); } @@ -296,7 +296,7 @@ public class OfflineManager { handler.post(new Runnable() { @Override public void run() { - fileSource.deactivate(); + //fileSource.deactivate(); if (callback != null) { callback.onError(message); } @@ -322,14 +322,14 @@ public class OfflineManager { * @param callback the callback to be invoked when the ambient cache was invalidated or when the operation erred. */ public void invalidateAmbientCache(@Nullable final FileSourceCallback callback) { - fileSource.activate(); + // fileSource.activate(); nativeInvalidateAmbientCache(new FileSourceCallback() { @Override public void onSuccess() { handler.post(new Runnable() { @Override public void run() { - fileSource.deactivate(); + // fileSource.deactivate(); if (callback != null) { callback.onSuccess(); } @@ -342,7 +342,7 @@ public class OfflineManager { handler.post(new Runnable() { @Override public void run() { - fileSource.deactivate(); + // fileSource.deactivate(); if (callback != null) { callback.onError(message); } @@ -367,14 +367,14 @@ public class OfflineManager { * @param callback the callback to be invoked when the ambient cache was cleared or when the operation erred. */ public void clearAmbientCache(@Nullable final FileSourceCallback callback) { - fileSource.activate(); + ///fileSource.activate(); nativeClearAmbientCache(new FileSourceCallback() { @Override public void onSuccess() { handler.post(new Runnable() { @Override public void run() { - fileSource.deactivate(); + //fileSource.deactivate(); if (callback != null) { callback.onSuccess(); } @@ -387,7 +387,7 @@ public class OfflineManager { handler.post(new Runnable() { @Override public void run() { - fileSource.deactivate(); + // fileSource.deactivate(); if (callback != null) { callback.onError(message); } @@ -427,14 +427,14 @@ public class OfflineManager { * @param callback the callback to be invoked when the the maximum size has been set or when the operation erred. */ public void setMaximumAmbientCacheSize(long size, @Nullable final FileSourceCallback callback) { - fileSource.activate(); + //fileSource.activate(); nativeSetMaximumAmbientCacheSize(size, new FileSourceCallback() { @Override public void onSuccess() { handler.post(new Runnable() { @Override public void run() { - fileSource.deactivate(); + // fileSource.deactivate(); if (callback != null) { callback.onSuccess(); } @@ -444,11 +444,11 @@ public class OfflineManager { @Override public void onError(@NonNull final String message) { - fileSource.activate(); + // fileSource.activate(); handler.post(new Runnable() { @Override public void run() { - fileSource.deactivate(); + // fileSource.deactivate(); if (callback != null) { callback.onError(message); } @@ -504,7 +504,7 @@ public class OfflineManager { private void mergeOfflineDatabaseFiles(@NonNull final File file, @NonNull final MergeOfflineRegionsCallback callback, final boolean isTemporaryFile) { - fileSource.activate(); + //fileSource.activate(); mergeOfflineRegions(fileSource, file.getAbsolutePath(), new MergeOfflineRegionsCallback() { @Override public void onMerge(final OfflineRegion[] offlineRegions) { @@ -514,7 +514,7 @@ public class OfflineManager { handler.post(new Runnable() { @Override public void run() { - fileSource.deactivate(); + // fileSource.deactivate(); callback.onMerge(offlineRegions); } }); @@ -528,7 +528,7 @@ public class OfflineManager { handler.post(new Runnable() { @Override public void run() { - fileSource.deactivate(); + // fileSource.deactivate(); callback.onError(error); } }); @@ -563,7 +563,7 @@ public class OfflineManager { } ConnectivityReceiver.instance(context).activate(); - FileSource.getInstance(context).activate(); + //FileSource.getInstance(context).activate(); createOfflineRegion(fileSource, definition, metadata, new CreateOfflineRegionCallback() { @Override @@ -572,7 +572,7 @@ public class OfflineManager { @Override public void run() { ConnectivityReceiver.instance(context).deactivate(); - FileSource.getInstance(context).deactivate(); + // FileSource.getInstance(context).deactivate(); callback.onCreate(offlineRegion); } }); @@ -584,7 +584,7 @@ public class OfflineManager { @Override public void run() { ConnectivityReceiver.instance(context).deactivate(); - FileSource.getInstance(context).deactivate(); + //FileSource.getInstance(context).deactivate(); callback.onError(error); } }); 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 f13128da6..1da828e1b 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 @@ -207,7 +207,7 @@ public class OfflineRegion { // Keep track of the region state private int state = STATE_INACTIVE; - private boolean deliverInactiveMessages = false; + private boolean deliverInactiveMessages = true; /** * Gets whether or not the `OfflineRegionObserver` will continue to deliver messages even if @@ -336,9 +336,9 @@ public class OfflineRegion { if (state == STATE_ACTIVE) { ConnectivityReceiver.instance(context).activate(); - fileSource.activate(); + //fileSource.activate(); } else { - fileSource.deactivate(); + //fileSource.deactivate(); ConnectivityReceiver.instance(context).deactivate(); } @@ -354,14 +354,12 @@ public class OfflineRegion { * @param callback the callback to invoked. */ public void getStatus(@NonNull final OfflineRegionStatusCallback callback) { - fileSource.activate(); getOfflineRegionStatus(new OfflineRegionStatusCallback() { @Override public void onStatus(final OfflineRegionStatus status) { handler.post(new Runnable() { @Override public void run() { - fileSource.deactivate(); callback.onStatus(status); } }); @@ -372,7 +370,6 @@ public class OfflineRegion { handler.post(new Runnable() { @Override public void run() { - fileSource.deactivate(); callback.onError(error); } }); @@ -400,14 +397,14 @@ public class OfflineRegion { public void delete(@NonNull final OfflineRegionDeleteCallback callback) { if (!isDeleted) { isDeleted = true; - fileSource.activate(); + //fileSource.activate(); deleteOfflineRegion(new OfflineRegionDeleteCallback() { @Override public void onDelete() { handler.post(new Runnable() { @Override public void run() { - fileSource.deactivate(); + // fileSource.deactivate(); callback.onDelete(); OfflineRegion.this.finalize(); } @@ -420,7 +417,7 @@ public class OfflineRegion { @Override public void run() { isDeleted = false; - fileSource.deactivate(); + //fileSource.deactivate(); callback.onError(error); } }); @@ -438,7 +435,7 @@ public class OfflineRegion { * @param callback the callback to be invoked */ public void invalidate(@Nullable final OfflineRegionInvalidateCallback callback) { - fileSource.activate(); + // fileSource.activate(); invalidateOfflineRegion(new OfflineRegionInvalidateCallback() { @Override @@ -446,7 +443,7 @@ public class OfflineRegion { handler.post(new Runnable() { @Override public void run() { - fileSource.deactivate(); + // fileSource.deactivate(); if (callback != null) { callback.onInvalidate(); } @@ -459,7 +456,7 @@ public class OfflineRegion { handler.post(new Runnable() { @Override public void run() { - fileSource.deactivate(); + // fileSource.deactivate(); if (callback != null) { callback.onError(message); } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/offline/OfflineRegionTest.kt b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/offline/OfflineRegionTest.kt new file mode 100644 index 000000000..fabedcd29 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/offline/OfflineRegionTest.kt @@ -0,0 +1,89 @@ +package com.mapbox.mapboxsdk.testapp.offline + +import android.content.Context +import android.os.Handler +import android.support.test.rule.ActivityTestRule +import android.support.test.runner.AndroidJUnit4 +import com.mapbox.geojson.Geometry +import com.mapbox.geojson.Point +import com.mapbox.mapboxsdk.log.Logger +import com.mapbox.mapboxsdk.maps.Style +import com.mapbox.mapboxsdk.offline.* +import com.mapbox.mapboxsdk.testapp.activity.FeatureOverviewActivity +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import java.util.concurrent.CountDownLatch + +@RunWith(AndroidJUnit4::class) +class OfflineRegionTest { + + @Rule + @JvmField + var rule = ActivityTestRule(FeatureOverviewActivity::class.java) + + private val context: Context by lazy { rule.activity } + + private val latch: CountDownLatch = CountDownLatch(1) + + private lateinit var handler: Handler + + @Test + fun testRegionDownload() { + rule.activity.runOnUiThread { + handler = Handler() + val definition = OfflineGeometryRegionDefinition( + Style.MAPBOX_STREETS, + Point.fromLngLat(0.0, 0.0) as Geometry, + 5.0, + 6.0, + 1.0f + ) + OfflineManager.getInstance(context).createOfflineRegion(definition, byteArrayOf(), object : OfflineManager.CreateOfflineRegionCallback { + override fun onCreate(offlineRegion: OfflineRegion) { + offlineRegion.setObserver(object : OfflineRegion.OfflineRegionObserver { + override fun onStatusChanged(status: OfflineRegionStatus) { + if (status.isComplete) { + Logger.e(TAG, "Download is complete") + latch.countDown() + } else { + Logger.i(TAG, "OnStatusChanged: ${status.completedResourceCount} / ${status.requiredResourceCount}") + } + } + + override fun onError(error: OfflineRegionError) { + Logger.e(TAG, error.message) + } + + override fun mapboxTileCountLimitExceeded(limit: Long) { + Logger.e(TAG, "Exceeded limit tile count: $limit") + } + }) + offlineRegion.setDownloadState(OfflineRegion.STATE_ACTIVE) + toggle(offlineRegion) + } + + override fun onError(error: String) { + Logger.e(TAG, "Exceeded limit tile count: $error") + } + }) + } + latch.await() + } + + private fun toggle(offlineRegion: OfflineRegion) { + handler.postDelayed({ + Logger.e(TAG, "Pausing download!") + offlineRegion.setDownloadState(OfflineRegion.STATE_INACTIVE) + handler.postDelayed({ + Logger.e(TAG, "Restarting download!") + offlineRegion.setDownloadState(OfflineRegion.STATE_ACTIVE) + toggle(offlineRegion) + }, 5000) + }, 5000) + } + + companion object { + const val TAG = "OfflineTest" + } +}
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/DownloadRegionActivity.kt b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/DownloadRegionActivity.kt index 1febe0bfd..9d8e32d6d 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/DownloadRegionActivity.kt +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/DownloadRegionActivity.kt @@ -11,14 +11,18 @@ import android.widget.Toast import com.mapbox.mapboxsdk.constants.MapboxConstants import com.mapbox.mapboxsdk.geometry.LatLng import com.mapbox.mapboxsdk.geometry.LatLngBounds +import com.mapbox.mapboxsdk.log.Logger import com.mapbox.mapboxsdk.maps.Style import com.mapbox.mapboxsdk.offline.* +import com.mapbox.mapboxsdk.storage.FileSource import com.mapbox.mapboxsdk.testapp.R import java.util.* import java.util.concurrent.TimeUnit import kotlinx.android.synthetic.main.activity_region_download.* import timber.log.Timber +private const val PAUSE_THRESHOLD = 66_000L + /** * Example showcasing how to download an offline region headless, allows to test pausing and resuming the download. */ @@ -34,11 +38,14 @@ class DownloadRegionActivity : AppCompatActivity(), OfflineRegion.OfflineRegionO private var downloading = false private var previousCompletedResourceCount: Long = 0 private var previousUpdateTimestamp: Long = 0 + private var once = true override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_region_download) + FileSource.getInstance(this).activate() + offlineManager = OfflineManager.getInstance(this) offlineManager.setOfflineMapboxTileCountLimit(Long.MAX_VALUE) initUi() @@ -97,6 +104,7 @@ class DownloadRegionActivity : AppCompatActivity(), OfflineRegion.OfflineRegionO } private fun startDownload(region: OfflineRegion) { + logMessage("startDownload") downloading = true fab.setImageResource(R.drawable.ic_pause_black_24dp) logMessage("Downloading...") @@ -117,10 +125,12 @@ class DownloadRegionActivity : AppCompatActivity(), OfflineRegion.OfflineRegionO } private fun pauseDownload(region: OfflineRegion) { + logMessage("pauseDownload") downloading = false fab.setImageResource(R.drawable.ic_play_arrow_black_24dp) handler.removeCallbacksAndMessages(null) region.setDownloadState(OfflineRegion.STATE_INACTIVE) + handler.postDelayed({ startDownload(region) }, 3000) "Paused".let { logMessage(it) download_status.text = it @@ -149,6 +159,13 @@ class DownloadRegionActivity : AppCompatActivity(), OfflineRegion.OfflineRegionO ) { logMessage("FAILURE! Completed > required") } + + if (previousCompletedResourceCount < PAUSE_THRESHOLD && status.completedResourceCount >= PAUSE_THRESHOLD) { + if (once) { + once = false + offlineRegion?.let { pauseDownload(it) } + } + } } previousCompletedResourceCount = status.completedResourceCount |