aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2014-01-04 15:26:35 +0100
committerBananeweizen <bananeweizen@gmx.de>2014-01-04 15:26:35 +0100
commit114888857c816fb87d52bb703703c38021366f2e (patch)
tree1c26c5c009747d17868ed2e21d47af4e04ced2a6 /main
parente89da5864a49b4b0f05b0c2a9f62c2ffae8cafa8 (diff)
downloadcgeo-114888857c816fb87d52bb703703c38021366f2e.zip
cgeo-114888857c816fb87d52bb703703c38021366f2e.tar.gz
cgeo-114888857c816fb87d52bb703703c38021366f2e.tar.bz2
refactoring: make search by owner/finder connector capabilities
Diffstat (limited to 'main')
-rw-r--r--main/res/layout/search_activity.xml4
-rw-r--r--main/res/values-de/strings.xml3
-rw-r--r--main/res/values-fr/strings.xml3
-rw-r--r--main/res/values/strings.xml3
-rw-r--r--main/src/cgeo/geocaching/CacheListActivity.java6
-rw-r--r--main/src/cgeo/geocaching/SearchActivity.java12
-rw-r--r--main/src/cgeo/geocaching/connector/AbstractConnector.java43
-rw-r--r--main/src/cgeo/geocaching/connector/ConnectorFactory.java14
-rw-r--r--main/src/cgeo/geocaching/connector/capability/ISearchByFinder.java11
-rw-r--r--main/src/cgeo/geocaching/connector/capability/ISearchByOwner.java16
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCConnector.java14
-rw-r--r--main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java2
-rw-r--r--main/src/cgeo/geocaching/loaders/FinderGeocacheListLoader.java33
-rw-r--r--main/src/cgeo/geocaching/loaders/OwnerGeocacheListLoader.java20
-rw-r--r--main/src/cgeo/geocaching/loaders/UsernameGeocacheListLoader.java23
15 files changed, 146 insertions, 61 deletions
diff --git a/main/res/layout/search_activity.xml b/main/res/layout/search_activity.xml
index a0a699d..25f914b 100644
--- a/main/res/layout/search_activity.xml
+++ b/main/res/layout/search_activity.xml
@@ -120,13 +120,13 @@
</RelativeLayout>
<EditText
- android:id="@+id/username"
+ android:id="@+id/finder"
style="@style/edittext_full"
android:hint="@string/search_fbu_prefill"
android:imeOptions="actionGo" />
<Button
- android:id="@+id/search_username"
+ android:id="@+id/search_finder"
style="@style/button_full"
android:text="@string/search_fbu_button" />
<!-- ** -->
diff --git a/main/res/values-de/strings.xml b/main/res/values-de/strings.xml
index 65412b7..a71f81c 100644
--- a/main/res/values-de/strings.xml
+++ b/main/res/values-de/strings.xml
@@ -481,11 +481,12 @@
<string name="feature_log_images">Loggen mit angehängtem Bild</string>
<string name="feature_watch_list">Watchlist</string>
<string name="feature_own_coordinates">Modifizierte Cache-Koordinaten</string>
- <string name="feature_search_user">Suche nach Owner/Finder</string>
<string name="feature_search_keyword">Stichwortsuche</string>
<string name="feature_search_live_map">Live-Karte</string>
<string name="feature_search_center">Suche mit Koordinaten </string>
<string name="feature_search_geocode">Suche mit Geocode</string>
+ <string name="feature_search_owner">Suche nach Besitzer</string>
+ <string name="feature_search_finder">Suche nach Finder</string>
<string name="map_source_google_map">Google: Karte</string>
<string name="map_source_google_satellite">Google: Satellit</string>
<string name="map_source_osm_mapnik">OSM: Mapnik</string>
diff --git a/main/res/values-fr/strings.xml b/main/res/values-fr/strings.xml
index f5f3d2b..7b8a8d7 100644
--- a/main/res/values-fr/strings.xml
+++ b/main/res/values-fr/strings.xml
@@ -493,7 +493,8 @@
<string name="feature_log_images">Joindre des images aux entrées de journal</string>
<string name="feature_watch_list">Liste de suivi</string>
<string name="feature_own_coordinates">Stockage de coordonnées modifiées</string>
- <string name="feature_search_user">Recherche par propriétaire/découvreur</string>
+ <string name="feature_search_owner">Recherche par propriétaire</string>
+ <string name="feature_search_finder">Recherche par découvreur</string>
<string name="feature_search_keyword">Recherche par mot clé</string>
<string name="feature_search_live_map">Carte active</string>
<string name="feature_search_center">Recherche par position</string>
diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml
index 74c92f2..7b40811 100644
--- a/main/res/values/strings.xml
+++ b/main/res/values/strings.xml
@@ -540,11 +540,12 @@
<string name="feature_log_images">Attach images to logs</string>
<string name="feature_watch_list">Watch list</string>
<string name="feature_own_coordinates">Storing of modified coordinates</string>
- <string name="feature_search_user">Search by owner/finder</string>
<string name="feature_search_keyword">Search by keyword</string>
<string name="feature_search_live_map">Live map</string>
<string name="feature_search_center">Search by position</string>
<string name="feature_search_geocode">Search by geocode</string>
+ <string name="feature_search_owner">Search by owner</string>
+ <string name="feature_search_finder">Search by finder</string>
<!-- map sources -->
<string name="map_source_google_map">Google: Map</string>
diff --git a/main/src/cgeo/geocaching/CacheListActivity.java b/main/src/cgeo/geocaching/CacheListActivity.java
index 5b6527a..223493b 100644
--- a/main/src/cgeo/geocaching/CacheListActivity.java
+++ b/main/src/cgeo/geocaching/CacheListActivity.java
@@ -30,7 +30,7 @@ import cgeo.geocaching.loaders.OfflineGeocacheListLoader;
import cgeo.geocaching.loaders.OwnerGeocacheListLoader;
import cgeo.geocaching.loaders.PocketGeocacheListLoader;
import cgeo.geocaching.loaders.RemoveFromHistoryLoader;
-import cgeo.geocaching.loaders.UsernameGeocacheListLoader;
+import cgeo.geocaching.loaders.FinderGeocacheListLoader;
import cgeo.geocaching.maps.CGeoMap;
import cgeo.geocaching.network.Cookies;
import cgeo.geocaching.network.Network;
@@ -1643,10 +1643,10 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
loader = new AddressGeocacheListLoader(app, address);
}
break;
- case USERNAME:
+ case FINDER:
final String username = extras.getString(Intents.EXTRA_USERNAME);
rememberTerm(username);
- loader = new UsernameGeocacheListLoader(app, username);
+ loader = new FinderGeocacheListLoader(app, username);
break;
case OWNER:
final String ownerName = extras.getString(Intents.EXTRA_USERNAME);
diff --git a/main/src/cgeo/geocaching/SearchActivity.java b/main/src/cgeo/geocaching/SearchActivity.java
index 9952e18..0648073 100644
--- a/main/src/cgeo/geocaching/SearchActivity.java
+++ b/main/src/cgeo/geocaching/SearchActivity.java
@@ -48,8 +48,8 @@ public class SearchActivity extends AbstractActivity {
@InjectView(R.id.keyword) protected EditText keywordEditText;
@InjectView(R.id.search_keyword) protected Button buttonSearchKeyword;
- @InjectView(R.id.username) protected EditText userNameEditText;
- @InjectView(R.id.search_username) protected Button buttonSearchUserName;
+ @InjectView(R.id.finder) protected EditText finderNameEditText;
+ @InjectView(R.id.search_finder) protected Button buttonSearchFinder;
@InjectView(R.id.owner) protected EditText ownerNameEditText;
@InjectView(R.id.search_owner) protected Button buttonSearchOwner;
@@ -192,11 +192,11 @@ public class SearchActivity extends AbstractActivity {
}
});
- setSearchAction(userNameEditText, buttonSearchUserName, new Runnable() {
+ setSearchAction(finderNameEditText, buttonSearchFinder, new Runnable() {
@Override
public void run() {
- findByUsernameFn();
+ findByFinderFn();
}
});
@@ -297,8 +297,8 @@ public class SearchActivity extends AbstractActivity {
startActivity(addressesIntent);
}
- public final void findByUsernameFn() {
- final String usernameText = StringUtils.trim(userNameEditText.getText().toString());
+ public final void findByFinderFn() {
+ final String usernameText = StringUtils.trim(finderNameEditText.getText().toString());
if (StringUtils.isBlank(usernameText)) {
Dialogs.message(this, R.string.warn_search_help_title, R.string.warn_search_help_user);
diff --git a/main/src/cgeo/geocaching/connector/AbstractConnector.java b/main/src/cgeo/geocaching/connector/AbstractConnector.java
index 7913882..53a3bcb 100644
--- a/main/src/cgeo/geocaching/connector/AbstractConnector.java
+++ b/main/src/cgeo/geocaching/connector/AbstractConnector.java
@@ -8,8 +8,10 @@ import cgeo.geocaching.LogCacheActivity;
import cgeo.geocaching.R;
import cgeo.geocaching.connector.UserAction.Context;
import cgeo.geocaching.connector.capability.ISearchByCenter;
+import cgeo.geocaching.connector.capability.ISearchByFinder;
import cgeo.geocaching.connector.capability.ISearchByGeocode;
import cgeo.geocaching.connector.capability.ISearchByKeyword;
+import cgeo.geocaching.connector.capability.ISearchByOwner;
import cgeo.geocaching.connector.capability.ISearchByViewPort;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.LogType;
@@ -217,6 +219,8 @@ public abstract class AbstractConnector implements IConnector {
addCapability(list, ISearchByKeyword.class, R.string.feature_search_keyword);
addCapability(list, ISearchByCenter.class, R.string.feature_search_center);
addCapability(list, ISearchByGeocode.class, R.string.feature_search_geocode);
+ addCapability(list, ISearchByOwner.class, R.string.feature_search_owner);
+ addCapability(list, ISearchByFinder.class, R.string.feature_search_finder);
if (supportsLogging()) {
list.add(feature(R.string.feature_online_logging));
}
@@ -248,7 +252,28 @@ public abstract class AbstractConnector implements IConnector {
@Override
public @NonNull
List<UserAction> getUserActions() {
- return getDefaultUserActions();
+ List<UserAction> actions = getDefaultUserActions();
+
+ if (this instanceof ISearchByOwner) {
+ actions.add(new UserAction(R.string.user_menu_view_hidden, new RunnableWithArgument<UserAction.Context>() {
+
+ @Override
+ public void run(Context context) {
+ CacheListActivity.startActivityOwner(context.activity, context.userName);
+ }
+ }));
+ }
+
+ if (this instanceof ISearchByFinder) {
+ actions.add(new UserAction(R.string.user_menu_view_found, new RunnableWithArgument<UserAction.Context>() {
+
+ @Override
+ public void run(Context context) {
+ CacheListActivity.startActivityUserName(context.activity, context.userName);
+ }
+ }));
+ }
+ return actions;
}
/**
@@ -267,22 +292,6 @@ public abstract class AbstractConnector implements IConnector {
}));
}
- actions.add(new UserAction(R.string.user_menu_view_hidden, new RunnableWithArgument<UserAction.Context>() {
-
- @Override
- public void run(Context context) {
- CacheListActivity.startActivityOwner(context.activity, context.userName);
- }
- }));
-
- actions.add(new UserAction(R.string.user_menu_view_found, new RunnableWithArgument<UserAction.Context>() {
-
- @Override
- public void run(Context context) {
- CacheListActivity.startActivityUserName(context.activity, context.userName);
- }
- }));
-
return actions;
}
diff --git a/main/src/cgeo/geocaching/connector/ConnectorFactory.java b/main/src/cgeo/geocaching/connector/ConnectorFactory.java
index 41e4e37..0081951 100644
--- a/main/src/cgeo/geocaching/connector/ConnectorFactory.java
+++ b/main/src/cgeo/geocaching/connector/ConnectorFactory.java
@@ -6,7 +6,9 @@ import cgeo.geocaching.SearchResult;
import cgeo.geocaching.Trackable;
import cgeo.geocaching.connector.capability.ILogin;
import cgeo.geocaching.connector.capability.ISearchByCenter;
+import cgeo.geocaching.connector.capability.ISearchByFinder;
import cgeo.geocaching.connector.capability.ISearchByKeyword;
+import cgeo.geocaching.connector.capability.ISearchByOwner;
import cgeo.geocaching.connector.capability.ISearchByViewPort;
import cgeo.geocaching.connector.ec.ECConnector;
import cgeo.geocaching.connector.gc.GCConnector;
@@ -71,6 +73,10 @@ public final class ConnectorFactory {
private static final Collection<ISearchByKeyword> searchByKeywordConns = getMatchingConnectors(ISearchByKeyword.class);
+ private static final Collection<ISearchByOwner> SEARCH_BY_OWNER_CONNECTORS = getMatchingConnectors(ISearchByOwner.class);
+
+ private static final Collection<ISearchByFinder> SEARCH_BY_FINDER_CONNECTORS = getMatchingConnectors(ISearchByFinder.class);
+
@SuppressWarnings("unchecked")
private static <T extends IConnector> Collection<T> getMatchingConnectors(final Class<T> clazz) {
final List<T> matching = new ArrayList<T>();
@@ -94,6 +100,14 @@ public final class ConnectorFactory {
return searchByKeywordConns;
}
+ public static Collection<ISearchByOwner> getSearchByOwnerConnectors() {
+ return SEARCH_BY_OWNER_CONNECTORS;
+ }
+
+ public static Collection<ISearchByFinder> getSearchByFinderConnectors() {
+ return SEARCH_BY_FINDER_CONNECTORS;
+ }
+
public static ILogin[] getActiveLiveConnectors() {
final List<ILogin> liveConns = new ArrayList<ILogin>();
for (final IConnector conn : CONNECTORS) {
diff --git a/main/src/cgeo/geocaching/connector/capability/ISearchByFinder.java b/main/src/cgeo/geocaching/connector/capability/ISearchByFinder.java
new file mode 100644
index 0000000..5c9355f
--- /dev/null
+++ b/main/src/cgeo/geocaching/connector/capability/ISearchByFinder.java
@@ -0,0 +1,11 @@
+package cgeo.geocaching.connector.capability;
+
+import cgeo.geocaching.SearchResult;
+import cgeo.geocaching.connector.IConnector;
+import cgeo.geocaching.loaders.RecaptchaReceiver;
+
+import org.eclipse.jdt.annotation.NonNull;
+
+public interface ISearchByFinder extends IConnector {
+ public SearchResult searchByFinder(final @NonNull String finder, final @NonNull RecaptchaReceiver recaptchaReceiver);
+}
diff --git a/main/src/cgeo/geocaching/connector/capability/ISearchByOwner.java b/main/src/cgeo/geocaching/connector/capability/ISearchByOwner.java
new file mode 100644
index 0000000..2d255b6
--- /dev/null
+++ b/main/src/cgeo/geocaching/connector/capability/ISearchByOwner.java
@@ -0,0 +1,16 @@
+package cgeo.geocaching.connector.capability;
+
+import cgeo.geocaching.SearchResult;
+import cgeo.geocaching.connector.IConnector;
+import cgeo.geocaching.loaders.RecaptchaReceiver;
+
+import org.eclipse.jdt.annotation.NonNull;
+
+/**
+ * Connector capability to search online by owner name. Implement this in a {@link IConnector} to take part in the
+ * global search by owner.
+ *
+ */
+public interface ISearchByOwner extends IConnector {
+ public SearchResult searchByOwner(final @NonNull String owner, final @NonNull RecaptchaReceiver recaptchaReceiver);
+}
diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java
index 4d304a3..e946748 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java
@@ -13,8 +13,10 @@ import cgeo.geocaching.connector.UserAction;
import cgeo.geocaching.connector.capability.ICredentials;
import cgeo.geocaching.connector.capability.ILogin;
import cgeo.geocaching.connector.capability.ISearchByCenter;
+import cgeo.geocaching.connector.capability.ISearchByFinder;
import cgeo.geocaching.connector.capability.ISearchByGeocode;
import cgeo.geocaching.connector.capability.ISearchByKeyword;
+import cgeo.geocaching.connector.capability.ISearchByOwner;
import cgeo.geocaching.connector.capability.ISearchByViewPort;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.geopoint.Geopoint;
@@ -40,7 +42,7 @@ import android.os.Handler;
import java.util.List;
import java.util.regex.Pattern;
-public class GCConnector extends AbstractConnector implements ISearchByGeocode, ISearchByCenter, ISearchByViewPort, ISearchByKeyword, ILogin, ICredentials {
+public class GCConnector extends AbstractConnector implements ISearchByGeocode, ISearchByCenter, ISearchByViewPort, ISearchByKeyword, ILogin, ICredentials, ISearchByOwner, ISearchByFinder {
private static final String CACHE_URL_SHORT = "http://coord.info/";
// Double slash is used to force open in browser
@@ -394,4 +396,14 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode,
return actions;
}
+ @Override
+ public SearchResult searchByOwner(final @NonNull String username, final @NonNull RecaptchaReceiver recaptchaReceiver) {
+ return GCParser.searchByOwner(username, Settings.getCacheType(), Settings.isShowCaptcha(), recaptchaReceiver);
+ }
+
+ @Override
+ public SearchResult searchByFinder(final @NonNull String username, final @NonNull RecaptchaReceiver recaptchaReceiver) {
+ return GCParser.searchByUsername(username, Settings.getCacheType(), Settings.isShowCaptcha(), recaptchaReceiver);
+ }
+
}
diff --git a/main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java b/main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java
index 0ba8932..7524b76 100644
--- a/main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java
+++ b/main/src/cgeo/geocaching/loaders/AbstractSearchLoader.java
@@ -23,7 +23,7 @@ public abstract class AbstractSearchLoader extends AsyncTaskLoader<SearchResult>
COORDINATE,
KEYWORD,
ADDRESS,
- USERNAME,
+ FINDER,
OWNER,
MAP,
REMOVE_FROM_HISTORY,
diff --git a/main/src/cgeo/geocaching/loaders/FinderGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/FinderGeocacheListLoader.java
new file mode 100644
index 0000000..7edd436
--- /dev/null
+++ b/main/src/cgeo/geocaching/loaders/FinderGeocacheListLoader.java
@@ -0,0 +1,33 @@
+package cgeo.geocaching.loaders;
+
+import cgeo.geocaching.SearchResult;
+import cgeo.geocaching.connector.ConnectorFactory;
+import cgeo.geocaching.connector.capability.ISearchByFinder;
+
+import org.eclipse.jdt.annotation.NonNull;
+
+import android.content.Context;
+
+public class FinderGeocacheListLoader extends AbstractSearchLoader {
+
+ private final @NonNull String username;
+
+ public FinderGeocacheListLoader(final Context context, final @NonNull String username) {
+ super(context);
+ this.username = username;
+ }
+
+ @Override
+ public SearchResult runSearch() {
+ SearchResult searchResult = new SearchResult();
+
+ for (ISearchByFinder connector : ConnectorFactory.getSearchByFinderConnectors()) {
+ if (connector.isActive()) {
+ searchResult.addSearchResult(connector.searchByFinder(username, this));
+ }
+ }
+
+ return searchResult;
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/loaders/OwnerGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/OwnerGeocacheListLoader.java
index ea9b8ad..4d530fb 100644
--- a/main/src/cgeo/geocaching/loaders/OwnerGeocacheListLoader.java
+++ b/main/src/cgeo/geocaching/loaders/OwnerGeocacheListLoader.java
@@ -1,23 +1,33 @@
package cgeo.geocaching.loaders;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.settings.Settings;
-import cgeo.geocaching.connector.gc.GCParser;
+import cgeo.geocaching.connector.ConnectorFactory;
+import cgeo.geocaching.connector.capability.ISearchByOwner;
+
+import org.eclipse.jdt.annotation.NonNull;
import android.content.Context;
public class OwnerGeocacheListLoader extends AbstractSearchLoader {
- private final String username;
+ private final @NonNull String username;
- public OwnerGeocacheListLoader(Context context, String username) {
+ public OwnerGeocacheListLoader(final Context context, final @NonNull String username) {
super(context);
this.username = username;
}
@Override
public SearchResult runSearch() {
- return GCParser.searchByOwner(username, Settings.getCacheType(), Settings.isShowCaptcha(), this);
+ SearchResult searchResult = new SearchResult();
+
+ for (ISearchByOwner connector : ConnectorFactory.getSearchByOwnerConnectors()) {
+ if (connector.isActive()) {
+ searchResult.addSearchResult(connector.searchByOwner(username, this));
+ }
+ }
+
+ return searchResult;
}
}
diff --git a/main/src/cgeo/geocaching/loaders/UsernameGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/UsernameGeocacheListLoader.java
deleted file mode 100644
index f8849d5..0000000
--- a/main/src/cgeo/geocaching/loaders/UsernameGeocacheListLoader.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package cgeo.geocaching.loaders;
-
-import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.settings.Settings;
-import cgeo.geocaching.connector.gc.GCParser;
-
-import android.content.Context;
-
-public class UsernameGeocacheListLoader extends AbstractSearchLoader {
-
- private final 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);
- }
-
-}