diff options
Diffstat (limited to 'main/src')
| -rw-r--r-- | main/src/cgeo/geocaching/AboutActivity.java | 2 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/CompassActivity.java | 10 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/gc/GCConstants.java | 11 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/gc/GCMap.java | 4 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/gc/GCParser.java | 33 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/export/FieldnoteExport.java | 2 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/maps/CGeoMap.java | 1 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/maps/MapProviderFactory.java | 1 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/network/HtmlImage.java | 3 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/sorting/DistanceComparator.java | 19 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/speech/TextFactory.java | 37 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/ui/CacheListAdapter.java | 69 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/ui/DirectionImage.java | 32 |
13 files changed, 115 insertions, 109 deletions
diff --git a/main/src/cgeo/geocaching/AboutActivity.java b/main/src/cgeo/geocaching/AboutActivity.java index 83f25e9..3164602 100644 --- a/main/src/cgeo/geocaching/AboutActivity.java +++ b/main/src/cgeo/geocaching/AboutActivity.java @@ -71,7 +71,7 @@ public class AboutActivity extends AbstractActivity { * unused here but needed since this method is referenced from XML layout */ public void nutshellmanual(View view) { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.cgeo.org/"))); + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://manual.cgeo.org/"))); } /** diff --git a/main/src/cgeo/geocaching/CompassActivity.java b/main/src/cgeo/geocaching/CompassActivity.java index 7e97e46..d0f980e 100644 --- a/main/src/cgeo/geocaching/CompassActivity.java +++ b/main/src/cgeo/geocaching/CompassActivity.java @@ -13,6 +13,8 @@ import org.apache.commons.lang3.StringUtils; import android.content.Context; import android.content.Intent; +import android.hardware.Sensor; +import android.hardware.SensorManager; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; @@ -43,11 +45,18 @@ public class CompassActivity extends AbstractActivity { private TextView distanceView = null; private TextView headingView = null; private CompassView compassView = null; + private boolean hasMagneticFieldSensor; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState, R.layout.navigate); + final SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); + hasMagneticFieldSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) != null; + if (!hasMagneticFieldSensor) { + Settings.setUseCompass(false); + } + // get parameters Bundle extras = getIntent().getExtras(); if (extras != null) { @@ -104,6 +113,7 @@ public class CompassActivity extends AbstractActivity { @Override public boolean onCreateOptionsMenu(final Menu menu) { getMenuInflater().inflate(R.menu.compass_activity_options, menu); + menu.findItem(R.id.menu_switch_compass_gps).setVisible(hasMagneticFieldSensor); final SubMenu subMenu = menu.findItem(R.id.menu_select_destination).getSubMenu(); if (coordinates.size() > 1) { for (int i = 0; i < coordinates.size(); i++) { diff --git a/main/src/cgeo/geocaching/connector/gc/GCConstants.java b/main/src/cgeo/geocaching/connector/gc/GCConstants.java index d8711cf..c032c34 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConstants.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConstants.java @@ -13,14 +13,15 @@ import java.util.regex.Pattern; public final class GCConstants { static final String GC_URL = "http://www.geocaching.com/"; + static final String GC_TILE_URL = "http://tiles.geocaching.com/"; /** Live Map */ public final static String URL_LIVE_MAP = GC_URL + "map/default.aspx"; /** Live Map pop-up */ - public final static String URL_LIVE_MAP_DETAILS = GC_URL + "map/map.details"; + public final static String URL_LIVE_MAP_DETAILS = GC_TILE_URL + "map.details"; /** Caches in a tile */ - public final static String URL_MAP_INFO = GC_URL + "map/map.info"; + public final static String URL_MAP_INFO = GC_TILE_URL + "map.info"; /** Tile itself */ - public final static String URL_MAP_TILE = GC_URL + "map/map.png"; + public final static String URL_MAP_TILE = GC_TILE_URL + "map.png"; /** * Patterns for parsing the result of a (detailed) search @@ -116,7 +117,9 @@ public final class GCConstants { public final static Pattern PATTERN_SEARCH_TRACKABLES = Pattern.compile("<a id=\"ctl00_ContentBody_dlResults_ctl[0-9]+_uxTravelBugList\" class=\"tblist\" data-tbcount=\"([0-9]+)\" data-id=\"[^\"]*\"[^>]*>(.*)</a>"); /** Second group used */ public final static Pattern PATTERN_SEARCH_TRACKABLESINSIDE = Pattern.compile("(<img src=\"[^\"]+\" alt=\"([^\"]+)\" title=\"[^\"]*\" />[^<]*)"); - public final static Pattern PATTERN_SEARCH_DIRECTION = Pattern.compile("<img id=\"ctl00_ContentBody_dlResults_ctl[0-9]+_uxDistanceAndHeading\" title=\"[^\"]*\" src=\"[^\"]*/seek/CacheDir\\.ashx\\?k=([^\"]+)\"[^>]*>"); + public final static Pattern PATTERN_SEARCH_DIRECTION_DISTANCE = Pattern.compile("<img src=\"/images/icons/compass/([^\\.]+)\\.gif\"[^>]*>[^<]*<br />([^<]+)</span>"); + public final static Pattern PATTERN_SEARCH_DIFFICULTY_TERRAIN = Pattern.compile("<span class=\"small\">([0-5]([\\.,]5)?)/([0-5]([\\.,]5)?)</span><br />"); + public final static Pattern PATTERN_SEARCH_CONTAINER = Pattern.compile("<img src=\"/images/icons/container/([^\\.]+)\\.gif\""); public final static Pattern PATTERN_SEARCH_GEOCODE = Pattern.compile("\\|\\W*(GC[0-9A-Z]+)[^\\|]*\\|"); public final static Pattern PATTERN_SEARCH_ID = Pattern.compile("name=\"CID\"[^v]*value=\"([0-9]+)\""); public final static Pattern PATTERN_SEARCH_FAVORITE = Pattern.compile("<span id=\"ctl00_ContentBody_dlResults_ctl[0-9]+_uxFavoritesValue\" title=\"[^\"]*\" class=\"favorite-rank\">([0-9]+)</span>"); diff --git a/main/src/cgeo/geocaching/connector/gc/GCMap.java b/main/src/cgeo/geocaching/connector/gc/GCMap.java index 5f16e10..49f61ef 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCMap.java +++ b/main/src/cgeo/geocaching/connector/gc/GCMap.java @@ -44,6 +44,7 @@ public class GCMap { try { final Parameters params = new Parameters("i", geocodeList, "_", String.valueOf(System.currentTimeMillis())); + params.add("app", "cgeo"); final String referer = GCConstants.URL_LIVE_MAP_DETAILS; final String data = StringUtils.defaultString(Tile.requestMapInfo(referer, params, referer)); @@ -297,7 +298,8 @@ public class GCMap { "x", String.valueOf(tile.getX()), "y", String.valueOf(tile.getY()), "z", String.valueOf(tile.getZoomlevel()), - "ep", "1"); + "ep", "1", + "app", "cgeo"); if (tokens != null) { params.put("k", tokens[0], "st", tokens[1]); } diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java index ef921de..bc01e10 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCParser.java +++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java @@ -166,9 +166,33 @@ public abstract class GCParser { // cache direction - image if (Settings.getLoadDirImg()) { - cache.setDirectionImg(Network.decode(BaseUtils.getMatch(row, GCConstants.PATTERN_SEARCH_DIRECTION, true, 1, cache.getDirectionImg(), true))); + final String direction = BaseUtils.getMatch(row, GCConstants.PATTERN_SEARCH_DIRECTION_DISTANCE, false, 1, null, false); + final String distance = BaseUtils.getMatch(row, GCConstants.PATTERN_SEARCH_DIRECTION_DISTANCE, false, 2, null, false); + if (direction != null) { + cache.setDirectionImg(direction); + } + if (distance != null) { + cache.setDistance(DistanceParser.parseDistance(distance, Settings.isUseMetricUnits())); + } } + // difficulty/terrain + final MatcherWrapper matcherDT = new MatcherWrapper(GCConstants.PATTERN_SEARCH_DIFFICULTY_TERRAIN, row); + if (matcherDT.find()) { + final Float difficulty = parseStars(matcherDT.group(1)); + if (difficulty != null) { + cache.setDifficulty(difficulty); + } + final Float terrain = parseStars(matcherDT.group(3)); + if (terrain != null) { + cache.setTerrain(terrain); + } + } + + // size + final String container = BaseUtils.getMatch(row, GCConstants.PATTERN_SEARCH_CONTAINER, false, 1, null, false); + cache.setSize(CacheSize.getById(container)); + // cache inventory final MatcherWrapper matcherTbs = new MatcherWrapper(GCConstants.PATTERN_SEARCH_TRACKABLES, row); String inventoryPre = null; @@ -291,7 +315,7 @@ public abstract class GCParser { final Set<Geocache> caches = searchResult.getCachesFromSearchResult(LoadFlags.LOAD_CACHE_OR_DB); for (Geocache cache : caches) { if (cache.getCoords() == null && StringUtils.isNotEmpty(cache.getDirectionImg())) { - DirectionImage.getDrawable(cache.getGeocode(), cache.getDirectionImg()); + DirectionImage.getDrawable(cache.getDirectionImg()); } } } @@ -299,6 +323,11 @@ public abstract class GCParser { return searchResult; } + private static Float parseStars(final String value) { + float floatValue = Float.parseFloat(StringUtils.replaceChars(value, ',', '.')); + return floatValue >= 0.5 && floatValue <= 5.0 ? floatValue : null; + } + static SearchResult parseCache(final String page, final CancellableHandler handler) { final SearchResult searchResult = parseCacheFromText(page, handler); if (searchResult != null && !searchResult.getGeocodes().isEmpty()) { diff --git a/main/src/cgeo/geocaching/export/FieldnoteExport.java b/main/src/cgeo/geocaching/export/FieldnoteExport.java index 1165a14..a42a48a 100644 --- a/main/src/cgeo/geocaching/export/FieldnoteExport.java +++ b/main/src/cgeo/geocaching/export/FieldnoteExport.java @@ -165,8 +165,8 @@ class FieldnoteExport extends AbstractExport { Log.e("FieldnoteExport.ExportTask export", e); return false; } finally { - IOUtils.closeQuietly(buffer); IOUtils.closeQuietly(fileWriter); + IOUtils.closeQuietly(buffer); } if (upload) { diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java index 33dcfd4..89d1cdc 100644 --- a/main/src/cgeo/geocaching/maps/CGeoMap.java +++ b/main/src/cgeo/geocaching/maps/CGeoMap.java @@ -525,6 +525,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto @Override public boolean onCreateOptionsMenu(Menu menu) { // menu inflation happens in Google/Mapsforge specific classes + super.onCreateOptionsMenu(menu); MapProviderFactory.addMapviewMenuItems(menu); diff --git a/main/src/cgeo/geocaching/maps/MapProviderFactory.java b/main/src/cgeo/geocaching/maps/MapProviderFactory.java index d1b5c3b..5ce8ab6 100644 --- a/main/src/cgeo/geocaching/maps/MapProviderFactory.java +++ b/main/src/cgeo/geocaching/maps/MapProviderFactory.java @@ -54,6 +54,7 @@ public class MapProviderFactory { final int id = mapSource.getNumericalId(); parentMenu.add(R.id.menu_group_map_sources, id, i, mapSource.getName()).setCheckable(true).setChecked(id == currentSource); } + parentMenu.setGroupCheckable(R.id.menu_group_map_sources, true, true); } public static MapSource getMapSource(int id) { diff --git a/main/src/cgeo/geocaching/network/HtmlImage.java b/main/src/cgeo/geocaching/network/HtmlImage.java index 15ea235..d5b610c 100644 --- a/main/src/cgeo/geocaching/network/HtmlImage.java +++ b/main/src/cgeo/geocaching/network/HtmlImage.java @@ -45,6 +45,7 @@ public class HtmlImage implements Html.ImageGetter { "trendcounter.com", "hit-counter-download.com" }; + public static final String SHARED = "shared"; final private String geocode; /** @@ -82,7 +83,7 @@ public class HtmlImage implements Html.ImageGetter { } final boolean shared = url.contains("/images/icons/icon_"); - final String pseudoGeocode = shared ? "shared" : geocode; + final String pseudoGeocode = shared ? SHARED : geocode; Bitmap imagePre = loadImageFromStorage(url, pseudoGeocode, shared); diff --git a/main/src/cgeo/geocaching/sorting/DistanceComparator.java b/main/src/cgeo/geocaching/sorting/DistanceComparator.java index 7b0afbb..731e356 100644 --- a/main/src/cgeo/geocaching/sorting/DistanceComparator.java +++ b/main/src/cgeo/geocaching/sorting/DistanceComparator.java @@ -27,13 +27,10 @@ public class DistanceComparator extends AbstractCacheComparator { if (cachedDistances) { return; } - for (Geocache cache : list) { + for (final Geocache cache : list) { if (cache.getCoords() != null) { cache.setDistance(coords.distanceTo(cache.getCoords())); } - else { - cache.setDistance(null); - } } cachedDistances = true; } @@ -46,16 +43,12 @@ public class DistanceComparator extends AbstractCacheComparator { @Override protected int compareCaches(final Geocache cache1, final Geocache cache2) { calculateAllDistances(); - if (cache1.getCoords() == null && cache2.getCoords() == null) { - return 0; - } - if (cache1.getCoords() == null) { - return 1; - } - if (cache2.getCoords() == null) { - return -1; + final Float distance1 = cache1.getDistance(); + final Float distance2 = cache2.getDistance(); + if (distance1 == null) { + return distance2 == null ? 0 : 1; } - return Float.compare(cache1.getDistance(), cache2.getDistance()); + return distance2 == null ? -1 : Float.compare(distance1, distance2); } } diff --git a/main/src/cgeo/geocaching/speech/TextFactory.java b/main/src/cgeo/geocaching/speech/TextFactory.java index 6b25147..0e13564 100644 --- a/main/src/cgeo/geocaching/speech/TextFactory.java +++ b/main/src/cgeo/geocaching/speech/TextFactory.java @@ -1,8 +1,10 @@ package cgeo.geocaching.speech; import cgeo.geocaching.R; +import cgeo.geocaching.Settings; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.geopoint.Geopoint; +import cgeo.geocaching.geopoint.IConversion; import cgeo.geocaching.utils.AngleUtils; import java.util.Locale; @@ -21,18 +23,35 @@ public class TextFactory { private static String getDistance(Geopoint position, Geopoint target) { float kilometers = position.distanceTo(target); - if (kilometers >= 5.0) { - return getString(R.string.tts_kilometers, String.valueOf(Math.round(kilometers))); + + if (Settings.isUseMetricUnits()) { + if (kilometers >= 5.0) { + return getString(R.string.tts_kilometers, String.valueOf(Math.round(kilometers))); + } + if (kilometers >= 1.0) { + String digits = String.format(Locale.getDefault(), "%.1f", kilometers); + return getString(R.string.tts_kilometers, digits); + } + int meters = (int) (kilometers * 1000.0); + if (meters > 50) { + return getString(R.string.tts_meters, String.valueOf(Math.round(meters / 10.0) * 10)); + } + return getString(R.string.tts_meters, String.valueOf(meters)); + } + + float miles = kilometers / IConversion.MILES_TO_KILOMETER; + if (miles >= 3.0) { + return getString(R.string.tts_miles, String.valueOf(Math.round(miles))); } - if (kilometers >= 1.0) { - String digits = String.format(Locale.getDefault(), "%.1f", kilometers); - return getString(R.string.tts_kilometers, digits); + if (miles >= 0.2) { // approx 1000 ft + String digits = String.format(Locale.getDefault(), "%.1f", miles); + return getString(R.string.tts_miles, digits); } - int meters = (int) (kilometers * 1000.0); - if (meters > 50) { - return getString(R.string.tts_meters, String.valueOf(Math.round(meters / 10.0) * 10)); + int feet = (int) (kilometers * 1000.0 * IConversion.METERS_TO_FEET); + if (feet > 300) { + return getString(R.string.tts_feet, String.valueOf(Math.round(feet / 10.0) * 10)); } - return getString(R.string.tts_meters, String.valueOf(meters)); + return getString(R.string.tts_feet, String.valueOf(feet)); } private static String getString(int resourceId, Object... formatArgs) { diff --git a/main/src/cgeo/geocaching/ui/CacheListAdapter.java b/main/src/cgeo/geocaching/ui/CacheListAdapter.java index b60586e..99ae405 100644 --- a/main/src/cgeo/geocaching/ui/CacheListAdapter.java +++ b/main/src/cgeo/geocaching/ui/CacheListAdapter.java @@ -22,8 +22,6 @@ import org.apache.commons.lang3.builder.HashCodeBuilder; import android.app.Activity; import android.content.res.Resources; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.text.Spannable; @@ -39,7 +37,6 @@ import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.ImageView; -import android.widget.RelativeLayout; import android.widget.TextView; import java.util.ArrayList; @@ -100,10 +97,8 @@ public class CacheListAdapter extends ArrayAdapter<Geocache> { TextView favorite; TextView info; ImageView inventory; - RelativeLayout directionLayout; DistanceView distance; CompassMiniView direction; - RelativeLayout dirImgLayout; ImageView dirImg; } @@ -358,10 +353,8 @@ public class CacheListAdapter extends ArrayAdapter<Geocache> { holder.checkbox = (CheckBox) v.findViewById(R.id.checkbox); holder.logStatusMark = (ImageView) v.findViewById(R.id.log_status_mark); holder.text = (TextView) v.findViewById(R.id.text); - holder.directionLayout = (RelativeLayout) v.findViewById(R.id.direction_layout); holder.distance = (DistanceView) v.findViewById(R.id.distance); holder.direction = (CompassMiniView) v.findViewById(R.id.direction); - holder.dirImgLayout = (RelativeLayout) v.findViewById(R.id.dirimg_layout); holder.dirImg = (ImageView) v.findViewById(R.id.dirimg); holder.inventory = (ImageView) v.findViewById(R.id.inventory); holder.favorite = (TextView) v.findViewById(R.id.favorite); @@ -434,64 +427,26 @@ public class CacheListAdapter extends ArrayAdapter<Geocache> { holder.inventory.setVisibility(View.GONE); } - boolean setDiDi = false; + if (cache.getDistance() != null) { + holder.distance.setDistance(cache.getDistance()); + } if (cache.getCoords() != null) { holder.direction.setVisibility(View.VISIBLE); + holder.dirImg.setVisibility(View.GONE); holder.direction.updateAzimuth(azimuth); if (coords != null) { holder.distance.update(coords); holder.direction.updateCurrentCoords(coords); } - setDiDi = true; - } else { - if (cache.getDistance() != null) { - holder.distance.setDistance(cache.getDistance()); - setDiDi = true; - } - if (cache.getDirection() != null) { - holder.direction.setVisibility(View.VISIBLE); - holder.direction.updateAzimuth(azimuth); - holder.direction.updateHeading(cache.getDirection()); - setDiDi = true; - } - } - - if (setDiDi) { - holder.directionLayout.setVisibility(View.VISIBLE); - holder.dirImgLayout.setVisibility(View.GONE); + } else if (cache.getDirection() != null) { + holder.direction.setVisibility(View.VISIBLE); + holder.dirImg.setVisibility(View.GONE); + holder.direction.updateAzimuth(azimuth); + holder.direction.updateHeading(cache.getDirection()); } else { - holder.directionLayout.setVisibility(View.GONE); - holder.distance.clear(); - - final Bitmap dirImgPre = BitmapFactory.decodeFile(DirectionImage.getDirectionFile(cache.getGeocode(), false).getPath()); - final Bitmap dirImg; - if (dirImgPre != null) { // null happens for invalid caches (not yet released) - dirImg = dirImgPre.copy(Bitmap.Config.ARGB_8888, true); - dirImgPre.recycle(); - } - else { - dirImg = null; - } - - if (dirImg != null) { - if (!lightSkin) { - final int length = dirImg.getWidth() * dirImg.getHeight(); - final int[] pixels = new int[length]; - dirImg.getPixels(pixels, 0, dirImg.getWidth(), 0, 0, dirImg.getWidth(), dirImg.getHeight()); - for (int i = 0; i < length; i++) { - if (pixels[i] == 0xff000000) { // replace black with white - pixels[i] = 0xffffffff; - } - } - dirImg.setPixels(pixels, 0, dirImg.getWidth(), 0, 0, dirImg.getWidth(), dirImg.getHeight()); - } - - holder.dirImg.setImageBitmap(dirImg); - holder.dirImgLayout.setVisibility(View.VISIBLE); - } else { - holder.dirImg.setImageBitmap(null); - holder.dirImgLayout.setVisibility(View.GONE); - } + holder.dirImg.setImageDrawable(DirectionImage.getDrawable(cache.getDirectionImg())); + holder.dirImg.setVisibility(View.VISIBLE); + holder.direction.setVisibility(View.GONE); } holder.favorite.setText(Integer.toString(cache.getFavoritePoints())); diff --git a/main/src/cgeo/geocaching/ui/DirectionImage.java b/main/src/cgeo/geocaching/ui/DirectionImage.java index 675d73b..df7275d 100644 --- a/main/src/cgeo/geocaching/ui/DirectionImage.java +++ b/main/src/cgeo/geocaching/ui/DirectionImage.java @@ -1,30 +1,22 @@ package cgeo.geocaching.ui; -import cgeo.geocaching.files.LocalStorage; -import cgeo.geocaching.network.Network; -import cgeo.geocaching.network.Parameters; +import cgeo.geocaching.StoredList; +import cgeo.geocaching.network.HtmlImage; -import ch.boye.httpclientandroidlib.HttpResponse; -import org.apache.commons.lang3.StringUtils; - -import java.io.File; +import android.graphics.drawable.BitmapDrawable; public class DirectionImage { - public static void getDrawable(final String geocode, final String code) { - if (StringUtils.isBlank(geocode) || StringUtils.isBlank(code)) { - return; - } - - final HttpResponse httpResponse = - Network.getRequest("http://www.geocaching.com/ImgGen/seek/CacheDir.ashx", new Parameters("k", code)); - if (httpResponse != null) { - LocalStorage.saveEntityToFile(httpResponse, getDirectionFile(geocode, true)); - } - } + static private HtmlImage htmlImage = new HtmlImage(HtmlImage.SHARED, false, StoredList.STANDARD_LIST_ID, false); - public static File getDirectionFile(final String geocode, final boolean createDirs) { - return LocalStorage.getStorageFile(geocode, "direction.png", false, createDirs); + /** + * Retrieve the direction image corresponding to the direction code. + * + * @param directionCode one of the eight cardinal points + * @return a drawable with the arrow pointing into the right direction + */ + public static BitmapDrawable getDrawable(final String directionCode) { + return htmlImage.getDrawable("http://www.geocaching.com/images/icons/compass/" + directionCode + ".gif"); } } |
