diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2014-01-17 23:20:52 +0100 |
|---|---|---|
| committer | Samuel Tardieu <sam@rfc1149.net> | 2014-01-17 23:20:52 +0100 |
| commit | 1c2b0480e1a3a01a2b95346b0e5e3337fb173e2e (patch) | |
| tree | 7b59ff5378c08fe63846d9b54854778658ad7c94 /main/src | |
| parent | 624876a771f4a7f8d8ae1c25b9cf80d5fa5e74e7 (diff) | |
| download | cgeo-1c2b0480e1a3a01a2b95346b0e5e3337fb173e2e.zip cgeo-1c2b0480e1a3a01a2b95346b0e5e3337fb173e2e.tar.gz cgeo-1c2b0480e1a3a01a2b95346b0e5e3337fb173e2e.tar.bz2 | |
refactoring: simplify RecaptchReceiver a bit
Diffstat (limited to 'main/src')
3 files changed, 21 insertions, 29 deletions
diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java index 70c3b2a..cc2e9b3 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCParser.java +++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java @@ -67,7 +67,7 @@ public abstract class GCParser { private final static SynchronizedDateFormat dateTbIn1 = new SynchronizedDateFormat("EEEEE, dd MMMMM yyyy", Locale.ENGLISH); // Saturday, 28 March 2009 private final static SynchronizedDateFormat dateTbIn2 = new SynchronizedDateFormat("EEEEE, MMMMM dd, yyyy", Locale.ENGLISH); // Saturday, March 28, 2009 - private static SearchResult parseSearch(final String url, final String pageContent, final boolean showCaptcha, RecaptchaReceiver thread) { + private static SearchResult parseSearch(final String url, final String pageContent, final boolean showCaptcha, final RecaptchaReceiver recaptchaReceiver) { if (StringUtils.isBlank(pageContent)) { Log.e("GCParser.parseSearch: No page given"); return null; @@ -85,12 +85,12 @@ public abstract class GCParser { final String recaptchaJsParam = TextUtils.getMatch(page, GCConstants.PATTERN_SEARCH_RECAPTCHA, false, null); if (recaptchaJsParam != null) { - thread.setKey(recaptchaJsParam.trim()); + recaptchaReceiver.setKey(recaptchaJsParam.trim()); - thread.fetchChallenge(); + recaptchaReceiver.fetchChallenge(); } - if (thread != null && StringUtils.isNotBlank(thread.getChallenge())) { - thread.notifyNeed(); + if (recaptchaReceiver != null && StringUtils.isNotBlank(recaptchaReceiver.getChallenge())) { + recaptchaReceiver.notifyNeed(); } } @@ -276,12 +276,12 @@ public abstract class GCParser { } String recaptchaText = null; - if (thread != null && StringUtils.isNotBlank(thread.getChallenge())) { - thread.waitForUser(); - recaptchaText = thread.getText(); + if (recaptchaReceiver != null && StringUtils.isNotBlank(recaptchaReceiver.getChallenge())) { + recaptchaReceiver.waitForUser(); + recaptchaText = recaptchaReceiver.getText(); } - if (!cids.isEmpty() && (Settings.isGCPremiumMember() || showCaptcha) && ((thread == null || StringUtils.isBlank(thread.getChallenge())) || StringUtils.isNotBlank(recaptchaText))) { + if (!cids.isEmpty() && (Settings.isGCPremiumMember() || showCaptcha) && ((recaptchaReceiver == null || StringUtils.isBlank(recaptchaReceiver.getChallenge())) || StringUtils.isNotBlank(recaptchaText))) { Log.i("Trying to get .loc for " + cids.size() + " caches"); try { @@ -302,8 +302,8 @@ public abstract class GCParser { params.put("CID", cid); } - if (thread != null && StringUtils.isNotBlank(thread.getChallenge()) && StringUtils.isNotBlank(recaptchaText)) { - params.put("recaptcha_challenge_field", thread.getChallenge()); + if (StringUtils.isNotBlank(recaptchaText)) { + params.put("recaptcha_challenge_field", recaptchaReceiver.getChallenge()); params.put("recaptcha_response_field", recaptchaText); } params.put("ctl00$ContentBody$uxDownloadLoc", "Download Waypoints"); diff --git a/main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java b/main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java index c4f10c9..eeb1dbe 100644 --- a/main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java +++ b/main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java @@ -14,6 +14,8 @@ import android.content.Context; import android.os.Handler; import android.support.v4.content.AsyncTaskLoader; +import java.util.concurrent.CountDownLatch; + public abstract class AbstractSearchLoader extends AsyncTaskLoader<SearchResult> implements RecaptchaReceiver { public enum CacheListLoaderType { @@ -41,6 +43,7 @@ public abstract class AbstractSearchLoader extends AsyncTaskLoader<SearchResult> private String recaptchaText = null; private SearchResult search; private boolean loading; + private CountDownLatch latch = new CountDownLatch(1); public AbstractSearchLoader(Context context) { super(context); @@ -77,8 +80,8 @@ public abstract class AbstractSearchLoader extends AsyncTaskLoader<SearchResult> forceLoad(); } - public void setRecaptchaHandler(Handler recaptchaHandlerIn) { - recaptchaHandler = recaptchaHandlerIn; + public void setRecaptchaHandler(final Handler recaptchaHandler) { + this.recaptchaHandler = recaptchaHandler; } @Override @@ -89,11 +92,9 @@ public abstract class AbstractSearchLoader extends AsyncTaskLoader<SearchResult> } @Override - public synchronized void waitForUser() { + public void waitForUser() { try { - while (getText() == null) { - wait(); - } + latch.await(); } catch (InterruptedException e) { Log.w("searchThread is not waiting for user…"); } @@ -105,16 +106,11 @@ public abstract class AbstractSearchLoader extends AsyncTaskLoader<SearchResult> } @Override - public String getKey() { - return recaptchaKey; - } - - @Override public void fetchChallenge() { recaptchaChallenge = null; if (StringUtils.isNotEmpty(recaptchaKey)) { - final Parameters params = new Parameters("k", getKey()); + final Parameters params = new Parameters("k", recaptchaKey); final String recaptchaJs = Network.getResponseData(Network.getRequest("http://www.google.com/recaptcha/api/challenge", params)); if (StringUtils.isNotBlank(recaptchaJs)) { @@ -129,10 +125,9 @@ public abstract class AbstractSearchLoader extends AsyncTaskLoader<SearchResult> } @Override - public synchronized void setText(String text) { + public void setText(String text) { recaptchaText = text; - - notify(); + latch.countDown(); } @Override @@ -140,7 +135,6 @@ public abstract class AbstractSearchLoader extends AsyncTaskLoader<SearchResult> return recaptchaText; } - @Override public void reset() { super.reset(); diff --git a/main/src/cgeo/geocaching/loaders/RecaptchaReceiver.java b/main/src/cgeo/geocaching/loaders/RecaptchaReceiver.java index fd5189c..881e048 100644 --- a/main/src/cgeo/geocaching/loaders/RecaptchaReceiver.java +++ b/main/src/cgeo/geocaching/loaders/RecaptchaReceiver.java @@ -10,8 +10,6 @@ public interface RecaptchaReceiver { public void fetchChallenge(); - public String getKey(); - public void setKey(String key); public void notifyNeed(); |
