aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2013-12-18 16:34:33 +0100
committerBananeweizen <bananeweizen@gmx.de>2013-12-18 16:34:33 +0100
commit4ea99458fa7cc6acc7fc023f6d63addf36ee8f85 (patch)
tree91451f36dfeb0c905868b632f425bf41a542370e /main/src
parentcdc560f4208fc77ce7e3ebe85a8e3baad0870dcd (diff)
downloadcgeo-4ea99458fa7cc6acc7fc023f6d63addf36ee8f85.zip
cgeo-4ea99458fa7cc6acc7fc023f6d63addf36ee8f85.tar.gz
cgeo-4ea99458fa7cc6acc7fc023f6d63addf36ee8f85.tar.bz2
refactoring: remove duplicated code
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/connector/ConnectorFactory.java13
-rw-r--r--main/src/cgeo/geocaching/connector/capability/ICredentials.java21
-rw-r--r--main/src/cgeo/geocaching/connector/ec/ECConnector.java19
-rw-r--r--main/src/cgeo/geocaching/connector/ec/ECLogin.java2
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCConnector.java18
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCLogin.java20
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCParser.java2
-rw-r--r--main/src/cgeo/geocaching/loaders/KeywordGeocacheListLoader.java6
-rw-r--r--main/src/cgeo/geocaching/settings/CheckECCredentialsPreference.java3
-rw-r--r--main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java2
-rw-r--r--main/src/cgeo/geocaching/settings/Settings.java40
-rw-r--r--main/src/cgeo/geocaching/settings/SettingsActivity.java2
12 files changed, 93 insertions, 55 deletions
diff --git a/main/src/cgeo/geocaching/connector/ConnectorFactory.java b/main/src/cgeo/geocaching/connector/ConnectorFactory.java
index 032d74c..2877eda 100644
--- a/main/src/cgeo/geocaching/connector/ConnectorFactory.java
+++ b/main/src/cgeo/geocaching/connector/ConnectorFactory.java
@@ -70,9 +70,9 @@ public final class ConnectorFactory {
@SuppressWarnings("unchecked")
private static <T extends IConnector> T[] getMatchingConnectors(final Class<T> clazz) {
final List<T> matching = new ArrayList<T>();
- for (final IConnector conn : CONNECTORS) {
- if (clazz.isInstance(conn)) {
- matching.add((T) conn);
+ for (final IConnector connector : CONNECTORS) {
+ if (clazz.isInstance(connector)) {
+ matching.add((T) connector);
}
}
T[] result = (T[]) Array.newInstance(clazz, matching.size());
@@ -155,11 +155,10 @@ public final class ConnectorFactory {
/** @see ISearchByViewPort#searchByViewport */
public static SearchResult searchByViewport(final @NonNull Viewport viewport, final String[] tokens) {
-
final SearchResult result = new SearchResult();
- for (final ISearchByViewPort vpconn : searchByViewPortConns) {
- if (vpconn.isActive()) {
- result.addSearchResult(vpconn.searchByViewport(viewport, tokens));
+ for (final ISearchByViewPort connector : searchByViewPortConns) {
+ if (connector.isActive()) {
+ result.addSearchResult(connector.searchByViewport(viewport, tokens));
}
}
return result;
diff --git a/main/src/cgeo/geocaching/connector/capability/ICredentials.java b/main/src/cgeo/geocaching/connector/capability/ICredentials.java
new file mode 100644
index 0000000..2d5cd0b
--- /dev/null
+++ b/main/src/cgeo/geocaching/connector/capability/ICredentials.java
@@ -0,0 +1,21 @@
+package cgeo.geocaching.connector.capability;
+
+
+/**
+ * Marker interface for connectors which have user name and password as credentials.
+ *
+ */
+public interface ICredentials {
+ /**
+ * Get preference key of the user name.
+ *
+ */
+ public int getUsernamePreferenceKey();
+
+ /**
+ * Get preference key of the password.
+ *
+ */
+ public int getPasswordPreferenceKey();
+
+}
diff --git a/main/src/cgeo/geocaching/connector/ec/ECConnector.java b/main/src/cgeo/geocaching/connector/ec/ECConnector.java
index 9a1146e..518bc35 100644
--- a/main/src/cgeo/geocaching/connector/ec/ECConnector.java
+++ b/main/src/cgeo/geocaching/connector/ec/ECConnector.java
@@ -8,6 +8,7 @@ import cgeo.geocaching.R;
import cgeo.geocaching.SearchResult;
import cgeo.geocaching.connector.AbstractConnector;
import cgeo.geocaching.connector.ILoggingManager;
+import cgeo.geocaching.connector.capability.ICredentials;
import cgeo.geocaching.connector.capability.ILogin;
import cgeo.geocaching.connector.capability.ISearchByCenter;
import cgeo.geocaching.connector.capability.ISearchByGeocode;
@@ -33,7 +34,7 @@ import java.util.Collection;
import java.util.List;
import java.util.regex.Pattern;
-public class ECConnector extends AbstractConnector implements ISearchByGeocode, ISearchByCenter, ISearchByViewPort, ILogin {
+public class ECConnector extends AbstractConnector implements ISearchByGeocode, ISearchByCenter, ISearchByViewPort, ILogin, ICredentials {
private static final String CACHE_URL = "http://extremcaching.com/index.php/output-2/";
@@ -42,7 +43,6 @@ public class ECConnector extends AbstractConnector implements ISearchByGeocode,
*/
private final static Pattern PATTERN_EC_CODE = Pattern.compile("EC[0-9]+", Pattern.CASE_INSENSITIVE);
-
private ECConnector() {
// singleton
}
@@ -51,10 +51,11 @@ public class ECConnector extends AbstractConnector implements ISearchByGeocode,
* initialization on demand holder pattern
*/
private static class Holder {
- private static final ECConnector INSTANCE = new ECConnector();
+ private static final @NonNull ECConnector INSTANCE = new ECConnector();
}
- public static ECConnector getInstance() {
+ public static @NonNull
+ ECConnector getInstance() {
return Holder.INSTANCE;
}
@@ -217,4 +218,14 @@ public class ECConnector extends AbstractConnector implements ISearchByGeocode,
return 7;
}
+ @Override
+ public int getUsernamePreferenceKey() {
+ return R.string.pref_ecusername;
+ }
+
+ @Override
+ public int getPasswordPreferenceKey() {
+ return R.string.pref_ecpassword;
+ }
+
}
diff --git a/main/src/cgeo/geocaching/connector/ec/ECLogin.java b/main/src/cgeo/geocaching/connector/ec/ECLogin.java
index dc19f98..089688e 100644
--- a/main/src/cgeo/geocaching/connector/ec/ECLogin.java
+++ b/main/src/cgeo/geocaching/connector/ec/ECLogin.java
@@ -35,7 +35,7 @@ public class ECLogin extends AbstractLogin {
@Override
protected StatusCode login(boolean retry) {
- final ImmutablePair<String, String> login = Settings.getECLogin();
+ final ImmutablePair<String, String> login = Settings.getCredentials(ECConnector.getInstance());
if (StringUtils.isEmpty(login.left) || StringUtils.isEmpty(login.right)) {
clearLoginInfo();
diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java
index 0f4388a..f642dab 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java
@@ -9,6 +9,7 @@ import cgeo.geocaching.R;
import cgeo.geocaching.SearchResult;
import cgeo.geocaching.connector.AbstractConnector;
import cgeo.geocaching.connector.ILoggingManager;
+import cgeo.geocaching.connector.capability.ICredentials;
import cgeo.geocaching.connector.capability.ILogin;
import cgeo.geocaching.connector.capability.ISearchByCenter;
import cgeo.geocaching.connector.capability.ISearchByGeocode;
@@ -33,7 +34,7 @@ import android.os.Handler;
import java.util.regex.Pattern;
-public class GCConnector extends AbstractConnector implements ISearchByGeocode, ISearchByCenter, ISearchByViewPort, ISearchByKeyword, ILogin {
+public class GCConnector extends AbstractConnector implements ISearchByGeocode, ISearchByCenter, ISearchByViewPort, ISearchByKeyword, ILogin, ICredentials {
private static final String CACHE_URL_SHORT = "http://coord.info/";
// Double slash is used to force open in browser
@@ -57,10 +58,11 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode,
* initialization on demand holder pattern
*/
private static class Holder {
- private static final GCConnector INSTANCE = new GCConnector();
+ private static final @NonNull GCConnector INSTANCE = new GCConnector();
}
- public static GCConnector getInstance() {
+ public static @NonNull
+ GCConnector getInstance() {
return Holder.INSTANCE;
}
@@ -360,4 +362,14 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode,
public SearchResult searchByKeyword(@NonNull String keyword, final @NonNull RecaptchaReceiver recaptchaReceiver) {
return GCParser.searchByKeyword(keyword, Settings.getCacheType(), Settings.isShowCaptcha(), recaptchaReceiver);
}
+
+ @Override
+ public int getUsernamePreferenceKey() {
+ return R.string.pref_username;
+ }
+
+ @Override
+ public int getPasswordPreferenceKey() {
+ return R.string.pref_password;
+ }
}
diff --git a/main/src/cgeo/geocaching/connector/gc/GCLogin.java b/main/src/cgeo/geocaching/connector/gc/GCLogin.java
index 3b143a3..7699552 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCLogin.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCLogin.java
@@ -74,9 +74,11 @@ public class GCLogin extends AbstractLogin {
@Override
protected StatusCode login(boolean retry) {
- final ImmutablePair<String, String> login = Settings.getGcLogin();
+ final ImmutablePair<String, String> credentials = Settings.getGcCredentials();
+ final String username = credentials.left;
+ final String password = credentials.right;
- if (StringUtils.isEmpty(login.left) || StringUtils.isEmpty(login.right)) {
+ if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
clearLoginInfo();
Log.e("Login.login: No login information stored");
return StatusCode.NO_LOGIN_INFO_STORED;
@@ -95,7 +97,7 @@ public class GCLogin extends AbstractLogin {
}
if (getLoginStatus(loginData)) {
- Log.i("Already logged in Geocaching.com as " + login.left + " (" + Settings.getMemberStatus() + ')');
+ Log.i("Already logged in Geocaching.com as " + username + " (" + Settings.getMemberStatus() + ')');
switchToEnglish(loginData);
return StatusCode.NO_ERROR; // logged in
}
@@ -106,8 +108,8 @@ public class GCLogin extends AbstractLogin {
final Parameters params = new Parameters(
"__EVENTTARGET", "",
"__EVENTARGUMENT", "",
- "ctl00$ContentBody$tbUsername", login.left,
- "ctl00$ContentBody$tbPassword", login.right,
+ "ctl00$ContentBody$tbUsername", username,
+ "ctl00$ContentBody$tbPassword", password,
"ctl00$ContentBody$cbRememberMe", "on",
"ctl00$ContentBody$btnSignIn", "Login");
final String[] viewstates = GCLogin.getViewstates(loginData);
@@ -128,7 +130,7 @@ public class GCLogin extends AbstractLogin {
assert loginData != null; // Caught above
if (getLoginStatus(loginData)) {
- Log.i("Successfully logged in Geocaching.com as " + login.left + " (" + Settings.getMemberStatus() + ')');
+ Log.i("Successfully logged in Geocaching.com as " + username + " (" + Settings.getMemberStatus() + ')');
switchToEnglish(loginData);
Settings.setCookieStore(Cookies.dumpCookieStore());
@@ -137,16 +139,16 @@ public class GCLogin extends AbstractLogin {
}
if (loginData.contains("Your username/password combination does not match.")) {
- Log.i("Failed to log in Geocaching.com as " + login.left + " because of wrong username/password");
+ Log.i("Failed to log in Geocaching.com as " + username + " because of wrong username/password");
return StatusCode.WRONG_LOGIN_DATA; // wrong login
}
if (loginData.contains("You must validate your account before you can log in.")) {
- Log.i("Failed to log in Geocaching.com as " + login.left + " because account needs to be validated first");
+ Log.i("Failed to log in Geocaching.com as " + username + " because account needs to be validated first");
return StatusCode.UNVALIDATED_ACCOUNT;
}
- Log.i("Failed to log in Geocaching.com as " + login.left + " for some unknown reason");
+ Log.i("Failed to log in Geocaching.com as " + username + " for some unknown reason");
if (retry) {
switchToEnglish(loginData);
return login(false);
diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java
index 46f283a..2704a4d 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCParser.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java
@@ -887,7 +887,7 @@ public abstract class GCParser {
}
private static boolean isSearchForMyCaches(final String userName) {
- if (userName.equalsIgnoreCase(Settings.getGcLogin().left)) {
+ if (userName.equalsIgnoreCase(Settings.getGcCredentials().left)) {
Log.i("Overriding users choice because of self search, downloading all caches.");
return true;
}
diff --git a/main/src/cgeo/geocaching/loaders/KeywordGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/KeywordGeocacheListLoader.java
index c8deb59..9c16ee4 100644
--- a/main/src/cgeo/geocaching/loaders/KeywordGeocacheListLoader.java
+++ b/main/src/cgeo/geocaching/loaders/KeywordGeocacheListLoader.java
@@ -4,13 +4,15 @@ import cgeo.geocaching.SearchResult;
import cgeo.geocaching.connector.ConnectorFactory;
import cgeo.geocaching.connector.capability.ISearchByKeyword;
+import org.eclipse.jdt.annotation.NonNull;
+
import android.content.Context;
public class KeywordGeocacheListLoader extends AbstractSearchLoader {
- private final String keyword;
+ private final @NonNull String keyword;
- public KeywordGeocacheListLoader(Context context, String keyword) {
+ public KeywordGeocacheListLoader(Context context, final @NonNull String keyword) {
super(context);
this.keyword = keyword;
}
diff --git a/main/src/cgeo/geocaching/settings/CheckECCredentialsPreference.java b/main/src/cgeo/geocaching/settings/CheckECCredentialsPreference.java
index a1497bb..46a3661 100644
--- a/main/src/cgeo/geocaching/settings/CheckECCredentialsPreference.java
+++ b/main/src/cgeo/geocaching/settings/CheckECCredentialsPreference.java
@@ -1,5 +1,6 @@
package cgeo.geocaching.settings;
+import cgeo.geocaching.connector.ec.ECConnector;
import cgeo.geocaching.connector.ec.ECLogin;
import cgeo.geocaching.enumerations.StatusCode;
@@ -24,7 +25,7 @@ public class CheckECCredentialsPreference extends AbstractCheckCredentialsPrefer
@Override
protected ImmutablePair<String, String> getCredentials() {
- return Settings.getECLogin();
+ return Settings.getCredentials(ECConnector.getInstance());
}
@Override
diff --git a/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java b/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java
index 400f898..12c8b24 100644
--- a/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java
+++ b/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java
@@ -24,7 +24,7 @@ public class CheckGcCredentialsPreference extends AbstractCheckCredentialsPrefer
@Override
protected ImmutablePair<String, String> getCredentials() {
- return Settings.getGcLogin();
+ return Settings.getGcCredentials();
}
@Override
diff --git a/main/src/cgeo/geocaching/settings/Settings.java b/main/src/cgeo/geocaching/settings/Settings.java
index ca2da78..186e5d9 100644
--- a/main/src/cgeo/geocaching/settings/Settings.java
+++ b/main/src/cgeo/geocaching/settings/Settings.java
@@ -3,6 +3,8 @@ package cgeo.geocaching.settings;
import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.R;
import cgeo.geocaching.apps.cache.navi.NavigationAppFactory.NavigationAppsEnum;
+import cgeo.geocaching.connector.capability.ICredentials;
+import cgeo.geocaching.connector.gc.GCConnector;
import cgeo.geocaching.connector.gc.GCConstants;
import cgeo.geocaching.connector.gc.GCLogin;
import cgeo.geocaching.enumerations.CacheType;
@@ -24,6 +26,7 @@ import cgeo.geocaching.utils.Log;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import android.content.Context;
@@ -270,20 +273,12 @@ public class Settings {
}
/**
- * Get login and password information.
+ * Get login and password information of Geocaching.com.
*
* @return a pair either with (login, password) or (empty, empty) if no valid information is stored
*/
- public static ImmutablePair<String, String> getGcLogin() {
-
- final String username = getString(R.string.pref_username, null);
- final String password = getString(R.string.pref_password, null);
-
- if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) {
- return new ImmutablePair<String, String>(StringUtils.EMPTY, StringUtils.EMPTY);
- }
-
- return new ImmutablePair<String, String>(username, password);
+ public static ImmutablePair<String, String> getGcCredentials() {
+ return getCredentials(GCConnector.getInstance());
}
/**
@@ -291,10 +286,9 @@ public class Settings {
*
* @return a pair either with (login, password) or (empty, empty) if no valid information is stored
*/
- public static ImmutablePair<String, String> getECLogin() {
-
- final String username = getString(R.string.pref_ecusername, null);
- final String password = getString(R.string.pref_ecpassword, null);
+ public static ImmutablePair<String, String> getCredentials(final @NonNull ICredentials connector) {
+ final String username = getString(connector.getUsernamePreferenceKey(), null);
+ final String password = getString(connector.getPasswordPreferenceKey(), null);
if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) {
return new ImmutablePair<String, String>(StringUtils.EMPTY, StringUtils.EMPTY);
@@ -636,8 +630,6 @@ public class Settings {
* @return
*/
private static int getConvertedMapId() {
- // what the heck is happening here?? hashCodes of Strings?
- // why not strings?
final int id = Integer.parseInt(getString(R.string.pref_mapsource,
String.valueOf(MAP_SOURCE_DEFAULT)));
switch (id) {
@@ -950,18 +942,16 @@ public class Settings {
putBoolean(R.string.pref_excludemine, exclude);
}
- static boolean setLogin(final String username, final String password) {
-
+ static void setLogin(final String username, final String password) {
if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) {
// erase username and password
- boolean a = remove(R.string.pref_username);
- boolean b = remove(R.string.pref_password);
- return a && b;
+ remove(R.string.pref_username);
+ remove(R.string.pref_password);
+ return;
}
// save username and password
- boolean a = putString(R.string.pref_username, username);
- boolean b = putString(R.string.pref_password, password);
- return a && b;
+ putString(R.string.pref_username, username);
+ putString(R.string.pref_password, password);
}
public static long getFieldnoteExportDate() {
diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java
index 46dacb2..2cb9547 100644
--- a/main/src/cgeo/geocaching/settings/SettingsActivity.java
+++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java
@@ -520,7 +520,7 @@ public class SettingsActivity extends PreferenceActivity {
// simple string representation.
preference.setSummary(stringValue);
}
- if ((isPreference(preference, R.string.pref_username) && !stringValue.equals(Settings.getUsername())) || (isPreference(preference, R.string.pref_password) && !stringValue.equals(Settings.getGcLogin().getRight()))) {
+ if ((isPreference(preference, R.string.pref_username) && !stringValue.equals(Settings.getUsername())) || (isPreference(preference, R.string.pref_password) && !stringValue.equals(Settings.getGcCredentials().getRight()))) {
// reset log-in if gc user or password is changed
if (GCLogin.getInstance().isActualLoginStatus()) {
GCLogin.getInstance().logout();