aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/connector/ConnectorFactory.java14
-rw-r--r--main/src/cgeo/geocaching/connector/oc/IOCAuthParams.java60
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCApiConnector.java15
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java30
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java27
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCDEAuthParams.java46
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCDEAuthorizationActivity.java8
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCPLAuthParams.java46
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCPLAuthorizationActivity.java8
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OkapiClient.java4
-rw-r--r--main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java4
-rw-r--r--main/src/cgeo/geocaching/settings/AuthorizeOcDePreference.java45
-rw-r--r--main/src/cgeo/geocaching/settings/AuthorizeOcPreference.java80
-rw-r--r--main/src/cgeo/geocaching/settings/AuthorizeTwitterPreference.java3
-rw-r--r--main/src/cgeo/geocaching/settings/Settings.java54
-rw-r--r--main/src/cgeo/geocaching/settings/SettingsActivity.java43
-rw-r--r--main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java2
17 files changed, 368 insertions, 121 deletions
diff --git a/main/src/cgeo/geocaching/connector/ConnectorFactory.java b/main/src/cgeo/geocaching/connector/ConnectorFactory.java
index eb09978..54e3447 100644
--- a/main/src/cgeo/geocaching/connector/ConnectorFactory.java
+++ b/main/src/cgeo/geocaching/connector/ConnectorFactory.java
@@ -28,16 +28,20 @@ public final class ConnectorFactory {
private static final UnknownConnector UNKNOWN_CONNECTOR = new UnknownConnector();
private static final IConnector[] CONNECTORS = new IConnector[] {
GCConnector.getInstance(),
- new OCApiLiveConnector("opencaching.de", "www.opencaching.de", "OC", R.string.oc_de_okapi_consumer_key, R.string.oc_de_okapi_consumer_secret, ApiSupport.current),
+ new OCApiLiveConnector("opencaching.de", "www.opencaching.de", "OC", "CC BY-NC-ND, alle Logeinträge © jeweiliger Autor",
+ R.string.oc_de_okapi_consumer_key, R.string.oc_de_okapi_consumer_secret,
+ R.string.pref_connectorOCActive, R.string.pref_ocde_tokenpublic, R.string.pref_ocde_tokensecret, ApiSupport.current),
new OCConnector("OpenCaching.CZ", "www.opencaching.cz", "OZ"),
- new OCApiConnector("OpenCaching.CO.UK", "www.opencaching.org.uk", "OK", "arU4okouc4GEjMniE2fq", ApiSupport.oldapi),
+ new OCApiConnector("OpenCaching.CO.UK", "www.opencaching.org.uk", "OK", "arU4okouc4GEjMniE2fq", "CC BY-NC-SA 2.5", ApiSupport.oldapi),
new OCConnector("OpenCaching.ES", "www.opencachingspain.es", "OC"),
new OCConnector("OpenCaching.IT", "www.opencaching.it", "OC"),
new OCConnector("OpenCaching.JP", "www.opencaching.jp", "OJ"),
new OCConnector("OpenCaching.NO/SE", "www.opencaching.se", "OS"),
- new OCApiConnector("OpenCaching.NL", "www.opencaching.nl", "OB", "PdzU8jzIlcfMADXaYN8j", ApiSupport.current),
- new OCApiConnector("OpenCaching.PL", "www.opencaching.pl", "OP", "GkxM47WkUkLQXXsZ9qSh", ApiSupport.current),
- new OCApiConnector("OpenCaching.US", "www.opencaching.us", "OU", "pTsYAYSXFcfcRQnYE6uA", ApiSupport.oldapi),
+ new OCApiConnector("OpenCaching.NL", "www.opencaching.nl", "OB", "PdzU8jzIlcfMADXaYN8j", "CC BY-SA 3.0", ApiSupport.current),
+ new OCApiLiveConnector("opencaching.pl", "www.opencaching.pl", "OP", "CC BY-SA 3.0",
+ R.string.oc_pl_okapi_consumer_key, R.string.oc_pl_okapi_consumer_secret,
+ R.string.pref_connectorOCPLActive, R.string.pref_ocpl_tokenpublic, R.string.pref_ocpl_tokensecret, ApiSupport.current),
+ new OCApiConnector("OpenCaching.US", "www.opencaching.us", "OU", "pTsYAYSXFcfcRQnYE6uA", "CC BY-NC-SA 2.5", ApiSupport.oldapi),
new OXConnector(),
new GeocachingAustraliaConnector(),
new GeopeitusConnector(),
diff --git a/main/src/cgeo/geocaching/connector/oc/IOCAuthParams.java b/main/src/cgeo/geocaching/connector/oc/IOCAuthParams.java
new file mode 100644
index 0000000..5a140a1
--- /dev/null
+++ b/main/src/cgeo/geocaching/connector/oc/IOCAuthParams.java
@@ -0,0 +1,60 @@
+package cgeo.geocaching.connector.oc;
+
+public interface IOCAuthParams {
+
+ /**
+ * The site name: 'www.openaching...'
+ *
+ * @return
+ */
+ String getSite();
+
+ /**
+ * ResId of the Consumer key
+ *
+ * @return
+ */
+ int getCKResId();
+
+ /**
+ * ResId of the Consumer secret
+ *
+ * @return
+ */
+ int getCSResId();
+
+ /**
+ * ResId ot the Authorization title
+ *
+ * @return
+ */
+ int getAuthTitelResId();
+
+ /**
+ * Preference key of the public token
+ *
+ * @return
+ */
+ int getTokenPublicPrefKey();
+
+ /**
+ * Preference key of the secret token
+ *
+ * @return
+ */
+ int getTokenSecretPrefKey();
+
+ /**
+ * Preference key of the temporary public token (OAuth)
+ *
+ * @return
+ */
+ int getTempTokenPublicPrefKey();
+
+ /**
+ * Preference key of the temporary secret token (OAuth)
+ *
+ * @return
+ */
+ int getTempTokenSecretPrefKey();
+}
diff --git a/main/src/cgeo/geocaching/connector/oc/OCApiConnector.java b/main/src/cgeo/geocaching/connector/oc/OCApiConnector.java
index 4f365ec..d43d06b 100644
--- a/main/src/cgeo/geocaching/connector/oc/OCApiConnector.java
+++ b/main/src/cgeo/geocaching/connector/oc/OCApiConnector.java
@@ -27,11 +27,13 @@ public class OCApiConnector extends OCConnector implements ISearchByGeocode {
private final String cK;
private final ApiSupport apiSupport;
+ private final String licenseString;
- public OCApiConnector(String name, String host, String prefix, String cK, ApiSupport apiSupport) {
+ public OCApiConnector(String name, String host, String prefix, String cK, String licenseString, ApiSupport apiSupport) {
super(name, host, prefix);
this.cK = cK;
this.apiSupport = apiSupport;
+ this.licenseString = licenseString;
}
public void addAuthentication(final Parameters params) {
@@ -41,7 +43,7 @@ public class OCApiConnector extends OCConnector implements ISearchByGeocode {
@Override
public String getLicenseText(final Geocache cache) {
// NOT TO BE TRANSLATED
- return "© " + cache.getOwnerDisplayName() + ", <a href=\"" + getCacheUrl(cache) + "\">" + getName() + "</a>, CC-BY-NC-ND, alle Logeinträge © jeweiliger Autor";
+ return "© " + cache.getOwnerDisplayName() + ", <a href=\"" + getCacheUrl(cache) + "\">" + getName() + "</a>, " + licenseString;
}
@Override
@@ -77,4 +79,13 @@ public class OCApiConnector extends OCConnector implements ISearchByGeocode {
return apiSupport;
}
+ @SuppressWarnings("static-method")
+ public int getTokenPublicPrefKeyId() {
+ return 0;
+ }
+
+ @SuppressWarnings("static-method")
+ public int getTokenSecretPrefKeyId() {
+ return 0;
+ }
}
diff --git a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
index 5ca2d28..d35e54b 100644
--- a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
+++ b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
@@ -2,7 +2,6 @@ package cgeo.geocaching.connector.oc;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.cgData;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.connector.ILoggingManager;
@@ -12,6 +11,7 @@ import cgeo.geocaching.connector.capability.ISearchByViewPort;
import cgeo.geocaching.connector.oc.UserInfo.UserInfoStatus;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Viewport;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.CryptUtils;
import org.apache.commons.lang3.StringUtils;
@@ -22,18 +22,24 @@ import android.os.Handler;
public class OCApiLiveConnector extends OCApiConnector implements ISearchByCenter, ISearchByViewPort, ILogin {
- private String cS;
+ private final String cS;
+ private final int isActivePrefKeyId;
+ private final int tokenPublicPrefKeyId;
+ private final int tokenSecretPrefKeyId;
private UserInfo userInfo = new UserInfo(StringUtils.EMPTY, 0, UserInfoStatus.NOT_RETRIEVED);
- public OCApiLiveConnector(String name, String host, String prefix, int cKResId, int cSResId, ApiSupport apiSupport) {
- super(name, host, prefix, CryptUtils.rot13(cgeoapplication.getInstance().getResources().getString(cKResId)), apiSupport);
+ public OCApiLiveConnector(String name, String host, String prefix, String licenseString, int cKResId, int cSResId, int isActivePrefKeyId, int tokenPublicPrefKeyId, int tokenSecretPrefKeyId, ApiSupport apiSupport) {
+ super(name, host, prefix, CryptUtils.rot13(cgeoapplication.getInstance().getResources().getString(cKResId)), licenseString, apiSupport);
cS = CryptUtils.rot13(cgeoapplication.getInstance().getResources().getString(cSResId));
+ this.isActivePrefKeyId = isActivePrefKeyId;
+ this.tokenPublicPrefKeyId = tokenPublicPrefKeyId;
+ this.tokenSecretPrefKeyId = tokenSecretPrefKeyId;
}
@Override
public boolean isActivated() {
- return Settings.isOCConnectorActive();
+ return Settings.isOCConnectorActive(isActivePrefKeyId);
}
@Override
@@ -49,8 +55,8 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente
@Override
public OAuthLevel getSupportedAuthLevel() {
- // TODO the tokens must be available connector specific
- if (StringUtils.isNotBlank(Settings.getOCDETokenPublic()) && StringUtils.isNotBlank(Settings.getOCDETokenSecret())) {
+
+ if (Settings.hasOCAuthorization(tokenPublicPrefKeyId, tokenSecretPrefKeyId)) {
return OAuthLevel.Level3;
}
return OAuthLevel.Level1;
@@ -62,6 +68,16 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente
}
@Override
+ public int getTokenPublicPrefKeyId() {
+ return tokenPublicPrefKeyId;
+ }
+
+ @Override
+ public int getTokenSecretPrefKeyId() {
+ return tokenSecretPrefKeyId;
+ }
+
+ @Override
public boolean supportsWatchList() {
return true;
}
diff --git a/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java b/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java
index 08d796e..10d6a66 100644
--- a/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java
+++ b/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java
@@ -1,42 +1,48 @@
package cgeo.geocaching.connector.oc;
import cgeo.geocaching.R;
-import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.network.OAuthAuthorizationActivity;
+import cgeo.geocaching.settings.Settings;
import org.apache.commons.lang3.tuple.ImmutablePair;
public class OCAuthorizationActivity extends OAuthAuthorizationActivity {
- public OCAuthorizationActivity() {
- super("www.opencaching.de",
+ final IOCAuthParams authParams;
+
+ public OCAuthorizationActivity(IOCAuthParams authParams) {
+ super(authParams.getSite(),
"/okapi/services/oauth/request_token",
"/okapi/services/oauth/authorize",
"/okapi/services/oauth/access_token",
false,
- cgeoapplication.getInstance().getResources().getString(R.string.oc_de_okapi_consumer_key),
- cgeoapplication.getInstance().getResources().getString(R.string.oc_de_okapi_consumer_secret));
+ cgeoapplication.getInstance().getResources().getString(authParams.getCKResId()),
+ cgeoapplication.getInstance().getResources().getString(authParams.getCSResId()));
+ this.authParams = authParams;
}
@Override
- protected ImmutablePair<String, String> getTempToken() {
- return Settings.getTempOCDEToken();
+ protected ImmutablePair<String, String> getTempTokens() {
+ return Settings.getTokenPair(authParams.getTempTokenPublicPrefKey(), authParams.getTempTokenSecretPrefKey());
}
@Override
protected void setTempTokens(String tokenPublic, String tokenSecret) {
- Settings.setOCDETempTokens(tokenPublic, tokenSecret);
+ Settings.setTokens(authParams.getTempTokenPublicPrefKey(), tokenPublic, authParams.getTempTokenSecretPrefKey(), tokenSecret);
}
@Override
protected void setTokens(String tokenPublic, String tokenSecret, boolean enable) {
- Settings.setOCDETokens(tokenPublic, tokenSecret, enable);
+ Settings.setTokens(authParams.getTokenPublicPrefKey(), tokenPublic, authParams.getTokenSecretPrefKey(), tokenSecret);
+ if (tokenPublic != null) {
+ Settings.setTokens(authParams.getTempTokenPublicPrefKey(), null, authParams.getTempTokenSecretPrefKey(), null);
+ }
}
@Override
protected String getAuthTitle() {
- return res.getString(R.string.auth_ocde);
+ return res.getString(authParams.getAuthTitelResId());
}
@Override
@@ -103,5 +109,4 @@ public class OCAuthorizationActivity extends OAuthAuthorizationActivity {
protected String getAuthFinish() {
return res.getString(R.string.auth_finish_oc);
}
-
}
diff --git a/main/src/cgeo/geocaching/connector/oc/OCDEAuthParams.java b/main/src/cgeo/geocaching/connector/oc/OCDEAuthParams.java
new file mode 100644
index 0000000..734b383
--- /dev/null
+++ b/main/src/cgeo/geocaching/connector/oc/OCDEAuthParams.java
@@ -0,0 +1,46 @@
+package cgeo.geocaching.connector.oc;
+
+import cgeo.geocaching.R;
+
+public class OCDEAuthParams implements IOCAuthParams {
+
+ @Override
+ public String getSite() {
+ return "www.opencaching.de";
+ }
+
+ @Override
+ public int getCKResId() {
+ return R.string.oc_de_okapi_consumer_key;
+ }
+
+ @Override
+ public int getCSResId() {
+ return R.string.oc_de_okapi_consumer_secret;
+ }
+
+ @Override
+ public int getAuthTitelResId() {
+ return R.string.auth_ocde;
+ }
+
+ @Override
+ public int getTokenPublicPrefKey() {
+ return R.string.pref_ocde_tokenpublic;
+ }
+
+ @Override
+ public int getTokenSecretPrefKey() {
+ return R.string.pref_ocde_tokensecret;
+ }
+
+ @Override
+ public int getTempTokenPublicPrefKey() {
+ return R.string.pref_temp_ocde_token_public;
+ }
+
+ @Override
+ public int getTempTokenSecretPrefKey() {
+ return R.string.pref_temp_ocde_token_secret;
+ }
+}
diff --git a/main/src/cgeo/geocaching/connector/oc/OCDEAuthorizationActivity.java b/main/src/cgeo/geocaching/connector/oc/OCDEAuthorizationActivity.java
new file mode 100644
index 0000000..caf114c
--- /dev/null
+++ b/main/src/cgeo/geocaching/connector/oc/OCDEAuthorizationActivity.java
@@ -0,0 +1,8 @@
+package cgeo.geocaching.connector.oc;
+
+public class OCDEAuthorizationActivity extends OCAuthorizationActivity {
+
+ public OCDEAuthorizationActivity() {
+ super(new OCDEAuthParams());
+ }
+}
diff --git a/main/src/cgeo/geocaching/connector/oc/OCPLAuthParams.java b/main/src/cgeo/geocaching/connector/oc/OCPLAuthParams.java
new file mode 100644
index 0000000..117e990
--- /dev/null
+++ b/main/src/cgeo/geocaching/connector/oc/OCPLAuthParams.java
@@ -0,0 +1,46 @@
+package cgeo.geocaching.connector.oc;
+
+import cgeo.geocaching.R;
+
+public class OCPLAuthParams implements IOCAuthParams {
+
+ @Override
+ public String getSite() {
+ return "www.opencaching.pl";
+ }
+
+ @Override
+ public int getCKResId() {
+ return R.string.oc_pl_okapi_consumer_key;
+ }
+
+ @Override
+ public int getCSResId() {
+ return R.string.oc_pl_okapi_consumer_secret;
+ }
+
+ @Override
+ public int getAuthTitelResId() {
+ return R.string.auth_ocpl;
+ }
+
+ @Override
+ public int getTokenPublicPrefKey() {
+ return R.string.pref_ocpl_tokenpublic;
+ }
+
+ @Override
+ public int getTokenSecretPrefKey() {
+ return R.string.pref_ocpl_tokensecret;
+ }
+
+ @Override
+ public int getTempTokenPublicPrefKey() {
+ return R.string.pref_temp_ocpl_token_public;
+ }
+
+ @Override
+ public int getTempTokenSecretPrefKey() {
+ return R.string.pref_temp_ocpl_token_secret;
+ }
+}
diff --git a/main/src/cgeo/geocaching/connector/oc/OCPLAuthorizationActivity.java b/main/src/cgeo/geocaching/connector/oc/OCPLAuthorizationActivity.java
new file mode 100644
index 0000000..4f9ef96
--- /dev/null
+++ b/main/src/cgeo/geocaching/connector/oc/OCPLAuthorizationActivity.java
@@ -0,0 +1,8 @@
+package cgeo.geocaching.connector.oc;
+
+public class OCPLAuthorizationActivity extends OCAuthorizationActivity {
+
+ public OCPLAuthorizationActivity() {
+ super(new OCPLAuthParams());
+ }
+}
diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
index 6959adf..be7b3a4 100644
--- a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
+++ b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
@@ -31,6 +31,7 @@ import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.Log;
import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.ImmutablePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@@ -612,7 +613,8 @@ final class OkapiClient {
params.add("langpref", getPreferredLanguage());
if (connector.getSupportedAuthLevel() == OAuthLevel.Level3) {
- OAuth.signOAuth(host, service.methodName, "GET", false, params, Settings.getOCDETokenPublic(), Settings.getOCDETokenSecret(), connector.getCK(), connector.getCS());
+ ImmutablePair<String, String> tokens = Settings.getTokenPair(connector.getTokenPublicPrefKeyId(), connector.getTokenSecretPrefKeyId());
+ OAuth.signOAuth(host, service.methodName, "GET", false, params, tokens.left, tokens.right, connector.getCK(), connector.getCS());
} else {
connector.addAuthentication(params);
}
diff --git a/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java b/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java
index 8dc8b03..14e0b33 100644
--- a/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java
+++ b/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java
@@ -129,7 +129,7 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity {
auth = (TextView) findViewById(R.id.auth_2);
auth.setText(getAboutAuth2());
- ImmutablePair<String, String> tempToken = getTempToken();
+ ImmutablePair<String, String> tempToken = getTempTokens();
OAtoken = tempToken.left;
OAtokenSecret = tempToken.right;
@@ -289,7 +289,7 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity {
}
}
- protected abstract ImmutablePair<String, String> getTempToken();
+ protected abstract ImmutablePair<String, String> getTempTokens();
protected abstract void setTempTokens(String tokenPublic, String tokenSecret);
diff --git a/main/src/cgeo/geocaching/settings/AuthorizeOcDePreference.java b/main/src/cgeo/geocaching/settings/AuthorizeOcDePreference.java
deleted file mode 100644
index 28807eb..0000000
--- a/main/src/cgeo/geocaching/settings/AuthorizeOcDePreference.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package cgeo.geocaching.settings;
-
-import cgeo.geocaching.connector.oc.OCAuthorizationActivity;
-
-import android.content.Context;
-import android.content.Intent;
-import android.preference.Preference;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewGroup;
-
-public class AuthorizeOcDePreference extends Preference {
-
- public AuthorizeOcDePreference(Context context) {
- super(context);
- }
-
- public AuthorizeOcDePreference(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public AuthorizeOcDePreference(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- }
-
- @Override
- protected View onCreateView(ViewGroup parent) {
- final SettingsActivity activity = (SettingsActivity) getContext();
-
- setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Intent authIntent = new Intent(preference.getContext(),
- OCAuthorizationActivity.class);
- activity.startActivityForResult(authIntent,
- SettingsActivity.OAUTH_OCDE_REQUEST);
-
- return false; // no shared preference has to be changed
- }
- });
-
- activity.setOCDEAuthTitle();
- return super.onCreateView(parent);
- }
-}
diff --git a/main/src/cgeo/geocaching/settings/AuthorizeOcPreference.java b/main/src/cgeo/geocaching/settings/AuthorizeOcPreference.java
new file mode 100644
index 0000000..f5d6a57
--- /dev/null
+++ b/main/src/cgeo/geocaching/settings/AuthorizeOcPreference.java
@@ -0,0 +1,80 @@
+package cgeo.geocaching.settings;
+
+import cgeo.geocaching.R;
+import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.connector.oc.OCDEAuthorizationActivity;
+import cgeo.geocaching.connector.oc.OCPLAuthorizationActivity;
+
+import android.content.Context;
+import android.content.Intent;
+import android.preference.Preference;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+
+public class AuthorizeOcPreference extends Preference {
+
+ private static final int NO_KEY = -1;
+
+ private enum OCAuthorizations {
+ NONE(NO_KEY, null),
+ OCDE(R.string.pref_fakekey_ocde_authorization, OCDEAuthorizationActivity.class),
+ OCPL(R.string.pref_fakekey_ocpl_authorization, OCPLAuthorizationActivity.class);
+
+ public int prefKeyId;
+ public Class<?> authActivity;
+
+ OCAuthorizations(int prefKeyId, Class<?> clazz) {
+ this.prefKeyId = prefKeyId;
+ this.authActivity = clazz;
+ }
+ }
+
+ private final OCAuthorizations ocAuth;
+
+ private OCAuthorizations getAuthorization() {
+ final String prefKey = getKey();
+ for (OCAuthorizations auth : OCAuthorizations.values()) {
+ if (auth.prefKeyId != NO_KEY && prefKey.equals(cgeoapplication.getInstance().getString(auth.prefKeyId))) {
+ return auth;
+ }
+ }
+ return OCAuthorizations.NONE;
+ }
+
+ public AuthorizeOcPreference(Context context) {
+ super(context);
+ this.ocAuth = getAuthorization();
+ }
+
+ public AuthorizeOcPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ this.ocAuth = getAuthorization();
+ }
+
+ public AuthorizeOcPreference(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ this.ocAuth = getAuthorization();
+ }
+
+ @Override
+ protected View onCreateView(ViewGroup parent) {
+ final SettingsActivity activity = (SettingsActivity) getContext();
+
+ setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ if (ocAuth.authActivity != null) {
+ Intent authIntent = new Intent(preference.getContext(),
+ ocAuth.authActivity);
+ activity.startActivityForResult(authIntent,
+ ocAuth.prefKeyId);
+ }
+ return false; // no shared preference has to be changed
+ }
+ });
+
+ activity.setOcAuthTitle(ocAuth.prefKeyId);
+ return super.onCreateView(parent);
+ }
+}
diff --git a/main/src/cgeo/geocaching/settings/AuthorizeTwitterPreference.java b/main/src/cgeo/geocaching/settings/AuthorizeTwitterPreference.java
index ed3e159..1fdd0de 100644
--- a/main/src/cgeo/geocaching/settings/AuthorizeTwitterPreference.java
+++ b/main/src/cgeo/geocaching/settings/AuthorizeTwitterPreference.java
@@ -1,5 +1,6 @@
package cgeo.geocaching.settings;
+import cgeo.geocaching.R;
import cgeo.geocaching.twitter.TwitterAuthorizationActivity;
import android.content.Context;
@@ -33,7 +34,7 @@ public class AuthorizeTwitterPreference extends Preference {
Intent authIntent = new Intent(preference.getContext(),
TwitterAuthorizationActivity.class);
activity.startActivityForResult(authIntent,
- SettingsActivity.OAUTH_TWITTER_REQUEST);
+ R.string.pref_fakekey_twitter_authorization);
return false; // no shared preference has to be changed
}
diff --git a/main/src/cgeo/geocaching/settings/Settings.java b/main/src/cgeo/geocaching/settings/Settings.java
index a4eeeec..a4b2563 100644
--- a/main/src/cgeo/geocaching/settings/Settings.java
+++ b/main/src/cgeo/geocaching/settings/Settings.java
@@ -267,7 +267,7 @@ public final class Settings {
/**
* Get login and password information.
- *
+ *
* @return a pair either with (login, password) or (empty, empty) if no valid information is stored
*/
public static ImmutablePair<String, String> getGcLogin() {
@@ -310,47 +310,30 @@ public final class Settings {
return putString(R.string.pref_memberstatus, memberStatus);
}
- public static boolean isOCConnectorActive() {
- return getBoolean(R.string.pref_connectorOCActive, false);
- }
-
- public static boolean setOCConnectorActive(final boolean isActive) {
- return putBoolean(R.string.pref_connectorOCActive, isActive);
- }
-
- public static String getOCDETokenPublic() {
- return getString(R.string.pref_ocde_tokenpublic, "");
- }
-
- public static String getOCDETokenSecret() {
- return getString(R.string.pref_ocde_tokensecret, "");
+ public static ImmutablePair<String, String> getTokenPair(final int tokenPublicPrefKey, final int tokenSecretPrefKey) {
+ return new ImmutablePair<String, String>(getString(tokenPublicPrefKey, null), getString(tokenSecretPrefKey, null));
}
- public static boolean hasOCDEAuthorization() {
- return StringUtils.isNotBlank(getOCDETokenPublic())
- && StringUtils.isNotBlank(getOCDETokenSecret());
- }
-
- public static void setOCDETokens(final String tokenPublic,
- final String tokenSecret, boolean enableOcDe) {
- putString(R.string.pref_ocde_tokenpublic, tokenPublic);
- putString(R.string.pref_ocde_tokensecret, tokenSecret);
- if (tokenPublic != null) {
- remove(R.string.pref_temp_ocde_token_public);
- remove(R.string.pref_temp_ocde_token_secret);
+ public static void setTokens(final int tokenPublicPrefKey, final String tokenPublic, final int tokenSecretPrefKey, final String tokenSecret) {
+ if (tokenPublic == null) {
+ remove(tokenPublicPrefKey);
+ } else {
+ putString(tokenPublicPrefKey, tokenPublic);
+ }
+ if (tokenSecret == null) {
+ remove(tokenSecretPrefKey);
+ } else {
+ putString(tokenSecretPrefKey, tokenSecret);
}
- setOCConnectorActive(enableOcDe);
}
- public static void setOCDETempTokens(final String tokenPublic, final String tokenSecret) {
- putString(R.string.pref_temp_ocde_token_public, tokenPublic);
- putString(R.string.pref_temp_ocde_token_secret, tokenSecret);
+ public static boolean isOCConnectorActive(int isActivePrefKeyId) {
+ return getBoolean(isActivePrefKeyId, false);
}
- public static ImmutablePair<String, String> getTempOCDEToken() {
- String tokenPublic = getString(R.string.pref_temp_ocde_token_public, null);
- String tokenSecret = getString(R.string.pref_temp_ocde_token_secret, null);
- return new ImmutablePair<String, String>(tokenPublic, tokenSecret);
+ public static boolean hasOCAuthorization(int tokenPublicPrefKeyId, int tokenSecretPrefKeyId) {
+ return StringUtils.isNotBlank(getString(tokenPublicPrefKeyId, ""))
+ && StringUtils.isNotBlank(getString(tokenSecretPrefKeyId, ""));
}
public static boolean isGCvoteLogin() {
@@ -991,5 +974,4 @@ public final class Settings {
public static void setFieldnoteExportDate(final long date) {
putLong(R.string.pref_fieldnoteExportDate, date);
}
-
}
diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java
index 7c0da1e..daef9af 100644
--- a/main/src/cgeo/geocaching/settings/SettingsActivity.java
+++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java
@@ -46,6 +46,7 @@ import android.widget.ListAdapter;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
+import java.util.Locale;
/**
* A {@link PreferenceActivity} that presents a set of application settings. On
@@ -64,10 +65,6 @@ public class SettingsActivity extends PreferenceActivity {
private static final String INTENT_GOTO = "GOTO";
private static final int INTENT_GOTO_SERVICES = 1;
- private static final int DIR_CHOOSER_MAPS_DIRECTORY_REQUEST = 4;
- static final int OAUTH_OCDE_REQUEST = 5;
- static final int OAUTH_TWITTER_REQUEST = 6;
-
private EditText signatureText;
/**
@@ -140,6 +137,7 @@ public class SettingsActivity extends PreferenceActivity {
private void initServicePreferences() {
getPreference(R.string.pref_connectorOCActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER);
+ getPreference(R.string.pref_connectorOCPLActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER);
getPreference(R.string.pref_connectorGCActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER);
}
@@ -247,7 +245,7 @@ public class SettingsActivity extends PreferenceActivity {
public boolean onPreferenceClick(final Preference preference) {
Intent i = new Intent(SettingsActivity.this,
SelectMapfileActivity.class);
- startActivityForResult(i, DIR_CHOOSER_MAPS_DIRECTORY_REQUEST);
+ startActivityForResult(i, R.string.pref_mapDirectory);
return false;
}
});
@@ -398,13 +396,34 @@ public class SettingsActivity extends PreferenceActivity {
Settings.putString(R.string.pref_webDeviceName, Settings.getWebDeviceName());
}
+ public void setOcAuthTitle(int prefKeyId) {
+ //TODO: Generalize!
+ switch (prefKeyId) {
+ case R.string.pref_fakekey_ocde_authorization:
+ setOCDEAuthTitle();
+ break;
+ case R.string.pref_fakekey_ocpl_authorization:
+ setOCPLAuthTitle();
+ break;
+ default:
+ Log.e(String.format(Locale.ENGLISH, "Invalid key %d in SettingsActivity.setTitle()", prefKeyId));
+ }
+ }
+
void setOCDEAuthTitle() {
getPreference(R.string.pref_fakekey_ocde_authorization)
- .setTitle(getString(Settings.hasOCDEAuthorization()
+ .setTitle(getString(Settings.hasOCAuthorization(R.string.pref_ocde_tokenpublic, R.string.pref_ocde_tokensecret)
? R.string.init_reregister_oc_de
: R.string.init_register_oc_de));
}
+ void setOCPLAuthTitle() {
+ getPreference(R.string.pref_fakekey_ocpl_authorization)
+ .setTitle(getString(Settings.hasOCAuthorization(R.string.pref_ocpl_tokenpublic, R.string.pref_ocpl_tokensecret)
+ ? R.string.init_reregister_oc_pl
+ : R.string.init_register_oc_pl));
+ }
+
void setTwitterAuthTitle() {
getPreference(R.string.pref_fakekey_twitter_authorization)
.setTitle(getString(Settings.hasTwitterAuthorization()
@@ -433,7 +452,7 @@ public class SettingsActivity extends PreferenceActivity {
}
switch (requestCode) {
- case DIR_CHOOSER_MAPS_DIRECTORY_REQUEST:
+ case R.string.pref_mapDirectory:
if (data.hasExtra(Intents.EXTRA_MAP_FILE)) {
final String mapFile = data.getStringExtra(Intents.EXTRA_MAP_FILE);
Settings.setMapFile(mapFile);
@@ -445,11 +464,15 @@ public class SettingsActivity extends PreferenceActivity {
getPreference(R.string.pref_mapDirectory).setSummary(
Settings.getMapFileDirectory());
break;
- case OAUTH_OCDE_REQUEST:
+ case R.string.pref_fakekey_ocde_authorization:
setOCDEAuthTitle();
redrawScreen(R.string.pref_fakekey_services_screen);
break;
- case OAUTH_TWITTER_REQUEST:
+ case R.string.pref_fakekey_ocpl_authorization:
+ setOCPLAuthTitle();
+ redrawScreen(R.string.pref_fakekey_services_screen);
+ break;
+ case R.string.pref_fakekey_twitter_authorization:
setTwitterAuthTitle();
redrawScreen(R.string.pref_fakekey_services_screen);
break;
@@ -508,7 +531,7 @@ public class SettingsActivity extends PreferenceActivity {
cgeoapplication.getInstance().checkLogin = true;
}
// reset log-in status if connector activation was changed
- if (isPreference(preference, R.string.pref_connectorOCActive) || isPreference(preference, R.string.pref_connectorGCActive)) {
+ if (isPreference(preference, R.string.pref_connectorOCActive) || isPreference(preference, R.string.pref_connectorOCPLActive) || isPreference(preference, R.string.pref_connectorGCActive)) {
cgeoapplication.getInstance().checkLogin = true;
}
return true;
diff --git a/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java b/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java
index 6b185267..4d9a1f2 100644
--- a/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java
+++ b/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java
@@ -19,7 +19,7 @@ public class TwitterAuthorizationActivity extends OAuthAuthorizationActivity {
}
@Override
- protected ImmutablePair<String, String> getTempToken() {
+ protected ImmutablePair<String, String> getTempTokens() {
return Settings.getTempToken();
}