diff options
| -rw-r--r-- | main/res/values-de/strings.xml | 7 | ||||
| -rw-r--r-- | main/res/values/strings.xml | 7 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgBase.java | 31 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgeocaches.java | 2 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgeodetail.java | 62 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/AbstractConnector.java | 4 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/GCConnector.java | 25 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/IConnector.java | 22 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/opencaching/ApiOpenCachingConnector.java | 4 |
9 files changed, 113 insertions, 51 deletions
diff --git a/main/res/values-de/strings.xml b/main/res/values-de/strings.xml index 01b7467..69fe98f 100644 --- a/main/res/values-de/strings.xml +++ b/main/res/values-de/strings.xml @@ -514,6 +514,13 @@ <string name="cache_hint">Hinweis</string> <string name="cache_logs">Logbuch</string> <string name="cache_dialog_loading_details">Lade Cache-Details…</string> + <string name="cache_dialog_loading_details_status_loadpage">Lade Seite</string> + <string name="cache_dialog_loading_details_status_details">Verarbeite Details</string> + <string name="cache_dialog_loading_details_status_spoilers">Lade Hinweisbilder</string> + <string name="cache_dialog_loading_details_status_logs">Lade Logs</string> + <string name="cache_dialog_loading_details_status_waypoints">Verarbeite Wegpunkte</string> + <string name="cache_dialog_loading_details_status_gcvote">Lade GCVote</string> + <string name="cache_dialog_loading_details_status_render">Generiere Ansicht</string> <string name="cache_dialog_loading_description">Lade Cache-Beschreibung…</string> <string name="cache_dialog_offline_save_title">Offline-Verwendung</string> <string name="cache_dialog_offline_save_message">Speichere Cache für Offline-Verwendung…</string> diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml index f1bd6d5..c49f6b7 100644 --- a/main/res/values/strings.xml +++ b/main/res/values/strings.xml @@ -525,6 +525,13 @@ <string name="cache_hint">Hint</string> <string name="cache_logs">Logbook</string> <string name="cache_dialog_loading_details">Loading cache details…</string> + <string name="cache_dialog_loading_details_status_loadpage">Loading page</string> + <string name="cache_dialog_loading_details_status_details">Processing details</string> + <string name="cache_dialog_loading_details_status_spoilers">Loading spoiler images</string> + <string name="cache_dialog_loading_details_status_logs">Loading logs</string> + <string name="cache_dialog_loading_details_status_waypoints">Processing waypoints</string> + <string name="cache_dialog_loading_details_status_gcvote">Loading GCVote</string> + <string name="cache_dialog_loading_details_status_render">Render view</string> <string name="cache_dialog_loading_description">Loading cache description…</string> <string name="cache_dialog_offline_save_title">Offline</string> <string name="cache_dialog_offline_save_message">Saving cache for offline use…</string> diff --git a/main/src/cgeo/geocaching/cgBase.java b/main/src/cgeo/geocaching/cgBase.java index 20f29e2..ef17958 100644 --- a/main/src/cgeo/geocaching/cgBase.java +++ b/main/src/cgeo/geocaching/cgBase.java @@ -217,6 +217,8 @@ public class cgBase { private static final int NB_DOWNLOAD_RETRIES = 4; + public static final int UPDATE_LOAD_PROGRESS_DETAIL = 42186; + public cgBase(cgeoapplication appIn) { context = appIn.getBaseContext(); res = appIn.getBaseContext().getResources(); @@ -1056,7 +1058,11 @@ public class cgBase { return caches; } - public cgCacheWrap parseCache(String page, int reason) { + public cgCacheWrap parseCache(final String page, final int reason, final Handler handler) { + if (null != handler) { + handler.obtainMessage(cgBase.UPDATE_LOAD_PROGRESS_DETAIL, res.getString(R.string.cache_dialog_loading_details_status_details)).sendToTarget(); + } + if (StringUtils.isBlank(page)) { Log.e(Settings.tag, "cgeoBase.parseCache: No page given"); return null; @@ -1287,6 +1293,10 @@ public class cgBase { try { final Matcher matcherSpoilers = patternSpoilers.matcher(page); if (matcherSpoilers.find()) { + if (null != handler) { + handler.obtainMessage(cgBase.UPDATE_LOAD_PROGRESS_DETAIL, res.getString(R.string.cache_dialog_loading_details_status_spoilers)).sendToTarget(); + } + final Matcher matcherSpoilersInside = patternSpoilersInside.matcher(matcherSpoilers.group(1)); while (matcherSpoilersInside.find()) { @@ -1374,6 +1384,9 @@ public class cgBase { } // cache logs + if (null != handler) { + handler.obtainMessage(cgBase.UPDATE_LOAD_PROGRESS_DETAIL, res.getString(R.string.cache_dialog_loading_details_status_logs)).sendToTarget(); + } loadLogsFromDetails(page, cache); int wpBegin = 0; @@ -1381,6 +1394,10 @@ public class cgBase { wpBegin = page.indexOf("<table class=\"Table\" id=\"ctl00_ContentBody_Waypoints\">"); if (wpBegin != -1) { // parse waypoints + if (null != handler) { + handler.obtainMessage(cgBase.UPDATE_LOAD_PROGRESS_DETAIL, res.getString(R.string.cache_dialog_loading_details_status_waypoints)).sendToTarget(); + } + final Pattern patternWpType = Pattern.compile("\\/wpttypes\\/sm\\/(.+)\\.jpg", Pattern.CASE_INSENSITIVE); final Pattern patternWpPrefixOrLookupOrLatlon = Pattern.compile(">([^<]*<[^>]+>)?([^<]+)(<[^>]+>[^<]*)?<\\/td>", Pattern.CASE_INSENSITIVE); final Pattern patternWpName = Pattern.compile(">[^<]*<a[^>]+>([^<]*)<\\/a>", Pattern.CASE_INSENSITIVE); @@ -1506,6 +1523,10 @@ public class cgBase { cache.elevation = getElevation(cache.coords); } + if (null != handler) { + handler.obtainMessage(cgBase.UPDATE_LOAD_PROGRESS_DETAIL, res.getString(R.string.cache_dialog_loading_details_status_gcvote)).sendToTarget(); + } + final cgRating rating = GCVote.getRating(cache.guid, cache.geocode); if (rating != null) { cache.rating = rating.rating; @@ -2207,7 +2228,7 @@ public class cgBase { return searchId; } - public UUID searchByGeocode(final String geocode, final String guid, final int reason, final boolean forceReload) { + public UUID searchByGeocode(final String geocode, final String guid, final int reason, final boolean forceReload, final Handler handler) { final cgSearch search = new cgSearch(); if (StringUtils.isBlank(geocode) && StringUtils.isBlank(guid)) { @@ -2230,7 +2251,7 @@ public class cgBase { return search.getCurrentId(); } - return ConnectorFactory.getConnector(geocode).searchByGeocode(this, geocode, guid, app, search, reason); + return ConnectorFactory.getConnector(geocode).searchByGeocode(this, geocode, guid, app, search, reason, handler); } public UUID searchByOffline(final Geopoint coords, final String cacheType, final int list) { @@ -3127,11 +3148,11 @@ public class cgBase { if (cache != null) { // only reload the cache, if it was already stored or has not all details (by checking the description) if (cache.reason > 0 || StringUtils.isBlank(cache.getDescription())) { - final UUID searchId = searchByGeocode(cache.geocode, null, listId, false); + final UUID searchId = searchByGeocode(cache.geocode, null, listId, false, null); cache = app.getCache(searchId); } } else if (StringUtils.isNotBlank(geocode)) { - final UUID searchId = searchByGeocode(geocode, null, listId, false); + final UUID searchId = searchByGeocode(geocode, null, listId, false, null); cache = app.getCache(searchId); } diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/cgeocaches.java index 02554d5..536a013 100644 --- a/main/src/cgeo/geocaching/cgeocaches.java +++ b/main/src/cgeo/geocaching/cgeocaches.java @@ -1290,7 +1290,7 @@ public class cgeocaches extends AbstractListActivity { if (cache != null) { // create a searchId for a single cache (as if in details view) - final UUID singleSearchId = base.searchByGeocode(cache.geocode, null, 0, false); + final UUID singleSearchId = base.searchByGeocode(cache.geocode, null, 0, false, null); if (NavigationAppFactory.onMenuItemSelected(item, geo, this, res, cache, singleSearchId, null, null)) { diff --git a/main/src/cgeo/geocaching/cgeodetail.java b/main/src/cgeo/geocaching/cgeodetail.java index 1d47e7d..51ae366 100644 --- a/main/src/cgeo/geocaching/cgeodetail.java +++ b/main/src/cgeo/geocaching/cgeodetail.java @@ -171,31 +171,43 @@ public class cgeodetail extends AbstractActivity { private Handler loadCacheHandler = new Handler() { @Override public void handleMessage(Message msg) { - if (searchId == null) { - showToast(res.getString(R.string.err_dwld_details_failed)); + if (cgBase.UPDATE_LOAD_PROGRESS_DETAIL == msg.what) { + if (waitDialog != null + && waitDialog.isShowing() + && msg.obj instanceof String) { + waitDialog.setMessage(res.getString(R.string.cache_dialog_loading_details) + + "\n\n" + + (String) msg.obj); + } + } else { + if (searchId == null) { + showToast(res.getString(R.string.err_dwld_details_failed)); - finish(); - return; - } + finish(); + return; + } - if (app.getError(searchId) != null) { - showToast(res.getString(R.string.err_dwld_details_failed_reason) + " " + app.getError(searchId) + "."); + if (app.getError(searchId) != null) { + showToast(res.getString(R.string.err_dwld_details_failed_reason) + " " + app.getError(searchId) + "."); - finish(); - return; - } + finish(); + return; + } - setView(); + this.obtainMessage(cgBase.UPDATE_LOAD_PROGRESS_DETAIL, res.getString(R.string.cache_dialog_loading_details_status_render)).sendToTarget(); - if (Settings.isAutoLoadDescription()) { - try { - loadLongDesc(); - } catch (Exception e) { - // activity is not visible + setView(); + + if (Settings.isAutoLoadDescription()) { + try { + loadLongDesc(); + } catch (Exception e) { + // activity is not visible + } } - } - (new loadMapPreview(loadMapPreviewHandler)).start(); + (new loadMapPreview(loadMapPreviewHandler)).start(); + } } }; @@ -381,13 +393,12 @@ public class cgeodetail extends AbstractActivity { try { if (StringUtils.isNotBlank(name)) { - waitDialog = ProgressDialog.show(this, name, res.getString(R.string.cache_dialog_loading_details), true); + waitDialog = ProgressDialog.show(this, name, res.getString(R.string.cache_dialog_loading_details), true, true); } else if (StringUtils.isNotBlank(geocode)) { - waitDialog = ProgressDialog.show(this, geocode.toUpperCase(), res.getString(R.string.cache_dialog_loading_details), true); + waitDialog = ProgressDialog.show(this, geocode.toUpperCase(), res.getString(R.string.cache_dialog_loading_details), true, true); } else { - waitDialog = ProgressDialog.show(this, res.getString(R.string.cache), res.getString(R.string.cache_dialog_loading_details), true); + waitDialog = ProgressDialog.show(this, res.getString(R.string.cache), res.getString(R.string.cache_dialog_loading_details), true, true); } - waitDialog.setCancelable(true); } catch (Exception e) { // nothing, we lost the window } @@ -612,8 +623,9 @@ public class cgeodetail extends AbstractActivity { cache = app.getCache(searchId); if (cache == null) { - if (waitDialog != null && waitDialog.isShowing()) + if (waitDialog != null && waitDialog.isShowing()) { waitDialog.dismiss(); + } if (StringUtils.isNotBlank(geocode)) { showToast(res.getString(R.string.err_detail_cache_find) + " " + geocode + "."); @@ -1327,7 +1339,7 @@ public class cgeodetail extends AbstractActivity { if (StringUtils.isBlank(geocode) && StringUtils.isBlank(guid)) { return; } - searchId = base.searchByGeocode(geocode, StringUtils.isBlank(geocode) ? guid : null, 0, false); + searchId = base.searchByGeocode(geocode, StringUtils.isBlank(geocode) ? guid : null, 0, false, handler); handler.sendMessage(new Message()); } } @@ -1742,7 +1754,7 @@ public class cgeodetail extends AbstractActivity { @Override public void run() { app.removeCacheFromCache(geocode); - searchId = base.searchByGeocode(cache.geocode, null, 0, true); + searchId = base.searchByGeocode(cache.geocode, null, 0, true, null); handler.sendEmptyMessage(0); } diff --git a/main/src/cgeo/geocaching/connector/AbstractConnector.java b/main/src/cgeo/geocaching/connector/AbstractConnector.java index 54fab87..6ea450d 100644 --- a/main/src/cgeo/geocaching/connector/AbstractConnector.java +++ b/main/src/cgeo/geocaching/connector/AbstractConnector.java @@ -5,6 +5,8 @@ import cgeo.geocaching.cgCache; import cgeo.geocaching.cgSearch; import cgeo.geocaching.cgeoapplication; +import android.os.Handler; + import java.util.UUID; public abstract class AbstractConnector implements IConnector { @@ -45,7 +47,7 @@ public abstract class AbstractConnector implements IConnector { } @Override - public UUID searchByGeocode(cgBase base, String geocode, String guid, cgeoapplication app, cgSearch search, int reason) { + public UUID searchByGeocode(cgBase base, String geocode, String guid, cgeoapplication app, cgSearch search, int reason, Handler handler) { return null; } } diff --git a/main/src/cgeo/geocaching/connector/GCConnector.java b/main/src/cgeo/geocaching/connector/GCConnector.java index ea4ca45..b453511 100644 --- a/main/src/cgeo/geocaching/connector/GCConnector.java +++ b/main/src/cgeo/geocaching/connector/GCConnector.java @@ -1,15 +1,18 @@ package cgeo.geocaching.connector; import cgeo.geocaching.Parameters; +import cgeo.geocaching.R; +import cgeo.geocaching.Settings; import cgeo.geocaching.cgBase; import cgeo.geocaching.cgCache; import cgeo.geocaching.cgCacheWrap; import cgeo.geocaching.cgSearch; -import cgeo.geocaching.Settings; import cgeo.geocaching.cgeoapplication; import org.apache.commons.lang3.StringUtils; +import android.content.res.Resources; +import android.os.Handler; import android.util.Log; import java.util.ArrayList; @@ -65,7 +68,7 @@ public class GCConnector extends AbstractConnector implements IConnector { } @Override - public UUID searchByGeocode(final cgBase base, String geocode, final String guid, final cgeoapplication app, final cgSearch search, final int reason) { + public UUID searchByGeocode(final cgBase base, String geocode, final String guid, final cgeoapplication app, final cgSearch search, final int reason, final Handler handler) { final Parameters params = new Parameters("decrypt", "y"); if (StringUtils.isNotBlank(geocode)) { params.put("wp", geocode); @@ -73,6 +76,17 @@ public class GCConnector extends AbstractConnector implements IConnector { params.put("guid", guid); } + if (app == null) { + Log.e(Settings.tag, "cgeoBase.searchByGeocode: No application found"); + return null; + } + + final Resources res = app.getResources(); + + if (null != handler) { + handler.obtainMessage(cgBase.UPDATE_LOAD_PROGRESS_DETAIL, res.getString(R.string.cache_dialog_loading_details_status_loadpage)).sendToTarget(); + } + String page = base.requestLogged("http://www.geocaching.com/seek/cache_details.aspx", params, false, false, false); if (StringUtils.isEmpty(page)) { @@ -99,7 +113,7 @@ public class GCConnector extends AbstractConnector implements IConnector { return null; } - final cgCacheWrap caches = base.parseCache(page, reason); + final cgCacheWrap caches = base.parseCache(page, reason, handler); if (caches == null || caches.cacheList == null || caches.cacheList.isEmpty()) { if (caches != null && StringUtils.isNotBlank(caches.error)) { search.error = caches.error; @@ -114,11 +128,6 @@ public class GCConnector extends AbstractConnector implements IConnector { return null; } - if (app == null) { - Log.e(Settings.tag, "cgeoBase.searchByGeocode: No application found"); - return null; - } - List<cgCache> cacheList = cgBase.processSearchResults(search, caches, false, false, null); app.addSearch(search, cacheList, true, reason); diff --git a/main/src/cgeo/geocaching/connector/IConnector.java b/main/src/cgeo/geocaching/connector/IConnector.java index 07ae43e..68c9db6 100644 --- a/main/src/cgeo/geocaching/connector/IConnector.java +++ b/main/src/cgeo/geocaching/connector/IConnector.java @@ -5,19 +5,21 @@ import cgeo.geocaching.cgCache; import cgeo.geocaching.cgSearch; import cgeo.geocaching.cgeoapplication; +import android.os.Handler; + import java.util.UUID; public interface IConnector { /** * get name for display (currently only used in links) - * + * * @return */ public String getName(); /** * return true, if this connector is responsible for the given cache - * + * * @param geocode * @return */ @@ -27,7 +29,7 @@ public interface IConnector { /** * get browser URL for the given cache - * + * * @param cache * @return */ @@ -35,28 +37,28 @@ public interface IConnector { /** * enable/disable watchlist controls in cache details - * + * * @return */ public boolean supportsWatchList(); /** * enable/disable logging controls in cache details - * + * * @return */ public boolean supportsLogging(); /** * get host name of the connector server for dynamic loading of data - * + * * @return */ public String getHost(); /** * get cache data license text - * + * * @param cache * @return */ @@ -64,17 +66,17 @@ public interface IConnector { /** * enable/disable user actions in cache details - * + * * @return */ public boolean supportsUserActions(); /** * enable/disable "caches around" action in cache details - * + * * @return */ public boolean supportsCachesAround(); - public UUID searchByGeocode(final cgBase base, final String geocode, final String guid, final cgeoapplication app, final cgSearch search, final int reason); + public UUID searchByGeocode(final cgBase base, final String geocode, final String guid, final cgeoapplication app, final cgSearch search, final int reason, final Handler handler); } diff --git a/main/src/cgeo/geocaching/connector/opencaching/ApiOpenCachingConnector.java b/main/src/cgeo/geocaching/connector/opencaching/ApiOpenCachingConnector.java index 0773532..013fc18 100644 --- a/main/src/cgeo/geocaching/connector/opencaching/ApiOpenCachingConnector.java +++ b/main/src/cgeo/geocaching/connector/opencaching/ApiOpenCachingConnector.java @@ -9,6 +9,8 @@ import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.utils.CryptUtils; +import android.os.Handler; + import java.util.List; import java.util.UUID; @@ -37,7 +39,7 @@ public class ApiOpenCachingConnector extends OpenCachingConnector implements ICo } @Override - public UUID searchByGeocode(final cgBase base, final String geocode, final String guid, final cgeoapplication app, final cgSearch search, final int reason) { + public UUID searchByGeocode(final cgBase base, final String geocode, final String guid, final cgeoapplication app, final cgSearch search, final int reason, final Handler handler) { final cgCache cache = OkapiClient.getCache(geocode); if (cache == null) { return null; |
