diff options
Diffstat (limited to 'main/src/cgeo/geocaching/settings/SettingsActivity.java')
| -rw-r--r-- | main/src/cgeo/geocaching/settings/SettingsActivity.java | 162 |
1 files changed, 83 insertions, 79 deletions
diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java index dc1a39d..2aff006 100644 --- a/main/src/cgeo/geocaching/settings/SettingsActivity.java +++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java @@ -9,11 +9,11 @@ import cgeo.geocaching.activity.ActivityMixin; 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.files.SimpleDirChooser; import cgeo.geocaching.maps.MapProviderFactory; import cgeo.geocaching.maps.interfaces.MapSource; import cgeo.geocaching.utils.DatabaseBackupUtils; +import cgeo.geocaching.utils.DebugUtils; import cgeo.geocaching.utils.Log; import org.apache.commons.lang3.StringUtils; @@ -62,7 +62,7 @@ public class SettingsActivity extends PreferenceActivity { * directory and preference key in onActivityResult() easily just by knowing * the result code. */ - private enum DirChooserType { + private static enum DirChooserType { GPX_IMPORT_DIR(1, R.string.pref_gpxImportDir, Environment.getExternalStorageDirectory().getPath() + "/gpx", false), GPX_EXPORT_DIR(2, R.string.pref_gpxExportDir, @@ -90,21 +90,21 @@ public class SettingsActivity extends PreferenceActivity { SettingsActivity.addPreferencesFromResource(this, R.xml.preferences); initPreferences(); - Intent intent = getIntent(); + final Intent intent = getIntent(); openInitialScreen(intent.getIntExtra(INTENT_OPEN_SCREEN, 0)); } - private void openInitialScreen(int initialScreen) { + private void openInitialScreen(final int initialScreen) { if (initialScreen == 0) { return; } - PreferenceScreen screen = (PreferenceScreen) getPreference(initialScreen); + final PreferenceScreen screen = (PreferenceScreen) getPreference(initialScreen); if (screen == null) { return; } try { setPreferenceScreen(screen); - } catch (RuntimeException e) { + } catch (final RuntimeException e) { Log.e("could not open preferences " + initialScreen, e); } } @@ -129,7 +129,7 @@ public class SettingsActivity extends PreferenceActivity { initNavigationMenuPreferences(); initMaintenanceButtons(); - for (int k : new int[] { R.string.pref_username, R.string.pref_password, + for (final int k : new int[] { R.string.pref_username, R.string.pref_password, R.string.pref_pass_vote, R.string.pref_signature, R.string.pref_mapsource, R.string.pref_renderthemepath, R.string.pref_gpxExportDir, R.string.pref_gpxImportDir, @@ -143,7 +143,7 @@ public class SettingsActivity extends PreferenceActivity { } private void initNavigationMenuPreferences() { - for (NavigationAppsEnum appEnum : NavigationAppsEnum.values()) { + for (final NavigationAppsEnum appEnum : NavigationAppsEnum.values()) { if (appEnum.app.isInstalled()) { getPreference(appEnum.preferenceKey).setEnabled(true); } @@ -154,26 +154,33 @@ public class SettingsActivity extends PreferenceActivity { } private void initServicePreferences() { - for (OCPreferenceKeys key : OCPreferenceKeys.values()) { + for (final OCPreferenceKeys key : OCPreferenceKeys.values()) { getPreference(key.isActivePrefId).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER); setWebsite(key.websitePrefId, key.authParams.host); - setServiceScreenSummary(getPreferenceManager(), key.isActivePrefId); + getPreference(key.prefScreenId).setSummary(getServiceSummary(Settings.isOCConnectorActive(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()); + getPreference(R.string.preference_screen_gc).setSummary(getServiceSummary(Settings.isGCConnectorActive())); + + getPreference(R.string.pref_connectorOXActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER); setWebsite(R.string.pref_fakekey_ox_website, "opencaching.com"); + getPreference(R.string.preference_screen_ox).setSummary(getServiceSummary(Settings.isOXConnectorActive())); + + getPreference(R.string.pref_connectorECActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER); setWebsite(R.string.pref_fakekey_ec_website, "extremcaching.com"); + getPreference(R.string.preference_screen_ec).setSummary(getServiceSummary(Settings.isECConnectorActive())); + + getPreference(R.string.pref_ratingwanted).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER); setWebsite(R.string.pref_fakekey_gcvote_website, "gcvote.com"); + getPreference(R.string.preference_screen_gcvote).setSummary(getServiceSummary(Settings.isRatingWanted())); + setWebsite(R.string.pref_fakekey_sendtocgeo_website, "send2.cgeo.org"); - setServiceScreenSummary(getPreferenceManager(), R.string.pref_connectorGCActive); - setServiceScreenSummary(getPreferenceManager(), R.string.pref_connectorOXActive); - setServiceScreenSummary(getPreferenceManager(), R.string.pref_connectorECActive); + getPreference(R.string.preference_screen_sendtocgeo).setSummary(getServiceSummary(Settings.isRegisteredForSend2cgeo())); } private void setWebsite(final int preferenceKey, final String host) { - Preference preference = getPreference(preferenceKey); + final Preference preference = getPreference(preferenceKey); preference.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(final Preference preference) { @@ -183,36 +190,10 @@ public class SettingsActivity extends PreferenceActivity { }); } - private static String getServiceSummary(boolean status) { + private static String getServiceSummary(final 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); } @@ -225,11 +206,11 @@ public class SettingsActivity extends PreferenceActivity { * Fill the choice list for map sources. */ private void initMapSourcePreference() { - ListPreference pref = (ListPreference) getPreference(R.string.pref_mapsource); + final ListPreference pref = (ListPreference) getPreference(R.string.pref_mapsource); - List<MapSource> mapSources = MapProviderFactory.getMapSources(); - CharSequence[] entries = new CharSequence[mapSources.size()]; - CharSequence[] values = new CharSequence[mapSources.size()]; + final List<MapSource> mapSources = MapProviderFactory.getMapSources(); + final CharSequence[] entries = new CharSequence[mapSources.size()]; + final CharSequence[] values = new CharSequence[mapSources.size()]; for (int i = 0; i < mapSources.size(); ++i) { entries[i] = mapSources.get(i).getName(); values[i] = String.valueOf(mapSources.get(i).getNumericalId()); @@ -245,8 +226,8 @@ public class SettingsActivity extends PreferenceActivity { final List<NavigationAppsEnum> apps = NavigationAppFactory.getInstalledDefaultNavigationApps(); - CharSequence[] entries = new CharSequence[apps.size()]; - CharSequence[] values = new CharSequence[apps.size()]; + final CharSequence[] entries = new CharSequence[apps.size()]; + final CharSequence[] values = new CharSequence[apps.size()]; for (int i = 0; i < apps.size(); ++i) { entries[i] = apps.get(i).toString(); values[i] = String.valueOf(apps.get(i).id); @@ -277,7 +258,7 @@ public class SettingsActivity extends PreferenceActivity { new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(final Preference preference) { - Intent i = new Intent(SettingsActivity.this, + final Intent i = new Intent(SettingsActivity.this, SelectMapfileActivity.class); startActivityForResult(i, R.string.pref_mapDirectory); return false; @@ -307,7 +288,7 @@ public class SettingsActivity extends PreferenceActivity { dirChooser.putExtra(FileManagerIntents.EXTRA_BUTTON_TEXT, getString(android.R.string.ok)); startActivityForResult(dirChooser, dct.requestCode); - } catch (android.content.ActivityNotFoundException ex) { + } catch (final android.content.ActivityNotFoundException ex) { // OI file manager not available final Intent dirChooser = new Intent(this, SimpleDirChooser.class); dirChooser.putExtra(Intents.EXTRA_START_DIR, startDirectory); @@ -319,7 +300,7 @@ public class SettingsActivity extends PreferenceActivity { private void setChosenDirectory(final DirChooserType dct, final Intent data) { final String directory = new File(data.getData().getPath()).getAbsolutePath(); if (StringUtils.isNotBlank(directory)) { - Preference p = getPreference(dct.keyId); + final Preference p = getPreference(dct.keyId); if (p == null) { return; } @@ -329,7 +310,7 @@ public class SettingsActivity extends PreferenceActivity { } public void initBackupButtons() { - Preference backup = getPreference(R.string.pref_fakekey_preference_backup); + final Preference backup = getPreference(R.string.pref_fakekey_preference_backup); backup.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(final Preference preference) { @@ -343,7 +324,7 @@ public class SettingsActivity extends PreferenceActivity { } }); - Preference restore = getPreference(R.string.pref_fakekey_preference_restore); + final Preference restore = getPreference(R.string.pref_fakekey_preference_restore); restore.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(final Preference preference) { @@ -354,14 +335,14 @@ public class SettingsActivity extends PreferenceActivity { } public void initMaintenanceButtons() { - Preference dirMaintenance = getPreference(R.string.pref_fakekey_preference_maintenance_directories); + final Preference dirMaintenance = getPreference(R.string.pref_fakekey_preference_maintenance_directories); dirMaintenance.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(final Preference preference) { // disable the button, as the cleanup runs in background and should not be invoked a second time preference.setEnabled(false); - Resources res = getResources(); + final Resources res = getResources(); final SettingsActivity activity = SettingsActivity.this; final ProgressDialog dialog = ProgressDialog.show(activity, res.getString(R.string.init_maintenance), res.getString(R.string.init_maintenance_directories), true, false); new Thread() { @@ -380,10 +361,19 @@ public class SettingsActivity extends PreferenceActivity { return true; } }); + final Preference memoryDumpPref = getPreference(R.string.pref_memory_dump); + memoryDumpPref + .setOnPreferenceClickListener(new OnPreferenceClickListener() { + @Override public boolean onPreferenceClick( + final Preference preference) { + DebugUtils.createMemoryDump(SettingsActivity.this); + return true; + } + }); } private void initDbLocationPreference() { - Preference p = getPreference(R.string.pref_dbonsdcard); + final Preference p = getPreference(R.string.pref_dbonsdcard); p.setPersistent(false); p.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override @@ -396,11 +386,13 @@ public class SettingsActivity extends PreferenceActivity { } private void initDebugPreference() { - Preference p = getPreference(R.string.pref_debug); + final Preference p = getPreference(R.string.pref_debug); p.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(final Preference preference, final Object newValue) { - Log.setDebug((Boolean) newValue); + final boolean isDebug = (Boolean) newValue; + Log.setDebug(isDebug); + CgeoApplication.dumpOnOutOfMemory(isDebug); return true; } }); @@ -434,7 +426,7 @@ public class SettingsActivity extends PreferenceActivity { return; } final PreferenceScreen screen = (PreferenceScreen) preference; - ListAdapter adapter = screen.getRootAdapter(); + final ListAdapter adapter = screen.getRootAdapter(); if (adapter instanceof BaseAdapter) { ((BaseAdapter) adapter).notifyDataSetChanged(); } @@ -444,13 +436,14 @@ public class SettingsActivity extends PreferenceActivity { Settings.putString(R.string.pref_webDeviceName, Settings.getWebDeviceName()); } - public void setAuthTitle(int prefKeyId) { + public void setAuthTitle(final int prefKeyId) { switch (prefKeyId) { case R.string.pref_fakekey_ocde_authorization: case R.string.pref_fakekey_ocpl_authorization: case R.string.pref_fakekey_ocnl_authorization: case R.string.pref_fakekey_ocus_authorization: case R.string.pref_fakekey_ocro_authorization: + case R.string.pref_fakekey_ocuk_authorization: setOCAuthTitle(OCPreferenceKeys.getByAuthId(prefKeyId)); break; case R.string.pref_fakekey_twitter_authorization: @@ -490,7 +483,7 @@ public class SettingsActivity extends PreferenceActivity { return; } - for (DirChooserType dct : DirChooserType.values()) { + for (final DirChooserType dct : DirChooserType.values()) { if (requestCode == dct.requestCode) { setChosenDirectory(dct, data); return; @@ -501,7 +494,7 @@ public class SettingsActivity extends PreferenceActivity { case R.string.pref_mapDirectory: if (data.hasExtra(Intents.EXTRA_MAP_FILE)) { final String mapFile = data.getStringExtra(Intents.EXTRA_MAP_FILE); - File file = new File(mapFile); + final File file = new File(mapFile); if (!file.isDirectory()) { Settings.setMapFile(mapFile); if (!Settings.isValidMapFile(Settings.getMapFile())) { @@ -509,8 +502,8 @@ public class SettingsActivity extends PreferenceActivity { } else { // Ensure map source preference is updated accordingly. // TODO: There should be a better way to find and select the map source for a map file - Integer mapSourceId = mapFile.hashCode(); - ListPreference mapSource = (ListPreference) getPreference(R.string.pref_mapsource); + final Integer mapSourceId = mapFile.hashCode(); + final ListPreference mapSource = (ListPreference) getPreference(R.string.pref_mapsource); mapSource.setValue(mapSourceId.toString()); VALUE_CHANGE_LISTENER.onPreferenceChange(mapSource, mapSourceId); } @@ -526,7 +519,8 @@ public class SettingsActivity extends PreferenceActivity { case R.string.pref_fakekey_ocnl_authorization: case R.string.pref_fakekey_ocus_authorization: case R.string.pref_fakekey_ocro_authorization: - OCPreferenceKeys key = OCPreferenceKeys.getByAuthId(requestCode); + case R.string.pref_fakekey_ocuk_authorization: + final OCPreferenceKeys key = OCPreferenceKeys.getByAuthId(requestCode); if (key != null) { setOCAuthTitle(key); redrawScreen(key.prefScreenId); @@ -546,9 +540,13 @@ public class SettingsActivity extends PreferenceActivity { * to reflect its new value. */ private static final Preference.OnPreferenceChangeListener VALUE_CHANGE_LISTENER = new Preference.OnPreferenceChangeListener() { + + private PreferenceManager preferenceManager; + @Override public boolean onPreferenceChange(final Preference preference, final Object value) { - String stringValue = value.toString(); + preferenceManager = preference.getPreferenceManager(); + final String stringValue = value.toString(); if (isPreference(preference, R.string.pref_mapsource)) { // reset the cached map source @@ -578,14 +576,15 @@ public class SettingsActivity extends PreferenceActivity { || isPreference(preference, R.string.pref_connectorOCNLActive) || isPreference(preference, R.string.pref_connectorOCUSActive) || isPreference(preference, R.string.pref_connectorOCROActive) + || isPreference(preference, R.string.pref_connectorOCUKActive) || 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(); - String summary = getServiceSummary(boolVal); + final boolean boolVal = (Boolean) value; + final String summary = getServiceSummary(boolVal); if (OCPreferenceKeys.isOCPreference(preference.getKey())) { - OCPreferenceKeys prefKey = OCPreferenceKeys.getByKey(preference.getKey()); + final 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); @@ -600,8 +599,8 @@ public class SettingsActivity extends PreferenceActivity { } else if (preference instanceof ListPreference) { // For list preferences, look up the correct display value in // the preference's 'entries' list. - ListPreference listPreference = (ListPreference) preference; - int index = listPreference.findIndexOfValue(stringValue); + final ListPreference listPreference = (ListPreference) preference; + final int index = listPreference.findIndexOfValue(stringValue); // Set the summary to reflect the new value. preference.setSummary( @@ -617,6 +616,9 @@ public class SettingsActivity extends PreferenceActivity { text = preference.getContext().getString(R.string.init_backup_last_no); } preference.setSummary(text); + } else if (isPreference(preference, R.string.pref_ratingwanted)) { + findPreference(R.string.preference_screen_gcvote).setSummary(getServiceSummary((Boolean) value)); + redrawScreen(findPreference(R.string.preference_screen_services)); } else { // For all other preferences, set the summary to the value's // simple string representation. @@ -625,13 +627,15 @@ public class SettingsActivity extends PreferenceActivity { // TODO: do not special case geocaching.com here 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(); - } CgeoApplication.getInstance().forceRelog(); } return true; } + + private Preference findPreference(final int preferenceKeyResourceId) { + return preferenceManager.findPreference(getKey(preferenceKeyResourceId)); + } + }; /** @@ -662,12 +666,12 @@ public class SettingsActivity extends PreferenceActivity { */ private void bindSummaryToStringValue(final int key) { - Preference pref = getPreference(key); + final Preference pref = getPreference(key); if (pref == null) { return; } - String value = PreferenceManager + final String value = PreferenceManager .getDefaultSharedPreferences(pref.getContext()) .getString(pref.getKey(), ""); @@ -686,7 +690,7 @@ public class SettingsActivity extends PreferenceActivity { @SuppressWarnings("deprecation") @Override - public void setPreferenceScreen(PreferenceScreen preferenceScreen) { + public void setPreferenceScreen(final PreferenceScreen preferenceScreen) { // TODO replace with fragment based code super.setPreferenceScreen(preferenceScreen); } @@ -698,7 +702,7 @@ public class SettingsActivity extends PreferenceActivity { return super.getPreferenceManager(); } - private static boolean isPreference(final Preference preference, int preferenceKeyId) { + private static boolean isPreference(final Preference preference, final int preferenceKeyId) { return getKey(preferenceKeyId).equals(preference.getKey()); } } |
