aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching')
-rw-r--r--main/src/cgeo/geocaching/AbstractLoggingActivity.java4
-rw-r--r--main/src/cgeo/geocaching/AbstractPopupActivity.java1
-rw-r--r--main/src/cgeo/geocaching/CacheDetailActivity.java1
-rw-r--r--main/src/cgeo/geocaching/CachePopup.java1
-rw-r--r--main/src/cgeo/geocaching/CompassActivity.java1
-rw-r--r--main/src/cgeo/geocaching/EditWaypointActivity.java6
-rw-r--r--main/src/cgeo/geocaching/Geocache.java1
-rw-r--r--main/src/cgeo/geocaching/GpxFileListActivity.java1
-rw-r--r--main/src/cgeo/geocaching/ImageSelectActivity.java1
-rw-r--r--main/src/cgeo/geocaching/ImagesActivity.java4
-rw-r--r--main/src/cgeo/geocaching/LogCacheActivity.java3
-rw-r--r--main/src/cgeo/geocaching/LogEntry.java1
-rw-r--r--main/src/cgeo/geocaching/LogTrackableActivity.java3
-rw-r--r--main/src/cgeo/geocaching/MainActivity.java10
-rw-r--r--main/src/cgeo/geocaching/NavigateAnyPointActivity.java12
-rw-r--r--main/src/cgeo/geocaching/SearchActivity.java3
-rw-r--r--main/src/cgeo/geocaching/SelectMapfileActivity.java1
-rw-r--r--main/src/cgeo/geocaching/StaticMapsProvider.java1
-rw-r--r--main/src/cgeo/geocaching/activity/AbstractActivity.java29
-rw-r--r--main/src/cgeo/geocaching/activity/ActivityMixin.java34
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java2
-rw-r--r--main/src/cgeo/geocaching/cgData.java1
-rw-r--r--main/src/cgeo/geocaching/cgeocaches.java1
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCConnector.java4
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java2
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCMap.java2
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCParser.java10
-rw-r--r--main/src/cgeo/geocaching/connector/gc/IconDecoder.java2
-rw-r--r--main/src/cgeo/geocaching/connector/gc/Login.java4
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java2
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java2
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OkapiClient.java2
-rw-r--r--main/src/cgeo/geocaching/connector/ox/OXConnector.java2
-rw-r--r--main/src/cgeo/geocaching/export/GpxExport.java2
-rw-r--r--main/src/cgeo/geocaching/files/GPXImporter.java2
-rw-r--r--main/src/cgeo/geocaching/filter/FilterUserInterface.java2
-rw-r--r--main/src/cgeo/geocaching/gcvote/GCVote.java2
-rw-r--r--main/src/cgeo/geocaching/geopoint/DistanceParser.java3
-rw-r--r--main/src/cgeo/geocaching/geopoint/Units.java22
-rw-r--r--main/src/cgeo/geocaching/loaders/AddressGeocacheListLoader.java2
-rw-r--r--main/src/cgeo/geocaching/loaders/CoordsGeocacheListLoader.java2
-rw-r--r--main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java2
-rw-r--r--main/src/cgeo/geocaching/loaders/KeywordGeocacheListLoader.java2
-rw-r--r--main/src/cgeo/geocaching/loaders/NextPageGeocacheListLoader.java2
-rw-r--r--main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java2
-rw-r--r--main/src/cgeo/geocaching/loaders/OwnerGeocacheListLoader.java2
-rw-r--r--main/src/cgeo/geocaching/loaders/RemoveFromHistoryLoader.java2
-rw-r--r--main/src/cgeo/geocaching/loaders/UsernameGeocacheListLoader.java2
-rw-r--r--main/src/cgeo/geocaching/maps/CGeoMap.java2
-rw-r--r--main/src/cgeo/geocaching/maps/CachesOverlay.java2
-rw-r--r--main/src/cgeo/geocaching/maps/MapProviderFactory.java2
-rw-r--r--main/src/cgeo/geocaching/maps/PositionOverlay.java2
-rw-r--r--main/src/cgeo/geocaching/maps/google/GoogleMapView.java2
-rw-r--r--main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java2
-rw-r--r--main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java2
-rw-r--r--main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapView024.java2
-rw-r--r--main/src/cgeo/geocaching/network/Network.java2
-rw-r--r--main/src/cgeo/geocaching/settings/AuthorizeOcDePreference.java41
-rw-r--r--main/src/cgeo/geocaching/settings/AuthorizeTwitterPreference.java41
-rw-r--r--main/src/cgeo/geocaching/settings/CheckBoxWithPopupPreference.java93
-rw-r--r--main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java123
-rw-r--r--main/src/cgeo/geocaching/settings/EditPasswordPreference.java29
-rw-r--r--main/src/cgeo/geocaching/settings/InfoPreference.java91
-rw-r--r--main/src/cgeo/geocaching/settings/LogSignaturePreference.java60
-rw-r--r--main/src/cgeo/geocaching/settings/NewSettingsActivity.java524
-rw-r--r--main/src/cgeo/geocaching/settings/NumberPickerPreference.java93
-rw-r--r--main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java122
-rw-r--r--main/src/cgeo/geocaching/settings/Settings.java (renamed from main/src/cgeo/geocaching/Settings.java)926
-rw-r--r--main/src/cgeo/geocaching/settings/SettingsActivity.java (renamed from main/src/cgeo/geocaching/SettingsActivity.java)38
-rw-r--r--main/src/cgeo/geocaching/settings/TextPreference.java86
-rw-r--r--main/src/cgeo/geocaching/settings/WpThresholdPreference.java73
-rw-r--r--main/src/cgeo/geocaching/speech/SpeechService.java2
-rw-r--r--main/src/cgeo/geocaching/speech/TextFactory.java22
-rw-r--r--main/src/cgeo/geocaching/twitter/Twitter.java7
-rw-r--r--main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java2
-rw-r--r--main/src/cgeo/geocaching/ui/CacheListAdapter.java2
-rw-r--r--main/src/cgeo/geocaching/ui/CompassMiniView.java2
-rw-r--r--main/src/cgeo/geocaching/ui/LoggingUI.java2
-rw-r--r--main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java4
-rw-r--r--main/src/cgeo/geocaching/ui/dialog/LiveMapInfoDialogBuilder.java2
-rw-r--r--main/src/cgeo/geocaching/utils/GeoDirHandler.java2
-rw-r--r--main/src/cgeo/geocaching/utils/Log.java6
-rw-r--r--main/src/cgeo/geocaching/utils/LogTemplateProvider.java2
83 files changed, 1862 insertions, 756 deletions
diff --git a/main/src/cgeo/geocaching/AbstractLoggingActivity.java b/main/src/cgeo/geocaching/AbstractLoggingActivity.java
index 1524834..c3ba7d2 100644
--- a/main/src/cgeo/geocaching/AbstractLoggingActivity.java
+++ b/main/src/cgeo/geocaching/AbstractLoggingActivity.java
@@ -1,11 +1,13 @@
package cgeo.geocaching;
import cgeo.geocaching.activity.AbstractActivity;
+import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.connector.ConnectorFactory;
import cgeo.geocaching.connector.gc.GCConnector;
import cgeo.geocaching.connector.gc.GCSmiliesProvider;
import cgeo.geocaching.connector.gc.GCSmiliesProvider.Smiley;
import cgeo.geocaching.connector.trackable.TravelBugConnector;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.LogTemplateProvider;
import cgeo.geocaching.utils.LogTemplateProvider.LogContext;
import cgeo.geocaching.utils.LogTemplateProvider.LogTemplate;
@@ -84,6 +86,6 @@ public abstract class AbstractLoggingActivity extends AbstractActivity {
protected void insertIntoLog(String newText, final boolean moveCursor) {
final EditText log = (EditText) findViewById(R.id.log);
- insertAtPosition(log, newText, moveCursor);
+ ActivityMixin.insertAtPosition(log, newText, moveCursor);
}
}
diff --git a/main/src/cgeo/geocaching/AbstractPopupActivity.java b/main/src/cgeo/geocaching/AbstractPopupActivity.java
index 64e5539..1cf0353 100644
--- a/main/src/cgeo/geocaching/AbstractPopupActivity.java
+++ b/main/src/cgeo/geocaching/AbstractPopupActivity.java
@@ -9,6 +9,7 @@ import cgeo.geocaching.gcvote.GCVote;
import cgeo.geocaching.gcvote.GCVoteRating;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Units;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.ui.CacheDetailsCreator;
import cgeo.geocaching.ui.LoggingUI;
import cgeo.geocaching.utils.GeoDirHandler;
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java
index 5ac348c..1b31463 100644
--- a/main/src/cgeo/geocaching/CacheDetailActivity.java
+++ b/main/src/cgeo/geocaching/CacheDetailActivity.java
@@ -20,6 +20,7 @@ import cgeo.geocaching.geopoint.Units;
import cgeo.geocaching.network.HtmlImage;
import cgeo.geocaching.network.Network;
import cgeo.geocaching.network.Parameters;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.ui.AbstractCachingPageViewCreator;
import cgeo.geocaching.ui.AnchorAwareLinkMovementMethod;
import cgeo.geocaching.ui.CacheDetailsCreator;
diff --git a/main/src/cgeo/geocaching/CachePopup.java b/main/src/cgeo/geocaching/CachePopup.java
index 39a896a..873801e 100644
--- a/main/src/cgeo/geocaching/CachePopup.java
+++ b/main/src/cgeo/geocaching/CachePopup.java
@@ -4,6 +4,7 @@ import cgeo.geocaching.activity.Progress;
import cgeo.geocaching.apps.cache.navi.NavigationAppFactory;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.network.Network;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.ui.CacheDetailsCreator;
import cgeo.geocaching.utils.CancellableHandler;
import cgeo.geocaching.utils.Log;
diff --git a/main/src/cgeo/geocaching/CompassActivity.java b/main/src/cgeo/geocaching/CompassActivity.java
index 059f664..8626173 100644
--- a/main/src/cgeo/geocaching/CompassActivity.java
+++ b/main/src/cgeo/geocaching/CompassActivity.java
@@ -7,6 +7,7 @@ import cgeo.geocaching.activity.AbstractActivity;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Units;
import cgeo.geocaching.maps.CGeoMap;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.speech.SpeechService;
import cgeo.geocaching.ui.CompassView;
import cgeo.geocaching.utils.GeoDirHandler;
diff --git a/main/src/cgeo/geocaching/EditWaypointActivity.java b/main/src/cgeo/geocaching/EditWaypointActivity.java
index 483920a..56ee959 100644
--- a/main/src/cgeo/geocaching/EditWaypointActivity.java
+++ b/main/src/cgeo/geocaching/EditWaypointActivity.java
@@ -10,6 +10,7 @@ import cgeo.geocaching.enumerations.WaypointType;
import cgeo.geocaching.geopoint.DistanceParser;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.GeopointFormatter;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.ui.dialog.CoordinatesInputDialog;
import cgeo.geocaching.utils.GeoDirHandler;
import cgeo.geocaching.utils.Log;
@@ -233,7 +234,7 @@ public class EditWaypointActivity extends AbstractActivity {
private void initializeDistanceUnitSelector() {
distanceUnits = new ArrayList<String>(Arrays.asList(res.getStringArray(R.array.distance_units)));
if (initViews) {
- distanceUnitSelector.setSelection(Settings.isUseMetricUnits() ? 0 : 2); //0:m, 2:ft
+ distanceUnitSelector.setSelection(Settings.isUseImperialUnits() ? 2 : 0); //0:m, 2:ft
}
}
@@ -344,7 +345,8 @@ public class EditWaypointActivity extends AbstractActivity {
double distance;
try {
- distance = DistanceParser.parseDistance(distanceText, Settings.isUseMetricUnits());
+ distance = DistanceParser.parseDistance(distanceText,
+ !Settings.isUseImperialUnits());
} catch (NumberFormatException e) {
showToast(res.getString(R.string.err_parse_dist));
return;
diff --git a/main/src/cgeo/geocaching/Geocache.java b/main/src/cgeo/geocaching/Geocache.java
index 9a7d013..1f1bd3b 100644
--- a/main/src/cgeo/geocaching/Geocache.java
+++ b/main/src/cgeo/geocaching/Geocache.java
@@ -23,6 +23,7 @@ import cgeo.geocaching.enumerations.WaypointType;
import cgeo.geocaching.files.GPXParser;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.network.HtmlImage;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.CancellableHandler;
import cgeo.geocaching.utils.LazyInitializedList;
import cgeo.geocaching.utils.Log;
diff --git a/main/src/cgeo/geocaching/GpxFileListActivity.java b/main/src/cgeo/geocaching/GpxFileListActivity.java
index de0be21..8b10d5b 100644
--- a/main/src/cgeo/geocaching/GpxFileListActivity.java
+++ b/main/src/cgeo/geocaching/GpxFileListActivity.java
@@ -4,6 +4,7 @@ import cgeo.geocaching.connector.ConnectorFactory;
import cgeo.geocaching.connector.IConnector;
import cgeo.geocaching.files.AbstractFileListActivity;
import cgeo.geocaching.files.GPXImporter;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.ui.GPXListAdapter;
import org.apache.commons.lang3.StringUtils;
diff --git a/main/src/cgeo/geocaching/ImageSelectActivity.java b/main/src/cgeo/geocaching/ImageSelectActivity.java
index 39824a9..2d57f61 100644
--- a/main/src/cgeo/geocaching/ImageSelectActivity.java
+++ b/main/src/cgeo/geocaching/ImageSelectActivity.java
@@ -5,6 +5,7 @@ import butterknife.Views;
import cgeo.geocaching.activity.AbstractActivity;
import cgeo.geocaching.compatibility.Compatibility;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.ImageUtils;
import cgeo.geocaching.utils.Log;
diff --git a/main/src/cgeo/geocaching/ImagesActivity.java b/main/src/cgeo/geocaching/ImagesActivity.java
index 030b3f7..0b80d53 100644
--- a/main/src/cgeo/geocaching/ImagesActivity.java
+++ b/main/src/cgeo/geocaching/ImagesActivity.java
@@ -1,6 +1,7 @@
package cgeo.geocaching;
import cgeo.geocaching.activity.AbstractActivity;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.ui.ImagesList;
import cgeo.geocaching.ui.ImagesList.ImageType;
@@ -57,7 +58,8 @@ public class ImagesActivity extends AbstractActivity {
return;
}
- offline = cgData.isOffline(geocode, null) && (imgType == ImageType.SpoilerImages || Settings.isStoreLogImages());
+ offline = cgData.isOffline(geocode, null) && (imgType == ImageType.SpoilerImages
+ || Settings.isStoreLogImages());
}
@Override
diff --git a/main/src/cgeo/geocaching/LogCacheActivity.java b/main/src/cgeo/geocaching/LogCacheActivity.java
index 1045a9d..e11af0f 100644
--- a/main/src/cgeo/geocaching/LogCacheActivity.java
+++ b/main/src/cgeo/geocaching/LogCacheActivity.java
@@ -8,6 +8,7 @@ import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.enumerations.LogTypeTrackable;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.gcvote.GCVote;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.twitter.Twitter;
import cgeo.geocaching.ui.Formatter;
import cgeo.geocaching.ui.dialog.DateDialog;
@@ -489,7 +490,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
}
private void updateTweetBox(LogType type) {
- if (type == LogType.FOUND_IT && Settings.isUseTwitter()) {
+ if (type == LogType.FOUND_IT && Settings.isUseTwitter() && Settings.isTwitterLoginValid()) {
tweetBox.setVisibility(View.VISIBLE);
} else {
tweetBox.setVisibility(View.GONE);
diff --git a/main/src/cgeo/geocaching/LogEntry.java b/main/src/cgeo/geocaching/LogEntry.java
index df1038f..790becd 100644
--- a/main/src/cgeo/geocaching/LogEntry.java
+++ b/main/src/cgeo/geocaching/LogEntry.java
@@ -1,6 +1,7 @@
package cgeo.geocaching;
import cgeo.geocaching.enumerations.LogType;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.DateUtils;
import cgeo.geocaching.utils.MatcherWrapper;
diff --git a/main/src/cgeo/geocaching/LogTrackableActivity.java b/main/src/cgeo/geocaching/LogTrackableActivity.java
index 1f6feb7..f0dd7f9 100644
--- a/main/src/cgeo/geocaching/LogTrackableActivity.java
+++ b/main/src/cgeo/geocaching/LogTrackableActivity.java
@@ -9,6 +9,7 @@ import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.network.Network;
import cgeo.geocaching.network.Parameters;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.twitter.Twitter;
import cgeo.geocaching.ui.Formatter;
import cgeo.geocaching.ui.dialog.DateDialog;
@@ -223,7 +224,7 @@ public class LogTrackableActivity extends AbstractLoggingActivity implements Dat
typeSelected = type;
typeButton.setText(typeSelected.getL10n());
- if (Settings.isUseTwitter()) {
+ if (Settings.isUseTwitter() && Settings.isTwitterLoginValid()) {
tweetBox.setVisibility(View.VISIBLE);
} else {
tweetBox.setVisibility(View.GONE);
diff --git a/main/src/cgeo/geocaching/MainActivity.java b/main/src/cgeo/geocaching/MainActivity.java
index 5898cba..24dd2c8 100644
--- a/main/src/cgeo/geocaching/MainActivity.java
+++ b/main/src/cgeo/geocaching/MainActivity.java
@@ -11,6 +11,9 @@ import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Units;
import cgeo.geocaching.maps.CGeoMap;
+import cgeo.geocaching.settings.NewSettingsActivity;
+import cgeo.geocaching.settings.Settings;
+import cgeo.geocaching.settings.SettingsActivity;
import cgeo.geocaching.ui.Formatter;
import cgeo.geocaching.utils.GeoDirHandler;
import cgeo.geocaching.utils.Log;
@@ -289,9 +292,12 @@ public class MainActivity extends AbstractActivity {
case R.id.menu_helpers:
startActivity(new Intent(this, UsefulAppsActivity.class));
return true;
- case R.id.menu_settings:
+ case R.id.menu_oldsettings:
startActivity(new Intent(this, SettingsActivity.class));
return true;
+ case R.id.menu_settings:
+ startActivity(new Intent(this, NewSettingsActivity.class));
+ return true;
case R.id.menu_history:
cgeocaches.startActivityHistory(this);
return true;
@@ -346,7 +352,7 @@ public class MainActivity extends AbstractActivity {
initialized = true;
Settings.setLanguage(Settings.isUseEnglish());
- Settings.getLogin();
+ Settings.getGcLogin();
if (app.firstRun) {
(new FirstLoginThread()).start();
diff --git a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java
index 6f94944..e7ffc3b 100644
--- a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java
+++ b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java
@@ -8,6 +8,7 @@ import cgeo.geocaching.apps.cache.navi.NavigationAppFactory;
import cgeo.geocaching.geopoint.DistanceParser;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.GeopointFormatter;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.ui.AbstractViewHolder;
import cgeo.geocaching.ui.Formatter;
import cgeo.geocaching.ui.dialog.CoordinatesInputDialog;
@@ -259,12 +260,12 @@ public class NavigateAnyPointActivity extends AbstractActivity {
private void initializeDistanceUnitSelector() {
if (StringUtils.isBlank(distanceUnit)) {
- if (Settings.isUseMetricUnits()) {
- distanceUnitSelector.setSelection(0); // m
- distanceUnit = res.getStringArray(R.array.distance_units)[0];
- } else {
+ if (Settings.isUseImperialUnits()) {
distanceUnitSelector.setSelection(2); // ft
distanceUnit = res.getStringArray(R.array.distance_units)[2];
+ } else {
+ distanceUnitSelector.setSelection(0); // m
+ distanceUnit = res.getStringArray(R.array.distance_units)[0];
}
}
@@ -519,7 +520,8 @@ public class NavigateAnyPointActivity extends AbstractActivity {
double distance;
try {
- distance = DistanceParser.parseDistance(distanceText, Settings.isUseMetricUnits());
+ distance = DistanceParser.parseDistance(distanceText,
+ !Settings.isUseImperialUnits());
} catch (NumberFormatException e) {
showToast(res.getString(R.string.err_parse_dist));
return null;
diff --git a/main/src/cgeo/geocaching/SearchActivity.java b/main/src/cgeo/geocaching/SearchActivity.java
index c2a7b6d..b1a58a4 100644
--- a/main/src/cgeo/geocaching/SearchActivity.java
+++ b/main/src/cgeo/geocaching/SearchActivity.java
@@ -10,6 +10,7 @@ import cgeo.geocaching.connector.capability.ISearchByGeocode;
import cgeo.geocaching.connector.trackable.TrackableConnector;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.GeopointFormatter;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.ui.dialog.CoordinatesInputDialog;
import cgeo.geocaching.utils.EditUtils;
import cgeo.geocaching.utils.GeoDirHandler;
@@ -150,7 +151,7 @@ public class SearchActivity extends AbstractActivity {
}
private void init() {
- Settings.getLogin();
+ Settings.getGcLogin();
buttonLatitude.setOnClickListener(new FindByCoordsAction());
buttonLongitude.setOnClickListener(new FindByCoordsAction());
diff --git a/main/src/cgeo/geocaching/SelectMapfileActivity.java b/main/src/cgeo/geocaching/SelectMapfileActivity.java
index 95b6e46..8f82288 100644
--- a/main/src/cgeo/geocaching/SelectMapfileActivity.java
+++ b/main/src/cgeo/geocaching/SelectMapfileActivity.java
@@ -3,6 +3,7 @@ package cgeo.geocaching;
import cgeo.geocaching.files.AbstractFileListActivity;
import cgeo.geocaching.files.IFileSelectionView;
import cgeo.geocaching.files.LocalStorage;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.ui.FileSelectionListAdapter;
import android.content.Context;
diff --git a/main/src/cgeo/geocaching/StaticMapsProvider.java b/main/src/cgeo/geocaching/StaticMapsProvider.java
index 9a4c00b..041e703 100644
--- a/main/src/cgeo/geocaching/StaticMapsProvider.java
+++ b/main/src/cgeo/geocaching/StaticMapsProvider.java
@@ -6,6 +6,7 @@ import cgeo.geocaching.files.LocalStorage;
import cgeo.geocaching.geopoint.GeopointFormatter.Format;
import cgeo.geocaching.network.Network;
import cgeo.geocaching.network.Parameters;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.Log;
import ch.boye.httpclientandroidlib.HttpResponse;
diff --git a/main/src/cgeo/geocaching/activity/AbstractActivity.java b/main/src/cgeo/geocaching/activity/AbstractActivity.java
index 964ef96..9aca35e 100644
--- a/main/src/cgeo/geocaching/activity/AbstractActivity.java
+++ b/main/src/cgeo/geocaching/activity/AbstractActivity.java
@@ -2,7 +2,7 @@ package cgeo.geocaching.activity;
import butterknife.Views;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.compatibility.Compatibility;
import cgeo.geocaching.network.Cookies;
@@ -83,33 +83,6 @@ public abstract class AbstractActivity extends FragmentActivity implements IAbst
ActivityMixin.invalidateOptionsMenu(this);
}
- /**
- * insert text into the EditText at the current cursor position
- *
- * @param editText
- * @param insertText
- * @param moveCursor
- * place the cursor after the inserted text
- */
- public static void insertAtPosition(final EditText editText, final String insertText, final boolean moveCursor) {
- int selectionStart = editText.getSelectionStart();
- int selectionEnd = editText.getSelectionEnd();
- int start = Math.min(selectionStart, selectionEnd);
- int end = Math.max(selectionStart, selectionEnd);
-
- final String content = editText.getText().toString();
- String completeText;
- if (start > 0 && !Character.isWhitespace(content.charAt(start - 1))) {
- completeText = " " + insertText;
- } else {
- completeText = insertText;
- }
-
- editText.getText().replace(start, end, completeText);
- int newCursor = moveCursor ? start + completeText.length() : start;
- editText.setSelection(newCursor, newCursor);
- }
-
protected void onCreate(final Bundle savedInstanceState, final int resourceLayoutID) {
super.onCreate(savedInstanceState);
diff --git a/main/src/cgeo/geocaching/activity/ActivityMixin.java b/main/src/cgeo/geocaching/activity/ActivityMixin.java
index 12ab0be..699d5ab 100644
--- a/main/src/cgeo/geocaching/activity/ActivityMixin.java
+++ b/main/src/cgeo/geocaching/activity/ActivityMixin.java
@@ -2,7 +2,7 @@ package cgeo.geocaching.activity;
import cgeo.geocaching.MainActivity;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.compatibility.Compatibility;
import org.apache.commons.lang3.StringUtils;
@@ -16,6 +16,7 @@ import android.os.Build;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
+import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
@@ -79,6 +80,10 @@ public final class ActivityMixin {
return R.style.popup_dark;
}
+ public static void showToast(final Activity activity, final int resId) {
+ ActivityMixin.showToast(activity, activity.getString(resId));
+ }
+
public static void showToast(final Activity activity, final String text) {
if (StringUtils.isNotBlank(text)) {
Toast toast = Toast.makeText(activity, text, Toast.LENGTH_LONG);
@@ -130,4 +135,31 @@ public final class ActivityMixin {
public static void invalidateOptionsMenu(Activity activity) {
Compatibility.invalidateOptionsMenu(activity);
}
+
+ /**
+ * insert text into the EditText at the current cursor position
+ *
+ * @param editText
+ * @param insertText
+ * @param moveCursor
+ * place the cursor after the inserted text
+ */
+ public static void insertAtPosition(final EditText editText, final String insertText, final boolean moveCursor) {
+ int selectionStart = editText.getSelectionStart();
+ int selectionEnd = editText.getSelectionEnd();
+ int start = Math.min(selectionStart, selectionEnd);
+ int end = Math.max(selectionStart, selectionEnd);
+
+ final String content = editText.getText().toString();
+ String completeText;
+ if (start > 0 && !Character.isWhitespace(content.charAt(start - 1))) {
+ completeText = " " + insertText;
+ } else {
+ completeText = insertText;
+ }
+
+ editText.getText().replace(start, end, completeText);
+ int newCursor = moveCursor ? start + completeText.length() : start;
+ editText.setSelection(newCursor, newCursor);
+ }
}
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java b/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java
index 7316d4c..4db889d 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java
@@ -1,8 +1,8 @@
package cgeo.geocaching.apps.cache.navi;
import cgeo.geocaching.Geocache;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
import cgeo.geocaching.Waypoint;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.activity.ActivityMixin;
diff --git a/main/src/cgeo/geocaching/cgData.java b/main/src/cgeo/geocaching/cgData.java
index 2911a9a..c00e434 100644
--- a/main/src/cgeo/geocaching/cgData.java
+++ b/main/src/cgeo/geocaching/cgData.java
@@ -13,6 +13,7 @@ import cgeo.geocaching.enumerations.WaypointType;
import cgeo.geocaching.files.LocalStorage;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Viewport;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.Log;
import org.apache.commons.collections.CollectionUtils;
diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/cgeocaches.java
index 8b2398f..e388078 100644
--- a/main/src/cgeo/geocaching/cgeocaches.java
+++ b/main/src/cgeo/geocaching/cgeocaches.java
@@ -31,6 +31,7 @@ import cgeo.geocaching.maps.CGeoMap;
import cgeo.geocaching.network.Cookies;
import cgeo.geocaching.network.Network;
import cgeo.geocaching.network.Parameters;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.sorting.CacheComparator;
import cgeo.geocaching.sorting.ComparatorUserInterface;
import cgeo.geocaching.ui.CacheListAdapter;
diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java
index 5ef2e7b..354bc9e 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java
@@ -4,8 +4,6 @@ import cgeo.geocaching.Geocache;
import cgeo.geocaching.ICache;
import cgeo.geocaching.R;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Settings;
-import cgeo.geocaching.SettingsActivity;
import cgeo.geocaching.cgData;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.connector.AbstractConnector;
@@ -17,6 +15,8 @@ import cgeo.geocaching.connector.capability.ISearchByViewPort;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Viewport;
+import cgeo.geocaching.settings.Settings;
+import cgeo.geocaching.settings.SettingsActivity;
import cgeo.geocaching.utils.CancellableHandler;
import cgeo.geocaching.utils.Log;
diff --git a/main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java b/main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java
index dd150de..2aa5c75 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java
@@ -3,7 +3,7 @@ package cgeo.geocaching.connector.gc;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.LogCacheActivity;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.TrackableLog;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.connector.ILoggingManager;
diff --git a/main/src/cgeo/geocaching/connector/gc/GCMap.java b/main/src/cgeo/geocaching/connector/gc/GCMap.java
index 13b663b..dbe8ced 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCMap.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCMap.java
@@ -2,7 +2,7 @@ package cgeo.geocaching.connector.gc;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.cgData;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.enumerations.CacheSize;
diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java
index cebb3ca..ea15633 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCParser.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java
@@ -5,7 +5,7 @@ import cgeo.geocaching.Image;
import cgeo.geocaching.LogEntry;
import cgeo.geocaching.R;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.Trackable;
import cgeo.geocaching.TrackableLog;
import cgeo.geocaching.Waypoint;
@@ -178,7 +178,8 @@ public abstract class GCParser {
// cache distance - estimated distance for basic members
final String distance = TextUtils.getMatch(row, GCConstants.PATTERN_SEARCH_DIRECTION_DISTANCE, false, 2, null, false);
if (distance != null) {
- cache.setDistance(DistanceParser.parseDistance(distance, Settings.isUseMetricUnits()));
+ cache.setDistance(DistanceParser.parseDistance(distance,
+ !Settings.isUseImperialUnits()));
}
// difficulty/terrain
@@ -880,7 +881,7 @@ public abstract class GCParser {
}
private static boolean isSearchForMyCaches(final String userName) {
- if (userName.equalsIgnoreCase(Settings.getLogin().left)) {
+ if (userName.equalsIgnoreCase(Settings.getGcLogin().left)) {
Log.i("Overriding users choice because of self search, downloading all caches.");
return true;
}
@@ -1441,7 +1442,8 @@ public abstract class GCParser {
final String distance = TextUtils.getMatch(page, GCConstants.PATTERN_TRACKABLE_DISTANCE, false, null);
if (null != distance) {
try {
- trackable.setDistance(DistanceParser.parseDistance(distance, Settings.isUseMetricUnits()));
+ trackable.setDistance(DistanceParser.parseDistance(distance,
+ !Settings.isUseImperialUnits()));
} catch (final NumberFormatException e) {
Log.e("GCParser.parseTrackable: Failed to parse distance", e);
}
diff --git a/main/src/cgeo/geocaching/connector/gc/IconDecoder.java b/main/src/cgeo/geocaching/connector/gc/IconDecoder.java
index 588cf01..ed44392 100644
--- a/main/src/cgeo/geocaching/connector/gc/IconDecoder.java
+++ b/main/src/cgeo/geocaching/connector/gc/IconDecoder.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.connector.gc;
import cgeo.geocaching.Geocache;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.enumerations.CacheType;
import android.graphics.Bitmap;
diff --git a/main/src/cgeo/geocaching/connector/gc/Login.java b/main/src/cgeo/geocaching/connector/gc/Login.java
index 1f5714e..4b4c93f 100644
--- a/main/src/cgeo/geocaching/connector/gc/Login.java
+++ b/main/src/cgeo/geocaching/connector/gc/Login.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.connector.gc;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.network.Cookies;
@@ -66,7 +66,7 @@ public abstract class Login {
}
private static StatusCode login(boolean retry) {
- final ImmutablePair<String, String> login = Settings.getLogin();
+ final ImmutablePair<String, String> login = Settings.getGcLogin();
if (login == null || StringUtils.isEmpty(login.left) || StringUtils.isEmpty(login.right)) {
Login.setActualStatus(cgeoapplication.getInstance().getString(R.string.err_login));
diff --git a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
index 5f30934..5ca2d28 100644
--- a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
+++ b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
@@ -2,7 +2,7 @@ package cgeo.geocaching.connector.oc;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.cgData;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.connector.ILoggingManager;
diff --git a/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java b/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java
index 779c1c5..ed544be 100644
--- a/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java
+++ b/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.connector.oc;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.network.OAuthAuthorizationActivity;
diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
index 7f77d9d..2bc34c6 100644
--- a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
+++ b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
@@ -4,7 +4,7 @@ import cgeo.geocaching.Geocache;
import cgeo.geocaching.Image;
import cgeo.geocaching.LogEntry;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.Waypoint;
import cgeo.geocaching.cgData;
import cgeo.geocaching.cgeoapplication;
diff --git a/main/src/cgeo/geocaching/connector/ox/OXConnector.java b/main/src/cgeo/geocaching/connector/ox/OXConnector.java
index eec07e3..af33bb6 100644
--- a/main/src/cgeo/geocaching/connector/ox/OXConnector.java
+++ b/main/src/cgeo/geocaching/connector/ox/OXConnector.java
@@ -3,7 +3,7 @@ package cgeo.geocaching.connector.ox;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.ICache;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.connector.AbstractConnector;
import cgeo.geocaching.connector.capability.ISearchByCenter;
import cgeo.geocaching.connector.capability.ISearchByGeocode;
diff --git a/main/src/cgeo/geocaching/export/GpxExport.java b/main/src/cgeo/geocaching/export/GpxExport.java
index ab2e281..61be3c5 100644
--- a/main/src/cgeo/geocaching/export/GpxExport.java
+++ b/main/src/cgeo/geocaching/export/GpxExport.java
@@ -1,8 +1,8 @@
package cgeo.geocaching.export;
import cgeo.geocaching.Geocache;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.utils.AsyncTaskWithProgress;
diff --git a/main/src/cgeo/geocaching/files/GPXImporter.java b/main/src/cgeo/geocaching/files/GPXImporter.java
index 0b2e49f..a1c04d7 100644
--- a/main/src/cgeo/geocaching/files/GPXImporter.java
+++ b/main/src/cgeo/geocaching/files/GPXImporter.java
@@ -3,7 +3,7 @@ package cgeo.geocaching.files;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.StaticMapsProvider;
import cgeo.geocaching.cgData;
import cgeo.geocaching.activity.IAbstractActivity;
diff --git a/main/src/cgeo/geocaching/filter/FilterUserInterface.java b/main/src/cgeo/geocaching/filter/FilterUserInterface.java
index a1d42cc..6c9c045 100644
--- a/main/src/cgeo/geocaching/filter/FilterUserInterface.java
+++ b/main/src/cgeo/geocaching/filter/FilterUserInterface.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.filter;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.utils.Log;
diff --git a/main/src/cgeo/geocaching/gcvote/GCVote.java b/main/src/cgeo/geocaching/gcvote/GCVote.java
index f6cfb84..bbfddf1 100644
--- a/main/src/cgeo/geocaching/gcvote/GCVote.java
+++ b/main/src/cgeo/geocaching/gcvote/GCVote.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.gcvote;
import cgeo.geocaching.Geocache;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.network.Network;
import cgeo.geocaching.network.Parameters;
import cgeo.geocaching.utils.LeastRecentlyUsedMap;
diff --git a/main/src/cgeo/geocaching/geopoint/DistanceParser.java b/main/src/cgeo/geocaching/geopoint/DistanceParser.java
index 5a840a8..e3a7482 100644
--- a/main/src/cgeo/geocaching/geopoint/DistanceParser.java
+++ b/main/src/cgeo/geocaching/geopoint/DistanceParser.java
@@ -22,7 +22,8 @@ public final class DistanceParser {
* @throws NumberFormatException
* if the given number is invalid
*/
- public static float parseDistance(String distanceText, final boolean metricUnit) throws NumberFormatException {
+ public static float parseDistance(String distanceText, final boolean metricUnit)
+ throws NumberFormatException {
final MatcherWrapper matcher = new MatcherWrapper(pattern, distanceText);
if (!matcher.find()) {
diff --git a/main/src/cgeo/geocaching/geopoint/Units.java b/main/src/cgeo/geocaching/geopoint/Units.java
index 3da3ad9..75d71d0 100644
--- a/main/src/cgeo/geocaching/geopoint/Units.java
+++ b/main/src/cgeo/geocaching/geopoint/Units.java
@@ -1,6 +1,6 @@
package cgeo.geocaching.geopoint;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import org.apache.commons.lang3.tuple.ImmutablePair;
@@ -9,15 +9,7 @@ public class Units {
public static ImmutablePair<Double, String> scaleDistance(final double distanceKilometers) {
double distance;
String units;
- if (Settings.isUseMetricUnits()) {
- if (distanceKilometers >= 1) {
- distance = distanceKilometers;
- units = "km";
- } else {
- distance = distanceKilometers * 1000;
- units = "m";
- }
- } else {
+ if (Settings.isUseImperialUnits()) {
distance = distanceKilometers / IConversion.MILES_TO_KILOMETER;
if (distance >= 0.1) {
units = "mi";
@@ -25,6 +17,14 @@ public class Units {
distance *= 5280;
units = "ft";
}
+ } else {
+ if (distanceKilometers >= 1) {
+ distance = distanceKilometers;
+ units = "km";
+ } else {
+ distance = distanceKilometers * 1000;
+ units = "m";
+ }
}
return new ImmutablePair<Double, String>(distance, units);
}
@@ -68,6 +68,6 @@ public class Units {
if (speed.endsWith("mi")) {
return speed.substring(0, speed.length() - 2) + "mph";
}
- return speed + (Settings.isUseMetricUnits() ? "/h" : "ph");
+ return speed + (!Settings.isUseImperialUnits() ? "/h" : "ph");
}
}
diff --git a/main/src/cgeo/geocaching/loaders/AddressGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/AddressGeocacheListLoader.java
index efaaabc..dd7c7a6 100644
--- a/main/src/cgeo/geocaching/loaders/AddressGeocacheListLoader.java
+++ b/main/src/cgeo/geocaching/loaders/AddressGeocacheListLoader.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.loaders;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.connector.gc.GCParser;
import android.content.Context;
diff --git a/main/src/cgeo/geocaching/loaders/CoordsGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/CoordsGeocacheListLoader.java
index 928aaea..34b3a61 100644
--- a/main/src/cgeo/geocaching/loaders/CoordsGeocacheListLoader.java
+++ b/main/src/cgeo/geocaching/loaders/CoordsGeocacheListLoader.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.loaders;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.connector.ConnectorFactory;
import cgeo.geocaching.connector.capability.ISearchByCenter;
import cgeo.geocaching.connector.gc.GCParser;
diff --git a/main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java
index 90e22d1..722f9f5 100644
--- a/main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java
+++ b/main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.loaders;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.cgData;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.geopoint.Geopoint;
diff --git a/main/src/cgeo/geocaching/loaders/KeywordGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/KeywordGeocacheListLoader.java
index 36b62d6..adfc423 100644
--- a/main/src/cgeo/geocaching/loaders/KeywordGeocacheListLoader.java
+++ b/main/src/cgeo/geocaching/loaders/KeywordGeocacheListLoader.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.loaders;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.connector.gc.GCParser;
import android.content.Context;
diff --git a/main/src/cgeo/geocaching/loaders/NextPageGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/NextPageGeocacheListLoader.java
index faae9de..1104f83 100644
--- a/main/src/cgeo/geocaching/loaders/NextPageGeocacheListLoader.java
+++ b/main/src/cgeo/geocaching/loaders/NextPageGeocacheListLoader.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.loaders;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.connector.gc.GCParser;
import android.content.Context;
diff --git a/main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java
index 0081aa1..ab8ba6a 100644
--- a/main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java
+++ b/main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.loaders;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.cgData;
import cgeo.geocaching.geopoint.Geopoint;
diff --git a/main/src/cgeo/geocaching/loaders/OwnerGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/OwnerGeocacheListLoader.java
index 3bed3f4..ea9b8ad 100644
--- a/main/src/cgeo/geocaching/loaders/OwnerGeocacheListLoader.java
+++ b/main/src/cgeo/geocaching/loaders/OwnerGeocacheListLoader.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.loaders;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.connector.gc.GCParser;
import android.content.Context;
diff --git a/main/src/cgeo/geocaching/loaders/RemoveFromHistoryLoader.java b/main/src/cgeo/geocaching/loaders/RemoveFromHistoryLoader.java
index 63b4620..2229afe 100644
--- a/main/src/cgeo/geocaching/loaders/RemoveFromHistoryLoader.java
+++ b/main/src/cgeo/geocaching/loaders/RemoveFromHistoryLoader.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.loaders;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.cgData;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.geopoint.Geopoint;
diff --git a/main/src/cgeo/geocaching/loaders/UsernameGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/UsernameGeocacheListLoader.java
index 5af0fe3..f8849d5 100644
--- a/main/src/cgeo/geocaching/loaders/UsernameGeocacheListLoader.java
+++ b/main/src/cgeo/geocaching/loaders/UsernameGeocacheListLoader.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.loaders;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.connector.gc.GCParser;
import android.content.Context;
diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java
index a2b70c7..007f707 100644
--- a/main/src/cgeo/geocaching/maps/CGeoMap.java
+++ b/main/src/cgeo/geocaching/maps/CGeoMap.java
@@ -5,7 +5,6 @@ import cgeo.geocaching.Geocache;
import cgeo.geocaching.IGeoData;
import cgeo.geocaching.R;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Settings;
import cgeo.geocaching.StoredList;
import cgeo.geocaching.Waypoint;
import cgeo.geocaching.cgData;
@@ -31,6 +30,7 @@ import cgeo.geocaching.maps.interfaces.MapProvider;
import cgeo.geocaching.maps.interfaces.MapSource;
import cgeo.geocaching.maps.interfaces.MapViewImpl;
import cgeo.geocaching.maps.interfaces.OnMapDragListener;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.ui.dialog.LiveMapInfoDialogBuilder;
import cgeo.geocaching.utils.AngleUtils;
import cgeo.geocaching.utils.CancellableHandler;
diff --git a/main/src/cgeo/geocaching/maps/CachesOverlay.java b/main/src/cgeo/geocaching/maps/CachesOverlay.java
index f1dd9b3..8e117eb 100644
--- a/main/src/cgeo/geocaching/maps/CachesOverlay.java
+++ b/main/src/cgeo/geocaching/maps/CachesOverlay.java
@@ -4,7 +4,7 @@ import cgeo.geocaching.CachePopup;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.IWaypoint;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.WaypointPopup;
import cgeo.geocaching.cgData;
import cgeo.geocaching.activity.Progress;
diff --git a/main/src/cgeo/geocaching/maps/MapProviderFactory.java b/main/src/cgeo/geocaching/maps/MapProviderFactory.java
index 5ce8ab6..95ea265 100644
--- a/main/src/cgeo/geocaching/maps/MapProviderFactory.java
+++ b/main/src/cgeo/geocaching/maps/MapProviderFactory.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.maps;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.maps.google.GoogleMapProvider;
import cgeo.geocaching.maps.interfaces.MapProvider;
import cgeo.geocaching.maps.interfaces.MapSource;
diff --git a/main/src/cgeo/geocaching/maps/PositionOverlay.java b/main/src/cgeo/geocaching/maps/PositionOverlay.java
index 08acd2f..c3a0834 100644
--- a/main/src/cgeo/geocaching/maps/PositionOverlay.java
+++ b/main/src/cgeo/geocaching/maps/PositionOverlay.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.maps;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.maps.interfaces.GeneralOverlay;
import cgeo.geocaching.maps.interfaces.GeoPointImpl;
diff --git a/main/src/cgeo/geocaching/maps/google/GoogleMapView.java b/main/src/cgeo/geocaching/maps/google/GoogleMapView.java
index 154c3f3..6e5406e 100644
--- a/main/src/cgeo/geocaching/maps/google/GoogleMapView.java
+++ b/main/src/cgeo/geocaching/maps/google/GoogleMapView.java
@@ -2,7 +2,7 @@ package cgeo.geocaching.maps.google;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.geopoint.Viewport;
import cgeo.geocaching.maps.CachesOverlay;
import cgeo.geocaching.maps.PositionOverlay;
diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java
index 7cf18fb..7c6865d 100644
--- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java
+++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.maps.mapsforge;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.maps.AbstractMapProvider;
import cgeo.geocaching.maps.MapProviderFactory;
diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java
index 083e5bb..2b0c1f7 100644
--- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java
+++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.maps.mapsforge;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.geopoint.Viewport;
import cgeo.geocaching.maps.CachesOverlay;
import cgeo.geocaching.maps.PositionOverlay;
diff --git a/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapView024.java b/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapView024.java
index cc8bc66..8e3a4d8 100644
--- a/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapView024.java
+++ b/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapView024.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.maps.mapsforge.v024;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.geopoint.Viewport;
import cgeo.geocaching.maps.CachesOverlay;
import cgeo.geocaching.maps.PositionOverlay;
diff --git a/main/src/cgeo/geocaching/network/Network.java b/main/src/cgeo/geocaching/network/Network.java
index 57196c5..14a9513 100644
--- a/main/src/cgeo/geocaching/network/Network.java
+++ b/main/src/cgeo/geocaching/network/Network.java
@@ -1,6 +1,6 @@
package cgeo.geocaching.network;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.files.LocalStorage;
import cgeo.geocaching.utils.TextUtils;
import cgeo.geocaching.utils.Log;
diff --git a/main/src/cgeo/geocaching/settings/AuthorizeOcDePreference.java b/main/src/cgeo/geocaching/settings/AuthorizeOcDePreference.java
new file mode 100644
index 0000000..4edfd49
--- /dev/null
+++ b/main/src/cgeo/geocaching/settings/AuthorizeOcDePreference.java
@@ -0,0 +1,41 @@
+package cgeo.geocaching.settings;
+
+import cgeo.geocaching.connector.oc.OCAuthorizationActivity;
+
+import android.app.Activity;
+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 AuthorizeOcDePreference extends Preference {
+
+ public AuthorizeOcDePreference(Context context) {
+ super(context);
+ }
+
+ public AuthorizeOcDePreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public AuthorizeOcDePreference(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ @Override
+ protected View onCreateView(ViewGroup parent) {
+ setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ Intent authIntent = new Intent(preference.getContext(),
+ OCAuthorizationActivity.class);
+ ((Activity) preference.getContext()).startActivity(authIntent);
+
+ return false; // no shared preference has to be changed
+ }
+ });
+ return super.onCreateView(parent);
+ }
+}
diff --git a/main/src/cgeo/geocaching/settings/AuthorizeTwitterPreference.java b/main/src/cgeo/geocaching/settings/AuthorizeTwitterPreference.java
new file mode 100644
index 0000000..9476e37
--- /dev/null
+++ b/main/src/cgeo/geocaching/settings/AuthorizeTwitterPreference.java
@@ -0,0 +1,41 @@
+package cgeo.geocaching.settings;
+
+import cgeo.geocaching.twitter.TwitterAuthorizationActivity;
+
+import android.app.Activity;
+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) {
+ setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ Intent authIntent = new Intent(preference.getContext(),
+ TwitterAuthorizationActivity.class);
+ ((Activity) preference.getContext()).startActivity(authIntent);
+
+ return false; // no shared preference has to be changed
+ }
+ });
+ return super.onCreateView(parent);
+ }
+}
diff --git a/main/src/cgeo/geocaching/settings/CheckBoxWithPopupPreference.java b/main/src/cgeo/geocaching/settings/CheckBoxWithPopupPreference.java
new file mode 100644
index 0000000..4e64b9a
--- /dev/null
+++ b/main/src/cgeo/geocaching/settings/CheckBoxWithPopupPreference.java
@@ -0,0 +1,93 @@
+package cgeo.geocaching.settings;
+
+import cgeo.geocaching.R;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.res.TypedArray;
+import android.net.Uri;
+import android.preference.CheckBoxPreference;
+import android.preference.Preference;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+
+public class CheckBoxWithPopupPreference extends CheckBoxPreference {
+
+ // strings for the popup dialog
+ private String title;
+ private String text;
+ private String url;
+ private String urlButton;
+
+ public CheckBoxWithPopupPreference(Context context) {
+ super(context);
+ }
+
+ public CheckBoxWithPopupPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ processAttributes(context, attrs, 0);
+ }
+
+ public CheckBoxWithPopupPreference(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ processAttributes(context, attrs, defStyle);
+ }
+
+ private void processAttributes(Context context, AttributeSet attrs, int defStyle) {
+ if (attrs == null) {
+ return; // coward's retreat
+ }
+
+ TypedArray types = context.obtainStyledAttributes(attrs, new int[] {
+ R.attr.title, R.attr.text, R.attr.url, R.attr.urlButton },
+ defStyle, 0);
+
+ title = types.getString(0);
+ text = types.getString(1);
+ url = types.getString(2);
+ urlButton = types.getString(3);
+
+ types.recycle();
+ }
+
+ @Override
+ protected View onCreateView(ViewGroup parent) {
+
+ // show dialog when checkbox enabled
+ setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(final Preference preference, Object newValue) {
+ if (!(Boolean) newValue) {
+ return true;
+ }
+ AlertDialog.Builder builder = new AlertDialog.Builder(
+ preference.getContext());
+ builder.setMessage(text)
+ .setIcon(android.R.drawable.ic_dialog_info)
+ .setTitle(title)
+ .setPositiveButton(R.string.err_none, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ dialog.cancel();
+ }
+ })
+ .setNegativeButton(urlButton, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse(url));
+ preference.getContext().startActivity(i);
+ }
+ });
+ builder.create().show();
+ return true;
+ }
+ });
+
+ return super.onCreateView(parent);
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java b/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java
new file mode 100644
index 0000000..877a6c7
--- /dev/null
+++ b/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java
@@ -0,0 +1,123 @@
+package cgeo.geocaching.settings;
+
+import cgeo.geocaching.settings.Settings;
+import cgeo.geocaching.R;
+import cgeo.geocaching.activity.ActivityMixin;
+import cgeo.geocaching.connector.gc.Login;
+import cgeo.geocaching.enumerations.StatusCode;
+import cgeo.geocaching.network.Cookies;
+import cgeo.geocaching.utils.Log;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.os.Handler;
+import android.os.Message;
+import android.preference.Preference;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+
+public class CheckGcCredentialsPreference extends Preference {
+
+ public CheckGcCredentialsPreference(Context context) {
+ super(context);
+ }
+
+ public CheckGcCredentialsPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public CheckGcCredentialsPreference(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ @Override
+ protected View onCreateView(ViewGroup parent) {
+ setOnPreferenceClickListener(GC_LOGIN_CHECK);
+ return super.onCreateView(parent);
+ }
+
+ private final GcLoginCheck GC_LOGIN_CHECK = new GcLoginCheck();
+
+ private class GcLoginCheck implements OnPreferenceClickListener {
+ private Resources res;
+ private Activity activity;
+
+ private ProgressDialog loginDialog;
+ @SuppressLint("HandlerLeak")
+ private Handler logInHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ try {
+ if (loginDialog != null && loginDialog.isShowing()) {
+ loginDialog.dismiss();
+ }
+
+ if (msg.obj == null || (msg.obj instanceof Drawable)) {
+ ActivityMixin.helpDialog(activity,
+ res.getString(R.string.init_login_popup),
+ res.getString(R.string.init_login_popup_ok),
+ (Drawable) msg.obj);
+ } else {
+ ActivityMixin.helpDialog(activity,
+ res.getString(R.string.init_login_popup),
+ res.getString(R.string.init_login_popup_failed_reason)
+ + " "
+ + ((StatusCode) msg.obj).getErrorString(res)
+ + ".");
+ }
+ } catch (Exception e) {
+ ActivityMixin.showToast(activity, R.string.err_login_failed);
+ Log.e("SettingsActivity.logInHandler", e);
+ }
+
+ if (loginDialog != null && loginDialog.isShowing()) {
+ loginDialog.dismiss();
+ }
+ }
+ };
+
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ this.activity = (Activity) CheckGcCredentialsPreference.this.getContext();
+ this.res = activity.getResources();
+
+ ImmutablePair<String, String> credentials = Settings.getGcLogin();
+
+ // check credentials for validity
+ if (credentials == null || StringUtils.isBlank(credentials.getLeft())
+ || StringUtils.isBlank(credentials.getRight())) {
+ ActivityMixin.showToast(activity, R.string.err_missing_auth);
+ return false;
+ }
+
+ loginDialog = ProgressDialog.show(activity,
+ res.getString(R.string.init_login_popup),
+ res.getString(R.string.init_login_popup_working), true);
+ loginDialog.setCancelable(false);
+ Cookies.clearCookies();
+
+ (new Thread() {
+ @Override
+ public void run() {
+ final StatusCode loginResult = Login.login();
+ Object payload = loginResult;
+ if (loginResult == StatusCode.NO_ERROR) {
+ Login.detectGcCustomDate();
+ payload = Login.downloadAvatarAndGetMemberStatus();
+ }
+ logInHandler.obtainMessage(0, payload).sendToTarget();
+ }
+ }).start();
+
+ return false; // no shared preference has to be changed
+ }
+ }
+}
diff --git a/main/src/cgeo/geocaching/settings/EditPasswordPreference.java b/main/src/cgeo/geocaching/settings/EditPasswordPreference.java
new file mode 100644
index 0000000..c2fac6a
--- /dev/null
+++ b/main/src/cgeo/geocaching/settings/EditPasswordPreference.java
@@ -0,0 +1,29 @@
+package cgeo.geocaching.settings;
+
+import android.content.Context;
+import android.preference.EditTextPreference;
+import android.util.AttributeSet;
+
+/**
+ * This is just a dummy preference, to be able check for the type.
+ * <p>
+ * Use it exactly as an EditTextPreference
+ *
+ * @see NewSettingsActivity - search for EditPasswordPreference
+ * @author koem
+ */
+public class EditPasswordPreference extends EditTextPreference {
+
+ public EditPasswordPreference(Context context) {
+ super(context);
+ }
+
+ public EditPasswordPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public EditPasswordPreference(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/settings/InfoPreference.java b/main/src/cgeo/geocaching/settings/InfoPreference.java
new file mode 100644
index 0000000..465cf12
--- /dev/null
+++ b/main/src/cgeo/geocaching/settings/InfoPreference.java
@@ -0,0 +1,91 @@
+package cgeo.geocaching.settings;
+
+import cgeo.geocaching.R;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.res.TypedArray;
+import android.net.Uri;
+import android.preference.Preference;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+
+public class InfoPreference extends Preference {
+
+ // strings for the popup dialog
+ private String text;
+ private String url;
+ private String urlButton;
+
+ public InfoPreference(Context context) {
+ super(context);
+ init(context, null, 0);
+ }
+
+ public InfoPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init(context, attrs, 0);
+ }
+
+ public InfoPreference(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ init(context, attrs, defStyle);
+ }
+
+ private void init(Context context, AttributeSet attrs, int defStyle) {
+ setPersistent(false);
+
+ if (attrs == null) {
+ return; // coward's retreat
+ }
+
+ TypedArray types = context.obtainStyledAttributes(attrs, new int[] {
+ android.R.attr.text, R.attr.url, R.attr.urlButton },
+ defStyle, 0);
+
+ text = types.getString(0);
+ url = types.getString(1);
+ urlButton = types.getString(2);
+
+ types.recycle();
+ }
+
+ @Override
+ protected View onCreateView(ViewGroup parent) {
+
+ // show popup when clicked
+ setOnPreferenceClickListener(new OnPreferenceClickListener() {
+
+ @Override
+ public boolean onPreferenceClick(final Preference preference) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(
+ preference.getContext());
+ builder.setMessage(text)
+ .setIcon(android.R.drawable.ic_dialog_info)
+ .setTitle(preference.getTitle())
+ .setPositiveButton(R.string.err_none, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ dialog.cancel();
+ }
+ })
+ .setNegativeButton(urlButton, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse(url));
+ preference.getContext().startActivity(i);
+ }
+ });
+ builder.create().show();
+ return false;
+ }
+ });
+
+ return super.onCreateView(parent);
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/settings/LogSignaturePreference.java b/main/src/cgeo/geocaching/settings/LogSignaturePreference.java
new file mode 100644
index 0000000..2fdd5ac
--- /dev/null
+++ b/main/src/cgeo/geocaching/settings/LogSignaturePreference.java
@@ -0,0 +1,60 @@
+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 NewSettingsActivity 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 = (NewSettingsActivity) 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/NewSettingsActivity.java b/main/src/cgeo/geocaching/settings/NewSettingsActivity.java
new file mode 100644
index 0000000..bf4ad01
--- /dev/null
+++ b/main/src/cgeo/geocaching/settings/NewSettingsActivity.java
@@ -0,0 +1,524 @@
+package cgeo.geocaching.settings;
+
+import cgeo.geocaching.Intents;
+import cgeo.geocaching.R;
+import cgeo.geocaching.SelectMapfileActivity;
+import cgeo.geocaching.cgData;
+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.files.SimpleDirChooser;
+import cgeo.geocaching.maps.MapProviderFactory;
+import cgeo.geocaching.maps.interfaces.MapSource;
+import cgeo.geocaching.ui.Formatter;
+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;
+
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Environment;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
+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.EditText;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A {@link PreferenceActivity} that presents a set of application settings. On
+ * handset devices, settings are presented as a single list. On tablets,
+ * settings are split by category, with category headers shown to the left of
+ * the list of settings.
+ * <p>
+ * See <a href="http://developer.android.com/design/patterns/settings.html"> Android Design: Settings</a> for design
+ * guidelines and the <a href="http://developer.android.com/guide/topics/ui/settings.html">Settings API Guide</a> for
+ * more information on developing a Settings UI.
+ *
+ * @author koem (initial author)
+ */
+public class NewSettingsActivity extends PreferenceActivity {
+
+ private static final String INTENT_GOTO = "GOTO";
+ private static final int INTENT_GOTO_SERVICES = 1;
+ private static final String FAKEKEY_MAIN_SCREEN = "fakekey_main_screen";
+ private static final String FAKEKEY_SERVICES_SCREEN = "fakekey_services_screen";
+
+ private EditText signatureText;
+
+ /**
+ * Enum for dir choosers. This is how we can retrieve information about the
+ * directory and preference key in onActivityResult() easily just by knowing
+ * the result code.
+ */
+ private enum DirChooserType {
+ GPX_IMPORT_DIR(1, Settings.KEY_GPX_IMPORT_DIR,
+ Environment.getExternalStorageDirectory().getPath() + "/gpx"),
+ GPX_EXPORT_DIR(2, Settings.KEY_GPX_EXPORT_DIR,
+ Environment.getExternalStorageDirectory().getPath() + "/gpx"),
+ THEMES_DIR(3, Settings.KEY_RENDER_THEME_BASE_FOLDER, "");
+ public final int requestCode;
+ public final String key;
+ public final String defaultValue;
+
+ private DirChooserType(int requestCode, String key, String defaultValue) {
+ this.requestCode = requestCode;
+ this.key = key;
+ this.defaultValue = defaultValue;
+ }
+ }
+
+ private final static int DIR_CHOOSER_MAPS_DIRECTORY_REQUEST = 4;
+
+ @SuppressWarnings("deprecation")
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+
+ if (Settings.isLightSkin()) {
+ setTheme(R.style.settings_light);
+ } else {
+ setTheme(R.style.settings);
+ }
+
+ super.onCreate(savedInstanceState);
+
+ addPreferencesFromResource(R.xml.preferences);
+
+ initPreferences();
+
+ Intent intent = getIntent();
+ int gotoPage = intent.getIntExtra(INTENT_GOTO, 0);
+ if (gotoPage == INTENT_GOTO_SERVICES) {
+ // start with services screen
+ PreferenceScreen main = (PreferenceScreen) findPreference(FAKEKEY_MAIN_SCREEN);
+ int index = findPreference(FAKEKEY_SERVICES_SCREEN).getOrder();
+ main.onItemClick(null, null, index, 0);
+ }
+ }
+
+ private void initPreferences() {
+ initMapSourcePreference();
+ initDirChoosers();
+ initDefaultNavigationPreferences();
+ initBackupButtons();
+ initDbLocationPreference();
+ initDebugPreference();
+ initBasicMemberPreferences();
+ initSend2CgeoPreferences();
+
+ for (String k : new String[] { Settings.KEY_USERNAME, Settings.KEY_PASSWORD,
+ Settings.KEY_GCVOTE_PASSWORD, Settings.KEY_SIGNATURE,
+ Settings.KEY_MAP_SOURCE, Settings.KEY_RENDER_THEME_BASE_FOLDER,
+ Settings.KEY_GPX_EXPORT_DIR, Settings.KEY_GPX_IMPORT_DIR,
+ Settings.KEY_MAP_DIRECTORY, Settings.KEY_DEFAULT_NAVIGATION_TOOL,
+ Settings.KEY_DEFAULT_NAVIGATION_TOOL_2, Settings.KEY_WEBDEVICE_NAME,
+ Settings.FAKEKEY_PREFERENCE_BACKUP_INFO, }) {
+ bindSummaryToStringValue(k);
+ }
+ bindSummaryToIntValue(Settings.KEY_ALTITUDE_CORRECTION);
+ }
+
+ // workaround, because OnContextItemSelected nor onMenuItemSelected is never called
+ OnMenuItemClickListener TEMPLATE_CLICK = new OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ LogTemplate template = LogTemplateProvider.getTemplate(item.getItemId());
+ if (template != null) {
+ insertSignatureTemplate(template);
+ return true;
+ }
+ return false;
+ }
+ };
+
+ // workaround, because OnContextItemSelected nor onMenuItemSelected is never called
+ void setSignatureTextView(EditText view) {
+ this.signatureText = view;
+ }
+
+ @Override
+ public void onCreateContextMenu(ContextMenu menu, View v,
+ 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 void insertSignatureTemplate(final LogTemplate template) {
+ String insertText = "[" + template.getTemplateString() + "]";
+ ActivityMixin.insertAtPosition(signatureText, insertText, true);
+ }
+
+ /**
+ * fill the choice list for map sources
+ */
+ @SuppressWarnings("deprecation")
+ private void initMapSourcePreference() {
+ ListPreference pref = (ListPreference) findPreference(Settings.KEY_MAP_SOURCE);
+
+ List<MapSource> mapSources = MapProviderFactory.getMapSources();
+ CharSequence[] entries = new CharSequence[mapSources.size()];
+ 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());
+ }
+ pref.setEntries(entries);
+ pref.setEntryValues(values);
+ }
+
+ /**
+ * fill the choice list for default navigation tools
+ */
+ @SuppressWarnings("deprecation")
+ private void initDefaultNavigationPreferences() {
+
+ final List<NavigationAppsEnum> apps = NavigationAppFactory.getInstalledDefaultNavigationApps();
+
+ CharSequence[] entries = new CharSequence[apps.size()];
+ 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);
+ }
+
+ ListPreference pref = (ListPreference) findPreference(Settings.KEY_DEFAULT_NAVIGATION_TOOL);
+ pref.setEntries(entries);
+ pref.setEntryValues(values);
+ pref = (ListPreference) findPreference(Settings.KEY_DEFAULT_NAVIGATION_TOOL_2);
+ pref.setEntries(entries);
+ pref.setEntryValues(values);
+ }
+
+ /**
+ * fire up a dir chooser on click on the preference
+ *
+ * @see #onActivityResult() for processing of the selected directory
+ *
+ * @param key
+ * key of the preference
+ * @param defaultValue
+ * default directory - in case the preference has never been
+ * set yet
+ */
+ @SuppressWarnings("deprecation")
+ private void initDirChoosers() {
+ for (final DirChooserType dct : DirChooserType.values()) {
+ final String dir = Settings.getString(dct.key, dct.defaultValue);
+
+ findPreference(dct.key).setOnPreferenceClickListener(
+ new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ startDirChooser(dct, dir);
+ return false;
+ }
+ });
+ }
+
+ findPreference(Settings.KEY_MAP_DIRECTORY).setOnPreferenceClickListener(
+ new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ Intent i = new Intent(NewSettingsActivity.this,
+ SelectMapfileActivity.class);
+ startActivityForResult(i, DIR_CHOOSER_MAPS_DIRECTORY_REQUEST);
+ return false;
+ }
+ });
+ }
+
+ private void startDirChooser(DirChooserType dct, String startDirectory) {
+ try {
+ final Intent dirChooser = new Intent(FileManagerIntents.ACTION_PICK_DIRECTORY);
+ if (StringUtils.isNotBlank(startDirectory)) {
+ dirChooser.setData(Uri.fromFile(new File(startDirectory)));
+ }
+ dirChooser.putExtra(FileManagerIntents.EXTRA_TITLE,
+ getString(R.string.simple_dir_chooser_title));
+ dirChooser.putExtra(FileManagerIntents.EXTRA_BUTTON_TEXT,
+ getString(android.R.string.ok));
+ startActivityForResult(dirChooser, dct.requestCode);
+ } catch (android.content.ActivityNotFoundException ex) {
+ // OI file manager not available
+ final Intent dirChooser = new Intent(this, SimpleDirChooser.class);
+ dirChooser.putExtra(Intents.EXTRA_START_DIR, startDirectory);
+ startActivityForResult(dirChooser, dct.requestCode);
+ }
+ }
+
+ @SuppressWarnings("deprecation")
+ private void setChosenDirectory(DirChooserType dct, Intent data) {
+ final String directory = new File(data.getData().getPath()).getAbsolutePath();
+ if (StringUtils.isNotBlank(directory)) {
+ Preference p = findPreference(dct.key);
+ if (p == null) {
+ return;
+ }
+ Settings.putString(dct.key, directory);
+ p.setSummary(directory);
+ }
+ }
+
+ @SuppressWarnings("deprecation")
+ public void initBackupButtons() {
+ Preference backup = findPreference(Settings.FAKEKEY_PREFERENCE_BACKUP);
+ backup.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(final Preference preference) {
+ final Context context = preference.getContext();
+ // avoid overwriting an existing backup with an empty database
+ // (can happen directly after reinstalling the app)
+ if (cgData.getAllCachesCount() == 0) {
+ ActivityMixin.helpDialog(NewSettingsActivity.this,
+ context.getString(R.string.init_backup),
+ context.getString(R.string.init_backup_unnecessary));
+ return false;
+ }
+
+ final ProgressDialog dialog = ProgressDialog.show(context,
+ context.getString(R.string.init_backup),
+ context.getString(R.string.init_backup_running), true, false);
+ new Thread() {
+ @Override
+ public void run() {
+ final String backupFileName = cgData.backupDatabase();
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ dialog.dismiss();
+ ActivityMixin.helpDialog(NewSettingsActivity.this,
+ context.getString(R.string.init_backup_backup),
+ backupFileName != null
+ ? context.getString(R.string.init_backup_success)
+ + "\n" + backupFileName
+ : context.getString(R.string.init_backup_failed));
+ VALUE_CHANGE_LISTENER.onPreferenceChange(findPreference(
+ Settings.FAKEKEY_PREFERENCE_BACKUP_INFO), "");
+ }
+ });
+ }
+ }.start();
+ return true;
+ }
+ });
+
+ Preference restore = findPreference(Settings.FAKEKEY_PREFERENCE_RESTORE);
+ restore.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(final Preference preference) {
+ ((cgeoapplication) NewSettingsActivity.this.getApplication())
+ .restoreDatabase(NewSettingsActivity.this);
+ return true;
+ }
+ });
+ }
+
+ @SuppressWarnings("deprecation")
+ private void initDbLocationPreference() {
+ Preference p = findPreference(Settings.KEY_DB_ON_SDCARD);
+ p.setPersistent(false);
+ p.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ boolean oldValue = Settings.isDbOnSDCard();
+ ((cgeoapplication) NewSettingsActivity.this.getApplication())
+ .moveDatabase(NewSettingsActivity.this);
+ return oldValue != Settings.isDbOnSDCard();
+ }
+ });
+ }
+
+ @SuppressWarnings("deprecation")
+ private void initDebugPreference() {
+ Preference p = findPreference(Settings.KEY_DEBUG);
+ p.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ Log.setDebug((Boolean) newValue);
+ return true;
+ }
+ });
+ }
+
+ @SuppressWarnings("deprecation")
+ private void initBasicMemberPreferences() {
+ findPreference(Settings.KEY_LOAD_DIRECTION_IMG).setEnabled(
+ !Settings.isPremiumMember());
+ findPreference(Settings.KEY_SHOW_CAPTCHA).setEnabled(
+ !Settings.isPremiumMember());
+ }
+
+ private static void initSend2CgeoPreferences() {
+ Settings.putString(Settings.KEY_WEBDEVICE_NAME, Settings.getWebDeviceName());
+ }
+
+ public static void startWithServicesPage(Context fromActivity) {
+ final Intent intent = new Intent(fromActivity, NewSettingsActivity.class);
+ intent.putExtra(INTENT_GOTO, INTENT_GOTO_SERVICES);
+ fromActivity.startActivity(intent);
+ }
+
+ @SuppressWarnings("deprecation")
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode != RESULT_OK) {
+ return;
+ }
+
+ for (DirChooserType dct : DirChooserType.values()) {
+ if (requestCode == dct.requestCode) {
+ setChosenDirectory(dct, data);
+ return;
+ }
+ }
+
+ switch (requestCode) {
+ case DIR_CHOOSER_MAPS_DIRECTORY_REQUEST:
+ if (data.hasExtra(Intents.EXTRA_MAP_FILE)) {
+ final String mapFile = data.getStringExtra(Intents.EXTRA_MAP_FILE);
+ Settings.setMapFile(mapFile);
+ if (!Settings.isValidMapFile(Settings.getMapFile())) {
+ ActivityMixin.showToast(this, R.string.warn_invalid_mapfile);
+ }
+ }
+ initMapSourcePreference();
+ findPreference(Settings.KEY_MAP_DIRECTORY).setSummary(
+ Settings.getMapFileDirectory());
+ break;
+ default:
+ throw new IllegalArgumentException();
+ }
+ }
+
+ /**
+ * A preference value change listener that updates the preference's summary
+ * to reflect its new value.
+ */
+ private static Preference.OnPreferenceChangeListener VALUE_CHANGE_LISTENER = new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object value) {
+ String stringValue = value.toString();
+
+ if (preference instanceof EditPasswordPreference) {
+ if (StringUtils.isBlank((String) value)) {
+ preference.setSummary("");
+ } else {
+ preference.setSummary("\u2022 \u2022 \u2022 \u2022 \u2022 \u2022 \u2022 \u2022 \u2022 \u2022");
+ }
+ } 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);
+
+ // Set the summary to reflect the new value.
+ preference.setSummary(
+ index >= 0
+ ? listPreference.getEntries()[index]
+ : null);
+ } else if (Settings.FAKEKEY_PREFERENCE_BACKUP_INFO.equals(preference.getKey())) {
+ File lastBackupFile = cgData.getRestoreFile();
+ String text;
+ if (lastBackupFile != null) {
+ text = preference.getContext().getString(R.string.init_backup_last) + " "
+ + Formatter.formatTime(lastBackupFile.lastModified())
+ + ", " + Formatter.formatDate(lastBackupFile.lastModified());
+ } else {
+ text = preference.getContext().getString(R.string.init_backup_last_no);
+ }
+ preference.setSummary(text);
+ } else {
+ // For all other preferences, set the summary to the value's
+ // simple string representation.
+ preference.setSummary(stringValue);
+ }
+ return true;
+ }
+ };
+
+ /**
+ * Binds a preference's summary to its value. More specifically, when the
+ * preference's value is changed, its summary (line of text below the
+ * preference title) is updated to reflect the value. The summary is also
+ * immediately updated upon calling this method. The exact display format is
+ * dependent on the type of preference.
+ *
+ * @see #VALUE_CHANGE_LISTENER
+ */
+ private static void bindSummaryToValue(Preference preference, Object value) {
+ // Set the listener to watch for value changes.
+ if (preference == null) {
+ return;
+ }
+ preference.setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER);
+
+ // Trigger the listener immediately with the preference's
+ // current value.
+ VALUE_CHANGE_LISTENER.onPreferenceChange(preference, value);
+ }
+
+ /**
+ * auto-care for the summary of the preference of string type with this key
+ *
+ * @param key
+ */
+ @SuppressWarnings("deprecation")
+ private void bindSummaryToStringValue(String key) {
+ Preference p = findPreference(key);
+ if (p == null) {
+ return;
+ }
+
+ String value = PreferenceManager
+ .getDefaultSharedPreferences(p.getContext())
+ .getString(p.getKey(), "");
+
+ bindSummaryToValue(p, value);
+ }
+
+ /**
+ * auto-care for the summary of the preference of int type with this key
+ *
+ * @param key
+ */
+ @SuppressWarnings("deprecation")
+ private void bindSummaryToIntValue(String key) {
+ Preference p = findPreference(key);
+ if (p == null) {
+ return;
+ }
+
+ int value = PreferenceManager
+ .getDefaultSharedPreferences(p.getContext())
+ .getInt(p.getKey(), 0);
+
+ bindSummaryToValue(p, value);
+ }
+}
diff --git a/main/src/cgeo/geocaching/settings/NumberPickerPreference.java b/main/src/cgeo/geocaching/settings/NumberPickerPreference.java
new file mode 100644
index 0000000..273b7d3
--- /dev/null
+++ b/main/src/cgeo/geocaching/settings/NumberPickerPreference.java
@@ -0,0 +1,93 @@
+package cgeo.geocaching.settings;
+
+import cgeo.geocaching.R;
+
+import org.apache.commons.lang3.StringUtils;
+
+import android.content.Context;
+import android.preference.DialogPreference;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+
+public class NumberPickerPreference extends DialogPreference {
+
+ private EditText editText;
+
+ public NumberPickerPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public NumberPickerPreference(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ @Override
+ protected void onBindDialogView(View view) {
+ String msg = (String) this.getDialogMessage();
+ if (StringUtils.isNotBlank(msg)) {
+ TextView tv = (TextView) view.findViewById(R.id.number_picker_message);
+ tv.setText(msg);
+ }
+
+ editText = (EditText) view.findViewById(R.id.number_picker_input);
+ setValue(getPersistedInt(0));
+
+ Button minus = (Button) view.findViewById(R.id.number_picker_minus);
+ Button plus = (Button) view.findViewById(R.id.number_picker_plus);
+
+ minus.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View button) {
+ Integer value = getValue();
+ if (value != null) {
+ setValue(--value);
+ }
+ }
+ });
+
+ plus.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View button) {
+ Integer value = getValue();
+ if (value != null) {
+ setValue(++value);
+ }
+ }
+ });
+
+ super.onBindDialogView(view);
+ }
+
+ private Integer getValue() {
+ try {
+ return Integer.parseInt(editText.getText().toString());
+ } catch (NumberFormatException e) {
+ return null;
+ }
+ }
+
+ private void setValue(final int value) {
+ int v = value;
+ if (v <= 0) {
+ v = 0;
+ } else if (v > Integer.MAX_VALUE) {
+ v = Integer.MAX_VALUE;
+ }
+ editText.setText(String.valueOf(v));
+ }
+
+ @Override
+ protected void onDialogClosed(boolean positiveResult) {
+ if (positiveResult) {
+ Integer value = getValue();
+ if (value != null) {
+ persistInt(value);
+ callChangeListener(value);
+ }
+ }
+ super.onDialogClosed(positiveResult);
+ }
+}
diff --git a/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java b/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java
new file mode 100644
index 0000000..70c2c44
--- /dev/null
+++ b/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java
@@ -0,0 +1,122 @@
+package cgeo.geocaching.settings;
+
+import cgeo.geocaching.R;
+import cgeo.geocaching.activity.ActivityMixin;
+import cgeo.geocaching.network.Network;
+import cgeo.geocaching.network.Parameters;
+import cgeo.geocaching.utils.Log;
+
+import ch.boye.httpclientandroidlib.HttpResponse;
+
+import org.apache.commons.lang3.StringUtils;
+
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.os.Handler;
+import android.os.Message;
+import android.preference.Preference;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+
+public class RegisterSend2CgeoPreference extends Preference {
+
+ ProgressDialog progressDialog;
+ NewSettingsActivity activity;
+
+ public RegisterSend2CgeoPreference(Context context) {
+ super(context);
+ }
+
+ public RegisterSend2CgeoPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public RegisterSend2CgeoPreference(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ private Handler webAuthHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ try {
+ if (progressDialog != null && progressDialog.isShowing()) {
+ progressDialog.dismiss();
+ }
+
+ if (msg.what > 0) {
+ ActivityMixin.helpDialog(activity,
+ activity.getString(R.string.init_sendToCgeo),
+ activity.getString(R.string.init_sendToCgeo_register_ok)
+ .replace("####", String.valueOf(msg.what)));
+ } else {
+ ActivityMixin.helpDialog(activity,
+ activity.getString(R.string.init_sendToCgeo),
+ activity.getString(R.string.init_sendToCgeo_register_fail));
+ }
+ } catch (Exception e) {
+ ActivityMixin.showToast(activity, R.string.init_sendToCgeo_register_fail);
+ Log.e("SettingsActivity.webHandler", e);
+ }
+
+ if (progressDialog != null && progressDialog.isShowing()) {
+ progressDialog.dismiss();
+ }
+ }
+ };
+
+ @Override
+ protected View onCreateView(ViewGroup parent) {
+ activity = (NewSettingsActivity) getContext();
+
+ setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ final String deviceName = Settings.getWebDeviceName();
+ final String deviceCode = Settings.getWebDeviceCode();
+
+ if (StringUtils.isBlank(deviceName)) {
+ ActivityMixin.showToast(activity, R.string.err_missing_device_name);
+ return false;
+ }
+
+ progressDialog = ProgressDialog.show(activity,
+ activity.getString(R.string.init_sendToCgeo),
+ activity.getString(R.string.init_sendToCgeo_registering), true);
+ progressDialog.setCancelable(false);
+
+ (new Thread() {
+
+ @Override
+ public void run() {
+ int pin = 0;
+
+ final String nam = StringUtils.defaultString(deviceName);
+ final String cod = StringUtils.defaultString(deviceCode);
+
+ final Parameters params = new Parameters("name", nam, "code", cod);
+ HttpResponse response = Network.getRequest("http://send2.cgeo.org/auth.html", params);
+
+ if (response != null && response.getStatusLine().getStatusCode() == 200) {
+ //response was OK
+ String[] strings = Network.getResponseData(response).split(",");
+ try {
+ pin = Integer.parseInt(strings[1].trim());
+ } catch (Exception e) {
+ Log.e("webDialog", e);
+ }
+ String code = strings[0];
+ Settings.setWebNameCode(nam, code);
+ }
+
+ webAuthHandler.sendEmptyMessage(pin);
+ }
+ }).start();
+
+ return true;
+ }
+ });
+ return super.onCreateView(parent);
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/Settings.java b/main/src/cgeo/geocaching/settings/Settings.java
index 7a5db12..2215d25 100644
--- a/main/src/cgeo/geocaching/Settings.java
+++ b/main/src/cgeo/geocaching/settings/Settings.java
@@ -1,5 +1,7 @@
-package cgeo.geocaching;
+package cgeo.geocaching.settings;
+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;
@@ -48,18 +50,18 @@ public final class Settings {
private static final String KEY_USE_OFFLINEMAPS = "offlinemaps";
private static final String KEY_USE_OFFLINEWPMAPS = "offlinewpmaps";
private static final String KEY_WEB_DEVICE_CODE = "webDeviceCode";
- private static final String KEY_WEBDEVICE_NAME = "webDeviceName";
+ static final String KEY_WEBDEVICE_NAME = "webDeviceName";
private static final String KEY_MAP_LIVE = "maplive";
- private static final String KEY_MAP_SOURCE = "mapsource";
+ static final String KEY_MAP_SOURCE = "mapsource";
private static final String KEY_USE_TWITTER = "twitter";
private static final String KEY_SHOW_ADDRESS = "showaddress";
- private static final String KEY_SHOW_CAPTCHA = "showcaptcha";
+ static final String KEY_SHOW_CAPTCHA = "showcaptcha";
private static final String KEY_MAP_TRAIL = "maptrail";
private static final String KEY_LAST_MAP_ZOOM = "mapzoom";
private static final String KEY_LAST_MAP_LAT = "maplat";
private static final String KEY_LAST_MAP_LON = "maplon";
private static final String KEY_LIVE_LIST = "livelist";
- private static final String KEY_METRIC_UNITS = "units";
+ private static final String KEY_IMPERIAL_UNITS = "units";
private static final String KEY_SKIN = "skin";
private static final String KEY_LAST_USED_LIST = "lastlist";
private static final String KEY_CACHE_TYPE = "cachetype";
@@ -70,46 +72,46 @@ public final class Settings {
private static final String KEY_RATING_WANTED = "ratingwanted";
private static final String KEY_ELEVATION_WANTED = "elevationwanted";
private static final String KEY_FRIENDLOGS_WANTED = "friendlogswanted";
- private static final String KEY_USE_ENGLISH = "useenglish";
+ static final String KEY_USE_ENGLISH = "useenglish";
private static final String KEY_USE_COMPASS = "usecompass";
private static final String KEY_AUTO_VISIT_TRACKABLES = "trackautovisit";
private static final String KEY_AUTO_INSERT_SIGNATURE = "sigautoinsert";
- private static final String KEY_ALTITUDE_CORRECTION = "altcorrection";
+ static final String KEY_ALTITUDE_CORRECTION = "altcorrection";
private static final String KEY_STORE_LOG_IMAGES = "logimages";
private static final String KEY_EXCLUDE_DISABLED = "excludedisabled";
private static final String KEY_EXCLUDE_OWN = "excludemine";
private static final String KEY_MAPFILE = "mfmapfile";
- private static final String KEY_SIGNATURE = "signature";
- private static final String KEY_GCVOTE_PASSWORD = "pass-vote";
- private static final String KEY_PASSWORD = "password";
- private static final String KEY_USERNAME = "username";
+ static final String KEY_SIGNATURE = "signature";
+ static final String KEY_GCVOTE_PASSWORD = "pass-vote";
+ static final String KEY_PASSWORD = "password";
+ static final String KEY_USERNAME = "username";
private static final String KEY_MEMBER_STATUS = "memberstatus";
private static final String KEY_COORD_INPUT_FORMAT = "coordinputformat";
private static final String KEY_LOG_OFFLINE = "log_offline";
private static final String KEY_CHOOSE_LIST = "choose_list";
- private static final String KEY_LOAD_DIRECTION_IMG = "loaddirectionimg";
+ static final String KEY_LOAD_DIRECTION_IMG = "loaddirectionimg";
private static final String KEY_GC_CUSTOM_DATE = "gccustomdate";
private static final String KEY_SHOW_WAYPOINTS_THRESHOLD = "gcshowwaypointsthreshold";
private static final String KEY_COOKIE_STORE = "cookiestore";
private static final String KEY_OPEN_LAST_DETAILS_PAGE = "opendetailslastpage";
private static final String KEY_LAST_DETAILS_PAGE = "lastdetailspage";
- private static final String KEY_DEFAULT_NAVIGATION_TOOL = "defaultNavigationTool";
- private static final String KEY_DEFAULT_NAVIGATION_TOOL_2 = "defaultNavigationTool2";
+ static final String KEY_DEFAULT_NAVIGATION_TOOL = "defaultNavigationTool";
+ static final String KEY_DEFAULT_NAVIGATION_TOOL_2 = "defaultNavigationTool2";
private static final String KEY_LIVE_MAP_STRATEGY = "livemapstrategy";
- private static final String KEY_DEBUG = "debug";
+ static final String KEY_DEBUG = "debug";
private static final String KEY_HIDE_LIVE_MAP_HINT = "hidelivemaphint";
private static final String KEY_LIVE_MAP_HINT_SHOW_COUNT = "livemaphintshowcount";
private static final String KEY_SETTINGS_VERSION = "settingsversion";
- private static final String KEY_DB_ON_SDCARD = "dbonsdcard";
+ static final String KEY_DB_ON_SDCARD = "dbonsdcard";
private static final String KEY_LAST_TRACKABLE_ACTION = "trackableaction";
private static final String KEY_SHARE_AFTER_EXPORT = "shareafterexport";
- private static final String KEY_GPX_EXPORT_DIR = "gpxExportDir";
- private static final String KEY_RENDER_THEME_BASE_FOLDER = "renderthemepath";
- private static final String KEY_RENDER_THEME_FILE_PATH = "renderthemefile";
- private static final String KEY_GPX_IMPORT_DIR = "gpxImportDir";
+ public static final String KEY_RENDER_THEME_BASE_FOLDER = "renderthemepath";
+ static final String KEY_RENDER_THEME_FILE_PATH = "renderthemefile";
+ public static final String KEY_GPX_EXPORT_DIR = "gpxExportDir";
+ public static final String KEY_GPX_IMPORT_DIR = "gpxImportDir";
private static final String KEY_PLAIN_LOGS = "plainLogs";
private static final String KEY_NATIVE_UA = "nativeUa";
- private static final String KEY_MAP_DIRECTORY = "mapDirectory";
+ static final String KEY_MAP_DIRECTORY = "mapDirectory";
private static final String KEY_CONNECTOR_GC_ACTIVE = "connectorGCActive";
private static final String KEY_CONNECTOR_OC_ACTIVE = "connectorOCActive";
private static final String KEY_LOG_IMAGE_SCALE = "logImageScale";
@@ -118,6 +120,17 @@ public final class Settings {
private static final String KEY_TEMP_OCDE_TOKEN_SECRET = "ocde-temp-token-secret";
private static final String KEY_TEMP_OCDE_TOKEN_PUBLIC = "ocde-temp-token-public";
+ /*
+ * fake keys are for finding preference objects only, because preferences
+ * don't have an id.
+ */
+ static final String FAKEKEY_PREFERENCE_BACKUP_INFO = "fakekey_preference_backup_info";
+ static final String FAKEKEY_PREFERENCE_BACKUP = "fakekey_preference_backup";
+ static final String FAKEKEY_PREFERENCE_RESTORE = "fakekey_preference_restore";
+
+ public static final int SHOW_WP_THRESHOLD_DEFAULT = 5;
+ public static final int SHOW_WP_THRESHOLD_MAX = 50;
+ private static final int MAP_SOURCE_DEFAULT = GoogleMapProvider.GOOGLE_MAP_ID.hashCode();
private final static int unitsMetric = 1;
@@ -125,10 +138,6 @@ public final class Settings {
private final static String keyConsumerPublic = CryptUtils.rot13("ESnsCvAv3kEupF1GCR3jGj");
private final static String keyConsumerSecret = CryptUtils.rot13("7vQWceACV9umEjJucmlpFe9FCMZSeqIqfkQ2BnhV9x");
- private interface PrefRunnable {
- void edit(final Editor edit);
- }
-
public enum coordInputFormatEnum {
Plain,
Deg,
@@ -147,10 +156,11 @@ public final class Settings {
private static String username = null;
private static String password = null;
- private static final SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(cgeoapplication.getInstance().getBaseContext());
+ private static final SharedPreferences sharedPrefs = PreferenceManager
+ .getDefaultSharedPreferences(cgeoapplication.getInstance().getBaseContext());
static {
migrateSettings();
- Log.setDebugUnsaved(sharedPrefs.getBoolean(KEY_DEBUG, false));
+ Log.setDebug(sharedPrefs.getBoolean(KEY_DEBUG, false));
}
// maps
@@ -163,7 +173,8 @@ public final class Settings {
private static void migrateSettings() {
// migrate from non standard file location and integer based boolean types
- if (sharedPrefs.getInt(KEY_SETTINGS_VERSION, 0) < 1) {
+ int oldVersion = sharedPrefs.getInt(KEY_SETTINGS_VERSION, 0);
+ if (oldVersion < 1) {
final String oldPreferencesName = "cgeo.pref";
final SharedPreferences old = cgeoapplication.getInstance().getSharedPreferences(oldPreferencesName, Context.MODE_PRIVATE);
final Editor e = sharedPrefs.edit();
@@ -178,14 +189,14 @@ public final class Settings {
e.putString(KEY_WEB_DEVICE_CODE, old.getString(KEY_WEB_DEVICE_CODE, null));
e.putString(KEY_WEBDEVICE_NAME, old.getString(KEY_WEBDEVICE_NAME, null));
e.putBoolean(KEY_MAP_LIVE, old.getInt(KEY_MAP_LIVE, 1) != 0);
- e.putInt(KEY_MAP_SOURCE, old.getInt(KEY_MAP_SOURCE, 0));
+ e.putInt(KEY_MAP_SOURCE, old.getInt(KEY_MAP_SOURCE, MAP_SOURCE_DEFAULT));
e.putBoolean(KEY_USE_TWITTER, 0 != old.getInt(KEY_USE_TWITTER, 0));
e.putBoolean(KEY_SHOW_ADDRESS, 0 != old.getInt(KEY_SHOW_ADDRESS, 1));
e.putBoolean(KEY_SHOW_CAPTCHA, old.getBoolean(KEY_SHOW_CAPTCHA, false));
e.putBoolean(KEY_MAP_TRAIL, old.getInt(KEY_MAP_TRAIL, 1) != 0);
e.putInt(KEY_LAST_MAP_ZOOM, old.getInt(KEY_LAST_MAP_ZOOM, 14));
e.putBoolean(KEY_LIVE_LIST, 0 != old.getInt(KEY_LIVE_LIST, 1));
- e.putBoolean(KEY_METRIC_UNITS, old.getInt(KEY_METRIC_UNITS, unitsMetric) == unitsMetric);
+ e.putBoolean(KEY_IMPERIAL_UNITS, old.getInt(KEY_IMPERIAL_UNITS, unitsMetric) == unitsMetric);
e.putBoolean(KEY_SKIN, old.getInt(KEY_SKIN, 0) != 0);
e.putInt(KEY_LAST_USED_LIST, old.getInt(KEY_LAST_USED_LIST, StoredList.STANDARD_LIST_ID));
e.putString(KEY_CACHE_TYPE, old.getString(KEY_CACHE_TYPE, CacheType.ALL.id));
@@ -229,11 +240,81 @@ public final class Settings {
e.putInt(KEY_SETTINGS_VERSION, 1); // mark migrated
e.commit();
}
+
+ // changes for new settings dialog
+ if (oldVersion < 2) {
+ final Editor e = sharedPrefs.edit();
+
+ e.putBoolean(KEY_IMPERIAL_UNITS, !isUseImperialUnits());
+
+ // show waypoints threshold now as a slider
+ int wpThreshold = getWayPointsThreshold();
+ if (wpThreshold < 0) {
+ wpThreshold = 0;
+ } else if (wpThreshold > SHOW_WP_THRESHOLD_MAX) {
+ wpThreshold = SHOW_WP_THRESHOLD_MAX;
+ }
+ e.putInt(KEY_SHOW_WAYPOINTS_THRESHOLD, wpThreshold);
+
+ // KEY_MAP_SOURCE must be string, because it is the key for a ListPreference now
+ int ms = sharedPrefs.getInt(KEY_MAP_SOURCE, MAP_SOURCE_DEFAULT);
+ e.remove(KEY_MAP_SOURCE);
+ e.putString(KEY_MAP_SOURCE, String.valueOf(ms));
+
+ // navigation tool ids must be string, because ListPreference uses strings as keys
+ int dnt1 = sharedPrefs.getInt(KEY_DEFAULT_NAVIGATION_TOOL, NavigationAppsEnum.COMPASS.id);
+ int dnt2 = sharedPrefs.getInt(KEY_DEFAULT_NAVIGATION_TOOL_2, NavigationAppsEnum.INTERNAL_MAP.id);
+ e.remove(KEY_DEFAULT_NAVIGATION_TOOL);
+ e.remove(KEY_DEFAULT_NAVIGATION_TOOL_2);
+ e.putString(KEY_DEFAULT_NAVIGATION_TOOL, String.valueOf(dnt1));
+ e.putString(KEY_DEFAULT_NAVIGATION_TOOL_2, String.valueOf(dnt2));
+
+ // defaults for gpx directories
+ e.putString(KEY_GPX_IMPORT_DIR, getGpxImportDir());
+ e.putString(KEY_GPX_EXPORT_DIR, getGpxExportDir());
+
+ e.putInt(KEY_SETTINGS_VERSION, 2); // mark migrated
+ e.commit();
+ }
+ }
+
+ static String getString(final String key, final String defaultValue) {
+ return sharedPrefs.getString(key, defaultValue);
+ }
+
+ static boolean putString(final String key, final String value) {
+ final SharedPreferences.Editor edit = sharedPrefs.edit();
+ edit.putString(key, value);
+ return edit.commit();
+ }
+
+ static boolean putBoolean(final String key, final boolean value) {
+ final SharedPreferences.Editor edit = sharedPrefs.edit();
+ edit.putBoolean(key, value);
+ return edit.commit();
+ }
+
+ static boolean putInt(final String key, final int value) {
+ final SharedPreferences.Editor edit = sharedPrefs.edit();
+ edit.putInt(key, value);
+ return edit.commit();
+ }
+
+ static boolean putFloat(final String key, final float value) {
+ final SharedPreferences.Editor edit = sharedPrefs.edit();
+ edit.putFloat(key, value);
+ return edit.commit();
+ }
+
+ static boolean remove(final String key) {
+ final SharedPreferences.Editor edit = sharedPrefs.edit();
+ edit.remove(key);
+ return edit.commit();
}
public static void setLanguage(boolean useEnglish) {
final Configuration config = new Configuration();
- config.locale = useEnglish ? new Locale("en") : Locale.getDefault();
+ config.locale = useEnglish ? Locale.ENGLISH : Locale.getDefault();
final Resources resources = cgeoapplication.getInstance().getResources();
resources.updateConfiguration(config, resources.getDisplayMetrics());
}
@@ -250,12 +331,12 @@ public final class Settings {
*
* @return a pair (login, password) or null if no valid information is stored
*/
- public static ImmutablePair<String, String> getLogin() {
- if (username == null || password == null) {
+ public static ImmutablePair<String, String> getGcLogin() {
+ if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) {
final String preUsername = sharedPrefs.getString(KEY_USERNAME, null);
final String prePassword = sharedPrefs.getString(KEY_PASSWORD, null);
- if (preUsername == null || prePassword == null) {
+ if (StringUtils.isBlank(preUsername) || StringUtils.isBlank(prePassword)) {
return null;
}
@@ -269,38 +350,29 @@ public final class Settings {
return username != null ? username : sharedPrefs.getString(KEY_USERNAME, null);
}
+ // TODO: remove with SettingsActivity
public static boolean setLogin(final String username, final String password) {
Settings.username = username;
Settings.password = password;
- return editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) {
- // erase username and password
- edit.remove(KEY_USERNAME);
- edit.remove(KEY_PASSWORD);
- } else {
- // save username and password
- edit.putString(KEY_USERNAME, username);
- edit.putString(KEY_PASSWORD, password);
- }
- }
- });
+ if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) {
+ // erase username and password
+ boolean a = remove(KEY_USERNAME);
+ boolean b = remove(KEY_PASSWORD);
+ return a && b;
+ }
+ // save username and password
+ boolean a = putString(KEY_USERNAME, username);
+ boolean b = putString(KEY_PASSWORD, password);
+ return a && b;
}
public static boolean isGCConnectorActive() {
return sharedPrefs.getBoolean(KEY_CONNECTOR_GC_ACTIVE, true);
}
+ // TODO: remove with SettingsActivity
public static boolean setGCConnectorActive(final boolean isActive) {
- return editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_CONNECTOR_GC_ACTIVE, isActive);
- }
- });
+ return putBoolean(KEY_CONNECTOR_GC_ACTIVE, isActive);
}
public static boolean isPremiumMember() {
@@ -317,17 +389,10 @@ public final class Settings {
}
public static boolean setMemberStatus(final String memberStatus) {
- return editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- if (StringUtils.isBlank(memberStatus)) {
- edit.remove(KEY_MEMBER_STATUS);
- } else {
- edit.putString(KEY_MEMBER_STATUS, memberStatus);
- }
- }
- });
+ if (StringUtils.isBlank(memberStatus)) {
+ return remove(KEY_MEMBER_STATUS);
+ }
+ return putString(KEY_MEMBER_STATUS, memberStatus);
}
public static boolean isOCConnectorActive() {
@@ -335,13 +400,7 @@ public final class Settings {
}
public static boolean setOCConnectorActive(final boolean isActive) {
- return editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_CONNECTOR_OC_ACTIVE, isActive);
- }
- });
+ return putBoolean(KEY_CONNECTOR_OC_ACTIVE, isActive);
}
public static String getOCDETokenPublic() {
@@ -352,30 +411,20 @@ public final class Settings {
return sharedPrefs.getString(KEY_OCDE_TOKEN_SECRET, "");
}
- public static void setOCDETokens(final String tokenPublic, final String tokenSecret, boolean enableOcDe) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putString(KEY_OCDE_TOKEN_PUBLIC, tokenPublic);
- edit.putString(KEY_OCDE_TOKEN_SECRET, tokenSecret);
- if (tokenPublic != null) {
- edit.remove(KEY_TEMP_OCDE_TOKEN_PUBLIC);
- edit.remove(KEY_TEMP_OCDE_TOKEN_SECRET);
- }
- }
- });
+ public static void setOCDETokens(final String tokenPublic,
+ final String tokenSecret, boolean enableOcDe) {
+ putString(KEY_OCDE_TOKEN_PUBLIC, tokenPublic);
+ putString(KEY_OCDE_TOKEN_SECRET, tokenSecret);
+ if (tokenPublic != null) {
+ remove(KEY_TEMP_OCDE_TOKEN_PUBLIC);
+ remove(KEY_TEMP_OCDE_TOKEN_SECRET);
+ }
setOCConnectorActive(enableOcDe);
}
public static void setOCDETempTokens(final String tokenPublic, final String tokenSecret) {
- editSharedSettings(new PrefRunnable() {
- @Override
- public void edit(Editor edit) {
- edit.putString(KEY_TEMP_OCDE_TOKEN_PUBLIC, tokenPublic);
- edit.putString(KEY_TEMP_OCDE_TOKEN_SECRET, tokenSecret);
- }
- });
+ putString(KEY_TEMP_OCDE_TOKEN_PUBLIC, tokenPublic);
+ putString(KEY_TEMP_OCDE_TOKEN_SECRET, tokenSecret);
}
public static ImmutablePair<String, String> getTempOCDEToken() {
@@ -391,20 +440,14 @@ public final class Settings {
return !StringUtils.isBlank(preUsername) && !StringUtils.isBlank(prePassword);
}
+ // TODO: remove with SettingsActivity
public static boolean setGCvoteLogin(final String password) {
- return editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- if (StringUtils.isBlank(password)) {
- // erase password
- edit.remove(KEY_GCVOTE_PASSWORD);
- } else {
- // save password
- edit.putString(KEY_GCVOTE_PASSWORD, password);
- }
- }
- });
+ if (StringUtils.isBlank(password)) {
+ // erase password
+ return remove(KEY_GCVOTE_PASSWORD);
+ }
+ // save password
+ return putString(KEY_GCVOTE_PASSWORD, password);
}
public static ImmutablePair<String, String> getGCvoteLogin() {
@@ -418,20 +461,14 @@ public final class Settings {
return new ImmutablePair<String, String>(username, password);
}
+ // TODO: remove with SettingsActivity
public static boolean setSignature(final String signature) {
- return editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- if (StringUtils.isBlank(signature)) {
- // erase signature
- edit.remove(KEY_SIGNATURE);
- } else {
- // save signature
- edit.putString(KEY_SIGNATURE, signature);
- }
- }
- });
+ if (StringUtils.isBlank(signature)) {
+ // erase signature
+ return remove(KEY_SIGNATURE);
+ }
+ // save signature
+ return putString(KEY_SIGNATURE, signature);
}
public static String getSignature() {
@@ -439,19 +476,12 @@ public final class Settings {
}
public static boolean setCookieStore(final String cookies) {
- return editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(final Editor edit) {
- if (StringUtils.isBlank(cookies)) {
- // erase cookies
- edit.remove(KEY_COOKIE_STORE);
- } else {
- // save cookies
- edit.putString(KEY_COOKIE_STORE, cookies);
- }
- }
- });
+ if (StringUtils.isBlank(cookies)) {
+ // erase cookies
+ return remove(KEY_COOKIE_STORE);
+ }
+ // save cookies
+ return putString(KEY_COOKIE_STORE, cookies);
}
public static String getCookieStore() {
@@ -463,26 +493,11 @@ public final class Settings {
* The cache type used for future filtering
*/
public static void setCacheType(final CacheType cacheType) {
- editSharedSettings(new PrefRunnable() {
- @Override
- public void edit(Editor edit) {
- if (cacheType == null) {
- edit.remove(KEY_CACHE_TYPE);
- } else {
- edit.putString(KEY_CACHE_TYPE, cacheType.id);
- }
- }
- });
- }
-
- public static void setLiveMap(final boolean live) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_MAP_LIVE, live);
- }
- });
+ if (cacheType == null) {
+ remove(KEY_CACHE_TYPE);
+ } else {
+ putString(KEY_CACHE_TYPE, cacheType.id);
+ }
}
public static int getLastList() {
@@ -490,25 +505,12 @@ public final class Settings {
}
public static void saveLastList(final int listId) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putInt(KEY_LAST_USED_LIST, listId);
- }
- });
+ putInt(KEY_LAST_USED_LIST, listId);
}
public static void setWebNameCode(final String name, final String code) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
-
- edit.putString(KEY_WEBDEVICE_NAME, name);
- edit.putString(KEY_WEB_DEVICE_CODE, code);
- }
- });
+ putString(KEY_WEBDEVICE_NAME, name);
+ putString(KEY_WEB_DEVICE_CODE, code);
}
public static MapProvider getMapProvider() {
@@ -523,12 +525,7 @@ public final class Settings {
}
public static boolean setMapFile(final String mapFile) {
- boolean result = editSharedSettings(new PrefRunnable() {
- @Override
- public void edit(Editor edit) {
- edit.putString(KEY_MAPFILE, mapFile);
- }
- });
+ boolean result = putString(KEY_MAPFILE, mapFile);
if (mapFile != null) {
setMapFileDirectory(new File(mapFile).getParent());
}
@@ -548,13 +545,9 @@ public final class Settings {
}
public static boolean setMapFileDirectory(final String mapFileDirectory) {
- return editSharedSettings(new PrefRunnable() {
- @Override
- public void edit(Editor edit) {
- edit.putString(KEY_MAP_DIRECTORY, mapFileDirectory);
- MapsforgeMapProvider.getInstance().updateOfflineMaps();
- }
- });
+ boolean result = putString(KEY_MAP_DIRECTORY, mapFileDirectory);
+ MapsforgeMapProvider.getInstance().updateOfflineMaps();
+ return result;
}
public static boolean isValidMapFile() {
@@ -570,51 +563,29 @@ public final class Settings {
}
public static void setCoordInputFormat(final coordInputFormatEnum format) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putInt(KEY_COORD_INPUT_FORMAT, format.ordinal());
- }
- });
+ putInt(KEY_COORD_INPUT_FORMAT, format.ordinal());
}
static void setLogOffline(final boolean offline) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_LOG_OFFLINE, offline);
- }
- });
+ putBoolean(KEY_LOG_OFFLINE, offline);
}
public static boolean getLogOffline() {
return sharedPrefs.getBoolean(KEY_LOG_OFFLINE, false);
}
+ // TODO: remove with SettingsActivity
static void setChooseList(final boolean choose) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_CHOOSE_LIST, choose);
- }
- });
+ putBoolean(KEY_CHOOSE_LIST, choose);
}
public static boolean getChooseList() {
return sharedPrefs.getBoolean(KEY_CHOOSE_LIST, false);
}
+ // TODO: remove with SettingsActivity
static void setLoadDirImg(final boolean value) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_LOAD_DIRECTION_IMG, value);
- }
- });
+ putBoolean(KEY_LOAD_DIRECTION_IMG, value);
}
public static boolean getLoadDirImg() {
@@ -622,13 +593,7 @@ public final class Settings {
}
public static void setGcCustomDate(final String format) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putString(KEY_GC_CUSTOM_DATE, format);
- }
- });
+ putString(KEY_GC_CUSTOM_DATE, format);
}
/**
@@ -643,36 +608,14 @@ public final class Settings {
return sharedPrefs.getBoolean(KEY_EXCLUDE_OWN, false);
}
- /**
- * edit some settings without knowing how to get the settings editor or how to commit
- *
- * @param runnable
- * @return
- */
- private static boolean editSharedSettings(final PrefRunnable runnable) {
- final SharedPreferences.Editor prefsEdit = sharedPrefs.edit();
- runnable.edit(prefsEdit);
- return prefsEdit.commit();
- }
-
+ // TODO: remove with SettingsActivity
public static void setExcludeMine(final boolean exclude) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_EXCLUDE_OWN, exclude);
- }
- });
+ putBoolean(KEY_EXCLUDE_OWN, exclude);
}
public static void setUseEnglish(final boolean english) {
- editSharedSettings(new PrefRunnable() {
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_USE_ENGLISH, english);
- setLanguage(english);
- }
- });
+ putBoolean(KEY_USE_ENGLISH, english);
+ setLanguage(english);
}
public static boolean isUseEnglish() {
@@ -683,126 +626,81 @@ public final class Settings {
return sharedPrefs.getBoolean(KEY_SHOW_ADDRESS, true);
}
+ // TODO: remove with SettingsActivity
public static void setShowAddress(final boolean showAddress) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_SHOW_ADDRESS, showAddress);
- }
- });
+ putBoolean(KEY_SHOW_ADDRESS, showAddress);
}
public static boolean isShowCaptcha() {
return !isPremiumMember() && sharedPrefs.getBoolean(KEY_SHOW_CAPTCHA, false);
}
+ // TODO: remove with SettingsActivity
public static void setShowCaptcha(final boolean showCaptcha) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_SHOW_CAPTCHA, showCaptcha);
- }
- });
+ putBoolean(KEY_SHOW_CAPTCHA, showCaptcha);
}
public static boolean isExcludeDisabledCaches() {
return sharedPrefs.getBoolean(KEY_EXCLUDE_DISABLED, false);
}
+ // TODO: remove with SettingsActivity
public static void setExcludeDisabledCaches(final boolean exclude) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_EXCLUDE_DISABLED, exclude);
- }
- });
+ putBoolean(KEY_EXCLUDE_DISABLED, exclude);
}
public static boolean isStoreOfflineMaps() {
return sharedPrefs.getBoolean(KEY_USE_OFFLINEMAPS, true);
}
+ // TODO: remove with SettingsActivity
public static void setStoreOfflineMaps(final boolean offlineMaps) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_USE_OFFLINEMAPS, offlineMaps);
- }
- });
+ putBoolean(KEY_USE_OFFLINEMAPS, offlineMaps);
}
public static boolean isStoreOfflineWpMaps() {
return sharedPrefs.getBoolean(KEY_USE_OFFLINEWPMAPS, false);
}
+ // TODO: remove with SettingsActivity
public static void setStoreOfflineWpMaps(final boolean offlineMaps) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_USE_OFFLINEWPMAPS, offlineMaps);
- }
- });
+ putBoolean(KEY_USE_OFFLINEWPMAPS, offlineMaps);
}
public static boolean isStoreLogImages() {
return sharedPrefs.getBoolean(KEY_STORE_LOG_IMAGES, false);
}
+ // TODO: remove with SettingsActivity
public static void setStoreLogImages(final boolean storeLogImages) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_STORE_LOG_IMAGES, storeLogImages);
- }
- });
+ putBoolean(KEY_STORE_LOG_IMAGES, storeLogImages);
}
public static boolean isAutoLoadDescription() {
return sharedPrefs.getBoolean(KEY_LOAD_DESCRIPTION, true);
}
+ // TODO: remove with SettingsActivity
public static void setAutoLoadDesc(final boolean autoLoad) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_LOAD_DESCRIPTION, autoLoad);
- }
- });
+ putBoolean(KEY_LOAD_DESCRIPTION, autoLoad);
}
public static boolean isRatingWanted() {
return sharedPrefs.getBoolean(KEY_RATING_WANTED, true);
}
+ // TODO: remove with SettingsActivity
public static void setRatingWanted(final boolean ratingWanted) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_RATING_WANTED, ratingWanted);
- }
- });
+ putBoolean(KEY_RATING_WANTED, ratingWanted);
}
public static boolean isElevationWanted() {
return sharedPrefs.getBoolean(KEY_ELEVATION_WANTED, false);
}
+ // TODO: remove with SettingsActivity
public static void setElevationWanted(final boolean elevationWanted) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_ELEVATION_WANTED, elevationWanted);
- }
- });
+ putBoolean(KEY_ELEVATION_WANTED, elevationWanted);
}
public static boolean isFriendLogsWanted() {
@@ -813,88 +711,61 @@ public final class Settings {
return sharedPrefs.getBoolean(KEY_FRIENDLOGS_WANTED, true);
}
+ // TODO: remove with SettingsActivity
public static void setFriendLogsWanted(final boolean friendLogsWanted) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_FRIENDLOGS_WANTED, friendLogsWanted);
- }
- });
+ putBoolean(KEY_FRIENDLOGS_WANTED, friendLogsWanted);
}
public static boolean isLiveList() {
return sharedPrefs.getBoolean(KEY_LIVE_LIST, true);
}
+ // TODO: remove with SettingsActivity
public static void setLiveList(final boolean liveList) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_LIVE_LIST, liveList);
- }
- });
+ putBoolean(KEY_LIVE_LIST, liveList);
}
public static boolean isTrackableAutoVisit() {
return sharedPrefs.getBoolean(KEY_AUTO_VISIT_TRACKABLES, false);
}
+ // TODO: remove with SettingsActivity
public static void setTrackableAutoVisit(final boolean autoVisit) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_AUTO_VISIT_TRACKABLES, autoVisit);
- }
- });
+ putBoolean(KEY_AUTO_VISIT_TRACKABLES, autoVisit);
}
public static boolean isAutoInsertSignature() {
return sharedPrefs.getBoolean(KEY_AUTO_INSERT_SIGNATURE, false);
}
+ // TODO: remove with SettingsActivity
public static void setAutoInsertSignature(final boolean autoInsert) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_AUTO_INSERT_SIGNATURE, autoInsert);
- }
- });
+ putBoolean(KEY_AUTO_INSERT_SIGNATURE, autoInsert);
}
- public static boolean isUseMetricUnits() {
- return sharedPrefs.getBoolean(KEY_METRIC_UNITS, true);
+ public static boolean isUseImperialUnits() {
+ return sharedPrefs.getBoolean(KEY_IMPERIAL_UNITS, false);
}
- public static void setUseMetricUnits(final boolean metric) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_METRIC_UNITS, metric);
- }
- });
+ // TODO: remove with SettingsActivity
+ public static void setUseImperialUnits(final boolean imperial) {
+ putBoolean(KEY_IMPERIAL_UNITS, imperial);
}
public static boolean isLiveMap() {
return sharedPrefs.getBoolean(KEY_MAP_LIVE, true);
}
+ public static void setLiveMap(final boolean live) {
+ putBoolean(KEY_MAP_LIVE, live);
+ }
+
public static boolean isMapTrail() {
return sharedPrefs.getBoolean(KEY_MAP_TRAIL, true);
}
public static void setMapTrail(final boolean showTrail) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_MAP_TRAIL, showTrail);
- }
- });
+ putBoolean(KEY_MAP_TRAIL, showTrail);
}
public static int getMapZoom() {
@@ -902,13 +773,7 @@ public final class Settings {
}
public static void setMapZoom(final int mapZoomLevel) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putInt(KEY_LAST_MAP_ZOOM, mapZoomLevel);
- }
- });
+ putInt(KEY_LAST_MAP_ZOOM, mapZoomLevel);
}
public static GeoPointImpl getMapCenter() {
@@ -918,14 +783,8 @@ public final class Settings {
}
public static void setMapCenter(final GeoPointImpl mapViewCenter) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putInt(KEY_LAST_MAP_LAT, mapViewCenter.getLatitudeE6());
- edit.putInt(KEY_LAST_MAP_LON, mapViewCenter.getLongitudeE6());
- }
- });
+ putInt(KEY_LAST_MAP_LAT, mapViewCenter.getLatitudeE6());
+ putInt(KEY_LAST_MAP_LON, mapViewCenter.getLongitudeE6());
}
public static MapSource getMapSource() {
@@ -956,7 +815,10 @@ public final class Settings {
* @return
*/
private static int getConvertedMapId() {
- final int id = sharedPrefs.getInt(KEY_MAP_SOURCE, 0);
+ // what the heck is happening here?? hashCodes of Strings?
+ // why not strings?
+ final int id = Integer.parseInt(sharedPrefs.getString(KEY_MAP_SOURCE,
+ String.valueOf(MAP_SOURCE_DEFAULT)));
switch (id) {
case GOOGLEMAP_BASEID + MAP:
return GoogleMapProvider.GOOGLE_MAP_ID.hashCode();
@@ -983,33 +845,20 @@ public final class Settings {
if (!MapProviderFactory.isSameActivity(getMapSource(), newMapSource)) {
mapProvider = null;
}
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putInt(KEY_MAP_SOURCE, newMapSource.getNumericalId());
- }
- });
+ putString(KEY_MAP_SOURCE, String.valueOf(newMapSource.getNumericalId()));
if (newMapSource instanceof OfflineMapSource) {
setMapFile(((OfflineMapSource) newMapSource).getFileName());
}
}
public static void setAnyCoordinates(final Geopoint coords) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- if (null != coords) {
- edit.putFloat(KEY_ANYLATITUDE, (float) coords.getLatitude());
- edit.putFloat(KEY_ANYLONGITUDE, (float) coords.getLongitude());
- } else {
- edit.remove(KEY_ANYLATITUDE);
- edit.remove(KEY_ANYLONGITUDE);
- }
- }
- });
-
+ if (null != coords) {
+ putFloat(KEY_ANYLATITUDE, (float) coords.getLatitude());
+ putFloat(KEY_ANYLONGITUDE, (float) coords.getLongitude());
+ } else {
+ remove(KEY_ANYLATITUDE);
+ remove(KEY_ANYLONGITUDE);
+ }
}
public static Geopoint getAnyCoordinates() {
@@ -1026,41 +875,16 @@ public final class Settings {
}
public static void setUseCompass(final boolean useCompass) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_USE_COMPASS, useCompass);
- }
- });
- }
-
- public static boolean isHelpShown() {
- return sharedPrefs.getBoolean(KEY_HELP_SHOWN, false);
- }
-
- public static void setHelpShown() {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_HELP_SHOWN, true);
- }
- });
+ putBoolean(KEY_USE_COMPASS, useCompass);
}
public static boolean isLightSkin() {
return sharedPrefs.getBoolean(KEY_SKIN, false);
}
+ // TODO: remove with SettingsActivity
public static void setLightSkin(final boolean lightSkin) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_SKIN, lightSkin);
- }
- });
+ putBoolean(KEY_SKIN, lightSkin);
}
public static String getKeyConsumerPublic() {
@@ -1071,18 +895,13 @@ public final class Settings {
return keyConsumerSecret;
}
- public static int getAltCorrection() {
+ public static int getAltitudeCorrection() {
return sharedPrefs.getInt(KEY_ALTITUDE_CORRECTION, 0);
}
- public static boolean setAltCorrection(final int altitude) {
- return editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putInt(KEY_ALTITUDE_CORRECTION, altitude);
- }
- });
+ // TODO: remove with SettingsActivity
+ public static boolean setAltitudeCorrection(final int altitude) {
+ return putInt(KEY_ALTITUDE_CORRECTION, altitude);
}
public static String getWebDeviceCode() {
@@ -1090,11 +909,12 @@ public final class Settings {
}
public static String getWebDeviceName() {
- return sharedPrefs.getString(KEY_WEBDEVICE_NAME, null);
+ return sharedPrefs.getString(KEY_WEBDEVICE_NAME, android.os.Build.MODEL);
}
/**
- * @return The cache type used for filtering or ALL if no filter is active. Returns never null
+ * @return The cache type used for filtering or ALL if no filter is active.
+ * Returns never null
*/
public static CacheType getCacheType() {
return CacheType.getById(sharedPrefs.getString(KEY_CACHE_TYPE, CacheType.ALL.id));
@@ -1102,22 +922,14 @@ public final class Settings {
/**
* The Threshold for the showing of child waypoints
- *
- * @return
*/
-
public static int getWayPointsThreshold() {
- return sharedPrefs.getInt(KEY_SHOW_WAYPOINTS_THRESHOLD, 0);
+ return sharedPrefs.getInt(KEY_SHOW_WAYPOINTS_THRESHOLD, SHOW_WP_THRESHOLD_DEFAULT);
}
+ // TODO: remove with SettingsActivity
public static void setShowWaypointsThreshold(final int threshold) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putInt(KEY_SHOW_WAYPOINTS_THRESHOLD, threshold);
- }
- });
+ putInt(KEY_SHOW_WAYPOINTS_THRESHOLD, threshold);
}
public static boolean isUseTwitter() {
@@ -1125,17 +937,12 @@ public final class Settings {
}
public static void setUseTwitter(final boolean useTwitter) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_USE_TWITTER, useTwitter);
- }
- });
+ putBoolean(KEY_USE_TWITTER, useTwitter);
}
public static boolean isTwitterLoginValid() {
- return !StringUtils.isBlank(getTokenPublic()) && !StringUtils.isBlank(getTokenSecret());
+ return !StringUtils.isBlank(getTokenPublic())
+ && !StringUtils.isBlank(getTokenSecret());
}
public static String getTokenPublic() {
@@ -1147,34 +954,21 @@ public final class Settings {
}
- public static int getVersion() {
- return sharedPrefs.getInt(KEY_VERSION, 0);
- }
-
- public static void setTwitterTokens(final String tokenPublic, final String tokenSecret, boolean enableTwitter) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putString(KEY_TWITTER_TOKEN_PUBLIC, tokenPublic);
- edit.putString(KEY_TWITTER_TOKEN_SECRET, tokenSecret);
- if (tokenPublic != null) {
- edit.remove(KEY_TEMP_TWITTER_TOKEN_PUBLIC);
- edit.remove(KEY_TEMP_TWITTER_TOKEN_SECRET);
- }
- }
- });
+ public static void setTwitterTokens(final String tokenPublic,
+ final String tokenSecret, boolean enableTwitter) {
+ putString(KEY_TWITTER_TOKEN_PUBLIC, tokenPublic);
+ putString(KEY_TWITTER_TOKEN_SECRET, tokenSecret);
+ if (tokenPublic != null) {
+ remove(KEY_TEMP_TWITTER_TOKEN_PUBLIC);
+ remove(KEY_TEMP_TWITTER_TOKEN_SECRET);
+ }
setUseTwitter(enableTwitter);
}
- public static void setTwitterTempTokens(final String tokenPublic, final String tokenSecret) {
- editSharedSettings(new PrefRunnable() {
- @Override
- public void edit(Editor edit) {
- edit.putString(KEY_TEMP_TWITTER_TOKEN_PUBLIC, tokenPublic);
- edit.putString(KEY_TEMP_TWITTER_TOKEN_SECRET, tokenSecret);
- }
- });
+ public static void setTwitterTempTokens(final String tokenPublic,
+ final String tokenSecret) {
+ putString(KEY_TEMP_TWITTER_TOKEN_PUBLIC, tokenPublic);
+ putString(KEY_TEMP_TWITTER_TOKEN_SECRET, tokenSecret);
}
public static ImmutablePair<String, String> getTempToken() {
@@ -1183,28 +977,21 @@ public final class Settings {
return new ImmutablePair<String, String>(tokenPublic, tokenSecret);
}
- public static void setVersion(final int version) {
- editSharedSettings(new PrefRunnable() {
+ public static int getVersion() {
+ return sharedPrefs.getInt(KEY_VERSION, 0);
+ }
- @Override
- public void edit(Editor edit) {
- edit.putInt(KEY_VERSION, version);
- }
- });
+ public static void setVersion(final int version) {
+ putInt(KEY_VERSION, version);
}
public static boolean isOpenLastDetailsPage() {
return sharedPrefs.getBoolean(KEY_OPEN_LAST_DETAILS_PAGE, false);
}
+ // TODO: remove with SettingsActivity
public static void setOpenLastDetailsPage(final boolean openLastPage) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_OPEN_LAST_DETAILS_PAGE, openLastPage);
- }
- });
+ putBoolean(KEY_OPEN_LAST_DETAILS_PAGE, openLastPage);
}
public static int getLastDetailsPage() {
@@ -1212,41 +999,29 @@ public final class Settings {
}
public static void setLastDetailsPage(final int index) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putInt(KEY_LAST_DETAILS_PAGE, index);
- }
- });
+ putInt(KEY_LAST_DETAILS_PAGE, index);
}
public static int getDefaultNavigationTool() {
- return sharedPrefs.getInt(KEY_DEFAULT_NAVIGATION_TOOL, NavigationAppsEnum.COMPASS.id);
+ return Integer.parseInt(sharedPrefs.getString(
+ KEY_DEFAULT_NAVIGATION_TOOL,
+ String.valueOf(NavigationAppsEnum.COMPASS.id)));
}
public static void setDefaultNavigationTool(final int defaultNavigationTool) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putInt(KEY_DEFAULT_NAVIGATION_TOOL, defaultNavigationTool);
- }
- });
+ putString(KEY_DEFAULT_NAVIGATION_TOOL,
+ String.valueOf(defaultNavigationTool));
}
public static int getDefaultNavigationTool2() {
- return sharedPrefs.getInt(KEY_DEFAULT_NAVIGATION_TOOL_2, NavigationAppsEnum.INTERNAL_MAP.id);
+ return Integer.parseInt(sharedPrefs.getString(
+ KEY_DEFAULT_NAVIGATION_TOOL_2,
+ String.valueOf(NavigationAppsEnum.INTERNAL_MAP.id)));
}
public static void setDefaultNavigationTool2(final int defaultNavigationTool) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putInt(KEY_DEFAULT_NAVIGATION_TOOL_2, defaultNavigationTool);
- }
- });
+ putString(KEY_DEFAULT_NAVIGATION_TOOL_2,
+ String.valueOf(defaultNavigationTool));
}
public static Strategy getLiveMapStrategy() {
@@ -1254,28 +1029,17 @@ public final class Settings {
}
public static void setLiveMapStrategy(final Strategy strategy) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putInt(KEY_LIVE_MAP_STRATEGY, strategy.id);
- }
- });
+ putInt(KEY_LIVE_MAP_STRATEGY, strategy.id);
}
public static boolean isDebug() {
return Log.isDebug();
}
+ // TODO: remove with SettingsActivity
public static void setDebug(final boolean debug) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_DEBUG, debug);
- }
- });
- Log.setDebugUnsaved(debug);
+ putBoolean(KEY_DEBUG, debug);
+ Log.setDebug(debug);
}
public static boolean getHideLiveMapHint() {
@@ -1283,13 +1047,7 @@ public final class Settings {
}
public static void setHideLiveHint(final boolean hide) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_HIDE_LIVE_MAP_HINT, hide);
- }
- });
+ putBoolean(KEY_HIDE_LIVE_MAP_HINT, hide);
}
public static int getLiveMapHintShowCount() {
@@ -1297,13 +1055,7 @@ public final class Settings {
}
public static void setLiveMapHintShowCount(final int showCount) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putInt(KEY_LIVE_MAP_HINT_SHOW_COUNT, showCount);
- }
- });
+ putInt(KEY_LIVE_MAP_HINT_SHOW_COUNT, showCount);
}
public static boolean isDbOnSDCard() {
@@ -1311,38 +1063,27 @@ public final class Settings {
}
public static void setDbOnSDCard(final boolean dbOnSDCard) {
- editSharedSettings(new PrefRunnable() {
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_DB_ON_SDCARD, dbOnSDCard);
- }
- });
+ putBoolean(KEY_DB_ON_SDCARD, dbOnSDCard);
}
public static String getGpxExportDir() {
- return sharedPrefs.getString(KEY_GPX_EXPORT_DIR, Environment.getExternalStorageDirectory().getPath() + "/gpx");
+ return sharedPrefs.getString(KEY_GPX_EXPORT_DIR,
+ Environment.getExternalStorageDirectory().getPath() + "/gpx");
}
+ // TODO: remove with SettingsActivity
public static void setGpxExportDir(final String gpxExportDir) {
- editSharedSettings(new PrefRunnable() {
- @Override
- public void edit(Editor edit) {
- edit.putString(KEY_GPX_EXPORT_DIR, gpxExportDir);
- }
- });
+ putString(KEY_GPX_EXPORT_DIR, gpxExportDir);
}
public static String getGpxImportDir() {
- return sharedPrefs.getString(KEY_GPX_IMPORT_DIR, Environment.getExternalStorageDirectory().getPath() + "/gpx");
+ return sharedPrefs.getString(KEY_GPX_IMPORT_DIR,
+ Environment.getExternalStorageDirectory().getPath() + "/gpx");
}
+ // TODO: remove with SettingsActivity
public static void setGpxImportDir(final String gpxImportDir) {
- editSharedSettings(new PrefRunnable() {
- @Override
- public void edit(Editor edit) {
- edit.putString(KEY_GPX_IMPORT_DIR, gpxImportDir);
- }
- });
+ putString(KEY_GPX_IMPORT_DIR, gpxImportDir);
}
public static boolean getShareAfterExport() {
@@ -1350,12 +1091,7 @@ public final class Settings {
}
public static void setShareAfterExport(final boolean shareAfterExport) {
- editSharedSettings(new PrefRunnable() {
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_SHARE_AFTER_EXPORT, shareAfterExport);
- }
- });
+ putBoolean(KEY_SHARE_AFTER_EXPORT, shareAfterExport);
}
public static int getTrackableAction() {
@@ -1363,27 +1099,16 @@ public final class Settings {
}
public static void setTrackableAction(final int trackableAction) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putInt(KEY_LAST_TRACKABLE_ACTION, trackableAction);
- }
- });
+ putInt(KEY_LAST_TRACKABLE_ACTION, trackableAction);
}
public static String getCustomRenderThemeBaseFolder() {
return sharedPrefs.getString(KEY_RENDER_THEME_BASE_FOLDER, "");
}
- public static boolean setCustomRenderThemeBaseFolder(final String customRenderThemeBaseFolder) {
- return editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putString(KEY_RENDER_THEME_BASE_FOLDER, customRenderThemeBaseFolder);
- }
- });
+ // TODO: remove with SettingsActivity
+ public static boolean setCustomRenderThemeBaseFolder(final String folder) {
+ return putString(KEY_RENDER_THEME_BASE_FOLDER, folder);
}
public static String getCustomRenderThemeFilePath() {
@@ -1391,34 +1116,22 @@ public final class Settings {
}
public static void setCustomRenderThemeFile(final String customRenderThemeFile) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putString(KEY_RENDER_THEME_FILE_PATH, customRenderThemeFile);
- }
- });
+ putString(KEY_RENDER_THEME_FILE_PATH, customRenderThemeFile);
}
public static File[] getMapThemeFiles() {
-
File directory = new File(Settings.getCustomRenderThemeBaseFolder());
-
List<File> result = new ArrayList<File>();
-
FileUtils.listDir(result, directory, new ExtensionsBasedFileSelector(new String[] { "xml" }), null);
return result.toArray(new File[result.size()]);
}
private static class ExtensionsBasedFileSelector extends FileSelector {
-
private final String[] extensions;
-
public ExtensionsBasedFileSelector(String[] extensions) {
this.extensions = extensions;
}
-
@Override
public boolean isSelected(File file) {
String filename = file.getName();
@@ -1429,7 +1142,6 @@ public final class Settings {
}
return false;
}
-
@Override
public boolean shouldEnd() {
return false;
@@ -1440,28 +1152,18 @@ public final class Settings {
return sharedPrefs.getBoolean(KEY_PLAIN_LOGS, false);
}
+ // TODO: remove with SettingsActivity
public static void setPlainLogs(final boolean plainLogs) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_PLAIN_LOGS, plainLogs);
- }
- });
+ putBoolean(KEY_PLAIN_LOGS, plainLogs);
}
public static boolean getUseNativeUa() {
return sharedPrefs.getBoolean(KEY_NATIVE_UA, false);
}
+ // TODO: remove with SettingsActivity
public static void setUseNativeUa(final boolean useNativeUa) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putBoolean(KEY_NATIVE_UA, useNativeUa);
- }
- });
+ putBoolean(KEY_NATIVE_UA, useNativeUa);
}
public static String getCacheTwitterMessage() {
@@ -1474,21 +1176,11 @@ public final class Settings {
return "I touched [NAME] ([URL])!";
}
- public static void setCacheTwitterMessage(final String message) {
- cacheTwitterMessage = message;
- }
-
public static int getLogImageScale() {
return sharedPrefs.getInt(KEY_LOG_IMAGE_SCALE, -1);
}
public static void setLogImageScale(final int scale) {
- editSharedSettings(new PrefRunnable() {
-
- @Override
- public void edit(Editor edit) {
- edit.putInt(KEY_LOG_IMAGE_SCALE, scale);
- }
- });
+ putInt(KEY_LOG_IMAGE_SCALE, scale);
}
}
diff --git a/main/src/cgeo/geocaching/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java
index 872d5ee..e8ce1ff 100644
--- a/main/src/cgeo/geocaching/SettingsActivity.java
+++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java
@@ -1,6 +1,11 @@
-package cgeo.geocaching;
+package cgeo.geocaching.settings;
+import cgeo.geocaching.Intents;
+import cgeo.geocaching.R;
+import cgeo.geocaching.SelectMapfileActivity;
+import cgeo.geocaching.cgData;
import cgeo.geocaching.activity.AbstractActivity;
+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;
@@ -206,7 +211,7 @@ public class SettingsActivity extends AbstractActivity {
private boolean insertSignatureTemplate(final LogTemplate template) {
EditText sig = (EditText) findViewById(R.id.signature);
String insertText = "[" + template.getTemplateString() + "]";
- insertAtPosition(sig, insertText, true);
+ ActivityMixin.insertAtPosition(sig, insertText, true);
return true;
}
@@ -222,7 +227,7 @@ public class SettingsActivity extends AbstractActivity {
Settings.setGCConnectorActive(gcCheck.isChecked());
}
});
- final ImmutablePair<String, String> login = Settings.getLogin();
+ final ImmutablePair<String, String> login = Settings.getGcLogin();
if (login != null) {
((EditText) findViewById(R.id.username)).setText(login.left);
((EditText) findViewById(R.id.password)).setText(login.right);
@@ -499,12 +504,12 @@ public class SettingsActivity extends AbstractActivity {
});
final CheckBox unitsButton = (CheckBox) findViewById(R.id.units);
- unitsButton.setChecked(!Settings.isUseMetricUnits());
+ unitsButton.setChecked(Settings.isUseImperialUnits());
unitsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- Settings.setUseMetricUnits(!unitsButton.isChecked());
+ Settings.setUseImperialUnits(unitsButton.isChecked());
}
});
@@ -555,17 +560,12 @@ public class SettingsActivity extends AbstractActivity {
// Altitude settings
EditText altitudeEdit = (EditText) findViewById(R.id.altitude);
- altitudeEdit.setText(String.valueOf(Settings.getAltCorrection()));
+ altitudeEdit.setText(String.valueOf(Settings.getAltitudeCorrection()));
//Send2cgeo settings
String webDeviceName = Settings.getWebDeviceName();
- if (StringUtils.isNotBlank(webDeviceName)) {
- ((EditText) findViewById(R.id.webDeviceName)).setText(webDeviceName);
- } else {
- String s = android.os.Build.MODEL;
- ((EditText) findViewById(R.id.webDeviceName)).setText(s);
- }
+ ((EditText) findViewById(R.id.webDeviceName)).setText(webDeviceName);
Button webAuth = (Button) findViewById(R.id.sendToCgeo_register);
webAuth.setOnClickListener(new WebAuthListener());
@@ -751,7 +751,9 @@ public class SettingsActivity extends AbstractActivity {
mapSourceNames.add(mapSource.getName());
}
Spinner mapSourceSelector = (Spinner) findViewById(R.id.mapsource);
- ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, mapSourceNames.toArray(new String[mapSourceNames.size()]));
+ ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this,
+ android.R.layout.simple_spinner_item,
+ mapSourceNames.toArray(new String[mapSourceNames.size()]));
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mapSourceSelector.setAdapter(adapter);
final int index = MapProviderFactory.getMapSources().indexOf(Settings.getMapSource());
@@ -842,15 +844,15 @@ public class SettingsActivity extends AbstractActivity {
int altitudeNewInt = parseNumber(altitudeNew, 0);
TextView field = (TextView) findViewById(R.id.showwaypointsthreshold);
- final int waypointThreshold = parseNumber(field.getText().toString(), 5);
+ Settings.setShowWaypointsThreshold(parseNumber(field.getText().toString(),
+ Settings.SHOW_WP_THRESHOLD_DEFAULT));
final boolean status1 = Settings.setLogin(usernameNew, passwordNew);
final boolean status2 = Settings.setGCvoteLogin(passvoteNew);
final boolean status3 = Settings.setSignature(signatureNew);
- final boolean status4 = Settings.setAltCorrection(altitudeNewInt);
+ final boolean status4 = Settings.setAltitudeCorrection(altitudeNewInt);
final boolean status5 = Settings.setMapFileDirectory(mapDirectoryNew);
final boolean status6 = Settings.setCustomRenderThemeBaseFolder(themesDirectoryNew);
- Settings.setShowWaypointsThreshold(waypointThreshold);
String importNew = StringUtils.trimToEmpty(((EditText) findViewById(R.id.gpx_importdir)).getText().toString());
String exportNew = StringUtils.trimToEmpty(((EditText) findViewById(R.id.gpx_exportdir)).getText().toString());
@@ -904,7 +906,9 @@ public class SettingsActivity extends AbstractActivity {
return;
}
- loginDialog = ProgressDialog.show(SettingsActivity.this, res.getString(R.string.init_login_popup), res.getString(R.string.init_login_popup_working), true);
+ loginDialog = ProgressDialog.show(SettingsActivity.this,
+ res.getString(R.string.init_login_popup),
+ res.getString(R.string.init_login_popup_working), true);
loginDialog.setCancelable(false);
Settings.setLogin(username, password);
diff --git a/main/src/cgeo/geocaching/settings/TextPreference.java b/main/src/cgeo/geocaching/settings/TextPreference.java
new file mode 100644
index 0000000..bcd03ff
--- /dev/null
+++ b/main/src/cgeo/geocaching/settings/TextPreference.java
@@ -0,0 +1,86 @@
+package cgeo.geocaching.settings;
+
+import cgeo.geocaching.R;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.preference.Preference;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+/**
+ * Preference to simply show a text message.
+ * <p>
+ * Links are not shown - I tried everything (koem)
+ * <p>
+ * example: <cgeo.geocaching.settings.TextPreference android:text="@string/legal_note"
+ * android:layout="@string/text_preference_default_layout" />
+ */
+public class TextPreference extends Preference {
+
+ private String text;
+ private TextView summaryView;
+ private CharSequence summaryText;
+
+ public TextPreference(Context context) {
+ super(context);
+ }
+
+ public TextPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ processAttributes(context, attrs, 0);
+ }
+
+ public TextPreference(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ processAttributes(context, attrs, defStyle);
+ }
+
+ private void processAttributes(Context context, AttributeSet attrs, int defStyle) {
+ if (attrs == null) {
+ return;
+ }
+
+ TypedArray types = context.obtainStyledAttributes(attrs, new int[] {
+ android.R.attr.text }, defStyle, 0);
+ this.text = types.getString(0);
+ types.recycle();
+ }
+
+ @Override
+ protected View onCreateView(ViewGroup parent) {
+ this.setSelectable(false);
+
+ View v = super.onCreateView(parent);
+
+ TextView text = (TextView) v.findViewById(R.id.textPreferenceText);
+ text.setText(this.text);
+
+ summaryView = (TextView) v.findViewById(R.id.textPreferenceSummary);
+ setSummary(null); // show saved summary text
+
+ return v;
+ }
+
+ @Override
+ public void setSummary(CharSequence summaryText) {
+ // the layout hasn't been inflated yet, save the summaryText for later use
+ if (this.summaryView == null) {
+ this.summaryText = summaryText;
+ return;
+ }
+
+ // if summaryText is null, take it from the previous saved summary
+ if (summaryText == null) {
+ if (this.summaryText == null) {
+ return;
+ }
+ this.summaryView.setText(this.summaryText);
+ } else {
+ this.summaryView.setText(summaryText);
+ }
+ this.summaryView.setVisibility(View.VISIBLE);
+ }
+}
diff --git a/main/src/cgeo/geocaching/settings/WpThresholdPreference.java b/main/src/cgeo/geocaching/settings/WpThresholdPreference.java
new file mode 100644
index 0000000..867714f
--- /dev/null
+++ b/main/src/cgeo/geocaching/settings/WpThresholdPreference.java
@@ -0,0 +1,73 @@
+package cgeo.geocaching.settings;
+
+import cgeo.geocaching.R;
+import cgeo.geocaching.settings.Settings;
+
+import android.content.Context;
+import android.preference.Preference;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.TextView;
+
+public class WpThresholdPreference extends Preference {
+
+ TextView valueView;
+
+ public WpThresholdPreference(Context context) {
+ super(context);
+ init();
+ }
+
+ public WpThresholdPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init();
+ }
+
+ public WpThresholdPreference(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ init();
+ }
+
+ private void init() {
+ setPersistent(false);
+ }
+
+ @Override
+ protected View onCreateView(ViewGroup parent) {
+ View v = super.onCreateView(parent);
+
+ // get views
+ SeekBar seekBar = (SeekBar) v.findViewById(R.id.wp_threshold_seekbar);
+ valueView = (TextView) v.findViewById(R.id.wp_threshold_value_view);
+
+ // init seekbar
+ seekBar.setMax(Settings.SHOW_WP_THRESHOLD_MAX);
+
+ // set initial value
+ int threshold = Settings.getWayPointsThreshold();
+ valueView.setText(String.valueOf(threshold));
+ seekBar.setProgress(threshold);
+
+ seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+ if (fromUser) {
+ valueView.setText(String.valueOf(progress));
+ }
+ }
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {
+ }
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {
+ Settings.setShowWaypointsThreshold(seekBar.getProgress());
+ }
+ });
+
+ return v;
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/speech/SpeechService.java b/main/src/cgeo/geocaching/speech/SpeechService.java
index 7bc948d..eac44ff 100644
--- a/main/src/cgeo/geocaching/speech/SpeechService.java
+++ b/main/src/cgeo/geocaching/speech/SpeechService.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.speech;
import cgeo.geocaching.DirectionProvider;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.utils.GeoDirHandler;
import cgeo.geocaching.utils.Log;
diff --git a/main/src/cgeo/geocaching/speech/TextFactory.java b/main/src/cgeo/geocaching/speech/TextFactory.java
index e367bb1..81a74fb 100644
--- a/main/src/cgeo/geocaching/speech/TextFactory.java
+++ b/main/src/cgeo/geocaching/speech/TextFactory.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.speech;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.IConversion;
@@ -24,17 +24,17 @@ public class TextFactory {
private static String getDistance(Geopoint position, Geopoint target) {
final float kilometers = position.distanceTo(target);
- if (Settings.isUseMetricUnits()) {
- return getDistance(kilometers, (int) (kilometers * 1000.0),
- 5.0f, 1.0f, 50,
- R.plurals.tts_kilometers, R.string.tts_one_kilometer,
- R.plurals.tts_meters, R.string.tts_one_meter);
+ if (Settings.isUseImperialUnits()) {
+ return getDistance(kilometers / IConversion.MILES_TO_KILOMETER,
+ (int) (kilometers * 1000.0 * IConversion.METERS_TO_FEET),
+ 3.0f, 0.2f, 300,
+ R.plurals.tts_miles, R.string.tts_one_mile,
+ R.plurals.tts_feet, R.string.tts_one_foot);
}
- return getDistance(kilometers / IConversion.MILES_TO_KILOMETER,
- (int) (kilometers * 1000.0 * IConversion.METERS_TO_FEET),
- 3.0f, 0.2f, 300,
- R.plurals.tts_miles, R.string.tts_one_mile,
- R.plurals.tts_feet, R.string.tts_one_foot);
+ return getDistance(kilometers, (int) (kilometers * 1000.0),
+ 5.0f, 1.0f, 50,
+ R.plurals.tts_kilometers, R.string.tts_one_kilometer,
+ R.plurals.tts_meters, R.string.tts_one_meter);
}
private static String getDistance(float farDistance, int nearDistance,
diff --git a/main/src/cgeo/geocaching/twitter/Twitter.java b/main/src/cgeo/geocaching/twitter/Twitter.java
index 3f1f749..a6ce7d2 100644
--- a/main/src/cgeo/geocaching/twitter/Twitter.java
+++ b/main/src/cgeo/geocaching/twitter/Twitter.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.twitter;
import cgeo.geocaching.Geocache;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.Trackable;
import cgeo.geocaching.cgData;
import cgeo.geocaching.cgeoapplication;
@@ -60,10 +60,7 @@ public final class Twitter {
}
public static void postTweetCache(String geocode) {
- if (!Settings.isUseTwitter()) {
- return;
- }
- if (!Settings.isTwitterLoginValid()) {
+ if (!Settings.isUseTwitter() || !Settings.isTwitterLoginValid()) {
return;
}
final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
diff --git a/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java b/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java
index 7146a62..6b185267 100644
--- a/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java
+++ b/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.twitter;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.network.OAuthAuthorizationActivity;
import org.apache.commons.lang3.tuple.ImmutablePair;
diff --git a/main/src/cgeo/geocaching/ui/CacheListAdapter.java b/main/src/cgeo/geocaching/ui/CacheListAdapter.java
index 1ef4561..3179857 100644
--- a/main/src/cgeo/geocaching/ui/CacheListAdapter.java
+++ b/main/src/cgeo/geocaching/ui/CacheListAdapter.java
@@ -6,7 +6,7 @@ import cgeo.geocaching.CacheDetailActivity;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.IGeoData;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.enumerations.CacheListType;
import cgeo.geocaching.enumerations.CacheType;
diff --git a/main/src/cgeo/geocaching/ui/CompassMiniView.java b/main/src/cgeo/geocaching/ui/CompassMiniView.java
index da8f69e..92280dc 100644
--- a/main/src/cgeo/geocaching/ui/CompassMiniView.java
+++ b/main/src/cgeo/geocaching/ui/CompassMiniView.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.ui;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.utils.AngleUtils;
diff --git a/main/src/cgeo/geocaching/ui/LoggingUI.java b/main/src/cgeo/geocaching/ui/LoggingUI.java
index ac74dd3..0ee724a 100644
--- a/main/src/cgeo/geocaching/ui/LoggingUI.java
+++ b/main/src/cgeo/geocaching/ui/LoggingUI.java
@@ -3,7 +3,7 @@ package cgeo.geocaching.ui;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.LogEntry;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.cgData;
import cgeo.geocaching.activity.IAbstractActivity;
import cgeo.geocaching.enumerations.LogType;
diff --git a/main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java b/main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java
index 60116f9..959cb14 100644
--- a/main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java
+++ b/main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java
@@ -3,8 +3,8 @@ package cgeo.geocaching.ui.dialog;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.IGeoData;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
-import cgeo.geocaching.Settings.coordInputFormatEnum;
+import cgeo.geocaching.settings.Settings;
+import cgeo.geocaching.settings.Settings.coordInputFormatEnum;
import cgeo.geocaching.activity.AbstractActivity;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.compatibility.Compatibility;
diff --git a/main/src/cgeo/geocaching/ui/dialog/LiveMapInfoDialogBuilder.java b/main/src/cgeo/geocaching/ui/dialog/LiveMapInfoDialogBuilder.java
index 862b1a0..2c4f38d 100644
--- a/main/src/cgeo/geocaching/ui/dialog/LiveMapInfoDialogBuilder.java
+++ b/main/src/cgeo/geocaching/ui/dialog/LiveMapInfoDialogBuilder.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.ui.dialog;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.cgeoapplication;
import android.app.Activity;
diff --git a/main/src/cgeo/geocaching/utils/GeoDirHandler.java b/main/src/cgeo/geocaching/utils/GeoDirHandler.java
index 78455c4..98a2287 100644
--- a/main/src/cgeo/geocaching/utils/GeoDirHandler.java
+++ b/main/src/cgeo/geocaching/utils/GeoDirHandler.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.utils;
import cgeo.geocaching.IGeoData;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.cgeoapplication;
import android.os.Handler;
diff --git a/main/src/cgeo/geocaching/utils/Log.java b/main/src/cgeo/geocaching/utils/Log.java
index f912ddd..f7f33d9 100644
--- a/main/src/cgeo/geocaching/utils/Log.java
+++ b/main/src/cgeo/geocaching/utils/Log.java
@@ -23,11 +23,11 @@ final public class Log {
}
/**
- * make a non persisted copy of the debug flag from the settings for performance reasons
- *
+ * save a copy of the debug flag from the settings for performance reasons
+ *
* @param isDebug
*/
- public static void setDebugUnsaved(boolean isDebug) {
+ public static void setDebug(boolean isDebug) {
Log.isDebug = isDebug;
}
diff --git a/main/src/cgeo/geocaching/utils/LogTemplateProvider.java b/main/src/cgeo/geocaching/utils/LogTemplateProvider.java
index 2576e64..6d5f130 100644
--- a/main/src/cgeo/geocaching/utils/LogTemplateProvider.java
+++ b/main/src/cgeo/geocaching/utils/LogTemplateProvider.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.utils;
import cgeo.geocaching.R;
-import cgeo.geocaching.Settings;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.Trackable;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.connector.gc.GCConstants;