diff options
Diffstat (limited to 'main/src/cgeo/geocaching/loaders')
6 files changed, 22 insertions, 25 deletions
diff --git a/main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java b/main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java index 7524b76..b2cb0b2 100644 --- a/main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java +++ b/main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java @@ -2,6 +2,7 @@ package cgeo.geocaching.loaders; import cgeo.geocaching.SearchResult; import cgeo.geocaching.connector.gc.GCConstants; +import cgeo.geocaching.connector.gc.RecaptchaHandler; import cgeo.geocaching.network.Network; import cgeo.geocaching.network.Parameters; import cgeo.geocaching.utils.Log; @@ -13,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 { @@ -28,6 +31,10 @@ public abstract class AbstractSearchLoader extends AsyncTaskLoader<SearchResult> MAP, REMOVE_FROM_HISTORY, NEXT_PAGE; + + public int getLoaderId() { + return ordinal(); + } } private Handler recaptchaHandler = null; @@ -36,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); @@ -72,23 +80,21 @@ 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 public void notifyNeed() { if (recaptchaHandler != null) { - recaptchaHandler.sendEmptyMessage(1); + recaptchaHandler.sendEmptyMessage(RecaptchaHandler.SHOW_CAPTCHA); } } @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…"); } @@ -100,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)) { @@ -124,18 +125,16 @@ 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 - public synchronized String getText() { + public String getText() { return recaptchaText; } - @Override public void reset() { super.reset(); diff --git a/main/src/cgeo/geocaching/loaders/AddressGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/AddressGeocacheListLoader.java index dd7c7a6..e1573c9 100644 --- a/main/src/cgeo/geocaching/loaders/AddressGeocacheListLoader.java +++ b/main/src/cgeo/geocaching/loaders/AddressGeocacheListLoader.java @@ -1,8 +1,8 @@ package cgeo.geocaching.loaders; import cgeo.geocaching.SearchResult; -import cgeo.geocaching.settings.Settings; import cgeo.geocaching.connector.gc.GCParser; +import cgeo.geocaching.settings.Settings; import android.content.Context; diff --git a/main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java index 605f461..fdb35f2 100644 --- a/main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java +++ b/main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java @@ -2,9 +2,9 @@ package cgeo.geocaching.loaders; import cgeo.geocaching.DataStore; import cgeo.geocaching.SearchResult; -import cgeo.geocaching.settings.Settings; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.geopoint.Geopoint; +import cgeo.geocaching.settings.Settings; import android.content.Context; diff --git a/main/src/cgeo/geocaching/loaders/NextPageGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/NextPageGeocacheListLoader.java index 1104f83..05eac18 100644 --- a/main/src/cgeo/geocaching/loaders/NextPageGeocacheListLoader.java +++ b/main/src/cgeo/geocaching/loaders/NextPageGeocacheListLoader.java @@ -1,8 +1,8 @@ package cgeo.geocaching.loaders; import cgeo.geocaching.SearchResult; -import cgeo.geocaching.settings.Settings; import cgeo.geocaching.connector.gc.GCParser; +import cgeo.geocaching.settings.Settings; import android.content.Context; diff --git a/main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java index 5088484..b80a1b8 100644 --- a/main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java +++ b/main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java @@ -1,9 +1,9 @@ package cgeo.geocaching.loaders; -import cgeo.geocaching.SearchResult; -import cgeo.geocaching.settings.Settings; import cgeo.geocaching.DataStore; +import cgeo.geocaching.SearchResult; import cgeo.geocaching.geopoint.Geopoint; +import cgeo.geocaching.settings.Settings; import android.content.Context; 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(); |
