diff options
Diffstat (limited to 'main/src/cgeo/geocaching/settings')
| -rw-r--r-- | main/src/cgeo/geocaching/settings/AuthorizeTwitterPreference.java | 46 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/settings/LogSignaturePreference.java | 60 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/settings/OAuthPreference.java (renamed from main/src/cgeo/geocaching/settings/AuthorizeOcPreference.java) | 46 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java | 2 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/settings/Settings.java | 131 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/settings/SettingsActivity.java | 102 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/settings/TemplateTextPreference.java | 111 |
7 files changed, 233 insertions, 265 deletions
diff --git a/main/src/cgeo/geocaching/settings/AuthorizeTwitterPreference.java b/main/src/cgeo/geocaching/settings/AuthorizeTwitterPreference.java deleted file mode 100644 index 1fdd0de..0000000 --- a/main/src/cgeo/geocaching/settings/AuthorizeTwitterPreference.java +++ /dev/null @@ -1,46 +0,0 @@ -package cgeo.geocaching.settings; - -import cgeo.geocaching.R; -import cgeo.geocaching.twitter.TwitterAuthorizationActivity; - -import android.content.Context; -import android.content.Intent; -import android.preference.Preference; -import android.util.AttributeSet; -import android.view.View; -import android.view.ViewGroup; - -public class AuthorizeTwitterPreference extends Preference { - - public AuthorizeTwitterPreference(Context context) { - super(context); - } - - public AuthorizeTwitterPreference(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public AuthorizeTwitterPreference(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - @Override - protected View onCreateView(ViewGroup parent) { - final SettingsActivity activity = (SettingsActivity) getContext(); - - setOnPreferenceClickListener(new OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { - Intent authIntent = new Intent(preference.getContext(), - TwitterAuthorizationActivity.class); - activity.startActivityForResult(authIntent, - R.string.pref_fakekey_twitter_authorization); - - return false; // no shared preference has to be changed - } - }); - - activity.setTwitterAuthTitle(); - return super.onCreateView(parent); - } -} diff --git a/main/src/cgeo/geocaching/settings/LogSignaturePreference.java b/main/src/cgeo/geocaching/settings/LogSignaturePreference.java deleted file mode 100644 index d0c9739..0000000 --- a/main/src/cgeo/geocaching/settings/LogSignaturePreference.java +++ /dev/null @@ -1,60 +0,0 @@ -package cgeo.geocaching.settings; - -import cgeo.geocaching.R; - -import android.content.Context; -import android.preference.DialogPreference; -import android.util.AttributeSet; -import android.view.View; -import android.widget.Button; -import android.widget.EditText; - -public class LogSignaturePreference extends DialogPreference { - - private SettingsActivity settingsActivity; - private EditText editText; - - public LogSignaturePreference(Context context, AttributeSet attrs) { - super(context, attrs); - init(); - } - - public LogSignaturePreference(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - init(); - } - - private void init() { - setDialogLayoutResource(R.layout.log_signature_preference_dialog); - } - - @Override - protected void onBindDialogView(View view) { - settingsActivity = (SettingsActivity) this.getContext(); - - editText = (EditText) view.findViewById(R.id.signature_dialog_text); - editText.setText(getPersistedString("")); - settingsActivity.setSignatureTextView(editText); - - Button templates = (Button) view.findViewById(R.id.signature_templates); - settingsActivity.registerForContextMenu(templates); - templates.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View templates) { - settingsActivity.openContextMenu(templates); - } - }); - - super.onBindDialogView(view); - } - - @Override - protected void onDialogClosed(boolean positiveResult) { - if (positiveResult) { - String text = editText.getText().toString(); - persistString(text); - callChangeListener(text); - } - super.onDialogClosed(positiveResult); - } -} diff --git a/main/src/cgeo/geocaching/settings/AuthorizeOcPreference.java b/main/src/cgeo/geocaching/settings/OAuthPreference.java index f5d6a57..3550947 100644 --- a/main/src/cgeo/geocaching/settings/AuthorizeOcPreference.java +++ b/main/src/cgeo/geocaching/settings/OAuthPreference.java @@ -1,9 +1,10 @@ package cgeo.geocaching.settings; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.connector.oc.OCDEAuthorizationActivity; import cgeo.geocaching.connector.oc.OCPLAuthorizationActivity; +import cgeo.geocaching.twitter.TwitterAuthorizationActivity; import android.content.Context; import android.content.Intent; @@ -12,49 +13,50 @@ import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; -public class AuthorizeOcPreference extends Preference { +public class OAuthPreference extends Preference { private static final int NO_KEY = -1; - private enum OCAuthorizations { + private enum OAuthActivityMapping { NONE(NO_KEY, null), OCDE(R.string.pref_fakekey_ocde_authorization, OCDEAuthorizationActivity.class), - OCPL(R.string.pref_fakekey_ocpl_authorization, OCPLAuthorizationActivity.class); + OCPL(R.string.pref_fakekey_ocpl_authorization, OCPLAuthorizationActivity.class), + TWITTER(R.string.pref_fakekey_twitter_authorization, TwitterAuthorizationActivity.class); public int prefKeyId; public Class<?> authActivity; - OCAuthorizations(int prefKeyId, Class<?> clazz) { + OAuthActivityMapping(int prefKeyId, Class<?> clazz) { this.prefKeyId = prefKeyId; this.authActivity = clazz; } } - private final OCAuthorizations ocAuth; + private final OAuthActivityMapping oAuthMapping; - private OCAuthorizations getAuthorization() { + private OAuthActivityMapping getAuthorization() { final String prefKey = getKey(); - for (OCAuthorizations auth : OCAuthorizations.values()) { - if (auth.prefKeyId != NO_KEY && prefKey.equals(cgeoapplication.getInstance().getString(auth.prefKeyId))) { + for (OAuthActivityMapping auth : OAuthActivityMapping.values()) { + if (auth.prefKeyId != NO_KEY && prefKey.equals(CgeoApplication.getInstance().getString(auth.prefKeyId))) { return auth; } } - return OCAuthorizations.NONE; + return OAuthActivityMapping.NONE; } - public AuthorizeOcPreference(Context context) { + public OAuthPreference(Context context) { super(context); - this.ocAuth = getAuthorization(); + this.oAuthMapping = getAuthorization(); } - public AuthorizeOcPreference(Context context, AttributeSet attrs) { + public OAuthPreference(Context context, AttributeSet attrs) { super(context, attrs); - this.ocAuth = getAuthorization(); + this.oAuthMapping = getAuthorization(); } - public AuthorizeOcPreference(Context context, AttributeSet attrs, int defStyle) { + public OAuthPreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); - this.ocAuth = getAuthorization(); + this.oAuthMapping = getAuthorization(); } @Override @@ -64,17 +66,17 @@ public class AuthorizeOcPreference extends Preference { setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { - if (ocAuth.authActivity != null) { - Intent authIntent = new Intent(preference.getContext(), - ocAuth.authActivity); - activity.startActivityForResult(authIntent, - ocAuth.prefKeyId); + if (oAuthMapping.authActivity != null) { + Intent authIntent = new Intent(preference.getContext(), + oAuthMapping.authActivity); + activity.startActivityForResult(authIntent, + oAuthMapping.prefKeyId); } return false; // no shared preference has to be changed } }); - activity.setOcAuthTitle(ocAuth.prefKeyId); + activity.setOcAuthTitle(oAuthMapping.prefKeyId); return super.onCreateView(parent); } } diff --git a/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java b/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java index a019c4a..fbf08fa 100644 --- a/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java +++ b/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java @@ -99,7 +99,7 @@ public class RegisterSend2CgeoPreference extends Preference { if (response != null && response.getStatusLine().getStatusCode() == 200) { //response was OK - String[] strings = Network.getResponseData(response).split(","); + String[] strings = StringUtils.split(Network.getResponseData(response), ','); try { pin = Integer.parseInt(strings[1].trim()); } catch (Exception e) { diff --git a/main/src/cgeo/geocaching/settings/Settings.java b/main/src/cgeo/geocaching/settings/Settings.java index 71c6d4a..146182a 100644 --- a/main/src/cgeo/geocaching/settings/Settings.java +++ b/main/src/cgeo/geocaching/settings/Settings.java @@ -1,8 +1,7 @@ package cgeo.geocaching.settings; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.R; -import cgeo.geocaching.StoredList; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory.NavigationAppsEnum; import cgeo.geocaching.connector.gc.GCConstants; import cgeo.geocaching.connector.gc.Login; @@ -10,6 +9,7 @@ import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.enumerations.LiveMapStrategy.Strategy; import cgeo.geocaching.enumerations.LogType; import cgeo.geocaching.geopoint.Geopoint; +import cgeo.geocaching.list.StoredList; import cgeo.geocaching.maps.MapProviderFactory; import cgeo.geocaching.maps.google.GoogleMapProvider; import cgeo.geocaching.maps.interfaces.GeoPointImpl; @@ -24,6 +24,7 @@ import cgeo.geocaching.utils.Log; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; +import org.eclipse.jdt.annotation.Nullable; import android.content.Context; import android.content.SharedPreferences; @@ -41,7 +42,7 @@ import java.util.Locale; /** * General c:geo preferences/settings set by the user */ -public final class Settings { +public class Settings { public static final int SHOW_WP_THRESHOLD_DEFAULT = 10; public static final int SHOW_WP_THRESHOLD_MAX = 50; @@ -69,7 +70,7 @@ public final class Settings { } private static final SharedPreferences sharedPrefs = PreferenceManager - .getDefaultSharedPreferences(cgeoapplication.getInstance().getBaseContext()); + .getDefaultSharedPreferences(CgeoApplication.getInstance().getBaseContext()); static { migrateSettings(); Log.setDebug(sharedPrefs.getBoolean(getKey(R.string.pref_debug), false)); @@ -81,8 +82,8 @@ public final class Settings { */ private static MapSource mapSource; - private Settings() { - // this class is not to be instantiated; + protected Settings() { + throw new InstantiationError(); } private static void migrateSettings() { @@ -90,7 +91,7 @@ public final class Settings { int oldVersion = getInt(R.string.pref_settingsversion, 0); if (oldVersion < 1) { final String oldPreferencesName = "cgeo.pref"; - final SharedPreferences old = cgeoapplication.getInstance().getSharedPreferences(oldPreferencesName, Context.MODE_PRIVATE); + final SharedPreferences old = CgeoApplication.getInstance().getSharedPreferences(oldPreferencesName, Context.MODE_PRIVATE); final Editor e = sharedPrefs.edit(); e.putString(getKey(R.string.pref_temp_twitter_token_secret), old.getString(getKey(R.string.pref_temp_twitter_token_secret), null)); @@ -191,7 +192,7 @@ public final class Settings { } private static String getKey(final int prefKeyId) { - return cgeoapplication.getInstance().getString(prefKeyId); + return CgeoApplication.getInstance().getString(prefKeyId); } static String getString(final int prefKeyId, final String defaultValue) { @@ -214,13 +215,13 @@ public final class Settings { return sharedPrefs.getFloat(getKey(prefKeyId), defaultValue); } - static boolean putString(final int prefKeyId, final String value) { + protected static boolean putString(final int prefKeyId, final String value) { final SharedPreferences.Editor edit = sharedPrefs.edit(); edit.putString(getKey(prefKeyId), value); return edit.commit(); } - private static boolean putBoolean(final int prefKeyId, final boolean value) { + protected static boolean putBoolean(final int prefKeyId, final boolean value) { final SharedPreferences.Editor edit = sharedPrefs.edit(); edit.putBoolean(getKey(prefKeyId), value); return edit.commit(); @@ -257,7 +258,7 @@ public final class Settings { public static void setLanguage(boolean useEnglish) { final Configuration config = new Configuration(); config.locale = useEnglish ? Locale.ENGLISH : Locale.getDefault(); - final Resources resources = cgeoapplication.getInstance().getResources(); + final Resources resources = CgeoApplication.getInstance().getResources(); resources.updateConfiguration(config, resources.getDisplayMetrics()); } @@ -295,11 +296,7 @@ public final class Settings { public static boolean isPremiumMember() { // Basic Member, Premium Member, ??? - String memberStatus = Settings.getMemberStatus(); - if (memberStatus == null) { - return false; - } - return GCConstants.MEMBER_STATUS_PM.equalsIgnoreCase(memberStatus); + return GCConstants.MEMBER_STATUS_PM.equalsIgnoreCase(Settings.getMemberStatus()); } public static String getMemberStatus() { @@ -317,7 +314,7 @@ public final class Settings { return new ImmutablePair<String, String>(getString(tokenPublicPrefKey, null), getString(tokenSecretPrefKey, null)); } - public static void setTokens(final int tokenPublicPrefKey, final String tokenPublic, final int tokenSecretPrefKey, final String tokenSecret) { + public static void setTokens(final int tokenPublicPrefKey, @Nullable final String tokenPublic, final int tokenSecretPrefKey, @Nullable final String tokenSecret) { if (tokenPublic == null) { remove(tokenPublicPrefKey); } else { @@ -441,6 +438,10 @@ public final class Settings { return MapsforgeMapProvider.isValidMapFile(mapFileIn); } + public static boolean isScaleMapsforgeText() { + return getBoolean(R.string.pref_mapsforge_scale_text, true); + } + public static CoordInputFormatEnum getCoordInputFormat() { return CoordInputFormatEnum.fromInt(getInt(R.string.pref_coordinputformat, 0)); } @@ -449,10 +450,6 @@ public final class Settings { putInt(R.string.pref_coordinputformat, format.ordinal()); } - static void setLogOffline(final boolean offline) { - putBoolean(R.string.pref_log_offline, offline); - } - public static boolean getLogOffline() { return getBoolean(R.string.pref_log_offline, false); } @@ -471,7 +468,7 @@ public final class Settings { /** * @return User selected date format on GC.com - * @see Login#gcCustomDateFormats + * @see Login#GC_CUSTOM_DATE_FORMATS */ public static String getGcCustomDate() { return getString(R.string.pref_gccustomdate, null); @@ -481,11 +478,6 @@ public final class Settings { return getBoolean(R.string.pref_excludemine, false); } - public static void setUseEnglish(final boolean english) { - putBoolean(R.string.pref_useenglish, english); - setLanguage(english); - } - public static boolean isUseEnglish() { return getBoolean(R.string.pref_useenglish, false); } @@ -548,16 +540,9 @@ public final class Settings { static boolean getImperialUnitsDefault() { final String countryCode = Locale.getDefault().getCountry(); - if ("US".equals(countryCode)) { - return true; // USA - } - if ("LR".equals(countryCode)) { - return true; // Liberia - } - if ("MM".equals(countryCode)) { - return true; // Burma - } - return false; + return "US".equals(countryCode) // USA + || "LR".equals(countryCode) // Liberia + || "MM".equals(countryCode); // Burma } public static boolean isLiveMap() { @@ -754,8 +739,8 @@ public final class Settings { && StringUtils.isNotBlank(getTokenSecret()); } - public static void setTwitterTokens(final String tokenPublic, - final String tokenSecret, boolean enableTwitter) { + public static void setTwitterTokens(@Nullable final String tokenPublic, + @Nullable final String tokenSecret, boolean enableTwitter) { putString(R.string.pref_twitter_token_public, tokenPublic); putString(R.string.pref_twitter_token_secret, tokenSecret); if (tokenPublic != null) { @@ -765,8 +750,8 @@ public final class Settings { setUseTwitter(enableTwitter); } - public static void setTwitterTempTokens(final String tokenPublic, - final String tokenSecret) { + public static void setTwitterTempTokens(@Nullable final String tokenPublic, + @Nullable final String tokenSecret) { putString(R.string.pref_temp_twitter_token_public, tokenPublic); putString(R.string.pref_temp_twitter_token_secret, tokenSecret); } @@ -803,22 +788,12 @@ public final class Settings { String.valueOf(NavigationAppsEnum.COMPASS.id))); } - public static void setDefaultNavigationTool(final int defaultNavigationTool) { - putString(R.string.pref_defaultNavigationTool, - String.valueOf(defaultNavigationTool)); - } - public static int getDefaultNavigationTool2() { return Integer.parseInt(getString( R.string.pref_defaultNavigationTool2, String.valueOf(NavigationAppsEnum.INTERNAL_MAP.id))); } - public static void setDefaultNavigationTool2(final int defaultNavigationTool) { - putString(R.string.pref_defaultNavigationTool2, - String.valueOf(defaultNavigationTool)); - } - public static Strategy getLiveMapStrategy() { return Strategy.getById(getInt(R.string.pref_livemapstrategy, Strategy.AUTO.id)); } @@ -931,13 +906,11 @@ public final class Settings { } public static String getCacheTwitterMessage() { - // TODO make customizable from UI - return "I found [NAME] ([URL])"; + return getString(R.string.pref_twitter_cache_message, "I found [NAME] ([URL])."); } public static String getTrackableTwitterMessage() { - // TODO make customizable from UI - return "I touched [NAME] ([URL])!"; + return getString(R.string.pref_twitter_trackable_message, "I touched [NAME] ([URL])."); } public static int getLogImageScale() { @@ -948,11 +921,6 @@ public final class Settings { putInt(R.string.pref_logImageScale, scale); } - // Only for tests! - static void setExcludeDisabledCaches(final boolean exclude) { - putBoolean(R.string.pref_excludedisabled, exclude); - } - public static void setExcludeMine(final boolean exclude) { putBoolean(R.string.pref_excludemine, exclude); } @@ -971,28 +939,47 @@ public final class Settings { return a && b; } - static void setStoreOfflineMaps(final boolean offlineMaps) { - putBoolean(R.string.pref_offlinemaps, offlineMaps); + public static long getFieldnoteExportDate() { + return getLong(R.string.pref_fieldNoteExportDate, 0); + } + + /** + * remember date of last field note export + * + * @param date + */ + public static void setFieldnoteExportDate(final long date) { + putLong(R.string.pref_fieldNoteExportDate, date); } - static void setStoreOfflineWpMaps(final boolean offlineWpMaps) { - putBoolean(R.string.pref_offlinewpmaps, offlineWpMaps); + public static boolean isUseNavigationApp(NavigationAppsEnum navApp) { + return getBoolean(navApp.preferenceKey, true); } - static void setUseImperialUnits(final boolean imperial) { - putBoolean(R.string.pref_units, imperial); + /** + * remember the state of the "Upload" checkbox in the field notes export dialog + * + * @param upload + */ + public static void setFieldNoteExportUpload(boolean upload) { + putBoolean(R.string.pref_fieldNoteExportUpload, upload); } - public static long getFieldnoteExportDate() { - return getLong(R.string.pref_fieldnoteExportDate, 0); + public static boolean getFieldNoteExportUpload() { + return getBoolean(R.string.pref_fieldNoteExportUpload, true); } - public static void setFieldnoteExportDate(final long date) { - putLong(R.string.pref_fieldnoteExportDate, date); + /** + * remember the state of the "Only new" checkbox in the field notes export dialog + * + * @param onlyNew + */ + public static void setFieldNoteExportOnlyNew(boolean onlyNew) { + putBoolean(R.string.pref_fieldNoteExportOnlyNew, onlyNew); } - public static boolean isUseNavigationApp(NavigationAppsEnum navApp) { - return getBoolean(navApp.preferenceKey, true); + public static boolean getFieldNoteExportOnlyNew() { + return getBoolean(R.string.pref_fieldNoteExportOnlyNew, false); } } diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java index 38b9932..629debd 100644 --- a/main/src/cgeo/geocaching/settings/SettingsActivity.java +++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java @@ -1,21 +1,20 @@ package cgeo.geocaching.settings; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.Intents; import cgeo.geocaching.R; import cgeo.geocaching.SelectMapfileActivity; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory.NavigationAppsEnum; import cgeo.geocaching.compatibility.Compatibility; +import cgeo.geocaching.connector.gc.GCConnector; import cgeo.geocaching.connector.gc.Login; 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.Log; -import cgeo.geocaching.utils.LogTemplateProvider; -import cgeo.geocaching.utils.LogTemplateProvider.LogTemplate; import org.apache.commons.lang3.StringUtils; import org.openintents.intents.FileManagerIntents; @@ -33,17 +32,10 @@ import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; import android.preference.PreferenceScreen; -import android.view.ContextMenu; -import android.view.ContextMenu.ContextMenuInfo; -import android.view.MenuItem; -import android.view.MenuItem.OnMenuItemClickListener; -import android.view.View; import android.widget.BaseAdapter; -import android.widget.EditText; import android.widget.ListAdapter; import java.io.File; -import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -63,8 +55,6 @@ public class SettingsActivity extends PreferenceActivity { private static final String INTENT_GOTO = "GOTO"; private static final int INTENT_GOTO_SERVICES = 1; - private EditText signatureText; - /** * Enumeration for directory choosers. This is how we can retrieve information about the * directory and preference key in onActivityResult() easily just by knowing @@ -72,18 +62,20 @@ public class SettingsActivity extends PreferenceActivity { */ private enum DirChooserType { GPX_IMPORT_DIR(1, R.string.pref_gpxImportDir, - Environment.getExternalStorageDirectory().getPath() + "/gpx"), + Environment.getExternalStorageDirectory().getPath() + "/gpx", false), GPX_EXPORT_DIR(2, R.string.pref_gpxExportDir, - Environment.getExternalStorageDirectory().getPath() + "/gpx"), - THEMES_DIR(3, R.string.pref_renderthemepath, ""); + Environment.getExternalStorageDirectory().getPath() + "/gpx", true), + THEMES_DIR(3, R.string.pref_renderthemepath, "", false); public final int requestCode; public final int keyId; public final String defaultValue; + public final boolean writeMode; - DirChooserType(final int requestCode, final int keyId, final String defaultValue) { + DirChooserType(final int requestCode, final int keyId, final String defaultValue, final boolean writeMode) { this.requestCode = requestCode; this.keyId = keyId; this.defaultValue = defaultValue; + this.writeMode = writeMode; } } @@ -130,7 +122,7 @@ public class SettingsActivity extends PreferenceActivity { R.string.pref_gpxExportDir, R.string.pref_gpxImportDir, R.string.pref_mapDirectory, R.string.pref_defaultNavigationTool, R.string.pref_defaultNavigationTool2, R.string.pref_webDeviceName, - R.string.pref_fakekey_preference_backup_info, }) { + R.string.pref_fakekey_preference_backup_info, R.string.pref_twitter_cache_message, R.string.pref_twitter_trackable_message }) { bindSummaryToStringValue(k); } getPreference(R.string.pref_units).setDefaultValue(Settings.getImperialUnitsDefault()); @@ -151,52 +143,30 @@ public class SettingsActivity extends PreferenceActivity { getPreference(R.string.pref_connectorOCActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER); getPreference(R.string.pref_connectorOCPLActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER); getPreference(R.string.pref_connectorGCActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER); + setWebsite(R.string.pref_fakekey_gc_website, GCConnector.getInstance().getHost()); + setWebsite(R.string.pref_fakekey_ocde_website, "opencaching.de"); + setWebsite(R.string.pref_fakekey_ocpl_website, "opencaching.pl"); + setWebsite(R.string.pref_fakekey_gcvote_website, "gcvote.com"); + setWebsite(R.string.pref_fakekey_sendtocgeo_website, "send2.cgeo.org"); } - private static String getKey(final int prefKeyId) { - return cgeoapplication.getInstance().getString(prefKeyId); - } - - private Preference getPreference(final int keyId) { - return SettingsActivity.findPreference(this, getKey(keyId)); - } - - // workaround, because OnContextItemSelected nor onMenuItemSelected is never called - OnMenuItemClickListener TEMPLATE_CLICK = new OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(final MenuItem item) { - LogTemplate template = LogTemplateProvider.getTemplate(item.getItemId()); - if (template != null) { - insertSignatureTemplate(template); + private void setWebsite(final int preferenceKey, final String host) { + Preference preference = getPreference(preferenceKey); + preference.setOnPreferenceClickListener(new OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(final Preference preference) { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://" + host))); return true; } - return false; - } - }; - - // workaround, because OnContextItemSelected and onMenuItemSelected are never called - void setSignatureTextView(final EditText view) { - this.signatureText = view; + }); } - @Override - public void onCreateContextMenu(final ContextMenu menu, final View v, - final ContextMenuInfo menuInfo) { - // context menu for signature templates - if (v.getId() == R.id.signature_templates) { - menu.setHeaderTitle(R.string.init_signature_template_button); - ArrayList<LogTemplate> templates = LogTemplateProvider.getTemplates(); - for (int i = 0; i < templates.size(); ++i) { - menu.add(0, templates.get(i).getItemId(), 0, templates.get(i).getResourceId()); - menu.getItem(i).setOnMenuItemClickListener(TEMPLATE_CLICK); - } - } - super.onCreateContextMenu(menu, v, menuInfo); + private static String getKey(final int prefKeyId) { + return CgeoApplication.getInstance().getString(prefKeyId); } - private void insertSignatureTemplate(final LogTemplate template) { - String insertText = "[" + template.getTemplateString() + "]"; - ActivityMixin.insertAtPosition(signatureText, insertText, true); + private Preference getPreference(final int keyId) { + return SettingsActivity.findPreference(this, getKey(keyId)); } /** @@ -289,6 +259,7 @@ public class SettingsActivity extends PreferenceActivity { // OI file manager not available final Intent dirChooser = new Intent(this, SimpleDirChooser.class); dirChooser.putExtra(Intents.EXTRA_START_DIR, startDirectory); + dirChooser.putExtra(SimpleDirChooser.EXTRA_CHOOSE_FOR_WRITING, dct.writeMode); startActivityForResult(dirChooser, dct.requestCode); } } @@ -337,7 +308,7 @@ public class SettingsActivity extends PreferenceActivity { @Override public boolean onPreferenceClick(final Preference preference) { boolean oldValue = Settings.isDbOnSDCard(); - ((cgeoapplication) SettingsActivity.this.getApplication()) + ((CgeoApplication) SettingsActivity.this.getApplication()) .moveDatabase(SettingsActivity.this); return oldValue != Settings.isDbOnSDCard(); } @@ -390,6 +361,9 @@ public class SettingsActivity extends PreferenceActivity { case R.string.pref_fakekey_ocpl_authorization: setOCPLAuthTitle(); break; + case R.string.pref_fakekey_twitter_authorization: + setTwitterAuthTitle(); + break; default: Log.e(String.format(Locale.ENGLISH, "Invalid key %d in SettingsActivity.setTitle()", prefKeyId)); } @@ -398,22 +372,22 @@ 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.init_reregister_oc_de - : R.string.init_register_oc_de)); + ? 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.init_reregister_oc_pl - : R.string.init_register_oc_pl)); + ? R.string.settings_reauthorize + : R.string.settings_authorize)); } void setTwitterAuthTitle() { getPreference(R.string.pref_fakekey_twitter_authorization) .setTitle(getString(Settings.hasTwitterAuthorization() - ? R.string.init_twitter_reauthorize - : R.string.init_twitter_authorize)); + ? R.string.settings_reauthorize + : R.string.settings_authorize)); } public static void jumpToServicesPage(final Context fromActivity) { @@ -518,7 +492,7 @@ public class SettingsActivity extends PreferenceActivity { preference.setSummary(mapSource.getName()); } else if (isPreference(preference, R.string.pref_connectorOCActive) || isPreference(preference, R.string.pref_connectorOCPLActive) || isPreference(preference, R.string.pref_connectorGCActive)) { // // reset log-in status if connector activation was changed - cgeoapplication.getInstance().checkLogin = true; + CgeoApplication.getInstance().checkLogin = true; } else if (preference instanceof ListPreference) { // For list preferences, look up the correct display value in // the preference's 'entries' list. @@ -549,7 +523,7 @@ public class SettingsActivity extends PreferenceActivity { if (Login.isActualLoginStatus()) { Login.logout(); } - cgeoapplication.getInstance().checkLogin = true; + CgeoApplication.getInstance().checkLogin = true; } return true; } diff --git a/main/src/cgeo/geocaching/settings/TemplateTextPreference.java b/main/src/cgeo/geocaching/settings/TemplateTextPreference.java new file mode 100644 index 0000000..9eaaa67 --- /dev/null +++ b/main/src/cgeo/geocaching/settings/TemplateTextPreference.java @@ -0,0 +1,111 @@ +package cgeo.geocaching.settings; + +import cgeo.geocaching.R; +import cgeo.geocaching.activity.ActivityMixin; +import cgeo.geocaching.utils.LogTemplateProvider; +import cgeo.geocaching.utils.LogTemplateProvider.LogTemplate; + +import org.apache.commons.lang3.StringUtils; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.res.TypedArray; +import android.preference.DialogPreference; +import android.util.AttributeSet; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; + +import java.util.ArrayList; + +public class TemplateTextPreference extends DialogPreference { + + /** + * default value, if none is given in the preference XML. + */ + private static final String DEFAULT_VALUE = StringUtils.EMPTY; + private SettingsActivity settingsActivity; + private EditText editText; + private String initialValue; + + public TemplateTextPreference(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public TemplateTextPreference(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(); + } + + private void init() { + setDialogLayoutResource(R.layout.template_preference_dialog); + } + + @Override + protected void onBindDialogView(View view) { + settingsActivity = (SettingsActivity) this.getContext(); + + editText = (EditText) view.findViewById(R.id.signature_dialog_text); + editText.setText(getPersistedString(initialValue != null ? initialValue.toString() : StringUtils.EMPTY)); + + Button button = (Button) view.findViewById(R.id.signature_templates); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View button) { + AlertDialog.Builder alert = new AlertDialog.Builder(TemplateTextPreference.this.getContext()); + alert.setTitle(R.string.init_signature_template_button); + final ArrayList<LogTemplate> templates = LogTemplateProvider.getTemplates(); + String[] items = new String[templates.size()]; + for (int i = 0; i < templates.size(); i++) { + items[i] = settingsActivity.getResources().getString(templates.get(i).getResourceId()); + } + alert.setItems(items, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int position) { + dialog.dismiss(); + final LogTemplate template = templates.get(position); + insertSignatureTemplate(template); + } + }); + alert.create().show(); + } + }); + + super.onBindDialogView(view); + } + + private void insertSignatureTemplate(final LogTemplate template) { + String insertText = "[" + template.getTemplateString() + "]"; + ActivityMixin.insertAtPosition(editText, insertText, true); + } + + @Override + protected void onDialogClosed(boolean positiveResult) { + if (positiveResult) { + String text = editText.getText().toString(); + persistString(text); + callChangeListener(text); + } + super.onDialogClosed(positiveResult); + } + + @Override + protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) { + if (restorePersistedValue) { + // Restore existing state + initialValue = this.getPersistedString(DEFAULT_VALUE); + } else { + // Set default state from the XML attribute + initialValue = defaultValue.toString(); + persistString(initialValue); + } + } + + @Override + protected Object onGetDefaultValue(TypedArray array, int index) { + return array.getString(index); + } +} |
