summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonio Zugaldia <antonio@mapbox.com>2016-02-26 11:30:18 -0500
committerAntonio Zugaldia <antonio@mapbox.com>2016-02-26 15:05:55 -0500
commit3ed9f4336ca81b213afb3c132b3fed5a30c76521 (patch)
treeb330fe6fa64b74a9430dbdb01753193058653a76
parentfe7b52e79222f45119b8195841d08e535478c6ef (diff)
downloadqtlocation-mapboxgl-3ed9f4336ca81b213afb3c132b3fed5a30c76521.tar.gz
[android] Use the new camera api instead of hardcoded values
Fixes #4124
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegionMetadata.java23
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/OfflineActivity.java49
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/offline/CustomMetadata.java36
3 files changed, 64 insertions, 44 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegionMetadata.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegionMetadata.java
index bbea4580f8..d4445ca037 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegionMetadata.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegionMetadata.java
@@ -1,11 +1,5 @@
package com.mapbox.mapboxsdk.offline;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-
/**
* Arbitrary binary region metadata. The contents are opaque to the SDK implementation;
* it just stores and retrieves a byte[].
@@ -43,21 +37,4 @@ public class OfflineRegionMetadata {
return "OfflineRegionMetadata{metadata=" + metadata + "}";
}
- /*
- * byte[] utils
- */
-
- public static byte[] serialize(Object obj) throws IOException {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- ObjectOutputStream os = new ObjectOutputStream(out);
- os.writeObject(obj);
- return out.toByteArray();
- }
-
- public static Object deserialize(byte[] data) throws IOException, ClassNotFoundException {
- ByteArrayInputStream in = new ByteArrayInputStream(data);
- ObjectInputStream is = new ObjectInputStream(in);
- return is.readObject();
- }
-
}
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/OfflineActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/OfflineActivity.java
index 64ecc2100e..23a8be54a7 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/OfflineActivity.java
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/OfflineActivity.java
@@ -5,6 +5,7 @@ import android.support.annotation.NonNull;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
+import android.text.TextUtils;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
@@ -12,6 +13,7 @@ import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;
+import com.google.gson.Gson;
import com.mapbox.mapboxsdk.camera.CameraPosition;
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
import com.mapbox.mapboxsdk.constants.Style;
@@ -22,25 +24,23 @@ import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
import com.mapbox.mapboxsdk.offline.OfflineManager;
import com.mapbox.mapboxsdk.offline.OfflineRegion;
+import com.mapbox.mapboxsdk.offline.OfflineRegionMetadata;
import com.mapbox.mapboxsdk.offline.OfflineTilePyramidRegionDefinition;
import com.mapbox.mapboxsdk.offline.OfflineRegionError;
-import com.mapbox.mapboxsdk.offline.OfflineRegionMetadata;
import com.mapbox.mapboxsdk.offline.OfflineRegionStatus;
import com.mapbox.mapboxsdk.testapp.offline.DownloadRegionDialog;
+import com.mapbox.mapboxsdk.testapp.offline.CustomMetadata;
import com.mapbox.mapboxsdk.testapp.offline.ListRegionsDialog;
import com.mapbox.mapboxsdk.utils.ApiAccess;
-import java.io.IOException;
+import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
-import java.util.HashMap;
public class OfflineActivity extends AppCompatActivity
implements DownloadRegionDialog.DownloadRegionDialogListener {
private final static String LOG_TAG = "OfflineActivity";
- private final static String KEY_REGION_NAME = "KEY_REGION_NAME";
-
/*
* UI elements
*/
@@ -195,7 +195,7 @@ public class OfflineActivity extends AppCompatActivity
public void onList(OfflineRegion[] offlineRegions) {
// Check result
if (offlineRegions == null || offlineRegions.length == 0) {
- Log.d(LOG_TAG, "You have no regions yet.");
+ Toast.makeText(OfflineActivity.this, "You have no regions yet.", Toast.LENGTH_SHORT).show();
return;
}
@@ -221,14 +221,15 @@ public class OfflineActivity extends AppCompatActivity
}
private String getRegionName(OfflineRegion offlineRegion) {
- String regionName = "Region " + offlineRegion.getID();
+ String regionName;
try {
- byte[] metadata = offlineRegion.getMetadata().getMetadata();
- HashMap<String, String> data = (HashMap<String, String>) OfflineRegionMetadata.deserialize(metadata);
- regionName = data.get(KEY_REGION_NAME);
- } catch (Exception e) {
+ String json = new String(offlineRegion.getMetadata().getMetadata(), CustomMetadata.CHARSET);
+ CustomMetadata customMetadata = new Gson().fromJson(json, CustomMetadata.class);
+ regionName = customMetadata.getRegionName();
+ } catch (UnsupportedEncodingException e) {
Log.e(LOG_TAG, "Failed to decode metadata: " + e.getMessage());
+ regionName = "Region " + offlineRegion.getID();
}
return regionName;
@@ -242,29 +243,35 @@ public class OfflineActivity extends AppCompatActivity
@Override
public void onDownloadRegionDialogPositiveClick(final String regionName) {
- Log.d(LOG_TAG, "Download started: " + regionName);
+ if (TextUtils.isEmpty(regionName)) {
+ Toast.makeText(OfflineActivity.this, "Region name cannot be empty.", Toast.LENGTH_SHORT).show();
+ return;
+ }
// Start progress bar
+ Log.d(LOG_TAG, "Download started: " + regionName);
startProgress();
// Definition
String styleURL = mMapboxMap.getStyleUrl();
LatLngBounds bounds = mMapboxMap.getProjection().getVisibleRegion().latLngBounds;
- double minZoom = 14; // Switch to dynamic once map refactor is complete
- double maxZoom = 16; // Switch to dynamic once map refactor is complete
+ double minZoom = mMapboxMap.getCameraPosition().zoom;
+ double maxZoom = mMapboxMap.getUiSettings().getMaxZoom();
float pixelRatio = this.getResources().getDisplayMetrics().density;
OfflineTilePyramidRegionDefinition definition = new OfflineTilePyramidRegionDefinition(
styleURL, bounds, minZoom, maxZoom, pixelRatio);
// Sample way of encoding metadata
- OfflineRegionMetadata metadata = null;
+ OfflineRegionMetadata metadata;
try {
- HashMap<String, String> data = new HashMap<>();
- data.put(KEY_REGION_NAME, regionName);
- byte[] dataEncoded = OfflineRegionMetadata.serialize(data);
- metadata = new OfflineRegionMetadata(dataEncoded);
- } catch (IOException e) {
- Log.e(LOG_TAG, "Metadata encoding failed: " + e.getMessage());
+ CustomMetadata customMetadata = new CustomMetadata(regionName);
+ byte[] encoded = new Gson()
+ .toJson(customMetadata, CustomMetadata.class)
+ .getBytes(CustomMetadata.CHARSET);
+ metadata = new OfflineRegionMetadata(encoded);
+ } catch (UnsupportedEncodingException e) {
+ Log.e(LOG_TAG, "Failed to encode metadata: " + e.getMessage());
+ metadata = null;
}
// Create region
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/offline/CustomMetadata.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/offline/CustomMetadata.java
new file mode 100644
index 0000000000..27bdef6312
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/offline/CustomMetadata.java
@@ -0,0 +1,36 @@
+package com.mapbox.mapboxsdk.testapp.offline;
+
+/**
+ * A custom metadata class
+ */
+public class CustomMetadata {
+
+ public final static String CHARSET = "UTF-8";
+
+ /*
+ * Fields
+ */
+
+ private String regionName;
+
+ /*
+ * Constructor
+ */
+
+ public CustomMetadata(String regionName) {
+ this.regionName = regionName;
+ }
+
+ /*
+ * Getters/setters
+ */
+
+ public String getRegionName() {
+ return regionName;
+ }
+
+ public void setRegionName(String regionName) {
+ this.regionName = regionName;
+ }
+
+}