diff options
| author | Portree-Kid <keith.paterson@gmx.de> | 2013-03-08 15:06:41 +0100 |
|---|---|---|
| committer | Portree-Kid <keith.paterson@gmx.de> | 2013-03-08 15:06:41 +0100 |
| commit | a0932683fdf840fd97464e93a4597fac5c93a731 (patch) | |
| tree | a0e27bbad9012436d378da27f3e2b052a0edb2f3 /main/src/cgeo/geocaching/connector | |
| parent | cfb16fb725c069f59d545a50ba40045320a55c2c (diff) | |
| download | cgeo-a0932683fdf840fd97464e93a4597fac5c93a731.zip cgeo-a0932683fdf840fd97464e93a4597fac5c93a731.tar.gz cgeo-a0932683fdf840fd97464e93a4597fac5c93a731.tar.bz2 | |
Refactoring to use Loaders fixes #2365
Diffstat (limited to 'main/src/cgeo/geocaching/connector')
4 files changed, 23 insertions, 88 deletions
diff --git a/main/src/cgeo/geocaching/connector/gc/AbstractSearchThread.java b/main/src/cgeo/geocaching/connector/gc/AbstractSearchThread.java deleted file mode 100644 index f19064d..0000000 --- a/main/src/cgeo/geocaching/connector/gc/AbstractSearchThread.java +++ /dev/null @@ -1,68 +0,0 @@ -package cgeo.geocaching.connector.gc; - -import cgeo.geocaching.utils.Log; - -import android.os.Handler; -import android.os.Message; - -abstract public class AbstractSearchThread extends Thread { - private Handler recaptchaHandler = null; - private String recaptchaChallenge = null; - private String recaptchaText = null; - private final Handler handler; - private static AbstractSearchThread currentInstance; - - protected AbstractSearchThread(final Handler handler) { - this.handler = handler; - } - - public void setRecaptchaHandler(Handler recaptchaHandlerIn) { - recaptchaHandler = recaptchaHandlerIn; - } - - public void notifyNeed() { - if (recaptchaHandler != null) { - recaptchaHandler.sendEmptyMessage(1); - } - } - - public synchronized void waitForUser() { - try { - wait(); - } catch (InterruptedException e) { - Log.w("searchThread is not waiting for user…"); - } - } - - public void setChallenge(String challenge) { - recaptchaChallenge = challenge; - } - - public String getChallenge() { - return recaptchaChallenge; - } - - public synchronized void setText(String text) { - recaptchaText = text; - - notify(); - } - - public synchronized String getText() { - return recaptchaText; - } - - @Override - final public void run() { - super.run(); - currentInstance = this; - runSearch(); - handler.sendMessage(Message.obtain()); - } - - protected abstract void runSearch(); - - public static AbstractSearchThread getCurrentInstance() { - return currentInstance; - } -} diff --git a/main/src/cgeo/geocaching/connector/gc/GCMap.java b/main/src/cgeo/geocaching/connector/gc/GCMap.java index 2e1dff0..5f16e10 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCMap.java +++ b/main/src/cgeo/geocaching/connector/gc/GCMap.java @@ -1,8 +1,8 @@ package cgeo.geocaching.connector.gc; +import cgeo.geocaching.Geocache; import cgeo.geocaching.SearchResult; import cgeo.geocaching.Settings; -import cgeo.geocaching.Geocache; import cgeo.geocaching.cgData; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.enumerations.CacheSize; @@ -352,7 +352,8 @@ public class GCMap { if (strategy.flags.contains(StrategyFlag.SEARCH_NEARBY)) { final Geopoint center = viewport.getCenter(); if ((lastSearchViewport == null) || !lastSearchViewport.contains(center)) { - SearchResult search = GCParser.searchByCoords(center, Settings.getCacheType(), false); + //FIXME We don't have a RecaptchaReceiver!? + SearchResult search = GCParser.searchByCoords(center, Settings.getCacheType(), false, null); if (search != null && !search.isEmpty()) { final Set<String> geocodes = search.getGeocodes(); if (Settings.isPremiumMember()) { diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java index 9707e06..9561b87 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCParser.java +++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java @@ -24,6 +24,7 @@ import cgeo.geocaching.gcvote.GCVote; import cgeo.geocaching.gcvote.GCVoteRating; import cgeo.geocaching.geopoint.DistanceParser; import cgeo.geocaching.geopoint.Geopoint; +import cgeo.geocaching.loaders.RecaptchaReceiver; import cgeo.geocaching.network.Network; import cgeo.geocaching.network.Parameters; import cgeo.geocaching.ui.DirectionImage; @@ -62,7 +63,7 @@ public abstract class GCParser { private final static SimpleDateFormat dateTbIn1 = new SimpleDateFormat("EEEEE, dd MMMMM yyyy", Locale.ENGLISH); // Saturday, 28 March 2009 private final static SimpleDateFormat dateTbIn2 = new SimpleDateFormat("EEEEE, MMMMM dd, yyyy", Locale.ENGLISH); // Saturday, March 28, 2009 - private static SearchResult parseSearch(final String url, final String pageContent, final boolean showCaptcha) { + private static SearchResult parseSearch(final String url, final String pageContent, final boolean showCaptcha, RecaptchaReceiver thread) { if (StringUtils.isBlank(pageContent)) { Log.e("GCParser.parseSearch: No page given"); return null; @@ -76,7 +77,6 @@ public abstract class GCParser { searchResult.viewstates = Login.getViewstates(page); // recaptcha - AbstractSearchThread thread = AbstractSearchThread.getCurrentInstance(); String recaptchaChallenge = null; if (showCaptcha) { String recaptchaJsParam = BaseUtils.getMatch(page, GCConstants.PATTERN_SEARCH_RECAPTCHA, false, null); @@ -702,7 +702,7 @@ public abstract class GCParser { return searchResult; } - public static SearchResult searchByNextPage(final SearchResult search, boolean showCaptcha) { + public static SearchResult searchByNextPage(final SearchResult search, boolean showCaptcha, RecaptchaReceiver recaptchaReceiver) { if (search == null) { return search; } @@ -739,7 +739,7 @@ public abstract class GCParser { return search; } - final SearchResult searchResult = parseSearch(url, page, showCaptcha); + final SearchResult searchResult = parseSearch(url, page, showCaptcha, recaptchaReceiver); if (searchResult == null || CollectionUtils.isEmpty(searchResult.getGeocodes())) { Log.w("GCParser.searchByNextPage: No cache parsed"); return search; @@ -784,9 +784,10 @@ public abstract class GCParser { * @param showCaptcha * @param params * the parameters to add to the request URI + * @param recaptchaReceiver * @return */ - private static SearchResult searchByAny(final CacheType cacheType, final boolean my, final boolean showCaptcha, final Parameters params) { + private static SearchResult searchByAny(final CacheType cacheType, final boolean my, final boolean showCaptcha, final Parameters params, RecaptchaReceiver recaptchaReceiver) { insertCacheType(params, cacheType); final String uri = "http://www.geocaching.com/seek/nearest.aspx"; @@ -798,7 +799,7 @@ public abstract class GCParser { return null; } - final SearchResult searchResult = parseSearch(fullUri, page, showCaptcha); + final SearchResult searchResult = parseSearch(fullUri, page, showCaptcha, recaptchaReceiver); if (searchResult == null || CollectionUtils.isEmpty(searchResult.getGeocodes())) { Log.e("GCParser.searchByAny: No cache parsed"); return searchResult; @@ -811,22 +812,22 @@ public abstract class GCParser { return search; } - public static SearchResult searchByCoords(final Geopoint coords, final CacheType cacheType, final boolean showCaptcha) { + public static SearchResult searchByCoords(final Geopoint coords, final CacheType cacheType, final boolean showCaptcha, RecaptchaReceiver recaptchaReceiver) { final Parameters params = new Parameters("lat", Double.toString(coords.getLatitude()), "lng", Double.toString(coords.getLongitude())); - return searchByAny(cacheType, false, showCaptcha, params); + return searchByAny(cacheType, false, showCaptcha, params, recaptchaReceiver); } - public static SearchResult searchByKeyword(final String keyword, final CacheType cacheType, final boolean showCaptcha) { + public static SearchResult searchByKeyword(final String keyword, final CacheType cacheType, final boolean showCaptcha, RecaptchaReceiver recaptchaReceiver) { if (StringUtils.isBlank(keyword)) { Log.e("GCParser.searchByKeyword: No keyword given"); return null; } final Parameters params = new Parameters("key", keyword); - return searchByAny(cacheType, false, showCaptcha, params); + return searchByAny(cacheType, false, showCaptcha, params, recaptchaReceiver); } - public static SearchResult searchByUsername(final String userName, final CacheType cacheType, final boolean showCaptcha) { + public static SearchResult searchByUsername(final String userName, final CacheType cacheType, final boolean showCaptcha, RecaptchaReceiver recaptchaReceiver) { if (StringUtils.isBlank(userName)) { Log.e("GCParser.searchByUsername: No user name given"); return null; @@ -840,20 +841,20 @@ public abstract class GCParser { Log.i("GCParser.searchByUsername: Overriding users choice, downloading all caches."); } - return searchByAny(cacheType, my, showCaptcha, params); + return searchByAny(cacheType, my, showCaptcha, params, recaptchaReceiver); } - public static SearchResult searchByOwner(final String userName, final CacheType cacheType, final boolean showCaptcha) { + public static SearchResult searchByOwner(final String userName, final CacheType cacheType, final boolean showCaptcha, RecaptchaReceiver recaptchaReceiver) { if (StringUtils.isBlank(userName)) { Log.e("GCParser.searchByOwner: No user name given"); return null; } final Parameters params = new Parameters("u", userName); - return searchByAny(cacheType, false, showCaptcha, params); + return searchByAny(cacheType, false, showCaptcha, params, recaptchaReceiver); } - public static SearchResult searchByAddress(final String address, final CacheType cacheType, final boolean showCaptcha) { + public static SearchResult searchByAddress(final String address, final CacheType cacheType, final boolean showCaptcha, RecaptchaReceiver recaptchaReceiver) { if (StringUtils.isBlank(address)) { Log.e("GCParser.searchByAddress: No address given"); return null; @@ -873,7 +874,7 @@ public abstract class GCParser { if (data == null) { return null; } - return searchByCoords(new Geopoint(data.getDouble("lat"), data.getDouble("lng")), cacheType, showCaptcha); + return searchByCoords(new Geopoint(data.getDouble("lat"), data.getDouble("lng")), cacheType, showCaptcha, recaptchaReceiver); } catch (JSONException e) { Log.w("GCParser.searchByAddress", e); } diff --git a/main/src/cgeo/geocaching/connector/gc/SearchHandler.java b/main/src/cgeo/geocaching/connector/gc/SearchHandler.java index 2351554..840cad1 100644 --- a/main/src/cgeo/geocaching/connector/gc/SearchHandler.java +++ b/main/src/cgeo/geocaching/connector/gc/SearchHandler.java @@ -1,6 +1,7 @@ package cgeo.geocaching.connector.gc; import cgeo.geocaching.R; +import cgeo.geocaching.loaders.RecaptchaReceiver; import cgeo.geocaching.utils.Log; import android.app.Activity; @@ -24,7 +25,7 @@ import java.net.URL; public class SearchHandler extends Handler { private Activity activity = null; private Resources res = null; - private AbstractSearchThread recaptchaThread = null; + private RecaptchaReceiver recaptchaThread = null; private ImageView imageView = null; private Bitmap img = null; @@ -41,7 +42,7 @@ public class SearchHandler extends Handler { } }; - public SearchHandler(Activity activityIn, Resources resIn, AbstractSearchThread recaptchaThreadIn) { + public SearchHandler(Activity activityIn, Resources resIn, RecaptchaReceiver recaptchaThreadIn) { activity = activityIn; res = resIn; recaptchaThread = recaptchaThreadIn; |
