diff options
| -rw-r--r-- | main/res/values/preference_keys.xml | 1 | ||||
| -rw-r--r-- | main/res/values/strings.xml | 1 | ||||
| -rw-r--r-- | main/res/xml/preferences.xml | 2 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/settings/OCPreferenceKeys.java | 64 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/settings/SettingsActivity.java | 54 |
5 files changed, 120 insertions, 2 deletions
diff --git a/main/res/values/preference_keys.xml b/main/res/values/preference_keys.xml index dc151e7..91b2c67 100644 --- a/main/res/values/preference_keys.xml +++ b/main/res/values/preference_keys.xml @@ -16,6 +16,7 @@ <string name="preference_screen_ocus">preference_screen_ocus</string> <string name="preference_screen_ocro">preference_screen_ocro</string> <string name="preference_screen_ec">preference_screen_ec</string> + <string name="preference_screen_ox">preference_screen_ox</string> <string name="preference_screen_twitter">preference_screen_twitter</string> <string name="preference_screen_navigation_menu">fakekey_navigation_menu_screen</string> <string name="pref_fakekey_ocde_authorization">fakekey_ocde_authorization</string> diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml index f4c9d14..62c3bbf 100644 --- a/main/res/values/strings.xml +++ b/main/res/values/strings.xml @@ -434,6 +434,7 @@ <string name="init_login_popup_not_authorized">Not authorized</string> <string name="init_login_popup_invalid_timestamp">Local time invalid, adjust device time</string> <string name="init_login_popup_invalid_token">Authorization invalid, re-authorize</string> + <string name="settings_service_active">Active</string> <string name="init_signature">Signature</string> <string name="init_template_help">Placeholder strings like [NAME] will be expanded later when this template is used.</string> <string name="init_signature_template_button">Insert Template</string> diff --git a/main/res/xml/preferences.xml b/main/res/xml/preferences.xml index 1836dbe..fb17fb8 100644 --- a/main/res/xml/preferences.xml +++ b/main/res/xml/preferences.xml @@ -266,7 +266,7 @@ android:title="@string/settings_open_website" /> </PreferenceCategory> </PreferenceScreen> - <PreferenceScreen android:title="@string/settings_title_ox" > + <PreferenceScreen android:title="@string/settings_title_ox" android:key="@string/preference_screen_ox"> <PreferenceCategory android:title="@string/settings_settings" > <CheckBoxPreference android:defaultValue="false" diff --git a/main/src/cgeo/geocaching/settings/OCPreferenceKeys.java b/main/src/cgeo/geocaching/settings/OCPreferenceKeys.java new file mode 100644 index 0000000..f9d2a27 --- /dev/null +++ b/main/src/cgeo/geocaching/settings/OCPreferenceKeys.java @@ -0,0 +1,64 @@ +package cgeo.geocaching.settings; + +import cgeo.geocaching.CgeoApplication; +import cgeo.geocaching.R; + +import android.util.SparseArray; + +import java.util.Collections; +import java.util.HashMap; +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); + + + private OCPreferenceKeys(final String siteId, final int isActivePrefId, final int prefScreenId, final int publicTokenPrefId, final int privateTokenPrefId) { + this.siteId = siteId; + this.isActivePrefId = isActivePrefId; + this.prefScreenId = prefScreenId; + this.publicTokenPrefId = publicTokenPrefId; + this.privateTokenPrefId = privateTokenPrefId; + } + + private static final SparseArray<OCPreferenceKeys> FIND_BY_ISACTIVE_ID; + private static final Map<String, OCPreferenceKeys> FIND_BY_ISACTIVE_KEY; + + static { + FIND_BY_ISACTIVE_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); + byIsactiveKey.put(CgeoApplication.getInstance().getString(key.isActivePrefId), key); + } + FIND_BY_ISACTIVE_KEY = Collections.unmodifiableMap(byIsactiveKey); + } + + public static boolean isOCPreference(final int prefId) { + return FIND_BY_ISACTIVE_ID.get(prefId) != null; + } + + public static boolean isOCPreference(final String prefKey) { + return FIND_BY_ISACTIVE_KEY.containsKey(prefKey); + } + + public static OCPreferenceKeys getById(final int prefId) { + return FIND_BY_ISACTIVE_ID.get(prefId); + } + + public static OCPreferenceKeys getByKey(final String prefKey) { + return FIND_BY_ISACTIVE_KEY.get(prefKey); + } + + public final String siteId; + public final int isActivePrefId; + public final int prefScreenId; + public final int publicTokenPrefId; + public final int privateTokenPrefId; + +} diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java index 3fdf161..a5b525e 100644 --- a/main/src/cgeo/geocaching/settings/SettingsActivity.java +++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java @@ -171,6 +171,12 @@ public class SettingsActivity extends PreferenceActivity { 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); } private void setWebsite(final int preferenceKey, final String host) { @@ -184,6 +190,36 @@ public class SettingsActivity extends PreferenceActivity { }); } + private static String getServiceSummary(boolean status) { + return status ? CgeoApplication.getInstance().getString(R.string.settings_service_active) : StringUtils.EMPTY; + } + + private static void setServiceScreenSummary(PreferenceManager preferenceManager, final int preferenceKey) { + + String summary = StringUtils.EMPTY; + + switch (preferenceKey) { + case R.string.pref_connectorGCActive: + summary = getServiceSummary(Settings.isGCConnectorActive()); + preferenceManager.findPreference(getKey(R.string.preference_screen_gc)).setSummary(summary); + break; + case R.string.pref_connectorOXActive: + summary = getServiceSummary(Settings.isOXConnectorActive()); + preferenceManager.findPreference(getKey(R.string.preference_screen_ox)).setSummary(summary); + break; + case R.string.pref_connectorECActive: + summary = getServiceSummary(Settings.isECConnectorActive()); + preferenceManager.findPreference(getKey(R.string.preference_screen_ec)).setSummary(summary); + break; + default: + if (OCPreferenceKeys.isOCPreference(preferenceKey)) { + OCPreferenceKeys prefKey = OCPreferenceKeys.getById(preferenceKey); + summary = getServiceSummary(Settings.isOCConnectorActive(prefKey.isActivePrefId)); + preferenceManager.findPreference(getKey(prefKey.prefScreenId)).setSummary(summary); + } + } + } + private static String getKey(final int prefKeyId) { return CgeoApplication.getInstance().getString(prefKeyId); } @@ -397,6 +433,10 @@ public class SettingsActivity extends PreferenceActivity { */ void redrawScreen(final int key) { final Preference preference = getPreference(key); + redrawScreen(preference); + } + + static void redrawScreen(final Preference preference) { if (!(preference instanceof PreferenceScreen)) { return; } @@ -591,7 +631,19 @@ public class SettingsActivity extends PreferenceActivity { || isPreference(preference, R.string.pref_connectorOCROActive) || isPreference(preference, R.string.pref_connectorGCActive) || isPreference(preference, R.string.pref_connectorECActive)) { - // // reset log-in status if connector activation was changed + // update summary + boolean boolVal = ((Boolean) value).booleanValue(); + String summary = getServiceSummary(boolVal); + if (OCPreferenceKeys.isOCPreference(preference.getKey())) { + OCPreferenceKeys prefKey = OCPreferenceKeys.getByKey(preference.getKey()); + 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_connectorECActive)) { + preference.getPreferenceManager().findPreference(getKey(R.string.preference_screen_ec)).setSummary(summary); + } + redrawScreen(preference.getPreferenceManager().findPreference(getKey(R.string.preference_screen_services))); + // reset log-in status if connector activation was changed CgeoApplication.getInstance().forceRelog(); } else if (preference instanceof ListPreference) { // For list preferences, look up the correct display value in |
