diff --git a/Android/AndroidManifest.xml b/Android/AndroidManifest.xml
index f23c6715ce..64ac741a0f 100644
--- a/Android/AndroidManifest.xml
+++ b/Android/AndroidManifest.xml
@@ -59,7 +59,7 @@
+ android:value="AddYourOwnKeyFromGoogleCloudPlatformHere"/>
@@ -173,4 +173,4 @@
-
\ No newline at end of file
+
diff --git a/Android/build.gradle b/Android/build.gradle
index 4e99aba0e6..afadb26f90 100644
--- a/Android/build.gradle
+++ b/Android/build.gradle
@@ -49,10 +49,10 @@ dependencies {
//Charts and graph library
compile 'com.github.lecho:hellocharts-library:1.5.5@aar'
- //Leak canary (https://github.com/square/leakcanary)
+ /*Leak canary (https://github.com/square/leakcanary)
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'
- testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'
+ testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2' */
}
def versionPrefix = "Tower-v"
diff --git a/Android/res/values/strings.xml b/Android/res/values/strings.xml
index 0c6b21fb68..97c8635e3c 100644
--- a/Android/res/values/strings.xml
+++ b/Android/res/values/strings.xml
@@ -448,9 +448,12 @@
Mapbox Tile Provider
Download Offline Map
Click to cache map for use while offline
+ Mapbox UserId
+ Mapbox user id
+ Enter your mapbox user id
Mapbox Id
Mapbox map id
- Enter your mapbox map id
+ Enter your mapbox styled map id
Mapbox Access Token
Mapbox access token
Enter your mapbox access token
@@ -461,6 +464,7 @@
Pan and zoom to adjust the map area to save
Tap to save the map
Map area saved!
+ Invalid mapbox user id
Invalid mapbox id
Invalid mapbox access token
Invalid mapbox credentials! Please update your mapbox settings.
diff --git a/Android/res/xml/preferences_google_maps.xml b/Android/res/xml/preferences_google_maps.xml
index 5023de7f01..5e0e3d206f 100644
--- a/Android/res/xml/preferences_google_maps.xml
+++ b/Android/res/xml/preferences_google_maps.xml
@@ -76,6 +76,14 @@
android:key="pref_download_menu_option"
android:title="@string/pref_title_download_menu_option"/>
+
+
{
+ if (TextUtils.isEmpty(input)) {
+ Toast.makeText(context, R.string.label_invalid_mapbox_userid, Toast.LENGTH_LONG)
+ .show()
+ } else {
+ //Save the mapbox user id to preferences
+ updateMapboxUserId(input?.toString() ?: "", true)
+
+ //Check if the mapbox access token is set enable the mapbox tile
+ // provider
+ if (isMapboxAccessTokenSet()) {
+ enableTileProvider(tileProvidersPref, MAPBOX_TILE_PROVIDER, true)
+ }
+ else {
+ //Check if the mapbox access token is set
+ accessTokenDialog?.show(fragmentManager,
+ MAPBOX_ACCESS_TOKEN_DIALOG_TAG)
+ }
+ }
+ }
+
MAPBOX_ID_DIALOG_TAG -> {
if (TextUtils.isEmpty(input)) {
Toast.makeText(context, R.string.label_invalid_mapbox_id, Toast.LENGTH_LONG)
@@ -360,6 +399,23 @@ class GoogleMapPrefFragment : MapProviderPreferences(), EditInputDialog.Listener
downloadMenuPref.isChecked = sharedPref.getBoolean(PREF_DOWNLOAD_MENU_OPTION, DEFAULT_DOWNLOAD_MENU_OPTION)
}
+ //Setup mapbox user id
+ val mapboxUserIdPref = findPreference(PREF_MAPBOX_USERID)
+ if(mapboxUserIdPref != null) {
+ val mapboxUserId = sharedPref.getString(PREF_MAPBOX_USERID, null)
+ mapboxUserId?.let { mapboxUserIdPref.summary = mapboxUserId }
+ mapboxUserIdPref.setOnPreferenceChangeListener { preference, newValue ->
+ val newMapboxUserId = newValue.toString()
+ if(TextUtils.isEmpty(newMapboxUserId)){
+ Toast.makeText(context,"invalid_mapbox user id", Toast.LENGTH_LONG)
+ .show()
+ }
+
+ updateMapboxUserId(newMapboxUserId, false)
+ true
+ }
+ }
+
//Setup mapbox map id
val mapboxIdPref = findPreference(PREF_MAPBOX_ID)
if(mapboxIdPref != null) {
@@ -402,6 +458,23 @@ class GoogleMapPrefFragment : MapProviderPreferences(), EditInputDialog.Listener
}
}
+ private fun updateMapboxUserId(id: String, persist: Boolean){
+ val mapboxUserIdPref = findPreference(PREF_MAPBOX_USERID)
+ mapboxUserIdPref?.let {
+ val summary = if (TextUtils.isEmpty(id)) {
+ enableTileProvider(GOOGLE_TILE_PROVIDER, true)
+ getString(R.string.pref_hint_mapbox_Userid)
+ } else {
+ id
+ }
+
+ mapboxUserIdPref.summary = summary
+ }
+
+ if(persist)
+ setMapboxUserId(getContext(), id)
+ }
+
private fun updateMapboxId(id: String, persist: Boolean){
val mapboxIdPref = findPreference(PREF_MAPBOX_ID)
mapboxIdPref?.let {
diff --git a/Android/src/org/droidplanner/android/maps/providers/google_map/tiles/mapbox/MapboxTileProvider.java b/Android/src/org/droidplanner/android/maps/providers/google_map/tiles/mapbox/MapboxTileProvider.java
index 2eeaf0c61e..3d13fe1368 100644
--- a/Android/src/org/droidplanner/android/maps/providers/google_map/tiles/mapbox/MapboxTileProvider.java
+++ b/Android/src/org/droidplanner/android/maps/providers/google_map/tiles/mapbox/MapboxTileProvider.java
@@ -14,12 +14,14 @@ public class MapboxTileProvider extends UrlTileProvider {
private final static String TAG = MapboxTileProvider.class.getSimpleName();
+ private final String mapboxUserId;
private final String mapboxId;
private final String mapboxAccessToken;
private final int maxZoomLevel;
- public MapboxTileProvider(String mapboxId, String mapboxAccessToken, int maxZoomLevel) {
+ public MapboxTileProvider(String mapboxUserId, String mapboxId, String mapboxAccessToken, int maxZoomLevel) {
super(MapboxUtils.TILE_WIDTH, MapboxUtils.TILE_HEIGHT);
+ this.mapboxUserId = mapboxUserId;
this.mapboxId = mapboxId;
this.mapboxAccessToken = mapboxAccessToken;
this.maxZoomLevel = maxZoomLevel;
@@ -28,7 +30,7 @@ public MapboxTileProvider(String mapboxId, String mapboxAccessToken, int maxZoom
@Override
public URL getTileUrl(int x, int y, int zoom) {
if (zoom <= maxZoomLevel) {
- final String tileUrl = MapboxUtils.getMapTileURL(mapboxId, mapboxAccessToken, zoom, x, y);
+ final String tileUrl = MapboxUtils.getMapTileURL(mapboxUserId, mapboxId, mapboxAccessToken, zoom, x, y);
try {
return new URL(tileUrl);
} catch (MalformedURLException e) {
@@ -45,4 +47,8 @@ public String getMapboxAccessToken() {
public String getMapboxId() {
return mapboxId;
}
+
+ public String getMapboxUserId() {
+ return mapboxUserId;
+ }
}
diff --git a/Android/src/org/droidplanner/android/maps/providers/google_map/tiles/mapbox/MapboxTileProviderManager.java b/Android/src/org/droidplanner/android/maps/providers/google_map/tiles/mapbox/MapboxTileProviderManager.java
index a0e3dd245f..be3950ee3e 100644
--- a/Android/src/org/droidplanner/android/maps/providers/google_map/tiles/mapbox/MapboxTileProviderManager.java
+++ b/Android/src/org/droidplanner/android/maps/providers/google_map/tiles/mapbox/MapboxTileProviderManager.java
@@ -37,18 +37,24 @@ public class MapboxTileProviderManager extends TileProviderManager {
private final Handler handler = new Handler();
private final Context context;
+ private final String mapboxUserId;
private final String mapboxId;
private final String mapboxAccessToken;
- public MapboxTileProviderManager(Context context, String mapboxId, String mapboxAccessToken, int maxZoomLevel) {
- super(new MapboxTileProvider(mapboxId, mapboxAccessToken, maxZoomLevel),
- new OfflineTileProvider(context, mapboxId, mapboxAccessToken, maxZoomLevel));
+ public MapboxTileProviderManager(Context context, String mapboxUserId, String mapboxId, String mapboxAccessToken, int maxZoomLevel) {
+ super(new MapboxTileProvider(mapboxUserId, mapboxId, mapboxAccessToken, maxZoomLevel),
+ new OfflineTileProvider(context, mapboxUserId, mapboxId, mapboxAccessToken, maxZoomLevel));
this.context = context;
+ this.mapboxUserId = mapboxUserId;
this.mapboxId = mapboxId;
this.mapboxAccessToken = mapboxAccessToken;
}
+ public String getMapboxUserId() {
+ return mapboxUserId;
+ }
+
public String getMapboxAccessToken() {
return mapboxAccessToken;
}
@@ -60,15 +66,15 @@ public String getMapboxId() {
@Override
public void downloadMapTiles(MapDownloader mapDownloader, DPMap.VisibleMapArea mapRegion, int
minimumZ, int maximumZ) {
- beginDownloadingMapID(mapDownloader, this.mapboxId, this.mapboxAccessToken, mapRegion, minimumZ, maximumZ);
+ beginDownloadingMapID(mapDownloader, this.mapboxUserId, this.mapboxId, this.mapboxAccessToken, mapRegion, minimumZ, maximumZ);
}
- private void beginDownloadingMapID(final MapDownloader mapDownloader, final String mapId, final String accessToken, DPMap.VisibleMapArea mapRegion, int
+ private void beginDownloadingMapID(final MapDownloader mapDownloader, final String userId, final String mapId, final String accessToken, DPMap.VisibleMapArea mapRegion, int
minimumZ, int maximumZ) {
- beginDownloadingMapID(mapDownloader, mapId, accessToken, mapRegion, minimumZ, maximumZ, true, true);
+ beginDownloadingMapID(mapDownloader, userId, mapId, accessToken, mapRegion, minimumZ, maximumZ, true, true);
}
- private void beginDownloadingMapID(final MapDownloader mapDownloader, final String mapId, final String accessToken, DPMap.VisibleMapArea mapRegion, int
+ private void beginDownloadingMapID(final MapDownloader mapDownloader, final String userId, final String mapId, final String accessToken, DPMap.VisibleMapArea mapRegion, int
minimumZ, int maximumZ, boolean includeMetadata,
boolean includeMarkers) {
@@ -76,11 +82,11 @@ private void beginDownloadingMapID(final MapDownloader mapDownloader, final Stri
String dataName = "features.json"; // Only using API V4 for now
// Include URLs for the metadata and markers json if applicable
- if (includeMetadata) {
+ if (false) {
urls.add(String.format(Locale.US, MapboxUtils.MAPBOX_BASE_URL_V4 + "%s.json?secure&access_token=%s",
mapId, accessToken));
}
- if (includeMarkers) {
+ if (false) {
urls.add(String.format(Locale.US, MapboxUtils.MAPBOX_BASE_URL_V4 + "%s/%s?access_token=%s", mapId,
dataName, accessToken));
}
@@ -117,7 +123,7 @@ private void beginDownloadingMapID(final MapDownloader mapDownloader, final Stri
maxY = Double.valueOf(Math.floor((1.0 - (Math.log(Math.tan(minLat * Math.PI / 180.0) + 1.0 / Math.cos(minLat * Math.PI / 180.0)) / Math.PI)) / 2.0 * tilesPerSide)).intValue();
for (int x = minX; x <= maxX; x++) {
for (int y = minY; y <= maxY; y++) {
- urls.add(MapboxUtils.getMapTileURL(mapId, accessToken, zoom, x, y));
+ urls.add(MapboxUtils.getMapTileURL(userId, mapId, accessToken, zoom, x, y));
}
}
}
diff --git a/Android/src/org/droidplanner/android/maps/providers/google_map/tiles/mapbox/MapboxUtils.java b/Android/src/org/droidplanner/android/maps/providers/google_map/tiles/mapbox/MapboxUtils.java
index cbe2d7d192..3459930d4d 100644
--- a/Android/src/org/droidplanner/android/maps/providers/google_map/tiles/mapbox/MapboxUtils.java
+++ b/Android/src/org/droidplanner/android/maps/providers/google_map/tiles/mapbox/MapboxUtils.java
@@ -25,18 +25,18 @@ private MapboxUtils(){}
public static final String MAPBOX_BASE_URL_V4 = "https://a.tiles.mapbox.com/v4/";
- public static String getMapTileURL(String mapID, String accessToken, int zoom, int x, int y) {
- return String.format(Locale.US, "https://a.tiles.mapbox.com/v4/%s/%d/%d/%d%s.%s?access_token=%s",
- mapID, zoom, x, y, "@2x", "png", accessToken);
+ public static String getMapTileURL(String userId, String mapID, String accessToken, int zoom, int x, int y) {
+ return String.format(Locale.US, "https://api.mapbox.com/styles/v1/%s/%s/tiles/%d/%d/%d%s?access_token=%s",
+ userId, mapID, zoom, x, y, "@2x", accessToken);
}
- public static int fetchReferenceTileUrl(Context context, String mapId, String accessToken){
+ public static int fetchReferenceTileUrl(Context context, String userId, String mapId, String accessToken){
if(!NetworkUtils.isNetworkAvailable(context)){
Timber.d("Network is not available. Aborting reference tile fetching.");
return -1;
}
- final String referenceUrl = getMapTileURL(mapId, accessToken, 0, 0, 0);
+ final String referenceUrl = getMapTileURL(userId, mapId, accessToken, 0, 0, 0);
HttpURLConnection conn = null;
try{
diff --git a/Android/src/org/droidplanner/android/maps/providers/google_map/tiles/mapbox/OfflineTileProvider.java b/Android/src/org/droidplanner/android/maps/providers/google_map/tiles/mapbox/OfflineTileProvider.java
index 31e9ed4ca2..abb9e304a2 100644
--- a/Android/src/org/droidplanner/android/maps/providers/google_map/tiles/mapbox/OfflineTileProvider.java
+++ b/Android/src/org/droidplanner/android/maps/providers/google_map/tiles/mapbox/OfflineTileProvider.java
@@ -15,12 +15,14 @@ public class OfflineTileProvider implements TileProvider {
private static final String TAG = OfflineTileProvider.class.getSimpleName();
private final Context context;
+ private final String mapboxUserId;
private final String mapboxId;
private final String mapboxAccessToken;
private final int maxZoomLevel;
- public OfflineTileProvider(Context context, String mapboxId, String mapboxAccessToken, int maxZoomLevel) {
+ public OfflineTileProvider(Context context, String mapboxUserId, String mapboxId, String mapboxAccessToken, int maxZoomLevel) {
this.context = context;
+ this.mapboxUserId = mapboxUserId;
this.mapboxId = mapboxId;
this.mapboxAccessToken = mapboxAccessToken;
this.maxZoomLevel = maxZoomLevel;
@@ -32,7 +34,7 @@ public Tile getTile(int x, int y, int zoom) {
return TileProvider.NO_TILE;
}
- final String tileUri = MapboxUtils.getMapTileURL(mapboxId, mapboxAccessToken, zoom, x, y);
+ final String tileUri = MapboxUtils.getMapTileURL(mapboxUserId, mapboxId, mapboxAccessToken, zoom, x, y);
byte[] data = DatabaseState.getOfflineDatabaseHandlerForMapId(context, mapboxId).dataForURL(tileUri);
if (data == null || data.length == 0)
return TileProvider.NO_TILE;