diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2013-12-18 16:34:33 +0100 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2013-12-18 16:34:33 +0100 |
| commit | 4ea99458fa7cc6acc7fc023f6d63addf36ee8f85 (patch) | |
| tree | 91451f36dfeb0c905868b632f425bf41a542370e /main | |
| parent | cdc560f4208fc77ce7e3ebe85a8e3baad0870dcd (diff) | |
| download | cgeo-4ea99458fa7cc6acc7fc023f6d63addf36ee8f85.zip cgeo-4ea99458fa7cc6acc7fc023f6d63addf36ee8f85.tar.gz cgeo-4ea99458fa7cc6acc7fc023f6d63addf36ee8f85.tar.bz2 | |
refactoring: remove duplicated code
Diffstat (limited to 'main')
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(); |
