aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java')
-rw-r--r--main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java109
1 files changed, 109 insertions, 0 deletions
diff --git a/main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java b/main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java
new file mode 100644
index 0000000..4214db9
--- /dev/null
+++ b/main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java
@@ -0,0 +1,109 @@
+package cgeo.geocaching.loaders;
+
+import cgeo.geocaching.SearchResult;
+import cgeo.geocaching.Settings;
+import cgeo.geocaching.connector.gc.GCParser;
+import cgeo.geocaching.utils.Log;
+
+import android.content.Context;
+import android.os.Handler;
+import android.support.v4.content.AsyncTaskLoader;
+
+public abstract class AbstractSearchLoader extends AsyncTaskLoader<SearchResult> implements RecaptchaReceiver {
+
+ public enum CacheListLoaderType {
+ OFFLINE,
+ HISTORY,
+ NEAREST,
+ COORDINATE,
+ KEYWORD,
+ ADDRESS,
+ USERNAME,
+ OWNER,
+ MAP,
+ REMOVE_FROM_HISTORY;
+ }
+
+ private Handler recaptchaHandler = null;
+ private String recaptchaChallenge = null;
+ private String recaptchaText = null;
+ private SearchResult search;
+ private boolean loading;
+
+ public AbstractSearchLoader(Context context) {
+ super(context);
+ }
+
+ public abstract SearchResult runSearch();
+
+ public boolean isLoading() {
+ return loading;
+ }
+
+ @Override
+ public SearchResult loadInBackground() {
+ loading = true;
+ if (search == null) {
+ search = runSearch();
+ } else {
+ // Unless we make a new Search the Loader framework won't deliver results. It does't do equals only identity
+ search = GCParser.searchByNextPage(new SearchResult(search), Settings.isShowCaptcha(), this);
+ }
+ loading = false;
+ return search;
+ }
+
+ @Override
+ public boolean takeContentChanged() {
+ return super.takeContentChanged();
+ }
+
+ @Override
+ protected void onStartLoading() {
+ forceLoad();
+ }
+
+ public void setRecaptchaHandler(Handler recaptchaHandlerIn) {
+ recaptchaHandler = recaptchaHandlerIn;
+ }
+
+ @Override
+ public void notifyNeed() {
+ if (recaptchaHandler != null) {
+ recaptchaHandler.sendEmptyMessage(1);
+ }
+ }
+
+ @Override
+ public synchronized void waitForUser() {
+ try {
+ wait();
+ } catch (InterruptedException e) {
+ Log.w("searchThread is not waiting for user…");
+ }
+ }
+
+ @Override
+ public void setChallenge(String challenge) {
+ recaptchaChallenge = challenge;
+ }
+
+ @Override
+ public String getChallenge() {
+ return recaptchaChallenge;
+ }
+
+ @Override
+ public synchronized void setText(String text) {
+ recaptchaText = text;
+
+ notify();
+ }
+
+ @Override
+ public synchronized String getText() {
+ return recaptchaText;
+ }
+
+
+}