aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/AndroidManifest.xml9
-rw-r--r--main/res/values/preference_keys.xml6
-rw-r--r--main/res/values/strings.xml6
-rw-r--r--main/res/xml/preferences.xml19
-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.java51
-rw-r--r--main/src/cgeo/geocaching/settings/SettingsActivity.java45
-rw-r--r--main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java2
21 files changed, 405 insertions, 123 deletions
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 @@
</service>
<activity
- android:name=".connector.oc.OCAuthorizationActivity"
+ android:name=".connector.oc.OCDEAuthorizationActivity"
+ android:configChanges="keyboardHidden|orientation"
+ android:label="@string/app_name"
+ android:windowSoftInputMode="stateHidden" >
+ </activity>
+ <activity
+ android:name=".connector.oc.OCPLAuthorizationActivity"
android:configChanges="keyboardHidden|orientation"
android:label="@string/app_name"
android:windowSoftInputMode="stateHidden" >
</activity>
</application>
-
</manifest>
diff --git a/main/res/values/preference_keys.xml b/main/res/values/preference_keys.xml
index bc467f0..e82c9d6 100644
--- a/main/res/values/preference_keys.xml
+++ b/main/res/values/preference_keys.xml
@@ -5,12 +5,14 @@
<string name="pref_fakekey_services_screen">fakekey_services_screen</string>
<string name="pref_fakekey_basicmembers_screen">fakekey_basicmembers_screen</string>
<string name="pref_fakekey_ocde_authorization">fakekey_ocde_authorization</string>
+ <string name="pref_fakekey_ocpl_authorization">fakekey_ocpl_authorization</string>
<string name="pref_fakekey_twitter_authorization">fakekey_twitter_authorization</string>
<string name="pref_fakekey_navigation_menu_screen">fakekey_navigation_menu_screen</string>
<string name="pref_connectorGCActive">connectorGCActive</string>
<string name="pref_username">username</string>
<string name="pref_password">password</string>
<string name="pref_connectorOCActive">connectorOCActive</string>
+ <string name="pref_connectorOCPLActive">connectorOCPLActive</string>
<string name="pref_pass_vote">pass-vote</string>
<string name="pref_twitter">twitter</string>
<string name="pref_webDeviceName">webDeviceName</string>
@@ -106,4 +108,8 @@
<string name="pref_navigation_menu_cache_beacon">navigationCacheBeacon</string>
<string name="pref_navigation_menu_gcc">navigationGcc</string>
<string name="pref_navigation_menu_where_you_go">navigationWhereYouGo</string>
+ <string name="pref_ocpl_tokensecret">ocpl_tokensecret</string>
+ <string name="pref_ocpl_tokenpublic">ocpl_tokenpublic</string>
+ <string name="pref_temp_ocpl_token_secret">ocpl-temp-token-secret</string>
+ <string name="pref_temp_ocpl_token_public">ocpl-temp-token-public</string>
</resources>
diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml
index 7af4b5c..3ca5959 100644
--- a/main/res/values/strings.xml
+++ b/main/res/values/strings.xml
@@ -394,6 +394,11 @@
<string name="init_oc_de_description">Authorize c:geo with opencaching.de to search for caches and access/filter your found caches.</string>
<string name="init_register_oc_de">Authorize c:geo</string>
<string name="init_reregister_oc_de">Authorize c:geo again</string>
+ <string name="init_oc_pl">Opencaching.pl</string>
+ <string name="settings_activate_oc_pl">Activate</string>
+ <string name="init_oc_pl_description">Authorize c:geo with opencaching.pl to search for caches and access/filter your found caches.</string>
+ <string name="init_register_oc_pl">Authorize c:geo</string>
+ <string name="init_reregister_oc_pl">Authorize c:geo again</string>
<string name="init_gcvote">GCvote.com</string>
<string name="init_twitter">Twitter</string>
<string name="settings_activate_twitter">Activate</string>
@@ -538,6 +543,7 @@
<!-- auth opencaching -->
<string name="auth_ocde">opencaching.de</string>
+ <string name="auth_ocpl">opencaching.pl</string>
<string name="auth_authorize_oc">Authorize c:geo</string>
<string name="auth_start_oc">Start authorization</string>
<string name="auth_again_oc">Start again</string>
diff --git a/main/res/xml/preferences.xml b/main/res/xml/preferences.xml
index edfcf98..2afb1ad 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" />
- <cgeo.geocaching.settings.AuthorizeOcDePreference
+ <cgeo.geocaching.settings.AuthorizeOcPreference
android:key="@string/pref_fakekey_ocde_authorization"
android:dependency="@string/pref_connectorOCActive" />
</PreferenceCategory>
<PreferenceCategory
+ android:title="@string/init_oc_pl" >
+
+ <CheckBoxPreference
+ android:key="@string/pref_connectorOCPLActive"
+ android:title="@string/settings_activate_oc_pl"
+ android:defaultValue="false" />
+ <cgeo.geocaching.settings.TextPreference
+ android:layout="@layout/text_preference"
+ android:text="@string/init_oc_pl_description"
+ android:dependency="@string/pref_connectorOCPLActive" />
+ <cgeo.geocaching.settings.AuthorizeOcPreference
+ android:key="@string/pref_fakekey_ocpl_authorization"
+ android:dependency="@string/pref_connectorOCPLActive" />
+
+ </PreferenceCategory>
+
+ <PreferenceCategory
android:title="@string/init_gcvote" >
<cgeo.geocaching.settings.EditPasswordPreference
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 ae3af05..139a48e 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;
@@ -610,7 +611,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 43afcb2..0e6158f 100644
--- a/main/src/cgeo/geocaching/settings/Settings.java
+++ b/main/src/cgeo/geocaching/settings/Settings.java
@@ -313,47 +313,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 ImmutablePair<String, String> getTokenPair(final int tokenPublicPrefKey, final int tokenSecretPrefKey) {
+ return new ImmutablePair<String, String>(getString(tokenPublicPrefKey, null), getString(tokenSecretPrefKey, null));
}
- 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 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() {
diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java
index c099f40..42f6074 100644
--- a/main/src/cgeo/geocaching/settings/SettingsActivity.java
+++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java
@@ -44,6 +44,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
@@ -61,10 +62,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;
/**
@@ -150,6 +147,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);
}
@@ -257,7 +255,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;
}
});
@@ -381,13 +379,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()
@@ -416,7 +435,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);
@@ -428,11 +447,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;
@@ -462,8 +485,8 @@ public class SettingsActivity extends PreferenceActivity {
final MapSource mapSource = MapProviderFactory.getMapSource(mapSourceId);
Settings.setMapSource(mapSource);
preference.setSummary(mapSource.getName());
- } else if (isPreference(preference, R.string.pref_connectorOCActive) || isPreference(preference, R.string.pref_connectorGCActive)) {
- // reset log-in status if connector activation was changed
+ } else if (isPreference(preference, R.string.pref_connectorOCActive) || isPreference(preference, R.string.pref_connectorOCPLActive) || isPreference(preference, R.string.pref_connectorGCActive)) {
+ // // reset log-in status if connector activation was changed
cgeoapplication.getInstance().checkLogin = true;
} else if (preference instanceof ListPreference) {
// For list preferences, look up the correct display value in
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();
}