diff options
Diffstat (limited to 'main/src/cgeo/geocaching/StaticMapsProvider.java')
| -rw-r--r-- | main/src/cgeo/geocaching/StaticMapsProvider.java | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/main/src/cgeo/geocaching/StaticMapsProvider.java b/main/src/cgeo/geocaching/StaticMapsProvider.java index eb59bcb..d5cbb13 100644 --- a/main/src/cgeo/geocaching/StaticMapsProvider.java +++ b/main/src/cgeo/geocaching/StaticMapsProvider.java @@ -11,16 +11,12 @@ import cgeo.geocaching.utils.FileUtils; import cgeo.geocaching.utils.Log; import ch.boye.httpclientandroidlib.HttpResponse; - import org.apache.commons.lang3.StringUtils; +import org.eclipse.jdt.annotation.NonNull; -import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Point; -import android.util.DisplayMetrics; -import android.view.Display; -import android.view.WindowManager; import java.io.File; import java.util.concurrent.TimeUnit; @@ -41,6 +37,11 @@ public final class StaticMapsProvider { /** ThreadPool restricting this to 1 Thread. **/ private static final BlockingThreadPool POOL = new BlockingThreadPool(1, Thread.MIN_PRIORITY); + /** + * max size in free API version: https://developers.google.com/maps/documentation/staticmaps/#Imagesizes + */ + private static final int GOOGLE_MAPS_MAX_SIZE = 640; + private StaticMapsProvider() { // utility class } @@ -61,7 +62,7 @@ public final class StaticMapsProvider { final Parameters params = new Parameters( "center", latlonMap, "zoom", String.valueOf(zoom), - "size", String.valueOf(width) + 'x' + String.valueOf(height), + "size", String.valueOf(limitSize(width)) + 'x' + String.valueOf(limitSize(height)), "maptype", mapType, "markers", "icon:" + markerUrl + '|' + shadow + latlonMap, "sensor", "false"); @@ -88,6 +89,10 @@ public final class StaticMapsProvider { } } + private static int limitSize(final int imageSize) { + return Math.min(imageSize, GOOGLE_MAPS_MAX_SIZE); + } + public static void downloadMaps(final Geocache cache) { if ((!Settings.isStoreOfflineMaps() && !Settings.isStoreOfflineWpMaps()) || StringUtils.isBlank(cache.getGeocode())) { return; @@ -172,13 +177,10 @@ public final class StaticMapsProvider { public static void storeCachePreviewMap(final Geocache cache) { final String latlonMap = cache.getCoords().format(Format.LAT_LON_DECDEGREE_COMMA); - final Display display = ((WindowManager) cgeoapplication.getInstance().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); - DisplayMetrics metrics = new DisplayMetrics(); - display.getMetrics(metrics); - final int width = metrics.widthPixels; - final int height = (int) (110 * metrics.density); + final Point displaySize = Compatibility.getDisplaySize(); + final int minSize = Math.min(displaySize.x, displaySize.y); final String markerUrl = MARKERS_URL + "my_location_mdpi.png"; - downloadMap(cache.getGeocode(), 15, ROADMAP, markerUrl, PREFIX_PREVIEW, "shadow:false|", latlonMap, width, height, null); + downloadMap(cache.getGeocode(), 15, ROADMAP, markerUrl, PREFIX_PREVIEW, "shadow:false|", latlonMap, minSize, minSize, null); } private static int guessMaxDisplaySide() { @@ -243,11 +245,8 @@ public final class StaticMapsProvider { * @param cache * @return <code>true</code> if at least one map file exists; <code>false</code> otherwise */ - public static boolean hasStaticMap(final Geocache cache) { - if (cache == null) { - return false; - } - final String geocode = cache.getGeocode(); + public static boolean hasStaticMap(@NonNull final Geocache cache) { + final String geocode = cache.getGeocode(); if (StringUtils.isBlank(geocode)) { return false; } |
