aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/loaders
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/loaders')
-rw-r--r--main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java111
-rw-r--r--main/src/cgeo/geocaching/loaders/AddressGeocacheListLoader.java23
-rw-r--r--main/src/cgeo/geocaching/loaders/CoordsGeocacheListLoader.java36
-rw-r--r--main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java26
-rw-r--r--main/src/cgeo/geocaching/loaders/KeywordGeocacheListLoader.java23
-rw-r--r--main/src/cgeo/geocaching/loaders/NextPageGeocacheListLoader.java22
-rw-r--r--main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java26
-rw-r--r--main/src/cgeo/geocaching/loaders/OwnerGeocacheListLoader.java23
-rw-r--r--main/src/cgeo/geocaching/loaders/RecaptchaReceiver.java17
-rw-r--r--main/src/cgeo/geocaching/loaders/RemoveFromHistoryLoader.java28
-rw-r--r--main/src/cgeo/geocaching/loaders/UsernameGeocacheListLoader.java23
11 files changed, 358 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..e178acc
--- /dev/null
+++ b/main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java
@@ -0,0 +1,111 @@
+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 boolean isLoading() {
+ return loading;
+ }
+
+ public AbstractSearchLoader(Context context) {
+ super(context);
+ }
+
+ public abstract SearchResult runSearch();
+
+ @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
+ SearchResult newSearch = new SearchResult(search);
+ newSearch.setUrl(search.getUrl());
+ newSearch.setViewstates(search.getViewstates());
+ search = GCParser.searchByNextPage(newSearch, 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);
+ }
+ }
+
+ 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;
+ }
+
+
+}
diff --git a/main/src/cgeo/geocaching/loaders/AddressGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/AddressGeocacheListLoader.java
new file mode 100644
index 0000000..6e4f99a
--- /dev/null
+++ b/main/src/cgeo/geocaching/loaders/AddressGeocacheListLoader.java
@@ -0,0 +1,23 @@
+package cgeo.geocaching.loaders;
+
+import cgeo.geocaching.SearchResult;
+import cgeo.geocaching.Settings;
+import cgeo.geocaching.connector.gc.GCParser;
+
+import android.content.Context;
+
+public class AddressGeocacheListLoader extends AbstractSearchLoader {
+
+ private String address;
+
+ public AddressGeocacheListLoader(Context context, String address) {
+ super(context);
+ this.address = address;
+ }
+
+ @Override
+ public SearchResult runSearch() {
+ return GCParser.searchByAddress(address, Settings.getCacheType(), Settings.isShowCaptcha(), this);
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/loaders/CoordsGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/CoordsGeocacheListLoader.java
new file mode 100644
index 0000000..2f76d49
--- /dev/null
+++ b/main/src/cgeo/geocaching/loaders/CoordsGeocacheListLoader.java
@@ -0,0 +1,36 @@
+package cgeo.geocaching.loaders;
+
+import cgeo.geocaching.SearchResult;
+import cgeo.geocaching.Settings;
+import cgeo.geocaching.connector.ConnectorFactory;
+import cgeo.geocaching.connector.capability.ISearchByCenter;
+import cgeo.geocaching.connector.gc.GCParser;
+import cgeo.geocaching.geopoint.Geopoint;
+
+import android.content.Context;
+
+public class CoordsGeocacheListLoader extends AbstractSearchLoader {
+ private Geopoint coords;
+
+ public CoordsGeocacheListLoader(Context context, Geopoint coords) {
+ super(context);
+ this.coords = coords;
+ }
+
+ @Override
+ public SearchResult runSearch() {
+ SearchResult search = GCParser.searchByCoords(coords, Settings.getCacheType(), Settings.isShowCaptcha(), this);
+
+ for (ISearchByCenter centerConn : ConnectorFactory.getSearchByCenterConnectors()) {
+ if (centerConn.isActivated()) {
+ SearchResult temp = centerConn.searchByCenter(coords);
+ if (temp != null) {
+ search.addGeocodes(temp.getGeocodes());
+ }
+ }
+ }
+
+ return search;
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java
new file mode 100644
index 0000000..59a5726
--- /dev/null
+++ b/main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java
@@ -0,0 +1,26 @@
+package cgeo.geocaching.loaders;
+
+import cgeo.geocaching.SearchResult;
+import cgeo.geocaching.Settings;
+import cgeo.geocaching.cgData;
+import cgeo.geocaching.enumerations.CacheType;
+import cgeo.geocaching.geopoint.Geopoint;
+
+import android.content.Context;
+
+public class HistoryGeocacheListLoader extends AbstractSearchLoader {
+
+
+ private Geopoint coords;
+
+ public HistoryGeocacheListLoader(Context context, Geopoint coords) {
+ super(context);
+ this.coords = coords;
+ }
+
+ @Override
+ public SearchResult runSearch() {
+ return cgData.getHistoryOfCaches(true, coords != null ? Settings.getCacheType() : CacheType.ALL);
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/loaders/KeywordGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/KeywordGeocacheListLoader.java
new file mode 100644
index 0000000..5f05e24
--- /dev/null
+++ b/main/src/cgeo/geocaching/loaders/KeywordGeocacheListLoader.java
@@ -0,0 +1,23 @@
+package cgeo.geocaching.loaders;
+
+import cgeo.geocaching.SearchResult;
+import cgeo.geocaching.Settings;
+import cgeo.geocaching.connector.gc.GCParser;
+
+import android.content.Context;
+
+public class KeywordGeocacheListLoader extends AbstractSearchLoader {
+
+ private String keyword;
+
+ public KeywordGeocacheListLoader(Context context, String keyword) {
+ super(context);
+ this.keyword = keyword;
+ }
+
+ @Override
+ public SearchResult runSearch() {
+ return GCParser.searchByKeyword(keyword, Settings.getCacheType(), Settings.isShowCaptcha(), this);
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/loaders/NextPageGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/NextPageGeocacheListLoader.java
new file mode 100644
index 0000000..b05cc25
--- /dev/null
+++ b/main/src/cgeo/geocaching/loaders/NextPageGeocacheListLoader.java
@@ -0,0 +1,22 @@
+package cgeo.geocaching.loaders;
+
+import cgeo.geocaching.SearchResult;
+import cgeo.geocaching.Settings;
+import cgeo.geocaching.connector.gc.GCParser;
+
+import android.content.Context;
+
+public class NextPageGeocacheListLoader extends AbstractSearchLoader {
+ private SearchResult search;
+
+ public NextPageGeocacheListLoader(Context context, SearchResult search) {
+ super(context);
+ this.search = search;
+ }
+
+ @Override
+ public SearchResult runSearch() {
+ return GCParser.searchByNextPage(search, Settings.isShowCaptcha(), this);
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java
new file mode 100644
index 0000000..48e0ae3
--- /dev/null
+++ b/main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java
@@ -0,0 +1,26 @@
+package cgeo.geocaching.loaders;
+
+import cgeo.geocaching.SearchResult;
+import cgeo.geocaching.Settings;
+import cgeo.geocaching.cgData;
+import cgeo.geocaching.geopoint.Geopoint;
+
+import android.content.Context;
+
+public class OfflineGeocacheListLoader extends AbstractSearchLoader {
+
+ private int listId;
+ private Geopoint searchCenter;
+
+ public OfflineGeocacheListLoader(Context context, Geopoint searchCenter, int listId) {
+ super(context);
+ this.searchCenter = searchCenter;
+ this.listId = listId;
+ }
+
+ @Override
+ public SearchResult runSearch() {
+ return cgData.getBatchOfStoredCaches(searchCenter, Settings.getCacheType(), listId);
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/loaders/OwnerGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/OwnerGeocacheListLoader.java
new file mode 100644
index 0000000..a7e44fd
--- /dev/null
+++ b/main/src/cgeo/geocaching/loaders/OwnerGeocacheListLoader.java
@@ -0,0 +1,23 @@
+package cgeo.geocaching.loaders;
+
+import cgeo.geocaching.SearchResult;
+import cgeo.geocaching.Settings;
+import cgeo.geocaching.connector.gc.GCParser;
+
+import android.content.Context;
+
+public class OwnerGeocacheListLoader extends AbstractSearchLoader {
+
+ private String username;
+
+ public OwnerGeocacheListLoader(Context context, String username) {
+ super(context);
+ this.username = username;
+ }
+
+ @Override
+ public SearchResult runSearch() {
+ return GCParser.searchByOwner(username, Settings.getCacheType(), Settings.isShowCaptcha(), this);
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/loaders/RecaptchaReceiver.java b/main/src/cgeo/geocaching/loaders/RecaptchaReceiver.java
new file mode 100644
index 0000000..f64bf89
--- /dev/null
+++ b/main/src/cgeo/geocaching/loaders/RecaptchaReceiver.java
@@ -0,0 +1,17 @@
+package cgeo.geocaching.loaders;
+
+public interface RecaptchaReceiver {
+
+ public String getText();
+
+ public void setText(String text);
+
+ public String getChallenge();
+
+ public void setChallenge(String challenge);
+
+ public void notifyNeed();
+
+ public void waitForUser();
+
+}
diff --git a/main/src/cgeo/geocaching/loaders/RemoveFromHistoryLoader.java b/main/src/cgeo/geocaching/loaders/RemoveFromHistoryLoader.java
new file mode 100644
index 0000000..7e9ea8f
--- /dev/null
+++ b/main/src/cgeo/geocaching/loaders/RemoveFromHistoryLoader.java
@@ -0,0 +1,28 @@
+package cgeo.geocaching.loaders;
+
+import cgeo.geocaching.SearchResult;
+import cgeo.geocaching.Settings;
+import cgeo.geocaching.cgData;
+import cgeo.geocaching.enumerations.CacheType;
+import cgeo.geocaching.geopoint.Geopoint;
+
+import android.content.Context;
+
+public class RemoveFromHistoryLoader extends AbstractSearchLoader {
+
+ private String[] selected;
+ private Geopoint coords;
+
+ public RemoveFromHistoryLoader(Context context, String[] selected, Geopoint coords) {
+ super(context);
+ this.selected = selected;
+ this.coords = coords;
+ }
+
+ @Override
+ public SearchResult runSearch() {
+ cgData.clearVisitDate(selected);
+ return cgData.getHistoryOfCaches(true, coords != null ? Settings.getCacheType() : CacheType.ALL);
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/loaders/UsernameGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/UsernameGeocacheListLoader.java
new file mode 100644
index 0000000..e613d5a
--- /dev/null
+++ b/main/src/cgeo/geocaching/loaders/UsernameGeocacheListLoader.java
@@ -0,0 +1,23 @@
+package cgeo.geocaching.loaders;
+
+import cgeo.geocaching.SearchResult;
+import cgeo.geocaching.Settings;
+import cgeo.geocaching.connector.gc.GCParser;
+
+import android.content.Context;
+
+public class UsernameGeocacheListLoader extends AbstractSearchLoader {
+
+ private String username;
+
+ public UsernameGeocacheListLoader(Context context, String username) {
+ super(context);
+ this.username = username;
+ }
+
+ @Override
+ public SearchResult runSearch() {
+ return GCParser.searchByUsername(username, Settings.getCacheType(), Settings.isShowCaptcha(), this);
+ }
+
+}