aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2011-11-19 09:51:39 +0100
committerBananeweizen <bananeweizen@gmx.de>2011-11-19 09:51:39 +0100
commit7743c24c9616aee12305caae02740a68f86b11cc (patch)
treecb617d036b0851b271de3fbc43a75adaa187c74e
parentefe762ae85a8db89b36f0b3fe7bff37b3ae7a8e9 (diff)
downloadcgeo-7743c24c9616aee12305caae02740a68f86b11cc.zip
cgeo-7743c24c9616aee12305caae02740a68f86b11cc.tar.gz
cgeo-7743c24c9616aee12305caae02740a68f86b11cc.tar.bz2
refactoring: cgBase no longer instantiated
-rw-r--r--main/src/cgeo/geocaching/activity/AbstractActivity.java4
-rw-r--r--main/src/cgeo/geocaching/activity/AbstractListActivity.java3
-rw-r--r--main/src/cgeo/geocaching/cgBase.java82
-rw-r--r--main/src/cgeo/geocaching/cgCacheListAdapter.java6
-rw-r--r--main/src/cgeo/geocaching/cgDistanceView.java6
-rw-r--r--main/src/cgeo/geocaching/cgeocaches.java26
-rw-r--r--main/src/cgeo/geocaching/cgeodetail.java6
-rw-r--r--main/src/cgeo/geocaching/cgeopopup.java2
-rw-r--r--main/src/cgeo/geocaching/cgeotrackable.java2
-rw-r--r--main/src/cgeo/geocaching/connector/AbstractConnector.java9
-rw-r--r--main/src/cgeo/geocaching/connector/GCConnector.java2
-rw-r--r--main/src/cgeo/geocaching/connector/IConnector.java12
-rw-r--r--main/src/cgeo/geocaching/connector/opencaching/ApiOpenCachingConnector.java2
-rw-r--r--main/src/cgeo/geocaching/connector/opencaching/OkapiClient.java48
-rw-r--r--main/src/cgeo/geocaching/go4cache/Go4Cache.java6
-rw-r--r--main/src/cgeo/geocaching/maps/CGeoMap.java6
-rw-r--r--tests/src/cgeo/geocaching/cgeoApplicationTest.java25
17 files changed, 131 insertions, 116 deletions
diff --git a/main/src/cgeo/geocaching/activity/AbstractActivity.java b/main/src/cgeo/geocaching/activity/AbstractActivity.java
index ba3db88..0aa7f43 100644
--- a/main/src/cgeo/geocaching/activity/AbstractActivity.java
+++ b/main/src/cgeo/geocaching/activity/AbstractActivity.java
@@ -20,7 +20,6 @@ public abstract class AbstractActivity extends Activity implements IAbstractActi
protected cgeoapplication app = null;
protected Resources res = null;
- protected cgBase base = null;
protected SharedPreferences prefs = null;
protected AbstractActivity() {
@@ -75,7 +74,8 @@ public abstract class AbstractActivity extends Activity implements IAbstractActi
res = this.getResources();
app = (cgeoapplication) this.getApplication();
prefs = getSharedPreferences(Settings.preferences, Context.MODE_PRIVATE);
- base = cgBase.getInstance(app);
+
+ cgBase.initialize(app);
// Restore cookie store if needed
cgBase.restoreCookieStore(Settings.getCookieStore());
diff --git a/main/src/cgeo/geocaching/activity/AbstractListActivity.java b/main/src/cgeo/geocaching/activity/AbstractListActivity.java
index e400cdd..a1c7596 100644
--- a/main/src/cgeo/geocaching/activity/AbstractListActivity.java
+++ b/main/src/cgeo/geocaching/activity/AbstractListActivity.java
@@ -21,7 +21,6 @@ public abstract class AbstractListActivity extends ListActivity implements
protected cgeoapplication app = null;
protected Resources res = null;
- protected cgBase base = null;
protected SharedPreferences prefs = null;
protected AbstractListActivity() {
@@ -72,7 +71,7 @@ public abstract class AbstractListActivity extends ListActivity implements
res = this.getResources();
app = (cgeoapplication) this.getApplication();
prefs = getSharedPreferences(Settings.preferences, Context.MODE_PRIVATE);
- base = cgBase.getInstance(app);
+ cgBase.initialize(app);
}
final public void setTitle(final String title) {
diff --git a/main/src/cgeo/geocaching/cgBase.java b/main/src/cgeo/geocaching/cgBase.java
index 1acaf87..6e47828 100644
--- a/main/src/cgeo/geocaching/cgBase.java
+++ b/main/src/cgeo/geocaching/cgBase.java
@@ -140,7 +140,7 @@ public class cgBase {
public static final double deg2rad = Math.PI / 180;
public static final double rad2deg = 180 / Math.PI;
public static final float erad = 6371.0f;
- public String version = null;
+ public static String version = null;
/**
* FIXME: browser id should become part of settings (where it can be created more easily depending on the current
@@ -148,9 +148,8 @@ public class cgBase {
*/
private static String idBrowser = "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.86 Safari/533.4";
- final private cgeoapplication app;
private static Context context;
- final private Resources res;
+ private static Resources res;
final private static Map<String, Integer> gcIcons = new HashMap<String, Integer>();
@@ -226,23 +225,14 @@ public class cgBase {
logTypes0.put("announcement", LOG_ANNOUNCEMENT); // unknown ID; used number doesn't match any GC.com's ID
}
- private static cgBase instance;
-
- public static cgBase getInstance(final cgeoapplication app) {
- if (instance == null) {
- synchronized (cgBase.class) {
- if (instance == null) {
- instance = new cgBase(app);
- }
- }
- }
- return instance;
+ private cgBase() {
+ //initialize(app);
+ throw new UnsupportedOperationException(); // static class, not to be instantiated
}
- private cgBase(final cgeoapplication app) {
- this.app = app;
+ public static void initialize(final cgeoapplication app) {
context = app.getBaseContext();
- res = app.getBaseContext().getResources();
+ res = context.getResources();
// setup cache type mappings
@@ -1836,7 +1826,7 @@ public class cgBase {
params.put("tx", cacheType != null ? cacheType.guid : CacheType.ALL_GUID);
}
- public cgSearch searchByNextPage(cgSearchThread thread, final cgSearch search, int reason, boolean showCaptcha) {
+ public static cgSearch searchByNextPage(cgSearchThread thread, final cgSearch search, int reason, boolean showCaptcha) {
final String[] viewstates = cgeoapplication.getViewstates(search);
final String url = cgeoapplication.getUrl(search);
@@ -1892,12 +1882,12 @@ public class cgBase {
cgeoapplication.addGeocode(search, cache.getGeocode());
}
- app.addSearch(caches.cacheList, reason);
+ cgeoapplication.getInstance().addSearch(caches.cacheList, reason);
return search;
}
- public cgSearch searchByGeocode(final String geocode, final String guid, final int reason, final boolean forceReload, final CancellableHandler handler) {
+ public static cgSearch searchByGeocode(final String geocode, final String guid, final int reason, final boolean forceReload, final CancellableHandler handler) {
final cgSearch search = new cgSearch();
if (StringUtils.isBlank(geocode) && StringUtils.isBlank(guid)) {
@@ -1905,6 +1895,7 @@ public class cgBase {
return null;
}
+ cgeoapplication app = cgeoapplication.getInstance();
if (!forceReload && reason == 0 && (app.isOffline(geocode, guid) || app.isThere(geocode, guid, true, true))) {
final String realGeocode = StringUtils.isNotBlank(geocode) ? geocode : app.getGeocode(guid);
search.addGeocode(realGeocode);
@@ -1913,28 +1904,21 @@ public class cgBase {
// if we have no geocode, we can't dynamically select the handler, but must explicitly use GC
if (geocode == null && guid != null) {
- return GCConnector.getInstance().searchByGeocode(this, geocode, guid, app, search, reason, handler);
+ return GCConnector.getInstance().searchByGeocode(geocode, guid, app, search, reason, handler);
}
- return ConnectorFactory.getConnector(geocode).searchByGeocode(this, geocode, guid, app, search, reason, handler);
+ return ConnectorFactory.getConnector(geocode).searchByGeocode(geocode, guid, app, search, reason, handler);
}
- public cgSearch searchByOffline(final Geopoint coords, final CacheType cacheType, final int list) {
- if (app == null) {
- Log.e(Settings.tag, "cgeoBase.searchByOffline: No application found");
- return null;
- }
+ public static cgSearch searchByOffline(final Geopoint coords, final CacheType cacheType, final int list) {
+ cgeoapplication app = cgeoapplication.getInstance();
final cgSearch search = app.getBatchOfStoredCaches(true, coords, cacheType, list);
search.totalCnt = app.getAllStoredCachesCount(true, cacheType, list);
return search;
}
- public cgSearch searchByHistory(final CacheType cacheType) {
- if (app == null) {
- Log.e(Settings.tag, "cgeoBase.searchByHistory: No application found");
- return null;
- }
-
+ public static cgSearch searchByHistory(final CacheType cacheType) {
+ final cgeoapplication app = cgeoapplication.getInstance();
final cgSearch search = app.getHistoryOfCaches(true, cacheType);
search.totalCnt = app.getAllHistoricCachesCount();
@@ -1951,7 +1935,7 @@ public class cgBase {
* the parameters to add to the request URI
* @return
*/
- private cgSearch searchByAny(final cgSearchThread thread, final CacheType cacheType, final boolean my, final int reason, final boolean showCaptcha, final Parameters params) {
+ private static cgSearch searchByAny(final cgSearchThread thread, final CacheType cacheType, final boolean my, final int reason, final boolean showCaptcha, final Parameters params) {
final cgSearch search = new cgSearch();
insertCacheType(params, cacheType);
@@ -1969,23 +1953,18 @@ public class cgBase {
Log.e(Settings.tag, "cgeoBase.searchByAny: No cache parsed");
}
- if (app == null) {
- Log.e(Settings.tag, "cgeoBase.searchByAny: No application found");
- return null;
- }
-
List<cgCache> cacheList = filterSearchResults(search, caches, Settings.isExcludeDisabledCaches(), false, null);
- app.addSearch(cacheList, reason);
+ cgeoapplication.getInstance().addSearch(cacheList, reason);
return search;
}
- public cgSearch searchByCoords(final cgSearchThread thread, final Geopoint coords, final CacheType cacheType, final int reason, final boolean showCaptcha) {
+ public static cgSearch searchByCoords(final cgSearchThread thread, final Geopoint coords, final CacheType cacheType, final int reason, final boolean showCaptcha) {
final Parameters params = new Parameters("lat", Double.toString(coords.getLatitude()), "lng", Double.toString(coords.getLongitude()));
return searchByAny(thread, cacheType, false, reason, showCaptcha, params);
}
- public cgSearch searchByKeyword(final cgSearchThread thread, final String keyword, final CacheType cacheType, final int reason, final boolean showCaptcha) {
+ public static cgSearch searchByKeyword(final cgSearchThread thread, final String keyword, final CacheType cacheType, final int reason, final boolean showCaptcha) {
if (StringUtils.isBlank(keyword)) {
Log.e(Settings.tag, "cgeoBase.searchByKeyword: No keyword given");
return null;
@@ -1995,7 +1974,7 @@ public class cgBase {
return searchByAny(thread, cacheType, false, reason, showCaptcha, params);
}
- public cgSearch searchByUsername(final cgSearchThread thread, final String userName, final CacheType cacheType, final int reason, final boolean showCaptcha) {
+ public static cgSearch searchByUsername(final cgSearchThread thread, final String userName, final CacheType cacheType, final int reason, final boolean showCaptcha) {
if (StringUtils.isBlank(userName)) {
Log.e(Settings.tag, "cgeoBase.searchByUsername: No user name given");
return null;
@@ -2012,7 +1991,7 @@ public class cgBase {
return searchByAny(thread, cacheType, my, reason, showCaptcha, params);
}
- public cgSearch searchByOwner(final cgSearchThread thread, final String userName, final CacheType cacheType, final int reason, final boolean showCaptcha) {
+ public static cgSearch searchByOwner(final cgSearchThread thread, final String userName, final CacheType cacheType, final int reason, final boolean showCaptcha) {
if (StringUtils.isBlank(userName)) {
Log.e(Settings.tag, "cgeoBase.searchByOwner: No user name given");
return null;
@@ -2022,7 +2001,7 @@ public class cgBase {
return searchByAny(thread, cacheType, false, reason, showCaptcha, params);
}
- public cgSearch searchByViewport(final String userToken, final Viewport viewport) {
+ public static cgSearch searchByViewport(final String userToken, final Viewport viewport) {
final cgSearch search = new cgSearch();
String page = null;
@@ -2045,14 +2024,9 @@ public class cgBase {
Log.e(Settings.tag, "cgeoBase.searchByViewport: No cache parsed");
}
- if (app == null) {
- Log.e(Settings.tag, "cgeoBase.searchByViewport: No application found");
- return null;
- }
-
List<cgCache> cacheList = filterSearchResults(search, caches, Settings.isExcludeDisabledCaches(), Settings.isExcludeMyCaches(), Settings.getCacheType());
- app.addSearch(cacheList, 0);
+ cgeoapplication.getInstance().addSearch(cacheList, 0);
return search;
}
@@ -2102,7 +2076,7 @@ public class cgBase {
return cacheList;
}
- public cgTrackable searchTrackable(final String geocode, final String guid, final String id) {
+ public static cgTrackable searchTrackable(final String geocode, final String guid, final String id) {
cgTrackable trackable = new cgTrackable();
if (StringUtils.isBlank(geocode) && StringUtils.isBlank(guid) && StringUtils.isBlank(id)) {
@@ -2126,7 +2100,7 @@ public class cgBase {
return trackable;
}
- trackable = parseTrackable(page, app);
+ trackable = parseTrackable(page, cgeoapplication.getInstance());
if (trackable == null) {
Log.e(Settings.tag, "cgeoBase.searchTrackable: No trackable parsed");
return trackable;
@@ -2763,7 +2737,7 @@ public class cgBase {
return path.delete();
}
- public void storeCache(cgeoapplication app, Activity activity, cgCache origCache, String geocode, int listId, CancellableHandler handler) {
+ public static void storeCache(cgeoapplication app, Activity activity, cgCache origCache, String geocode, int listId, CancellableHandler handler) {
try {
cgCache cache;
// get cache details, they may not yet be complete
diff --git a/main/src/cgeo/geocaching/cgCacheListAdapter.java b/main/src/cgeo/geocaching/cgCacheListAdapter.java
index 0e7e368..0e2320d 100644
--- a/main/src/cgeo/geocaching/cgCacheListAdapter.java
+++ b/main/src/cgeo/geocaching/cgCacheListAdapter.java
@@ -52,7 +52,6 @@ public class cgCacheListAdapter extends ArrayAdapter<cgCache> {
final private List<cgCache> list;
private cgCacheView holder = null;
private LayoutInflater inflater = null;
- final private cgBase base;
private CacheComparator statComparator = null;
private boolean historic = false;
private Geopoint coords = null;
@@ -73,12 +72,11 @@ public class cgCacheListAdapter extends ArrayAdapter<cgCache> {
private cgFilter currentFilter = null;
private List<cgCache> originalList = null;
- public cgCacheListAdapter(final Activity activity, final List<cgCache> list, final cgBase base) {
+ public cgCacheListAdapter(final Activity activity, final List<cgCache> list) {
super(activity, 0, list);
this.res = activity.getResources();
this.list = list;
- this.base = base;
final DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
@@ -409,7 +407,7 @@ public class cgCacheListAdapter extends ArrayAdapter<cgCache> {
holder.checkbox.setOnClickListener(new checkBoxListener(cache));
distances.add(holder.distance);
- holder.distance.setContent(base, cache.getCoords());
+ holder.distance.setContent(cache.getCoords());
compasses.add(holder.direction);
holder.direction.setContent(cache.getCoords());
diff --git a/main/src/cgeo/geocaching/cgDistanceView.java b/main/src/cgeo/geocaching/cgDistanceView.java
index 33db51e..704a655 100644
--- a/main/src/cgeo/geocaching/cgDistanceView.java
+++ b/main/src/cgeo/geocaching/cgDistanceView.java
@@ -7,7 +7,6 @@ import android.util.AttributeSet;
import android.widget.TextView;
public class cgDistanceView extends TextView {
- private cgBase base = null;
private Geopoint cacheCoords = null;
public cgDistanceView(Context context) {
@@ -22,13 +21,12 @@ public class cgDistanceView extends TextView {
super(context, attrs, defStyle);
}
- public void setContent(cgBase baseIn, final Geopoint cacheCoordsIn) {
- base = baseIn;
+ public void setContent(final Geopoint cacheCoordsIn) {
cacheCoords = cacheCoordsIn;
}
public void update(final Geopoint coords) {
- if (cacheCoords == null || coords == null || base == null) {
+ if (cacheCoords == null || coords == null) {
return;
}
setText(cgBase.getHumanDistance(coords.distanceTo(cacheCoords)));
diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/cgeocaches.java
index 30b1758..79865b0 100644
--- a/main/src/cgeo/geocaching/cgeocaches.java
+++ b/main/src/cgeo/geocaching/cgeocaches.java
@@ -715,7 +715,7 @@ public class cgeocaches extends AbstractListActivity {
// refresh standard list if it has changed (new caches downloaded)
if (type == CacheListType.OFFLINE && listId == cgList.STANDARD_LIST_ID && search != null) {
- cgSearch newSearch = base.searchByOffline(coords, cachetype, listId);
+ cgSearch newSearch = cgBase.searchByOffline(coords, cachetype, listId);
if (newSearch != null && newSearch.totalCnt != search.totalCnt) {
refreshCurrentList();
}
@@ -1296,7 +1296,7 @@ public class cgeocaches extends AbstractListActivity {
if (adapterInfo != null) {
// create a search for a single cache (as if in details view)
final cgCache cache = getCacheFromAdapter(adapterInfo);
- final cgSearch singleSearch = base.searchByGeocode(cache.getGeocode(), null, 0, false, null);
+ final cgSearch singleSearch = cgBase.searchByGeocode(cache.getGeocode(), null, 0, false, null);
if (NavigationAppFactory.onMenuItemSelected(item, geo, this,
res, cache, singleSearch, null, null)) {
@@ -1365,7 +1365,7 @@ public class cgeocaches extends AbstractListActivity {
list.setLongClickable(true);
list.addFooterView(listFooter);
- adapter = new cgCacheListAdapter(this, cacheList, base);
+ adapter = new cgCacheListAdapter(this, cacheList);
setListAdapter(adapter);
} else {
adapter.notifyDataSetChanged();
@@ -1772,9 +1772,9 @@ public class cgeocaches extends AbstractListActivity {
@Override
public void run() {
if (coords != null) {
- search = base.searchByOffline(coords, Settings.getCacheType(), listId);
+ search = cgBase.searchByOffline(coords, Settings.getCacheType(), listId);
} else {
- search = base.searchByOffline(null, null, cgList.STANDARD_LIST_ID);
+ search = cgBase.searchByOffline(null, null, cgList.STANDARD_LIST_ID);
}
handler.sendMessage(new Message());
}
@@ -1790,7 +1790,7 @@ public class cgeocaches extends AbstractListActivity {
@Override
public void run() {
- search = base.searchByHistory(coords != null ? Settings.getCacheType() : null);
+ search = cgBase.searchByHistory(coords != null ? Settings.getCacheType() : null);
handler.sendMessage(new Message());
}
}
@@ -1805,7 +1805,7 @@ public class cgeocaches extends AbstractListActivity {
@Override
public void run() {
- search = base.searchByNextPage(this, search, 0, Settings.isShowCaptcha());
+ search = cgBase.searchByNextPage(this, search, 0, Settings.isShowCaptcha());
handler.sendMessage(new Message());
}
@@ -1834,7 +1834,7 @@ public class cgeocaches extends AbstractListActivity {
@Override
public void run() {
- search = base.searchByCoords(this, coords, cacheType, 0, Settings.isShowCaptcha());
+ search = cgBase.searchByCoords(this, coords, cacheType, 0, Settings.isShowCaptcha());
handler.sendMessage(new Message());
}
@@ -1863,7 +1863,7 @@ public class cgeocaches extends AbstractListActivity {
@Override
public void run() {
- search = base.searchByKeyword(this, keyword, cacheType, 0, Settings.isShowCaptcha());
+ search = cgBase.searchByKeyword(this, keyword, cacheType, 0, Settings.isShowCaptcha());
handler.sendMessage(new Message());
}
}
@@ -1891,7 +1891,7 @@ public class cgeocaches extends AbstractListActivity {
@Override
public void run() {
- search = base.searchByUsername(this, username, cacheType, 0, Settings.isShowCaptcha());
+ search = cgBase.searchByUsername(this, username, cacheType, 0, Settings.isShowCaptcha());
handler.sendMessage(new Message());
}
}
@@ -1925,7 +1925,7 @@ public class cgeocaches extends AbstractListActivity {
params.put("cachetype", cachetype.id);
}
- search = base.searchByOwner(this, username, cacheType, 0, Settings.isShowCaptcha());
+ search = cgBase.searchByOwner(this, username, cacheType, 0, Settings.isShowCaptcha());
handler.sendMessage(new Message());
}
@@ -1998,7 +1998,7 @@ public class cgeocaches extends AbstractListActivity {
}
detailProgress++;
- base.storeCache(app, cgeocaches.this, cache, null, reason, null);
+ cgBase.storeCache(app, cgeocaches.this, cache, null, reason, null);
handler.sendEmptyMessage(cacheList.indexOf(cache));
@@ -2073,7 +2073,7 @@ public class cgeocaches extends AbstractListActivity {
handler.sendMessage(mes);
yield();
- base.storeCache(app, cgeocaches.this, null, GCcode,
+ cgBase.storeCache(app, cgeocaches.this, null, GCcode,
reason, null);
Message mes1 = new Message();
diff --git a/main/src/cgeo/geocaching/cgeodetail.java b/main/src/cgeo/geocaching/cgeodetail.java
index a9663fa..1757e80 100644
--- a/main/src/cgeo/geocaching/cgeodetail.java
+++ b/main/src/cgeo/geocaching/cgeodetail.java
@@ -1345,7 +1345,7 @@ public class cgeodetail extends AbstractActivity {
if (StringUtils.isBlank(geocode) && StringUtils.isBlank(guid)) {
return;
}
- search = base.searchByGeocode(geocode, StringUtils.isBlank(geocode) ? guid : null, 0, false, handler);
+ search = cgBase.searchByGeocode(geocode, StringUtils.isBlank(geocode) ? guid : null, 0, false, handler);
handler.sendMessage(new Message());
}
}
@@ -1722,7 +1722,7 @@ public class cgeodetail extends AbstractActivity {
@Override
public void run() {
int reason = cache.getReason() > 1 ? cache.getReason() : 1;
- base.storeCache(app, cgeodetail.this, cache, null, reason, handler);
+ cgBase.storeCache(app, cgeodetail.this, cache, null, reason, handler);
}
}
@@ -1736,7 +1736,7 @@ public class cgeodetail extends AbstractActivity {
@Override
public void run() {
app.removeCacheFromCache(geocode);
- search = base.searchByGeocode(cache.getGeocode(), null, 0, true, handler);
+ search = cgBase.searchByGeocode(cache.getGeocode(), null, 0, true, handler);
handler.sendEmptyMessage(0);
}
diff --git a/main/src/cgeo/geocaching/cgeopopup.java b/main/src/cgeo/geocaching/cgeopopup.java
index a7d009a..719f05a 100644
--- a/main/src/cgeo/geocaching/cgeopopup.java
+++ b/main/src/cgeo/geocaching/cgeopopup.java
@@ -576,7 +576,7 @@ public class cgeopopup extends AbstractActivity {
@Override
public void run() {
- base.storeCache(app, cgeopopup.this, cache, null, 1, handler);
+ cgBase.storeCache(app, cgeopopup.this, cache, null, 1, handler);
}
}
diff --git a/main/src/cgeo/geocaching/cgeotrackable.java b/main/src/cgeo/geocaching/cgeotrackable.java
index e639e77..bcaa403 100644
--- a/main/src/cgeo/geocaching/cgeotrackable.java
+++ b/main/src/cgeo/geocaching/cgeotrackable.java
@@ -478,7 +478,7 @@ public class cgeotrackable extends AbstractActivity {
@Override
public void run() {
- trackable = base.searchTrackable(geocode, guid, id);
+ trackable = cgBase.searchTrackable(geocode, guid, id);
handler.sendMessage(new Message());
}
}
diff --git a/main/src/cgeo/geocaching/connector/AbstractConnector.java b/main/src/cgeo/geocaching/connector/AbstractConnector.java
index a0ed628..3ba9ae2 100644
--- a/main/src/cgeo/geocaching/connector/AbstractConnector.java
+++ b/main/src/cgeo/geocaching/connector/AbstractConnector.java
@@ -1,9 +1,9 @@
package cgeo.geocaching.connector;
-import cgeo.geocaching.cgBase;
import cgeo.geocaching.cgCache;
import cgeo.geocaching.cgSearch;
import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.utils.CancellableHandler;
public abstract class AbstractConnector implements IConnector {
@@ -44,7 +44,12 @@ public abstract class AbstractConnector implements IConnector {
}
@Override
- public cgSearch searchByGeocode(cgBase base, String geocode, String guid, cgeoapplication app, cgSearch search, int reason, CancellableHandler handler) {
+ public cgSearch searchByCoordinate(Geopoint center) {
+ return null;
+ }
+
+ @Override
+ public cgSearch searchByGeocode(String geocode, String guid, cgeoapplication app, cgSearch search, int reason, CancellableHandler handler) {
return null;
}
diff --git a/main/src/cgeo/geocaching/connector/GCConnector.java b/main/src/cgeo/geocaching/connector/GCConnector.java
index 8419e56..a6ff9e4 100644
--- a/main/src/cgeo/geocaching/connector/GCConnector.java
+++ b/main/src/cgeo/geocaching/connector/GCConnector.java
@@ -79,7 +79,7 @@ public class GCConnector extends AbstractConnector {
}
@Override
- public cgSearch searchByGeocode(final cgBase base, final String geocode, final String guid, final cgeoapplication app, final cgSearch search, final int reason, final CancellableHandler handler) {
+ public cgSearch searchByGeocode(final String geocode, final String guid, final cgeoapplication app, final cgSearch search, final int reason, final CancellableHandler handler) {
final Parameters params = new Parameters("decrypt", "y");
if (StringUtils.isNotBlank(geocode)) {
params.put("wp", geocode);
diff --git a/main/src/cgeo/geocaching/connector/IConnector.java b/main/src/cgeo/geocaching/connector/IConnector.java
index 89a94a1..c110377 100644
--- a/main/src/cgeo/geocaching/connector/IConnector.java
+++ b/main/src/cgeo/geocaching/connector/IConnector.java
@@ -1,9 +1,9 @@
package cgeo.geocaching.connector;
-import cgeo.geocaching.cgBase;
import cgeo.geocaching.cgCache;
import cgeo.geocaching.cgSearch;
import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.utils.CancellableHandler;
public interface IConnector {
@@ -75,5 +75,13 @@ public interface IConnector {
*/
public boolean supportsCachesAround();
- public cgSearch searchByGeocode(final cgBase base, final String geocode, final String guid, final cgeoapplication app, final cgSearch search, final int reason, final CancellableHandler handler);
+ public cgSearch searchByGeocode(final String geocode, final String guid, final cgeoapplication app, final cgSearch search, final int reason, final CancellableHandler handler);
+
+ /**
+ * search caches by coordinate. must be implemented if {@link supportsCachesAround} returns <code>true</true>
+ *
+ * @param center
+ * @return
+ */
+ public cgSearch searchByCoordinate(final Geopoint center);
}
diff --git a/main/src/cgeo/geocaching/connector/opencaching/ApiOpenCachingConnector.java b/main/src/cgeo/geocaching/connector/opencaching/ApiOpenCachingConnector.java
index f4c8c14..cb5c76b 100644
--- a/main/src/cgeo/geocaching/connector/opencaching/ApiOpenCachingConnector.java
+++ b/main/src/cgeo/geocaching/connector/opencaching/ApiOpenCachingConnector.java
@@ -36,7 +36,7 @@ public class ApiOpenCachingConnector extends OpenCachingConnector {
}
@Override
- public cgSearch searchByGeocode(final cgBase base, final String geocode, final String guid, final cgeoapplication app, final cgSearch search, final int reason, final CancellableHandler handler) {
+ public cgSearch searchByGeocode(final String geocode, final String guid, final cgeoapplication app, final cgSearch search, final int reason, final CancellableHandler handler) {
final cgCache cache = OkapiClient.getCache(geocode);
if (cache == null) {
return null;
diff --git a/main/src/cgeo/geocaching/connector/opencaching/OkapiClient.java b/main/src/cgeo/geocaching/connector/opencaching/OkapiClient.java
index c1d4586..01cb6bf 100644
--- a/main/src/cgeo/geocaching/connector/opencaching/OkapiClient.java
+++ b/main/src/cgeo/geocaching/connector/opencaching/OkapiClient.java
@@ -9,6 +9,8 @@ import cgeo.geocaching.connector.ConnectorFactory;
import cgeo.geocaching.connector.IConnector;
import cgeo.geocaching.enumerations.CacheSize;
import cgeo.geocaching.enumerations.CacheType;
+import cgeo.geocaching.geopoint.Geopoint;
+import cgeo.geocaching.geopoint.GeopointFormatter;
import cgeo.geocaching.geopoint.GeopointParser;
import org.apache.commons.lang3.StringUtils;
@@ -59,9 +61,11 @@ final public class OkapiClient {
private static final String SERVICE_CACHE = "/okapi/services/caches/geocache";
private static final String SERVICE_CACHE_FIELDS = "code|name|location|type|status|owner|founds|notfounds|size|difficulty|terrain|rating|rating_votes|recommendations|description|hint|images|latest_logs|date_hidden";
+ private static final String SERVICE_NEAREST = "/okapi/services/caches/search/nearest";
+
public static cgCache getCache(final String geoCode) {
final Parameters params = new Parameters("cache_code", geoCode, "fields", SERVICE_CACHE_FIELDS);
- final JSONObject data = request(geoCode, SERVICE_CACHE, params);
+ final JSONObject data = request(ConnectorFactory.getConnector(geoCode), SERVICE_CACHE, params);
if (data == null) {
return null;
@@ -75,6 +79,45 @@ final public class OkapiClient {
return cache;
}
+ public static List<cgCache> getCachesAround(final Geopoint center, IConnector connector) {
+ String centerString = GeopointFormatter.format(GeopointFormatter.Format.LAT_DECDEGREE_RAW, center) + "|" + GeopointFormatter.format(GeopointFormatter.Format.LON_DECDEGREE_RAW, center);
+ final Parameters params = new Parameters("center", centerString);
+ final JSONObject data = request(connector, SERVICE_NEAREST, params);
+
+ if (data == null) {
+ return null;
+ }
+
+ return parseCaches(data);
+ }
+
+ private static List<cgCache> parseCaches(final JSONObject response) {
+ try {
+ final JSONArray cachesResponse = response.getJSONArray("results");
+ if (cachesResponse != null) {
+ ArrayList<String> geocodes = new ArrayList<String>(cachesResponse.length());
+ for (int i = 0; i < cachesResponse.length(); i++) {
+ String geocode = cachesResponse.getString(i);
+ if (StringUtils.isNotBlank(geocode)) {
+ geocodes.add(geocode);
+ }
+ }
+ List<cgCache> caches = new ArrayList<cgCache>(geocodes.size());
+ for (String geocode : geocodes) {
+ cgCache cache = getCache(geocode);
+ if (cache != null) {
+ caches.add(cache);
+ }
+ }
+ return caches;
+ }
+ } catch (JSONException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return null;
+ }
+
private static cgCache parseCache(final JSONObject response) {
final cgCache cache = new cgCache();
try {
@@ -247,8 +290,7 @@ final public class OkapiClient {
return CacheType.UNKNOWN;
}
- private static JSONObject request(final String geoCode, final String service, final Parameters params) {
- final IConnector connector = ConnectorFactory.getConnector(geoCode);
+ private static JSONObject request(final IConnector connector, final String service, final Parameters params) {
if (connector == null) {
return null;
}
diff --git a/main/src/cgeo/geocaching/go4cache/Go4Cache.java b/main/src/cgeo/geocaching/go4cache/Go4Cache.java
index e407b2f..98a77ba 100644
--- a/main/src/cgeo/geocaching/go4cache/Go4Cache.java
+++ b/main/src/cgeo/geocaching/go4cache/Go4Cache.java
@@ -39,7 +39,6 @@ public class Go4Cache extends Thread {
final private ArrayBlockingQueue<Geopoint> queue = new ArrayBlockingQueue<Geopoint>(1);
final private cgeoapplication app;
- final private cgBase base;
private static Go4Cache getInstance(final cgeoapplication app) {
if (null == instance) {
@@ -54,7 +53,6 @@ public class Go4Cache extends Thread {
private Go4Cache(final cgeoapplication app) {
super("Go4Cache");
this.app = app;
- base = cgBase.getInstance(app);
setPriority(Thread.MIN_PRIORITY);
}
@@ -102,8 +100,8 @@ public class Go4Cache extends Thread {
"ln", lonStr,
"a", currentAction,
"s", (CryptUtils.sha1(username + "|" + latStr + "|" + lonStr + "|" + currentAction + "|" + CryptUtils.md5("carnero: developing your dreams"))).toLowerCase());
- if (null != base.version) {
- params.put("v", base.version);
+ if (null != cgBase.version) {
+ params.put("v", cgBase.version);
}
cgBase.postRequest("http://api.go4cache.com/", params);
diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java
index ea6b19e..db4f877 100644
--- a/main/src/cgeo/geocaching/maps/CGeoMap.java
+++ b/main/src/cgeo/geocaching/maps/CGeoMap.java
@@ -96,7 +96,6 @@ public class CGeoMap extends AbstractMap implements OnDragListener, ViewFactory
private Activity activity = null;
private MapViewImpl mapView = null;
private MapControllerImpl mapController = null;
- private cgBase base = null;
private cgeoapplication app = null;
private cgGeo geo = null;
private cgDirection dir = null;
@@ -294,7 +293,6 @@ public class CGeoMap extends AbstractMap implements OnDragListener, ViewFactory
res = this.getResources();
activity = this.getActivity();
app = (cgeoapplication) activity.getApplication();
- base = cgBase.getInstance(app);
mapProvider = Settings.getMapProvider();
// reset status
@@ -1257,7 +1255,7 @@ public class CGeoMap extends AbstractMap implements OnDragListener, ViewFactory
}
final Viewport viewport = new Viewport(new Geopoint(latMin, lonMin), new Geopoint(latMax, lonMax));
- search = base.searchByViewport(token, viewport);
+ search = cgBase.searchByViewport(token, viewport);
if (search != null) {
downloaded = true;
}
@@ -1681,7 +1679,7 @@ public class CGeoMap extends AbstractMap implements OnDragListener, ViewFactory
break;
}
- base.storeCache(app, activity, null, geocode, 1, handler);
+ cgBase.storeCache(app, activity, null, geocode, 1, handler);
}
} catch (Exception e) {
Log.e(Settings.tag, "cgeocaches.LoadDetails.run: " + e.toString());
diff --git a/tests/src/cgeo/geocaching/cgeoApplicationTest.java b/tests/src/cgeo/geocaching/cgeoApplicationTest.java
index 2a8d895..a6e7fc2 100644
--- a/tests/src/cgeo/geocaching/cgeoApplicationTest.java
+++ b/tests/src/cgeo/geocaching/cgeoApplicationTest.java
@@ -17,8 +17,6 @@ import java.util.Date;
public class cgeoApplicationTest extends ApplicationTestCase<cgeoapplication> {
- private cgBase base = null;
-
public cgeoApplicationTest() {
super(cgeoapplication.class);
}
@@ -29,9 +27,6 @@ public class cgeoApplicationTest extends ApplicationTestCase<cgeoapplication> {
// init environment
createApplication();
-
- // create required c:geo objects
- base = cgBase.getInstance(this.getApplication());
}
/**
@@ -49,8 +44,8 @@ public class cgeoApplicationTest extends ApplicationTestCase<cgeoapplication> {
* Test {@link cgBase#searchTrackable(String, String, String)}
*/
@MediumTest
- public void testSearchTrackable() {
- cgTrackable tb = base.searchTrackable("TB2J1VZ", null, null);
+ public static void testSearchTrackable() {
+ cgTrackable tb = cgBase.searchTrackable("TB2J1VZ", null, null);
// fix data
assertEquals("aefffb86-099f-444f-b132-605436163aa8", tb.getGuid());
assertEquals("TB2J1VZ", tb.getGeocode());
@@ -76,8 +71,8 @@ public class cgeoApplicationTest extends ApplicationTestCase<cgeoapplication> {
* Test {@link cgBase#searchByGeocode(String, String, int, boolean, CancellableHandler)}
*/
@MediumTest
- public void testSearchByGeocode() {
- final cgSearch search = base.searchByGeocode("GC1RMM2", null, 0, true, null);
+ public static void testSearchByGeocode() {
+ final cgSearch search = cgBase.searchByGeocode("GC1RMM2", null, 0, true, null);
assertNotNull(search);
assertEquals(1, search.getGeocodes().size());
assertTrue(search.getGeocodes().contains("GC1RMM2"));
@@ -87,8 +82,8 @@ public class cgeoApplicationTest extends ApplicationTestCase<cgeoapplication> {
* Test {@link cgBase#searchByCoords(cgSearchThread, Geopoint, String, int, boolean)}
*/
@MediumTest
- public void testSearchByCoords() {
- final cgSearch search = base.searchByCoords(null, new Geopoint("N 52° 24.972 E 009° 35.647"), CacheType.MYSTERY, 0, false);
+ public static void testSearchByCoords() {
+ final cgSearch search = cgBase.searchByCoords(null, new Geopoint("N 52° 24.972 E 009° 35.647"), CacheType.MYSTERY, 0, false);
assertNotNull(search);
assertEquals(20, search.getGeocodes().size());
assertTrue(search.getGeocodes().contains("GC1RMM2"));
@@ -98,8 +93,8 @@ public class cgeoApplicationTest extends ApplicationTestCase<cgeoapplication> {
* Test {@link cgBase#searchByOwner(String, String, int, boolean, CancellableHandler)}
*/
@MediumTest
- public void testSearchByOwner() {
- final cgSearch search = base.searchByOwner(null, "blafoo", CacheType.EVENT, 0, false);
+ public static void testSearchByOwner() {
+ final cgSearch search = cgBase.searchByOwner(null, "blafoo", CacheType.EVENT, 0, false);
assertNotNull(search);
assertEquals(1, search.getGeocodes().size());
assertTrue(search.getGeocodes().contains("GC36K5E"));
@@ -109,8 +104,8 @@ public class cgeoApplicationTest extends ApplicationTestCase<cgeoapplication> {
* Test {@link cgBase#searchByUsername(String, String, int, boolean, CancellableHandler)}
*/
@MediumTest
- public void testSearchByUsername() {
- final cgSearch search = base.searchByUsername(null, "blafoo", CacheType.WEBCAM, 0, false);
+ public static void testSearchByUsername() {
+ final cgSearch search = cgBase.searchByUsername(null, "blafoo", CacheType.WEBCAM, 0, false);
assertNotNull(search);
assertEquals(3, search.totalCnt);
assertTrue(search.getGeocodes().contains("GCP0A9"));