aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/CacheDetailActivity.java13
-rw-r--r--main/src/cgeo/geocaching/TrackableActivity.java2
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java9
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OkapiClient.java29
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OkapiService.java20
-rw-r--r--main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java2
6 files changed, 51 insertions, 24 deletions
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java
index 9b57f0d..ac9d4b9 100644
--- a/main/src/cgeo/geocaching/CacheDetailActivity.java
+++ b/main/src/cgeo/geocaching/CacheDetailActivity.java
@@ -2019,7 +2019,14 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
return;
}
if (StringUtils.isNotBlank(descriptionString)) {
- descriptionView.setText(description, TextView.BufferType.SPANNABLE);
+ try {
+ descriptionView.setText(description, TextView.BufferType.SPANNABLE);
+ } catch (Exception e) {
+ // On 4.1, there is sometimes a crash on measuring the layout: https://code.google.com/p/android/issues/detail?id=35412
+ Log.e("Android bug setting text: ", e);
+ // remove the formatting by converting to a simple string
+ descriptionView.setText(description.toString());
+ }
descriptionView.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance());
fixTextColor(descriptionView, descriptionString);
descriptionView.setVisibility(View.VISIBLE);
@@ -2054,7 +2061,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
/**
* Handle caches with black font color in dark skin and white font color in light skin
* by changing background color of the view
- *
+ *
* @param view
* containing the text
* @param text
@@ -2156,7 +2163,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
final LogEntry log = getItem(position);
if (log.date > 0) {
- holder.date.setText(Formatter.formatShortDate(log.date));
+ holder.date.setText(Formatter.formatShortDateVerbally(log.date));
holder.date.setVisibility(View.VISIBLE);
} else {
holder.date.setVisibility(View.GONE);
diff --git a/main/src/cgeo/geocaching/TrackableActivity.java b/main/src/cgeo/geocaching/TrackableActivity.java
index 29ba5ac..001ef2f 100644
--- a/main/src/cgeo/geocaching/TrackableActivity.java
+++ b/main/src/cgeo/geocaching/TrackableActivity.java
@@ -430,7 +430,7 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi
protected void fillViewHolder(LogViewHolder holder, final LogEntry log) {
if (log.date > 0) {
- holder.added.setText(Formatter.formatShortDate(log.date));
+ holder.added.setText(Formatter.formatShortDateVerbally(log.date));
}
holder.type.setText(log.type.getL10n());
diff --git a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
index 929e3b8..d349dc2 100644
--- a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
+++ b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
@@ -2,6 +2,7 @@ package cgeo.geocaching.connector.oc;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.SearchResult;
+import cgeo.geocaching.Settings;
import cgeo.geocaching.cgData;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.connector.ILoggingManager;
@@ -11,6 +12,8 @@ import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Viewport;
import cgeo.geocaching.utils.CryptUtils;
+import org.apache.commons.lang3.StringUtils;
+
import android.app.Activity;
public class OCApiLiveConnector extends OCApiConnector implements ISearchByCenter, ISearchByViewPort {
@@ -36,7 +39,11 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente
@Override
public OAuthLevel getSupportedAuthLevel() {
- return OAuthLevel.Level3;
+ // TODO the tokens must be available connector specific
+ if (StringUtils.isNotBlank(Settings.getOCDETokenPublic()) && StringUtils.isNotBlank(Settings.getOCDETokenSecret())) {
+ return OAuthLevel.Level3;
+ }
+ return OAuthLevel.Level1;
}
@Override
diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
index bf35574..7b000dc 100644
--- a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
+++ b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
@@ -99,9 +99,7 @@ final public class OkapiClient {
private static final String USER_USERNAME = "username";
- private static final String SERVICE_CACHE = "/okapi/services/caches/geocache";
-
- // the several realms of possible field s for cache retrieval:
+ // the several realms of possible fields for cache retrieval:
// Core: for livemap requests (L3 - only with level 3 auth)
// Additional: additional fields for full cache (L3 - only for level 3 auth, current - only for connectors with current api)
private static final String SERVICE_CACHE_CORE_FIELDS = "code|name|location|type|status|difficulty|terrain|size";
@@ -110,16 +108,10 @@ final public class OkapiClient {
private static final String SERVICE_CACHE_ADDITIONAL_CURRENT_FIELDS = "gc_code|attribution_note";
private static final String SERVICE_CACHE_ADDITIONAL_L3_FIELDS = "is_watched";
- private static final String SERVICE_SEARCH_AND_RETRIEVE = "/okapi/services/caches/shortcuts/search_and_retrieve";
-
private static final String METHOD_SEARCH_NEAREST = "services/caches/search/nearest";
private static final String METHOD_SEARCH_BBOX = "services/caches/search/bbox";
private static final String METHOD_RETRIEVE_CACHES = "services/caches/geocaches";
- private static final String SERVICE_MARK_CACHE = "/okapi/services/caches/mark";
-
- private static final String SERVICE_SUBMIT_LOG = "/okapi/services/logs/submit";
-
public static Geocache getCache(final String geoCode) {
final Parameters params = new Parameters("cache_code", geoCode);
IConnector connector = ConnectorFactory.getConnector(geoCode);
@@ -132,7 +124,7 @@ final public class OkapiClient {
params.add("fields", getFullFields(ocapiConn));
params.add("attribution_append", "none");
- final JSONObject data = request(ocapiConn, SERVICE_CACHE, params);
+ final JSONObject data = request(ocapiConn, OkapiService.SERVICE_CACHE, params);
if (data == null) {
return null;
@@ -160,7 +152,7 @@ final public class OkapiClient {
addRetrieveParams(params, connector);
- final JSONObject data = request(connector, SERVICE_SEARCH_AND_RETRIEVE, params);
+ final JSONObject data = request(connector, OkapiService.SERVICE_SEARCH_AND_RETRIEVE, params);
if (data == null) {
return Collections.emptyList();
@@ -184,6 +176,7 @@ final public class OkapiClient {
final Map<String, String> valueMap = new LinkedHashMap<String, String>();
valueMap.put("bbox", bboxString);
+ // FIXME Why is this testing level 3? The to be used service is level 1 only.
if (connector.getSupportedAuthLevel() != OAuthLevel.Level3) {
Log.e("Calling OkapiClient.getCachesBBox with wrong connector");
return Collections.emptyList();
@@ -195,7 +188,7 @@ final public class OkapiClient {
addRetrieveParams(params, connector);
- final JSONObject data = request(connector, SERVICE_SEARCH_AND_RETRIEVE, params);
+ final JSONObject data = request(connector, OkapiService.SERVICE_SEARCH_AND_RETRIEVE, params);
if (data == null) {
return Collections.emptyList();
@@ -208,7 +201,7 @@ final public class OkapiClient {
final Parameters params = new Parameters("cache_code", cache.getGeocode());
params.add("watched", watched ? "true" : "false");
- final JSONObject data = request(connector, SERVICE_MARK_CACHE, params);
+ final JSONObject data = request(connector, OkapiService.SERVICE_MARK_CACHE, params);
if (data == null) {
return false;
@@ -229,7 +222,7 @@ final public class OkapiClient {
params.add("needs_maintenance", "true");
}
- final JSONObject data = request(connector, SERVICE_SUBMIT_LOG, params);
+ final JSONObject data = request(connector, OkapiService.SERVICE_SUBMIT_LOG, params);
if (data == null) {
return new LogResult(StatusCode.LOG_POST_ERROR, "");
@@ -613,7 +606,7 @@ final public class OkapiClient {
return res.toString();
}
- private static JSONObject request(final OCApiConnector connector, final String service, final Parameters params) {
+ private static JSONObject request(final OCApiConnector connector, final OkapiService service, final Parameters params) {
if (connector == null) {
return null;
}
@@ -625,13 +618,13 @@ final public class OkapiClient {
params.add("langpref", getPreferredLanguage());
- if (connector.getSupportedAuthLevel() == OAuthLevel.Level3) {
- OAuth.signOAuth(host, service, "GET", false, params, Settings.getOCDETokenPublic(), Settings.getOCDETokenSecret(), connector.getCK(), connector.getCS());
+ if (service.level == OAuthLevel.Level3 && connector.getSupportedAuthLevel() == OAuthLevel.Level3) {
+ OAuth.signOAuth(host, service.methodName, "GET", false, params, Settings.getOCDETokenPublic(), Settings.getOCDETokenSecret(), connector.getCK(), connector.getCS());
} else {
connector.addAuthentication(params);
}
- final String uri = "http://" + host + service;
+ final String uri = "http://" + host + service.methodName;
return Network.requestJSON(uri, params);
}
diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiService.java b/main/src/cgeo/geocaching/connector/oc/OkapiService.java
new file mode 100644
index 0000000..9b47596
--- /dev/null
+++ b/main/src/cgeo/geocaching/connector/oc/OkapiService.java
@@ -0,0 +1,20 @@
+package cgeo.geocaching.connector.oc;
+
+import cgeo.geocaching.connector.oc.OCApiConnector.OAuthLevel;
+
+
+enum OkapiService {
+ SERVICE_CACHE("/okapi/services/caches/geocache", OAuthLevel.Level1),
+ SERVICE_SEARCH_AND_RETRIEVE("/okapi/services/caches/shortcuts/search_and_retrieve", OAuthLevel.Level1),
+ SERVICE_MARK_CACHE("/okapi/services/caches/mark", OAuthLevel.Level3),
+ SERVICE_SUBMIT_LOG("/okapi/services/logs/submit", OAuthLevel.Level3);
+
+ final String methodName;
+ final OAuthLevel level;
+
+ OkapiService(final String methodName, final OAuthLevel level) {
+ this.methodName = methodName;
+ this.level = level;
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java
index dc0dbf8..7cc697d 100644
--- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java
+++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java
@@ -167,7 +167,7 @@ public final class MapsforgeMapProvider extends AbstractMapProvider {
final List<String> offlineMaps = getOfflineMaps();
for (String mapFile : offlineMaps) {
final String mapName = StringUtils.capitalize(StringUtils.substringBeforeLast(new File(mapFile).getName(), "."));
- registerMapSource(new OfflineMapSource(mapFile, this, resources.getString(R.string.map_source_osm_offline) + " - " + mapName, MapGeneratorInternal.DATABASE_RENDERER));
+ registerMapSource(new OfflineMapSource(mapFile, this, mapName + " (" + resources.getString(R.string.map_source_osm_offline) + ")", MapGeneratorInternal.DATABASE_RENDERER));
}
// have a default entry, if no map files are available. otherwise we cannot select "offline" in the settings
if (offlineMaps.isEmpty()) {