diff options
4 files changed, 64 insertions, 79 deletions
diff --git a/main/src/cgeo/geocaching/settings/CheckBoxWithPopupPreference.java b/main/src/cgeo/geocaching/settings/CheckBoxWithPopupPreference.java index e36e007..35df787 100644 --- a/main/src/cgeo/geocaching/settings/CheckBoxWithPopupPreference.java +++ b/main/src/cgeo/geocaching/settings/CheckBoxWithPopupPreference.java @@ -18,6 +18,7 @@ public class CheckBoxWithPopupPreference extends CheckBoxPreference { private String text; private String url; private String urlButton; + private OnPreferenceChangeListener baseOnPrefChangeListener = null; public CheckBoxWithPopupPreference(Context context) { super(context); @@ -53,10 +54,17 @@ public class CheckBoxWithPopupPreference extends CheckBoxPreference { @Override protected View onCreateView(ViewGroup parent) { + if (baseOnPrefChangeListener == null) { + baseOnPrefChangeListener = getOnPreferenceChangeListener(); + } + // show dialog when checkbox enabled setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(final Preference preference, Object newValue) { + if (baseOnPrefChangeListener != null) { + baseOnPrefChangeListener.onPreferenceChange(preference, newValue); + } if (!(Boolean) newValue) { return true; } diff --git a/main/src/cgeo/geocaching/settings/OAuthPreference.java b/main/src/cgeo/geocaching/settings/OAuthPreference.java index 477af3f..54f8023 100644 --- a/main/src/cgeo/geocaching/settings/OAuthPreference.java +++ b/main/src/cgeo/geocaching/settings/OAuthPreference.java @@ -60,7 +60,7 @@ public class OAuthPreference extends AbstractClickablePreference { @Override protected OnPreferenceClickListener getOnPreferenceClickListener(final SettingsActivity activity) { - activity.setOcAuthTitle(oAuthMapping.prefKeyId); + activity.setAuthTitle(oAuthMapping.prefKeyId); return new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { diff --git a/main/src/cgeo/geocaching/settings/OCPreferenceKeys.java b/main/src/cgeo/geocaching/settings/OCPreferenceKeys.java index f9d2a27..96f49e2 100644 --- a/main/src/cgeo/geocaching/settings/OCPreferenceKeys.java +++ b/main/src/cgeo/geocaching/settings/OCPreferenceKeys.java @@ -2,6 +2,7 @@ package cgeo.geocaching.settings; import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.R; +import cgeo.geocaching.connector.oc.OCAuthParams; import android.util.SparseArray; @@ -11,29 +12,46 @@ import java.util.Map; public enum OCPreferenceKeys { - OC_DE("oc.de", R.string.pref_connectorOCActive, R.string.preference_screen_ocde, R.string.pref_ocde_tokenpublic, R.string.pref_ocde_tokensecret), - OC_PL("oc.pl", R.string.pref_connectorOCPLActive, R.string.preference_screen_ocpl, R.string.pref_ocpl_tokenpublic, R.string.pref_ocpl_tokensecret), - OC_US("oc.us", R.string.pref_connectorOCUSActive, R.string.preference_screen_ocus, R.string.pref_ocus_tokenpublic, R.string.pref_ocus_tokensecret), - OC_NL("oc.nl", R.string.pref_connectorOCNLActive, R.string.preference_screen_ocnl, R.string.pref_ocnl_tokenpublic, R.string.pref_ocnl_tokensecret), - OC_RO("oc.ro", R.string.pref_connectorOCROActive, R.string.preference_screen_ocro, R.string.pref_ocro_tokenpublic, R.string.pref_ocro_tokensecret); + OC_DE("oc.de", R.string.pref_connectorOCActive, R.string.preference_screen_ocde, + R.string.pref_fakekey_ocde_authorization, R.string.pref_fakekey_ocde_website, + R.string.pref_ocde_tokenpublic, R.string.pref_ocde_tokensecret, OCAuthParams.OC_DE_AUTH_PARAMS), + OC_PL("oc.pl", R.string.pref_connectorOCPLActive, R.string.preference_screen_ocpl, + R.string.pref_fakekey_ocpl_authorization, R.string.pref_fakekey_ocpl_website, + R.string.pref_ocpl_tokenpublic, R.string.pref_ocpl_tokensecret, OCAuthParams.OC_PL_AUTH_PARAMS), + OC_US("oc.us", R.string.pref_connectorOCUSActive, R.string.preference_screen_ocus, + R.string.pref_fakekey_ocus_authorization, R.string.pref_fakekey_ocus_website, + R.string.pref_ocus_tokenpublic, R.string.pref_ocus_tokensecret, OCAuthParams.OC_US_AUTH_PARAMS), + OC_NL("oc.nl", R.string.pref_connectorOCNLActive, R.string.preference_screen_ocnl, + R.string.pref_fakekey_ocnl_authorization, R.string.pref_fakekey_ocnl_website, + R.string.pref_ocnl_tokenpublic, R.string.pref_ocnl_tokensecret, OCAuthParams.OC_NL_AUTH_PARAMS), + OC_RO("oc.ro", R.string.pref_connectorOCROActive, R.string.preference_screen_ocro, + R.string.pref_fakekey_ocro_authorization, R.string.pref_fakekey_ocro_website, + R.string.pref_ocro_tokenpublic, R.string.pref_ocro_tokensecret, OCAuthParams.OC_RO_AUTH_PARAMS); - private OCPreferenceKeys(final String siteId, final int isActivePrefId, final int prefScreenId, final int publicTokenPrefId, final int privateTokenPrefId) { + private OCPreferenceKeys(final String siteId, final int isActivePrefId, final int prefScreenId, final int websitePrefId, + final int authPrefId, final int publicTokenPrefId, final int privateTokenPrefId, final OCAuthParams authParams) { this.siteId = siteId; this.isActivePrefId = isActivePrefId; this.prefScreenId = prefScreenId; + this.websitePrefId = websitePrefId; + this.authPrefId = authPrefId; this.publicTokenPrefId = publicTokenPrefId; this.privateTokenPrefId = privateTokenPrefId; + this.authParams = authParams; } private static final SparseArray<OCPreferenceKeys> FIND_BY_ISACTIVE_ID; private static final Map<String, OCPreferenceKeys> FIND_BY_ISACTIVE_KEY; + private static final SparseArray<OCPreferenceKeys> FIND_BY_AUTH_PREF_ID; static { FIND_BY_ISACTIVE_ID = new SparseArray<OCPreferenceKeys>(values().length); + FIND_BY_AUTH_PREF_ID = new SparseArray<OCPreferenceKeys>(values().length); Map<String, OCPreferenceKeys> byIsactiveKey = new HashMap<String, OCPreferenceKeys>(); for (OCPreferenceKeys key : values()) { FIND_BY_ISACTIVE_ID.put(key.isActivePrefId, key); + FIND_BY_AUTH_PREF_ID.put(key.authPrefId, key); byIsactiveKey.put(CgeoApplication.getInstance().getString(key.isActivePrefId), key); } FIND_BY_ISACTIVE_KEY = Collections.unmodifiableMap(byIsactiveKey); @@ -51,6 +69,10 @@ public enum OCPreferenceKeys { return FIND_BY_ISACTIVE_ID.get(prefId); } + public static OCPreferenceKeys getByAuthId(final int authPrefId) { + return FIND_BY_AUTH_PREF_ID.get(authPrefId); + } + public static OCPreferenceKeys getByKey(final String prefKey) { return FIND_BY_ISACTIVE_KEY.get(prefKey); } @@ -58,7 +80,10 @@ public enum OCPreferenceKeys { public final String siteId; public final int isActivePrefId; public final int prefScreenId; + public final int websitePrefId; + public final int authPrefId; public final int publicTokenPrefId; public final int privateTokenPrefId; + public final OCAuthParams authParams; } diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java index a3749cf..dc1a39d 100644 --- a/main/src/cgeo/geocaching/settings/SettingsActivity.java +++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java @@ -10,7 +10,6 @@ import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory.NavigationAppsEnum; import cgeo.geocaching.connector.gc.GCConnector; import cgeo.geocaching.connector.gc.GCLogin; -import cgeo.geocaching.connector.oc.OCAuthParams; import cgeo.geocaching.files.SimpleDirChooser; import cgeo.geocaching.maps.MapProviderFactory; import cgeo.geocaching.maps.interfaces.MapSource; @@ -155,25 +154,19 @@ 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_connectorOCNLActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER); - getPreference(R.string.pref_connectorOCUSActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER); - getPreference(R.string.pref_connectorOCROActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER); + for (OCPreferenceKeys key : OCPreferenceKeys.values()) { + getPreference(key.isActivePrefId).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER); + setWebsite(key.websitePrefId, key.authParams.host); + setServiceScreenSummary(getPreferenceManager(), key.isActivePrefId); + } getPreference(R.string.pref_connectorGCActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER); + getPreference(R.string.pref_connectorOXActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER); getPreference(R.string.pref_connectorECActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER); setWebsite(R.string.pref_fakekey_gc_website, GCConnector.getInstance().getHost()); - setWebsite(R.string.pref_fakekey_ocde_website, OCAuthParams.OC_DE_AUTH_PARAMS.host); - setWebsite(R.string.pref_fakekey_ocpl_website, OCAuthParams.OC_PL_AUTH_PARAMS.host); - setWebsite(R.string.pref_fakekey_ocnl_website, OCAuthParams.OC_NL_AUTH_PARAMS.host); - setWebsite(R.string.pref_fakekey_ocus_website, OCAuthParams.OC_US_AUTH_PARAMS.host); - setWebsite(R.string.pref_fakekey_ocro_website, OCAuthParams.OC_RO_AUTH_PARAMS.host); + setWebsite(R.string.pref_fakekey_ox_website, "opencaching.com"); setWebsite(R.string.pref_fakekey_ec_website, "extremcaching.com"); setWebsite(R.string.pref_fakekey_gcvote_website, "gcvote.com"); setWebsite(R.string.pref_fakekey_sendtocgeo_website, "send2.cgeo.org"); - for (OCPreferenceKeys key : OCPreferenceKeys.values()) { - setServiceScreenSummary(getPreferenceManager(), key.isActivePrefId); - } setServiceScreenSummary(getPreferenceManager(), R.string.pref_connectorGCActive); setServiceScreenSummary(getPreferenceManager(), R.string.pref_connectorOXActive); setServiceScreenSummary(getPreferenceManager(), R.string.pref_connectorECActive); @@ -451,23 +444,14 @@ public class SettingsActivity extends PreferenceActivity { Settings.putString(R.string.pref_webDeviceName, Settings.getWebDeviceName()); } - public void setOcAuthTitle(int prefKeyId) { - //TODO: Generalize! + public void setAuthTitle(int prefKeyId) { switch (prefKeyId) { case R.string.pref_fakekey_ocde_authorization: - setOCDEAuthTitle(); - break; case R.string.pref_fakekey_ocpl_authorization: - setOCPLAuthTitle(); - break; case R.string.pref_fakekey_ocnl_authorization: - setOCNLAuthTitle(); - break; case R.string.pref_fakekey_ocus_authorization: - setOCUSAuthTitle(); - break; case R.string.pref_fakekey_ocro_authorization: - setOCROAuthTitle(); + setOCAuthTitle(OCPreferenceKeys.getByAuthId(prefKeyId)); break; case R.string.pref_fakekey_twitter_authorization: setTwitterAuthTitle(); @@ -477,39 +461,13 @@ public class SettingsActivity extends PreferenceActivity { } } - void setOCDEAuthTitle() { - getPreference(R.string.pref_fakekey_ocde_authorization) - .setTitle(getString(Settings.hasOCAuthorization(R.string.pref_ocde_tokenpublic, R.string.pref_ocde_tokensecret) - ? R.string.settings_reauthorize - : R.string.settings_authorize)); - } - - 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.settings_reauthorize - : R.string.settings_authorize)); - } - - void setOCNLAuthTitle() { - getPreference(R.string.pref_fakekey_ocnl_authorization) - .setTitle(getString(Settings.hasOCAuthorization(R.string.pref_ocnl_tokenpublic, R.string.pref_ocnl_tokensecret) - ? R.string.settings_reauthorize - : R.string.settings_authorize)); - } - - void setOCUSAuthTitle() { - getPreference(R.string.pref_fakekey_ocus_authorization) - .setTitle(getString(Settings.hasOCAuthorization(R.string.pref_ocus_tokenpublic, R.string.pref_ocus_tokensecret) - ? R.string.settings_reauthorize - : R.string.settings_authorize)); - } - - void setOCROAuthTitle() { - getPreference(R.string.pref_fakekey_ocro_authorization) - .setTitle(getString(Settings.hasOCAuthorization(R.string.pref_ocro_tokenpublic, R.string.pref_ocro_tokensecret) - ? R.string.settings_reauthorize - : R.string.settings_authorize)); + void setOCAuthTitle(final OCPreferenceKeys key) { + if (key != null) { + getPreference(key.authPrefId) + .setTitle(getString(Settings.hasOCAuthorization(key.publicTokenPrefId, key.privateTokenPrefId) + ? R.string.settings_reauthorize + : R.string.settings_authorize)); + } } void setTwitterAuthTitle() { @@ -564,24 +522,15 @@ public class SettingsActivity extends PreferenceActivity { getPreference(R.string.pref_mapDirectory).setSummary(StringUtils.defaultString(Settings.getMapFileDirectory())); break; case R.string.pref_fakekey_ocde_authorization: - setOCDEAuthTitle(); - redrawScreen(R.string.preference_screen_ocde); - break; case R.string.pref_fakekey_ocpl_authorization: - setOCPLAuthTitle(); - redrawScreen(R.string.preference_screen_ocpl); - break; case R.string.pref_fakekey_ocnl_authorization: - setOCNLAuthTitle(); - redrawScreen(R.string.preference_screen_ocnl); - break; case R.string.pref_fakekey_ocus_authorization: - setOCUSAuthTitle(); - redrawScreen(R.string.preference_screen_ocus); - break; case R.string.pref_fakekey_ocro_authorization: - setOCROAuthTitle(); - redrawScreen(R.string.preference_screen_ocro); + OCPreferenceKeys key = OCPreferenceKeys.getByAuthId(requestCode); + if (key != null) { + setOCAuthTitle(key); + redrawScreen(key.prefScreenId); + } break; case R.string.pref_fakekey_twitter_authorization: setTwitterAuthTitle(); @@ -630,6 +579,7 @@ public class SettingsActivity extends PreferenceActivity { || isPreference(preference, R.string.pref_connectorOCUSActive) || isPreference(preference, R.string.pref_connectorOCROActive) || isPreference(preference, R.string.pref_connectorGCActive) + || isPreference(preference, R.string.pref_connectorOXActive) || isPreference(preference, R.string.pref_connectorECActive)) { // update summary boolean boolVal = ((Boolean) value).booleanValue(); @@ -639,6 +589,8 @@ public class SettingsActivity extends PreferenceActivity { preference.getPreferenceManager().findPreference(getKey(prefKey.prefScreenId)).setSummary(summary); } else if (isPreference(preference, R.string.pref_connectorGCActive)) { preference.getPreferenceManager().findPreference(getKey(R.string.preference_screen_gc)).setSummary(summary); + } else if (isPreference(preference, R.string.pref_connectorOXActive)) { + preference.getPreferenceManager().findPreference(getKey(R.string.preference_screen_ox)).setSummary(summary); } else if (isPreference(preference, R.string.pref_connectorECActive)) { preference.getPreferenceManager().findPreference(getKey(R.string.preference_screen_ec)).setSummary(summary); } |