From eb15dddf8715bbc1926b8030ab4db7fbeec666cf Mon Sep 17 00:00:00 2001 From: rsudev Date: Fri, 26 Jul 2013 23:05:40 +0200 Subject: Implements OKAPI Live access for opencaching.pl --- main/AndroidManifest.xml | 9 ++- main/res/values/preference_keys.xml | 6 ++ main/res/values/strings.xml | 6 ++ main/res/xml/preferences.xml | 19 ++++- .../geocaching/connector/ConnectorFactory.java | 14 ++-- .../geocaching/connector/oc/IOCAuthParams.java | 60 ++++++++++++++++ .../geocaching/connector/oc/OCApiConnector.java | 15 +++- .../connector/oc/OCApiLiveConnector.java | 30 ++++++-- .../connector/oc/OCAuthorizationActivity.java | 27 +++++--- .../geocaching/connector/oc/OCDEAuthParams.java | 46 +++++++++++++ .../connector/oc/OCDEAuthorizationActivity.java | 8 +++ .../geocaching/connector/oc/OCPLAuthParams.java | 46 +++++++++++++ .../connector/oc/OCPLAuthorizationActivity.java | 8 +++ .../cgeo/geocaching/connector/oc/OkapiClient.java | 4 +- .../network/OAuthAuthorizationActivity.java | 4 +- .../settings/AuthorizeOcDePreference.java | 45 ------------ .../geocaching/settings/AuthorizeOcPreference.java | 80 ++++++++++++++++++++++ .../settings/AuthorizeTwitterPreference.java | 3 +- main/src/cgeo/geocaching/settings/Settings.java | 54 +++++---------- .../cgeo/geocaching/settings/SettingsActivity.java | 43 +++++++++--- .../twitter/TwitterAuthorizationActivity.java | 2 +- 21 files changed, 405 insertions(+), 124 deletions(-) create mode 100644 main/src/cgeo/geocaching/connector/oc/IOCAuthParams.java create mode 100644 main/src/cgeo/geocaching/connector/oc/OCDEAuthParams.java create mode 100644 main/src/cgeo/geocaching/connector/oc/OCDEAuthorizationActivity.java create mode 100644 main/src/cgeo/geocaching/connector/oc/OCPLAuthParams.java create mode 100644 main/src/cgeo/geocaching/connector/oc/OCPLAuthorizationActivity.java delete mode 100644 main/src/cgeo/geocaching/settings/AuthorizeOcDePreference.java create mode 100644 main/src/cgeo/geocaching/settings/AuthorizeOcPreference.java (limited to 'main') diff --git a/main/AndroidManifest.xml b/main/AndroidManifest.xml index ff18da5..9b53da8 100644 --- a/main/AndroidManifest.xml +++ b/main/AndroidManifest.xml @@ -361,11 +361,16 @@ + + - diff --git a/main/res/values/preference_keys.xml b/main/res/values/preference_keys.xml index 0d4e4bb..5080e1a 100644 --- a/main/res/values/preference_keys.xml +++ b/main/res/values/preference_keys.xml @@ -5,11 +5,13 @@ fakekey_services_screen fakekey_basicmembers_screen fakekey_ocde_authorization + fakekey_ocpl_authorization fakekey_twitter_authorization connectorGCActive username password connectorOCActive + connectorOCPLActive pass-vote twitter webDeviceName @@ -86,4 +88,8 @@ ocde-temp-token-secret ocde-temp-token-public fieldnoteExportDate + ocpl_tokensecret + ocpl_tokenpublic + ocpl-temp-token-secret + ocpl-temp-token-public diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml index 6dd8064..68cd95d 100644 --- a/main/res/values/strings.xml +++ b/main/res/values/strings.xml @@ -391,6 +391,11 @@ Authorize c:geo with opencaching.de to search for caches and access/filter your found caches. Authorize c:geo Authorize c:geo again + Opencaching.pl + Activate + Authorize c:geo with opencaching.pl to search for caches and access/filter your found caches. + Authorize c:geo + Authorize c:geo again GCvote.com Twitter Activate @@ -534,6 +539,7 @@ opencaching.de + opencaching.pl Authorize c:geo Start authorization Start again diff --git a/main/res/xml/preferences.xml b/main/res/xml/preferences.xml index 660a411..ec2e6b6 100644 --- a/main/res/xml/preferences.xml +++ b/main/res/xml/preferences.xml @@ -74,13 +74,30 @@ android:layout="@layout/text_preference" android:text="@string/init_oc_de_description" android:dependency="@string/pref_connectorOCActive" /> - + + + + + + + + " + getName() + ", CC-BY-NC-ND, alle Logeinträge © jeweiliger Autor"; + return "© " + cache.getOwnerDisplayName() + ", " + getName() + ", " + 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 getTempToken() { - return Settings.getTempOCDEToken(); + protected ImmutablePair 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 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 tempToken = getTempToken(); + ImmutablePair tempToken = getTempTokens(); OAtoken = tempToken.left; OAtokenSecret = tempToken.right; @@ -289,7 +289,7 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity { } } - protected abstract ImmutablePair getTempToken(); + protected abstract ImmutablePair 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 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 getTokenPair(final int tokenPublicPrefKey, final int tokenSecretPrefKey) { + return new ImmutablePair(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 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(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 getTempToken() { + protected ImmutablePair getTempTokens() { return Settings.getTempToken(); } -- cgit v1.1