diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2014-01-04 15:26:35 +0100 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2014-01-04 15:26:35 +0100 |
| commit | 114888857c816fb87d52bb703703c38021366f2e (patch) | |
| tree | 1c26c5c009747d17868ed2e21d47af4e04ced2a6 /main | |
| parent | e89da5864a49b4b0f05b0c2a9f62c2ffae8cafa8 (diff) | |
| download | cgeo-114888857c816fb87d52bb703703c38021366f2e.zip cgeo-114888857c816fb87d52bb703703c38021366f2e.tar.gz cgeo-114888857c816fb87d52bb703703c38021366f2e.tar.bz2 | |
refactoring: make search by owner/finder connector capabilities
Diffstat (limited to 'main')
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); - } - -} |
