diff options
Diffstat (limited to 'main/src')
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(); } |
