aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/connector/AbstractConnector.java
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2014-01-04 13:08:15 +0100
committerBananeweizen <bananeweizen@gmx.de>2014-01-04 13:08:15 +0100
commit01de707ee0f6f47cfcb576f0e82e0c65ed8e418a (patch)
tree96ebc206fa71d1864b32107685f2754bdcde3c69 /main/src/cgeo/geocaching/connector/AbstractConnector.java
parentfd2664c70770a1670330b488eb01b3a976a06433 (diff)
downloadcgeo-01de707ee0f6f47cfcb576f0e82e0c65ed8e418a.zip
cgeo-01de707ee0f6f47cfcb576f0e82e0c65ed8e418a.tar.gz
cgeo-01de707ee0f6f47cfcb576f0e82e0c65ed8e418a.tar.bz2
refactoring: make user actions depend on the connector
This enables the contacts addon and search by user/owner for all user names (independent of the kind of cache). Of course, search by user/owner still only works for GC, so one cannot find EC owner caches that way.
Diffstat (limited to 'main/src/cgeo/geocaching/connector/AbstractConnector.java')
-rw-r--r--main/src/cgeo/geocaching/connector/AbstractConnector.java54
1 files changed, 46 insertions, 8 deletions
diff --git a/main/src/cgeo/geocaching/connector/AbstractConnector.java b/main/src/cgeo/geocaching/connector/AbstractConnector.java
index 9e1d17a..ac9246e 100644
--- a/main/src/cgeo/geocaching/connector/AbstractConnector.java
+++ b/main/src/cgeo/geocaching/connector/AbstractConnector.java
@@ -1,9 +1,12 @@
package cgeo.geocaching.connector;
+import cgeo.contacts.ContactsAddon;
+import cgeo.geocaching.CacheListActivity;
import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Geocache;
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.ISearchByGeocode;
import cgeo.geocaching.connector.capability.ISearchByKeyword;
@@ -11,6 +14,7 @@ import cgeo.geocaching.connector.capability.ISearchByViewPort;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.geopoint.Geopoint;
+import cgeo.geocaching.utils.RunnableWithArgument;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.jdt.annotation.NonNull;
@@ -99,11 +103,6 @@ public abstract class AbstractConnector implements IConnector {
return null;
}
- @Override
- public boolean supportsUserActions() {
- return false;
- }
-
protected static boolean isNumericId(final String string) {
try {
return Integer.parseInt(string) > 0;
@@ -218,9 +217,6 @@ public abstract class AbstractConnector implements IConnector {
addCapability(builder, ISearchByKeyword.class, R.string.feature_search_keyword);
addCapability(builder, ISearchByCenter.class, R.string.feature_search_center);
addCapability(builder, ISearchByGeocode.class, R.string.feature_search_geocode);
- if (supportsUserActions()) {
- builder.add(feature(R.string.feature_search_user));
- }
if (supportsLogging()) {
builder.add(feature(R.string.feature_online_logging));
}
@@ -248,4 +244,46 @@ public abstract class AbstractConnector implements IConnector {
private static String feature(int featureResourceId) {
return CgeoApplication.getInstance().getString(featureResourceId);
}
+
+ @Override
+ public @NonNull
+ List<UserAction> getUserActions() {
+ return getDefaultUserActions();
+ }
+
+ /**
+ * @return user actions which are always available (independent of cache or trackable)
+ */
+ static @NonNull
+ public List<UserAction> getDefaultUserActions() {
+ final ArrayList<UserAction> actions = new ArrayList<UserAction>();
+ if (ContactsAddon.isAvailable()) {
+ actions.add(new UserAction(R.string.user_menu_open_contact, new RunnableWithArgument<UserAction.Context>() {
+
+ @Override
+ public void run(Context context) {
+ ContactsAddon.openContactCard(context.activity, context.userName);
+ }
+ }));
+ }
+
+ 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;
+ }
+
}