diff options
author | Bananeweizen <bananeweizen@gmx.de> | 2011-11-19 09:51:39 +0100 |
---|---|---|
committer | Bananeweizen <bananeweizen@gmx.de> | 2011-11-19 09:51:39 +0100 |
commit | 7743c24c9616aee12305caae02740a68f86b11cc (patch) | |
tree | cb617d036b0851b271de3fbc43a75adaa187c74e | |
parent | efe762ae85a8db89b36f0b3fe7bff37b3ae7a8e9 (diff) | |
download | cgeo-7743c24c9616aee12305caae02740a68f86b11cc.zip cgeo-7743c24c9616aee12305caae02740a68f86b11cc.tar.gz cgeo-7743c24c9616aee12305caae02740a68f86b11cc.tar.bz2 |
refactoring: cgBase no longer instantiated
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")); |