aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md15
-rw-r--r--main/.classpath1
-rw-r--r--main/.settings/org.eclipse.jdt.core.prefs24
-rw-r--r--main/AndroidManifest.xml46
-rw-r--r--main/compile-libs/org.eclipse.jdt.annotation_1.1.0.v20130513-1648.jarbin0 -> 14613 bytes
-rw-r--r--main/libs/commons-collections-3.2.1.jar.properties1
-rw-r--r--main/libs/commons-lang3-3.1.jar.properties1
-rw-r--r--main/libs/src/commons-collections-3.2.1-src.zipbin0 -> 1237027 bytes
-rw-r--r--main/libs/src/commons-lang3-3.1-src.zipbin0 -> 880646 bytes
-rw-r--r--main/proguard-project.txt3
-rwxr-xr-xmain/project/localization/findmissingtranslations.sh2
-rw-r--r--main/project/localization/funcs.sh2
-rw-r--r--main/res/layout/authorization_activity.xml24
-rw-r--r--main/res/layout/cachedetail_details_page.xml2
-rw-r--r--main/res/layout/logs_item.xml2
-rw-r--r--main/res/values-cs/strings.xml8
-rw-r--r--main/res/values-da/strings.xml7
-rw-r--r--main/res/values-de/strings.xml18
-rw-r--r--main/res/values-es/strings.xml7
-rw-r--r--main/res/values-fr/strings.xml34
-rw-r--r--main/res/values-hu/strings.xml8
-rw-r--r--main/res/values-it/strings.xml18
-rw-r--r--main/res/values-ja/strings.xml18
-rw-r--r--main/res/values-nb/strings.xml7
-rw-r--r--main/res/values-nl/strings.xml8
-rw-r--r--main/res/values-pl/strings.xml18
-rw-r--r--main/res/values-pt/strings.xml34
-rw-r--r--main/res/values-sk/strings.xml8
-rw-r--r--main/res/values-sl/strings.xml20
-rw-r--r--main/res/values-sv/strings.xml23
-rw-r--r--main/res/values/preference_keys.xml6
-rw-r--r--main/res/values/strings.xml34
-rw-r--r--main/res/xml/preferences.xml821
-rw-r--r--main/src/cgeo/geocaching/AbstractPopupActivity.java8
-rw-r--r--main/src/cgeo/geocaching/AddressListActivity.java2
-rw-r--r--main/src/cgeo/geocaching/CacheCache.java2
-rw-r--r--main/src/cgeo/geocaching/CacheDetailActivity.java39
-rw-r--r--main/src/cgeo/geocaching/CacheListActivity.java (renamed from main/src/cgeo/geocaching/cgeocaches.java)99
-rw-r--r--main/src/cgeo/geocaching/CachePopup.java1
-rw-r--r--main/src/cgeo/geocaching/CgeoApplication.java (renamed from main/src/cgeo/geocaching/cgeoapplication.java)18
-rw-r--r--main/src/cgeo/geocaching/CompassActivity.java4
-rw-r--r--main/src/cgeo/geocaching/DataStore.java (renamed from main/src/cgeo/geocaching/cgData.java)95
-rw-r--r--main/src/cgeo/geocaching/EditWaypointActivity.java18
-rw-r--r--main/src/cgeo/geocaching/Geocache.java91
-rw-r--r--main/src/cgeo/geocaching/GpxFileListActivity.java1
-rw-r--r--main/src/cgeo/geocaching/ImageSelectActivity.java5
-rw-r--r--main/src/cgeo/geocaching/ImagesActivity.java2
-rw-r--r--main/src/cgeo/geocaching/LogCacheActivity.java46
-rw-r--r--main/src/cgeo/geocaching/LogEntry.java7
-rw-r--r--main/src/cgeo/geocaching/LogTrackableActivity.java2
-rw-r--r--main/src/cgeo/geocaching/MainActivity.java28
-rw-r--r--main/src/cgeo/geocaching/NavigateAnyPointActivity.java14
-rw-r--r--main/src/cgeo/geocaching/SearchActivity.java16
-rw-r--r--main/src/cgeo/geocaching/SearchResult.java10
-rw-r--r--main/src/cgeo/geocaching/StaticMapsActivity.java4
-rw-r--r--main/src/cgeo/geocaching/StaticMapsProvider.java33
-rw-r--r--main/src/cgeo/geocaching/StatusFragment.java4
-rw-r--r--main/src/cgeo/geocaching/TrackableActivity.java2
-rw-r--r--main/src/cgeo/geocaching/UsefulAppsActivity.java2
-rw-r--r--main/src/cgeo/geocaching/Waypoint.java2
-rw-r--r--main/src/cgeo/geocaching/WaypointPopup.java2
-rw-r--r--main/src/cgeo/geocaching/activity/AbstractActivity.java6
-rw-r--r--main/src/cgeo/geocaching/activity/AbstractListActivity.java9
-rw-r--r--main/src/cgeo/geocaching/apps/AbstractApp.java4
-rw-r--r--main/src/cgeo/geocaching/apps/AbstractLocusApp.java4
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/AbstractPointNavigationApp.java16
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java4
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsApp.java2
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsDirectionApp.java4
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java15
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/StreetviewApp.java4
-rw-r--r--main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java10
-rw-r--r--main/src/cgeo/geocaching/compatibility/AndroidLevel13.java4
-rw-r--r--main/src/cgeo/geocaching/compatibility/AndroidLevel13Emulation.java4
-rw-r--r--main/src/cgeo/geocaching/connector/AbstractConnector.java5
-rw-r--r--main/src/cgeo/geocaching/connector/IConnector.java5
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCConnector.java34
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java9
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCMap.java14
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCParser.java55
-rw-r--r--main/src/cgeo/geocaching/connector/gc/Login.java14
-rw-r--r--main/src/cgeo/geocaching/connector/gc/SearchHandler.java2
-rw-r--r--main/src/cgeo/geocaching/connector/oc/IOCAuthParams.java9
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java18
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java73
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCDEAuthParams.java7
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCPLAuthParams.java7
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OkapiClient.java18
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java5
-rw-r--r--main/src/cgeo/geocaching/connector/ox/OpenCachingApi.java2
-rw-r--r--main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java12
-rw-r--r--main/src/cgeo/geocaching/enumerations/CacheAttribute.java4
-rw-r--r--main/src/cgeo/geocaching/enumerations/CacheListType.java27
-rw-r--r--main/src/cgeo/geocaching/enumerations/CacheSize.java4
-rw-r--r--main/src/cgeo/geocaching/enumerations/CacheType.java6
-rw-r--r--main/src/cgeo/geocaching/enumerations/LiveMapStrategy.java4
-rw-r--r--main/src/cgeo/geocaching/enumerations/LogType.java4
-rw-r--r--main/src/cgeo/geocaching/enumerations/WaypointType.java4
-rw-r--r--main/src/cgeo/geocaching/export/AbstractExport.java6
-rw-r--r--main/src/cgeo/geocaching/export/FieldnoteExport.java4
-rw-r--r--main/src/cgeo/geocaching/export/GpxExport.java6
-rw-r--r--main/src/cgeo/geocaching/export/GpxSerializer.java4
-rw-r--r--main/src/cgeo/geocaching/files/AbstractFileListActivity.java2
-rw-r--r--main/src/cgeo/geocaching/files/FileParser.java2
-rw-r--r--main/src/cgeo/geocaching/files/GPXImporter.java31
-rw-r--r--main/src/cgeo/geocaching/files/GPXParser.java26
-rw-r--r--main/src/cgeo/geocaching/files/LocParser.java4
-rw-r--r--main/src/cgeo/geocaching/files/LocalStorage.java23
-rw-r--r--main/src/cgeo/geocaching/files/SimpleDirChooser.java2
-rw-r--r--main/src/cgeo/geocaching/filter/AbstractRangeFilter.java4
-rw-r--r--main/src/cgeo/geocaching/filter/AttributeFilter.java10
-rw-r--r--main/src/cgeo/geocaching/filter/DistanceFilter.java10
-rw-r--r--main/src/cgeo/geocaching/filter/FilterUserInterface.java4
-rw-r--r--main/src/cgeo/geocaching/filter/ModifiedFilter.java4
-rw-r--r--main/src/cgeo/geocaching/filter/StateFilter.java4
-rw-r--r--main/src/cgeo/geocaching/filter/TrackablesFilter.java4
-rw-r--r--main/src/cgeo/geocaching/gcvote/GCVote.java130
-rw-r--r--main/src/cgeo/geocaching/gcvote/GCVoteRating.java2
-rw-r--r--main/src/cgeo/geocaching/list/AbstractList.java28
-rw-r--r--main/src/cgeo/geocaching/list/PseudoList.java37
-rw-r--r--main/src/cgeo/geocaching/list/StoredList.java (renamed from main/src/cgeo/geocaching/StoredList.java)87
-rw-r--r--main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java4
-rw-r--r--main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java4
-rw-r--r--main/src/cgeo/geocaching/loaders/RemoveFromHistoryLoader.java6
-rw-r--r--main/src/cgeo/geocaching/maps/CGeoMap.java46
-rw-r--r--main/src/cgeo/geocaching/maps/CachesOverlay.java32
-rw-r--r--main/src/cgeo/geocaching/maps/MapProviderFactory.java4
-rw-r--r--main/src/cgeo/geocaching/maps/PositionHistory.java2
-rw-r--r--main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java4
-rw-r--r--main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java6
-rw-r--r--main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java5
-rw-r--r--main/src/cgeo/geocaching/network/HtmlImage.java6
-rw-r--r--main/src/cgeo/geocaching/network/Network.java80
-rw-r--r--main/src/cgeo/geocaching/network/OAuth.java6
-rw-r--r--main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java251
-rw-r--r--main/src/cgeo/geocaching/network/Parameters.java9
-rw-r--r--main/src/cgeo/geocaching/network/StatusUpdater.java6
-rw-r--r--main/src/cgeo/geocaching/settings/AuthorizeOcPreference.java4
-rw-r--r--main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java2
-rw-r--r--main/src/cgeo/geocaching/settings/Settings.java52
-rw-r--r--main/src/cgeo/geocaching/settings/SettingsActivity.java27
-rw-r--r--main/src/cgeo/geocaching/sorting/ComparatorUserInterface.java4
-rw-r--r--main/src/cgeo/geocaching/sorting/DateComparator.java4
-rw-r--r--main/src/cgeo/geocaching/sorting/FindsComparator.java4
-rw-r--r--main/src/cgeo/geocaching/speech/SpeechService.java4
-rw-r--r--main/src/cgeo/geocaching/speech/TextFactory.java13
-rw-r--r--main/src/cgeo/geocaching/twitter/Twitter.java14
-rw-r--r--main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java78
-rw-r--r--main/src/cgeo/geocaching/ui/AbstractUIFactory.java4
-rw-r--r--main/src/cgeo/geocaching/ui/AbstractUserClickListener.java6
-rw-r--r--main/src/cgeo/geocaching/ui/AddressListAdapter.java8
-rw-r--r--main/src/cgeo/geocaching/ui/CacheDetailsCreator.java6
-rw-r--r--main/src/cgeo/geocaching/ui/CacheListAdapter.java4
-rw-r--r--main/src/cgeo/geocaching/ui/DecryptTextClickListener.java26
-rw-r--r--main/src/cgeo/geocaching/ui/DirectionImage.java2
-rw-r--r--main/src/cgeo/geocaching/ui/Formatter.java14
-rw-r--r--main/src/cgeo/geocaching/ui/ImagesList.java2
-rw-r--r--main/src/cgeo/geocaching/ui/LoggingUI.java13
-rw-r--r--main/src/cgeo/geocaching/ui/dialog/CustomProgressDialog.java7
-rw-r--r--main/src/cgeo/geocaching/ui/dialog/LiveMapInfoDialogBuilder.java4
-rw-r--r--main/src/cgeo/geocaching/ui/logs/CacheLogsViewCreator.java4
-rw-r--r--main/src/cgeo/geocaching/ui/logs/LogsViewCreator.java4
-rw-r--r--main/src/cgeo/geocaching/utils/ApplicationSettings.java2
-rw-r--r--main/src/cgeo/geocaching/utils/CancellableHandler.java4
-rw-r--r--main/src/cgeo/geocaching/utils/ClipboardUtils.java4
-rw-r--r--main/src/cgeo/geocaching/utils/CryptUtils.java40
-rw-r--r--main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java12
-rw-r--r--main/src/cgeo/geocaching/utils/GeoDirHandler.java4
-rw-r--r--main/src/cgeo/geocaching/utils/IOUtils.java4
-rw-r--r--main/src/cgeo/geocaching/utils/ImageUtils.java15
-rw-r--r--main/src/cgeo/geocaching/utils/Log.java7
-rw-r--r--main/src/cgeo/geocaching/utils/ProcessUtils.java8
-rw-r--r--main/src/cgeo/geocaching/utils/SimpleCancellableHandler.java1
-rw-r--r--main/src/cgeo/geocaching/utils/SimpleHandler.java37
-rw-r--r--main/src/cgeo/geocaching/utils/TranslationUtils.java22
-rw-r--r--main/src/cgeo/geocaching/utils/UncertainProperty.java5
-rw-r--r--send2cgeo/firefox-addon/send2cgeo/data/LICENSE202
-rw-r--r--send2cgeo/firefox-addon/send2cgeo/data/NOTICE10
-rw-r--r--send2cgeo/firefox-addon/send2cgeo/data/send2cgeo.48.pngbin0 -> 4077 bytes
-rw-r--r--send2cgeo/firefox-addon/send2cgeo/data/send2cgeo.64.pngbin0 -> 5970 bytes
l---------send2cgeo/firefox-addon/send2cgeo/data/send2cgeo.user.js1
-rw-r--r--send2cgeo/firefox-addon/send2cgeo/lib/main.js8
-rw-r--r--send2cgeo/firefox-addon/send2cgeo/package.json17
-rw-r--r--tests/src/cgeo/CGeoTestCase.java70
-rw-r--r--tests/src/cgeo/geocaching/DataStoreTest.java (renamed from tests/src/cgeo/geocaching/cgDataTest.java)91
-rw-r--r--tests/src/cgeo/geocaching/GeocacheTest.java53
-rw-r--r--tests/src/cgeo/geocaching/PersonalNoteTest.java2
-rw-r--r--tests/src/cgeo/geocaching/StoredListTest.java18
-rw-r--r--tests/src/cgeo/geocaching/cgeoApplicationTest.java9
-rw-r--r--tests/src/cgeo/geocaching/connector/gc/GCParserTest.java4
-rw-r--r--tests/src/cgeo/geocaching/connector/gc/WaypointsTest.java4
-rw-r--r--tests/src/cgeo/geocaching/connector/oc/OCConnectorTest.java25
-rw-r--r--tests/src/cgeo/geocaching/connector/oc/OkapiClientTest.java8
-rw-r--r--tests/src/cgeo/geocaching/connector/trackable/GeokretyParserTest.java4
-rw-r--r--tests/src/cgeo/geocaching/export/ExportTest.java6
-rw-r--r--tests/src/cgeo/geocaching/export/GpxSerializerTest.java45
-rw-r--r--tests/src/cgeo/geocaching/files/GPXImporterTest.java26
-rw-r--r--tests/src/cgeo/geocaching/files/GPXParserTest.java11
-rw-r--r--tests/src/cgeo/geocaching/list/PseudoListTest.java18
-rw-r--r--tests/src/cgeo/geocaching/list/StoredListTest.java27
-rw-r--r--tests/src/cgeo/geocaching/speech/TextFactoryTest.java6
-rw-r--r--tests/src/cgeo/geocaching/test/AbstractResourceInstrumentationTestCase.java14
-rw-r--r--tests/src/cgeo/geocaching/ui/FormatterTest.java4
-rw-r--r--tests/src/cgeo/geocaching/utils/CryptUtilsTest.java12
-rw-r--r--tests/src/cgeo/geocaching/utils/UncertainPropertyTest.java19
-rw-r--r--tests/src/cgeo/geocaching/utils/XmlUtilsTest.java48
206 files changed, 2361 insertions, 1986 deletions
diff --git a/README.md b/README.md
index 0d79262..37e40ca 100644
--- a/README.md
+++ b/README.md
@@ -49,13 +49,14 @@ If the workspace directory name contains a space and leads to errors in the -dex
1. copy `./main/templates/private.properties` to `./main/`
2. edit `private.properties` (see comments in the file)
3. copy `./main/templates/local.properties` to `./main/`
-3. copy `./main/templates/local.properties` to `./tests/`
-4. edit `local.properties` (see comments in the file)
-5. copy `./main/templates/mapsapikey.xml` to `./main/res/values/`
-6. edit `./main/res/values/mapsapikey.xml` and insert your Maps API key (see comments in the file)
-7. copy `./main/templates/ocde_okapi.xml` to `./main/res/values/`
-8. request your personal ConsumerKey and -Secret at [opencaching.de OKAPI signup](http://www.opencaching.de/okapi/signup.html)
-9. edit `./main/res/values/ocde_okapi.xml` and insert your keys there.
+4. copy `./main/templates/local.properties` to `./tests/`
+5. edit `local.properties` (see comments in the file)
+6. copy `./main/templates/mapsapikey.xml` to `./main/res/values/`
+7. edit `./main/res/values/mapsapikey.xml` and insert your Maps API key (see comments in the file)
+8. copy `./main/templates/ocde_okapi.xml` to `./main/res/values/`
+9. request your personal ConsumerKey and -Secret at [opencaching.de OKAPI signup](http://www.opencaching.de/okapi/signup.html)
+10. edit `./main/res/values/ocde_okapi.xml` and insert your keys there.
+11. Repeat steps 8-10 with `ocpl_okapi.xml` and [opencaching.pl OKAPI signup](http://www.opencaching.pl/okapi/signup.html)
### Building with Ant ###
diff --git a/main/.classpath b/main/.classpath
index 72adb52..d7bb252 100644
--- a/main/.classpath
+++ b/main/.classpath
@@ -19,5 +19,6 @@
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
+ <classpathentry kind="lib" path="compile-libs/org.eclipse.jdt.annotation_1.1.0.v20130513-1648.jar"/>
<classpathentry kind="output" path="bin/classes"/>
</classpath>
diff --git a/main/.settings/org.eclipse.jdt.core.prefs b/main/.settings/org.eclipse.jdt.core.prefs
index 41c73f0..3e9e8a8 100644
--- a/main/.settings/org.eclipse.jdt.core.prefs
+++ b/main/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,10 @@
eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
@@ -18,6 +24,7 @@ org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -25,7 +32,7 @@ org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
@@ -36,7 +43,9 @@ org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
@@ -53,12 +62,18 @@ org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warni
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=error
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=error
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
@@ -68,10 +83,12 @@ org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
@@ -90,6 +107,7 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.processAnnotations=enabled
diff --git a/main/AndroidManifest.xml b/main/AndroidManifest.xml
index 2d01358..5a204e9 100644
--- a/main/AndroidManifest.xml
+++ b/main/AndroidManifest.xml
@@ -30,7 +30,7 @@
android:xlargeScreens="true" />
<application
- android:name=".cgeoapplication"
+ android:name=".CgeoApplication"
android:allowBackup="true"
android:backupAgent="cgeo.geocaching.backup.CentralBackupAgent"
android:icon="@drawable/cgeo"
@@ -111,7 +111,19 @@
android:name=".twitter.TwitterAuthorizationActivity"
android:configChanges="keyboardHidden|orientation"
android:label="@string/auth_twitter"
- android:windowSoftInputMode="stateHidden" >
+ android:windowSoftInputMode="stateHidden"
+ android:launchMode="singleTask" >
+ <intent-filter>
+ <action android:name="android.intent.action.VIEW" />
+
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
+
+ <data
+ android:host="www.cgeo.org"
+ android:pathPrefix="/twitter/"
+ android:scheme="callback" />
+ </intent-filter>
</activity>
<activity
android:name=".EditWaypointActivity_"
@@ -137,7 +149,7 @@
android:configChanges="keyboardHidden|orientation" >
</activity>
<activity
- android:name=".cgeocaches"
+ android:name=".CacheListActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name" >
@@ -375,13 +387,37 @@
android:name=".connector.oc.OCDEAuthorizationActivity"
android:configChanges="keyboardHidden|orientation"
android:label="@string/app_name"
- android:windowSoftInputMode="stateHidden" >
+ android:windowSoftInputMode="stateHidden"
+ android:launchMode="singleTask">
+ <intent-filter>
+ <action android:name="android.intent.action.VIEW" />
+
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
+
+ <data
+ android:host="www.cgeo.org"
+ android:pathPrefix="/opencaching.de/"
+ android:scheme="callback" />
+ </intent-filter>
</activity>
<activity
android:name=".connector.oc.OCPLAuthorizationActivity"
android:configChanges="keyboardHidden|orientation"
android:label="@string/app_name"
- android:windowSoftInputMode="stateHidden" >
+ android:windowSoftInputMode="stateHidden"
+ android:launchMode="singleTask">
+ <intent-filter>
+ <action android:name="android.intent.action.VIEW" />
+
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
+
+ <data
+ android:host="www.cgeo.org"
+ android:pathPrefix="/opencaching.pl/"
+ android:scheme="callback" />
+ </intent-filter>
</activity>
</application>
</manifest>
diff --git a/main/compile-libs/org.eclipse.jdt.annotation_1.1.0.v20130513-1648.jar b/main/compile-libs/org.eclipse.jdt.annotation_1.1.0.v20130513-1648.jar
new file mode 100644
index 0000000..daca164
--- /dev/null
+++ b/main/compile-libs/org.eclipse.jdt.annotation_1.1.0.v20130513-1648.jar
Binary files differ
diff --git a/main/libs/commons-collections-3.2.1.jar.properties b/main/libs/commons-collections-3.2.1.jar.properties
new file mode 100644
index 0000000..26aad36
--- /dev/null
+++ b/main/libs/commons-collections-3.2.1.jar.properties
@@ -0,0 +1 @@
+src=src/commons-collections-3.2.1-src.zip \ No newline at end of file
diff --git a/main/libs/commons-lang3-3.1.jar.properties b/main/libs/commons-lang3-3.1.jar.properties
new file mode 100644
index 0000000..adbaad3
--- /dev/null
+++ b/main/libs/commons-lang3-3.1.jar.properties
@@ -0,0 +1 @@
+src=src/commons-lang3-3.1-src.zip \ No newline at end of file
diff --git a/main/libs/src/commons-collections-3.2.1-src.zip b/main/libs/src/commons-collections-3.2.1-src.zip
new file mode 100644
index 0000000..e195370
--- /dev/null
+++ b/main/libs/src/commons-collections-3.2.1-src.zip
Binary files differ
diff --git a/main/libs/src/commons-lang3-3.1-src.zip b/main/libs/src/commons-lang3-3.1-src.zip
new file mode 100644
index 0000000..13010f4
--- /dev/null
+++ b/main/libs/src/commons-lang3-3.1-src.zip
Binary files differ
diff --git a/main/proguard-project.txt b/main/proguard-project.txt
index d4991f6..3edd33f 100644
--- a/main/proguard-project.txt
+++ b/main/proguard-project.txt
@@ -49,3 +49,6 @@
# Butter knife view injection, see http://jakewharton.github.io/butterknife/
-dontwarn butterknife.Views$InjectViewProcessor
-keep class **$$ViewInjector { *; }
+
+# Null analysis annotations of Eclipse JDT are just used by the Eclipse compiler, so ignore them here
+-dontwarn org.eclipse.jdt.annotation.** \ No newline at end of file
diff --git a/main/project/localization/findmissingtranslations.sh b/main/project/localization/findmissingtranslations.sh
index ea14f90..52fc053 100755
--- a/main/project/localization/findmissingtranslations.sh
+++ b/main/project/localization/findmissingtranslations.sh
@@ -5,7 +5,7 @@ cd `dirname "$0"`
. ./funcs.sh
finddiffs () {
- echo "translations missing or not in the right place for language '$1':" > $1.missing
+ echo "translations missing for language '$1':" > $1.missing
diff -y en.str $1.str > tmp.str
echo "Only in values/strings.xml:" >> $1.missing
grep "<\||" tmp.str | cut -d " " -f 1 | while read s; do
diff --git a/main/project/localization/funcs.sh b/main/project/localization/funcs.sh
index 198fbae..c61a12e 100644
--- a/main/project/localization/funcs.sh
+++ b/main/project/localization/funcs.sh
@@ -1,5 +1,5 @@
# Utility functions for location-aware programs
getnames () {
- sed -ne 's/^.*<\(string\|plurals\)\s*name\s*=\s*"\([^\"]*\)".*$/\2/p' $1
+ sed -ne 's/^.*<\(string\|plurals\)\s*name\s*=\s*"\([^\"]*\)".*$/\2/p' $1 | sort
}
diff --git a/main/res/layout/authorization_activity.xml b/main/res/layout/authorization_activity.xml
index 771592d..28c1987 100644
--- a/main/res/layout/authorization_activity.xml
+++ b/main/res/layout/authorization_activity.xml
@@ -44,27 +44,11 @@
android:textColor="?text_color"
android:textSize="14sp" />
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:padding="7dip" >
-
- <Button
- android:id="@+id/start"
- style="@style/button_full" />
-
- <EditText
- android:id="@+id/pin"
- style="@style/edittext_full"
- android:inputType="number"
- android:visibility="gone" />
+ <Button
+ android:id="@+id/start"
+ style="@style/button_full"
+ android:layout_margin="7dip" />
- <Button
- android:id="@+id/pin_button"
- style="@style/button_full"
- android:visibility="visible" />
- </LinearLayout>
</LinearLayout>
</ScrollView>
diff --git a/main/res/layout/cachedetail_details_page.xml b/main/res/layout/cachedetail_details_page.xml
index 484385e..e735699 100644
--- a/main/res/layout/cachedetail_details_page.xml
+++ b/main/res/layout/cachedetail_details_page.xml
@@ -261,7 +261,7 @@
<ImageView
android:id="@+id/map_preview"
android:layout_width="fill_parent"
- android:layout_height="80dip"
+ android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:onClick="showNavigationMenu"
diff --git a/main/res/layout/logs_item.xml b/main/res/layout/logs_item.xml
index 6bfe30a..6ce20bb 100644
--- a/main/res/layout/logs_item.xml
+++ b/main/res/layout/logs_item.xml
@@ -58,9 +58,7 @@
android:layout_height="wrap_content"
android:layout_gravity="left"
android:layout_marginTop="22dip"
- android:autoLink="web"
android:gravity="left"
- android:linksClickable="true"
android:textColor="?text_color"
android:textSize="14sp" />
diff --git a/main/res/values-cs/strings.xml b/main/res/values-cs/strings.xml
index f82e199..f740c63 100644
--- a/main/res/values-cs/strings.xml
+++ b/main/res/values-cs/strings.xml
@@ -321,7 +321,6 @@
<!-- caches lists -->
<string name="list_menu">Seznam</string>
<string name="list_menu_create">Vytvořit nový seznam</string>
- <string name="list_menu_all_lists">Všechny keše</string>
<string name="list_menu_drop">Smazat aktuální seznam</string>
<string name="list_menu_change">Změnit seznam</string>
<string name="list_menu_rename">Přejmenovat aktuální seznam</string>
@@ -475,12 +474,7 @@
<string name="auth_authorize">Autorizovat c:geo</string>
<string name="auth_start">Zahájit autorizaci</string>
<string name="auth_again">Znovu autorizovat</string>
- <string name="auth_pin_hint">PIN přidělený Twitterem</string>
<string name="auth_finish">Dokončit</string>
- <string name="auth_dialog_wait">Čekání na Twitter…</string>
- <string name="auth_dialog_pin_title">PIN kód</string>
- <string name="auth_dialog_pin_message">Prosím, napiš PIN kód přidělený Twitterem. Je to nutné pro dokončení autorizace.</string>
- <string name="auth_dialog_completed">c:geo nyní může posílat zprávy na Tvůj Twitter.</string>
<!-- cache -->
<plurals name="cache_counts">
@@ -1040,8 +1034,6 @@
<string name="twitter">Twitter: <a href="">@android_GC</a></string>
<string name="nutshellmanual">Návod: <a href="">c:geo v Nutshell</a></string>
<string name="about_twitter">Má <b>c:geo</b> publikovat nový status na Twitteru vždy, když zaloguješ keš?</string>
- <string name="about_auth_1">Následující proces dovoluje aplikaci <b>c:geo</b> přístup na Twitter - pokud budeš souhlasit.</string>
- <string name="about_auth_2">Klepnutím na tlačítko \"Zahájit autorizaci\" bude proces zahájen. Tento proces otevře webový prohlížeč s Twitterem. Přihlaš se na této stránce a povol <b>c:geu</b> přístup k tvému účtu. Pokud je to povoleno, Twitter ti ukáže číselný PIN kód. Tento PIN kód musíš zadat do <b>c:geo</b> a potvrdit. To je vše.</string>
<!-- status (used via string based resource loading) -->
<string name="status_new_release" tools:ignore="UnusedResources">Dostupné nové vydání.\nKlepni pro instalaci.</string>
diff --git a/main/res/values-da/strings.xml b/main/res/values-da/strings.xml
index 5deb999..85f2d4e 100644
--- a/main/res/values-da/strings.xml
+++ b/main/res/values-da/strings.xml
@@ -156,12 +156,7 @@
<string name="auth_authorize">Godkend c:geo</string>
<string name="auth_start">Start godkendelse</string>
<string name="auth_again">Start igen</string>
- <string name="auth_pin_hint">PIN tildelt af Twitter</string>
<string name="auth_finish">Færdig</string>
- <string name="auth_dialog_wait">Venter på Twitter…</string>
- <string name="auth_dialog_pin_title">PIN-kode</string>
- <string name="auth_dialog_pin_message">Indtast PIN-kode fra Twitter. PIN er påkrævet for at gennemføre godkendelse.</string>
- <string name="auth_dialog_completed">c:geo er nu godkendt til at poste beskeder på Twitter.</string>
<!-- cache -->
<plurals name="cache_counts">
@@ -287,7 +282,5 @@
<string name="facebook">Facebook: <a href="http://www.facebook.com/pages/cgeo/297269860090">c:geo page</a></string>
<string name="twitter">Twitter: <a href="http://twitter.com/android_gc">@android_GC</a></string>
<string name="about_twitter">Skal <b>c:geo</b> sende status til Twitter hvergang du logger en cache?</string>
- <string name="about_auth_1">Med denne proces tillader du at <b>c:geo</b> får adgang til din Twitter.</string>
- <string name="about_auth_2">Klik på \"godkend c:geo\" knappen for at starte godkendelsesprocessen. Det vil åbne Twitter i en webbrowser. Log ind på siden og tillad <b>c:geo</b> at tilgå din Twitter. Når godkendt, vil Twitter vise en PIN-kode. Denne PIN skal tastes ind i <b>c:geo</b> og bekræftes.</string>
</resources>
diff --git a/main/res/values-de/strings.xml b/main/res/values-de/strings.xml
index 80f5c38..570641d 100644
--- a/main/res/values-de/strings.xml
+++ b/main/res/values-de/strings.xml
@@ -293,7 +293,6 @@
<string name="caches_clear_offlinelogs_progress">Lösche Offline-Logs</string>
<string name="list_menu">Liste</string>
<string name="list_menu_create">Neue Liste</string>
- <string name="list_menu_all_lists">Alle</string>
<string name="list_menu_drop">Aktuelle Liste löschen</string>
<string name="list_menu_change">Andere Liste anzeigen</string>
<string name="list_menu_rename">Aktuelle Liste umbenennen</string>
@@ -482,27 +481,10 @@
<string name="auth_authorize">c:geo autorisieren</string>
<string name="auth_start">Starte Autorisierung</string>
<string name="auth_again">Neustarten</string>
- <string name="auth_pin_hint">Twitter-PIN</string>
<string name="auth_finish">Fertig</string>
- <string name="auth_dialog_wait">Warten auf Twitter…</string>
- <string name="auth_dialog_pin_title">PIN Code</string>
- <string name="auth_dialog_pin_message">Bitte den Twitter-PIN-Code eingeben, dies ist notwendig um die Autorisierung abzuschließen.</string>
- <string name="auth_dialog_completed">c:geo ist nun autorisiert, Tweets bei Twitter zu erstellen.</string>
- <string name="about_auth_1">Der folgende Prozess erlaubt es <b>c:geo</b> auf den persönlichen Twitter-Account zuzugreifen, wenn zugestimmt wird.</string>
- <string name="about_auth_2">Ein Klick auf \"Starte Autorisierung\" öffnet eine Twitter-Seite in einem Browserfenster. Durch die Anmeldung und die Bestätigung wird <b>c:geo</b> ermöglicht, auf den persönlichen Twitter-Account zuzugreifen. Wird dies bestätigt, nennt Twitter eine numerische PIN, diese muss kopiert und in <b>c:geo</b> eingefügt werden. Das ist alles.</string>
<string name="auth_ocde">opencaching.de</string>
<string name="auth_ocpl">opencaching.pl</string>
- <string name="auth_authorize_oc">c:geo autorisieren</string>
- <string name="auth_start_oc">Starte Autorisierung</string>
- <string name="auth_again_oc">Neustarten</string>
- <string name="auth_pin_hint_oc">%s-PIN</string>
- <string name="auth_finish_oc">Fertig</string>
- <string name="auth_dialog_wait_oc">Warten auf %s…</string>
- <string name="auth_dialog_pin_title_oc">PIN Code</string>
- <string name="auth_dialog_pin_message_oc">Bitte den %s-PIN-Code eingeben, dies ist notwendig um die Autorisierung abzuschließen.</string>
<string name="auth_dialog_completed_oc">c:geo ist nun autorisiert, caches zu laden und auf %s zu loggen.</string>
- <string name="about_auth_1_oc">Der folgende Prozess erlaubt es <b>c:geo</b> auf den persönlichen %s-Account zuzugreifen, wenn zugestimmt wird.</string>
- <string name="about_auth_2_oc">Ein Klick auf \"Starte Autorisierung\" öffnet eine %s-Seite in einem Browserfenster. Durch die Anmeldung und die Bestätigung wird <b>c:geo</b> ermöglicht, auf den persönlichen Account zuzugreifen. Wird dies bestätigt, nennt %s eine numerische PIN, diese muss kopiert und in <b>c:geo</b> eingefügt werden. Das ist alles.</string>
<string name="cache_offline">Offline</string>
<string name="cache_offline_refresh">Aktualisieren</string>
<string name="cache_offline_drop">Löschen</string>
diff --git a/main/res/values-es/strings.xml b/main/res/values-es/strings.xml
index 26bbe73..5c92273 100644
--- a/main/res/values-es/strings.xml
+++ b/main/res/values-es/strings.xml
@@ -386,12 +386,7 @@
<string name="auth_authorize">Autorizar c:geo</string>
<string name="auth_start">Iniciar autorización</string>
<string name="auth_again">Volver a iniciar</string>
- <string name="auth_pin_hint">PIN asignado por Twitter</string>
<string name="auth_finish">Fin</string>
- <string name="auth_dialog_wait">Esperando por Twitter…</string>
- <string name="auth_dialog_pin_title">Código PIN</string>
- <string name="auth_dialog_pin_message">Debes usar el codigo PIN suministrado por Twitter. Es obligatorio completar la autorización.</string>
- <string name="auth_dialog_completed">c:geo ahora está autorizado para publicar en Twitter.</string>
<!-- cache -->
<plurals name="cache_counts">
@@ -771,7 +766,5 @@
<string name="twitter">Twitter: <a href="">@android_GC</a></string>
<string name="nutshellmanual">Manual: <a href="">c:geo en breve</a></string>
<string name="about_twitter">¿Debe <b>c:geo</b> publicar el nuevo estado en Twitter cuando registras un escondite?</string>
- <string name="about_auth_1">El siguiente proceso permite a <b>c:geo</b> acceder a Twitter - si estás de acuerdo.</string>
- <string name="about_auth_2">Hacer clic en el botón \"autorizar c:geo\" iniciará el proceso. Este proceso abrirá un navegador con la web de Twitter. Identifícate y permite a <b>c:geo</b> acceder a tu cuenta. Si aceptas Twitter te mostrará un código PIN. Este PIN debe ser pegado en <b>c:geo</b> y ser confirmado. Eso es todo.</string>
</resources>
diff --git a/main/res/values-fr/strings.xml b/main/res/values-fr/strings.xml
index 539bf37..b050046 100644
--- a/main/res/values-fr/strings.xml
+++ b/main/res/values-fr/strings.xml
@@ -100,7 +100,7 @@
<string name="log_stars_4_description">plutôt bien</string>
<string name="log_stars_45_description">très bien</string>
<string name="log_stars_5_description">super</string>
- <string name="log_webcam">photo webcam prise</string>
+ <string name="log_webcam">Photo prise par la webcam</string>
<string name="log_new_log">Carnet</string>
<string name="log_new_log_text">Message</string>
<string name="log_announcement">Annonce</string>
@@ -293,7 +293,6 @@
<string name="caches_clear_offlinelogs_progress">Effacement des entrées de carnet hors-ligne</string>
<string name="list_menu">Listes</string>
<string name="list_menu_create">Nouvelle liste</string>
- <string name="list_menu_all_lists">Toutes les caches</string>
<string name="list_menu_drop">Effacer la liste courante</string>
<string name="list_menu_change">Changer de liste</string>
<string name="list_menu_rename">Renommer la liste courante</string>
@@ -343,7 +342,7 @@
<string name="settings_gc_legal_note">En utilisant les services de geocaching.com, vous acceptez les conditions d\'utilisation de Groundspeak.</string>
<string name="settings_info_facebook_login_title">Connexion Facebook</string>
<string name="settings_info_facebook_login">Vous ne pouvez pas faire que c:geo se connecte à geocaching.com avec votre compte Facebook. Mais il existe une solution simple…</string>
- <string name="init_oc">opencaching.de</string>
+ <string name="init_oc">Opencaching.de</string>
<string name="settings_activate_oc">Activer</string>
<string name="init_oc_de_description">Autoriser c:geo à utiliser opencaching.de pour chercher des caches et accéder/filtrer vos caches trouvées.</string>
<string name="init_register_oc_de">Autoriser c:geo</string>
@@ -427,10 +426,12 @@
<string name="init_backup_last">Sauvegarde disponible depuis</string>
<string name="init_backup_last_no">Il n\'y a pas de fichier avec une sauvegarde.</string>
<string name="settings_info_offline_maps_title">Informations sur les cartes hors-ligne</string>
- <string name="settings_info_offline_maps">c:geo prend en charge les cartes hors-ligne. Vous pouvez télécharger des cartes depuis Mapsforge ou même créer vos propres cartes à partir des données d\'OSM.</string>
+ <string name="settings_info_offline_maps">c:geo prend en charge les cartes hors-ligne. Vous pouvez télécharger des cartes depuis Mapsforge ou même créer vos propres cartes à partir des données d\'OSM. Vous devez d\'abord sélectionner le répertoire des cartes en mode hors-ligne pour pouvoir utiliser cette fonctionnalité.</string>
<string name="settings_info_themes_title">Informations sur les thèmes de cartes</string>
<string name="settings_info_themes">c:geo prend en charge des thèmes personnalisés pour les cartes en mode hors-ligne. Ils peuvent être utilisés pour modifier le style de couleur de la carte (par exemple d\'avoir une vue de nuit) ou mettre en évidence certains objets comme les pistes cyclables ou les lignes de niveau.</string>
<string name="init_mapsource_select">Choisir la source des cartes</string>
+ <string name="settings_title_scale_map_text">Zoom du texte</string>
+ <string name="settings_summary_scale_map_text">Mise à l\'échelle des textes sur la carte hors-ligne en fonction de la résolution de l\'appareil</string>
<string name="init_map_directory_description">Dossier contenant les cartes hors-ligne</string>
<string name="init_gpx_exportdir">Dossier d\'exportation GPX</string>
<string name="init_gpx_importdir">Dossier d\'importation GPX</string>
@@ -463,6 +464,9 @@
<string name="init_use_native_ua">S\'identifier comme le navigateur web Android. Peut résoudre des problèmes de connexion avec certains opérateurs mobiles.</string>
<string name="init_summary_use_native_ua">S\'identifier comme le navigateur Android. Résout les problèmes de connexion lors de l\'utilisation de certains fournisseurs d\'accès au réseau.</string>
<string name="init_rendertheme_folder">Dossier contenant les cartes hors-ligne personnelles (optionnelles).</string>
+ <string name="settings_open_website">Ouvrir le site dans un navigateur</string>
+ <string name="settings_settings">Paramètres</string>
+ <string name="settings_information">Information</string>
<string name="map_source_google_map">Google Maps : plan</string>
<string name="map_source_google_satellite">Google Maps : satellite</string>
<string name="map_source_osm_mapnik">OSM : rendu Mapnik</string>
@@ -482,27 +486,14 @@
<string name="auth_authorize">autorisation de c:geo</string>
<string name="auth_start">début d\'autorisation</string>
<string name="auth_again">redémarre</string>
- <string name="auth_pin_hint">code donné par Twitter</string>
<string name="auth_finish">terminé</string>
- <string name="auth_dialog_wait">en attente de Twitter…</string>
- <string name="auth_dialog_pin_title">code PIN</string>
- <string name="auth_dialog_pin_message">Veuillez saisir votre code PIN fourni par Twitter. Il est obligatoire pour finaliser l\'autorisation.</string>
- <string name="auth_dialog_completed">c:geo est maintenant autorisé à poster sur Twitter.</string>
- <string name="about_auth_1">Le processus suivant permet à <b>c:geo</b> d\'accéder à votre compte Twitter - si vous acceptez.</string>
- <string name="about_auth_2">Cliquer sur le bouton \"début d\'autorisation\" pour démarrer. Une fenêtre de navigateur va s\'ouvrir pour vous connecter sur Twitter. Accepter pour que <b>c:geo</b> accéde à votre compte. Twitter vous affichera alors une code PIN composé de chiffres. Merci de coller ce code dans <b>c:geo</b> puis confirmer. C\'est tout!</string>
+ <string name="auth_dialog_waiting">En attente de %s…</string>
+ <string name="auth_explain_short">Le processus suivant autorisera <b>c:geo</b> à accéder à %s.</string>
+ <string name="auth_explain_long">L\'appui sur \"Autoriser c:geo\" démarrera le processus. Un navigateur web ouvrira la page de %s. Vous pourrez vous connecter sur votre compte et en autoriser l\'accès à <b>c:geo</b>. C\'est tout.</string>
+ <string name="auth_dialog_completed_twitter">c:geo est maintenant autorisé à poster sur Twitter.</string>
<string name="auth_ocde">opencaching.de</string>
<string name="auth_ocpl">opencaching.pl</string>
- <string name="auth_authorize_oc">Autoriser c:geo</string>
- <string name="auth_start_oc">Commencer l\'autorisation</string>
- <string name="auth_again_oc">Recommencer</string>
- <string name="auth_pin_hint_oc">Code donné par %s</string>
- <string name="auth_finish_oc">Terminer</string>
- <string name="auth_dialog_wait_oc">En attente de %s…</string>
- <string name="auth_dialog_pin_title_oc">Code PIN</string>
- <string name="auth_dialog_pin_message_oc">Veuillez saisir votre code PIN fourni par %s. Il est nécessaire pour finaliser l\'autorisation.</string>
<string name="auth_dialog_completed_oc">c:geo est désormais autorisé à interagir avec %s.</string>
- <string name="about_auth_1_oc">La procédure suivante permet à <b>c:geo</b> d\'accéder à %s - si vous acceptez.</string>
- <string name="about_auth_2_oc">Cliquer sur le bouton \"début d\'autorisation\" pour démarrer. Une fenêtre de navigateur va s\'ouvrir pour vous connecter sur %s. Accepter pour que <b>c:geo</b> accède à votre compte. %s vous affichera alors un code PIN composé de chiffres. Merci de recopier ce code dans <b>c:geo</b> et de confirmer. C\'est tout.</string>
<string name="cache_offline">Hors ligne</string>
<string name="cache_offline_refresh">Recharger</string>
<string name="cache_offline_drop">Effacer</string>
@@ -798,6 +789,7 @@
<string name="destination_set">Définir une destination</string>
<string name="navigation_direct_navigation">Navigation directe</string>
<string name="navigation_target">Cible</string>
+ <string name="err_nav_no_coordinates">Impossible de démarrer la navigation en l\'absence de coordonnées</string>
<string name="license">Licence</string>
<string name="license_show">Afficher la licence</string>
<string name="license_dismiss">Rejeter</string>
diff --git a/main/res/values-hu/strings.xml b/main/res/values-hu/strings.xml
index d2ae86c..70c4c08 100644
--- a/main/res/values-hu/strings.xml
+++ b/main/res/values-hu/strings.xml
@@ -290,7 +290,6 @@
<!-- caches lists -->
<string name="list_menu">Lista</string>
<string name="list_menu_create">Új lista létrehozása</string>
- <string name="list_menu_all_lists">Az összes láda</string>
<string name="list_menu_drop">Jelenlegi lista elvetése</string>
<string name="list_menu_change">Lista megváltoztatása</string>
<string name="list_menu_rename">Az aktuális lista átnevezése</string>
@@ -438,12 +437,7 @@
<string name="auth_authorize">Hozzáférés engedélyezése a c:geo-nak</string>
<string name="auth_start">Engedélyezés indítása</string>
<string name="auth_again">Engedélyezés indítása újra</string>
- <string name="auth_pin_hint">PIN hozzárendelve a Twitter által</string>
<string name="auth_finish">Befejezés</string>
- <string name="auth_dialog_wait">Várakozás a Twitterre…</string>
- <string name="auth_dialog_pin_title">PIN kód</string>
- <string name="auth_dialog_pin_message">Kérlek írd be a PIN kódot amit a Twittertől kaptál. Ez szükséges lépés az engedélyezés befejezéséhez.</string>
- <string name="auth_dialog_completed">A c:geo engedélyt kapott, hogy bejegyzéseket küldjön a Twitterre.</string>
<!-- cache -->
<plurals name="cache_counts">
@@ -922,8 +916,6 @@
<string name="twitter">Twitter: <a href="">@android_GC</a></string>
<string name="nutshellmanual">Kézikönyv: <a href="">A c:geo dióhéjban</a></string>
<string name="about_twitter">Akarod, hogy <b>c:geo</b> új bejegyzést írjon Twitterre mindig mikor egy ládát megtalálsz?</string>
- <string name="about_auth_1">A következő folyamat engedélyezi a <b>c:geo</b>-nak, hogy hozzáférjen a Twitterhez – ha jóváhagyod.</string>
- <string name="about_auth_2">Kattints a \"c:geo engedélyezése\" gombra, hogy elindítsd a folyamatot. Ez a folyamat meg fog nyitni egy böngészőt a Twitter weboldallal. Lépj be ezen az oldalon és hagyd jóvá, hogy a <b>c:geo</b> hozzáférjen a felhasználói fiókodhoz. Ha elfogadod, a Twitter mutatni fog egy számokból álló PIN kódot. Ezt a PIN kódot kell a <b>c:geo</b>-ban beillesztened és jóváhagynod. Ilyen egyszerű.</string>
<!-- status -->
<string name="status_new_release" tools:ignore="UnusedResources">Új kiadás található.\nKattints a telepítéshez.</string>
diff --git a/main/res/values-it/strings.xml b/main/res/values-it/strings.xml
index f5774fe..a94bf30 100644
--- a/main/res/values-it/strings.xml
+++ b/main/res/values-it/strings.xml
@@ -330,7 +330,6 @@
<!-- caches lists -->
<string name="list_menu">Lista</string>
<string name="list_menu_create">Crea nuova lista</string>
- <string name="list_menu_all_lists">Tutte i cache</string>
<string name="list_menu_drop">Elimina la lista corrente</string>
<string name="list_menu_change">Cambia lista</string>
<string name="list_menu_rename">Rinomina la lista corrente</string>
@@ -482,26 +481,11 @@
<string name="auth_authorize">Autorizza c:geo</string>
<string name="auth_start">Avvia autorizzazione</string>
<string name="auth_again">Avvia ancora</string>
- <string name="auth_pin_hint">PIN assegnato da Twitter</string>
<string name="auth_finish">Fine</string>
- <string name="auth_dialog_wait">In attesa di Twitter…</string>
- <string name="auth_dialog_pin_title">Codice PIN</string>
- <string name="auth_dialog_pin_message">Prego inserire il codice PIN fornito dal sito Twitter. È necessario per completare l\'autorizzazione.</string>
- <string name="auth_dialog_completed">c:geo è ora autorizzato ad inviare a Twitter.</string>
<!-- auth opencaching -->
<string name="auth_ocde">opencaching.de</string>
- <string name="auth_authorize_oc">Autorizza c:geo</string>
- <string name="auth_start_oc">Start autorizzazione</string>
- <string name="auth_again_oc">Start nuovamente</string>
- <string name="auth_pin_hint_oc">PIN assegnato da %s</string>
- <string name="auth_finish_oc">Fine</string>
- <string name="auth_dialog_wait_oc">In attesa di %s…</string>
- <string name="auth_dialog_pin_title_oc">PIN code</string>
- <string name="auth_dialog_pin_message_oc">Prego riportare il PIN fornito dal sito %s. È necessario per completare l\'autorizzazione.</string>
<string name="auth_dialog_completed_oc">c:geo è ora autorizzato ad accedere a %s.</string>
- <string name="about_auth_1_oc">La procedura seguente consentirà a <b>c:geo</b></string>
- <string name="about_auth_2_oc">Un click sul pulsante \"Autorizza c:geo\" inizierà la procedura. Verrà aperta la pagina %s nel browser. Effettua Login sulla pagina ed acconsenti a <b>c:geo</b></string>
<!-- cache -->
<plurals name="cache_counts">
@@ -1068,8 +1052,6 @@
<string name="nutshellmanual">Manuale: <a href="">c:geo in a Nutshell</a></string>
<string name="market">Android: <a href="">c:geo su Google Play</a></string>
<string name="about_twitter">Può <b>c:geo</b> pubblicare su Twitter ogni volta che logghi un cache?</string>
- <string name="about_auth_1">La procesura seguente autorizza <b>c:geo</b> ad accedere a Twitter - se confermato.</string>
- <string name="about_auth_2">Clicca sul pulsante \"Autorizza c:geo\" per iniziare. Questa procedura aprirà il browser sulla pagina Twitter. Fai Login su questa pagina e autorizza <b>c:geo</b> ad accedere al tuo account. Se accettato, Twitter mostrerà un PIN code numerico. Questo PIN deve essere riportato in <b>c:geo</b> e confermato.</string>
<!-- status -->
<string name="status_new_release" tools:ignore="UnusedResources">Una nuova versione è disponibile.\nClicca per installarla.</string>
diff --git a/main/res/values-ja/strings.xml b/main/res/values-ja/strings.xml
index 377b2b4..bf48557 100644
--- a/main/res/values-ja/strings.xml
+++ b/main/res/values-ja/strings.xml
@@ -332,7 +332,6 @@
<!-- caches lists -->
<string name="list_menu">リスト</string>
<string name="list_menu_create">新しいリストを作成</string>
- <string name="list_menu_all_lists">全てのキャッシュ</string>
<string name="list_menu_drop">このリストを消去</string>
<string name="list_menu_change">別のリストにする</string>
<string name="list_menu_rename">このリスト名を変更</string>
@@ -519,28 +518,11 @@
<string name="auth_authorize">c:geoを認証</string>
<string name="auth_start">認証を開始</string>
<string name="auth_again">再度認証を開始</string>
- <string name="auth_pin_hint">TwitterのPINコード</string>
<string name="auth_finish">完了</string>
- <string name="auth_dialog_wait">Twitterからの返答を待っています…</string>
- <string name="auth_dialog_pin_title">PINコード</string>
- <string name="auth_dialog_pin_message">Twitterのサイトで表示されたPINコードを入力してください。認証を完了するために必要です。</string>
- <string name="auth_dialog_completed">c:geoはTwitterにポストするための認証を受けました。</string>
- <string name="about_auth_1"><b>c:geo</b>がTwitterにアクセスする許可を得るには次のようにしてください。</string>
- <string name="about_auth_2">「認証を開始する」ボタンを押すとブラウザでTwitterのページが開きます。そのページにログインすれば<b>c:geo</b>があなたのアカウントにアクセルする許可が得られます。ログインに成功したら数字のPINコードが表示されるので、この下の入力欄にコピー&amp;ペーストして「完了」ボタンを押してください。</string>
<!-- auth opencaching -->
<string name="auth_ocde">opencaching.de</string>
- <string name="auth_authorize_oc">c:geoを認証</string>
- <string name="auth_start_oc">認証を開始</string>
- <string name="auth_again_oc">再度認証を開始</string>
- <string name="auth_pin_hint_oc">%sのPINコード</string>
- <string name="auth_finish_oc">完了</string>
- <string name="auth_dialog_wait_oc">%sからの返答を待っています…</string>
- <string name="auth_dialog_pin_title_oc">PINコード</string>
- <string name="auth_dialog_pin_message_oc">%sのサイトで表示されたPINコードを入力してください。認証を完了するために必要です。</string>
<string name="auth_dialog_completed_oc">c:geoは%sと連携するための認証を受けました。</string>
- <string name="about_auth_1_oc"><b>c:geo</b>が%sにアクセスする許可を得るには次のようにしてください。</string>
- <string name="about_auth_2_oc">「認証を開始する」ボタンを押すとブラウザで%sのページが開きます。そのページにログインすれば<b>c:geo</b>があなたのアカウントにアクセルする許可が得られます。ログインに成功したら数字のPINコードが表示されるので、この下の入力欄にコピー&amp;ペーストして「完了」ボタンを押してください。</string>
<!-- cache -->
<plurals name="cache_counts">
diff --git a/main/res/values-nb/strings.xml b/main/res/values-nb/strings.xml
index d49583e..dee018d 100644
--- a/main/res/values-nb/strings.xml
+++ b/main/res/values-nb/strings.xml
@@ -220,12 +220,7 @@
<string name="auth_authorize">Autoriser c:geo</string>
<string name="auth_start">Start autorisasjon</string>
<string name="auth_again">Prøv igjen</string>
- <string name="auth_pin_hint">PIN-kode oppgitt av Twitter</string>
<string name="auth_finish">Fullfør</string>
- <string name="auth_dialog_wait">venter på Twitter…</string>
- <string name="auth_dialog_pin_title">PIN-kode</string>
- <string name="auth_dialog_pin_message">Vennligst tast inn PIN-koden oppgitt av Twitter. Det er obligatorisk at du fullfører autorisasjonen.</string>
- <string name="auth_dialog_completed">c:geo kan nå poste på Twitter.</string>
<!-- cache -->
<plurals name="cache_counts">
@@ -389,7 +384,5 @@
<string name="website">web-side: <a href="http://cgeo.org/">cgeo.org</a></string>
<string name="facebook">facebook: <a href="http://www.facebook.com/pages/cgeo/297269860090">c:geo page</a></string>
<string name="about_twitter">Ønsker du at <b>c:geo</b> skal poste en status på Twitter hver gang du logger ett funn via <b>c:geo</b>?</string>
- <string name="about_auth_1">Den følgende prosessen tillater <b>c:geo</b> tilgang til Twitter - hvis bruker samtykker.</string>
- <string name="about_auth_2">Trykk på \"Start autorisasjon\" knappen for å starte prosessen. Denne prosessen vil åpne Twitter i web-leseren. Logg inn, og tillat <b>c:geo</b> tilgang til kontoen din. Hvis du aksepterer, vil Twitter oppgi en numerisk PIN-kode. Denne PIN-koden må så limes inn i <b>c:geo</b>. Verre er det ikke.</string>
</resources>
diff --git a/main/res/values-nl/strings.xml b/main/res/values-nl/strings.xml
index bdecc02..c58c41e 100644
--- a/main/res/values-nl/strings.xml
+++ b/main/res/values-nl/strings.xml
@@ -305,7 +305,6 @@
<!-- caches lists -->
<string name="list_menu">Lijst</string>
<string name="list_menu_create">Maak nieuwe lijst</string>
- <string name="list_menu_all_lists">Alle caches</string>
<string name="list_menu_drop">Verwijder huidige lijst</string>
<string name="list_menu_change">Pas lijst aan</string>
<string name="list_menu_rename">Hernoem huidige lijst</string>
@@ -456,12 +455,7 @@
<string name="auth_authorize">c:geo Autoriseren</string>
<string name="auth_start">Start autorisatie</string>
<string name="auth_again">Nogmaals starten</string>
- <string name="auth_pin_hint">Door Twitter toegekende pin</string>
<string name="auth_finish">Afronden</string>
- <string name="auth_dialog_wait">Wachten op Twitter…</string>
- <string name="auth_dialog_pin_title">Pin code</string>
- <string name="auth_dialog_pin_message">Voer de door de Twitter website verstrekte PIN code in. Deze is verplicht om de autorisatie af te ronden.</string>
- <string name="auth_dialog_completed">c:geo Is nu geautoriseerd om naar Twitter te posten.</string>
<!-- cache -->
<plurals name="cache_counts">
@@ -1018,8 +1012,6 @@
<string name="twitter">Twitter: <a href="">@android_GC</a></string>
<string name="nutshellmanual">Handleiding: <a href="">c:geo in een notendop</a></string>
<string name="about_twitter">Moet <b>c:geo</b> elke cache vondst publiceren naar Twitter?</string>
- <string name="about_auth_1">Het volgende proces staat <b>c:geo</b> toe om Twitter toegang te verkrijgen bij goedkeuring.</string>
- <string name="about_auth_2">Klik op de \"autoriseer c:geo\" knop om het proces te starten. Dit proces zal een browser openen met een Twitter pagina. Login op deze pagina en sta <b>c:geo</b> toegang tot je account toe. Bij goedkeuring laat Twitter een numerieke PIN code zien. Deze PIN dien je te plakken en te bevestigen in <b>c:geo</b>.</string>
<!-- status (used via string based resource loading) -->
<string name="status_new_release" tools:ignore="UnusedResources">Nieuwe release beschikbaar.\nTik om te installeren.</string>
diff --git a/main/res/values-pl/strings.xml b/main/res/values-pl/strings.xml
index 9b1bc87..66a5451 100644
--- a/main/res/values-pl/strings.xml
+++ b/main/res/values-pl/strings.xml
@@ -326,7 +326,6 @@
<!-- caches lists -->
<string name="list_menu">Lista</string>
<string name="list_menu_create">Utwórz nową listę</string>
- <string name="list_menu_all_lists">Wszystkie skrzynki</string>
<string name="list_menu_drop">Usuń aktualną listę</string>
<string name="list_menu_change">Zmień listę</string>
<string name="list_menu_rename">Zmień nazwę aktualnej listy</string>
@@ -514,26 +513,11 @@
<string name="auth_authorize">Autoryzacja c:geo</string>
<string name="auth_start">Rozpoczynam autoryzację</string>
<string name="auth_again">Rozpoczynam ponownie autoryzację</string>
- <string name="auth_pin_hint">PIN nadany przez Twitter</string>
<string name="auth_finish">Gotowe</string>
- <string name="auth_dialog_wait">Czekam na Twitter…</string>
- <string name="auth_dialog_pin_title">Kod PIN</string>
- <string name="auth_dialog_pin_message">Proszę wpisać kod PIN dostarczony przez stronę Twitter. To jest obowiązkowe do ukończenia autoryzacji.</string>
- <string name="auth_dialog_completed">c:geo jest teraz upoważniony do postu na Twitter.</string>
<!-- auth opencaching -->
<string name="auth_ocde">opencaching.de</string>
- <string name="auth_authorize_oc">Autoryzuj c:geo</string>
- <string name="auth_start_oc">Rozpocznij autoryzację</string>
- <string name="auth_again_oc">Spróbuj ponownie</string>
- <string name="auth_pin_hint_oc">PIN przypisany przez %s</string>
- <string name="auth_finish_oc">Zakończ</string>
- <string name="auth_dialog_wait_oc">Czekam na %s…</string>
- <string name="auth_dialog_pin_title_oc">Kod PIN</string>
- <string name="auth_dialog_pin_message_oc">Proszę wpisz kod PIN dostarczony przez stronę %s. Jest to konieczne by zakończyć autoryzację.</string>
<string name="auth_dialog_completed_oc">c:geo został zautoryzowany by komunikować się z %s.</string>
- <string name="about_auth_1_oc">Następujący proces pozwolił <b>c:geo</b> aby uzyskać dostęp do %s - jeśli wyrażono zgodę.</string>
- <string name="about_auth_2_oc">Kliknięcie na przycisk \"autoryzuj c:geo\" rozpocznie proces. Zostanie otwarta przeglądarka ze stroną %s. Zaloguj się i pozwól <b>c:geo</b> uzyskać dostęp do Twojego konta. Po zaakceptowaniu, %s pokaże kod numeryczny PIN. Ten kod PIN musi być wklejony do <b>c:geo</b> i potwierdzony. To wszystko.</string>
<!-- cache -->
<plurals name="cache_counts">
@@ -1121,8 +1105,6 @@
<string name="nutshellmanual">Podręcznik: <a href="">c:geo skrócona instrukcja obsługi</a></string>
<string name="market">Android: <a href="">c:geo w Google Play</a></string>
<string name="about_twitter">Czy chczesz aby <b>c:geo</b> publikował nowy status na Twitter za każdym razem kiedy znajdziesz skrzynkę?</string>
- <string name="about_auth_1">Poniższy proces pozwala <b>c:geo</b> uzyskać dostęp do Twitter za Twoim pozwoleniem.</string>
- <string name="about_auth_2">Kliknięcie na \"Autoryzacja c:geo\" spowoduje rozpoczęcie procesu. Ten proces spowoduje otwarcie przeglądarki internetowej na stronie Twitter. Zaloguj się na tej stronie i pozwól <b>c:geo</b> uzyskać dostęp do Twojego konta. Jeśli zostanie zaakceptowany, Twitter wyświetli kod numeryczny PIN. Kod PIN musi zostać wklejony do <b>c:geo</b> i potwierdzony. To wszystko.</string>
<!-- status (used via string based resource loading) -->
<string name="status_new_release" tools:ignore="UnusedResources">Dostępna nowa wersja.\nKliknij aby zainstalować.</string>
diff --git a/main/res/values-pt/strings.xml b/main/res/values-pt/strings.xml
index acd15a3..1ea9fc8 100644
--- a/main/res/values-pt/strings.xml
+++ b/main/res/values-pt/strings.xml
@@ -293,13 +293,12 @@
<string name="caches_clear_offlinelogs_progress">A limpar registos offline</string>
<string name="list_menu">Listas</string>
<string name="list_menu_create">Criar nova lista</string>
- <string name="list_menu_all_lists">caches todas</string>
<string name="list_menu_drop">Apagar lista actual</string>
<string name="list_menu_change">Mudar de lista</string>
<string name="list_menu_rename">Mudar o nome da lista corrente.</string>
<string name="list_title">Escolha uma lista</string>
<string name="list_inbox">Arquivadas</string>
- <string name="list_all_lists">caches todas</string>
+ <string name="list_all_lists">Todas as caches</string>
<string name="list_dialog_create_title">Nova lista</string>
<string name="list_dialog_create">Criar</string>
<string name="list_dialog_cancel">Cancelar</string>
@@ -427,10 +426,12 @@
<string name="init_backup_last">Disponível backup de</string>
<string name="init_backup_last_no">Não existe nenhum ficheiro de backup.</string>
<string name="settings_info_offline_maps_title">Informações sobre Offline Maps</string>
- <string name="settings_info_offline_maps">c: geo suporta mapas para uso offline. Pode baixar mapas de Mapsforge ou até mesmo criar seus próprios mapas a partir de dados OSM.</string>
+ <string name="settings_info_offline_maps">c:geo supports maps for offline use. You can download maps from Mapsforge or even create your own maps from OSM data. You need to select the offline map directory first to to get offline map support.</string>
<string name="settings_info_themes_title">Informações sobre Map Themes</string>
<string name="settings_info_themes">c: geo suporta temas customizados para os mapas off-line. Estes podem ser usados ​​para alterar o estilo de cores do mapa (por exemplo, ter um mapa para visão nocturna) ou para realçar certos objetos, como ciclovias ou linhas de altura dentro do mapa.</string>
<string name="init_mapsource_select">Seleccione a fonte de mapa</string>
+ <string name="settings_title_scale_map_text">Scale Map Text</string>
+ <string name="settings_summary_scale_map_text">Scale text labels on offline map according to device dpi</string>
<string name="init_map_directory_description">Directório com os mapas offline</string>
<string name="init_gpx_exportdir">Directório para exportar GPX</string>
<string name="init_gpx_importdir">Directório para importar GPX</string>
@@ -463,6 +464,9 @@
<string name="init_use_native_ua">Identificar como se fosse o browser do Android. Resolve os problemas de login em alguns provedores de rede.</string>
<string name="init_summary_use_native_ua">Identificar como se fosse o browser do Android. Resolve os problemas de login em alguns provedores de rede.</string>
<string name="init_rendertheme_folder">Directório de Temas de Mapas</string>
+ <string name="settings_open_website">Abrir o website</string>
+ <string name="settings_settings">Definições</string>
+ <string name="settings_information">Informações</string>
<string name="map_source_google_map">Google: Mapa</string>
<string name="map_source_google_satellite">Google: Satélite</string>
<string name="map_source_osm_mapnik">OSM: Mapnik</string>
@@ -482,27 +486,14 @@
<string name="auth_authorize">Autorizar c:geo</string>
<string name="auth_start">Iniciar autorização</string>
<string name="auth_again">Iniciar de novo</string>
- <string name="auth_pin_hint">PIN atribuído pelo Twitter</string>
<string name="auth_finish">Fim</string>
- <string name="auth_dialog_wait">A esperar pelo Twitter…</string>
- <string name="auth_dialog_pin_title">Código PIN</string>
- <string name="auth_dialog_pin_message">Por favor insira o código PIN fornecido pelo site do Twitter. É imperativo para que se complete a autorização.</string>
- <string name="auth_dialog_completed">O c:geo está agora autorizado a publicar no Twitter.</string>
- <string name="about_auth_1">O processo seguinte permite <b>c:geo</b> aceder ao Twitter - se concordar.</string>
- <string name="about_auth_2">Um clique sobre o botão \"autorizar c:geo \" irá iniciar o processo. Este processo irá abrir um navegador com uma página no Twitter. Entre nesta página e permita o <b>c:geo</b> aceder à sua conta. Se isso for aceite, o Twitter vai mostrar um código PIN numérico. Este PIN deve ser colado em <b>c:geo</b> e confirmado. É tudo.</string>
+ <string name="auth_dialog_waiting">Esperando por %s…</string>
+ <string name="auth_explain_short">O processo a seguir permitirá que <b>c:geo</b> acesse o %s.</string>
+ <string name="auth_explain_long">Pressing the \"authorize c:geo\" button will start the process. This process will open up a web browser with a %s page. Log in on this page and allow <b>c:geo</b> to access your account. That\'s all.</string>
+ <string name="auth_dialog_completed_twitter">O c:geo está agora autorizado a publicar no Twitter.</string>
<string name="auth_ocde">opencaching.de</string>
<string name="auth_ocpl">Opencaching.pl</string>
- <string name="auth_authorize_oc">Autorizar c:geo</string>
- <string name="auth_start_oc">Começar autorização</string>
- <string name="auth_again_oc">Iniciar de novo</string>
- <string name="auth_pin_hint_oc">PIN atribuído por %s</string>
- <string name="auth_finish_oc">Fim</string>
- <string name="auth_dialog_wait_oc">A esperar pot %s…</string>
- <string name="auth_dialog_pin_title_oc">Código PIN</string>
- <string name="auth_dialog_pin_message_oc">Por favor insira o código PIN fornecido pelo site %s. É imperativo para que se complete a autorização.</string>
<string name="auth_dialog_completed_oc">c:geo está agora autorizado a interagir com %s.</string>
- <string name="about_auth_1_oc">O processo seguinte permite <b>c:geo</b> aceder ao Twitter - se concordar.</string>
- <string name="about_auth_2_oc">Um clique sobre o botão \"autorizar c:geo \" irá iniciar o processo. Este processo irá abrir um navegador com uma página em %s. Entre nesta página e permita o <b>c:geo</b> aceder à sua conta. Se isso for aceite, %s vai mostrar um código PIN numérico. Este PIN deve ser colado em <b>c:geo</b> e confirmado. É tudo.</string>
<string name="cache_offline">Arquivo</string>
<string name="cache_offline_refresh">Actualizar</string>
<string name="cache_offline_drop">Apagar</string>
@@ -798,6 +789,7 @@
<string name="destination_set">Definir destino</string>
<string name="navigation_direct_navigation">Navegação directa</string>
<string name="navigation_target">Destino</string>
+ <string name="err_nav_no_coordinates">Não pode iniciar a navegação sem coordenadas</string>
<string name="license">Licença</string>
<string name="license_show">Mostrar licença</string>
<string name="license_dismiss">Dispensar</string>
@@ -1029,7 +1021,7 @@
<string name="twitter">Twitter: <a href="">@android_GC</a></string>
<string name="nutshellmanual">Manual: <a href="">o essencial do c:geo</a></string>
<string name="market">Android: <a href="">c:geo no Google Play</a></string>
- <string name="about_twitter">O <b>c:geo</b> deve publicar no Twitter de cada vez que uma cache for registada?</string>
+ <string name="about_twitter">O <b>c:geo</b> deve publicar no Twitter de cada vez que uma cache foi registrada?</string>
<string name="faq">FAQ: <a href="">faq.cgeo.org</a></string>
<string name="status_new_release" tools:ignore="UnusedResources">Nova versão disponível.\nClique para instalar.</string>
<string name="status_new_nightly" tools:ignore="UnusedResources">Nova \'nightly build\' disponível.\nClique para instalar.</string>
diff --git a/main/res/values-sk/strings.xml b/main/res/values-sk/strings.xml
index de25c00..6b3d36a 100644
--- a/main/res/values-sk/strings.xml
+++ b/main/res/values-sk/strings.xml
@@ -298,7 +298,6 @@
<!-- caches lists -->
<string name="list_menu">Zoznam</string>
<string name="list_menu_create">Vytvoriť nový zoznam</string>
- <string name="list_menu_all_lists">Všetky skrýše</string>
<string name="list_menu_drop">Zahodiť aktuálny zoznam</string>
<string name="list_menu_change">Zmeniť zoznam</string>
<string name="list_menu_rename">Premenovať tento zoznam</string>
@@ -446,12 +445,7 @@
<string name="auth_authorize">autorizovať c:geo</string>
<string name="auth_start">Zahájiť autorizáciu</string>
<string name="auth_again">Znovu autorizovať</string>
- <string name="auth_pin_hint">PIN pridelený Twitterom</string>
<string name="auth_finish">Dokončiť</string>
- <string name="auth_dialog_wait">Čakanie na Twitter…</string>
- <string name="auth_dialog_pin_title">PIN kód</string>
- <string name="auth_dialog_pin_message">Prosím, napíšte PIN kód, ktorý vám zobrazil Twitter. Je to potrebné pre dokončenie autorizácie.</string>
- <string name="auth_dialog_completed">c:geo teraz môže posielať správy na váš Twitter.</string>
<!-- cache -->
<plurals name="cache_counts">
@@ -937,8 +931,6 @@
<string name="twitter">Twitter: <a href="">@android_GC</a></string>
<string name="nutshellmanual">Manuál: <a href="">c:geo v kocke</a></string>
<string name="about_twitter">Chcete, aby <b>c:geo</b> napísalo na váš Twitter vždy keď zapíšete nájdenie skrýše?</string>
- <string name="about_auth_1">Pomocou nasledujúceho procesu môžete aplikácii <b>c:geo</b> umožniť odosielanie príspevkov na váš Twitter. </string>
- <string name="about_auth_2">Ťuknutím na tlačidlo „Zahájiť autorizáciu“ celý proces začne. Tento proces otvorí webovú stránku Twitteru, kde sa sa prihlásite a tlačidlom „Authorize app“ umožníte aplikácii <b>c:geo</b> prístup k vášmu Twitter účtu. Potom čo ťuknete na „Authorize app“, Twitter vám pridelí PIN kód. Tento kód skopírujte a vložte do aplikácie <b>c:geo</b>. A potvrďte. To je všetko.</string>
<!-- status -->
<string name="status_new_release" tools:ignore="UnusedResources">Je dostupné nové vydanie.\nKliknite pre inštaláciu.</string>
diff --git a/main/res/values-sl/strings.xml b/main/res/values-sl/strings.xml
index 11bf1a0..22cc11c 100644
--- a/main/res/values-sl/strings.xml
+++ b/main/res/values-sl/strings.xml
@@ -335,7 +335,6 @@
<!-- caches lists -->
<string name="list_menu">Seznam</string>
<string name="list_menu_create">Ustvari nov seznam</string>
- <string name="list_menu_all_lists">Vsi zakladi</string>
<string name="list_menu_drop">Izbriši trenutni seznam</string>
<string name="list_menu_change">Spremeni seznam</string>
<string name="list_menu_rename">Preimenuj trenutni seznam</string>
@@ -535,29 +534,12 @@
<string name="auth_authorize">Poveži c:geo s Twitterjem</string>
<string name="auth_start">Začni z avtorizacijo</string>
<string name="auth_again">Ponovno začni</string>
- <string name="auth_pin_hint">PIN, ki ga dodeli Twitter</string>
<string name="auth_finish">Končaj</string>
- <string name="auth_dialog_wait">Čakam na Twitter…</string>
- <string name="auth_dialog_pin_title">PIN koda</string>
- <string name="auth_dialog_pin_message">Vnesite PIN kodo, ki ste jo dobili na spletni strani Twitterja.</string>
- <string name="auth_dialog_completed">c:geo je sedaj povezan s Twitterjem za objavo sporočil.</string>
- <string name="about_auth_1">Sledeči postopek omogoča <b>c:geotu</b> povezavo s Twitterjem.</string>
- <string name="about_auth_2">Klik na gumb \"Poveži c:geo\" bo začel s postopkom avtorizacije. Med postopkom se bo odprl brskalnik s Twitterjem. V brskalniku se prijavite v Twitter in dovolite aplikaciji <b>c:geo</b> da dostopa do vašega računa. Ko to potrdite, vam bo Twitter izpisal PIN kodo. To kodo prepišite v <b>c:geo</b> in potrdite.</string>
<!-- auth opencaching -->
<string name="auth_ocde">opencaching.de</string>
<string name="auth_ocpl">opencaching.pl</string>
- <string name="auth_authorize_oc">Poveži c:geo</string>
- <string name="auth_start_oc">Začni z avtorizacijo</string>
- <string name="auth_again_oc">Ponovno začni</string>
- <string name="auth_pin_hint_oc">PIN, ki ga dodeli %s</string>
- <string name="auth_finish_oc">Končaj</string>
- <string name="auth_dialog_wait_oc">Čakam na %s…</string>
- <string name="auth_dialog_pin_title_oc">PIN koda</string>
- <string name="auth_dialog_pin_message_oc">Vnesite PIN kodo, ki ste jo dobili na spletni strani %s.</string>
<string name="auth_dialog_completed_oc">c:geo je sedaj povezan z %s.</string>
- <string name="about_auth_1_oc">Sledeči postopek omogoča <b>c:geotu</b> povezavo z %s.</string>
- <string name="about_auth_2_oc">Klik na gumb \"Poveži c:geo\" bo začel s postopkom avtorizacije. Med postopkom se bo odprl brskalnik s stranjo %s. V brskalniku se prijavite na to stran in dovolite aplikaciji <b>c:geo</b> da dostopa do vašega računa. Ko to potrdite, vam bo %s izpisal PIN kodo. To kodo prepišite v <b>c:geo</b> in potrdite.</string>
<!-- cache -->
<plurals name="cache_counts">
@@ -1171,4 +1153,4 @@
<item quantity="other">Pred %d dnevi</item>
</plurals>
-</resources> \ No newline at end of file
+</resources>
diff --git a/main/res/values-sv/strings.xml b/main/res/values-sv/strings.xml
index 6abc9a1..34fc8e2 100644
--- a/main/res/values-sv/strings.xml
+++ b/main/res/values-sv/strings.xml
@@ -333,7 +333,6 @@
<!-- caches lists -->
<string name="list_menu">Listor</string>
<string name="list_menu_create">Skapa en ny lista</string>
- <string name="list_menu_all_lists">Alla cacher</string>
<string name="list_menu_drop">Ta bort den här listan</string>
<string name="list_menu_change">Byt lista</string>
<string name="list_menu_rename">Byt namn på den här listan</string>
@@ -510,6 +509,9 @@
<string name="init_use_native_ua">Identifiering</string>
<string name="init_summary_use_native_ua">Identifiera som en Android webbläsare. Löser problem med inloggning vid uppkoppling via vissa operatörer.</string>
<string name="init_rendertheme_folder">Katalog för kartteman</string>
+ <string name="settings_open_website">Öppna hemsida</string>
+ <string name="settings_settings">Inställningar</string>
+ <string name="settings_information">Information</string>
<!-- map sources -->
<string name="map_source_google_map">Google: Map</string>
@@ -533,29 +535,12 @@
<string name="auth_authorize">Koppla c:geo mot Twitter</string>
<string name="auth_start">Påbörja koppling mot Twitter</string>
<string name="auth_again">Koppla mot Twitter igen</string>
- <string name="auth_pin_hint">PIN erhållen från Twitter</string>
<string name="auth_finish">Bekräfta PIN</string>
- <string name="auth_dialog_wait">Väntar på Twitter…</string>
- <string name="auth_dialog_pin_title">PIN kod</string>
- <string name="auth_dialog_pin_message">Vänligen skriv in PIN koden du fick på Twitters hemsida. Den krävs för att slutföra kopplingen.</string>
- <string name="auth_dialog_completed">c:geo är nu godkänd att posta på Twitter.</string>
- <string name="about_auth_1">Nedan tillåter du <b>c:geo</b> att ansluta till Twitter.</string>
- <string name="about_auth_2">Klicka på \"Påbörja koppling mot Twitter\" om du vill koppla ihop <b>c:geo</b> med Twitter. Twitters hemsida kommer att öppnas i en webbläsare. Logga in på den sidan och tillåt <b>c:geo</b> att ansluta till ditt konto. När du godkänt så kommer Twitter att visa en PIN kod. Kom ihåg denna PIN kod, stäng webbläsaren och skriv in PIN koden i <b>c:geo</b> och bekräfta.</string>
<!-- auth opencaching -->
<string name="auth_ocde">opencaching.de</string>
<string name="auth_ocpl">opencaching.pl</string>
- <string name="auth_authorize_oc">Tillåt c:geo</string>
- <string name="auth_start_oc">Starta godkännande</string>
- <string name="auth_again_oc">Starta igen</string>
- <string name="auth_pin_hint_oc">PIN erhållen från %s</string>
- <string name="auth_finish_oc">Slutför</string>
- <string name="auth_dialog_wait_oc">Väntar på %s…</string>
- <string name="auth_dialog_pin_title_oc">PIN kod</string>
- <string name="auth_dialog_pin_message_oc">Vänlig ange PIN koden som du fått från %s. Den krävs för att slutföra godkännandet.</string>
<string name="auth_dialog_completed_oc">c:geo är nu godkänd för att kommunicera med %s.</string>
- <string name="about_auth_1_oc">Nedan tillåter du <b>c:geo</b> att kommunicera med %s.</string>
- <string name="about_auth_2_oc">Klicka på \"Tillåt c:geo\" nedan för att koppla ihop <b>c:geo</b> med %s. Logga in på den sida som kommer att öppnas i din webbläsare. Tillåt sedan <b>c:geo</b> att komma åt till konto. Efter detta kommer %s att visa en numerisk PIN kod. Denna PIN kod måste sedan anges i <b>c:geo</b> och godkännas.</string>
<!-- cache -->
<plurals name="cache_counts">
@@ -991,4 +976,4 @@
<item quantity="other">%d dagar sedan</item>
</plurals>
-</resources> \ No newline at end of file
+</resources>
diff --git a/main/res/values/preference_keys.xml b/main/res/values/preference_keys.xml
index e82c9d6..38012f5 100644
--- a/main/res/values/preference_keys.xml
+++ b/main/res/values/preference_keys.xml
@@ -38,6 +38,7 @@
<string name="pref_choose_list">choose_list</string>
<string name="pref_mapsource">mapsource</string>
<string name="pref_mapDirectory">mapDirectory</string>
+ <string name="pref_mapsforge_scale_text">mapsforgeScaleText</string>
<string name="pref_renderthemepath">renderthemepath</string>
<string name="pref_showwaypointsthreshold">waypointsthreshold</string>
<string name="pref_maptrail">maptrail</string>
@@ -112,4 +113,9 @@
<string name="pref_ocpl_tokenpublic">ocpl_tokenpublic</string>
<string name="pref_temp_ocpl_token_secret">ocpl-temp-token-secret</string>
<string name="pref_temp_ocpl_token_public">ocpl-temp-token-public</string>
+ <string name="pref_fakekey_gc_website">fakekey_gc_website</string>
+ <string name="pref_fakekey_ocde_website">fakekey_ocde_website</string>
+ <string name="pref_fakekey_ocpl_website">fakekey_ocpl_website</string>
+ <string name="pref_fakekey_gcvote_website">fakekey_gcvote_website</string>
+ <string name="pref_fakekey_sendtocgeo_website">fakekey_sendtocgeo_website</string>
</resources>
diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml
index 554ab0e..f205194 100644
--- a/main/res/values/strings.xml
+++ b/main/res/values/strings.xml
@@ -333,7 +333,6 @@
<!-- caches lists -->
<string name="list_menu">List</string>
<string name="list_menu_create">Create new list</string>
- <string name="list_menu_all_lists">All caches</string>
<string name="list_menu_drop">Drop current list</string>
<string name="list_menu_change">Change list</string>
<string name="list_menu_rename">Rename current list</string>
@@ -478,6 +477,8 @@
<string name="settings_info_themes_title">Info on Map Themes</string>
<string name="settings_info_themes">c:geo supports custom themes for offline maps. These can be used to change the color style of the map (e.g. to have a nightview map) or to highlight certain objects like cycle paths or height lines within the map.</string>
<string name="init_mapsource_select">Select Map Source</string>
+ <string name="settings_title_scale_map_text">Scale Map Text</string>
+ <string name="settings_summary_scale_map_text">Scale text labels on offline map according to device dpi</string>
<string name="init_map_directory_description">Directory with offline maps</string>
<string name="init_gpx_exportdir">GPX Export Directory</string>
<string name="init_gpx_importdir">GPX Import Directory</string>
@@ -510,7 +511,10 @@
<string name="init_use_native_ua">Android browser</string>
<string name="init_summary_use_native_ua">Identify as Android browser. Solves login problems when using certain network providers.</string>
<string name="init_rendertheme_folder">Map Themes Directory</string>
-
+ <string name="settings_open_website">Open website</string>
+ <string name="settings_settings">Settings</string>
+ <string name="settings_information">Information</string>
+
<!-- map sources -->
<string name="map_source_google_map">Google: Map</string>
<string name="map_source_google_satellite">Google: Satellite</string>
@@ -528,34 +532,23 @@
<string name="sendToCgeo_download_fail">c:geo failed to download caches. No internet connection, or send2c:geo is down.</string>
<string name="sendToCgeo_no_registration">c:geo failed to download caches. Registration for send2c:geo expired. Please register in settings.</string>
- <!-- auth twitter -->
+ <!-- auth generic -->
<string name="auth_twitter">Twitter</string>
<string name="auth_authorize">Authorize c:geo</string>
<string name="auth_start">Start authorization</string>
<string name="auth_again">Start again</string>
- <string name="auth_pin_hint">PIN assigned by Twitter</string>
<string name="auth_finish">Finish</string>
- <string name="auth_dialog_wait">Waiting for Twitter…</string>
- <string name="auth_dialog_pin_title">PIN code</string>
- <string name="auth_dialog_pin_message">Please type in the PIN code provided by Twitter. It is required to complete authorization.</string>
- <string name="auth_dialog_completed">c:geo is now authorized to post on Twitter.</string>
- <string name="about_auth_1">The following process will allow <b>c:geo</b> to access Twitter.</string>
- <string name="about_auth_2">Pressing the \"authorize c:geo\" button will start the process. This process will open up a web browser with a Twitter page. Log in on this page and allow <b>c:geo</b> to access your account. After this, Twitter will show up a numeric PIN code. This PIN must be pasted into <b>c:geo</b> and confirmed. That\'s all.</string>
+ <string name="auth_dialog_waiting">Waiting for %s…</string>
+ <string name="auth_explain_short">The following process will allow <b>c:geo</b> to access %s.</string>
+ <string name="auth_explain_long">Pressing the \"authorize c:geo\" button will start the process. This process will open up a web browser with a %s page. Log in on this page and allow <b>c:geo</b> to access your account. That\'s all.</string>
+
+ <!-- auth Twitter -->
+ <string name="auth_dialog_completed_twitter">c:geo is now authorized to post on Twitter.</string>
<!-- auth opencaching -->
<string name="auth_ocde">opencaching.de</string>
<string name="auth_ocpl">opencaching.pl</string>
- <string name="auth_authorize_oc">Authorize c:geo</string>
- <string name="auth_start_oc">Start authorization</string>
- <string name="auth_again_oc">Start again</string>
- <string name="auth_pin_hint_oc">PIN assigned by %s</string>
- <string name="auth_finish_oc">Finish</string>
- <string name="auth_dialog_wait_oc">Waiting for %s…</string>
- <string name="auth_dialog_pin_title_oc">PIN code</string>
- <string name="auth_dialog_pin_message_oc">Please type in PIN code provided by the %s website. It is required to complete authorization.</string>
<string name="auth_dialog_completed_oc">c:geo is now authorized to interact with %s.</string>
- <string name="about_auth_1_oc">The following process allows <b>c:geo</b> to access %s.</string>
- <string name="about_auth_2_oc">Pressing the \"authorize c:geo\" button will start the process. This process will open up a web browser with a %s page. Log in on this page and allow <b>c:geo</b> to access your account. After this, %s will show up a numeric PIN code. This PIN must be pasted into <b>c:geo</b> and confirmed. That\'s all.</string>
<!-- cache -->
<plurals name="cache_counts">
@@ -894,6 +887,7 @@
<string name="destination_set">Set destination</string>
<string name="navigation_direct_navigation">Direct Navigation</string>
<string name="navigation_target">Target</string>
+ <string name="err_nav_no_coordinates">Cannot start navigation with no coordinates</string>
<!-- license -->
<string name="license">License</string>
diff --git a/main/res/xml/preferences.xml b/main/res/xml/preferences.xml
index 7ea3b59..4773acf 100644
--- a/main/res/xml/preferences.xml
+++ b/main/res/xml/preferences.xml
@@ -1,564 +1,531 @@
<?xml version="1.0" encoding="UTF-8"?>
-<PreferenceScreen
- xmlns:android="http://schemas.android.com/apk/res/android"
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:cgeo="http://schemas.android.com/apk/res/cgeo.geocaching"
android:key="@string/pref_fakekey_main_screen" >
<PreferenceScreen
- android:title="@string/settings_title_services"
android:icon="?attr/settings_cloud"
- android:key="@string/pref_fakekey_services_screen" >
-
- <PreferenceCategory
- android:title="@string/settings_category_geocaching" >
-
- <PreferenceScreen
- android:title="@string/settings_title_gc" >
-
- <cgeo.geocaching.settings.CheckBoxWithPopupPreference
- android:key="@string/pref_connectorGCActive"
- android:title="@string/settings_activate_gc"
- cgeo:title="@string/settings_title_gc"
- cgeo:text="@string/settings_gc_legal_note"
- cgeo:url="@string/settings_gc_legal_note_url"
- cgeo:urlButton="@string/settings_goto_url_button"
- android:defaultValue="true" />
- <EditTextPreference
- android:key="@string/pref_username"
- android:title="@string/init_username"
- android:dialogTitle="@string/init_username"
- android:hint="@string/init_username"
- android:dependency="@string/pref_connectorGCActive"
- android:singleLine="true"
- android:imeOptions="actionDone" />
- <cgeo.geocaching.settings.EditPasswordPreference
- android:key="@string/pref_password"
- android:title="@string/init_password"
- android:dialogTitle="@string/init_password"
- android:hint="@string/init_password"
- android:inputType="textPassword"
- android:dependency="@string/pref_connectorGCActive"
- android:singleLine="true"
- android:imeOptions="actionDone" />
- <cgeo.geocaching.settings.CheckGcCredentialsPreference
- android:title="@string/init_login"
- android:dependency="@string/pref_connectorGCActive" />
- <PreferenceScreen
- android:title="@string/settings_title_basicmembers"
- android:key="@string/pref_fakekey_basicmembers_screen"
- android:dependency="@string/pref_connectorGCActive" >
- <CheckBoxPreference
- android:key="@string/pref_showcaptcha"
- android:title="@string/init_captcha"
- android:summary="@string/init_summary_captcha"
- android:defaultValue="false" />
- <CheckBoxPreference
- android:key="@string/pref_loaddirectionimg"
- android:title="@string/init_loaddirectionimg"
- android:summary="@string/init_summary_loaddirectionimg"
- android:defaultValue="true" />
- </PreferenceScreen>
- <cgeo.geocaching.settings.InfoPreference
- android:title="@string/settings_info_facebook_login_title"
- android:text="@string/settings_info_facebook_login"
- cgeo:url="@string/settings_facebook_login_url"
- cgeo:urlButton="@string/settings_goto_url_button" />
-
- </PreferenceScreen>
-
- <PreferenceScreen
- android:title="@string/init_oc" >
-
- <CheckBoxPreference
- android:key="@string/pref_connectorOCActive"
- android:title="@string/settings_activate_oc"
- android:defaultValue="false" />
- <cgeo.geocaching.settings.TextPreference
- android:layout="@layout/text_preference"
- android:text="@string/init_oc_de_description"
- android:dependency="@string/pref_connectorOCActive" />
- <cgeo.geocaching.settings.AuthorizeOcPreference
- android:key="@string/pref_fakekey_ocde_authorization"
- android:dependency="@string/pref_connectorOCActive" />
-
- </PreferenceScreen>
-
- <PreferenceScreen
- android:title="@string/init_oc_pl" >
-
- <CheckBoxPreference
- android:key="@string/pref_connectorOCPLActive"
- android:title="@string/settings_activate_oc_pl"
- android:defaultValue="false" />
- <cgeo.geocaching.settings.TextPreference
- android:layout="@layout/text_preference"
- android:text="@string/init_oc_pl_description"
- android:dependency="@string/pref_connectorOCPLActive" />
- <cgeo.geocaching.settings.AuthorizeOcPreference
- android:key="@string/pref_fakekey_ocpl_authorization"
- android:dependency="@string/pref_connectorOCPLActive" />
-
- </PreferenceScreen>
-
- <PreferenceScreen
- android:title="@string/init_gcvote" >
-
- <cgeo.geocaching.settings.EditPasswordPreference
- android:key="@string/pref_pass_vote"
- android:title="@string/init_password"
- android:dialogTitle="@string/init_password"
- android:hint="@string/init_password"
- android:inputType="textPassword"
- android:singleLine="true"
- android:imeOptions="actionDone" />
-
- </PreferenceScreen>
-
- <PreferenceScreen
- android:title="@string/init_sendToCgeo" >
-
- <cgeo.geocaching.settings.InfoPreference
- android:title="@string/settings_info_send2cgeo_title"
- android:text="@string/init_sendToCgeo_description"
- cgeo:url="@string/settings_send2cgeo_url"
- cgeo:urlButton="@string/settings_goto_url_button" />
- <EditTextPreference
- android:key="@string/pref_webDeviceName"
- android:title="@string/init_sendToCgeo_name"
- android:dialogTitle="@string/init_sendToCgeo_name"
- android:singleLine="true"
- android:imeOptions="actionDone" />
- <cgeo.geocaching.settings.RegisterSend2CgeoPreference
- android:title="@string/init_sendToCgeo_register" />
-
- </PreferenceScreen>
- </PreferenceCategory>
-
- <PreferenceCategory
- android:title="@string/settings_category_social" >
- <PreferenceScreen
- android:title="@string/init_twitter" >
-
- <CheckBoxPreference
- android:key="@string/pref_twitter"
- android:title="@string/settings_activate_twitter"
- android:defaultValue="false" />
- <cgeo.geocaching.settings.TextPreference
- android:layout="@layout/text_preference"
- android:text="@string/about_twitter"
- android:dependency="@string/pref_twitter" />
- <cgeo.geocaching.settings.AuthorizeTwitterPreference
- android:key="@string/pref_fakekey_twitter_authorization"
- android:dependency="@string/pref_twitter" />
-
- </PreferenceScreen>
+ android:key="@string/pref_fakekey_services_screen"
+ android:title="@string/settings_title_services" >
+ <PreferenceCategory android:title="@string/settings_category_geocaching" >
+ <PreferenceScreen android:title="@string/settings_title_gc" >
+ <PreferenceCategory android:title="@string/settings_settings" >
+ <cgeo.geocaching.settings.CheckBoxWithPopupPreference
+ android:defaultValue="true"
+ android:key="@string/pref_connectorGCActive"
+ android:title="@string/settings_activate_gc"
+ cgeo:text="@string/settings_gc_legal_note"
+ cgeo:title="@string/settings_title_gc"
+ cgeo:url="@string/settings_gc_legal_note_url"
+ cgeo:urlButton="@string/settings_goto_url_button" />
+
+ <EditTextPreference
+ android:dependency="@string/pref_connectorGCActive"
+ android:dialogTitle="@string/init_username"
+ android:hint="@string/init_username"
+ android:imeOptions="actionDone"
+ android:key="@string/pref_username"
+ android:singleLine="true"
+ android:title="@string/init_username" />
+
+ <cgeo.geocaching.settings.EditPasswordPreference
+ android:dependency="@string/pref_connectorGCActive"
+ android:dialogTitle="@string/init_password"
+ android:hint="@string/init_password"
+ android:imeOptions="actionDone"
+ android:inputType="textPassword"
+ android:key="@string/pref_password"
+ android:singleLine="true"
+ android:title="@string/init_password" />
+
+ <cgeo.geocaching.settings.CheckGcCredentialsPreference
+ android:dependency="@string/pref_connectorGCActive"
+ android:title="@string/init_login" />
+
+ <PreferenceScreen
+ android:dependency="@string/pref_connectorGCActive"
+ android:key="@string/pref_fakekey_basicmembers_screen"
+ android:title="@string/settings_title_basicmembers" >
+ <CheckBoxPreference
+ android:defaultValue="false"
+ android:key="@string/pref_showcaptcha"
+ android:summary="@string/init_summary_captcha"
+ android:title="@string/init_captcha" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:key="@string/pref_loaddirectionimg"
+ android:summary="@string/init_summary_loaddirectionimg"
+ android:title="@string/init_loaddirectionimg" />
+ </PreferenceScreen>
+ </PreferenceCategory>
+ <PreferenceCategory android:title="@string/settings_information" >
+ <cgeo.geocaching.settings.InfoPreference
+ android:text="@string/settings_info_facebook_login"
+ android:title="@string/settings_info_facebook_login_title"
+ cgeo:url="@string/settings_facebook_login_url"
+ cgeo:urlButton="@string/settings_goto_url_button" />
+
+ <Preference
+ android:key="@string/pref_fakekey_gc_website"
+ android:title="@string/settings_open_website" />
+ </PreferenceCategory>
+ </PreferenceScreen>
+ <PreferenceScreen android:title="@string/init_oc" >
+ <PreferenceCategory android:title="@string/settings_settings" >
+ <CheckBoxPreference
+ android:defaultValue="false"
+ android:key="@string/pref_connectorOCActive"
+ android:title="@string/settings_activate_oc" />
+
+ <cgeo.geocaching.settings.TextPreference
+ android:dependency="@string/pref_connectorOCActive"
+ android:layout="@layout/text_preference"
+ android:text="@string/init_oc_de_description" />
+
+ <cgeo.geocaching.settings.AuthorizeOcPreference
+ android:dependency="@string/pref_connectorOCActive"
+ android:key="@string/pref_fakekey_ocde_authorization" />
+ </PreferenceCategory>
+ <PreferenceCategory android:title="@string/settings_information" >
+ <Preference
+ android:key="@string/pref_fakekey_ocde_website"
+ android:title="@string/settings_open_website" />
+ </PreferenceCategory>
+ </PreferenceScreen>
+ <PreferenceScreen android:title="@string/init_oc_pl" >
+ <PreferenceCategory android:title="@string/settings_settings" >
+ <CheckBoxPreference
+ android:defaultValue="false"
+ android:key="@string/pref_connectorOCPLActive"
+ android:title="@string/settings_activate_oc_pl" />
+
+ <cgeo.geocaching.settings.TextPreference
+ android:dependency="@string/pref_connectorOCPLActive"
+ android:layout="@layout/text_preference"
+ android:text="@string/init_oc_pl_description" />
+
+ <cgeo.geocaching.settings.AuthorizeOcPreference
+ android:dependency="@string/pref_connectorOCPLActive"
+ android:key="@string/pref_fakekey_ocpl_authorization" />
+ </PreferenceCategory>
+ <PreferenceCategory android:title="@string/settings_information" >
+ <Preference
+ android:key="@string/pref_fakekey_ocpl_website"
+ android:title="@string/settings_open_website" />
+ </PreferenceCategory>
+ </PreferenceScreen>
+ <PreferenceScreen android:title="@string/init_gcvote" >
+ <PreferenceCategory android:title="@string/settings_settings" >
+ <cgeo.geocaching.settings.EditPasswordPreference
+ android:dialogTitle="@string/init_password"
+ android:hint="@string/init_password"
+ android:imeOptions="actionDone"
+ android:inputType="textPassword"
+ android:key="@string/pref_pass_vote"
+ android:singleLine="true"
+ android:title="@string/init_password" />
+ </PreferenceCategory>
+ <PreferenceCategory android:title="@string/settings_information" >
+ <Preference
+ android:key="@string/pref_fakekey_gcvote_website"
+ android:title="@string/settings_open_website" />
+ </PreferenceCategory>
+ </PreferenceScreen>
+ <PreferenceScreen android:title="@string/init_sendToCgeo" >
+ <PreferenceCategory android:title="@string/settings_settings" >
+ <EditTextPreference
+ android:dialogTitle="@string/init_sendToCgeo_name"
+ android:imeOptions="actionDone"
+ android:key="@string/pref_webDeviceName"
+ android:singleLine="true"
+ android:title="@string/init_sendToCgeo_name" />
+
+ <cgeo.geocaching.settings.RegisterSend2CgeoPreference android:title="@string/init_sendToCgeo_register" />
+ </PreferenceCategory>
+ <PreferenceCategory android:title="@string/settings_information" >
+ <cgeo.geocaching.settings.InfoPreference
+ android:text="@string/init_sendToCgeo_description"
+ android:title="@string/settings_info_send2cgeo_title"
+ cgeo:url="@string/settings_send2cgeo_url"
+ cgeo:urlButton="@string/settings_goto_url_button" />
+
+ <Preference
+ android:key="@string/pref_fakekey_sendtocgeo_website"
+ android:title="@string/settings_open_website" />
+ </PreferenceCategory>
+ </PreferenceScreen>
</PreferenceCategory>
-
- <PreferenceCategory
- android:title="@string/settings_category_browser" >
-
- <CheckBoxPreference
+ <PreferenceCategory android:title="@string/settings_category_social" >
+ <PreferenceScreen android:title="@string/init_twitter" >
+ <CheckBoxPreference
+ android:defaultValue="false"
+ android:key="@string/pref_twitter"
+ android:title="@string/settings_activate_twitter" />
+
+ <cgeo.geocaching.settings.TextPreference
+ android:dependency="@string/pref_twitter"
+ android:layout="@layout/text_preference"
+ android:text="@string/about_twitter" />
+
+ <cgeo.geocaching.settings.AuthorizeTwitterPreference
+ android:dependency="@string/pref_twitter"
+ android:key="@string/pref_fakekey_twitter_authorization" />
+ </PreferenceScreen>
+ </PreferenceCategory>
+ <PreferenceCategory android:title="@string/settings_category_browser" >
+ <CheckBoxPreference
+ android:defaultValue="false"
android:key="@string/pref_nativeUa"
- android:title="@string/init_use_native_ua"
android:summary="@string/init_summary_use_native_ua"
- android:defaultValue="false" />
-
+ android:title="@string/init_use_native_ua" />
</PreferenceCategory>
-
</PreferenceScreen>
-
<PreferenceScreen
- android:title="@string/settings_title_appearance"
- android:icon="?attr/settings_eye" >
-
- <CheckBoxPreference
+ android:icon="?attr/settings_eye"
+ android:title="@string/settings_title_appearance" >
+ <CheckBoxPreference
+ android:defaultValue="false"
android:key="@string/pref_skin"
- android:title="@string/init_skin"
android:summary="@string/init_summary_skin"
- android:defaultValue="false" />
- <CheckBoxPreference
+ android:title="@string/init_skin" />
+ <CheckBoxPreference
+ android:defaultValue="true"
android:key="@string/pref_showaddress"
- android:title="@string/init_address"
android:summary="@string/init_summary_address"
- android:defaultValue="true" />
- <CheckBoxPreference
+ android:title="@string/init_address" />
+ <CheckBoxPreference
+ android:defaultValue="false"
android:key="@string/pref_plainLogs"
- android:title="@string/init_plain_logs"
android:summary="@string/init_summary_plain_logs"
- android:defaultValue="false" />
- <CheckBoxPreference
+ android:title="@string/init_plain_logs" />
+ <CheckBoxPreference
+ android:defaultValue="false"
android:key="@string/pref_useenglish"
- android:title="@string/init_useenglish"
android:summary="@string/init_summary_useenglish"
- android:defaultValue="false" />
- <CheckBoxPreference
+ android:title="@string/init_useenglish" />
+ <CheckBoxPreference
+ android:defaultValue="false"
android:key="@string/pref_units"
- android:title="@string/init_units"
android:summary="@string/init_summary_units"
- android:defaultValue="false" />
-
+ android:title="@string/init_units" />
</PreferenceScreen>
-
<PreferenceScreen
- android:title="@string/settings_title_cachedetails"
- android:icon="?attr/settings_details" >
-
- <CheckBoxPreference
+ android:icon="?attr/settings_details"
+ android:title="@string/settings_title_cachedetails" >
+ <CheckBoxPreference
+ android:defaultValue="true"
android:key="@string/pref_autoloaddesc"
- android:title="@string/init_autoload"
android:summary="@string/init_summary_autoload"
- android:defaultValue="true" />
- <CheckBoxPreference
+ android:title="@string/init_autoload" />
+ <CheckBoxPreference
+ android:defaultValue="true"
android:key="@string/pref_ratingwanted"
- android:title="@string/init_ratingwanted"
android:summary="@string/init_summary_ratingwanted"
- android:defaultValue="true" />
- <CheckBoxPreference
+ android:title="@string/init_ratingwanted" />
+ <CheckBoxPreference
+ android:defaultValue="true"
android:key="@string/pref_friendlogswanted"
- android:title="@string/init_friendlogswanted"
android:summary="@string/init_summary_friendlogswanted"
- android:defaultValue="true" />
- <CheckBoxPreference
+ android:title="@string/init_friendlogswanted" />
+ <CheckBoxPreference
+ android:defaultValue="false"
android:key="@string/pref_opendetailslastpage"
- android:title="@string/init_openlastdetailspage"
android:summary="@string/init_summary_openlastdetailspage"
- android:defaultValue="false" />
- <CheckBoxPreference
+ android:title="@string/init_openlastdetailspage" />
+ <CheckBoxPreference
+ android:defaultValue="true"
android:key="@string/pref_livelist"
- android:title="@string/init_livelist"
android:summary="@string/init_summary_livelist"
- android:defaultValue="true" />
- <CheckBoxPreference
+ android:title="@string/init_livelist" />
+ <CheckBoxPreference
+ android:defaultValue="false"
android:key="@string/pref_excludemine"
- android:title="@string/init_exclude"
android:summary="@string/init_summary_exclude"
- android:defaultValue="false" />
- <CheckBoxPreference
+ android:title="@string/init_exclude" />
+ <CheckBoxPreference
+ android:defaultValue="false"
android:key="@string/pref_excludedisabled"
- android:title="@string/init_disabled"
android:summary="@string/init_summary_disabled"
- android:defaultValue="false" />
-
+ android:title="@string/init_disabled" />
</PreferenceScreen>
-
<PreferenceScreen
- android:title="@string/settings_title_map"
- android:icon="?attr/settings_map" >
-
- <PreferenceCategory
- android:title="@string/settings_title_map_data" >
-
+ android:icon="?attr/settings_map"
+ android:title="@string/settings_title_map" >
+ <PreferenceCategory android:title="@string/settings_title_map_data" >
<ListPreference
- android:key="@string/pref_mapsource"
- android:title="@string/init_mapsource_select"
+ android:defaultValue="0"
android:dialogTitle="@string/init_mapsource_select"
- android:defaultValue="0" />
-
- <cgeo.geocaching.settings.InfoPreference
- android:title="@string/settings_info_offline_maps_title"
+ android:key="@string/pref_mapsource"
+ android:title="@string/init_mapsource_select" />
+
+ <cgeo.geocaching.settings.InfoPreference
android:text="@string/settings_info_offline_maps"
+ android:title="@string/settings_info_offline_maps_title"
cgeo:url="@string/settings_offline_maps_url"
cgeo:urlButton="@string/settings_goto_url_button" />
-
+
<Preference
android:key="@string/pref_mapDirectory"
android:title="@string/init_map_directory_description" />
-
- <cgeo.geocaching.settings.InfoPreference
- android:title="@string/settings_info_themes_title"
+
+ <cgeo.geocaching.settings.InfoPreference
android:text="@string/settings_info_themes"
+ android:title="@string/settings_info_themes_title"
cgeo:url="@string/settings_themes_url"
cgeo:urlButton="@string/settings_goto_url_button" />
-
+
<Preference
android:key="@string/pref_renderthemepath"
android:title="@string/init_rendertheme_folder" />
+ <CheckBoxPreference
+ android:key="@string/pref_mapsforge_scale_text"
+ android:title="@string/settings_title_scale_map_text"
+ android:summary="@string/settings_summary_scale_map_text"
+ android:defaultValue="true" />
</PreferenceCategory>
-
- <PreferenceCategory
- android:title="@string/settings_title_map_content" >
-
+ <PreferenceCategory android:title="@string/settings_title_map_content" >
<Preference
- android:title="@string/init_showwaypoints"
+ android:selectable="false"
android:summary="@string/init_showwaypoint_description"
- android:selectable="false" />
+ android:title="@string/init_showwaypoints" />
+
<cgeo.geocaching.settings.WpThresholdPreference
android:key="@string/pref_showwaypointsthreshold"
android:layout="@layout/wp_threshold_preference" />
- <CheckBoxPreference
+ <CheckBoxPreference
+ android:defaultValue="true"
android:key="@string/pref_maptrail"
- android:title="@string/init_maptrail"
android:summary="@string/init_summary_maptrail"
- android:defaultValue="true" />
-
+ android:title="@string/init_maptrail" />
</PreferenceCategory>
-
</PreferenceScreen>
-
<PreferenceScreen
- android:title="@string/settings_title_logging"
- android:icon="?attr/settings_pen" >
-
- <PreferenceCategory
- android:title="@string/init_signature">
-
+ android:icon="?attr/settings_pen"
+ android:title="@string/settings_title_logging" >
+ <PreferenceCategory android:title="@string/init_signature" >
<cgeo.geocaching.settings.LogSignaturePreference
android:key="@string/pref_signature"
android:title="@string/init_signature" />
- <CheckBoxPreference
- android:key="@string/pref_sigautoinsert"
- android:title="@string/init_sigautoinsert"
- android:defaultValue="true" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:key="@string/pref_sigautoinsert"
+ android:title="@string/init_sigautoinsert" />
</PreferenceCategory>
-
- <PreferenceCategory
- android:title="@string/settings_category_logging_other">
-
- <CheckBoxPreference
+ <PreferenceCategory android:title="@string/settings_category_logging_other" >
+ <CheckBoxPreference
+ android:defaultValue="false"
android:key="@string/pref_trackautovisit"
- android:title="@string/init_trackautovisit"
android:summary="@string/init_summary_trackautovisit"
- android:defaultValue="false" />
- <CheckBoxPreference
+ android:title="@string/init_trackautovisit" />
+ <CheckBoxPreference
+ android:defaultValue="false"
android:key="@string/pref_log_offline"
- android:title="@string/init_log_offline"
android:summary="@string/init_summary_log_offline"
- android:defaultValue="false" />
-
+ android:title="@string/init_log_offline" />
</PreferenceCategory>
-
</PreferenceScreen>
-
<PreferenceScreen
- android:title="@string/settings_title_offlinedata"
- android:icon="?attr/settings_sdcard" >
-
- <CheckBoxPreference
+ android:icon="?attr/settings_sdcard"
+ android:title="@string/settings_title_offlinedata" >
+ <CheckBoxPreference
+ android:defaultValue="true"
android:key="@string/pref_offlinemaps"
- android:title="@string/init_offline"
android:summary="@string/init_summary_offline"
- android:defaultValue="true" />
- <CheckBoxPreference
+ android:title="@string/init_offline" />
+ <CheckBoxPreference
+ android:defaultValue="false"
android:key="@string/pref_offlinewpmaps"
- android:title="@string/init_offline_wp"
android:summary="@string/init_summary_offline_wp"
- android:defaultValue="false" />
- <CheckBoxPreference
+ android:title="@string/init_offline_wp" />
+ <CheckBoxPreference
+ android:defaultValue="false"
android:key="@string/pref_logimages"
- android:title="@string/init_save_log_img"
android:summary="@string/init_summary_save_log_img"
- android:defaultValue="false" />
- <CheckBoxPreference
+ android:title="@string/init_save_log_img" />
+ <CheckBoxPreference
+ android:defaultValue="true"
android:key="@string/pref_choose_list"
- android:title="@string/init_choose_list"
android:summary="@string/init_summary_choose_list"
- android:defaultValue="true" />
-
+ android:title="@string/init_choose_list" />
</PreferenceScreen>
-
<PreferenceScreen
- android:title="@string/settings_title_navigation"
- android:icon="?attr/settings_arrow" >
-
- <PreferenceCategory
- android:title="@string/init_default_navigation_tool" >
-
+ android:icon="?attr/settings_arrow"
+ android:title="@string/settings_title_navigation" >
+ <PreferenceCategory android:title="@string/init_default_navigation_tool" >
<cgeo.geocaching.settings.TextPreference
android:layout="@layout/text_preference"
android:text="@string/init_default_navigation_tool_description" />
<ListPreference
- android:key="@string/pref_defaultNavigationTool"
- android:title="@string/init_default_navigation_tool_select"
+ android:defaultValue="0"
android:dialogTitle="@string/init_default_navigation_tool_select"
- android:defaultValue="0" />
+ android:key="@string/pref_defaultNavigationTool"
+ android:title="@string/init_default_navigation_tool_select" />
</PreferenceCategory>
-
- <PreferenceCategory
- android:title="@string/init_secondary_navigation_tool" >
-
+ <PreferenceCategory android:title="@string/init_secondary_navigation_tool" >
<cgeo.geocaching.settings.TextPreference
android:layout="@layout/text_preference"
android:text="@string/init_default_navigation_tool_2_description" />
<ListPreference
- android:key="@string/pref_defaultNavigationTool2"
- android:title="@string/init_default_navigation_tool_select"
+ android:defaultValue="0"
android:dialogTitle="@string/init_default_navigation_tool_select"
- android:defaultValue="0" />
-
+ android:key="@string/pref_defaultNavigationTool2"
+ android:title="@string/init_default_navigation_tool_select" />
</PreferenceCategory>
-
- <PreferenceCategory
- android:title="@string/settings_title_navigation_menu" >
-
+ <PreferenceCategory android:title="@string/settings_title_navigation_menu" >
<cgeo.geocaching.settings.TextPreference
android:layout="@layout/text_preference"
android:text="@string/init_navigation_menu_description" />
-
+
<PreferenceScreen
- android:title="@string/settings_title_navigation_menu"
- android:key="@string/pref_fakekey_navigation_menu_screen" >
- <CheckBoxPreference
- android:defaultValue="true"
- android:enabled="false"
- android:key="@string/pref_navigation_menu_compass"
- android:title="@string/compass_title" />
- <CheckBoxPreference
- android:defaultValue="true"
- android:enabled="false"
- android:key="@string/pref_navigation_menu_radar"
- android:title="@string/cache_menu_radar" />
- <CheckBoxPreference
- android:defaultValue="true"
- android:enabled="false"
- android:key="@string/pref_navigation_menu_internal_map"
- android:title="@string/cache_menu_map" />
- <CheckBoxPreference
- android:defaultValue="true"
- android:enabled="false"
- android:key="@string/pref_navigation_menu_static_map"
- android:title="@string/cache_menu_map_static" />
- <CheckBoxPreference
- android:defaultValue="true"
- android:enabled="false"
- android:key="@string/pref_navigation_menu_static_map_download"
- android:title="@string/cache_menu_download_map_static" />
- <CheckBoxPreference
- android:defaultValue="true"
- android:enabled="false"
- android:key="@string/pref_navigation_menu_locus"
- android:title="@string/caches_map_locus" />
- <CheckBoxPreference
- android:defaultValue="true"
- android:enabled="false"
- android:key="@string/pref_navigation_menu_rmaps"
- android:title="@string/cache_menu_rmaps" />
- <CheckBoxPreference
- android:defaultValue="true"
- android:enabled="false"
- android:key="@string/pref_navigation_menu_google_maps"
- android:title="@string/cache_menu_map_ext" />
- <CheckBoxPreference
- android:defaultValue="true"
- android:enabled="false"
- android:key="@string/pref_navigation_menu_google_navigation"
- android:title="@string/cache_menu_navigation_drive" />
- <CheckBoxPreference
- android:defaultValue="true"
- android:enabled="false"
- android:key="@string/pref_navigation_menu_google_streetview"
- android:title="@string/cache_menu_streetview" />
- <CheckBoxPreference
- android:defaultValue="true"
- android:enabled="false"
- android:key="@string/pref_navigation_menu_oruxmaps"
- android:title="@string/cache_menu_oruxmaps" />
- <CheckBoxPreference
- android:defaultValue="true"
- android:enabled="false"
- android:key="@string/pref_navigation_menu_navigon"
- android:title="@string/cache_menu_navigon" />
- <CheckBoxPreference
- android:defaultValue="true"
- android:enabled="false"
- android:key="@string/pref_navigation_menu_sygic"
- android:title="@string/cache_menu_sygic" />
- <CheckBoxPreference
- android:defaultValue="true"
- android:enabled="false"
- android:key="@string/pref_navigation_menu_google_walk"
- android:title="@string/cache_menu_navigation_walk" />
- <CheckBoxPreference
- android:defaultValue="true"
- android:enabled="false"
- android:key="@string/pref_navigation_menu_google_bike"
- android:title="@string/cache_menu_navigation_bike" />
- <CheckBoxPreference
- android:defaultValue="true"
- android:enabled="false"
- android:key="@string/pref_navigation_menu_google_maps_directions"
- android:title="@string/cache_menu_maps_directions" />
- <CheckBoxPreference
- android:defaultValue="true"
- android:enabled="false"
- android:key="@string/pref_navigation_menu_cache_beacon"
- android:title="@string/cache_menu_cachebeacon" />
- <CheckBoxPreference
- android:defaultValue="true"
- android:enabled="false"
- android:key="@string/pref_navigation_menu_gcc"
- android:title="@string/cache_menu_gcc" />
- <CheckBoxPreference
- android:defaultValue="true"
- android:enabled="false"
- android:key="@string/pref_navigation_menu_where_you_go"
- android:title="@string/cache_menu_whereyougo" />
- </PreferenceScreen>
- </PreferenceCategory>
+ android:key="@string/pref_fakekey_navigation_menu_screen"
+ android:title="@string/settings_title_navigation_menu" >
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:enabled="false"
+ android:key="@string/pref_navigation_menu_compass"
+ android:title="@string/compass_title" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:enabled="false"
+ android:key="@string/pref_navigation_menu_radar"
+ android:title="@string/cache_menu_radar" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:enabled="false"
+ android:key="@string/pref_navigation_menu_internal_map"
+ android:title="@string/cache_menu_map" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:enabled="false"
+ android:key="@string/pref_navigation_menu_static_map"
+ android:title="@string/cache_menu_map_static" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:enabled="false"
+ android:key="@string/pref_navigation_menu_static_map_download"
+ android:title="@string/cache_menu_download_map_static" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:enabled="false"
+ android:key="@string/pref_navigation_menu_locus"
+ android:title="@string/caches_map_locus" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:enabled="false"
+ android:key="@string/pref_navigation_menu_rmaps"
+ android:title="@string/cache_menu_rmaps" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:enabled="false"
+ android:key="@string/pref_navigation_menu_google_maps"
+ android:title="@string/cache_menu_map_ext" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:enabled="false"
+ android:key="@string/pref_navigation_menu_google_navigation"
+ android:title="@string/cache_menu_navigation_drive" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:enabled="false"
+ android:key="@string/pref_navigation_menu_google_streetview"
+ android:title="@string/cache_menu_streetview" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:enabled="false"
+ android:key="@string/pref_navigation_menu_oruxmaps"
+ android:title="@string/cache_menu_oruxmaps" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:enabled="false"
+ android:key="@string/pref_navigation_menu_navigon"
+ android:title="@string/cache_menu_navigon" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:enabled="false"
+ android:key="@string/pref_navigation_menu_sygic"
+ android:title="@string/cache_menu_sygic" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:enabled="false"
+ android:key="@string/pref_navigation_menu_google_walk"
+ android:title="@string/cache_menu_navigation_walk" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:enabled="false"
+ android:key="@string/pref_navigation_menu_google_bike"
+ android:title="@string/cache_menu_navigation_bike" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:enabled="false"
+ android:key="@string/pref_navigation_menu_google_maps_directions"
+ android:title="@string/cache_menu_maps_directions" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:enabled="false"
+ android:key="@string/pref_navigation_menu_cache_beacon"
+ android:title="@string/cache_menu_cachebeacon" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:enabled="false"
+ android:key="@string/pref_navigation_menu_gcc"
+ android:title="@string/cache_menu_gcc" />
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:enabled="false"
+ android:key="@string/pref_navigation_menu_where_you_go"
+ android:title="@string/cache_menu_whereyougo" />
+ </PreferenceScreen>
+ </PreferenceCategory>
</PreferenceScreen>
-
<PreferenceScreen
- android:title="@string/settings_title_system"
- android:icon="?attr/settings_nut" >
-
- <PreferenceCategory
- android:title="@string/settings_title_gpx" >
-
+ android:icon="?attr/settings_nut"
+ android:title="@string/settings_title_system" >
+ <PreferenceCategory android:title="@string/settings_title_gpx" >
<Preference
android:key="@string/pref_gpxExportDir"
android:title="@string/init_gpx_exportdir" />
<Preference
android:key="@string/pref_gpxImportDir"
android:title="@string/init_gpx_importdir" />
-
</PreferenceCategory>
-
- <PreferenceCategory
- android:title="@string/init_backup" >
-
+ <PreferenceCategory android:title="@string/init_backup" >
<cgeo.geocaching.settings.TextPreference
android:key="@string/pref_fakekey_preference_backup_info"
android:layout="@layout/text_preference"
android:text="@string/init_backup_note" />
- <Preference
+
+ <Preference
android:key="@string/pref_fakekey_preference_backup"
android:title="@string/init_backup_backup" />
- <Preference
+ <Preference
android:key="@string/pref_fakekey_preference_restore"
android:title="@string/init_backup_restore" />
-
</PreferenceCategory>
-
- <PreferenceCategory
- android:title="@string/init_dbonsdcard_title" >
-
+ <PreferenceCategory android:title="@string/init_dbonsdcard_title" >
<cgeo.geocaching.settings.TextPreference
android:layout="@layout/text_preference"
android:text="@string/init_dbonsdcard_note" />
- <CheckBoxPreference
- android:key="@string/pref_dbonsdcard"
- android:title="@string/init_dbonsdcard"
- android:defaultValue="false" />
+ <CheckBoxPreference
+ android:defaultValue="false"
+ android:key="@string/pref_dbonsdcard"
+ android:title="@string/init_dbonsdcard" />
</PreferenceCategory>
-
- <PreferenceCategory
- android:title="@string/init_debug_title" >
-
+ <PreferenceCategory android:title="@string/init_debug_title" >
<cgeo.geocaching.settings.TextPreference
android:layout="@layout/text_preference"
android:text="@string/init_debug_note" />
- <CheckBoxPreference
- android:key="@string/pref_debug"
- android:title="@string/init_debug"
- android:defaultValue="false" />
+ <CheckBoxPreference
+ android:defaultValue="false"
+ android:key="@string/pref_debug"
+ android:title="@string/init_debug" />
</PreferenceCategory>
-
</PreferenceScreen>
-</PreferenceScreen>
+</PreferenceScreen> \ No newline at end of file
diff --git a/main/src/cgeo/geocaching/AbstractPopupActivity.java b/main/src/cgeo/geocaching/AbstractPopupActivity.java
index 1cf0353..6314003 100644
--- a/main/src/cgeo/geocaching/AbstractPopupActivity.java
+++ b/main/src/cgeo/geocaching/AbstractPopupActivity.java
@@ -64,7 +64,7 @@ public abstract class AbstractPopupActivity extends AbstractActivity {
cacheDistance.bringToFront();
}
onUpdateGeoData(geo);
- } catch (final Exception e) {
+ } catch (final RuntimeException e) {
Log.w("Failed to UpdateLocation location.");
}
}
@@ -109,7 +109,7 @@ public abstract class AbstractPopupActivity extends AbstractActivity {
}
protected void init() {
- cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
+ cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
if (cache == null) {
showToast(res.getString(R.string.err_detail_cache_find));
@@ -209,7 +209,7 @@ public abstract class AbstractPopupActivity extends AbstractActivity {
menu.findItem(R.id.menu_default_navigation).setTitle(NavigationAppFactory.getDefaultNavigationApplication().getName());
LoggingUI.onPrepareOptionsMenu(menu, cache);
- } catch (final Exception e) {
+ } catch (final RuntimeException e) {
// nothing
}
@@ -285,7 +285,7 @@ public abstract class AbstractPopupActivity extends AbstractActivity {
showToast(res.getString(R.string.err_location_unknown));
return;
}
- cgeocaches.startActivityCoordinates(this, coords);
+ CacheListActivity.startActivityCoordinates(this, coords);
finish();
}
diff --git a/main/src/cgeo/geocaching/AddressListActivity.java b/main/src/cgeo/geocaching/AddressListActivity.java
index c984d28..dcccb66 100644
--- a/main/src/cgeo/geocaching/AddressListActivity.java
+++ b/main/src/cgeo/geocaching/AddressListActivity.java
@@ -66,7 +66,7 @@ public class AddressListActivity extends AbstractListActivity {
}
} else {
finish();
- cgeocaches.startActivityAddress(AddressListActivity.this, null, keyword);
+ CacheListActivity.startActivityAddress(AddressListActivity.this, null, keyword);
}
}
diff --git a/main/src/cgeo/geocaching/CacheCache.java b/main/src/cgeo/geocaching/CacheCache.java
index e70b7a0..b3c674c 100644
--- a/main/src/cgeo/geocaching/CacheCache.java
+++ b/main/src/cgeo/geocaching/CacheCache.java
@@ -1,6 +1,6 @@
package cgeo.geocaching;
-import cgeo.geocaching.cgData.StorageLocation;
+import cgeo.geocaching.DataStore.StorageLocation;
import cgeo.geocaching.connector.gc.Tile;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.geopoint.Viewport;
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java
index 4a9cc6e..4be0ad9 100644
--- a/main/src/cgeo/geocaching/CacheDetailActivity.java
+++ b/main/src/cgeo/geocaching/CacheDetailActivity.java
@@ -18,6 +18,7 @@ import cgeo.geocaching.enumerations.LoadFlags.SaveFlag;
import cgeo.geocaching.enumerations.WaypointType;
import cgeo.geocaching.geopoint.GeopointFormatter;
import cgeo.geocaching.geopoint.Units;
+import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.network.HtmlImage;
import cgeo.geocaching.network.Network;
import cgeo.geocaching.network.Parameters;
@@ -291,7 +292,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
title = geocode;
}
progress.show(this, title, res.getString(R.string.cache_dialog_loading_details), true, loadCacheHandler.cancelMessage());
- } catch (final Exception e) {
+ } catch (final RuntimeException e) {
// nothing, we lost the window
}
@@ -422,7 +423,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
break;
}
}
- } catch (final Exception e) {
+ } catch (final RuntimeException e) {
}
}
break;
@@ -438,11 +439,11 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
menu.setHeaderTitle(fieldTitle);
menu.add(viewId, MENU_FIELD_COPY, 0, res.getString(android.R.string.copy));
if (!copyOnly) {
- if (clickedItemText.length() > TranslationUtils.translationTextLengthToWarn) {
+ if (clickedItemText.length() > TranslationUtils.TRANSLATION_TEXT_LENGTH_WARN) {
showToast(res.getString(R.string.translate_length_warning));
}
menu.add(viewId, MENU_FIELD_TRANSLATE, 0, res.getString(R.string.translate_to_sys_lang, Locale.getDefault().getDisplayLanguage()));
- if (Settings.isUseEnglish() && !StringUtils.equals(Locale.getDefault().getLanguage(), Locale.ENGLISH.getLanguage())) {
+ if (!StringUtils.equals(Locale.getDefault().getLanguage(), Locale.ENGLISH.getLanguage())) {
menu.add(viewId, MENU_FIELD_TRANSLATE_EN, 0, res.getString(R.string.translate_to_english));
}
@@ -493,14 +494,14 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
case CONTEXT_MENU_WAYPOINT_DUPLICATE:
final Waypoint waypointDuplicate = cache.getWaypoint(index);
if (cache.duplicateWaypoint(waypointDuplicate)) {
- cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
+ DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
notifyDataSetChanged();
}
break;
case CONTEXT_MENU_WAYPOINT_DELETE:
final Waypoint waypointDelete = cache.getWaypoint(index);
if (cache.deleteWaypoint(waypointDelete)) {
- cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
+ DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
notifyDataSetChanged();
}
break;
@@ -519,7 +520,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
case CONTEXT_MENU_WAYPOINT_CACHES_AROUND:
final Waypoint waypointAround = cache.getWaypoint(index);
if (waypointAround != null) {
- cgeocaches.startActivityCoordinates(this, waypointAround.getCoords());
+ CacheListActivity.startActivityCoordinates(this, waypointAround.getCoords());
}
break;
@@ -588,7 +589,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
cache.openInBrowser(this);
return true;
case MENU_CACHES_AROUND:
- cgeocaches.startActivityCoordinates(this, cache.getCoords());
+ CacheListActivity.startActivityCoordinates(this, cache.getCoords());
return true;
case MENU_CALENDAR:
addToCalendarWithIntent();
@@ -1134,7 +1135,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
if (time > 0) {
String dateString = Formatter.formatFullDate(time);
if (cache.isEventCache()) {
- dateString = DateUtils.formatDateTime(cgeoapplication.getInstance().getBaseContext(), time, DateUtils.FORMAT_SHOW_WEEKDAY) + ", " + dateString;
+ dateString = DateUtils.formatDateTime(CgeoApplication.getInstance().getBaseContext(), time, DateUtils.FORMAT_SHOW_WEEKDAY) + ", " + dateString;
}
details.add(cache.isEventCache() ? R.string.cache_event : R.string.cache_hidden, dateString);
}
@@ -1279,7 +1280,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
private Handler handler;
public DropCacheThread(Handler handler) {
- super();
this.handler = handler;
}
@@ -1481,7 +1481,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
Settings.saveLastList(listId);
- cgData.moveToList(cache, listId);
+ DataStore.moveToList(cache, listId);
updateListBox();
}
@@ -1564,7 +1564,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
// update text
final TextView text = (TextView) view.findViewById(R.id.list_text);
- final StoredList list = cgData.getList(cache.getListId());
+ final StoredList list = DataStore.getList(cache.getListId());
if (list != null) {
text.setText(res.getString(R.string.cache_list_text) + " " + list.title);
} else {
@@ -1615,7 +1615,8 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
return;
}
- ((ImageView) view.findViewById(R.id.map_preview)).setImageDrawable(image);
+ final ImageView imageView = (ImageView) view.findViewById(R.id.map_preview);
+ imageView.setImageDrawable(image);
view.findViewById(R.id.map_preview_box).setVisibility(View.VISIBLE);
} catch (final Exception e) {
Log.e("CacheDetailActivity.PreviewMapTask", e);
@@ -1706,12 +1707,16 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
hintView.setVisibility(View.VISIBLE);
hintView.setClickable(true);
- hintView.setOnClickListener(new DecryptTextClickListener());
+ hintView.setOnClickListener(new DecryptTextClickListener(hintView));
+ hintBoxView.setOnClickListener(new DecryptTextClickListener(hintView));
+ hintBoxView.setClickable(true);
registerForContextMenu(hintView);
} else {
hintView.setVisibility(View.GONE);
hintView.setClickable(false);
hintView.setOnClickListener(null);
+ hintBoxView.setClickable(false);
+ hintBoxView.setOnClickListener(null);
}
final TextView spoilerlinkView = ((TextView) view.findViewById(R.id.hint_spoilerlink));
@@ -2197,7 +2202,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
cache.setCoords(wpt.getCoords());
cache.setUserModifiedCoords(false);
cache.deleteWaypointForce(wpt);
- cgData.saveChangedCache(cache);
+ DataStore.saveChangedCache(cache);
handler.sendEmptyMessage(LOCAL);
}
@@ -2452,7 +2457,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
}
protected void storeCache(final int listId, final StoreCacheHandler storeCacheHandler) {
- progress.show(CacheDetailActivity.this, res.getString(R.string.cache_dialog_offline_save_title), res.getString(R.string.cache_dialog_offline_save_message), true, storeCacheHandler.cancelMessage());
+ progress.show(this, res.getString(R.string.cache_dialog_offline_save_title), res.getString(R.string.cache_dialog_offline_save_message), true, storeCacheHandler.cancelMessage());
if (storeThread != null) {
storeThread.interrupt();
@@ -2491,7 +2496,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
cache.parseWaypointsFromNote();
TextView personalNoteView = (TextView) activity.findViewById(R.id.personalnote);
setPersonalNote(personalNoteView, note);
- cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
+ DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
activity.notifyDataSetChanged();
}
};
diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/CacheListActivity.java
index 59174f5..0f44f86 100644
--- a/main/src/cgeo/geocaching/cgeocaches.java
+++ b/main/src/cgeo/geocaching/CacheListActivity.java
@@ -16,6 +16,7 @@ import cgeo.geocaching.files.GPXImporter;
import cgeo.geocaching.filter.FilterUserInterface;
import cgeo.geocaching.filter.IFilter;
import cgeo.geocaching.geopoint.Geopoint;
+import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.loaders.AbstractSearchLoader;
import cgeo.geocaching.loaders.AbstractSearchLoader.CacheListLoaderType;
import cgeo.geocaching.loaders.AddressGeocacheListLoader;
@@ -47,6 +48,7 @@ import ch.boye.httpclientandroidlib.HttpResponse;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jdt.annotation.NonNull;
import android.app.AlertDialog;
import android.app.ProgressDialog;
@@ -80,7 +82,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
-public class cgeocaches extends AbstractListActivity implements FilteredActivity, LoaderManager.LoaderCallbacks<SearchResult> {
+public class CacheListActivity extends AbstractListActivity implements FilteredActivity, LoaderManager.LoaderCallbacks<SearchResult> {
private static final int MAX_LIST_ITEMS = 1000;
private static final int MENU_REFRESH_STORED = 2;
@@ -152,7 +154,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
}
if (app.currentGeo().getSpeed() <= 5) { // use compass when speed is lower than 18 km/h) {
- final float northHeading = DirectionProvider.getDirectionNow(cgeocaches.this, direction);
+ final float northHeading = DirectionProvider.getDirectionNow(CacheListActivity.this, direction);
adapter.setActualHeading(northHeading);
}
}
@@ -211,7 +213,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
setAdapterCurrentCoordinates(false);
} catch (final Exception e) {
showToast(res.getString(R.string.err_detail_cache_find_any));
- Log.e("cgeocaches.loadCachesHandler", e);
+ Log.e("CacheListActivity.loadCachesHandler", e);
hideLoading();
showProgress(false);
@@ -224,7 +226,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
hideLoading();
showProgress(false);
} catch (final Exception e2) {
- Log.e("cgeocaches.loadCachesHandler.2", e2);
+ Log.e("CacheListActivity.loadCachesHandler.2", e2);
}
adapter.setSelectMode(false);
@@ -232,15 +234,15 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
private final Handler loadCachesHandler = new LoadCachesHandler(this);
- private static class LoadCachesHandler extends WeakReferenceHandler<cgeocaches> {
+ private static class LoadCachesHandler extends WeakReferenceHandler<CacheListActivity> {
- protected LoadCachesHandler(cgeocaches activity) {
+ protected LoadCachesHandler(CacheListActivity activity) {
super(activity);
}
@Override
public void handleMessage(Message msg) {
- final cgeocaches activity = getActivity();
+ final CacheListActivity activity = getActivity();
if (activity == null) {
return;
}
@@ -398,7 +400,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
private AbstractSearchLoader currentLoader;
private String newListName = StringUtils.EMPTY;
- public cgeocaches() {
+ public CacheListActivity() {
super(true);
}
@@ -433,7 +435,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
@Override
public void onClick(View v) {
- selectList(v);
+ selectList();
}
});
@@ -469,7 +471,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
private boolean isConcreteList() {
return type == CacheListType.OFFLINE &&
- (listId == StoredList.STANDARD_LIST_ID || listId >= cgData.customListIdOffset);
+ (listId == StoredList.STANDARD_LIST_ID || listId >= DataStore.customListIdOffset);
}
private boolean isInvokedFromAttachment() {
@@ -481,7 +483,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
@Override
public void run(Integer listId) {
- new GPXImporter(cgeocaches.this, listId, importGpxAttachementFinishedHandler).importGPX();
+ new GPXImporter(CacheListActivity.this, listId, importGpxAttachementFinishedHandler).importGPX();
switchListById(listId);
}
}, true, 0);
@@ -503,7 +505,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
// refresh standard list if it has changed (new caches downloaded)
if (type == CacheListType.OFFLINE && listId >= StoredList.STANDARD_LIST_ID && search != null) {
- final SearchResult newSearch = cgData.getBatchOfStoredCaches(coords, Settings.getCacheType(), listId);
+ final SearchResult newSearch = DataStore.getBatchOfStoredCaches(coords, Settings.getCacheType(), listId);
if (newSearch.getTotal() != search.getTotal()) {
refreshCurrentList();
}
@@ -643,7 +645,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
item.setVisible(isNonDefaultList);
}
- final boolean multipleLists = cgData.getLists().size() >= 2;
+ final boolean multipleLists = DataStore.getLists().size() >= 2;
item = menu.findItem(MENU_SWITCH_LIST);
if (item != null) {
item.setVisible(multipleLists);
@@ -655,8 +657,8 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
setMenuItemLabel(menu, MENU_REMOVE_FROM_HISTORY, R.string.cache_remove_from_history, R.string.cache_clear_history);
setMenuItemLabel(menu, MENU_EXPORT, R.string.export, R.string.export);
- } catch (final Exception e) {
- Log.e("cgeocaches.onPrepareOptionsMenu", e);
+ } catch (final RuntimeException e) {
+ Log.e("CacheListActivity.onPrepareOptionsMenu", e);
}
return true;
@@ -733,7 +735,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
invalidateOptionsMenuCompatible();
return false;
case MENU_SWITCH_LIST:
- selectList(null);
+ selectList();
invalidateOptionsMenuCompatible();
return false;
case MENU_FILTER:
@@ -832,7 +834,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
try {
adapterInfo = (AdapterContextMenuInfo) info;
} catch (final Exception e) {
- Log.w("cgeocaches.onCreateContextMenu", e);
+ Log.w("CacheListActivity.onCreateContextMenu", e);
}
if (adapterInfo == null || adapterInfo.position >= adapter.getCount()) {
@@ -866,7 +868,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
@Override
public void run(Integer newListId) {
- cgData.moveToList(adapter.getCheckedOrAllCaches(), newListId);
+ DataStore.moveToList(adapter.getCheckedOrAllCaches(), newListId);
adapter.setSelectMode(false);
refreshCurrentList();
@@ -889,7 +891,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
try {
adapterInfo = (AdapterContextMenuInfo) info;
} catch (final Exception e) {
- Log.w("cgeocaches.onContextItemSelected", e);
+ Log.w("CacheListActivity.onContextItemSelected", e);
}
final Geocache cache = adapterInfo != null ? getCacheFromAdapter(adapterInfo) : null;
@@ -924,7 +926,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
@Override
public void run(Integer newListId) {
- cgData.moveToList(Collections.singletonList(cache), newListId);
+ DataStore.moveToList(Collections.singletonList(cache), newListId);
adapter.setSelectMode(false);
refreshCurrentList();
}
@@ -1265,7 +1267,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
Log.i("Waiting for next cache " + delay + " ms");
} catch (final Exception e) {
- Log.e("cgeocaches.LoadDetailsThread.sleep", e);
+ Log.e("CacheListActivity.LoadDetailsThread.sleep", e);
}
}
@@ -1283,7 +1285,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
Log.i(e.getMessage());
return false;
} catch (final Exception e) {
- Log.e("cgeocaches.LoadDetailsThread", e);
+ Log.e("CacheListActivity.LoadDetailsThread", e);
}
last = System.currentTimeMillis();
@@ -1326,7 +1328,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
if (responseFromWeb != null && responseFromWeb.getStatusLine().getStatusCode() == 200) {
final String response = Network.getResponseData(responseFromWeb);
- if (response.length() > 2) {
+ if (response != null && response.length() > 2) {
delay = 1;
handler.sendMessage(handler.obtainMessage(1, response));
yield();
@@ -1363,7 +1365,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
times = 0;
}
} catch (final InterruptedException e) {
- Log.e("cgeocaches.LoadFromWebThread.sleep", e);
+ Log.e("CacheListActivity.LoadFromWebThread.sleep", e);
}
}
@@ -1378,14 +1380,14 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
private final boolean removeListAfterwards;
public DropDetailsTask(boolean removeListAfterwards) {
- super(cgeocaches.this, null, res.getString(R.string.caches_drop_progress), true);
+ super(CacheListActivity.this, null, res.getString(R.string.caches_drop_progress), true);
this.removeListAfterwards = removeListAfterwards;
}
@Override
protected Void doInBackgroundInternal(Geocache[] caches) {
removeGeoAndDir();
- cgData.markDropped(Arrays.asList(caches));
+ DataStore.markDropped(Arrays.asList(caches));
startGeoAndDir();
return null;
}
@@ -1416,7 +1418,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
@Override
public void run() {
- cgData.clearLogsOffline(selected);
+ DataStore.clearLogsOffline(selected);
handler.sendEmptyMessage(MSG_DONE);
}
}
@@ -1429,7 +1431,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
showFooterLoadingCaches();
listFooter.setOnClickListener(null);
- getSupportLoaderManager().restartLoader(CacheListLoaderType.NEXT_PAGE.ordinal(), null, cgeocaches.this);
+ getSupportLoaderManager().restartLoader(CacheListLoaderType.NEXT_PAGE.ordinal(), null, CacheListActivity.this);
}
}
@@ -1442,17 +1444,14 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
}
}
- /**
- * @param view
- * unused here but needed since this method is referenced from XML layout
- */
- public void selectList(View view) {
- if (type != CacheListType.OFFLINE) {
+ public void selectList() {
+ if (!type.canSwitch) {
return;
}
new StoredList.UserInterface(this).promptForListSelection(R.string.list_title, getListSwitchingRunnable());
}
+ @NonNull
private RunnableWithArgument<Integer> getListSwitchingRunnable() {
return new RunnableWithArgument<Integer>() {
@@ -1468,7 +1467,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
return;
}
- final StoredList list = cgData.getList(id);
+ final StoredList list = DataStore.getList(id);
if (list == null) {
return;
}
@@ -1480,7 +1479,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
showProgress(true);
showFooterLoadingCaches();
- cgData.moveToList(adapter.getCheckedCaches(), listId);
+ DataStore.moveToList(adapter.getCheckedCaches(), listId);
currentLoader = (OfflineGeocacheListLoader) getSupportLoaderManager().initLoader(CacheListType.OFFLINE.ordinal(), new Bundle(), this);
currentLoader.reset();
@@ -1503,7 +1502,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
}
private void removeListInternal() {
- if (cgData.removeList(listId)) {
+ if (DataStore.removeList(listId)) {
showToast(res.getString(R.string.list_dialog_remove_ok));
switchListById(StoredList.STANDARD_LIST_ID);
} else {
@@ -1576,7 +1575,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
}
public static void startActivityOffline(final Context context) {
- final Intent cachesIntent = new Intent(context, cgeocaches.class);
+ final Intent cachesIntent = new Intent(context, CacheListActivity.class);
cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.OFFLINE);
context.startActivity(cachesIntent);
}
@@ -1585,7 +1584,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
if (!isValidUsername(context, userName)) {
return;
}
- final Intent cachesIntent = new Intent(context, cgeocaches.class);
+ final Intent cachesIntent = new Intent(context, CacheListActivity.class);
cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.OWNER);
cachesIntent.putExtra(Intents.EXTRA_USERNAME, userName);
context.startActivity(cachesIntent);
@@ -1593,7 +1592,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
private static boolean isValidUsername(AbstractActivity context, String username) {
if (StringUtils.isBlank(username)) {
- context.showToast(cgeoapplication.getInstance().getString(R.string.warn_no_username));
+ context.showToast(CgeoApplication.getInstance().getString(R.string.warn_no_username));
return false;
}
return true;
@@ -1603,7 +1602,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
if (!isValidUsername(context, userName)) {
return;
}
- final Intent cachesIntent = new Intent(context, cgeocaches.class);
+ final Intent cachesIntent = new Intent(context, CacheListActivity.class);
cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.USERNAME);
cachesIntent.putExtra(Intents.EXTRA_USERNAME, userName);
context.startActivity(cachesIntent);
@@ -1629,20 +1628,20 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
if (!isValidCoords(context, coordsNow)) {
return;
}
- final Intent cachesIntent = new Intent(context, cgeocaches.class);
+ final Intent cachesIntent = new Intent(context, CacheListActivity.class);
cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.NEAREST);
cachesIntent.putExtra(Intents.EXTRA_COORDS, coordsNow);
context.startActivity(cachesIntent);
}
public static void startActivityHistory(Context context) {
- final Intent cachesIntent = new Intent(context, cgeocaches.class);
+ final Intent cachesIntent = new Intent(context, CacheListActivity.class);
cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.HISTORY);
context.startActivity(cachesIntent);
}
public static void startActivityAddress(final Context context, final Geopoint coords, final String address) {
- final Intent addressIntent = new Intent(context, cgeocaches.class);
+ final Intent addressIntent = new Intent(context, CacheListActivity.class);
addressIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.ADDRESS);
addressIntent.putExtra(Intents.EXTRA_COORDS, coords);
addressIntent.putExtra(Intents.EXTRA_ADDRESS, address);
@@ -1653,7 +1652,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
if (!isValidCoords(context, coords)) {
return;
}
- final Intent cachesIntent = new Intent(context, cgeocaches.class);
+ final Intent cachesIntent = new Intent(context, CacheListActivity.class);
cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.COORDINATE);
cachesIntent.putExtra(Intents.EXTRA_COORDS, coords);
context.startActivity(cachesIntent);
@@ -1661,7 +1660,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
private static boolean isValidCoords(AbstractActivity context, Geopoint coords) {
if (coords == null) {
- context.showToast(cgeoapplication.getInstance().getString(R.string.warn_no_coordinates));
+ context.showToast(CgeoApplication.getInstance().getString(R.string.warn_no_coordinates));
return false;
}
return true;
@@ -1669,17 +1668,17 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
public static void startActivityKeyword(final AbstractActivity context, final String keyword) {
if (keyword == null) {
- context.showToast(cgeoapplication.getInstance().getString(R.string.warn_no_keyword));
+ context.showToast(CgeoApplication.getInstance().getString(R.string.warn_no_keyword));
return;
}
- final Intent cachesIntent = new Intent(context, cgeocaches.class);
+ final Intent cachesIntent = new Intent(context, CacheListActivity.class);
cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.KEYWORD);
cachesIntent.putExtra(Intents.EXTRA_KEYWORD, keyword);
context.startActivity(cachesIntent);
}
public static void startActivityMap(final Context context, final SearchResult search) {
- final Intent cachesIntent = new Intent(context, cgeocaches.class);
+ final Intent cachesIntent = new Intent(context, CacheListActivity.class);
cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.MAP);
cachesIntent.putExtra(Intents.EXTRA_SEARCH, search);
context.startActivity(cachesIntent);
@@ -1701,7 +1700,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity
listId = StoredList.STANDARD_LIST_ID;
title = res.getString(R.string.stored_caches_button);
} else {
- final StoredList list = cgData.getList(listId);
+ final StoredList list = DataStore.getList(listId);
// list.id may be different if listId was not valid
listId = list.id;
title = list.title;
diff --git a/main/src/cgeo/geocaching/CachePopup.java b/main/src/cgeo/geocaching/CachePopup.java
index 873801e..683ebe7 100644
--- a/main/src/cgeo/geocaching/CachePopup.java
+++ b/main/src/cgeo/geocaching/CachePopup.java
@@ -3,6 +3,7 @@ package cgeo.geocaching;
import cgeo.geocaching.activity.Progress;
import cgeo.geocaching.apps.cache.navi.NavigationAppFactory;
import cgeo.geocaching.geopoint.Geopoint;
+import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.network.Network;
import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.ui.CacheDetailsCreator;
diff --git a/main/src/cgeo/geocaching/cgeoapplication.java b/main/src/cgeo/geocaching/CgeoApplication.java
index 5a793f5..b725b0b 100644
--- a/main/src/cgeo/geocaching/cgeoapplication.java
+++ b/main/src/cgeo/geocaching/CgeoApplication.java
@@ -14,7 +14,7 @@ import android.os.Message;
import java.util.concurrent.atomic.AtomicBoolean;
-public class cgeoapplication extends Application {
+public class CgeoApplication extends Application {
private volatile GeoDataProvider geo;
private volatile DirectionProvider dir;
@@ -22,17 +22,17 @@ public class cgeoapplication extends Application {
public boolean showLoginToast = true; //login toast shown just once.
private boolean liveMapHintShown = false; // livemap hint has been shown
final private StatusUpdater statusUpdater = new StatusUpdater();
- private static cgeoapplication instance;
+ private static CgeoApplication instance;
- public cgeoapplication() {
+ public CgeoApplication() {
setInstance(this);
}
- private static void setInstance(final cgeoapplication application) {
+ private static void setInstance(final CgeoApplication application) {
instance = application;
}
- public static cgeoapplication getInstance() {
+ public static CgeoApplication getInstance() {
return instance;
}
@@ -46,15 +46,15 @@ public class cgeoapplication extends Application {
@Override
public void onLowMemory() {
Log.i("Cleaning applications cache.");
- cgData.removeAllFromCache();
+ DataStore.removeAllFromCache();
}
@Override
public void onTerminate() {
Log.d("Terminating c:geo…");
- cgData.clean();
- cgData.closeDb();
+ DataStore.clean();
+ DataStore.closeDb();
super.onTerminate();
}
@@ -82,7 +82,7 @@ public class cgeoapplication extends Application {
@Override
public void run() {
- atomic.set(cgData.moveDatabase());
+ atomic.set(DataStore.moveDatabase());
handler.sendMessage(handler.obtainMessage());
}
};
diff --git a/main/src/cgeo/geocaching/CompassActivity.java b/main/src/cgeo/geocaching/CompassActivity.java
index 002f00e..b7bed7d 100644
--- a/main/src/cgeo/geocaching/CompassActivity.java
+++ b/main/src/cgeo/geocaching/CompassActivity.java
@@ -134,7 +134,7 @@ public class CompassActivity extends AbstractActivity {
setCacheInfo();
// Force a refresh of location and direction when data is available.
- final cgeoapplication app = cgeoapplication.getInstance();
+ final CgeoApplication app = CgeoApplication.getInstance();
final IGeoData geo = app.currentGeo();
if (geo != null) {
geoDirHandler.update(geo);
@@ -282,7 +282,7 @@ public class CompassActivity extends AbstractActivity {
if (!Settings.isUseCompass() || geo.getSpeed() > 5) { // use GPS when speed is higher than 18 km/h
updateNorthHeading(geo.getBearing());
}
- } catch (Exception e) {
+ } catch (RuntimeException e) {
Log.w("Failed to LocationUpdater location.");
}
}
diff --git a/main/src/cgeo/geocaching/cgData.java b/main/src/cgeo/geocaching/DataStore.java
index 9d636f9..507b042 100644
--- a/main/src/cgeo/geocaching/cgData.java
+++ b/main/src/cgeo/geocaching/DataStore.java
@@ -13,6 +13,9 @@ import cgeo.geocaching.enumerations.WaypointType;
import cgeo.geocaching.files.LocalStorage;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Viewport;
+import cgeo.geocaching.list.AbstractList;
+import cgeo.geocaching.list.PseudoList;
+import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.FileUtils;
import cgeo.geocaching.utils.Log;
@@ -20,6 +23,7 @@ import cgeo.geocaching.utils.Log;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jdt.annotation.NonNull;
import android.content.ContentValues;
import android.content.Context;
@@ -51,9 +55,9 @@ import java.util.Map.Entry;
import java.util.Set;
import java.util.regex.Pattern;
-public class cgData {
+public class DataStore {
- private cgData() {
+ private DataStore() {
// utility class
}
@@ -293,10 +297,10 @@ public class cgData {
}
try {
- final DbHelper dbHelper = new DbHelper(new DBContext(cgeoapplication.getInstance()));
+ final DbHelper dbHelper = new DbHelper(new DBContext(CgeoApplication.getInstance()));
database = dbHelper.getWritableDatabase();
} catch (Exception e) {
- Log.e("cgData.init: unable to open database for R/W", e);
+ Log.e("DataStore.init: unable to open database for R/W", e);
}
}
@@ -756,7 +760,7 @@ public class cgData {
// to NPE traces.
final int staleHistorySearches = db.delete(dbTableSearchDestionationHistory, "date is null", null);
if (staleHistorySearches > 0) {
- Log.w(String.format(Locale.getDefault(), "cgData.dbHelper.onOpen: removed %d bad search history entries", staleHistorySearches));
+ Log.w(String.format(Locale.getDefault(), "DataStore.dbHelper.onOpen: removed %d bad search history entries", staleHistorySearches));
}
}
@@ -859,7 +863,7 @@ public class cgData {
return getFirstColumn(cursor);
} catch (final Exception e) {
- Log.e("cgData.allDetailedThere", e);
+ Log.e("DataStore.allDetailedThere", e);
return new String[0];
}
}
@@ -906,7 +910,7 @@ public class cgData {
cursor.close();
} catch (final Exception e) {
- Log.e("cgData.isThere", e);
+ Log.e("DataStore.isThere", e);
}
if (detailed && dataDetailed == 0) {
@@ -953,7 +957,7 @@ public class cgData {
} catch (SQLiteDoneException e) {
// Do nothing, it only means we have no information on the cache
} catch (Exception e) {
- Log.e("cgData.isOffline", e);
+ Log.e("DataStore.isOffline", e);
}
return false;
@@ -974,7 +978,7 @@ public class cgData {
} catch (SQLiteDoneException e) {
// Do nothing, it only means we have no information on the cache
} catch (Exception e) {
- Log.e("cgData.getGeocodeForGuid", e);
+ Log.e("DataStore.getGeocodeForGuid", e);
}
return null;
@@ -995,7 +999,7 @@ public class cgData {
} catch (SQLiteDoneException e) {
// Do nothing, it only means we have no information on the cache
} catch (Exception e) {
- Log.e("cgData.getCacheidForGeocode", e);
+ Log.e("DataStore.getCacheidForGeocode", e);
}
return null;
@@ -1496,7 +1500,7 @@ public class cgData {
}
if (remaining.size() >= 1) {
- Log.d("cgData.loadCaches(" + remaining.toString() + ") returned no results");
+ Log.d("DataStore.loadCaches(" + remaining.toString() + ") returned no results");
}
return result;
}
@@ -1527,7 +1531,7 @@ public class cgData {
}
query.append(" WHERE ").append(dbTableCaches).append('.');
- query.append(cgData.whereGeocodeIn(geocodes));
+ query.append(DataStore.whereGeocodeIn(geocodes));
Cursor cursor = database.rawQuery(query.toString(), null);
try {
@@ -1535,7 +1539,7 @@ public class cgData {
int logIndex = -1;
while (cursor.moveToNext()) {
- Geocache cache = cgData.createCacheFromDatabaseContent(cursor);
+ Geocache cache = DataStore.createCacheFromDatabaseContent(cursor);
if (loadFlags.contains(LoadFlag.LOAD_ATTRIBUTES)) {
cache.setAttributes(loadAttributes(cache.getGeocode()));
@@ -1716,7 +1720,7 @@ public class cgData {
null,
"1");
- Log.d("cgData.loadWaypoint(" + id + ")");
+ Log.d("DataStore.loadWaypoint(" + id + ")");
final Waypoint waypoint = cursor.moveToFirst() ? createWaypointFromDatabaseContent(cursor) : null;
@@ -2018,7 +2022,7 @@ public class cgData {
reasonIndex = 1;
}
String listKey;
- if (list == StoredList.ALL_LIST_ID) {
+ if (list == PseudoList.ALL_LIST.id) {
sql.append(" and reason > 0");
listKey = "all_list";
} else {
@@ -2032,12 +2036,12 @@ public class cgData {
if (cacheType != CacheType.ALL) {
compiledStmnt.bindString(1, cacheType.id);
}
- if (list != StoredList.ALL_LIST_ID) {
+ if (list != PseudoList.ALL_LIST.id) {
compiledStmnt.bindLong(reasonIndex, list);
}
return (int) compiledStmnt.simpleQueryForLong();
} catch (Exception e) {
- Log.e("cgData.loadAllStoredCachesCount", e);
+ Log.e("DataStore.loadAllStoredCachesCount", e);
}
return 0;
@@ -2049,7 +2053,7 @@ public class cgData {
try {
return (int) PreparedStatements.getCountHistoryCaches().simpleQueryForLong();
} catch (Exception e) {
- Log.e("cgData.getAllHistoricCachesCount", e);
+ Log.e("DataStore.getAllHistoricCachesCount", e);
}
return 0;
@@ -2075,7 +2079,7 @@ public class cgData {
final StringBuilder selection = new StringBuilder();
selection.append("reason ");
- selection.append(listId != StoredList.ALL_LIST_ID ? "=" + Math.max(listId, 1) : ">= " + StoredList.STANDARD_LIST_ID);
+ selection.append(listId != PseudoList.ALL_LIST.id ? "=" + Math.max(listId, 1) : ">= " + StoredList.STANDARD_LIST_ID);
selection.append(" and detailed = 1 ");
String[] selectionArgs = null;
@@ -2114,7 +2118,7 @@ public class cgData {
cursor.close();
} catch (final Exception e) {
- Log.e("cgData.loadBatchOfStoredGeocodes", e);
+ Log.e("DataStore.loadBatchOfStoredGeocodes", e);
}
return geocodes;
@@ -2151,7 +2155,7 @@ public class cgData {
}
cursor.close();
} catch (Exception e) {
- Log.e("cgData.loadBatchOfHistoricGeocodes", e);
+ Log.e("DataStore.loadBatchOfHistoricGeocodes", e);
}
return geocodes;
@@ -2221,7 +2225,7 @@ public class cgData {
cursor.close();
} catch (final Exception e) {
- Log.e("cgData.loadInViewport", e);
+ Log.e("DataStore.loadInViewport", e);
}
return new SearchResult(geocodes);
@@ -2285,7 +2289,7 @@ public class cgData {
removeCaches(geocodes, LoadFlags.REMOVE_ALL);
}
} catch (final Exception e) {
- Log.w("cgData.clean", e);
+ Log.w("DataStore.clean", e);
}
Log.d("Database clean: finished");
@@ -2356,11 +2360,11 @@ public class cgData {
public static boolean saveLogOffline(String geocode, Date date, LogType type, String log) {
if (StringUtils.isBlank(geocode)) {
- Log.e("cgData.saveLogOffline: cannot log a blank geocode");
+ Log.e("DataStore.saveLogOffline: cannot log a blank geocode");
return false;
}
if (LogType.UNKNOWN == type && StringUtils.isBlank(log)) {
- Log.e("cgData.saveLogOffline: cannot log an unknown log type and no message");
+ Log.e("DataStore.saveLogOffline: cannot log an unknown log type and no message");
return false;
}
@@ -2451,7 +2455,7 @@ public class cgData {
return logCount.simpleQueryForLong() > 0;
}
} catch (Exception e) {
- Log.e("cgData.hasLogOffline", e);
+ Log.e("DataStore.hasLogOffline", e);
}
return false;
@@ -2479,10 +2483,11 @@ public class cgData {
}
}
+ @NonNull
public static List<StoredList> getLists() {
init();
- final Resources res = cgeoapplication.getInstance().getResources();
+ final Resources res = CgeoApplication.getInstance().getResources();
final List<StoredList> lists = new ArrayList<StoredList>();
lists.add(new StoredList(StoredList.STANDARD_LIST_ID, res.getString(R.string.list_inbox), (int) PreparedStatements.getCountCachesOnStandardList().simpleQueryForLong()));
@@ -2498,7 +2503,7 @@ public class cgData {
lists.addAll(storedLists);
cursor.close();
} catch (final Exception e) {
- Log.e("cgData.readLists", e);
+ Log.e("DataStore.readLists", e);
}
return lists;
}
@@ -2534,9 +2539,9 @@ public class cgData {
}
}
- Resources res = cgeoapplication.getInstance().getResources();
- if (id == StoredList.ALL_LIST_ID) {
- return new StoredList(StoredList.ALL_LIST_ID, res.getString(R.string.list_all_lists), getAllCachesCount());
+ Resources res = CgeoApplication.getInstance().getResources();
+ if (id == PseudoList.ALL_LIST.id) {
+ return new StoredList(PseudoList.ALL_LIST.id, res.getString(R.string.list_all_lists), getAllCachesCount());
}
// fall back to standard list in case of invalid list id
@@ -2651,7 +2656,11 @@ public class cgData {
}
public static void moveToList(final List<Geocache> caches, final int listId) {
- if (listId == StoredList.ALL_LIST_ID) {
+ final AbstractList list = AbstractList.getListById(listId);
+ if (list == null) {
+ return;
+ }
+ if (!list.isConcrete()) {
return;
}
if (caches.isEmpty()) {
@@ -2738,7 +2747,7 @@ public class cgData {
} catch (SQLiteDoneException e) {
// Do nothing, it only means we have no information on the cache
} catch (Exception e) {
- Log.e("cgData.getCacheDescription", e);
+ Log.e("DataStore.getCacheDescription", e);
}
return partial;
@@ -2848,7 +2857,7 @@ public class cgData {
}
public static boolean saveChangedCache(Geocache cache) {
- return cgData.saveCache(cache, cache.getStorageLocation().contains(StorageLocation.DATABASE) ? LoadFlags.SAVE_ALL : EnumSet.of(SaveFlag.SAVE_CACHE));
+ return DataStore.saveCache(cache, cache.getStorageLocation().contains(StorageLocation.DATABASE) ? LoadFlags.SAVE_ALL : EnumSet.of(SaveFlag.SAVE_CACHE));
}
private static class PreparedStatements {
@@ -2910,7 +2919,7 @@ public class cgData {
}
private static SQLiteStatement getLogCountOfGeocode() {
- return getStatement("LogCountFromGeocode", "SELECT count(_id) FROM " + cgData.dbTableLogsOffline + " WHERE geocode = ?");
+ return getStatement("LogCountFromGeocode", "SELECT count(_id) FROM " + DataStore.dbTableLogsOffline + " WHERE geocode = ?");
}
private static SQLiteStatement getCountCachesOnStandardList() {
@@ -2960,7 +2969,7 @@ public class cgData {
return null;
}
- return cgData.getBounds(Collections.singleton(geocode));
+ return DataStore.getBounds(Collections.singleton(geocode));
}
public static void clearVisitDate(String[] selected) {
@@ -2968,18 +2977,18 @@ public class cgData {
}
public static SearchResult getBatchOfStoredCaches(Geopoint coords, CacheType cacheType, int listId) {
- final Set<String> geocodes = cgData.loadBatchOfStoredGeocodes(coords, cacheType, listId);
- return new SearchResult(geocodes, cgData.getAllStoredCachesCount(cacheType, listId));
+ final Set<String> geocodes = DataStore.loadBatchOfStoredGeocodes(coords, cacheType, listId);
+ return new SearchResult(geocodes, DataStore.getAllStoredCachesCount(cacheType, listId));
}
public static SearchResult getHistoryOfCaches(boolean detailedOnly, CacheType cacheType) {
- final Set<String> geocodes = cgData.loadBatchOfHistoricGeocodes(detailedOnly, cacheType);
- return new SearchResult(geocodes, cgData.getAllHistoryCachesCount());
+ final Set<String> geocodes = DataStore.loadBatchOfHistoricGeocodes(detailedOnly, cacheType);
+ return new SearchResult(geocodes, DataStore.getAllHistoryCachesCount());
}
public static boolean saveWaypoint(int id, String geocode, Waypoint waypoint) {
- if (cgData.saveWaypointInternal(id, geocode, waypoint)) {
- cgData.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE));
+ if (DataStore.saveWaypointInternal(id, geocode, waypoint)) {
+ DataStore.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE));
return true;
}
return false;
@@ -2987,7 +2996,7 @@ public class cgData {
public static Set<String> getCachedMissingFromSearch(final SearchResult searchResult, final Set<Tile> tiles, final IConnector connector, final int maxZoom) {
- // get cached cgeocaches
+ // get cached CacheListActivity
final Set<String> cachedGeocodes = new HashSet<String>();
for (Tile tile : tiles) {
cachedGeocodes.addAll(cacheCache.getInViewport(tile.getViewport(), CacheType.ALL));
diff --git a/main/src/cgeo/geocaching/EditWaypointActivity.java b/main/src/cgeo/geocaching/EditWaypointActivity.java
index 56ee959..ad6d743 100644
--- a/main/src/cgeo/geocaching/EditWaypointActivity.java
+++ b/main/src/cgeo/geocaching/EditWaypointActivity.java
@@ -107,14 +107,14 @@ public class EditWaypointActivity extends AbstractActivity {
note.setText(StringUtils.trimToEmpty(waypoint.getNote()));
}
}
- final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_ONLY);
+ final Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_ONLY);
setCoordsModificationVisibility(ConnectorFactory.getConnector(geocode), cache);
}
if (own) {
initializeWaypointTypeSelector();
}
- } catch (Exception e) {
+ } catch (RuntimeException e) {
Log.e("EditWaypointActivity.loadWaypointHandler", e);
} finally {
if (waitDialog != null) {
@@ -168,7 +168,7 @@ public class EditWaypointActivity extends AbstractActivity {
initializeWaypointTypeSelector();
if (geocode != null) {
- final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
+ final Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
setCoordsModificationVisibility(ConnectorFactory.getConnector(geocode), cache);
}
}
@@ -259,7 +259,7 @@ public class EditWaypointActivity extends AbstractActivity {
@Override
public void run() {
try {
- waypoint = cgData.loadWaypoint(id);
+ waypoint = DataStore.loadWaypoint(id);
loadWaypointHandler.sendMessage(Message.obtain());
} catch (Exception e) {
@@ -278,7 +278,7 @@ public class EditWaypointActivity extends AbstractActivity {
} catch (Geopoint.ParseException e) {
// button text is blank when creating new waypoint
}
- Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS);
+ Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS);
CoordinatesInputDialog coordsDialog = new CoordinatesInputDialog(EditWaypointActivity.this, cache, gp, app.currentGeo());
coordsDialog.setCancelable(true);
coordsDialog.setOnCoordinateUpdate(new CoordinatesInputDialog.CoordinateUpdate() {
@@ -416,14 +416,14 @@ public class EditWaypointActivity extends AbstractActivity {
waypoint.setVisited(visited);
waypoint.setId(id);
- Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS);
+ Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS);
if (cache == null) {
finishHandler.sendEmptyMessage(SAVE_ERROR);
return null;
}
Waypoint oldWaypoint = cache.getWaypointById(id);
if (cache.addOrChangeWaypoint(waypoint, true)) {
- cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
+ DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
if (!StaticMapsProvider.hasAllStaticMapsForWaypoint(geocode, waypoint)) {
StaticMapsProvider.removeWpStaticMaps(oldWaypoint, geocode);
if (Settings.isStoreOfflineWpMaps()) {
@@ -432,13 +432,13 @@ public class EditWaypointActivity extends AbstractActivity {
}
if (modifyLocal.isChecked() || modifyBoth.isChecked()) {
if (!cache.hasUserModifiedCoords()) {
- final Waypoint origWaypoint = new Waypoint(cgeoapplication.getInstance().getString(R.string.cache_coordinates_original), WaypointType.ORIGINAL, false);
+ final Waypoint origWaypoint = new Waypoint(CgeoApplication.getInstance().getString(R.string.cache_coordinates_original), WaypointType.ORIGINAL, false);
origWaypoint.setCoords(cache.getCoords());
cache.addOrChangeWaypoint(origWaypoint, false);
cache.setUserModifiedCoords(true);
}
cache.setCoords(waypoint.getCoords());
- cgData.saveChangedCache(cache);
+ DataStore.saveChangedCache(cache);
}
if (modifyBoth.isChecked() && waypoint.getCoords() != null) {
finishHandler.sendEmptyMessage(UPLOAD_START);
diff --git a/main/src/cgeo/geocaching/Geocache.java b/main/src/cgeo/geocaching/Geocache.java
index 96fbc06..373b232 100644
--- a/main/src/cgeo/geocaching/Geocache.java
+++ b/main/src/cgeo/geocaching/Geocache.java
@@ -1,8 +1,7 @@
package cgeo.geocaching;
-import cgeo.geocaching.cgData.StorageLocation;
+import cgeo.geocaching.DataStore.StorageLocation;
import cgeo.geocaching.activity.ActivityMixin;
-import cgeo.geocaching.activity.IAbstractActivity;
import cgeo.geocaching.connector.ConnectorFactory;
import cgeo.geocaching.connector.IConnector;
import cgeo.geocaching.connector.ILoggingManager;
@@ -22,6 +21,7 @@ import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.enumerations.WaypointType;
import cgeo.geocaching.files.GPXParser;
import cgeo.geocaching.geopoint.Geopoint;
+import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.network.HtmlImage;
import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.CancellableHandler;
@@ -33,6 +33,7 @@ import cgeo.geocaching.utils.MatcherWrapper;
import cgeo.geocaching.utils.UncertainProperty;
import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
@@ -112,20 +113,20 @@ public class Geocache implements ICache, IWaypoint {
private final List<String> attributes = new LazyInitializedList<String>() {
@Override
public List<String> call() {
- return cgData.loadAttributes(geocode);
+ return DataStore.loadAttributes(geocode);
}
};
private final List<Waypoint> waypoints = new LazyInitializedList<Waypoint>() {
@Override
public List<Waypoint> call() {
- return cgData.loadWaypoints(geocode);
+ return DataStore.loadWaypoints(geocode);
}
};
private List<Image> spoilers = null;
private final List<LogEntry> logs = new LazyInitializedList<LogEntry>() {
@Override
public List<LogEntry> call() {
- return cgData.loadLogs(geocode);
+ return DataStore.loadLogs(geocode);
}
};
private List<Trackable> inventory = null;
@@ -447,16 +448,16 @@ public class Geocache implements ICache, IWaypoint {
return cacheType.getValue().isEvent();
}
- public void logVisit(final IAbstractActivity fromActivity) {
+ public void logVisit(final Activity fromActivity) {
if (!getConnector().canLog(this)) {
- fromActivity.showToast(((Activity) fromActivity).getResources().getString(R.string.err_cannot_log_visit));
+ ActivityMixin.showToast(fromActivity, fromActivity.getResources().getString(R.string.err_cannot_log_visit));
return;
}
- final Intent logVisitIntent = new Intent((Activity) fromActivity, LogCacheActivity.class);
+ final Intent logVisitIntent = new Intent(fromActivity, LogCacheActivity.class);
logVisitIntent.putExtra(LogCacheActivity.EXTRAS_ID, cacheId);
logVisitIntent.putExtra(LogCacheActivity.EXTRAS_GEOCODE, geocode);
- ((Activity) fromActivity).startActivity(logVisitIntent);
+ fromActivity.startActivity(logVisitIntent);
}
public void logOffline(final Activity fromActivity, final LogType logType) {
@@ -469,12 +470,12 @@ public class Geocache implements ICache, IWaypoint {
if (logType == LogType.UNKNOWN) {
return;
}
- final boolean status = cgData.saveLogOffline(geocode, date.getTime(), logType, log);
+ final boolean status = DataStore.saveLogOffline(geocode, date.getTime(), logType, log);
final Resources res = fromActivity.getResources();
if (status) {
ActivityMixin.showToast(fromActivity, res.getString(R.string.info_log_saved));
- cgData.saveVisitDate(geocode);
+ DataStore.saveVisitDate(geocode);
logOffline = Boolean.TRUE;
notifyChange();
@@ -484,7 +485,7 @@ public class Geocache implements ICache, IWaypoint {
}
public void clearOfflineLog() {
- cgData.clearLogOffline(geocode);
+ DataStore.clearLogOffline(geocode);
notifyChange();
}
@@ -568,7 +569,7 @@ public class Geocache implements ICache, IWaypoint {
return getConnector().supportsOwnCoordinates();
}
- public ILoggingManager getLoggingManager(Activity activity) {
+ public ILoggingManager getLoggingManager(final LogCacheActivity activity) {
return getConnector().getLoggingManager(activity, this);
}
@@ -602,21 +603,21 @@ public class Geocache implements ICache, IWaypoint {
@Override
public boolean isArchived() {
- return (archived != null && archived.booleanValue());
+ return BooleanUtils.isTrue(archived);
}
@Override
public boolean isDisabled() {
- return (disabled != null && disabled.booleanValue());
+ return BooleanUtils.isTrue(disabled);
}
@Override
public boolean isPremiumMembersOnly() {
- return (premiumMembersOnly != null && premiumMembersOnly.booleanValue());
+ return BooleanUtils.isTrue(premiumMembersOnly);
}
public void setPremiumMembersOnly(boolean members) {
- this.premiumMembersOnly = Boolean.valueOf(members);
+ this.premiumMembersOnly = members;
}
@Override
@@ -664,7 +665,7 @@ public class Geocache implements ICache, IWaypoint {
*/
private void initializeCacheTexts() {
if (description == null || shortdesc == null || hint == null || location == null) {
- final Geocache partial = cgData.loadCacheTexts(this.getGeocode());
+ final Geocache partial = DataStore.loadCacheTexts(this.getGeocode());
if (description == null) {
setDescription(partial.getDescription());
}
@@ -767,16 +768,16 @@ public class Geocache implements ICache, IWaypoint {
@Override
public boolean isFound() {
- return (found != null && found.booleanValue());
+ return BooleanUtils.isTrue(found);
}
@Override
public boolean isFavorite() {
- return (favorite != null && favorite.booleanValue());
+ return BooleanUtils.isTrue(favorite);
}
public void setFavorite(boolean favorite) {
- this.favorite = Boolean.valueOf(favorite);
+ this.favorite = favorite;
}
@Override
@@ -990,11 +991,11 @@ public class Geocache implements ICache, IWaypoint {
@Override
public boolean isOnWatchlist() {
- return (onWatchlist != null && onWatchlist.booleanValue());
+ return BooleanUtils.isTrue(onWatchlist);
}
public void setOnWatchlist(boolean onWatchlist) {
- this.onWatchlist = Boolean.valueOf(onWatchlist);
+ this.onWatchlist = onWatchlist;
}
/**
@@ -1028,7 +1029,7 @@ public class Geocache implements ICache, IWaypoint {
}
}
}
- return saveToDatabase && cgData.saveWaypoints(this);
+ return saveToDatabase && DataStore.saveWaypoints(this);
}
/**
@@ -1063,11 +1064,11 @@ public class Geocache implements ICache, IWaypoint {
}
public boolean isLogOffline() {
- return (logOffline != null && logOffline.booleanValue());
+ return BooleanUtils.isTrue(logOffline);
}
public void setLogOffline(boolean logOffline) {
- this.logOffline = Boolean.valueOf(logOffline);
+ this.logOffline = logOffline;
}
public boolean isStatusChecked() {
@@ -1140,15 +1141,15 @@ public class Geocache implements ICache, IWaypoint {
}
public void setDisabled(boolean disabled) {
- this.disabled = Boolean.valueOf(disabled);
+ this.disabled = disabled;
}
public void setArchived(boolean archived) {
- this.archived = Boolean.valueOf(archived);
+ this.archived = archived;
}
public void setFound(boolean found) {
- this.found = Boolean.valueOf(found);
+ this.found = found;
}
public void setAttributes(List<String> attributes) {
@@ -1244,7 +1245,7 @@ public class Geocache implements ICache, IWaypoint {
// when waypoint was edited, finalDefined may have changed
resetFinalDefined();
}
- return saveToDatabase && cgData.saveWaypoint(waypoint.getId(), geocode, waypoint);
+ return saveToDatabase && DataStore.saveWaypoint(waypoint.getId(), geocode, waypoint);
}
public boolean hasWaypoints() {
@@ -1295,9 +1296,9 @@ public class Geocache implements ICache, IWaypoint {
final int index = getWaypointIndex(original);
final Waypoint copy = new Waypoint(original);
copy.setUserDefined();
- copy.setName(cgeoapplication.getInstance().getString(R.string.waypoint_copy_of) + " " + copy.getName());
+ copy.setName(CgeoApplication.getInstance().getString(R.string.waypoint_copy_of) + " " + copy.getName());
waypoints.add(index + 1, copy);
- return cgData.saveWaypoint(-1, geocode, copy);
+ return DataStore.saveWaypoint(-1, geocode, copy);
}
/**
@@ -1317,8 +1318,8 @@ public class Geocache implements ICache, IWaypoint {
if (waypoint.isUserDefined()) {
final int index = getWaypointIndex(waypoint);
waypoints.remove(index);
- cgData.deleteWaypoint(waypoint.getId());
- cgData.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE));
+ DataStore.deleteWaypoint(waypoint.getId());
+ DataStore.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE));
// Check status if Final is defined
if (waypoint.isFinalWithCoords()) {
resetFinalDefined();
@@ -1337,8 +1338,8 @@ public class Geocache implements ICache, IWaypoint {
public void deleteWaypointForce(Waypoint waypoint) {
final int index = getWaypointIndex(waypoint);
waypoints.remove(index);
- cgData.deleteWaypoint(waypoint.getId());
- cgData.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE));
+ DataStore.deleteWaypoint(waypoint.getId());
+ DataStore.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE));
resetFinalDefined();
}
@@ -1406,7 +1407,7 @@ public class Geocache implements ICache, IWaypoint {
if (point.getLatitudeE6() != 0 && point.getLongitudeE6() != 0 &&
((point.getLatitudeE6() % 1000) != 0 || (point.getLongitudeE6() % 1000) != 0) &&
!hasIdenticalWaypoint(point)) {
- final String name = cgeoapplication.getInstance().getString(R.string.cache_personal_note) + " " + count;
+ final String name = CgeoApplication.getInstance().getString(R.string.cache_personal_note) + " " + count;
final String potentialWaypointType = note.substring(Math.max(0, matcher.start() - 15));
final Waypoint waypoint = new Waypoint(name, parseWaypointType(potentialWaypointType), false);
waypoint.setCoords(point);
@@ -1511,8 +1512,8 @@ public class Geocache implements ICache, IWaypoint {
public void drop(Handler handler) {
try {
- cgData.markDropped(Collections.singletonList(this));
- cgData.removeCache(getGeocode(), EnumSet.of(RemoveFlag.REMOVE_CACHE));
+ DataStore.markDropped(Collections.singletonList(this));
+ DataStore.removeCache(getGeocode(), EnumSet.of(RemoveFlag.REMOVE_CACHE));
handler.sendMessage(Message.obtain());
} catch (final Exception e) {
@@ -1563,7 +1564,7 @@ public class Geocache implements ICache, IWaypoint {
}
public void refresh(int newListId, CancellableHandler handler) {
- cgData.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE));
+ DataStore.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE));
storeCache(null, geocode, newListId, true, handler);
}
@@ -1639,7 +1640,7 @@ public class Geocache implements ICache, IWaypoint {
}
cache.setListId(listId);
- cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
+ DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
if (CancellableHandler.isCancelled(handler)) {
return;
@@ -1661,9 +1662,9 @@ public class Geocache implements ICache, IWaypoint {
return null;
}
- if (!forceReload && listId == StoredList.TEMPORARY_LIST_ID && (cgData.isOffline(geocode, guid) || cgData.isThere(geocode, guid, true, true))) {
+ if (!forceReload && listId == StoredList.TEMPORARY_LIST_ID && (DataStore.isOffline(geocode, guid) || DataStore.isThere(geocode, guid, true, true))) {
final SearchResult search = new SearchResult();
- final String realGeocode = StringUtils.isNotBlank(geocode) ? geocode : cgData.getGeocodeForGuid(guid);
+ final String realGeocode = StringUtils.isNotBlank(geocode) ? geocode : DataStore.getGeocodeForGuid(guid);
search.addGeocode(realGeocode);
return search;
}
@@ -1708,7 +1709,7 @@ public class Geocache implements ICache, IWaypoint {
}
}
// 12 o'clock
- final String hourLocalized = cgeoapplication.getInstance().getString(R.string.cache_time_full_hours);
+ final String hourLocalized = CgeoApplication.getInstance().getString(R.string.cache_time_full_hours);
if (StringUtils.isNotBlank(hourLocalized)) {
final Pattern fullHours = Pattern.compile("\\b(\\d{1,2})\\s+" + Pattern.quote(hourLocalized), Pattern.CASE_INSENSITIVE);
final MatcherWrapper matcherHours = new MatcherWrapper(fullHours, getDescription());
@@ -1735,7 +1736,7 @@ public class Geocache implements ICache, IWaypoint {
* @return
*/
public boolean hasAttribute(CacheAttribute attribute, boolean yes) {
- Geocache fullCache = cgData.loadCache(getGeocode(), EnumSet.of(LoadFlag.LOAD_ATTRIBUTES));
+ Geocache fullCache = DataStore.loadCache(getGeocode(), EnumSet.of(LoadFlag.LOAD_ATTRIBUTES));
if (fullCache == null) {
fullCache = this;
}
diff --git a/main/src/cgeo/geocaching/GpxFileListActivity.java b/main/src/cgeo/geocaching/GpxFileListActivity.java
index 8b10d5b..dae52c4 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.list.StoredList;
import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.ui.GPXListAdapter;
diff --git a/main/src/cgeo/geocaching/ImageSelectActivity.java b/main/src/cgeo/geocaching/ImageSelectActivity.java
index e24c34a..790741f 100644
--- a/main/src/cgeo/geocaching/ImageSelectActivity.java
+++ b/main/src/cgeo/geocaching/ImageSelectActivity.java
@@ -9,6 +9,8 @@ import cgeo.geocaching.utils.ImageUtils;
import cgeo.geocaching.utils.Log;
import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import android.content.Intent;
import android.database.Cursor;
@@ -263,7 +265,8 @@ public class ImageSelectActivity extends AbstractActivity {
* @param filePath
* @return the scaled image path, or <tt>null</tt> if the image cannot be decoded
*/
- private String writeScaledImage(final String filePath) {
+ @Nullable
+ private String writeScaledImage(@NonNull final String filePath) {
scaleChoiceIndex = scaleView.getSelectedItemPosition();
final int maxXY = getResources().getIntArray(R.array.log_image_scale_values)[scaleChoiceIndex];
return ImageUtils.readScaleAndWriteImage(filePath, maxXY);
diff --git a/main/src/cgeo/geocaching/ImagesActivity.java b/main/src/cgeo/geocaching/ImagesActivity.java
index 0b80d53..5eeb621 100644
--- a/main/src/cgeo/geocaching/ImagesActivity.java
+++ b/main/src/cgeo/geocaching/ImagesActivity.java
@@ -58,7 +58,7 @@ public class ImagesActivity extends AbstractActivity {
return;
}
- offline = cgData.isOffline(geocode, null) && (imgType == ImageType.SpoilerImages
+ offline = DataStore.isOffline(geocode, null) && (imgType == ImageType.SpoilerImages
|| Settings.isStoreLogImages());
}
diff --git a/main/src/cgeo/geocaching/LogCacheActivity.java b/main/src/cgeo/geocaching/LogCacheActivity.java
index 78ec82d..98fee37 100644
--- a/main/src/cgeo/geocaching/LogCacheActivity.java
+++ b/main/src/cgeo/geocaching/LogCacheActivity.java
@@ -47,7 +47,6 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
-import java.util.Locale;
public class LogCacheActivity extends AbstractLoggingActivity implements DateDialog.DateDialogParent {
static final String EXTRAS_GEOCODE = "geocode";
@@ -80,7 +79,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
private ILoggingManager loggingManager;
// Data to be saved while reconfiguring
- private double rating;
+ private float rating;
private LogType typeSelected;
private Calendar date;
private String imageCaption;
@@ -215,13 +214,13 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
if (!postButton.isEnabled()) {
return res.getString(R.string.log_post_not_possible);
}
- if (!Settings.isGCvoteLogin() || !cache.supportsGCVote()) {
+ if (!GCVote.isVotingPossible(cache)) {
return res.getString(R.string.log_post);
}
- if (rating == 0) {
- return res.getString(R.string.log_post_no_rate);
+ if (GCVote.isValidRating(rating)) {
+ return res.getString(R.string.log_post_rate) + " " + GCVote.getRatingText(rating) + "*";
}
- return res.getString(R.string.log_post_rate) + " " + ratingTextValue(rating) + "*";
+ return res.getString(R.string.log_post_no_rate);
}
@Override
@@ -236,13 +235,13 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
}
if ((StringUtils.isBlank(cacheid)) && StringUtils.isNotBlank(geocode)) {
- cacheid = cgData.getCacheidForGeocode(geocode);
+ cacheid = DataStore.getCacheidForGeocode(geocode);
}
if (StringUtils.isBlank(geocode) && StringUtils.isNotBlank(cacheid)) {
- geocode = cgData.getGeocodeForGuid(cacheid);
+ geocode = DataStore.getGeocodeForGuid(cacheid);
}
- cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
+ cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
possibleLogTypes = cache.getPossibleLogTypes();
if (StringUtils.isNotBlank(cache.getName())) {
@@ -262,7 +261,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
// Restore previous state
if (savedInstanceState != null) {
- rating = savedInstanceState.getDouble(SAVED_STATE_RATING);
+ rating = savedInstanceState.getFloat(SAVED_STATE_RATING);
typeSelected = LogType.getById(savedInstanceState.getInt(SAVED_STATE_TYPE));
date.setTimeInMillis(savedInstanceState.getLong(SAVED_STATE_DATE));
imageCaption = savedInstanceState.getString(SAVED_STATE_IMAGE_CAPTION);
@@ -270,7 +269,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
imageUri = Uri.parse(savedInstanceState.getString(SAVED_STATE_IMAGE_URI));
} else {
// If log had been previously saved, load it now, otherwise initialize signature as needed
- final LogEntry log = cgData.loadLogOffline(geocode);
+ final LogEntry log = DataStore.loadLogOffline(geocode);
if (log != null) {
typeSelected = log.type;
date.setTime(new Date(log.date));
@@ -342,7 +341,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
private void setDefaultValues() {
date = Calendar.getInstance();
- rating = 0.0;
+ rating = GCVote.NO_RATING;
if (cache.isEventCache()) {
final Date eventDate = cache.getHiddenDate();
boolean expired = DateUtils.daysSince(eventDate.getTime()) >= 0;
@@ -418,8 +417,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
- final boolean voteAvailable = Settings.isGCvoteLogin() && StringUtils.isNotBlank(cache.getGuid()) && cache.supportsGCVote();
- menu.findItem(SUBMENU_VOTE).setVisible(voteAvailable);
+ menu.findItem(SUBMENU_VOTE).setVisible(GCVote.isVotingPossible(cache));
return true;
}
@@ -432,9 +430,9 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
final int id = item.getItemId();
if (id >= 10 && id <= 19) {
- rating = (id - 9) / 2.0;
- if (rating < 1) {
- rating = 0;
+ rating = (id - 9) / 2.0f;
+ if (!GCVote.isValidRating(rating)) {
+ rating = GCVote.NO_RATING;
}
updatePostButtonText();
return true;
@@ -443,10 +441,6 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
return false;
}
- private static String ratingTextValue(final double rating) {
- return String.format(Locale.getDefault(), "%.1f", rating);
- }
-
@Override
protected void onSaveInstanceState(final Bundle outState) {
super.onSaveInstanceState(outState);
@@ -533,7 +527,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
final LogResult logResult = loggingManager.postLog(cache, typeSelected, date, log, logPwd, trackables);
if (logResult.getPostLogResult() == StatusCode.NO_ERROR) {
- final LogEntry logNow = new LogEntry(date, typeSelected, log);
+ final LogEntry logNow = new LogEntry(date.getTimeInMillis(), typeSelected, log);
cache.getLogs().add(0, logNow);
@@ -542,7 +536,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
cache.setVisitedDate(new Date().getTime());
}
- cgData.saveChangedCache(cache);
+ DataStore.saveChangedCache(cache);
cache.clearOfflineLog();
if (typeSelected == LogType.FOUND_IT) {
@@ -550,7 +544,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
Twitter.postTweetCache(geocode);
}
}
- if (rating > 0) {
+ if (GCVote.isValidRating(rating)) {
GCVote.setRating(cache, rating);
}
@@ -559,14 +553,14 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
final String uploadedImageUrl = imageResult.getImageUri();
if (StringUtils.isNotEmpty(uploadedImageUrl)) {
logNow.addLogImage(new Image(uploadedImageUrl, imageCaption, imageDescription));
- cgData.saveChangedCache(cache);
+ DataStore.saveChangedCache(cache);
}
return imageResult.getPostResult();
}
}
return logResult.getPostLogResult();
- } catch (Exception e) {
+ } catch (RuntimeException e) {
Log.e("VisitCacheActivity.Poster.doInBackgroundInternal", e);
}
diff --git a/main/src/cgeo/geocaching/LogEntry.java b/main/src/cgeo/geocaching/LogEntry.java
index 0121424..3c9f2b6 100644
--- a/main/src/cgeo/geocaching/LogEntry.java
+++ b/main/src/cgeo/geocaching/LogEntry.java
@@ -9,7 +9,6 @@ import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
-import java.util.Calendar;
import java.util.Collections;
import java.util.List;
import java.util.regex.Pattern;
@@ -30,10 +29,6 @@ public final class LogEntry {
public String cacheName = ""; // used for trackables
public String cacheGuid = ""; // used for trackables
- public LogEntry(final Calendar date, final LogType type, final String text) {
- this(Settings.getUsername(), date.getTimeInMillis(), type, text);
- }
-
public LogEntry(final long dateInMilliSeconds, final LogType type, final String text) {
this(Settings.getUsername(), dateInMilliSeconds, type, text);
}
@@ -94,7 +89,7 @@ public final class LogEntry {
}
}
if (titles.isEmpty()) {
- titles.add(cgeoapplication.getInstance().getString(R.string.cache_log_image_default_title));
+ titles.add(CgeoApplication.getInstance().getString(R.string.cache_log_image_default_title));
}
return StringUtils.join(titles, ", ");
}
diff --git a/main/src/cgeo/geocaching/LogTrackableActivity.java b/main/src/cgeo/geocaching/LogTrackableActivity.java
index a45d584..129ae2a 100644
--- a/main/src/cgeo/geocaching/LogTrackableActivity.java
+++ b/main/src/cgeo/geocaching/LogTrackableActivity.java
@@ -130,7 +130,7 @@ public class LogTrackableActivity extends AbstractLoggingActivity implements Dat
}
}
- trackable = cgData.loadTrackable(geocode);
+ trackable = DataStore.loadTrackable(geocode);
if (StringUtils.isNotBlank(trackable.getName())) {
setTitle(res.getString(R.string.trackable_touch) + ": " + trackable.getName());
diff --git a/main/src/cgeo/geocaching/MainActivity.java b/main/src/cgeo/geocaching/MainActivity.java
index 0fd6759..16ce0f9 100644
--- a/main/src/cgeo/geocaching/MainActivity.java
+++ b/main/src/cgeo/geocaching/MainActivity.java
@@ -10,6 +10,7 @@ import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Units;
+import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.maps.CGeoMap;
import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.settings.SettingsActivity;
@@ -47,6 +48,7 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -141,7 +143,7 @@ public class MainActivity extends AbstractActivity {
navLocation.setText(StringUtils.join(addressParts, ", "));
}
- } catch (Exception e) {
+ } catch (RuntimeException e) {
// nothing
}
@@ -283,7 +285,7 @@ public class MainActivity extends AbstractActivity {
startActivity(new Intent(this, SettingsActivity.class));
return true;
case R.id.menu_history:
- cgeocaches.startActivityHistory(this);
+ CacheListActivity.startActivityHistory(this);
return true;
case R.id.menu_scan:
startScannerApplication();
@@ -366,7 +368,7 @@ public class MainActivity extends AbstractActivity {
@Override
public void run(final Integer selectedListId) {
Settings.saveLastList(selectedListId);
- cgeocaches.startActivityOffline(MainActivity.this);
+ CacheListActivity.startActivityOffline(MainActivity.this);
}
});
return true;
@@ -468,7 +470,7 @@ public class MainActivity extends AbstractActivity {
}
private void checkRestore() {
- if (!cgData.isNewlyCreatedDatebase() || null == DatabaseBackupUtils.getRestoreFile()) {
+ if (!DataStore.isNewlyCreatedDatebase() || null == DatabaseBackupUtils.getRestoreFile()) {
return;
}
new AlertDialog.Builder(this)
@@ -479,7 +481,7 @@ public class MainActivity extends AbstractActivity {
@Override
public void onClick(final DialogInterface dialog, final int id) {
dialog.dismiss();
- cgData.resetNewlyCreatedDatabase();
+ DataStore.resetNewlyCreatedDatabase();
DatabaseBackupUtils.restoreDatabase(MainActivity.this);
}
})
@@ -487,7 +489,7 @@ public class MainActivity extends AbstractActivity {
@Override
public void onClick(final DialogInterface dialog, final int id) {
dialog.cancel();
- cgData.resetNewlyCreatedDatabase();
+ DataStore.resetNewlyCreatedDatabase();
}
})
.create()
@@ -542,7 +544,7 @@ public class MainActivity extends AbstractActivity {
navAccuracy.setText(null);
navLocation.setText(res.getString(R.string.loc_trying));
}
- } catch (Exception e) {
+ } catch (RuntimeException e) {
Log.w("Failed to update location.");
}
}
@@ -567,7 +569,7 @@ public class MainActivity extends AbstractActivity {
}
nearestView.setPressed(true);
- cgeocaches.startActivityNearest(this, app.currentGeo().getCoords());
+ CacheListActivity.startActivityNearest(this, app.currentGeo().getCoords());
}
/**
@@ -576,7 +578,7 @@ public class MainActivity extends AbstractActivity {
*/
public void cgeoFindByOffline(final View v) {
findByOffline.setPressed(true);
- cgeocaches.startActivityOffline(this);
+ CacheListActivity.startActivityOffline(this);
}
/**
@@ -640,7 +642,7 @@ public class MainActivity extends AbstractActivity {
}
int checks = 0;
- while (!cgData.isInitialized()) {
+ while (!DataStore.isInitialized()) {
try {
wait(500);
checks++;
@@ -653,7 +655,7 @@ public class MainActivity extends AbstractActivity {
}
}
- countBubbleCnt = cgData.getAllCachesCount();
+ countBubbleCnt = DataStore.getAllCachesCount();
countBubbleHandler.sendEmptyMessage(0);
}
@@ -678,7 +680,7 @@ public class MainActivity extends AbstractActivity {
}
cleanupRunning = true;
- cgData.clean(more);
+ DataStore.clean(more);
cleanupRunning = false;
if (version > 0) {
@@ -721,7 +723,7 @@ public class MainActivity extends AbstractActivity {
final Geocoder geocoder = new Geocoder(MainActivity.this, Locale.getDefault());
final Geopoint coords = app.currentGeo().getCoords();
addresses = geocoder.getFromLocation(coords.getLatitude(), coords.getLongitude(), 1);
- } catch (Exception e) {
+ } catch (IOException e) {
Log.i("Failed to obtain address");
}
diff --git a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java
index 741414b..ddafb51 100644
--- a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java
+++ b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java
@@ -214,7 +214,7 @@ public class NavigateAnyPointActivity extends AbstractActivity {
private List<Destination> getHistoryOfSearchedLocations() {
if (historyOfSearchedLocations == null) {
// Load from database
- historyOfSearchedLocations = cgData.loadHistoryOfSearchedLocations();
+ historyOfSearchedLocations = DataStore.loadHistoryOfSearchedLocations();
}
return historyOfSearchedLocations;
@@ -331,7 +331,7 @@ public class NavigateAnyPointActivity extends AbstractActivity {
menu.findItem(R.id.menu_caches_around).setVisible(visible);
menu.findItem(R.id.menu_clear_history).setEnabled(!getHistoryOfSearchedLocations().isEmpty());
- } catch (Exception e) {
+ } catch (RuntimeException e) {
// nothing
}
@@ -377,7 +377,7 @@ public class NavigateAnyPointActivity extends AbstractActivity {
getHistoryOfSearchedLocations().add(0, loc);
// Save location
- cgData.saveSearchedDestination(loc);
+ DataStore.saveSearchedDestination(loc);
// Ensure to remove the footer
historyListView.removeFooterView(getEmptyHistoryFooter());
@@ -396,7 +396,7 @@ public class NavigateAnyPointActivity extends AbstractActivity {
getHistoryOfSearchedLocations().remove(destination);
// Save
- cgData.removeSearchedDestination(destination);
+ DataStore.removeSearchedDestination(destination);
if (getHistoryOfSearchedLocations().isEmpty()) {
if (historyListView.getFooterViewsCount() == 0) {
@@ -415,7 +415,7 @@ public class NavigateAnyPointActivity extends AbstractActivity {
getHistoryOfSearchedLocations().clear();
// Save
- cgData.clearSearchedDestinations();
+ DataStore.clearSearchedDestinations();
if (historyListView.getFooterViewsCount() == 0) {
historyListView.addFooterView(getEmptyHistoryFooter());
@@ -443,7 +443,7 @@ public class NavigateAnyPointActivity extends AbstractActivity {
return;
}
- cgeocaches.startActivityCoordinates(this, coords);
+ CacheListActivity.startActivityCoordinates(this, coords);
finish();
}
@@ -454,7 +454,7 @@ public class NavigateAnyPointActivity extends AbstractActivity {
try {
latButton.setHint(geo.getCoords().format(GeopointFormatter.Format.LAT_DECMINUTE_RAW));
lonButton.setHint(geo.getCoords().format(GeopointFormatter.Format.LON_DECMINUTE_RAW));
- } catch (final Exception e) {
+ } catch (final RuntimeException e) {
Log.w("Failed to update location.");
}
}
diff --git a/main/src/cgeo/geocaching/SearchActivity.java b/main/src/cgeo/geocaching/SearchActivity.java
index 57b391f..c6c13cf 100644
--- a/main/src/cgeo/geocaching/SearchActivity.java
+++ b/main/src/cgeo/geocaching/SearchActivity.java
@@ -142,7 +142,7 @@ public class SearchActivity extends AbstractActivity {
}
if (keywordSearch) { // keyword fallback, if desired by caller
- cgeocaches.startActivityKeyword(this, query.trim());
+ CacheListActivity.startActivityKeyword(this, query.trim());
return true;
}
@@ -171,7 +171,7 @@ public class SearchActivity extends AbstractActivity {
findByGeocodeFn();
}
});
- addHistoryEntries(geocodeEdit, cgData.getRecentGeocodesForSearch());
+ addHistoryEntries(geocodeEdit, DataStore.getRecentGeocodesForSearch());
displayByGeocode.setOnClickListener(new FindByGeocodeListener());
EditUtils.setActionListener((EditText) findViewById(R.id.keyword), new Runnable() {
@@ -214,7 +214,7 @@ public class SearchActivity extends AbstractActivity {
findTrackableFn();
}
});
- addHistoryEntries(trackable, cgData.getTrackableCodes());
+ addHistoryEntries(trackable, DataStore.getTrackableCodes());
disableSuggestions(trackable);
displayTrackable.setOnClickListener(new FindTrackableListener());
}
@@ -238,7 +238,7 @@ public class SearchActivity extends AbstractActivity {
lonEdit.setHint(geo.getCoords().format(GeopointFormatter.Format.LON_DECMINUTE_RAW));
}
}
- } catch (final Exception e) {
+ } catch (final RuntimeException e) {
Log.w("Failed to update location.");
}
}
@@ -281,7 +281,7 @@ public class SearchActivity extends AbstractActivity {
}
} else {
try {
- cgeocaches.startActivityCoordinates(this, new Geopoint(StringUtils.trim(latText), StringUtils.trim(lonText)));
+ CacheListActivity.startActivityCoordinates(this, new Geopoint(StringUtils.trim(latText), StringUtils.trim(lonText)));
} catch (final Geopoint.ParseException e) {
showToast(res.getString(e.resource));
}
@@ -305,7 +305,7 @@ public class SearchActivity extends AbstractActivity {
return;
}
- cgeocaches.startActivityKeyword(this, StringUtils.trim(keyText));
+ CacheListActivity.startActivityKeyword(this, StringUtils.trim(keyText));
}
private class FindByAddressListener implements View.OnClickListener {
@@ -344,7 +344,7 @@ public class SearchActivity extends AbstractActivity {
return;
}
- cgeocaches.startActivityUserName(this, StringUtils.trim(usernameText));
+ CacheListActivity.startActivityUserName(this, StringUtils.trim(usernameText));
}
private void findByOwnerFn() {
@@ -359,7 +359,7 @@ public class SearchActivity extends AbstractActivity {
return;
}
- cgeocaches.startActivityOwner(this, StringUtils.trim(usernameText));
+ CacheListActivity.startActivityOwner(this, StringUtils.trim(usernameText));
}
private class FindByGeocodeListener implements View.OnClickListener {
diff --git a/main/src/cgeo/geocaching/SearchResult.java b/main/src/cgeo/geocaching/SearchResult.java
index e637d1f..add7ce2 100644
--- a/main/src/cgeo/geocaching/SearchResult.java
+++ b/main/src/cgeo/geocaching/SearchResult.java
@@ -199,7 +199,7 @@ public class SearchResult implements Parcelable {
SearchResult result = new SearchResult(this);
result.geocodes.clear();
final ArrayList<Geocache> cachesForVote = new ArrayList<Geocache>();
- final Set<Geocache> caches = cgData.loadCaches(geocodes, LoadFlags.LOAD_CACHE_OR_DB);
+ final Set<Geocache> caches = DataStore.loadCaches(geocodes, LoadFlags.LOAD_CACHE_OR_DB);
int excluded = 0;
for (Geocache cache : caches) {
// Is there any reason to exclude the cache from the list?
@@ -220,11 +220,11 @@ public class SearchResult implements Parcelable {
}
public Geocache getFirstCacheFromResult(final EnumSet<LoadFlag> loadFlags) {
- return CollectionUtils.isNotEmpty(geocodes) ? cgData.loadCache(geocodes.iterator().next(), loadFlags) : null;
+ return CollectionUtils.isNotEmpty(geocodes) ? DataStore.loadCache(geocodes.iterator().next(), loadFlags) : null;
}
public Set<Geocache> getCachesFromSearchResult(final EnumSet<LoadFlag> loadFlags) {
- return cgData.loadCaches(geocodes, loadFlags);
+ return DataStore.loadCaches(geocodes, loadFlags);
}
/** Add the geocode to the search. No cache is loaded into the CacheCache */
@@ -243,7 +243,7 @@ public class SearchResult implements Parcelable {
/** Add the cache geocode to the search and store the cache in the CacheCache */
public boolean addAndPutInCache(final Geocache cache) {
addGeocode(cache.getGeocode());
- return cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_CACHE));
+ return DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_CACHE));
}
public boolean isEmpty() {
@@ -252,7 +252,7 @@ public class SearchResult implements Parcelable {
public boolean hasUnsavedCaches() {
for (final String geocode : getGeocodes()) {
- if (!cgData.isOffline(geocode, null)) {
+ if (!DataStore.isOffline(geocode, null)) {
return true;
}
}
diff --git a/main/src/cgeo/geocaching/StaticMapsActivity.java b/main/src/cgeo/geocaching/StaticMapsActivity.java
index 2268df9..0f03b34 100644
--- a/main/src/cgeo/geocaching/StaticMapsActivity.java
+++ b/main/src/cgeo/geocaching/StaticMapsActivity.java
@@ -117,7 +117,7 @@ public class StaticMapsActivity extends AbstractActivity {
for (int level = 1; level <= StaticMapsProvider.MAPS_LEVEL_MAX; level++) {
try {
if (waypointId != null) {
- final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
+ final Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
final Bitmap image = StaticMapsProvider.getWaypointMap(geocode, cache.getWaypointById(waypointId), level);
if (image != null) {
maps.add(image);
@@ -151,7 +151,7 @@ public class StaticMapsActivity extends AbstractActivity {
}
private boolean downloadStaticMaps() {
- final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
+ final Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
if (waypointId == null) {
showToast(res.getString(R.string.info_storing_static_maps));
StaticMapsProvider.storeCacheStaticMap(cache, true);
diff --git a/main/src/cgeo/geocaching/StaticMapsProvider.java b/main/src/cgeo/geocaching/StaticMapsProvider.java
index eb59bcb..d5cbb13 100644
--- a/main/src/cgeo/geocaching/StaticMapsProvider.java
+++ b/main/src/cgeo/geocaching/StaticMapsProvider.java
@@ -11,16 +11,12 @@ import cgeo.geocaching.utils.FileUtils;
import cgeo.geocaching.utils.Log;
import ch.boye.httpclientandroidlib.HttpResponse;
-
import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jdt.annotation.NonNull;
-import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Point;
-import android.util.DisplayMetrics;
-import android.view.Display;
-import android.view.WindowManager;
import java.io.File;
import java.util.concurrent.TimeUnit;
@@ -41,6 +37,11 @@ public final class StaticMapsProvider {
/** ThreadPool restricting this to 1 Thread. **/
private static final BlockingThreadPool POOL = new BlockingThreadPool(1, Thread.MIN_PRIORITY);
+ /**
+ * max size in free API version: https://developers.google.com/maps/documentation/staticmaps/#Imagesizes
+ */
+ private static final int GOOGLE_MAPS_MAX_SIZE = 640;
+
private StaticMapsProvider() {
// utility class
}
@@ -61,7 +62,7 @@ public final class StaticMapsProvider {
final Parameters params = new Parameters(
"center", latlonMap,
"zoom", String.valueOf(zoom),
- "size", String.valueOf(width) + 'x' + String.valueOf(height),
+ "size", String.valueOf(limitSize(width)) + 'x' + String.valueOf(limitSize(height)),
"maptype", mapType,
"markers", "icon:" + markerUrl + '|' + shadow + latlonMap,
"sensor", "false");
@@ -88,6 +89,10 @@ public final class StaticMapsProvider {
}
}
+ private static int limitSize(final int imageSize) {
+ return Math.min(imageSize, GOOGLE_MAPS_MAX_SIZE);
+ }
+
public static void downloadMaps(final Geocache cache) {
if ((!Settings.isStoreOfflineMaps() && !Settings.isStoreOfflineWpMaps()) || StringUtils.isBlank(cache.getGeocode())) {
return;
@@ -172,13 +177,10 @@ public final class StaticMapsProvider {
public static void storeCachePreviewMap(final Geocache cache) {
final String latlonMap = cache.getCoords().format(Format.LAT_LON_DECDEGREE_COMMA);
- final Display display = ((WindowManager) cgeoapplication.getInstance().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
- DisplayMetrics metrics = new DisplayMetrics();
- display.getMetrics(metrics);
- final int width = metrics.widthPixels;
- final int height = (int) (110 * metrics.density);
+ final Point displaySize = Compatibility.getDisplaySize();
+ final int minSize = Math.min(displaySize.x, displaySize.y);
final String markerUrl = MARKERS_URL + "my_location_mdpi.png";
- downloadMap(cache.getGeocode(), 15, ROADMAP, markerUrl, PREFIX_PREVIEW, "shadow:false|", latlonMap, width, height, null);
+ downloadMap(cache.getGeocode(), 15, ROADMAP, markerUrl, PREFIX_PREVIEW, "shadow:false|", latlonMap, minSize, minSize, null);
}
private static int guessMaxDisplaySide() {
@@ -243,11 +245,8 @@ public final class StaticMapsProvider {
* @param cache
* @return <code>true</code> if at least one map file exists; <code>false</code> otherwise
*/
- public static boolean hasStaticMap(final Geocache cache) {
- if (cache == null) {
- return false;
- }
- final String geocode = cache.getGeocode();
+ public static boolean hasStaticMap(@NonNull final Geocache cache) {
+ final String geocode = cache.getGeocode();
if (StringUtils.isBlank(geocode)) {
return false;
}
diff --git a/main/src/cgeo/geocaching/StatusFragment.java b/main/src/cgeo/geocaching/StatusFragment.java
index e0e714a..4f70f0e 100644
--- a/main/src/cgeo/geocaching/StatusFragment.java
+++ b/main/src/cgeo/geocaching/StatusFragment.java
@@ -38,12 +38,12 @@ public class StatusFragment extends Fragment {
@Override
public void onResume() {
super.onResume();
- cgeoapplication.getInstance().getStatusUpdater().addObserver(statusHandler);
+ CgeoApplication.getInstance().getStatusUpdater().addObserver(statusHandler);
}
@Override
public void onPause() {
- cgeoapplication.getInstance().getStatusUpdater().deleteObserver(statusHandler);
+ CgeoApplication.getInstance().getStatusUpdater().deleteObserver(statusHandler);
super.onPause();
}
diff --git a/main/src/cgeo/geocaching/TrackableActivity.java b/main/src/cgeo/geocaching/TrackableActivity.java
index 20a9ccf..1ab428e 100644
--- a/main/src/cgeo/geocaching/TrackableActivity.java
+++ b/main/src/cgeo/geocaching/TrackableActivity.java
@@ -233,7 +233,7 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi
@Override
public void run() {
if (StringUtils.isNotEmpty(geocode)) {
- trackable = cgData.loadTrackable(geocode);
+ trackable = DataStore.loadTrackable(geocode);
if (trackable == null || trackable.isLoggable()) {
// iterate over the connectors as some codes may be handled by multiple connectors
diff --git a/main/src/cgeo/geocaching/UsefulAppsActivity.java b/main/src/cgeo/geocaching/UsefulAppsActivity.java
index 8093bba..41ea96e 100644
--- a/main/src/cgeo/geocaching/UsefulAppsActivity.java
+++ b/main/src/cgeo/geocaching/UsefulAppsActivity.java
@@ -50,7 +50,7 @@ public class UsefulAppsActivity extends AbstractActivity {
marketIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
activity.startActivity(marketIntent);
- } catch (Exception e) {
+ } catch (RuntimeException e) {
// market not available in standard emulator
}
}
diff --git a/main/src/cgeo/geocaching/Waypoint.java b/main/src/cgeo/geocaching/Waypoint.java
index e39d26a..f3d4e4f 100644
--- a/main/src/cgeo/geocaching/Waypoint.java
+++ b/main/src/cgeo/geocaching/Waypoint.java
@@ -35,7 +35,7 @@ public class Waypoint implements IWaypoint, Comparable<Waypoint> {
public static void initializeScale() {
// Calculate visited inset based on screen density
- VISITED_INSET = (int) (6.6f * cgeoapplication.getInstance().getResources().getDisplayMetrics().density + 0.5f);
+ VISITED_INSET = (int) (6.6f * CgeoApplication.getInstance().getResources().getDisplayMetrics().density + 0.5f);
}
/**
diff --git a/main/src/cgeo/geocaching/WaypointPopup.java b/main/src/cgeo/geocaching/WaypointPopup.java
index a1ab36a..c33bbb5 100644
--- a/main/src/cgeo/geocaching/WaypointPopup.java
+++ b/main/src/cgeo/geocaching/WaypointPopup.java
@@ -56,7 +56,7 @@ public class WaypointPopup extends AbstractPopupActivity {
@Override
protected void init() {
super.init();
- waypoint = cgData.loadWaypoint(waypointId);
+ waypoint = DataStore.loadWaypoint(waypointId);
try {
if (StringUtils.isNotBlank(waypoint.getName())) {
setTitle(waypoint.getName());
diff --git a/main/src/cgeo/geocaching/activity/AbstractActivity.java b/main/src/cgeo/geocaching/activity/AbstractActivity.java
index 28c0cdd..1abc704 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.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.compatibility.Compatibility;
import cgeo.geocaching.network.Cookies;
import cgeo.geocaching.settings.Settings;
@@ -18,7 +18,7 @@ import android.widget.EditText;
public abstract class AbstractActivity extends FragmentActivity implements IAbstractActivity {
- protected cgeoapplication app = null;
+ protected CgeoApplication app = null;
protected Resources res = null;
private boolean keepScreenOn = false;
@@ -101,7 +101,7 @@ public abstract class AbstractActivity extends FragmentActivity implements IAbst
private void initializeCommonFields() {
// initialize commonly used members
res = this.getResources();
- app = (cgeoapplication) this.getApplication();
+ app = (CgeoApplication) this.getApplication();
// only needed in some activities, but implemented in super class nonetheless
Cookies.restoreCookieStore(Settings.getCookieStore());
diff --git a/main/src/cgeo/geocaching/activity/AbstractListActivity.java b/main/src/cgeo/geocaching/activity/AbstractListActivity.java
index 47c747f..d2bc0b4 100644
--- a/main/src/cgeo/geocaching/activity/AbstractListActivity.java
+++ b/main/src/cgeo/geocaching/activity/AbstractListActivity.java
@@ -1,7 +1,6 @@
package cgeo.geocaching.activity;
-import cgeo.geocaching.cgeoapplication;
-import cgeo.geocaching.compatibility.Compatibility;
+import cgeo.geocaching.CgeoApplication;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
@@ -14,7 +13,7 @@ public abstract class AbstractListActivity extends FragmentListActivity implemen
private boolean keepScreenOn = false;
- protected cgeoapplication app = null;
+ protected CgeoApplication app = null;
protected Resources res = null;
protected AbstractListActivity() {
@@ -66,7 +65,7 @@ public abstract class AbstractListActivity extends FragmentListActivity implemen
private void initializeCommonFields() {
// init
res = this.getResources();
- app = (cgeoapplication) this.getApplication();
+ app = (CgeoApplication) this.getApplication();
ActivityMixin.keepScreenOn(this, keepScreenOn);
}
@@ -77,7 +76,7 @@ public abstract class AbstractListActivity extends FragmentListActivity implemen
@Override
public void invalidateOptionsMenuCompatible() {
- Compatibility.invalidateOptionsMenu(this);
+ ActivityMixin.invalidateOptionsMenu(this);
}
public void onCreate(Bundle savedInstanceState, int resourceLayoutID) {
diff --git a/main/src/cgeo/geocaching/apps/AbstractApp.java b/main/src/cgeo/geocaching/apps/AbstractApp.java
index 7b6b3d9..d861542 100644
--- a/main/src/cgeo/geocaching/apps/AbstractApp.java
+++ b/main/src/cgeo/geocaching/apps/AbstractApp.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.apps;
import cgeo.geocaching.Geocache;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.utils.ProcessUtils;
import org.apache.commons.lang3.StringUtils;
@@ -53,7 +53,7 @@ public abstract class AbstractApp implements App {
}
protected static String getString(int ressourceId) {
- return cgeoapplication.getInstance().getString(ressourceId);
+ return CgeoApplication.getInstance().getString(ressourceId);
}
@Override
diff --git a/main/src/cgeo/geocaching/apps/AbstractLocusApp.java b/main/src/cgeo/geocaching/apps/AbstractLocusApp.java
index 53620e4..2db8918 100644
--- a/main/src/cgeo/geocaching/apps/AbstractLocusApp.java
+++ b/main/src/cgeo/geocaching/apps/AbstractLocusApp.java
@@ -3,7 +3,7 @@ package cgeo.geocaching.apps;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
import cgeo.geocaching.Waypoint;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.enumerations.CacheSize;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.WaypointType;
@@ -43,7 +43,7 @@ public abstract class AbstractLocusApp extends AbstractApp {
@Override
public boolean isInstalled() {
- return LocusUtils.isLocusAvailable(cgeoapplication.getInstance());
+ return LocusUtils.isLocusAvailable(CgeoApplication.getInstance());
}
/**
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/AbstractPointNavigationApp.java b/main/src/cgeo/geocaching/apps/cache/navi/AbstractPointNavigationApp.java
index a3ea57e..7542e24 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/AbstractPointNavigationApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/AbstractPointNavigationApp.java
@@ -1,8 +1,11 @@
package cgeo.geocaching.apps.cache.navi;
import cgeo.geocaching.Geocache;
+import cgeo.geocaching.R;
import cgeo.geocaching.Waypoint;
+import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.apps.AbstractApp;
+import cgeo.geocaching.geopoint.Geopoint;
import android.app.Activity;
@@ -21,11 +24,22 @@ abstract class AbstractPointNavigationApp extends AbstractApp implements CacheNa
@Override
public void navigate(Activity activity, Geocache cache) {
- navigate(activity, cache.getCoords());
+ final Geopoint coords = cache.getCoords();
+ if (coords != null) {
+ navigate(activity, coords);
+ } else {
+ ActivityMixin.showToast(activity, activity.getResources().getString(R.string.err_nav_no_coordinates));
+ }
}
@Override
public void navigate(Activity activity, Waypoint waypoint) {
+ final Geopoint coords = waypoint.getCoords();
+ if (coords != null) {
+ navigate(activity, coords);
+ } else {
+ ActivityMixin.showToast(activity, activity.getResources().getString(R.string.err_nav_no_coordinates));
+ }
navigate(activity, waypoint.getCoords());
}
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java b/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java
index d898d7e..d5c9435 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java
@@ -6,7 +6,7 @@ import cgeo.geocaching.R;
import cgeo.geocaching.StaticMapsActivity;
import cgeo.geocaching.StaticMapsProvider;
import cgeo.geocaching.Waypoint;
-import cgeo.geocaching.cgData;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.apps.AbstractApp;
@@ -34,7 +34,7 @@ abstract class AbstractStaticMapsApp extends AbstractApp implements CacheNavigat
return false;
}
String geocode = waypoint.getGeocode();
- if (StringUtils.isNotEmpty(geocode) && cgData.isOffline(geocode, null)) {
+ if (StringUtils.isNotEmpty(geocode) && DataStore.isOffline(geocode, null)) {
return StaticMapsProvider.hasStaticMapForWaypoint(geocode, waypoint);
}
return false;
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsApp.java b/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsApp.java
index 03fae9e..4cbfa00 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsApp.java
@@ -27,7 +27,7 @@ class GoogleMapsApp extends AbstractPointNavigationApp {
activity.startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("geo:" + point.getLatitude() + "," + point.getLongitude())));
return;
- } catch (Exception e) {
+ } catch (RuntimeException e) {
// nothing
}
Log.i("GoogleMapsApp.navigate: No maps application available.");
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsDirectionApp.java b/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsDirectionApp.java
index a84b7e8..a5b9a94 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsDirectionApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsDirectionApp.java
@@ -2,7 +2,7 @@ package cgeo.geocaching.apps.cache.navi;
import cgeo.geocaching.IGeoData;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.maps.MapProviderFactory;
import cgeo.geocaching.utils.Log;
@@ -25,7 +25,7 @@ public class GoogleMapsDirectionApp extends AbstractPointNavigationApp {
@Override
public void navigate(Activity activity, Geopoint coords) {
try {
- IGeoData geo = cgeoapplication.getInstance().currentGeo();
+ IGeoData geo = CgeoApplication.getInstance().currentGeo();
final Geopoint coordsNow = geo == null ? null : geo.getCoords();
if (coordsNow != null) {
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java b/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java
index ec6b3e1..c10da58 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java
@@ -1,9 +1,9 @@
package cgeo.geocaching.apps.cache.navi;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
import cgeo.geocaching.Waypoint;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.apps.AbstractAppFactory;
import cgeo.geocaching.apps.App;
@@ -16,6 +16,8 @@ import cgeo.geocaching.apps.cache.navi.GoogleNavigationApp.GoogleNavigationWalki
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.settings.Settings;
+import org.eclipse.jdt.annotation.Nullable;
+
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
@@ -273,7 +275,7 @@ public final class NavigationAppFactory extends AbstractAppFactory {
return menuItem != null;
}
- private static void navigateCache(Activity activity, Geocache cache, App app) {
+ private static void navigateCache(Activity activity, Geocache cache, @Nullable App app) {
if (app instanceof CacheNavigationApp) {
final CacheNavigationApp cacheApp = (CacheNavigationApp) app;
cacheApp.navigate(activity, cache);
@@ -286,7 +288,7 @@ public final class NavigationAppFactory extends AbstractAppFactory {
return menuItem != null;
}
- private static void navigateWaypoint(Activity activity, Waypoint waypoint, App app) {
+ private static void navigateWaypoint(Activity activity, Waypoint waypoint, @Nullable App app) {
if (app instanceof WaypointNavigationApp) {
final WaypointNavigationApp waypointApp = (WaypointNavigationApp) app;
waypointApp.navigate(activity, waypoint);
@@ -300,6 +302,7 @@ public final class NavigationAppFactory extends AbstractAppFactory {
}
}
+ @Nullable
private static App getAppFromMenuItem(MenuItem item) {
final int id = item.getItemId();
for (final NavigationAppsEnum navApp : NavigationAppsEnum.values()) {
@@ -320,7 +323,7 @@ public final class NavigationAppFactory extends AbstractAppFactory {
*/
public static void startDefaultNavigationApplication(int defaultNavigation, Activity activity, Geocache cache) {
if (cache == null || cache.getCoords() == null) {
- ActivityMixin.showToast(activity, cgeoapplication.getInstance().getString(R.string.err_location_unknown));
+ ActivityMixin.showToast(activity, CgeoApplication.getInstance().getString(R.string.err_location_unknown));
return;
}
@@ -342,7 +345,7 @@ public final class NavigationAppFactory extends AbstractAppFactory {
*/
public static void startDefaultNavigationApplication(int defaultNavigation, Activity activity, Waypoint waypoint) {
if (waypoint == null || waypoint.getCoords() == null) {
- ActivityMixin.showToast(activity, cgeoapplication.getInstance().getString(R.string.err_location_unknown));
+ ActivityMixin.showToast(activity, CgeoApplication.getInstance().getString(R.string.err_location_unknown));
return;
}
navigateWaypoint(activity, waypoint, getDefaultNavigationApplication(defaultNavigation));
@@ -356,7 +359,7 @@ public final class NavigationAppFactory extends AbstractAppFactory {
*/
public static void startDefaultNavigationApplication(int defaultNavigation, Activity activity, final Geopoint destination) {
if (destination == null) {
- ActivityMixin.showToast(activity, cgeoapplication.getInstance().getString(R.string.err_location_unknown));
+ ActivityMixin.showToast(activity, CgeoApplication.getInstance().getString(R.string.err_location_unknown));
return;
}
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/StreetviewApp.java b/main/src/cgeo/geocaching/apps/cache/navi/StreetviewApp.java
index e2c0828..df67e43 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/StreetviewApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/StreetviewApp.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.apps.cache.navi;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.utils.ProcessUtils;
@@ -31,7 +31,7 @@ class StreetviewApp extends AbstractPointNavigationApp {
activity.startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("google.streetview:cbll=" + point.getLatitude() + "," + point.getLongitude())));
} catch (final ActivityNotFoundException e) {
- ActivityMixin.showToast(activity, cgeoapplication.getInstance().getString(R.string.err_application_no));
+ ActivityMixin.showToast(activity, CgeoApplication.getInstance().getString(R.string.err_application_no));
}
}
} \ No newline at end of file
diff --git a/main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java b/main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java
index b747eee..ca06c52 100644
--- a/main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java
+++ b/main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java
@@ -1,9 +1,9 @@
package cgeo.geocaching.apps.cachelist;
+import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.Geocache;
-import cgeo.geocaching.activity.IAbstractActivity;
+import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.apps.AbstractAppFactory;
import cgeo.geocaching.utils.Log;
@@ -55,13 +55,13 @@ public final class CacheListAppFactory extends AbstractAppFactory {
}
}
- public static boolean onMenuItemSelected(final MenuItem item, final List<Geocache> caches, final IAbstractActivity activity,
+ public static boolean onMenuItemSelected(final MenuItem item, final List<Geocache> caches, final Activity activity,
final SearchResult search) {
final CacheListApp app = (CacheListApp) getAppFromMenuItem(item, LazyHolder.apps);
if (app != null) {
try {
- boolean result = app.invoke(caches, (Activity) activity, search);
- activity.invalidateOptionsMenuCompatible();
+ boolean result = app.invoke(caches, activity, search);
+ ActivityMixin.invalidateOptionsMenu(activity);
return result;
} catch (Exception e) {
Log.e("CacheListAppFactory.onMenuItemSelected", e);
diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel13.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel13.java
index f08ac22..eb2be4b 100644
--- a/main/src/cgeo/geocaching/compatibility/AndroidLevel13.java
+++ b/main/src/cgeo/geocaching/compatibility/AndroidLevel13.java
@@ -1,6 +1,6 @@
package cgeo.geocaching.compatibility;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import android.annotation.TargetApi;
import android.content.Context;
@@ -18,7 +18,7 @@ public class AndroidLevel13 implements AndroidLevel13Interface {
@Override
public Point getDisplaySize() {
Point dimensions = new Point();
- ((WindowManager) cgeoapplication.getInstance().getSystemService(Context.WINDOW_SERVICE))
+ ((WindowManager) CgeoApplication.getInstance().getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay().getSize(dimensions);
return dimensions;
}
diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel13Emulation.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel13Emulation.java
index ded20cb..56c784f 100644
--- a/main/src/cgeo/geocaching/compatibility/AndroidLevel13Emulation.java
+++ b/main/src/cgeo/geocaching/compatibility/AndroidLevel13Emulation.java
@@ -1,6 +1,6 @@
package cgeo.geocaching.compatibility;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import android.content.Context;
import android.graphics.Point;
@@ -22,7 +22,7 @@ public class AndroidLevel13Emulation implements AndroidLevel13Interface {
}
private static Display getDisplay() {
- return ((WindowManager) cgeoapplication.getInstance().getSystemService(Context.WINDOW_SERVICE))
+ return ((WindowManager) CgeoApplication.getInstance().getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay();
}
}
diff --git a/main/src/cgeo/geocaching/connector/AbstractConnector.java b/main/src/cgeo/geocaching/connector/AbstractConnector.java
index 28ad12b..b93cda0 100644
--- a/main/src/cgeo/geocaching/connector/AbstractConnector.java
+++ b/main/src/cgeo/geocaching/connector/AbstractConnector.java
@@ -1,13 +1,12 @@
package cgeo.geocaching.connector;
import cgeo.geocaching.Geocache;
+import cgeo.geocaching.LogCacheActivity;
import cgeo.geocaching.R;
import cgeo.geocaching.geopoint.Geopoint;
import org.apache.commons.lang3.StringUtils;
-import android.app.Activity;
-
public abstract class AbstractConnector implements IConnector {
@Override
@@ -79,7 +78,7 @@ public abstract class AbstractConnector implements IConnector {
}
@Override
- public ILoggingManager getLoggingManager(Activity activity, Geocache cache) {
+ public ILoggingManager getLoggingManager(final LogCacheActivity activity, final Geocache cache) {
return new NoLoggingManager();
}
diff --git a/main/src/cgeo/geocaching/connector/IConnector.java b/main/src/cgeo/geocaching/connector/IConnector.java
index 0c175cd..4ab7bde 100644
--- a/main/src/cgeo/geocaching/connector/IConnector.java
+++ b/main/src/cgeo/geocaching/connector/IConnector.java
@@ -2,10 +2,9 @@ package cgeo.geocaching.connector;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.ICache;
+import cgeo.geocaching.LogCacheActivity;
import cgeo.geocaching.geopoint.Geopoint;
-import android.app.Activity;
-
public interface IConnector {
/**
* get name for display (currently only used in links)
@@ -87,7 +86,7 @@ public interface IConnector {
*
* @return
*/
- public ILoggingManager getLoggingManager(Activity activity, Geocache cache);
+ public ILoggingManager getLoggingManager(final LogCacheActivity activity, final Geocache cache);
/**
* get host name of the connector server for dynamic loading of data
diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java
index 835359a..9388de1 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java
@@ -1,11 +1,12 @@
package cgeo.geocaching.connector.gc;
+import cgeo.geocaching.CgeoApplication;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.ICache;
+import cgeo.geocaching.LogCacheActivity;
import cgeo.geocaching.R;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.cgData;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.connector.AbstractConnector;
import cgeo.geocaching.connector.ILoggingManager;
import cgeo.geocaching.connector.capability.ILogin;
@@ -15,15 +16,14 @@ 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.SettingsActivity;
import cgeo.geocaching.settings.Settings;
+import cgeo.geocaching.settings.SettingsActivity;
import cgeo.geocaching.utils.CancellableHandler;
import cgeo.geocaching.utils.Log;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
-import android.app.Activity;
import android.content.Context;
import android.os.Handler;
@@ -104,7 +104,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode,
}
@Override
- public ILoggingManager getLoggingManager(Activity activity, Geocache cache) {
+ public ILoggingManager getLoggingManager(final LogCacheActivity activity, final Geocache cache) {
return new GCLoggingManager(activity, cache);
}
@@ -137,10 +137,10 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode,
if (StringUtils.isEmpty(page)) {
final SearchResult search = new SearchResult();
- if (cgData.isThere(geocode, guid, true, false)) {
+ if (DataStore.isThere(geocode, guid, true, false)) {
if (StringUtils.isBlank(geocode) && StringUtils.isNotBlank(guid)) {
Log.i("Loading old cache from cache.");
- search.addGeocode(cgData.getGeocodeForGuid(guid));
+ search.addGeocode(DataStore.getGeocodeForGuid(guid));
} else {
search.addGeocode(geocode);
}
@@ -189,7 +189,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode,
public boolean addToWatchlist(Geocache cache) {
final boolean added = GCParser.addToWatchlist(cache);
if (added) {
- cgData.saveChangedCache(cache);
+ DataStore.saveChangedCache(cache);
}
return added;
}
@@ -198,7 +198,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode,
public boolean removeFromWatchlist(Geocache cache) {
final boolean removed = GCParser.removeFromWatchlist(cache);
if (removed) {
- cgData.saveChangedCache(cache);
+ DataStore.saveChangedCache(cache);
}
return removed;
}
@@ -215,7 +215,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode,
public static boolean addToFavorites(Geocache cache) {
final boolean added = GCParser.addToFavorites(cache);
if (added) {
- cgData.saveChangedCache(cache);
+ DataStore.saveChangedCache(cache);
}
return added;
}
@@ -232,7 +232,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode,
public static boolean removeFromFavorites(Geocache cache) {
final boolean removed = GCParser.removeFromFavorites(cache);
if (removed) {
- cgData.saveChangedCache(cache);
+ DataStore.saveChangedCache(cache);
}
return removed;
}
@@ -241,7 +241,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode,
public boolean uploadModifiedCoordinates(Geocache cache, Geopoint wpt) {
final boolean uploaded = GCParser.uploadModifiedCoordinates(cache, wpt);
if (uploaded) {
- cgData.saveChangedCache(cache);
+ DataStore.saveChangedCache(cache);
}
return uploaded;
}
@@ -250,7 +250,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode,
public boolean deleteModifiedCoordinates(Geocache cache) {
final boolean deleted = GCParser.deleteModifiedCoordinates(cache);
if (deleted) {
- cgData.saveChangedCache(cache);
+ DataStore.saveChangedCache(cache);
}
return deleted;
}
@@ -259,7 +259,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode,
public boolean uploadPersonalNote(Geocache cache) {
final boolean uploaded = GCParser.uploadPersonalNote(cache);
if (uploaded) {
- cgData.saveChangedCache(cache);
+ DataStore.saveChangedCache(cache);
}
return uploaded;
}
@@ -299,13 +299,13 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode,
final StatusCode status = Login.login();
if (status == StatusCode.NO_ERROR) {
- cgeoapplication.getInstance().checkLogin = false;
+ CgeoApplication.getInstance().checkLogin = false;
Login.detectGcCustomDate();
}
- if (cgeoapplication.getInstance().showLoginToast && handler != null) {
+ if (CgeoApplication.getInstance().showLoginToast && handler != null) {
handler.sendMessage(handler.obtainMessage(0, status));
- cgeoapplication.getInstance().showLoginToast = false;
+ CgeoApplication.getInstance().showLoginToast = false;
// invoke settings activity to insert login details
if (status == StatusCode.NO_LOGIN_INFO_STORED && fromActivity != null) {
diff --git a/main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java b/main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java
index 2aa5c75..8bed2ea 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java
@@ -3,7 +3,6 @@ package cgeo.geocaching.connector.gc;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.LogCacheActivity;
import cgeo.geocaching.R;
-import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.TrackableLog;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.connector.ILoggingManager;
@@ -13,12 +12,13 @@ import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.loaders.UrlLoader;
import cgeo.geocaching.network.Parameters;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.Log;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.eclipse.jdt.annotation.Nullable;
-import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.LoaderManager;
@@ -38,11 +38,12 @@ public class GCLoggingManager implements ILoggingManager, LoaderManager.LoaderCa
private List<LogType> possibleLogTypes;
private boolean hasLoaderError = true;
- public GCLoggingManager(Activity activity, Geocache cache) {
- this.activity = (LogCacheActivity) activity;
+ public GCLoggingManager(final LogCacheActivity activity, final Geocache cache) {
+ this.activity = activity;
this.cache = cache;
}
+ @Nullable
@Override
public Loader<String> onCreateLoader(int arg0, Bundle arg1) {
if (!Settings.isLogin()) { // allow offline logging
diff --git a/main/src/cgeo/geocaching/connector/gc/GCMap.java b/main/src/cgeo/geocaching/connector/gc/GCMap.java
index 4fdde56..d76a987 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCMap.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCMap.java
@@ -1,9 +1,9 @@
package cgeo.geocaching.connector.gc;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.cgData;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.enumerations.CacheSize;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.LiveMapStrategy.Strategy;
@@ -236,7 +236,9 @@ public class GCMap {
}
Log.d("Retrieved " + searchResult.getCount() + " caches for tile " + tile.toString());
- } catch (Exception e) {
+ } catch (RuntimeException e) {
+ Log.e("GCMap.parseMapJSON", e);
+ } catch (JSONException e) {
Log.e("GCMap.parseMapJSON", e);
}
@@ -253,7 +255,7 @@ public class GCMap {
* @return
*/
public static SearchResult searchByViewport(final Viewport viewport, final String[] tokens) {
- int speed = (int) cgeoapplication.getInstance().currentGeo().getSpeed() * 60 * 60 / 1000; // in km/h
+ int speed = (int) CgeoApplication.getInstance().currentGeo().getSpeed() * 60 * 60 / 1000; // in km/h
Strategy strategy = Settings.getLiveMapStrategy();
if (strategy == Strategy.AUTO) {
strategy = speed >= 30 ? Strategy.FAST : Strategy.DETAILED;
@@ -359,7 +361,7 @@ public class GCMap {
// Check for vanished found caches
if (tiles.iterator().next().getZoomLevel() >= Tile.ZOOMLEVEL_MIN_PERSONALIZED) {
- searchResult.addFilteredGeocodes(cgData.getCachedMissingFromSearch(searchResult, tiles, GCConnector.getInstance(), Tile.ZOOMLEVEL_MIN_PERSONALIZED - 1));
+ searchResult.addFilteredGeocodes(DataStore.getCachedMissingFromSearch(searchResult, tiles, GCConnector.getInstance(), Tile.ZOOMLEVEL_MIN_PERSONALIZED - 1));
}
}
@@ -370,7 +372,7 @@ public class GCMap {
SearchResult search = GCParser.searchByCoords(center, Settings.getCacheType(), false, null);
if (search != null && !search.isEmpty()) {
final Set<String> geocodes = search.getGeocodes();
- lastSearchViewport = cgData.getBounds(geocodes);
+ lastSearchViewport = DataStore.getBounds(geocodes);
searchResult.addGeocodes(geocodes);
}
}
diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java
index b373cb1..fe7780a 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCParser.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java
@@ -1,5 +1,7 @@
package cgeo.geocaching.connector.gc;
+import cgeo.geocaching.CgeoApplication;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.Image;
import cgeo.geocaching.LogEntry;
@@ -8,8 +10,6 @@ import cgeo.geocaching.SearchResult;
import cgeo.geocaching.Trackable;
import cgeo.geocaching.TrackableLog;
import cgeo.geocaching.Waypoint;
-import cgeo.geocaching.cgData;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.enumerations.CacheSize;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.LoadFlags;
@@ -35,11 +35,11 @@ import cgeo.geocaching.utils.TextUtils;
import ch.boye.httpclientandroidlib.HttpResponse;
import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.ListUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.eclipse.jdt.annotation.NonNull;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@@ -147,7 +147,7 @@ public abstract class GCParser {
}
}
}
- } catch (final Exception e) {
+ } catch (final RuntimeException e) {
// failed to parse GUID and/or Disabled
Log.w("GCParser.parseSearch: Failed to parse GUID and/or Disabled data");
}
@@ -308,19 +308,15 @@ public abstract class GCParser {
final String coordinates = Network.getResponseData(Network.postRequest("http://www.geocaching.com/seek/nearest.aspx", params), false);
- if (StringUtils.isNotBlank(coordinates)) {
- if (coordinates.contains("You have not agreed to the license agreement. The license agreement is required before you can start downloading GPX or LOC files from Geocaching.com")) {
- Log.i("User has not agreed to the license agreement. Can\'t download .loc file.");
-
- searchResult.setError(StatusCode.UNAPPROVED_LICENSE);
-
- return searchResult;
- }
+ if (StringUtils.contains(coordinates, "You have not agreed to the license agreement. The license agreement is required before you can start downloading GPX or LOC files from Geocaching.com")) {
+ Log.i("User has not agreed to the license agreement. Can\'t download .loc file.");
+ searchResult.setError(StatusCode.UNAPPROVED_LICENSE);
+ return searchResult;
}
LocParser.parseLoc(searchResult, coordinates);
- } catch (final Exception e) {
+ } catch (final RuntimeException e) {
Log.e("GCParser.parseSearch.CIDs", e);
}
}
@@ -357,7 +353,7 @@ public abstract class GCParser {
// save full detailed caches
CancellableHandler.sendLoadProgressDetail(handler, R.string.cache_dialog_loading_details_status_cache);
- cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
+ DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
// update progress message so user knows we're still working. This is more of a place holder than
// actual indication of what the program is doing
@@ -569,7 +565,7 @@ public abstract class GCParser {
}
cache.setAttributes(attributes);
}
- } catch (final Exception e) {
+ } catch (final RuntimeException e) {
// failed to parse cache attributes
Log.w("GCParser.parseCache: Failed to parse cache attributes");
}
@@ -598,7 +594,7 @@ public abstract class GCParser {
}
cache.addSpoiler(new Image(url, title, description));
}
- } catch (final Exception e) {
+ } catch (final RuntimeException e) {
// failed to parse cache spoilers
Log.w("GCParser.parseCache: Failed to parse cache spoilers");
}
@@ -632,7 +628,7 @@ public abstract class GCParser {
}
}
}
- } catch (final Exception e) {
+ } catch (final RuntimeException e) {
// failed to parse cache inventory
Log.w("GCParser.parseCache: Failed to parse cache inventory (2)");
}
@@ -654,7 +650,7 @@ public abstract class GCParser {
}
}
}
- } catch (final Exception e) {
+ } catch (final NumberFormatException e) {
// failed to parse logs
Log.w("GCParser.parseCache: Failed to parse cache log count");
}
@@ -667,7 +663,7 @@ public abstract class GCParser {
final String originalCoords = TextUtils.getMatch(page, GCConstants.PATTERN_LATLON_ORIG, false, null);
if (null != originalCoords) {
- final Waypoint waypoint = new Waypoint(cgeoapplication.getInstance().getString(R.string.cache_coordinates_original), WaypointType.ORIGINAL, false);
+ final Waypoint waypoint = new Waypoint(CgeoApplication.getInstance().getString(R.string.cache_coordinates_original), WaypointType.ORIGINAL, false);
waypoint.setCoords(new Geopoint(originalCoords));
cache.addOrChangeWaypoint(waypoint, false);
cache.setUserModifiedCoords(true);
@@ -706,7 +702,7 @@ public abstract class GCParser {
// waypoint name
// res is null during the unit tests
- final String name = TextUtils.getMatch(wp[6], GCConstants.PATTERN_WPNAME, true, 1, cgeoapplication.getInstance().getString(R.string.waypoint), true);
+ final String name = TextUtils.getMatch(wp[6], GCConstants.PATTERN_WPNAME, true, 1, CgeoApplication.getInstance().getString(R.string.waypoint), true);
// waypoint type
final String resulttype = TextUtils.getMatch(wp[3], GCConstants.PATTERN_WPTYPE, null);
@@ -1083,7 +1079,7 @@ public abstract class GCParser {
page = Network.getResponseData(Network.postRequest(uri, params));
}
- } catch (final Exception e) {
+ } catch (final RuntimeException e) {
Log.e("GCParser.postLog.confim", e);
}
@@ -1094,7 +1090,7 @@ public abstract class GCParser {
Log.i("Log successfully posted to cache #" + cacheid);
if (geocode != null) {
- cgData.saveVisitDate(geocode);
+ DataStore.saveVisitDate(geocode);
}
Login.getLoginStatus(page);
@@ -1396,7 +1392,7 @@ public abstract class GCParser {
trackable.setOwnerGuid(matcherOwner.group(1));
trackable.setOwner(matcherOwner.group(2).trim());
}
- } catch (final Exception e) {
+ } catch (final RuntimeException e) {
// failed to parse trackable owner name
Log.w("GCParser.parseTrackable: Failed to parse trackable owner name");
}
@@ -1427,7 +1423,7 @@ public abstract class GCParser {
if (TextUtils.matches(page, GCConstants.PATTERN_TRACKABLE_SPOTTEDOWNER)) {
trackable.setSpottedType(Trackable.SPOTTED_OWNER);
}
- } catch (final Exception e) {
+ } catch (final RuntimeException e) {
// failed to parse trackable last known place
Log.w("GCParser.parseTrackable: Failed to parse trackable last known place");
}
@@ -1476,12 +1472,12 @@ public abstract class GCParser {
trackable.setDetails(convertLinks(details));
}
}
- } catch (final Exception e) {
+ } catch (final RuntimeException e) {
// failed to parse trackable details & image
Log.w("GCParser.parseTrackable: Failed to parse trackable details & image");
}
if (StringUtils.isEmpty(trackable.getDetails()) && page.contains(GCConstants.ERROR_TB_NOT_ACTIVATED)) {
- trackable.setDetails(cgeoapplication.getInstance().getString(R.string.trackable_not_activated));
+ trackable.setDetails(CgeoApplication.getInstance().getString(R.string.trackable_not_activated));
}
// trackable logs
@@ -1538,8 +1534,8 @@ public abstract class GCParser {
trackable.setTrackingcode(possibleTrackingcode);
}
- if (cgeoapplication.getInstance() != null) {
- cgData.saveTrackable(trackable);
+ if (CgeoApplication.getInstance() != null) {
+ DataStore.saveTrackable(trackable);
}
return trackable;
@@ -1658,9 +1654,10 @@ public abstract class GCParser {
return logs;
}
+ @NonNull
public static List<LogType> parseTypes(String page) {
if (StringUtils.isEmpty(page)) {
- return ListUtils.EMPTY_LIST;
+ return Collections.emptyList();
}
final List<LogType> types = new ArrayList<LogType>();
diff --git a/main/src/cgeo/geocaching/connector/gc/Login.java b/main/src/cgeo/geocaching/connector/gc/Login.java
index 0d8fb05..ad07424 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.CgeoApplication;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.network.Cookies;
import cgeo.geocaching.network.HtmlImage;
@@ -76,7 +76,7 @@ public abstract class Login {
return StatusCode.NO_LOGIN_INFO_STORED;
}
- Login.setActualStatus(cgeoapplication.getInstance().getString(R.string.init_login_popup_working));
+ Login.setActualStatus(CgeoApplication.getInstance().getString(R.string.init_login_popup_working));
HttpResponse loginResponse = Network.getRequest("https://www.geocaching.com/login/default.aspx");
String loginData = Network.getResponseData(loginResponse);
if (loginResponse != null && loginResponse.getStatusLine().getStatusCode() == 503 && TextUtils.matches(loginData, GCConstants.PATTERN_MAINTENANCE)) {
@@ -119,6 +119,7 @@ public abstract class Login {
// FIXME: should it be CONNECTION_FAILED to match the first attempt?
return StatusCode.COMMUNICATION_ERROR; // no login page
}
+ assert loginData != null; // Caught above
if (Login.getLoginStatus(loginData)) {
Log.i("Successfully logged in Geocaching.com as " + login.left + " (" + Settings.getMemberStatus() + ')');
@@ -171,7 +172,7 @@ public abstract class Login {
resetLoginStatus();
setActualCachesFound(-1);
- setActualStatus(cgeoapplication.getInstance().getString(R.string.err_login));
+ setActualStatus(CgeoApplication.getInstance().getString(R.string.err_login));
}
static void setActualCachesFound(final int found) {
@@ -218,7 +219,7 @@ public abstract class Login {
return false;
}
- setActualStatus(cgeoapplication.getInstance().getString(R.string.init_login_popup_ok));
+ setActualStatus(CgeoApplication.getInstance().getString(R.string.init_login_popup_ok));
// on every page except login page
setActualLoginStatus(TextUtils.matches(page, GCConstants.PATTERN_LOGIN_NAME));
@@ -246,7 +247,7 @@ public abstract class Login {
return true;
}
- setActualStatus(cgeoapplication.getInstance().getString(R.string.init_login_popup_failed));
+ setActualStatus(CgeoApplication.getInstance().getString(R.string.init_login_popup_failed));
return false;
}
@@ -276,7 +277,8 @@ public abstract class Login {
public static BitmapDrawable downloadAvatarAndGetMemberStatus() {
try {
- final String profile = TextUtils.replaceWhitespace(Network.getResponseData(Network.getRequest("http://www.geocaching.com/my/")));
+ final String responseData = StringUtils.defaultString(Network.getResponseData(Network.getRequest("http://www.geocaching.com/my/")));
+ final String profile = TextUtils.replaceWhitespace(responseData);
Settings.setMemberStatus(TextUtils.getMatch(profile, GCConstants.PATTERN_MEMBER_STATUS, true, null));
if (profile.contains(GCConstants.MEMBER_STATUS_RENEW)) {
diff --git a/main/src/cgeo/geocaching/connector/gc/SearchHandler.java b/main/src/cgeo/geocaching/connector/gc/SearchHandler.java
index 4358399..795ed2f 100644
--- a/main/src/cgeo/geocaching/connector/gc/SearchHandler.java
+++ b/main/src/cgeo/geocaching/connector/gc/SearchHandler.java
@@ -91,7 +91,7 @@ public class SearchHandler extends Handler {
dlg.create().show();
}
- } catch (Exception e) {
+ } catch (MalformedURLException e) {
Log.e("Error in reCAPTCHA handler", e);
}
}
diff --git a/main/src/cgeo/geocaching/connector/oc/IOCAuthParams.java b/main/src/cgeo/geocaching/connector/oc/IOCAuthParams.java
index 5a140a1..d363164 100644
--- a/main/src/cgeo/geocaching/connector/oc/IOCAuthParams.java
+++ b/main/src/cgeo/geocaching/connector/oc/IOCAuthParams.java
@@ -28,7 +28,7 @@ public interface IOCAuthParams {
*
* @return
*/
- int getAuthTitelResId();
+ int getAuthTitleResId();
/**
* Preference key of the public token
@@ -57,4 +57,11 @@ public interface IOCAuthParams {
* @return
*/
int getTempTokenSecretPrefKey();
+
+ /**
+ * The URI to use as a callback (OAuth)
+ *
+ * @return
+ */
+ String getCallbackUri();
}
diff --git a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
index d35e54b..8f38641 100644
--- a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
+++ b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
@@ -1,9 +1,10 @@
package cgeo.geocaching.connector.oc;
+import cgeo.geocaching.CgeoApplication;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
+import cgeo.geocaching.LogCacheActivity;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.cgData;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.connector.ILoggingManager;
import cgeo.geocaching.connector.capability.ILogin;
import cgeo.geocaching.connector.capability.ISearchByCenter;
@@ -16,7 +17,6 @@ import cgeo.geocaching.utils.CryptUtils;
import org.apache.commons.lang3.StringUtils;
-import android.app.Activity;
import android.content.Context;
import android.os.Handler;
@@ -29,9 +29,9 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente
private UserInfo userInfo = new UserInfo(StringUtils.EMPTY, 0, UserInfoStatus.NOT_RETRIEVED);
public OCApiLiveConnector(String name, String host, String prefix, String licenseString, int cKResId, int cSResId, int isActivePrefKeyId, int tokenPublicPrefKeyId, int tokenSecretPrefKeyId, ApiSupport apiSupport) {
- super(name, host, prefix, CryptUtils.rot13(cgeoapplication.getInstance().getResources().getString(cKResId)), licenseString, apiSupport);
+ super(name, host, prefix, CryptUtils.rot13(CgeoApplication.getInstance().getResources().getString(cKResId)), licenseString, apiSupport);
- cS = CryptUtils.rot13(cgeoapplication.getInstance().getResources().getString(cSResId));
+ cS = CryptUtils.rot13(CgeoApplication.getInstance().getResources().getString(cSResId));
this.isActivePrefKeyId = isActivePrefKeyId;
this.tokenPublicPrefKeyId = tokenPublicPrefKeyId;
this.tokenSecretPrefKeyId = tokenSecretPrefKeyId;
@@ -87,7 +87,7 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente
final boolean added = OkapiClient.setWatchState(cache, true, this);
if (added) {
- cgData.saveChangedCache(cache);
+ DataStore.saveChangedCache(cache);
}
return added;
@@ -98,7 +98,7 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente
final boolean removed = OkapiClient.setWatchState(cache, false, this);
if (removed) {
- cgData.saveChangedCache(cache);
+ DataStore.saveChangedCache(cache);
}
return removed;
@@ -110,7 +110,7 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente
}
@Override
- public ILoggingManager getLoggingManager(Activity activity, Geocache cache) {
+ public ILoggingManager getLoggingManager(final LogCacheActivity activity, final Geocache cache) {
return new OkapiLoggingManager(activity, this, cache);
}
@@ -145,7 +145,7 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente
@Override
public String getLoginStatusString() {
- return cgeoapplication.getInstance().getString(userInfo.getStatus().resId);
+ return CgeoApplication.getInstance().getString(userInfo.getStatus().resId);
}
@Override
diff --git a/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java b/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java
index 10d6a66..550a321 100644
--- a/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java
+++ b/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java
@@ -1,11 +1,12 @@
package cgeo.geocaching.connector.oc;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.network.OAuthAuthorizationActivity;
import cgeo.geocaching.settings.Settings;
import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.eclipse.jdt.annotation.Nullable;
public class OCAuthorizationActivity extends OAuthAuthorizationActivity {
@@ -17,8 +18,9 @@ public class OCAuthorizationActivity extends OAuthAuthorizationActivity {
"/okapi/services/oauth/authorize",
"/okapi/services/oauth/access_token",
false,
- cgeoapplication.getInstance().getResources().getString(authParams.getCKResId()),
- cgeoapplication.getInstance().getResources().getString(authParams.getCSResId()));
+ CgeoApplication.getInstance().getResources().getString(authParams.getCKResId()),
+ CgeoApplication.getInstance().getResources().getString(authParams.getCSResId()),
+ authParams.getCallbackUri());
this.authParams = authParams;
}
@@ -28,12 +30,12 @@ public class OCAuthorizationActivity extends OAuthAuthorizationActivity {
}
@Override
- protected void setTempTokens(String tokenPublic, String tokenSecret) {
+ protected void setTempTokens(@Nullable final String tokenPublic, @Nullable final String tokenSecret) {
Settings.setTokens(authParams.getTempTokenPublicPrefKey(), tokenPublic, authParams.getTempTokenSecretPrefKey(), tokenSecret);
}
@Override
- protected void setTokens(String tokenPublic, String tokenSecret, boolean enable) {
+ protected void setTokens(@Nullable final String tokenPublic, @Nullable final String tokenSecret, final boolean enable) {
Settings.setTokens(authParams.getTokenPublicPrefKey(), tokenPublic, authParams.getTokenSecretPrefKey(), tokenSecret);
if (tokenPublic != null) {
Settings.setTokens(authParams.getTempTokenPublicPrefKey(), null, authParams.getTempTokenSecretPrefKey(), null);
@@ -42,22 +44,7 @@ public class OCAuthorizationActivity extends OAuthAuthorizationActivity {
@Override
protected String getAuthTitle() {
- return res.getString(authParams.getAuthTitelResId());
- }
-
- @Override
- protected String getAuthAgain() {
- return res.getString(R.string.auth_again_oc);
- }
-
- @Override
- protected String getErrAuthInitialize() {
- return res.getString(R.string.err_auth_initialize);
- }
-
- @Override
- protected String getAuthStart() {
- return res.getString(R.string.auth_start_oc);
+ return res.getString(authParams.getAuthTitleResId());
}
@Override
@@ -65,48 +52,4 @@ public class OCAuthorizationActivity extends OAuthAuthorizationActivity {
return res.getString(R.string.auth_dialog_completed_oc, getAuthTitle());
}
- @Override
- protected String getErrAuthProcess() {
- return res.getString(R.string.err_auth_process);
- }
-
- @Override
- protected String getAuthDialogWait() {
- return res.getString(R.string.auth_dialog_wait_oc, getAuthTitle());
- }
-
- @Override
- protected String getAuthDialogPinTitle() {
- return res.getString(R.string.auth_dialog_pin_title_oc);
- }
-
- @Override
- protected String getAuthDialogPinMessage() {
- return res.getString(R.string.auth_dialog_pin_message_oc, getAuthTitle());
- }
-
- @Override
- protected String getAboutAuth1() {
- return res.getString(R.string.about_auth_1_oc, getAuthTitle());
- }
-
- @Override
- protected String getAboutAuth2() {
- return res.getString(R.string.about_auth_2_oc, getAuthTitle(), getAuthTitle());
- }
-
- @Override
- protected String getAuthAuthorize() {
- return res.getString(R.string.auth_authorize_oc);
- }
-
- @Override
- protected String getAuthPinHint() {
- return res.getString(R.string.auth_pin_hint_oc, getAuthTitle());
- }
-
- @Override
- protected String getAuthFinish() {
- return res.getString(R.string.auth_finish_oc);
- }
}
diff --git a/main/src/cgeo/geocaching/connector/oc/OCDEAuthParams.java b/main/src/cgeo/geocaching/connector/oc/OCDEAuthParams.java
index 734b383..17c1cb8 100644
--- a/main/src/cgeo/geocaching/connector/oc/OCDEAuthParams.java
+++ b/main/src/cgeo/geocaching/connector/oc/OCDEAuthParams.java
@@ -20,7 +20,7 @@ public class OCDEAuthParams implements IOCAuthParams {
}
@Override
- public int getAuthTitelResId() {
+ public int getAuthTitleResId() {
return R.string.auth_ocde;
}
@@ -43,4 +43,9 @@ public class OCDEAuthParams implements IOCAuthParams {
public int getTempTokenSecretPrefKey() {
return R.string.pref_temp_ocde_token_secret;
}
+
+ @Override
+ public String getCallbackUri() {
+ return "callback://www.cgeo.org/opencaching.de/";
+ }
}
diff --git a/main/src/cgeo/geocaching/connector/oc/OCPLAuthParams.java b/main/src/cgeo/geocaching/connector/oc/OCPLAuthParams.java
index 117e990..dfe03e5 100644
--- a/main/src/cgeo/geocaching/connector/oc/OCPLAuthParams.java
+++ b/main/src/cgeo/geocaching/connector/oc/OCPLAuthParams.java
@@ -20,7 +20,7 @@ public class OCPLAuthParams implements IOCAuthParams {
}
@Override
- public int getAuthTitelResId() {
+ public int getAuthTitleResId() {
return R.string.auth_ocpl;
}
@@ -43,4 +43,9 @@ public class OCPLAuthParams implements IOCAuthParams {
public int getTempTokenSecretPrefKey() {
return R.string.pref_temp_ocpl_token_secret;
}
+
+ @Override
+ public String getCallbackUri() {
+ return "callback://www.cgeo.org/opencaching.pl/";
+ }
}
diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
index 189b6a4..309969e 100644
--- a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
+++ b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
@@ -1,12 +1,12 @@
package cgeo.geocaching.connector.oc;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.Image;
import cgeo.geocaching.LogEntry;
import cgeo.geocaching.R;
import cgeo.geocaching.Waypoint;
-import cgeo.geocaching.cgData;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.connector.ConnectorFactory;
import cgeo.geocaching.connector.IConnector;
import cgeo.geocaching.connector.LogResult;
@@ -265,7 +265,7 @@ final class OkapiClient {
parseCoreCache(response, cache);
- cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_CACHE));
+ DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_CACHE));
} catch (final JSONException e) {
Log.e("OkapiClient.parseSmallCache", e);
}
@@ -297,7 +297,7 @@ final class OkapiClient {
final StringBuilder description = new StringBuilder(500);
if (!response.isNull("gc_code")) {
final String gccode = response.getString("gc_code");
- description.append(cgeoapplication.getInstance().getResources()
+ description.append(CgeoApplication.getInstance().getResources()
.getString(R.string.cache_listed_on, GCConnector.getInstance().getName()))
.append(": <a href=\"http://coord.info/")
.append(gccode)
@@ -316,11 +316,9 @@ final class OkapiClient {
if (images != null) {
for (int i = 0; i < images.length(); i++) {
final JSONObject imageResponse = images.getJSONObject(i);
- if (imageResponse.getBoolean(CACHE_IMAGE_IS_SPOILER)) {
- final String title = imageResponse.getString(CACHE_IMAGE_CAPTION);
- final String url = absoluteUrl(imageResponse.getString(CACHE_IMAGE_URL), cache.getGeocode());
- cache.addSpoiler(new Image(url, title));
- }
+ final String title = imageResponse.getString(CACHE_IMAGE_CAPTION);
+ final String url = absoluteUrl(imageResponse.getString(CACHE_IMAGE_URL), cache.getGeocode());
+ cache.addSpoiler(new Image(url, title));
}
}
@@ -340,7 +338,7 @@ final class OkapiClient {
cache.setDetailedUpdatedNow();
// save full detailed caches
- cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
+ DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
} catch (final JSONException e) {
Log.e("OkapiClient.parseCache", e);
}
diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java b/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java
index c995975..9ffe7a2 100644
--- a/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java
+++ b/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java
@@ -9,7 +9,6 @@ import cgeo.geocaching.connector.LogResult;
import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.enumerations.StatusCode;
-import android.app.Activity;
import android.net.Uri;
import java.util.Arrays;
@@ -26,10 +25,10 @@ public class OkapiLoggingManager implements ILoggingManager {
private final static List<LogType> standardLogTypes = Arrays.asList(LogType.FOUND_IT, LogType.DIDNT_FIND_IT, LogType.NOTE);
private final static List<LogType> eventLogTypes = Arrays.asList(LogType.WILL_ATTEND, LogType.ATTENDED, LogType.NOTE);
- public OkapiLoggingManager(Activity activity, OCApiLiveConnector connector, Geocache cache) {
+ public OkapiLoggingManager(final LogCacheActivity activity, OCApiLiveConnector connector, Geocache cache) {
this.connector = connector;
this.cache = cache;
- this.activity = (LogCacheActivity) activity;
+ this.activity = activity;
}
@Override
diff --git a/main/src/cgeo/geocaching/connector/ox/OpenCachingApi.java b/main/src/cgeo/geocaching/connector/ox/OpenCachingApi.java
index f25e289..40b27f0 100644
--- a/main/src/cgeo/geocaching/connector/ox/OpenCachingApi.java
+++ b/main/src/cgeo/geocaching/connector/ox/OpenCachingApi.java
@@ -1,9 +1,9 @@
package cgeo.geocaching.connector.ox;
import cgeo.geocaching.Geocache;
-import cgeo.geocaching.StoredList;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.GeopointFormatter;
+import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.network.Network;
import cgeo.geocaching.network.Parameters;
import cgeo.geocaching.utils.CryptUtils;
diff --git a/main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java b/main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java
index 66ca5f7..9f79896 100644
--- a/main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java
+++ b/main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java
@@ -1,8 +1,8 @@
package cgeo.geocaching.connector.trackable;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.R;
import cgeo.geocaching.Trackable;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.utils.Log;
import org.xml.sax.Attributes;
@@ -63,15 +63,15 @@ public class GeokretyParser {
protected static String getType(int type) {
switch (type) {
case 0:
- return cgeoapplication.getInstance().getString(R.string.geokret_type_traditional);
+ return CgeoApplication.getInstance().getString(R.string.geokret_type_traditional);
case 1:
- return cgeoapplication.getInstance().getString(R.string.geokret_type_book_or_media);
+ return CgeoApplication.getInstance().getString(R.string.geokret_type_book_or_media);
case 2:
- return cgeoapplication.getInstance().getString(R.string.geokret_type_human);
+ return CgeoApplication.getInstance().getString(R.string.geokret_type_human);
case 3:
- return cgeoapplication.getInstance().getString(R.string.geokret_type_coin);
+ return CgeoApplication.getInstance().getString(R.string.geokret_type_coin);
case 4:
- return cgeoapplication.getInstance().getString(R.string.geokret_type_post);
+ return CgeoApplication.getInstance().getString(R.string.geokret_type_post);
}
return null;
}
diff --git a/main/src/cgeo/geocaching/enumerations/CacheAttribute.java b/main/src/cgeo/geocaching/enumerations/CacheAttribute.java
index 243f63d..1ddfeaf 100644
--- a/main/src/cgeo/geocaching/enumerations/CacheAttribute.java
+++ b/main/src/cgeo/geocaching/enumerations/CacheAttribute.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.enumerations;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import org.apache.commons.lang3.StringUtils;
@@ -143,7 +143,7 @@ public enum CacheAttribute {
* @return the localized text
*/
public String getL10n(final boolean enabled) {
- return cgeoapplication.getInstance().getResources().getString(
+ return CgeoApplication.getInstance().getResources().getString(
enabled ? stringIdYes : stringIdNo);
}
diff --git a/main/src/cgeo/geocaching/enumerations/CacheListType.java b/main/src/cgeo/geocaching/enumerations/CacheListType.java
index 641947d..b75c118 100644
--- a/main/src/cgeo/geocaching/enumerations/CacheListType.java
+++ b/main/src/cgeo/geocaching/enumerations/CacheListType.java
@@ -1,13 +1,22 @@
package cgeo.geocaching.enumerations;
public enum CacheListType {
- OFFLINE,
- HISTORY,
- NEAREST,
- COORDINATE,
- KEYWORD,
- ADDRESS,
- USERNAME,
- OWNER,
- MAP;
+ OFFLINE(true),
+ HISTORY(true),
+ NEAREST(false),
+ COORDINATE(false),
+ KEYWORD(false),
+ ADDRESS(false),
+ USERNAME(false),
+ OWNER(false),
+ MAP(false);
+
+ /**
+ * whether or not this list allows switching to another list
+ */
+ public final boolean canSwitch;
+
+ private CacheListType(final boolean canSwitch) {
+ this.canSwitch = canSwitch;
+ }
}
diff --git a/main/src/cgeo/geocaching/enumerations/CacheSize.java b/main/src/cgeo/geocaching/enumerations/CacheSize.java
index 726ebe2..a6f8df3 100644
--- a/main/src/cgeo/geocaching/enumerations/CacheSize.java
+++ b/main/src/cgeo/geocaching/enumerations/CacheSize.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.enumerations;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import java.util.Collections;
import java.util.HashMap;
@@ -60,7 +60,7 @@ public enum CacheSize {
}
public final String getL10n() {
- return cgeoapplication.getInstance().getBaseContext().getResources().getString(stringId);
+ return CgeoApplication.getInstance().getBaseContext().getResources().getString(stringId);
}
}
diff --git a/main/src/cgeo/geocaching/enumerations/CacheType.java b/main/src/cgeo/geocaching/enumerations/CacheType.java
index c7a9130..c952ba0 100644
--- a/main/src/cgeo/geocaching/enumerations/CacheType.java
+++ b/main/src/cgeo/geocaching/enumerations/CacheType.java
@@ -2,7 +2,7 @@ package cgeo.geocaching.enumerations;
import cgeo.geocaching.ICache;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import java.util.Collections;
import java.util.HashMap;
@@ -85,7 +85,7 @@ public enum CacheType {
}
public final String getL10n() {
- return cgeoapplication.getInstance().getBaseContext().getResources().getString(stringId);
+ return CgeoApplication.getInstance().getBaseContext().getResources().getString(stringId);
}
public boolean isEvent() {
@@ -114,7 +114,7 @@ public enum CacheType {
}
public boolean applyDistanceRule() {
- return !isVirtual() && !isEvent();
+ return TRADITIONAL == this || PROJECT_APE == this || GCHQ == this;
}
public boolean isVirtual() {
diff --git a/main/src/cgeo/geocaching/enumerations/LiveMapStrategy.java b/main/src/cgeo/geocaching/enumerations/LiveMapStrategy.java
index 5f5b2c9..710c3ba 100644
--- a/main/src/cgeo/geocaching/enumerations/LiveMapStrategy.java
+++ b/main/src/cgeo/geocaching/enumerations/LiveMapStrategy.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.enumerations;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import java.util.EnumSet;
@@ -42,7 +42,7 @@ public interface LiveMapStrategy {
}
public final String getL10n() {
- return cgeoapplication.getInstance().getBaseContext().getResources().getString(stringId);
+ return CgeoApplication.getInstance().getBaseContext().getResources().getString(stringId);
}
}
}
diff --git a/main/src/cgeo/geocaching/enumerations/LogType.java b/main/src/cgeo/geocaching/enumerations/LogType.java
index 9902d3f..543f83d 100644
--- a/main/src/cgeo/geocaching/enumerations/LogType.java
+++ b/main/src/cgeo/geocaching/enumerations/LogType.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.enumerations;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
import java.util.Collections;
import java.util.HashMap;
@@ -102,6 +102,6 @@ public enum LogType {
}
public final String getL10n() {
- return cgeoapplication.getInstance().getBaseContext().getResources().getString(stringId);
+ return CgeoApplication.getInstance().getBaseContext().getResources().getString(stringId);
}
}
diff --git a/main/src/cgeo/geocaching/enumerations/WaypointType.java b/main/src/cgeo/geocaching/enumerations/WaypointType.java
index 79c8106..272b2f2 100644
--- a/main/src/cgeo/geocaching/enumerations/WaypointType.java
+++ b/main/src/cgeo/geocaching/enumerations/WaypointType.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.enumerations;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
import java.util.Collections;
import java.util.HashMap;
@@ -65,7 +65,7 @@ public enum WaypointType {
}
public final String getL10n() {
- return cgeoapplication.getInstance().getBaseContext().getResources().getString(stringId);
+ return CgeoApplication.getInstance().getBaseContext().getResources().getString(stringId);
}
@Override
diff --git a/main/src/cgeo/geocaching/export/AbstractExport.java b/main/src/cgeo/geocaching/export/AbstractExport.java
index e4ba5f0..5d15ecb 100644
--- a/main/src/cgeo/geocaching/export/AbstractExport.java
+++ b/main/src/cgeo/geocaching/export/AbstractExport.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.export;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
abstract class AbstractExport implements Export {
private final String name;
@@ -23,7 +23,7 @@ abstract class AbstractExport implements Export {
* @return localized string
*/
protected static String getString(int resourceId) {
- return cgeoapplication.getInstance().getString(resourceId);
+ return CgeoApplication.getInstance().getString(resourceId);
}
/**
@@ -36,7 +36,7 @@ abstract class AbstractExport implements Export {
* @return localized string
*/
protected static String getString(int resourceId, Object... params) {
- return cgeoapplication.getInstance().getString(resourceId, params);
+ return CgeoApplication.getInstance().getString(resourceId, params);
}
@Override
diff --git a/main/src/cgeo/geocaching/export/FieldnoteExport.java b/main/src/cgeo/geocaching/export/FieldnoteExport.java
index d0040a9..16c8780 100644
--- a/main/src/cgeo/geocaching/export/FieldnoteExport.java
+++ b/main/src/cgeo/geocaching/export/FieldnoteExport.java
@@ -3,7 +3,7 @@ package cgeo.geocaching.export;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.LogEntry;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgData;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.connector.gc.Login;
import cgeo.geocaching.enumerations.StatusCode;
@@ -134,7 +134,7 @@ class FieldnoteExport extends AbstractExport {
int i = 0;
for (final Geocache cache : caches) {
if (cache.isLogOffline()) {
- final LogEntry log = cgData.loadLogOffline(cache.getGeocode());
+ final LogEntry log = DataStore.loadLogOffline(cache.getGeocode());
if (!onlyNew || log.date > Settings.getFieldnoteExportDate()) {
appendFieldNote(fieldNoteBuffer, cache, log);
}
diff --git a/main/src/cgeo/geocaching/export/GpxExport.java b/main/src/cgeo/geocaching/export/GpxExport.java
index 821a3f6..a2e0f93 100644
--- a/main/src/cgeo/geocaching/export/GpxExport.java
+++ b/main/src/cgeo/geocaching/export/GpxExport.java
@@ -2,7 +2,7 @@ package cgeo.geocaching.export;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.AsyncTaskWithProgress;
@@ -125,7 +125,7 @@ class GpxExport extends AbstractExport {
final List<String> allGeocodes = new ArrayList<String>(Arrays.asList(geocodes));
- setMessage(cgeoapplication.getInstance().getResources().getQuantityString(R.plurals.cache_counts, allGeocodes.size(), allGeocodes.size()));
+ setMessage(CgeoApplication.getInstance().getResources().getQuantityString(R.plurals.cache_counts, allGeocodes.size(), allGeocodes.size()));
final File exportFile = getExportFile();
BufferedWriter writer = null;
@@ -141,7 +141,7 @@ class GpxExport extends AbstractExport {
ExportTask.this.publishProgress(countExported);
}
});
- } catch (final Exception e) {
+ } catch (final IOException e) {
Log.e("GpxExport.ExportTask export", e);
if (writer != null) {
diff --git a/main/src/cgeo/geocaching/export/GpxSerializer.java b/main/src/cgeo/geocaching/export/GpxSerializer.java
index 1e39be4..e4051b5 100644
--- a/main/src/cgeo/geocaching/export/GpxSerializer.java
+++ b/main/src/cgeo/geocaching/export/GpxSerializer.java
@@ -1,9 +1,9 @@
package cgeo.geocaching.export;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.LogEntry;
import cgeo.geocaching.Waypoint;
-import cgeo.geocaching.cgData;
import cgeo.geocaching.enumerations.CacheAttribute;
import cgeo.geocaching.enumerations.LoadFlags;
import cgeo.geocaching.geopoint.Geopoint;
@@ -81,7 +81,7 @@ public final class GpxSerializer {
}
private void exportBatch(final XmlSerializer gpx, Collection<String> geocodesOfBatch) throws IOException {
- final Set<Geocache> caches = cgData.loadCaches(geocodesOfBatch, LoadFlags.LOAD_ALL_DB_ONLY);
+ final Set<Geocache> caches = DataStore.loadCaches(geocodesOfBatch, LoadFlags.LOAD_ALL_DB_ONLY);
for (final Geocache cache : caches) {
gpx.startTag(PREFIX_GPX, "wpt");
gpx.attribute("", "lat", Double.toString(cache.getCoords().getLatitude()));
diff --git a/main/src/cgeo/geocaching/files/AbstractFileListActivity.java b/main/src/cgeo/geocaching/files/AbstractFileListActivity.java
index b0aba58..012f8b3 100644
--- a/main/src/cgeo/geocaching/files/AbstractFileListActivity.java
+++ b/main/src/cgeo/geocaching/files/AbstractFileListActivity.java
@@ -2,8 +2,8 @@ package cgeo.geocaching.files;
import cgeo.geocaching.Intents;
import cgeo.geocaching.R;
-import cgeo.geocaching.StoredList;
import cgeo.geocaching.activity.AbstractListActivity;
+import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.utils.FileUtils;
import cgeo.geocaching.utils.Log;
diff --git a/main/src/cgeo/geocaching/files/FileParser.java b/main/src/cgeo/geocaching/files/FileParser.java
index f979d74..bafd858 100644
--- a/main/src/cgeo/geocaching/files/FileParser.java
+++ b/main/src/cgeo/geocaching/files/FileParser.java
@@ -51,7 +51,7 @@ public abstract class FileParser {
protected static StringBuilder readStream(InputStream is, CancellableHandler progressHandler) throws IOException {
final StringBuilder buffer = new StringBuilder();
ProgressInputStream progressInputStream = new ProgressInputStream(is);
- final BufferedReader input = new BufferedReader(new InputStreamReader(progressInputStream));
+ final BufferedReader input = new BufferedReader(new InputStreamReader(progressInputStream, "UTF-8"));
try {
String line;
diff --git a/main/src/cgeo/geocaching/files/GPXImporter.java b/main/src/cgeo/geocaching/files/GPXImporter.java
index a1c04d7..bf0aa72 100644
--- a/main/src/cgeo/geocaching/files/GPXImporter.java
+++ b/main/src/cgeo/geocaching/files/GPXImporter.java
@@ -3,12 +3,12 @@ package cgeo.geocaching.files;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.StaticMapsProvider;
-import cgeo.geocaching.cgData;
-import cgeo.geocaching.activity.IAbstractActivity;
+import cgeo.geocaching.DataStore;
+import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.activity.Progress;
import cgeo.geocaching.enumerations.LoadFlags;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.CancellableHandler;
import cgeo.geocaching.utils.Log;
@@ -17,7 +17,6 @@ import org.apache.commons.lang3.StringUtils;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.ContentResolver;
-import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.net.Uri;
@@ -61,13 +60,13 @@ public class GPXImporter {
private final Resources res;
private final int listId;
- private final IAbstractActivity fromActivity;
+ private final Activity fromActivity;
private final Handler importFinishedHandler;
- public GPXImporter(final IAbstractActivity fromActivity, final int listId, final Handler importFinishedHandler) {
+ public GPXImporter(final Activity fromActivity, final int listId, final Handler importFinishedHandler) {
this.listId = listId;
this.fromActivity = fromActivity;
- res = ((Activity) fromActivity).getResources();
+ res = fromActivity.getResources();
this.importFinishedHandler = importFinishedHandler;
}
@@ -91,8 +90,8 @@ public class GPXImporter {
* Import GPX provided via intent of activity that instantiated this GPXImporter.
*/
public void importGPX() {
- final ContentResolver contentResolver = ((Activity) fromActivity).getContentResolver();
- final Intent intent = ((Activity) fromActivity).getIntent();
+ final ContentResolver contentResolver = fromActivity.getContentResolver();
+ final Intent intent = fromActivity.getIntent();
final Uri uri = intent.getData();
String mimeType = intent.getType();
@@ -176,7 +175,7 @@ public class GPXImporter {
private boolean importStaticMaps(final SearchResult importedCaches) {
int storedCacheMaps = 0;
for (final String geocode : importedCaches.getGeocodes()) {
- final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS);
+ final Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS);
if (cache != null) {
Log.d("GPXImporter.ImportThread.importStaticMaps start downloadMaps for cache " + geocode);
StaticMapsProvider.downloadMaps(cache);
@@ -397,7 +396,7 @@ public class GPXImporter {
switch (msg.what) {
case IMPORT_STEP_START:
final Message cancelMessage = importStepHandler.obtainMessage(IMPORT_STEP_CANCEL);
- progress.show((Context) fromActivity, res.getString(R.string.gpx_import_title_reading_file), res.getString(R.string.gpx_import_loading_caches), ProgressDialog.STYLE_HORIZONTAL, cancelMessage);
+ progress.show(fromActivity, res.getString(R.string.gpx_import_title_reading_file), res.getString(R.string.gpx_import_loading_caches), ProgressDialog.STYLE_HORIZONTAL, cancelMessage);
break;
case IMPORT_STEP_READ_FILE:
@@ -409,7 +408,7 @@ public class GPXImporter {
case IMPORT_STEP_STORE_STATIC_MAPS:
progress.dismiss();
final Message skipMessage = importStepHandler.obtainMessage(IMPORT_STEP_STATIC_MAPS_SKIPPED, msg.arg2, 0);
- progress.show((Context) fromActivity, res.getString(R.string.gpx_import_title_static_maps), res.getString(R.string.gpx_import_store_static_maps), ProgressDialog.STYLE_HORIZONTAL, skipMessage);
+ progress.show(fromActivity, res.getString(R.string.gpx_import_title_static_maps), res.getString(R.string.gpx_import_store_static_maps), ProgressDialog.STYLE_HORIZONTAL, skipMessage);
progress.setMaxProgressAndReset(msg.arg2);
break;
@@ -418,19 +417,19 @@ public class GPXImporter {
progressHandler.cancel();
final StringBuilder bufferSkipped = new StringBuilder(20);
bufferSkipped.append(res.getString(R.string.gpx_import_static_maps_skipped)).append(", ").append(msg.arg1).append(' ').append(res.getString(R.string.gpx_import_caches_imported));
- fromActivity.helpDialog(res.getString(R.string.gpx_import_title_caches_imported), bufferSkipped.toString());
+ ActivityMixin.helpDialog(fromActivity, res.getString(R.string.gpx_import_title_caches_imported), bufferSkipped.toString());
importFinished();
break;
case IMPORT_STEP_FINISHED:
progress.dismiss();
- fromActivity.helpDialog(res.getString(R.string.gpx_import_title_caches_imported), msg.arg1 + " " + res.getString(R.string.gpx_import_caches_imported));
+ ActivityMixin.helpDialog(fromActivity, res.getString(R.string.gpx_import_title_caches_imported), msg.arg1 + " " + res.getString(R.string.gpx_import_caches_imported));
importFinished();
break;
case IMPORT_STEP_FINISHED_WITH_ERROR:
progress.dismiss();
- fromActivity.helpDialog(res.getString(R.string.gpx_import_title_caches_import_failed), res.getString(msg.arg1) + "\n\n" + msg.obj);
+ ActivityMixin.helpDialog(fromActivity, res.getString(R.string.gpx_import_title_caches_import_failed), res.getString(msg.arg1) + "\n\n" + msg.obj);
importFinished();
break;
@@ -442,7 +441,7 @@ public class GPXImporter {
case IMPORT_STEP_CANCELED:
final StringBuilder bufferCanceled = new StringBuilder(20);
bufferCanceled.append(res.getString(R.string.gpx_import_canceled));
- fromActivity.showShortToast(bufferCanceled.toString());
+ ActivityMixin.showShortToast(fromActivity, bufferCanceled.toString());
importFinished();
break;
diff --git a/main/src/cgeo/geocaching/files/GPXParser.java b/main/src/cgeo/geocaching/files/GPXParser.java
index 7ea0a39..dc21552 100644
--- a/main/src/cgeo/geocaching/files/GPXParser.java
+++ b/main/src/cgeo/geocaching/files/GPXParser.java
@@ -1,13 +1,12 @@
package cgeo.geocaching.files;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.LogEntry;
import cgeo.geocaching.R;
-import cgeo.geocaching.StoredList;
import cgeo.geocaching.Trackable;
import cgeo.geocaching.Waypoint;
-import cgeo.geocaching.cgData;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.connector.ConnectorFactory;
import cgeo.geocaching.enumerations.CacheSize;
import cgeo.geocaching.enumerations.CacheType;
@@ -17,6 +16,7 @@ import cgeo.geocaching.enumerations.LoadFlags.SaveFlag;
import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.enumerations.WaypointType;
import cgeo.geocaching.geopoint.Geopoint;
+import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.utils.CancellableHandler;
import cgeo.geocaching.utils.Log;
import cgeo.geocaching.utils.MatcherWrapper;
@@ -205,7 +205,7 @@ public abstract class GPXParser extends FileParser {
// get text for string
String stringName;
try {
- stringName = cgeoapplication.getInstance().getResources().getResourceName(stringId);
+ stringName = CgeoApplication.getInstance().getResources().getResourceName(stringId);
} catch (final NullPointerException e) {
return null;
}
@@ -272,7 +272,7 @@ public abstract class GPXParser extends FileParser {
Double.valueOf(longitude)));
}
}
- } catch (final Exception e) {
+ } catch (final NumberFormatException e) {
Log.w("Failed to parse waypoint's latitude and/or longitude.");
}
}
@@ -312,10 +312,10 @@ public abstract class GPXParser extends FileParser {
// finally store the cache in the database
result.add(geocode);
- cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
+ DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
// avoid the cachecache using lots of memory for caches which the user did not actually look at
- cgData.removeAllFromCache();
+ DataStore.removeAllFromCache();
showProgressMessage(progressHandler, progressStream.getProgress());
} else if (StringUtils.isNotBlank(cache.getName())
&& StringUtils.containsIgnoreCase(type, "waypoint")) {
@@ -331,7 +331,7 @@ public abstract class GPXParser extends FileParser {
if (cache.getName().length() > 2) {
final String cacheGeocodeForWaypoint = "GC" + cache.getName().substring(2).toUpperCase(Locale.US);
// lookup cache for waypoint in already parsed caches
- final Geocache cacheForWaypoint = cgData.loadCache(cacheGeocodeForWaypoint, LoadFlags.LOAD_CACHE_OR_DB);
+ final Geocache cacheForWaypoint = DataStore.loadCache(cacheGeocodeForWaypoint, LoadFlags.LOAD_CACHE_OR_DB);
if (cacheForWaypoint != null) {
final Waypoint waypoint = new Waypoint(cache.getShortDescription(), convertWaypointSym2Type(sym), false);
waypoint.setId(-1);
@@ -349,7 +349,7 @@ public abstract class GPXParser extends FileParser {
newPoints.add(waypoint);
Waypoint.mergeWayPoints(newPoints, mergedWayPoints, true);
cacheForWaypoint.setWaypoints(newPoints, false);
- cgData.saveCache(cacheForWaypoint, EnumSet.of(SaveFlag.SAVE_DB));
+ DataStore.saveCache(cacheForWaypoint, EnumSet.of(SaveFlag.SAVE_DB));
showProgressMessage(progressHandler, progressStream.getProgress());
}
}
@@ -501,7 +501,7 @@ public abstract class GPXParser extends FileParser {
if (attrs.getIndex("available") > -1) {
cache.setDisabled(!attrs.getValue("available").equalsIgnoreCase("true"));
}
- } catch (final Exception e) {
+ } catch (final RuntimeException e) {
Log.w("Failed to parse cache attributes.");
}
}
@@ -680,7 +680,7 @@ public abstract class GPXParser extends FileParser {
if (attrs.getIndex("ref") > -1) {
trackable.setGeocode(attrs.getValue("ref"));
}
- } catch (final Exception e) {
+ } catch (final RuntimeException e) {
// nothing
}
}
@@ -724,7 +724,7 @@ public abstract class GPXParser extends FileParser {
if (attrs.getIndex("id") > -1) {
log.id = Integer.parseInt(attrs.getValue("id"));
}
- } catch (final Exception e) {
+ } catch (final NumberFormatException e) {
// nothing
}
}
@@ -785,7 +785,7 @@ public abstract class GPXParser extends FileParser {
try {
progressStream = new ProgressInputStream(stream);
Xml.parse(progressStream, Xml.Encoding.UTF_8, root.getContentHandler());
- return cgData.loadCaches(result, EnumSet.of(LoadFlag.LOAD_DB_MINIMAL));
+ return DataStore.loadCaches(result, EnumSet.of(LoadFlag.LOAD_DB_MINIMAL));
} catch (final SAXException e) {
Log.w("Cannot parse .gpx file as GPX " + version + ": could not parse XML - ", e);
throw new ParserException("Cannot parse .gpx file as GPX " + version + ": could not parse XML", e);
diff --git a/main/src/cgeo/geocaching/files/LocParser.java b/main/src/cgeo/geocaching/files/LocParser.java
index 1cfb2a3..3d01c1b 100644
--- a/main/src/cgeo/geocaching/files/LocParser.java
+++ b/main/src/cgeo/geocaching/files/LocParser.java
@@ -1,8 +1,8 @@
package cgeo.geocaching.files;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.cgData;
import cgeo.geocaching.enumerations.CacheSize;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.LoadFlags;
@@ -59,7 +59,7 @@ public final class LocParser extends FileParser {
contained.add(geocode);
}
}
- Set<Geocache> caches = cgData.loadCaches(contained, LoadFlags.LOAD_CACHE_OR_DB);
+ Set<Geocache> caches = DataStore.loadCaches(contained, LoadFlags.LOAD_CACHE_OR_DB);
for (Geocache cache : caches) {
Geocache coord = cidCoords.get(cache.getGeocode());
copyCoordToCache(coord, cache);
diff --git a/main/src/cgeo/geocaching/files/LocalStorage.java b/main/src/cgeo/geocaching/files/LocalStorage.java
index fc82409..e5ba8c0 100644
--- a/main/src/cgeo/geocaching/files/LocalStorage.java
+++ b/main/src/cgeo/geocaching/files/LocalStorage.java
@@ -1,6 +1,6 @@
package cgeo.geocaching.files;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.utils.CryptUtils;
import cgeo.geocaching.utils.FileUtils;
import cgeo.geocaching.utils.IOUtils;
@@ -8,7 +8,6 @@ import cgeo.geocaching.utils.Log;
import ch.boye.httpclientandroidlib.Header;
import ch.boye.httpclientandroidlib.HttpResponse;
-
import org.apache.commons.lang3.StringUtils;
import android.os.Environment;
@@ -21,11 +20,13 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
-import java.io.FileReader;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
import java.io.OutputStream;
+import java.io.Reader;
+import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
@@ -86,7 +87,7 @@ public final class LocalStorage {
private static File getInternalStorageBase() {
if (internalStorageBase == null) {
// A race condition will do no harm as the operation is idempotent. No need to synchronize.
- internalStorageBase = cgeoapplication.getInstance().getApplicationContext().getFilesDir().getParentFile();
+ internalStorageBase = CgeoApplication.getInstance().getApplicationContext().getFilesDir().getParentFile();
}
return internalStorageBase;
}
@@ -204,7 +205,13 @@ public final class LocalStorage {
if (header == null) {
FileUtils.deleteIgnoringFailure(file);
} else {
- saveToFile(new ByteArrayInputStream(header.getValue().getBytes()), file);
+ try {
+ saveToFile(new ByteArrayInputStream(header.getValue().getBytes("UTF-8")), file);
+ } catch (final UnsupportedEncodingException e) {
+ // Do not try to display the header in the log message, as our default encoding is
+ // likely to be UTF-8 and it will fail as well.
+ Log.e("LocalStorage.saveHeader: unable to decode header", e);
+ }
}
}
@@ -224,7 +231,7 @@ public final class LocalStorage {
public static String getSavedHeader(final File baseFile, final String name) {
try {
final File file = filenameForHeader(baseFile, name);
- final FileReader f = new FileReader(file);
+ final Reader f = new InputStreamReader(new FileInputStream(file), "UTF-8");
try {
// No header will be more than 256 bytes
final char[] value = new char[256];
@@ -410,10 +417,10 @@ public final class LocalStorage {
storages.add(new File(extStorage));
File file = new File("/system/etc/vold.fstab");
if (file.canRead()) {
- FileReader fr = null;
+ Reader fr = null;
BufferedReader br = null;
try {
- fr = new FileReader(file);
+ fr = new InputStreamReader(new FileInputStream(file), "UTF-8");
br = new BufferedReader(fr);
String s = br.readLine();
while (s != null) {
diff --git a/main/src/cgeo/geocaching/files/SimpleDirChooser.java b/main/src/cgeo/geocaching/files/SimpleDirChooser.java
index cf969dc..ba7c679 100644
--- a/main/src/cgeo/geocaching/files/SimpleDirChooser.java
+++ b/main/src/cgeo/geocaching/files/SimpleDirChooser.java
@@ -93,7 +93,7 @@ public class SimpleDirChooser extends AbstractListActivity {
for (File currentDir : dirs) {
listDirs.add(new Option(currentDir.getName(), currentDir.getAbsolutePath()));
}
- } catch (Exception e) {
+ } catch (RuntimeException e) {
}
Collections.sort(listDirs);
if (dir.getParent() != null) {
diff --git a/main/src/cgeo/geocaching/filter/AbstractRangeFilter.java b/main/src/cgeo/geocaching/filter/AbstractRangeFilter.java
index 96d256a..cafb92b 100644
--- a/main/src/cgeo/geocaching/filter/AbstractRangeFilter.java
+++ b/main/src/cgeo/geocaching/filter/AbstractRangeFilter.java
@@ -1,6 +1,6 @@
package cgeo.geocaching.filter;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
abstract class AbstractRangeFilter extends AbstractFilter {
@@ -9,7 +9,7 @@ abstract class AbstractRangeFilter extends AbstractFilter {
protected final float rangeMax;
protected AbstractRangeFilter(final int ressourceId, final int range) {
- super(cgeoapplication.getInstance().getResources().getString(ressourceId) + ' ' + (range == 5 ? '5' : range + " + " + String.format("%.1f", range + 0.5)));
+ super(CgeoApplication.getInstance().getResources().getString(ressourceId) + ' ' + (range == 5 ? '5' : range + " + " + String.format("%.1f", range + 0.5)));
this.rangeMin = range;
rangeMax = rangeMin + 1f;
}
diff --git a/main/src/cgeo/geocaching/filter/AttributeFilter.java b/main/src/cgeo/geocaching/filter/AttributeFilter.java
index cadcf49..6f0d5da 100644
--- a/main/src/cgeo/geocaching/filter/AttributeFilter.java
+++ b/main/src/cgeo/geocaching/filter/AttributeFilter.java
@@ -1,9 +1,9 @@
package cgeo.geocaching.filter;
+import cgeo.geocaching.CgeoApplication;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgData;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.enumerations.LoadFlags.LoadFlag;
import android.content.res.Resources;
@@ -29,7 +29,7 @@ class AttributeFilter extends AbstractFilter {
@Override
public boolean accepts(final Geocache cache) {
- Geocache fullCache = cgData.loadCache(cache.getGeocode(), EnumSet.of(LoadFlag.LOAD_ATTRIBUTES));
+ Geocache fullCache = DataStore.loadCache(cache.getGeocode(), EnumSet.of(LoadFlag.LOAD_ATTRIBUTES));
if (fullCache == null) {
fullCache = cache;
}
@@ -40,8 +40,8 @@ class AttributeFilter extends AbstractFilter {
@Override
public List<IFilter> getFilters() {
- final String packageName = cgeoapplication.getInstance().getBaseContext().getPackageName();
- final Resources res = cgeoapplication.getInstance().getResources();
+ final String packageName = CgeoApplication.getInstance().getBaseContext().getPackageName();
+ final Resources res = CgeoApplication.getInstance().getResources();
final List<IFilter> filters = new LinkedList<IFilter>();
for (final String id: res.getStringArray(R.array.attribute_ids)) {
diff --git a/main/src/cgeo/geocaching/filter/DistanceFilter.java b/main/src/cgeo/geocaching/filter/DistanceFilter.java
index 2f39473..54225d2 100644
--- a/main/src/cgeo/geocaching/filter/DistanceFilter.java
+++ b/main/src/cgeo/geocaching/filter/DistanceFilter.java
@@ -3,7 +3,7 @@ package cgeo.geocaching.filter;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.IGeoData;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.geopoint.Geopoint;
import java.util.ArrayList;
@@ -18,7 +18,7 @@ class DistanceFilter extends AbstractFilter {
super(name);
this.minDistance = minDistance;
this.maxDistance = maxDistance;
- geo = cgeoapplication.getInstance().currentGeo();
+ geo = CgeoApplication.getInstance().currentGeo();
}
@Override
@@ -27,7 +27,7 @@ class DistanceFilter extends AbstractFilter {
final Geopoint coords = cache.getCoords();
if (coords == null) {
// If a cache has no coordinates, consider it to be out of range. It will
- // happen with archived cache.
+ // happen with archived caches.
return false;
}
final float distance = currentPos.distanceTo(coords);
@@ -50,8 +50,8 @@ class DistanceFilter extends AbstractFilter {
else {
maxRange = Integer.MAX_VALUE;
}
- final String range = maxRange == Integer.MAX_VALUE ? "> " + String.valueOf(minRange) : String.valueOf(minRange) + " - " + String.valueOf(maxRange);
- final String name = cgeoapplication.getInstance().getResources().getQuantityString(R.plurals.tts_kilometers, maxRange, range);
+ final String range = maxRange == Integer.MAX_VALUE ? "> " + minRange : minRange + " - " + maxRange;
+ final String name = CgeoApplication.getInstance().getResources().getQuantityString(R.plurals.tts_kilometers, maxRange, range);
filters.add(new DistanceFilter(name, minRange, maxRange));
}
return filters;
diff --git a/main/src/cgeo/geocaching/filter/FilterUserInterface.java b/main/src/cgeo/geocaching/filter/FilterUserInterface.java
index 2404f44..8ff700a 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.CgeoApplication;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.Log;
@@ -41,7 +41,7 @@ public final class FilterUserInterface {
public FilterUserInterface(final Activity activity) {
this.activity = activity;
- this.res = cgeoapplication.getInstance().getResources();
+ this.res = CgeoApplication.getInstance().getResources();
registry = new ArrayList<FactoryEntry>();
if (Settings.getCacheType() == CacheType.ALL) {
diff --git a/main/src/cgeo/geocaching/filter/ModifiedFilter.java b/main/src/cgeo/geocaching/filter/ModifiedFilter.java
index 74befda..d976b69 100644
--- a/main/src/cgeo/geocaching/filter/ModifiedFilter.java
+++ b/main/src/cgeo/geocaching/filter/ModifiedFilter.java
@@ -2,7 +2,7 @@ package cgeo.geocaching.filter;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import java.util.Collections;
import java.util.List;
@@ -10,7 +10,7 @@ import java.util.List;
class ModifiedFilter extends AbstractFilter implements IFilterFactory {
public ModifiedFilter() {
- super(cgeoapplication.getInstance().getString(R.string.caches_filter_modified));
+ super(CgeoApplication.getInstance().getString(R.string.caches_filter_modified));
}
@Override
diff --git a/main/src/cgeo/geocaching/filter/StateFilter.java b/main/src/cgeo/geocaching/filter/StateFilter.java
index 98589ab..d5b3027 100644
--- a/main/src/cgeo/geocaching/filter/StateFilter.java
+++ b/main/src/cgeo/geocaching/filter/StateFilter.java
@@ -1,8 +1,8 @@
package cgeo.geocaching.filter;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
import android.content.res.Resources;
@@ -13,7 +13,7 @@ import java.util.List;
abstract class StateFilter extends AbstractFilter {
- static final Resources res = cgeoapplication.getInstance().getResources();
+ static final Resources res = CgeoApplication.getInstance().getResources();
protected StateFilter(final String name) {
super(name);
diff --git a/main/src/cgeo/geocaching/filter/TrackablesFilter.java b/main/src/cgeo/geocaching/filter/TrackablesFilter.java
index 74f43be..d836a0f 100644
--- a/main/src/cgeo/geocaching/filter/TrackablesFilter.java
+++ b/main/src/cgeo/geocaching/filter/TrackablesFilter.java
@@ -1,15 +1,15 @@
package cgeo.geocaching.filter;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
import java.util.Collections;
import java.util.List;
class TrackablesFilter extends AbstractFilter implements IFilterFactory {
public TrackablesFilter() {
- super(cgeoapplication.getInstance().getString(R.string.caches_filter_track));
+ super(CgeoApplication.getInstance().getString(R.string.caches_filter_track));
}
@Override
diff --git a/main/src/cgeo/geocaching/gcvote/GCVote.java b/main/src/cgeo/geocaching/gcvote/GCVote.java
index 868be2b..f20a6d4 100644
--- a/main/src/cgeo/geocaching/gcvote/GCVote.java
+++ b/main/src/cgeo/geocaching/gcvote/GCVote.java
@@ -16,20 +16,28 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.regex.Pattern;
public final class GCVote {
- private static final Pattern patternLogIn = Pattern.compile("loggedIn='([^']+)'", Pattern.CASE_INSENSITIVE);
- private static final Pattern patternGuid = Pattern.compile("cacheId='([^']+)'", Pattern.CASE_INSENSITIVE);
- private static final Pattern patternWaypoint = Pattern.compile("waypoint='([^']+)'", Pattern.CASE_INSENSITIVE);
- private static final Pattern patternRating = Pattern.compile("voteAvg='([0-9.]+)'", Pattern.CASE_INSENSITIVE);
- private static final Pattern patternVotes = Pattern.compile("voteCnt='([0-9]+)'", Pattern.CASE_INSENSITIVE);
- private static final Pattern patternVote = Pattern.compile("voteUser='([0-9.]+)'", Pattern.CASE_INSENSITIVE);
- private static final Pattern patternVoteElement = Pattern.compile("<vote ([^>]+)>", Pattern.CASE_INSENSITIVE);
+ public static final float NO_RATING = 0;
+ private static final Pattern PATTERN_LOG_IN = Pattern.compile("loggedIn='([^']+)'", Pattern.CASE_INSENSITIVE);
+ private static final Pattern PATTERN_GUID = Pattern.compile("cacheId='([^']+)'", Pattern.CASE_INSENSITIVE);
+ private static final Pattern PATTERN_WAYPOINT = Pattern.compile("waypoint='([^']+)'", Pattern.CASE_INSENSITIVE);
+ private static final Pattern PATTERN_RATING = Pattern.compile("voteAvg='([0-9.]+)'", Pattern.CASE_INSENSITIVE);
+ private static final Pattern PATTERN_VOTES = Pattern.compile("voteCnt='([0-9]+)'", Pattern.CASE_INSENSITIVE);
+ private static final Pattern PATTERN_VOTE = Pattern.compile("voteUser='([0-9.]+)'", Pattern.CASE_INSENSITIVE);
+ private static final Pattern PATTERN_VOTE_ELEMENT = Pattern.compile("<vote ([^>]+)>", Pattern.CASE_INSENSITIVE);
private static final int MAX_CACHED_RATINGS = 1000;
- private static LeastRecentlyUsedMap<String, GCVoteRating> ratingsCache = new LeastRecentlyUsedMap.LruCache<String, GCVoteRating>(MAX_CACHED_RATINGS);
+ private static final LeastRecentlyUsedMap<String, GCVoteRating> RATINGS_CACHE = new LeastRecentlyUsedMap.LruCache<String, GCVoteRating>(MAX_CACHED_RATINGS);
+ private static final float MIN_RATING = 1;
+ private static final float MAX_RATING = 5;
+
+ private GCVote() {
+ // utility class
+ }
/**
* Get user rating for a given guid or geocode. For a guid first the ratings cache is checked
@@ -39,9 +47,9 @@ public final class GCVote {
* @param geocode
* @return
*/
- public static GCVoteRating getRating(String guid, String geocode) {
- if (StringUtils.isNotBlank(guid) && ratingsCache.containsKey(guid)) {
- return ratingsCache.get(guid);
+ public static GCVoteRating getRating(final String guid, final String geocode) {
+ if (StringUtils.isNotBlank(guid) && RATINGS_CACHE.containsKey(guid)) {
+ return RATINGS_CACHE.get(guid);
}
final Map<String, GCVoteRating> ratings = getRating(singletonOrNull(guid), singletonOrNull(geocode));
@@ -59,7 +67,7 @@ public final class GCVote {
* @param geocodes
* @return
*/
- public static Map<String, GCVoteRating> getRating(List<String> guids, List<String> geocodes) {
+ public static Map<String, GCVoteRating> getRating(final List<String> guids, final List<String> geocodes) {
if (guids == null && geocodes == null) {
return null;
}
@@ -88,7 +96,7 @@ public final class GCVote {
return null;
}
- final MatcherWrapper matcherVoteElement = new MatcherWrapper(patternVoteElement, page);
+ final MatcherWrapper matcherVoteElement = new MatcherWrapper(PATTERN_VOTE_ELEMENT, page);
while (matcherVoteElement.find()) {
String voteData = matcherVoteElement.group(1);
if (voteData == null) {
@@ -97,29 +105,21 @@ public final class GCVote {
String id = null;
String guid = null;
- try {
- final MatcherWrapper matcherGuid = new MatcherWrapper(patternGuid, voteData);
- if (matcherGuid.find()) {
- if (matcherGuid.groupCount() > 0) {
- guid = matcherGuid.group(1);
- if (requestByGuids) {
- id = guid;
- }
+ final MatcherWrapper matcherGuid = new MatcherWrapper(PATTERN_GUID, voteData);
+ if (matcherGuid.find()) {
+ if (matcherGuid.groupCount() > 0) {
+ guid = matcherGuid.group(1);
+ if (requestByGuids) {
+ id = guid;
}
}
- } catch (Exception e) {
- Log.w("GCVote.getRating: Failed to parse guid");
}
if (!requestByGuids) {
- try {
- final MatcherWrapper matcherWp = new MatcherWrapper(patternWaypoint, voteData);
- if (matcherWp.find()) {
- if (matcherWp.groupCount() > 0) {
- id = matcherWp.group(1);
- }
+ final MatcherWrapper matcherWp = new MatcherWrapper(PATTERN_WAYPOINT, voteData);
+ if (matcherWp.find()) {
+ if (matcherWp.groupCount() > 0) {
+ id = matcherWp.group(1);
}
- } catch (Exception e) {
- Log.w("GCVote.getRating: Failed to parse waypoint");
}
}
if (id == null) {
@@ -127,53 +127,49 @@ public final class GCVote {
}
boolean loggedIn = false;
- try {
- final MatcherWrapper matcherLoggedIn = new MatcherWrapper(patternLogIn, page);
- if (matcherLoggedIn.find()) {
- if (matcherLoggedIn.groupCount() > 0) {
- if (matcherLoggedIn.group(1).equalsIgnoreCase("true")) {
- loggedIn = true;
- }
+ final MatcherWrapper matcherLoggedIn = new MatcherWrapper(PATTERN_LOG_IN, page);
+ if (matcherLoggedIn.find()) {
+ if (matcherLoggedIn.groupCount() > 0) {
+ if (matcherLoggedIn.group(1).equalsIgnoreCase("true")) {
+ loggedIn = true;
}
}
- } catch (Exception e) {
- Log.w("GCVote.getRating: Failed to parse loggedIn");
}
- float rating = 0;
+ float rating = NO_RATING;
try {
- final MatcherWrapper matcherRating = new MatcherWrapper(patternRating, voteData);
+ final MatcherWrapper matcherRating = new MatcherWrapper(PATTERN_RATING, voteData);
if (matcherRating.find()) {
rating = Float.parseFloat(matcherRating.group(1));
}
- } catch (Exception e) {
+ } catch (NumberFormatException e) {
Log.w("GCVote.getRating: Failed to parse rating");
}
- if (rating <= 0) {
+ if (!isValidRating(rating)) {
continue;
}
int votes = -1;
try {
- final MatcherWrapper matcherVotes = new MatcherWrapper(patternVotes, voteData);
+ final MatcherWrapper matcherVotes = new MatcherWrapper(PATTERN_VOTES, voteData);
if (matcherVotes.find()) {
votes = Integer.parseInt(matcherVotes.group(1));
}
- } catch (Exception e) {
+ } catch (NumberFormatException e) {
Log.w("GCVote.getRating: Failed to parse vote count");
}
if (votes < 0) {
continue;
}
- float myVote = 0;
+ float myVote = NO_RATING;
if (loggedIn) {
try {
- final MatcherWrapper matcherVote = new MatcherWrapper(patternVote, voteData);
+ final MatcherWrapper matcherVote = new MatcherWrapper(PATTERN_VOTE, voteData);
if (matcherVote.find()) {
myVote = Float.parseFloat(matcherVote.group(1));
}
- } catch (Exception e) {
+ } catch (NumberFormatException e) {
Log.w("GCVote.getRating: Failed to parse user's vote");
}
}
@@ -181,10 +177,10 @@ public final class GCVote {
if (StringUtils.isNotBlank(id)) {
GCVoteRating gcvoteRating = new GCVoteRating(rating, votes, myVote);
ratings.put(id, gcvoteRating);
- ratingsCache.put(guid, gcvoteRating);
+ RATINGS_CACHE.put(guid, gcvoteRating);
}
}
- } catch (Exception e) {
+ } catch (RuntimeException e) {
Log.e("GCVote.getRating", e);
}
@@ -198,18 +194,11 @@ public final class GCVote {
* @param vote
* @return {@code true} if the rating was submitted successfully
*/
- public static boolean setRating(Geocache cache, double vote) {
- if (!Settings.isGCvoteLogin()) {
- return false;
- }
- if (!cache.supportsGCVote()) {
+ public static boolean setRating(final Geocache cache, final float vote) {
+ if (!isVotingPossible(cache)) {
return false;
}
- String guid = cache.getGuid();
- if (StringUtils.isBlank(guid)) {
- return false;
- }
- if (vote <= 0.0 || vote > 5.0) {
+ if (!isValidRating(vote)) {
return false;
}
@@ -221,16 +210,16 @@ public final class GCVote {
final Parameters params = new Parameters(
"userName", login.left,
"password", login.right,
- "cacheId", guid,
+ "cacheId", cache.getGuid(),
"voteUser", String.format("%.1f", vote).replace(',', '.'),
"version", "cgeo");
final String result = Network.getResponseData(Network.getRequest("http://gcvote.com/setVote.php", params));
- return result.trim().equalsIgnoreCase("ok");
+ return result != null && result.trim().equalsIgnoreCase("ok");
}
- public static void loadRatings(ArrayList<Geocache> caches) {
+ public static void loadRatings(final ArrayList<Geocache> caches) {
if (!Settings.isRatingWanted()) {
return;
}
@@ -266,4 +255,17 @@ public final class GCVote {
Log.e("GCvote.loadRatings", e);
}
}
+
+ public static boolean isValidRating(final float rating) {
+ return rating >= MIN_RATING && rating <= MAX_RATING;
+ }
+
+ public static String getRatingText(final float rating) {
+ return String.format(Locale.getDefault(), "%.1f", rating);
+ }
+
+ public static boolean isVotingPossible(final Geocache cache) {
+ return Settings.isGCvoteLogin() && StringUtils.isNotBlank(cache.getGuid()) && cache.supportsGCVote();
+ }
+
}
diff --git a/main/src/cgeo/geocaching/gcvote/GCVoteRating.java b/main/src/cgeo/geocaching/gcvote/GCVoteRating.java
index f6813a2..1e65589 100644
--- a/main/src/cgeo/geocaching/gcvote/GCVoteRating.java
+++ b/main/src/cgeo/geocaching/gcvote/GCVoteRating.java
@@ -5,7 +5,7 @@ public final class GCVoteRating {
private final int votes;
private final float myVote;
- public GCVoteRating(float rating, int votes, float myVote) {
+ public GCVoteRating(final float rating, final int votes, final float myVote) {
this.rating = rating;
this.votes = votes;
this.myVote = myVote;
diff --git a/main/src/cgeo/geocaching/list/AbstractList.java b/main/src/cgeo/geocaching/list/AbstractList.java
new file mode 100644
index 0000000..ec783eb
--- /dev/null
+++ b/main/src/cgeo/geocaching/list/AbstractList.java
@@ -0,0 +1,28 @@
+package cgeo.geocaching.list;
+
+import org.eclipse.jdt.annotation.Nullable;
+
+import android.util.SparseArray;
+
+public abstract class AbstractList {
+
+ public final int id;
+ public final String title;
+ private static SparseArray<AbstractList> LISTS = new SparseArray<AbstractList>();
+
+ public AbstractList(final int id, final String title) {
+ this.id = id;
+ this.title = title;
+ LISTS.put(id, this);
+ }
+
+ public abstract String getTitleAndCount();
+
+ public abstract boolean isConcrete();
+
+ @Nullable
+ public static AbstractList getListById(int listId) {
+ return LISTS.get(listId);
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/list/PseudoList.java b/main/src/cgeo/geocaching/list/PseudoList.java
new file mode 100644
index 0000000..365d6fd
--- /dev/null
+++ b/main/src/cgeo/geocaching/list/PseudoList.java
@@ -0,0 +1,37 @@
+package cgeo.geocaching.list;
+
+import cgeo.geocaching.CgeoApplication;
+import cgeo.geocaching.R;
+
+public class PseudoList extends AbstractList {
+
+ private static final int ALL_LIST_ID = 2;
+ /**
+ * list entry to show all caches
+ */
+ public static final PseudoList ALL_LIST = new PseudoList(ALL_LIST_ID, R.string.list_all_lists);
+
+ private static final int NEW_LIST_ID = 3;
+ /**
+ * list entry to create a new list
+ */
+ public static final AbstractList NEW_LIST = new PseudoList(NEW_LIST_ID, R.string.list_menu_create);
+
+ /**
+ * private constructor to have all instances as constants in the class
+ */
+ private PseudoList(int id, final int titleResourceId) {
+ super(id, CgeoApplication.getInstance().getResources().getString(titleResourceId));
+ }
+
+ @Override
+ public String getTitleAndCount() {
+ return "<" + title + ">";
+ }
+
+ @Override
+ public boolean isConcrete() {
+ return false;
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/StoredList.java b/main/src/cgeo/geocaching/list/StoredList.java
index 4946420..feb40c7 100644
--- a/main/src/cgeo/geocaching/StoredList.java
+++ b/main/src/cgeo/geocaching/list/StoredList.java
@@ -1,9 +1,13 @@
-package cgeo.geocaching;
+package cgeo.geocaching.list;
+import cgeo.geocaching.CgeoApplication;
+import cgeo.geocaching.DataStore;
+import cgeo.geocaching.R;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.utils.RunnableWithArgument;
import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jdt.annotation.NonNull;
import android.app.Activity;
import android.app.AlertDialog;
@@ -18,21 +22,17 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.List;
-public final class StoredList {
+public final class StoredList extends AbstractList {
public static final int TEMPORARY_LIST_ID = 0;
public static final int STANDARD_LIST_ID = 1;
- public static final int ALL_LIST_ID = 2;
-
- public final int id;
- public final String title;
private final int count; // this value is only valid as long as the list is not changed by other database operations
public StoredList(int id, String title, int count) {
- this.id = id;
- this.title = title;
+ super(id, title);
this.count = count;
}
+ @Override
public String getTitleAndCount() {
return title + " [" + count + "]";
}
@@ -58,45 +58,43 @@ public final class StoredList {
public static class UserInterface {
private final Activity activity;
- private final cgeoapplication app;
+ private final CgeoApplication app;
private final Resources res;
public UserInterface(final Activity activity) {
this.activity = activity;
- app = cgeoapplication.getInstance();
+ app = CgeoApplication.getInstance();
res = app.getResources();
}
- public void promptForListSelection(final int titleId, final RunnableWithArgument<Integer> runAfterwards) {
+ public void promptForListSelection(final int titleId, @NonNull final RunnableWithArgument<Integer> runAfterwards) {
promptForListSelection(titleId, runAfterwards, false, -1);
}
- public void promptForListSelection(final int titleId, final RunnableWithArgument<Integer> runAfterwards, final boolean onlyConcreteLists, final int exceptListId) {
+ public void promptForListSelection(final int titleId, @NonNull final RunnableWithArgument<Integer> runAfterwards, final boolean onlyConcreteLists, final int exceptListId) {
promptForListSelection(titleId, runAfterwards, onlyConcreteLists, exceptListId, StringUtils.EMPTY);
}
- public void promptForListSelection(final int titleId, final RunnableWithArgument<Integer> runAfterwards, final boolean onlyConcreteLists, final int exceptListId, final String newListName) {
- final List<StoredList> lists = getSortedLists();
-
- if (lists == null) {
- return;
- }
+ public void promptForListSelection(final int titleId, @NonNull final RunnableWithArgument<Integer> runAfterwards, final boolean onlyConcreteLists, final int exceptListId, final String newListName) {
+ final List<AbstractList> lists = new ArrayList<AbstractList>();
+ lists.addAll(getSortedLists());
if (exceptListId > StoredList.TEMPORARY_LIST_ID) {
- StoredList exceptList = cgData.getList(exceptListId);
+ StoredList exceptList = DataStore.getList(exceptListId);
if (exceptList != null) {
lists.remove(exceptList);
}
}
+ if (!onlyConcreteLists) {
+ lists.add(PseudoList.ALL_LIST);
+ }
+ lists.add(PseudoList.NEW_LIST);
+
final List<CharSequence> listsTitle = new ArrayList<CharSequence>();
- for (StoredList list : lists) {
+ for (AbstractList list : lists) {
listsTitle.add(list.getTitleAndCount());
}
- if (!onlyConcreteLists) {
- listsTitle.add("<" + res.getString(R.string.list_menu_all_lists) + ">");
- }
- listsTitle.add("<" + res.getString(R.string.list_menu_create) + ">");
final CharSequence[] items = new CharSequence[listsTitle.size()];
@@ -105,26 +103,23 @@ public final class StoredList {
builder.setItems(listsTitle.toArray(items), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int itemId) {
- if (itemId == lists.size() && !onlyConcreteLists) {
- // all lists
- runAfterwards.run(StoredList.ALL_LIST_ID);
- } else if (itemId >= lists.size()) {
+ final AbstractList list = lists.get(itemId);
+ if (list == PseudoList.NEW_LIST) {
// create new list on the fly
promptForListCreation(runAfterwards, newListName);
}
else {
- if (runAfterwards != null) {
- runAfterwards.run(lists.get(itemId).id);
- }
+ runAfterwards.run(lists.get(itemId).id);
}
}
});
builder.create().show();
}
+ @NonNull
private static List<StoredList> getSortedLists() {
final Collator collator = Collator.getInstance();
- final List<StoredList> lists = cgData.getLists();
+ final List<StoredList> lists = DataStore.getLists();
Collections.sort(lists, new Comparator<StoredList>() {
@Override
@@ -143,18 +138,16 @@ public final class StoredList {
return lists;
}
- public void promptForListCreation(final RunnableWithArgument<Integer> runAfterwards, String newListName) {
+ public void promptForListCreation(@NonNull final RunnableWithArgument<Integer> runAfterwards, String newListName) {
handleListNameInput(newListName, R.string.list_dialog_create_title, R.string.list_dialog_create, new RunnableWithArgument<String>() {
@Override
public void run(final String listName) {
- final int newId = cgData.createList(listName);
+ final int newId = DataStore.createList(listName);
- if (newId >= cgData.customListIdOffset) {
+ if (newId >= DataStore.customListIdOffset) {
ActivityMixin.showToast(activity, res.getString(R.string.list_dialog_create_ok));
- if (runAfterwards != null) {
- runAfterwards.run(newId);
- }
+ runAfterwards.run(newId);
} else {
ActivityMixin.showToast(activity, res.getString(R.string.list_dialog_create_err));
}
@@ -190,16 +183,14 @@ public final class StoredList {
alert.show();
}
- public void promptForListRename(final int listId, final Runnable runAfterRename) {
- final StoredList list = cgData.getList(listId);
+ public void promptForListRename(final int listId, @NonNull final Runnable runAfterRename) {
+ final StoredList list = DataStore.getList(listId);
handleListNameInput(list.title, R.string.list_dialog_rename_title, R.string.list_dialog_rename, new RunnableWithArgument<String>() {
@Override
public void run(final String listName) {
- cgData.renameList(listId, listName);
- if (runAfterRename != null) {
- runAfterRename.run();
- }
+ DataStore.renameList(listId, listName);
+ runAfterRename.run();
}
});
}
@@ -218,9 +209,15 @@ public final class StoredList {
* Return the given list, if it is a concrete list. Return the default list otherwise.
*/
public static int getConcreteList(int listId) {
- if (listId == ALL_LIST_ID || listId == TEMPORARY_LIST_ID) {
+ if (listId == PseudoList.ALL_LIST.id || listId == TEMPORARY_LIST_ID) {
return STANDARD_LIST_ID;
}
return listId;
}
+
+ @Override
+ public boolean isConcrete() {
+ return true;
+ }
+
}
diff --git a/main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java
index 722f9f5..605f461 100644
--- a/main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java
+++ b/main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java
@@ -1,8 +1,8 @@
package cgeo.geocaching.loaders;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.SearchResult;
import cgeo.geocaching.settings.Settings;
-import cgeo.geocaching.cgData;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.geopoint.Geopoint;
@@ -18,7 +18,7 @@ public class HistoryGeocacheListLoader extends AbstractSearchLoader {
@Override
public SearchResult runSearch() {
- return cgData.getHistoryOfCaches(true, coords != null ? Settings.getCacheType() : CacheType.ALL);
+ return DataStore.getHistoryOfCaches(true, coords != null ? Settings.getCacheType() : CacheType.ALL);
}
}
diff --git a/main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java
index ab8ba6a..5088484 100644
--- a/main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java
+++ b/main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java
@@ -2,7 +2,7 @@ package cgeo.geocaching.loaders;
import cgeo.geocaching.SearchResult;
import cgeo.geocaching.settings.Settings;
-import cgeo.geocaching.cgData;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.geopoint.Geopoint;
import android.content.Context;
@@ -20,7 +20,7 @@ public class OfflineGeocacheListLoader extends AbstractSearchLoader {
@Override
public SearchResult runSearch() {
- return cgData.getBatchOfStoredCaches(searchCenter, Settings.getCacheType(), listId);
+ return DataStore.getBatchOfStoredCaches(searchCenter, Settings.getCacheType(), listId);
}
public void setListId(int listId) {
diff --git a/main/src/cgeo/geocaching/loaders/RemoveFromHistoryLoader.java b/main/src/cgeo/geocaching/loaders/RemoveFromHistoryLoader.java
index 2229afe..8ca0fa5 100644
--- a/main/src/cgeo/geocaching/loaders/RemoveFromHistoryLoader.java
+++ b/main/src/cgeo/geocaching/loaders/RemoveFromHistoryLoader.java
@@ -1,8 +1,8 @@
package cgeo.geocaching.loaders;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.SearchResult;
import cgeo.geocaching.settings.Settings;
-import cgeo.geocaching.cgData;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.geopoint.Geopoint;
@@ -21,8 +21,8 @@ public class RemoveFromHistoryLoader extends AbstractSearchLoader {
@Override
public SearchResult runSearch() {
- cgData.clearVisitDate(selected);
- return cgData.getHistoryOfCaches(true, coords != null ? Settings.getCacheType() : CacheType.ALL);
+ DataStore.clearVisitDate(selected);
+ return DataStore.getHistoryOfCaches(true, coords != null ? Settings.getCacheType() : CacheType.ALL);
}
}
diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java
index 0817170..ec90c8f 100644
--- a/main/src/cgeo/geocaching/maps/CGeoMap.java
+++ b/main/src/cgeo/geocaching/maps/CGeoMap.java
@@ -1,15 +1,14 @@
package cgeo.geocaching.maps;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.DirectionProvider;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.IGeoData;
import cgeo.geocaching.R;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.StoredList;
import cgeo.geocaching.Waypoint;
-import cgeo.geocaching.cgData;
-import cgeo.geocaching.cgeoapplication;
-import cgeo.geocaching.cgeocaches;
+import cgeo.geocaching.DataStore;
+import cgeo.geocaching.CacheListActivity;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.connector.ConnectorFactory;
import cgeo.geocaching.connector.gc.Login;
@@ -22,6 +21,7 @@ import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.enumerations.WaypointType;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Viewport;
+import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.maps.interfaces.CachesOverlayItemImpl;
import cgeo.geocaching.maps.interfaces.GeoPointImpl;
import cgeo.geocaching.maps.interfaces.MapActivityImpl;
@@ -128,7 +128,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
private MapItemFactory mapItemFactory = null;
private Activity activity = null;
private MapViewImpl mapView = null;
- private cgeoapplication app = null;
+ private CgeoApplication app = null;
final private GeoDirHandler geoDirUpdate = new UpdateLoc();
private SearchResult searchIntent = null;
private String geocodeIntent = null;
@@ -359,9 +359,9 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
// class init
res = this.getResources();
activity = this.getActivity();
- app = (cgeoapplication) activity.getApplication();
+ app = (CgeoApplication) activity.getApplication();
- int countBubbleCnt = cgData.getAllCachesCount();
+ int countBubbleCnt = DataStore.getAllCachesCount();
caches = new LeastRecentlyUsedSet<Geocache>(MAX_CACHES + countBubbleCnt);
final MapProvider mapProvider = Settings.getMapProvider();
@@ -491,7 +491,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
if (!CollectionUtils.isEmpty(dirtyCaches)) {
for (String geocode : dirtyCaches) {
- Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS);
+ Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS);
if (cache != null) {
// new collection type needs to remove first
caches.remove(cache);
@@ -609,7 +609,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
default: // DETAILED
menu.findItem(R.id.menu_strategy_detailed).setChecked(true);
}
- } catch (Exception e) {
+ } catch (RuntimeException e) {
Log.e("CGeoMap.onPrepareOptionsMenu", e);
}
@@ -641,7 +641,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
final List<String> geocodes = new ArrayList<String>();
for (final String geocode : geocodesInViewport) {
- if (!cgData.isOffline(geocode, null)) {
+ if (!DataStore.isOffline(geocode, null)) {
geocodes.add(geocode);
}
}
@@ -690,7 +690,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
selectMapTheme();
return true;
case R.id.menu_as_list: {
- cgeocaches.startActivityMap(activity, new SearchResult(getGeocodesForCachesInViewport()));
+ CacheListActivity.startActivityMap(activity, new SearchResult(getGeocodesForCachesInViewport()));
return true;
}
case R.id.menu_strategy_fastest: {
@@ -948,7 +948,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
mapView.repaintRequired(overlayPosition);
}
}
- } catch (Exception e) {
+ } catch (RuntimeException e) {
Log.w("Failed to update location.");
}
}
@@ -1090,7 +1090,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
SearchResult searchResult;
if (mapMode == MapMode.LIVE) {
- searchResult = isLiveEnabled ? new SearchResult() : new SearchResult(cgData.loadStoredInViewport(viewport, Settings.getCacheType()));
+ searchResult = isLiveEnabled ? new SearchResult() : new SearchResult(DataStore.loadStoredInViewport(viewport, Settings.getCacheType()));
} else {
// map started from another activity
searchResult = searchIntent != null ? new SearchResult(searchIntent) : new SearchResult();
@@ -1100,7 +1100,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
}
// live mode search result
if (isLiveEnabled) {
- searchResult.addSearchResult(cgData.loadCachedInViewport(viewport, Settings.getCacheType()));
+ searchResult.addSearchResult(DataStore.loadCachedInViewport(viewport, Settings.getCacheType()));
}
downloaded = true;
@@ -1123,7 +1123,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
|| mapMode == MapMode.COORDS) {
//All visible waypoints
CacheType type = Settings.getCacheType();
- Set<Waypoint> waypointsInViewport = cgData.loadWaypoints(viewport, excludeMine, excludeDisabled, type);
+ Set<Waypoint> waypointsInViewport = DataStore.loadWaypoints(viewport, excludeMine, excludeDisabled, type);
waypoints.addAll(waypointsInViewport);
}
else {
@@ -1196,8 +1196,8 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
// first remove filtered out
final Set<String> filteredCodes = searchResult.getFilteredGeocodes();
Log.d("Filtering out " + filteredCodes.size() + " caches: " + filteredCodes.toString());
- caches.removeAll(cgData.loadCaches(filteredCodes, LoadFlags.LOAD_CACHE_ONLY));
- cgData.removeCaches(filteredCodes, EnumSet.of(RemoveFlag.REMOVE_CACHE));
+ caches.removeAll(DataStore.loadCaches(filteredCodes, LoadFlags.LOAD_CACHE_ONLY));
+ DataStore.removeCaches(filteredCodes, EnumSet.of(RemoveFlag.REMOVE_CACHE));
// new collection type needs to remove first to refresh
caches.removeAll(result);
caches.addAll(result);
@@ -1409,7 +1409,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
break;
}
- if (!cgData.isOffline(geocode, null)) {
+ if (!DataStore.isOffline(geocode, null)) {
if ((System.currentTimeMillis() - last) < 1500) {
try {
int delay = 1000 + (int) (Math.random() * 1000.0) - (int) (System.currentTimeMillis() - last);
@@ -1418,7 +1418,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
}
sleep(delay);
- } catch (Exception e) {
+ } catch (InterruptedException e) {
// nothing
}
}
@@ -1501,7 +1501,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
try {
mapController.setCenter(mapItemFactory.getGeoPointBase(new Geopoint(mapState[0] / 1.0e6, mapState[1] / 1.0e6)));
mapController.setZoom(mapState[2]);
- } catch (Exception e) {
+ } catch (RuntimeException e) {
// nothing at all
}
@@ -1512,9 +1512,9 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
Viewport viewport = null;
if (geocodeCenter != null) {
- viewport = cgData.getBounds(geocodeCenter);
+ viewport = DataStore.getBounds(geocodeCenter);
} else if (searchCenter != null) {
- viewport = cgData.getBounds(searchCenter.getGeocodes());
+ viewport = DataStore.getBounds(searchCenter.getGeocodes());
}
if (viewport == null) {
@@ -1525,7 +1525,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
if (viewport.getLatitudeSpan() != 0 && viewport.getLongitudeSpan() != 0) {
mapController.zoomToSpan((int) (viewport.getLatitudeSpan() * 1e6), (int) (viewport.getLongitudeSpan() * 1e6));
}
- } catch (Exception e) {
+ } catch (RuntimeException e) {
// nothing at all
}
diff --git a/main/src/cgeo/geocaching/maps/CachesOverlay.java b/main/src/cgeo/geocaching/maps/CachesOverlay.java
index 8e117eb..cd2ff75 100644
--- a/main/src/cgeo/geocaching/maps/CachesOverlay.java
+++ b/main/src/cgeo/geocaching/maps/CachesOverlay.java
@@ -4,9 +4,8 @@ import cgeo.geocaching.CachePopup;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.IWaypoint;
import cgeo.geocaching.R;
-import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.WaypointPopup;
-import cgeo.geocaching.cgData;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.activity.Progress;
import cgeo.geocaching.connector.gc.GCMap;
import cgeo.geocaching.enumerations.CacheType;
@@ -19,11 +18,13 @@ import cgeo.geocaching.maps.interfaces.MapItemFactory;
import cgeo.geocaching.maps.interfaces.MapProjectionImpl;
import cgeo.geocaching.maps.interfaces.MapProvider;
import cgeo.geocaching.maps.interfaces.MapViewImpl;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.Log;
import org.apache.commons.lang3.StringUtils;
import android.content.Context;
+import android.content.res.Resources.NotFoundException;
import android.graphics.Canvas;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
@@ -121,6 +122,8 @@ public class CachesOverlay extends AbstractItemizedOverlay {
try {
lazyInitializeDrawingObjects();
canvas.setDrawFilter(setFilter);
+ final int height = canvas.getHeight();
+ final int width = canvas.getWidth();
final int radius = calculateDrawingRadius(projection);
final Point center = new Point();
@@ -130,16 +133,17 @@ public class CachesOverlay extends AbstractItemizedOverlay {
final Geopoint itemCoord = item.getCoord().getCoords();
final GeoPointImpl itemGeo = mapItemFactory.getGeoPointBase(itemCoord);
projection.toPixels(itemGeo, center);
-
- // dashed circle around the waypoint
- blockedCircle.setColor(0x66BB0000);
- blockedCircle.setStyle(Style.STROKE);
- canvas.drawCircle(center.x, center.y, radius, blockedCircle);
-
- // filling the circle area with a transparent color
- blockedCircle.setColor(0x44BB0000);
- blockedCircle.setStyle(Style.FILL);
- canvas.drawCircle(center.x, center.y, radius, blockedCircle);
+ if (center.x > -radius && center.y > -radius && center.x < width + radius && center.y < height + radius) {
+ // dashed circle around the waypoint
+ blockedCircle.setColor(0x66BB0000);
+ blockedCircle.setStyle(Style.STROKE);
+ canvas.drawCircle(center.x, center.y, radius, blockedCircle);
+
+ // filling the circle area with a transparent color
+ blockedCircle.setColor(0x44BB0000);
+ blockedCircle.setStyle(Style.FILL);
+ canvas.drawCircle(center.x, center.y, radius, blockedCircle);
+ }
}
}
canvas.setDrawFilter(removeFilter);
@@ -224,7 +228,7 @@ public class CachesOverlay extends AbstractItemizedOverlay {
final IWaypoint coordinate = item.getCoord();
if (StringUtils.isNotBlank(coordinate.getCoordType()) && coordinate.getCoordType().equalsIgnoreCase("cache") && StringUtils.isNotBlank(coordinate.getGeocode())) {
- Geocache cache = cgData.loadCache(coordinate.getGeocode(), LoadFlags.LOAD_CACHE_OR_DB);
+ Geocache cache = DataStore.loadCache(coordinate.getGeocode(), LoadFlags.LOAD_CACHE_OR_DB);
RequestDetailsThread requestDetailsThread = new RequestDetailsThread(cache);
if (!requestDetailsThread.requestRequired()) {
// don't show popup if we have enough details
@@ -243,7 +247,7 @@ public class CachesOverlay extends AbstractItemizedOverlay {
}
progress.dismiss();
- } catch (Exception e) {
+ } catch (NotFoundException e) {
Log.e("CachesOverlay.onTap", e);
if (progress != null) {
progress.dismiss();
diff --git a/main/src/cgeo/geocaching/maps/MapProviderFactory.java b/main/src/cgeo/geocaching/maps/MapProviderFactory.java
index a03fc47..2e43e19 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.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.maps.google.GoogleMapProvider;
import cgeo.geocaching.maps.interfaces.MapProvider;
import cgeo.geocaching.maps.interfaces.MapSource;
@@ -31,7 +31,7 @@ public class MapProviderFactory {
public static boolean isGoogleMapsInstalled() {
// Check if API key is available
- if (StringUtils.isBlank(cgeoapplication.getInstance().getString(R.string.maps_api_key))) {
+ if (StringUtils.isBlank(CgeoApplication.getInstance().getString(R.string.maps_api_key))) {
Log.w("No Google API key available.");
return false;
}
diff --git a/main/src/cgeo/geocaching/maps/PositionHistory.java b/main/src/cgeo/geocaching/maps/PositionHistory.java
index 9b090fc..bc6779e 100644
--- a/main/src/cgeo/geocaching/maps/PositionHistory.java
+++ b/main/src/cgeo/geocaching/maps/PositionHistory.java
@@ -28,7 +28,7 @@ public class PositionHistory {
if (coordinates.getAccuracy() >= 50f) {
return;
}
- if (coordinates.getLatitude() == 0.0 && coordinates.getLatitude() == 0.0) {
+ if (coordinates.getLatitude() == 0.0 && coordinates.getLongitude() == 0.0) {
return;
}
if (history.isEmpty()) {
diff --git a/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java b/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java
index 1fa38ad..cb95b2c 100644
--- a/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java
+++ b/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.maps.google;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.maps.AbstractMapProvider;
import cgeo.geocaching.maps.AbstractMapSource;
import cgeo.geocaching.maps.interfaces.MapItemFactory;
@@ -20,7 +20,7 @@ public final class GoogleMapProvider extends AbstractMapProvider {
private final MapItemFactory mapItemFactory;
private GoogleMapProvider() {
- final Resources resources = cgeoapplication.getInstance().getResources();
+ final Resources resources = CgeoApplication.getInstance().getResources();
registerMapSource(new GoogleMapSource(this, resources.getString(R.string.map_source_google_map)));
registerMapSource(new GoogleSatelliteSource(this, resources.getString(R.string.map_source_google_satellite)));
diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java
index d099b79..50dc51d 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.CgeoApplication;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.maps.AbstractMapProvider;
import cgeo.geocaching.maps.MapProviderFactory;
import cgeo.geocaching.maps.interfaces.MapItemFactory;
@@ -33,7 +33,7 @@ public final class MapsforgeMapProvider extends AbstractMapProvider {
private MapItemFactory mapItemFactory = new MapsforgeMapItemFactory();
private MapsforgeMapProvider() {
- final Resources resources = cgeoapplication.getInstance().getResources();
+ final Resources resources = CgeoApplication.getInstance().getResources();
registerMapSource(new MapsforgeMapSource(MAPSFORGE_MAPNIK_ID, this, resources.getString(R.string.map_source_osm_mapnik), MapGeneratorInternal.MAPNIK));
registerMapSource(new MapsforgeMapSource(MAPSFORGE_CYCLEMAP_ID, this, resources.getString(R.string.map_source_osm_cyclemap), MapGeneratorInternal.OPENCYCLEMAP));
@@ -163,7 +163,7 @@ public final class MapsforgeMapProvider extends AbstractMapProvider {
public void updateOfflineMaps() {
MapProviderFactory.deleteOfflineMapSources();
- final Resources resources = cgeoapplication.getInstance().getResources();
+ final Resources resources = CgeoApplication.getInstance().getResources();
final List<String> offlineMaps = getOfflineMaps();
for (String mapFile : offlineMaps) {
final String mapName = StringUtils.capitalize(StringUtils.substringBeforeLast(new File(mapFile).getName(), "."));
diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java
index aa11405..dc4e82c 100644
--- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java
+++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java
@@ -1,7 +1,6 @@
package cgeo.geocaching.maps.mapsforge;
import cgeo.geocaching.R;
-import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.geopoint.Viewport;
import cgeo.geocaching.maps.CachesOverlay;
import cgeo.geocaching.maps.PositionOverlay;
@@ -15,6 +14,7 @@ import cgeo.geocaching.maps.interfaces.MapViewImpl;
import cgeo.geocaching.maps.interfaces.OnMapDragListener;
import cgeo.geocaching.maps.interfaces.OverlayImpl;
import cgeo.geocaching.maps.interfaces.OverlayImpl.OverlayType;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.Log;
import org.apache.commons.lang3.StringUtils;
@@ -46,6 +46,9 @@ public class MapsforgeMapView extends MapView implements MapViewImpl {
public MapsforgeMapView(Context context, AttributeSet attrs) {
super(context, attrs);
gestureDetector = new GestureDetector(context, new GestureListener());
+ if (Settings.isScaleMapsforgeText()) {
+ this.setTextScale(getResources().getDisplayMetrics().density);
+ }
}
@Override
diff --git a/main/src/cgeo/geocaching/network/HtmlImage.java b/main/src/cgeo/geocaching/network/HtmlImage.java
index 797e67d..953d762 100644
--- a/main/src/cgeo/geocaching/network/HtmlImage.java
+++ b/main/src/cgeo/geocaching/network/HtmlImage.java
@@ -1,11 +1,11 @@
package cgeo.geocaching.network;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.R;
-import cgeo.geocaching.StoredList;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.compatibility.Compatibility;
import cgeo.geocaching.connector.ConnectorFactory;
import cgeo.geocaching.files.LocalStorage;
+import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.utils.FileUtils;
import cgeo.geocaching.utils.IOUtils;
import cgeo.geocaching.utils.ImageUtils;
@@ -74,7 +74,7 @@ public class HtmlImage implements Html.ImageGetter {
Point displaySize = Compatibility.getDisplaySize();
this.maxWidth = displaySize.x - 25;
this.maxHeight = displaySize.y - 25;
- this.resources = cgeoapplication.getInstance().getResources();
+ this.resources = CgeoApplication.getInstance().getResources();
}
@Override
diff --git a/main/src/cgeo/geocaching/network/Network.java b/main/src/cgeo/geocaching/network/Network.java
index 3aa1828..431730b 100644
--- a/main/src/cgeo/geocaching/network/Network.java
+++ b/main/src/cgeo/geocaching/network/Network.java
@@ -34,9 +34,9 @@ import ch.boye.httpclientandroidlib.params.CoreProtocolPNames;
import ch.boye.httpclientandroidlib.params.HttpParams;
import ch.boye.httpclientandroidlib.protocol.HttpContext;
import ch.boye.httpclientandroidlib.util.EntityUtils;
-
import org.apache.commons.lang3.CharEncoding;
import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jdt.annotation.Nullable;
import org.json.JSONException;
import org.json.JSONObject;
@@ -54,8 +54,6 @@ import java.nio.charset.Charset;
public abstract class Network {
- private static final int NB_DOWNLOAD_RETRIES = 4;
-
/** User agent id */
private final static String PC_USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1";
/** Native user agent, taken from a Android 2.2 Nexus **/
@@ -75,7 +73,7 @@ public abstract class Network {
static {
Network.clientParams.setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, CharEncoding.UTF_8);
Network.clientParams.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 30000);
- Network.clientParams.setParameter(CoreConnectionPNames.SO_TIMEOUT, 30000);
+ Network.clientParams.setParameter(CoreConnectionPNames.SO_TIMEOUT, 90000);
Network.clientParams.setParameter(ClientPNames.HANDLE_REDIRECTS, true);
}
@@ -150,6 +148,7 @@ public abstract class Network {
* @param params the parameters to add to the POST request
* @return the HTTP response, or null in case of an encoding error params
*/
+ @Nullable
public static HttpResponse postRequest(final String uri, final Parameters params) {
return request("POST", uri, params, null, null);
}
@@ -162,6 +161,7 @@ public abstract class Network {
* @params headers the headers to add to the request
* @return the HTTP response, or null in case of an encoding error params
*/
+ @Nullable
public static HttpResponse postRequest(final String uri, final Parameters params, final Parameters headers) {
return request("POST", uri, params, headers, null);
}
@@ -173,6 +173,7 @@ public abstract class Network {
* @param json the json object to add to the POST request
* @return the HTTP response, or null in case of an encoding error params
*/
+ @Nullable
public static HttpResponse postJsonRequest(final String uri, final JSONObject json) {
HttpPost request = new HttpPost(uri);
request.addHeader("Content-Type", "application/json; charset=utf-8");
@@ -197,6 +198,7 @@ public abstract class Network {
* @param file the file to include in the request
* @return the HTTP response, or null in case of an encoding error param
*/
+ @Nullable
public static HttpResponse postRequest(final String uri, final Parameters params,
final String fileFieldName, final String fileContentType, final File file) {
final MultipartEntity entity = new MultipartEntity();
@@ -232,7 +234,9 @@ public abstract class Network {
* the cache file used to cache this query
* @return the HTTP response, or null in case of an encoding error in a POST request arguments
*/
- private static HttpResponse request(final String method, final String uri, final Parameters params, final Parameters headers, final File cacheFile) {
+ @Nullable
+ private static HttpResponse request(final String method, final String uri,
+ @Nullable final Parameters params, @Nullable final Parameters headers, @Nullable final File cacheFile) {
HttpRequestBase request;
if (method.equals("GET")) {
final String fullUri = params == null ? uri : Uri.parse(uri).buildUpon().encodedQuery(params.toString()).build().toString();
@@ -263,7 +267,7 @@ public abstract class Network {
* @param cacheFile
* if non-null, the file to take ETag and If-Modified-Since information from
*/
- private static void addHeaders(final HttpRequestBase request, final Parameters headers, final File cacheFile) {
+ private static void addHeaders(final HttpRequestBase request, @Nullable final Parameters headers, @Nullable final File cacheFile) {
for (final NameValuePair header : Parameters.extend(Parameters.merge(headers, cacheHeaders(cacheFile)),
"Accept-Charset", "utf-8,iso-8859-1;q=0.8,utf-16;q=0.8,*;q=0.7",
"Accept-Language", "en-US,*;q=0.9",
@@ -282,37 +286,32 @@ public abstract class Network {
* @return
* the response, or null if there has been a failure
*/
+ @Nullable
private static HttpResponse doRepeatedRequests(final HttpRequestBase request) {
final String reqLogStr = request.getMethod() + " " + Network.hidePassword(request.getURI().toString());
Log.d(reqLogStr);
final HttpClient client = Network.getHttpClient();
- for (int i = 0; i <= Network.NB_DOWNLOAD_RETRIES; i++) {
- final long before = System.currentTimeMillis();
- try {
- final HttpResponse response = client.execute(request);
- int status = response.getStatusLine().getStatusCode();
- if (status == 200) {
- Log.d(status + Network.formatTimeSpan(before) + reqLogStr);
- } else {
- Log.w(status + " [" + response.getStatusLine().getReasonPhrase() + "]" + Network.formatTimeSpan(before) + reqLogStr);
- }
- return response;
- } catch (IOException e) {
- final String timeSpan = Network.formatTimeSpan(before);
- final String tries = (i + 1) + "/" + (Network.NB_DOWNLOAD_RETRIES + 1);
- if (i == Network.NB_DOWNLOAD_RETRIES) {
- Log.w("Failure " + tries + timeSpan + reqLogStr + " (" + e.toString() + ")");
- } else {
- Log.w("Failure " + tries + " (" + e.toString() + ")" + timeSpan + "- retrying " + reqLogStr);
- }
+ final long before = System.currentTimeMillis();
+ try {
+ final HttpResponse response = client.execute(request);
+ int status = response.getStatusLine().getStatusCode();
+ if (status == 200) {
+ Log.d(status + Network.formatTimeSpan(before) + reqLogStr);
+ } else {
+ Log.w(status + " [" + response.getStatusLine().getReasonPhrase() + "]" + Network.formatTimeSpan(before) + reqLogStr);
}
+ return response;
+ } catch (IOException e) {
+ final String timeSpan = Network.formatTimeSpan(before);
+ Log.w("Failure" + timeSpan + reqLogStr + " (" + e.toString() + ")");
}
return null;
}
- private static Parameters cacheHeaders(final File cacheFile) {
+ @Nullable
+ private static Parameters cacheHeaders(@Nullable final File cacheFile) {
if (cacheFile == null || !cacheFile.exists()) {
return null;
}
@@ -343,7 +342,8 @@ public abstract class Network {
* the name of the file storing the cached resource, or null not to use one
* @return the HTTP response
*/
- public static HttpResponse getRequest(final String uri, final Parameters params, final File cacheFile) {
+ @Nullable
+ public static HttpResponse getRequest(final String uri, @Nullable final Parameters params, @Nullable final File cacheFile) {
return request("GET", uri, params, null, cacheFile);
}
@@ -357,7 +357,8 @@ public abstract class Network {
* the parameters to add the the GET request
* @return the HTTP response
*/
- public static HttpResponse getRequest(final String uri, final Parameters params) {
+ @Nullable
+ public static HttpResponse getRequest(final String uri, @Nullable final Parameters params) {
return request("GET", uri, params, null, null);
}
@@ -372,7 +373,8 @@ public abstract class Network {
* the headers to add to the GET request
* @return the HTTP response
*/
- public static HttpResponse getRequest(final String uri, final Parameters params, final Parameters headers) {
+ @Nullable
+ public static HttpResponse getRequest(final String uri, @Nullable final Parameters params, @Nullable final Parameters headers) {
return request("GET", uri, params, headers, null);
}
@@ -383,6 +385,7 @@ public abstract class Network {
* the URI to request
* @return the HTTP response
*/
+ @Nullable
public static HttpResponse getRequest(final String uri) {
return request("GET", uri, null, null, null);
}
@@ -392,7 +395,7 @@ public abstract class Network {
return " (" + (System.currentTimeMillis() - before) + " ms) ";
}
- static public boolean isSuccess(final HttpResponse response) {
+ static public boolean isSuccess(@Nullable final HttpResponse response) {
return response != null && response.getStatusLine().getStatusCode() == 200;
}
@@ -403,7 +406,8 @@ public abstract class Network {
* @param params the query parameters, or <code>null</code> if there are none
* @return a JSON object if the request was successful and the body could be decoded, <code>null</code> otherwise
*/
- public static JSONObject requestJSON(final String uri, final Parameters params) {
+ @Nullable
+ public static JSONObject requestJSON(final String uri, @Nullable final Parameters params) {
final HttpResponse response = request("GET", uri, params, new Parameters("Accept", "application/json, text/javascript, */*; q=0.01"), null);
final String responseData = Network.getResponseData(response, false);
if (responseData != null) {
@@ -417,6 +421,7 @@ public abstract class Network {
return null;
}
+ @Nullable
private static String getResponseDataNoError(final HttpResponse response, boolean replaceWhitespace) {
try {
String data = EntityUtils.toString(response.getEntity(), CharEncoding.UTF_8);
@@ -435,7 +440,8 @@ public abstract class Network {
* @param response a HTTP response, which can be null
* @return the body if the response comes from a successful HTTP request, <code>null</code> otherwise
*/
- public static String getResponseData(final HttpResponse response) {
+ @Nullable
+ public static String getResponseData(@Nullable final HttpResponse response) {
return Network.getResponseData(response, true);
}
@@ -447,17 +453,22 @@ public abstract class Network {
* should be called on the body
* @return the body if the response comes from a successful HTTP request, <code>null</code> otherwise
*/
- public static String getResponseData(final HttpResponse response, boolean replaceWhitespace) {
+ @Nullable
+ public static String getResponseData(@Nullable final HttpResponse response, boolean replaceWhitespace) {
if (!isSuccess(response)) {
return null;
}
+ assert response != null; // Caught above
return getResponseDataNoError(response, replaceWhitespace);
}
+ @Nullable
public static String rfc3986URLEncode(String text) {
- return StringUtils.replace(Network.encode(text).replace("+", "%20"), "%7E", "~");
+ final String encoded = Network.encode(text);
+ return encoded != null ? StringUtils.replace(encoded.replace("+", "%20"), "%7E", "~") : null;
}
+ @Nullable
public static String decode(final String text) {
try {
return URLDecoder.decode(text, CharEncoding.UTF_8);
@@ -467,6 +478,7 @@ public abstract class Network {
return null;
}
+ @Nullable
public static String encode(final String text) {
try {
return URLEncoder.encode(text, CharEncoding.UTF_8);
diff --git a/main/src/cgeo/geocaching/network/OAuth.java b/main/src/cgeo/geocaching/network/OAuth.java
index 6740096..4ef8b62 100644
--- a/main/src/cgeo/geocaching/network/OAuth.java
+++ b/main/src/cgeo/geocaching/network/OAuth.java
@@ -3,8 +3,8 @@ package cgeo.geocaching.network;
import cgeo.geocaching.utils.CryptUtils;
import ch.boye.httpclientandroidlib.NameValuePair;
-
import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jdt.annotation.Nullable;
import java.util.ArrayList;
import java.util.Date;
@@ -16,8 +16,8 @@ public class OAuth {
final String method,
final boolean https,
final Parameters params,
- final String token,
- final String tokenSecret,
+ @Nullable final String token,
+ @Nullable final String tokenSecret,
final String consumerKey,
final String consumerSecret) {
params.put(
diff --git a/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java b/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java
index 14e0b33..81311f1 100644
--- a/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java
+++ b/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java
@@ -1,15 +1,20 @@
package cgeo.geocaching.network;
+import butterknife.InjectView;
+
import cgeo.geocaching.R;
+import cgeo.geocaching.R.string;
import cgeo.geocaching.activity.AbstractActivity;
import cgeo.geocaching.utils.Log;
import cgeo.geocaching.utils.MatcherWrapper;
+import ch.boye.httpclientandroidlib.ParseException;
import ch.boye.httpclientandroidlib.client.entity.UrlEncodedFormEntity;
import ch.boye.httpclientandroidlib.util.EntityUtils;
-
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import android.app.ProgressDialog;
import android.content.Intent;
@@ -19,27 +24,31 @@ import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
-import android.widget.EditText;
import android.widget.TextView;
+import java.io.IOException;
import java.util.regex.Pattern;
public abstract class OAuthAuthorizationActivity extends AbstractActivity {
- private String host;
- private String pathRequest;
- private String pathAuthorize;
- private String pathAccess;
- private boolean https;
- private String consumerKey;
- private String consumerSecret;
+ public static final int NOT_AUTHENTICATED = 0;
+ public static final int AUTHENTICATED = 1;
+
+ @NonNull final private String host;
+ @NonNull final private String pathRequest;
+ @NonNull final private String pathAuthorize;
+ @NonNull final private String pathAccess;
+ private final boolean https;
+ @NonNull final private String consumerKey;
+ @NonNull final private String consumerSecret;
+ @NonNull final private String callback;
private String OAtoken = null;
private String OAtokenSecret = null;
private final Pattern paramsPattern1 = Pattern.compile("oauth_token=([a-zA-Z0-9\\-\\_.]+)");
private final Pattern paramsPattern2 = Pattern.compile("oauth_token_secret=([a-zA-Z0-9\\-\\_.]+)");
- private Button startButton = null;
- private EditText pinEntry = null;
- private Button pinEntryButton = null;
+ @InjectView(R.id.start) protected Button startButton;
+ @InjectView(R.id.auth_1) protected TextView auth_1;
+ @InjectView(R.id.auth_2) protected TextView auth_2;
private ProgressDialog requestTokenDialog = null;
private ProgressDialog changeTokensDialog = null;
private Handler requestTokenHandler = new Handler() {
@@ -55,10 +64,6 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity {
if (msg.what == 1) {
startButton.setText(getAuthAgain());
-
- pinEntry.setVisibility(View.VISIBLE);
- pinEntryButton.setVisibility(View.VISIBLE);
- pinEntryButton.setOnClickListener(new ConfirmPINListener());
} else {
showToast(getErrAuthInitialize());
startButton.setText(getAuthStart());
@@ -74,33 +79,26 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity {
changeTokensDialog.dismiss();
}
- pinEntryButton.setOnClickListener(new ConfirmPINListener());
- pinEntryButton.setEnabled(true);
-
- if (msg.what == 1) {
+ if (msg.what == AUTHENTICATED) {
showToast(getAuthDialogCompleted());
-
- pinEntryButton.setVisibility(View.GONE);
-
setResult(RESULT_OK);
finish();
} else {
showToast(getErrAuthProcess());
-
- pinEntry.setVisibility(View.GONE);
- pinEntryButton.setVisibility(View.GONE);
startButton.setText(getAuthStart());
}
}
};
- public OAuthAuthorizationActivity(String host,
- String pathRequest,
- String pathAuthorize,
- String pathAccess,
- boolean https,
- String consumerKey,
- String consumerSecret) {
+ public OAuthAuthorizationActivity
+ (@NonNull String host,
+ @NonNull String pathRequest,
+ @NonNull String pathAuthorize,
+ @NonNull String pathAccess,
+ boolean https,
+ @NonNull String consumerKey,
+ @NonNull String consumerSecret,
+ @NonNull String callback) {
this.host = host;
this.pathRequest = pathRequest;
this.pathAuthorize = pathAuthorize;
@@ -108,6 +106,7 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity {
this.https = https;
this.consumerKey = consumerKey;
this.consumerSecret = consumerSecret;
+ this.callback = callback;
}
@Override
@@ -116,26 +115,14 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity {
setTitle(getAuthTitle());
- init();
- }
-
- private void init() {
- startButton = (Button) findViewById(R.id.start);
- pinEntry = (EditText) findViewById(R.id.pin);
- pinEntryButton = (Button) findViewById(R.id.pin_button);
-
- TextView auth = (TextView) findViewById(R.id.auth_1);
- auth.setText(getAboutAuth1());
- auth = (TextView) findViewById(R.id.auth_2);
- auth.setText(getAboutAuth2());
+ auth_1.setText(getAuthExplainShort());
+ auth_2.setText(getAuthExplainLong());
ImmutablePair<String, String> tempToken = getTempTokens();
OAtoken = tempToken.left;
OAtokenSecret = tempToken.right;
startButton.setText(getAuthAuthorize());
- pinEntryButton.setText(getAuthFinish());
-
startButton.setEnabled(true);
startButton.setOnClickListener(new StartListener());
@@ -145,60 +132,74 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity {
} else {
// already have temporary tokens, continue from pin
startButton.setText(getAuthAgain());
+ }
+ }
- pinEntry.setHint(getAuthPinHint());
- pinEntry.setVisibility(View.VISIBLE);
- pinEntryButton.setVisibility(View.VISIBLE);
- pinEntryButton.setOnClickListener(new ConfirmPINListener());
+ @Override
+ public void onNewIntent(final Intent intent) {
+ setIntent(intent);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ final Uri uri = getIntent().getData();
+ if (uri != null) {
+ final String verifier = uri.getQueryParameter("oauth_verifier");
+ if (StringUtils.isNotBlank(verifier)) {
+ exchangeTokens(verifier);
+ } else {
+ // We can shortcut the whole verification process if we do not have a token at all.
+ changeTokensHandler.sendEmptyMessage(NOT_AUTHENTICATED);
+ }
}
}
private void requestToken() {
+ final Parameters params = new Parameters();
+ params.put("oauth_callback", callback);
+ final String method = "GET";
+ OAuth.signOAuth(host, pathRequest, method, https, params, null, null, consumerKey, consumerSecret);
+ final String line = Network.getResponseData(Network.getRequest(getUrlPrefix() + host + pathRequest, params));
+
int status = 0;
- try {
- final Parameters params = new Parameters();
- params.put("oauth_callback", "oob");
- final String method = "GET";
- OAuth.signOAuth(host, pathRequest, method, https, params, null, null, consumerKey, consumerSecret);
- final String line = Network.getResponseData(Network.getRequest(getUrlPrefix() + host + pathRequest, params));
-
- if (StringUtils.isNotBlank(line)) {
- final MatcherWrapper paramsMatcher1 = new MatcherWrapper(paramsPattern1, line);
- if (paramsMatcher1.find()) {
- OAtoken = paramsMatcher1.group(1);
- }
- final MatcherWrapper paramsMatcher2 = new MatcherWrapper(paramsPattern2, line);
- if (paramsMatcher2.find()) {
- OAtokenSecret = paramsMatcher2.group(1);
- }
+ if (StringUtils.isNotBlank(line)) {
+ assert line != null;
+ final MatcherWrapper paramsMatcher1 = new MatcherWrapper(paramsPattern1, line);
+ if (paramsMatcher1.find()) {
+ OAtoken = paramsMatcher1.group(1);
+ }
+ final MatcherWrapper paramsMatcher2 = new MatcherWrapper(paramsPattern2, line);
+ if (paramsMatcher2.find()) {
+ OAtokenSecret = paramsMatcher2.group(1);
+ }
- if (StringUtils.isNotBlank(OAtoken) && StringUtils.isNotBlank(OAtokenSecret)) {
- setTempTokens(OAtoken, OAtokenSecret);
- try {
- final Parameters paramsBrowser = new Parameters();
- paramsBrowser.put("oauth_token", OAtoken);
- final String encodedParams = EntityUtils.toString(new UrlEncodedFormEntity(paramsBrowser));
- startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getUrlPrefix() + host + pathAuthorize + "?" + encodedParams)));
- status = 1;
- } catch (Exception e) {
- Log.e("OAuthAuthorizationActivity.requestToken(2)", e);
- }
+ if (StringUtils.isNotBlank(OAtoken) && StringUtils.isNotBlank(OAtokenSecret)) {
+ setTempTokens(OAtoken, OAtokenSecret);
+ try {
+ final Parameters paramsBrowser = new Parameters();
+ paramsBrowser.put("oauth_token", OAtoken);
+ final String encodedParams = EntityUtils.toString(new UrlEncodedFormEntity(paramsBrowser));
+ startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getUrlPrefix() + host + pathAuthorize + "?" + encodedParams)));
+ status = 1;
+ } catch (ParseException e) {
+ Log.e("OAuthAuthorizationActivity.requestToken", e);
+ } catch (IOException e) {
+ Log.e("OAuthAuthorizationActivity.requestToken", e);
}
}
- } catch (Exception e) {
- Log.e("OAuthAuthorizationActivity.requestToken(1)", e);
}
requestTokenHandler.sendEmptyMessage(status);
}
- private void changeToken() {
+ private void changeToken(final String verifier) {
- int status = 0;
+ int status = NOT_AUTHENTICATED;
try {
- final Parameters params = new Parameters("oauth_verifier", pinEntry.getText().toString());
+ final Parameters params = new Parameters("oauth_verifier", verifier);
final String method = "POST";
OAuth.signOAuth(host, pathAccess, method, https, params, OAtoken, OAtokenSecret, consumerKey, consumerSecret);
@@ -222,7 +223,7 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity {
setTokens(null, null, false);
} else {
setTokens(OAtoken, OAtokenSecret, true);
- status = 1;
+ status = AUTHENTICATED;
}
} catch (Exception e) {
Log.e("OAuthAuthorizationActivity.changeToken", e);
@@ -260,68 +261,68 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity {
}
}
- private class ConfirmPINListener implements View.OnClickListener {
+ private void exchangeTokens(final String verifier) {
+ if (changeTokensDialog == null) {
+ changeTokensDialog = new ProgressDialog(this);
+ changeTokensDialog.setCancelable(false);
+ changeTokensDialog.setMessage(getAuthDialogWait());
+ }
+ changeTokensDialog.show();
- @Override
- public void onClick(View arg0) {
- if (StringUtils.isEmpty(((EditText) findViewById(R.id.pin)).getText().toString())) {
- helpDialog(getAuthDialogPinTitle(), getAuthDialogPinMessage());
- return;
- }
+ (new Thread() {
- if (changeTokensDialog == null) {
- changeTokensDialog = new ProgressDialog(OAuthAuthorizationActivity.this);
- changeTokensDialog.setCancelable(false);
- changeTokensDialog.setMessage(getAuthDialogWait());
+ @Override
+ public void run() {
+ changeToken(verifier);
}
- changeTokensDialog.show();
- pinEntryButton.setEnabled(false);
- pinEntryButton.setOnTouchListener(null);
- pinEntryButton.setOnClickListener(null);
-
- (new Thread() {
-
- @Override
- public void run() {
- changeToken();
- }
- }).start();
- }
+ }).start();
}
protected abstract ImmutablePair<String, String> getTempTokens();
- protected abstract void setTempTokens(String tokenPublic, String tokenSecret);
+ protected abstract void setTempTokens(@Nullable String tokenPublic, @Nullable String tokenSecret);
- protected abstract void setTokens(String tokenPublic, String tokenSecret, boolean enable);
+ protected abstract void setTokens(@Nullable String tokenPublic, @Nullable String tokenSecret, boolean enable);
// get resources from derived class
protected abstract String getAuthTitle();
- protected abstract String getAuthAgain();
+ protected String getAuthAgain() {
+ return getString(R.string.auth_again);
+ }
- protected abstract String getErrAuthInitialize();
+ protected String getErrAuthInitialize() {
+ return getString(R.string.err_auth_initialize);
+ }
- protected abstract String getAuthStart();
+ protected String getAuthStart() {
+ return getString(R.string.auth_start);
+ }
protected abstract String getAuthDialogCompleted();
- protected abstract String getErrAuthProcess();
-
- protected abstract String getAuthDialogWait();
-
- protected abstract String getAuthDialogPinTitle();
-
- protected abstract String getAuthDialogPinMessage();
+ protected String getErrAuthProcess() {
+ return res.getString(R.string.err_auth_process);
+ }
- protected abstract String getAboutAuth1();
+ protected String getAuthDialogWait() {
+ return res.getString(R.string.auth_dialog_waiting, getAuthTitle());
+ }
- protected abstract String getAboutAuth2();
+ protected String getAuthExplainShort() {
+ return res.getString(R.string.auth_explain_short, getAuthTitle());
+ }
- protected abstract String getAuthAuthorize();
+ protected String getAuthExplainLong() {
+ return res.getString(R.string.auth_explain_long, getAuthTitle());
+ }
- protected abstract String getAuthPinHint();
+ protected String getAuthAuthorize() {
+ return res.getString(R.string.auth_authorize, getAuthTitle());
+ }
- protected abstract String getAuthFinish();
+ protected String getAuthFinish() {
+ return res.getString(R.string.auth_finish, getAuthTitle());
+ }
}
diff --git a/main/src/cgeo/geocaching/network/Parameters.java b/main/src/cgeo/geocaching/network/Parameters.java
index f035c4a..9cb0da5 100644
--- a/main/src/cgeo/geocaching/network/Parameters.java
+++ b/main/src/cgeo/geocaching/network/Parameters.java
@@ -3,8 +3,9 @@ package cgeo.geocaching.network;
import ch.boye.httpclientandroidlib.NameValuePair;
import ch.boye.httpclientandroidlib.client.utils.URLEncodedUtils;
import ch.boye.httpclientandroidlib.message.BasicNameValuePair;
-
import org.apache.commons.lang3.CharEncoding;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import java.security.InvalidParameterException;
import java.util.ArrayList;
@@ -81,7 +82,8 @@ public class Parameters extends ArrayList<NameValuePair> {
* if the number of key/values is unbalanced
* @return the object itself if it is non-null, a new one otherwise
*/
- public static Parameters extend(final Parameters params, final String... keyValues) {
+ @NonNull
+ public static Parameters extend(@Nullable final Parameters params, final String... keyValues) {
return params == null ? new Parameters(keyValues) : params.put(keyValues);
}
@@ -94,7 +96,8 @@ public class Parameters extends ArrayList<NameValuePair> {
* the object to merge from if non-null
* @return params with extra data if params was non-null, extra otherwise
*/
- public static Parameters merge(final Parameters params, final Parameters extra) {
+ @Nullable
+ public static Parameters merge(@Nullable final Parameters params, @Nullable final Parameters extra) {
if (params == null) {
return extra;
}
diff --git a/main/src/cgeo/geocaching/network/StatusUpdater.java b/main/src/cgeo/geocaching/network/StatusUpdater.java
index ee9bc31..cb4c7f4 100644
--- a/main/src/cgeo/geocaching/network/StatusUpdater.java
+++ b/main/src/cgeo/geocaching/network/StatusUpdater.java
@@ -1,6 +1,6 @@
package cgeo.geocaching.network;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.utils.MemorySubject;
import cgeo.geocaching.utils.PeriodicHandler;
import cgeo.geocaching.utils.PeriodicHandler.PeriodicHandlerListener;
@@ -42,8 +42,8 @@ public class StatusUpdater extends MemorySubject<StatusUpdater.Status> implement
public void onPeriodic() {
final JSONObject response =
Network.requestJSON("http://status.cgeo.org/api/status.json",
- new Parameters("version_code", String.valueOf(Version.getVersionCode(cgeoapplication.getInstance())),
- "version_name", Version.getVersionName(cgeoapplication.getInstance()),
+ new Parameters("version_code", String.valueOf(Version.getVersionCode(CgeoApplication.getInstance())),
+ "version_name", Version.getVersionName(CgeoApplication.getInstance()),
"locale", Locale.getDefault().toString()));
if (response != null) {
notifyObservers(new Status(get(response, "message"), get(response, "message_id"), get(response, "icon"), get(response, "url")));
diff --git a/main/src/cgeo/geocaching/settings/AuthorizeOcPreference.java b/main/src/cgeo/geocaching/settings/AuthorizeOcPreference.java
index f5d6a57..15b5976 100644
--- a/main/src/cgeo/geocaching/settings/AuthorizeOcPreference.java
+++ b/main/src/cgeo/geocaching/settings/AuthorizeOcPreference.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.settings;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.connector.oc.OCDEAuthorizationActivity;
import cgeo.geocaching.connector.oc.OCPLAuthorizationActivity;
@@ -35,7 +35,7 @@ public class AuthorizeOcPreference extends Preference {
private OCAuthorizations getAuthorization() {
final String prefKey = getKey();
for (OCAuthorizations auth : OCAuthorizations.values()) {
- if (auth.prefKeyId != NO_KEY && prefKey.equals(cgeoapplication.getInstance().getString(auth.prefKeyId))) {
+ if (auth.prefKeyId != NO_KEY && prefKey.equals(CgeoApplication.getInstance().getString(auth.prefKeyId))) {
return auth;
}
}
diff --git a/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java b/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java
index a019c4a..fbf08fa 100644
--- a/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java
+++ b/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java
@@ -99,7 +99,7 @@ public class RegisterSend2CgeoPreference extends Preference {
if (response != null && response.getStatusLine().getStatusCode() == 200) {
//response was OK
- String[] strings = Network.getResponseData(response).split(",");
+ String[] strings = StringUtils.split(Network.getResponseData(response), ',');
try {
pin = Integer.parseInt(strings[1].trim());
} catch (Exception e) {
diff --git a/main/src/cgeo/geocaching/settings/Settings.java b/main/src/cgeo/geocaching/settings/Settings.java
index 71c6d4a..aaf89b0 100644
--- a/main/src/cgeo/geocaching/settings/Settings.java
+++ b/main/src/cgeo/geocaching/settings/Settings.java
@@ -1,8 +1,7 @@
package cgeo.geocaching.settings;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.R;
-import cgeo.geocaching.StoredList;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.apps.cache.navi.NavigationAppFactory.NavigationAppsEnum;
import cgeo.geocaching.connector.gc.GCConstants;
import cgeo.geocaching.connector.gc.Login;
@@ -10,6 +9,7 @@ import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.LiveMapStrategy.Strategy;
import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.geopoint.Geopoint;
+import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.maps.MapProviderFactory;
import cgeo.geocaching.maps.google.GoogleMapProvider;
import cgeo.geocaching.maps.interfaces.GeoPointImpl;
@@ -24,6 +24,7 @@ import cgeo.geocaching.utils.Log;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.eclipse.jdt.annotation.Nullable;
import android.content.Context;
import android.content.SharedPreferences;
@@ -50,8 +51,8 @@ public final class Settings {
private final static int unitsMetric = 1;
// twitter api keys
- private final static String keyConsumerPublic = CryptUtils.rot13("ESnsCvAv3kEupF1GCR3jGj");
- private final static String keyConsumerSecret = CryptUtils.rot13("7vQWceACV9umEjJucmlpFe9FCMZSeqIqfkQ2BnhV9x");
+ private final static String keyConsumerPublic = CryptUtils.rot13("XdphhYs0nCqMwmKzpVkzkD");
+ private final static String keyConsumerSecret = CryptUtils.rot13("BEBZgTKrzVvYuH6h26HbqmLk87qfVsrmdeRXlMZewIj");
public enum CoordInputFormatEnum {
Plain,
@@ -69,7 +70,7 @@ public final class Settings {
}
private static final SharedPreferences sharedPrefs = PreferenceManager
- .getDefaultSharedPreferences(cgeoapplication.getInstance().getBaseContext());
+ .getDefaultSharedPreferences(CgeoApplication.getInstance().getBaseContext());
static {
migrateSettings();
Log.setDebug(sharedPrefs.getBoolean(getKey(R.string.pref_debug), false));
@@ -90,7 +91,7 @@ public final class Settings {
int oldVersion = getInt(R.string.pref_settingsversion, 0);
if (oldVersion < 1) {
final String oldPreferencesName = "cgeo.pref";
- final SharedPreferences old = cgeoapplication.getInstance().getSharedPreferences(oldPreferencesName, Context.MODE_PRIVATE);
+ final SharedPreferences old = CgeoApplication.getInstance().getSharedPreferences(oldPreferencesName, Context.MODE_PRIVATE);
final Editor e = sharedPrefs.edit();
e.putString(getKey(R.string.pref_temp_twitter_token_secret), old.getString(getKey(R.string.pref_temp_twitter_token_secret), null));
@@ -191,7 +192,7 @@ public final class Settings {
}
private static String getKey(final int prefKeyId) {
- return cgeoapplication.getInstance().getString(prefKeyId);
+ return CgeoApplication.getInstance().getString(prefKeyId);
}
static String getString(final int prefKeyId, final String defaultValue) {
@@ -257,7 +258,7 @@ public final class Settings {
public static void setLanguage(boolean useEnglish) {
final Configuration config = new Configuration();
config.locale = useEnglish ? Locale.ENGLISH : Locale.getDefault();
- final Resources resources = cgeoapplication.getInstance().getResources();
+ final Resources resources = CgeoApplication.getInstance().getResources();
resources.updateConfiguration(config, resources.getDisplayMetrics());
}
@@ -295,11 +296,7 @@ public final class Settings {
public static boolean isPremiumMember() {
// Basic Member, Premium Member, ???
- String memberStatus = Settings.getMemberStatus();
- if (memberStatus == null) {
- return false;
- }
- return GCConstants.MEMBER_STATUS_PM.equalsIgnoreCase(memberStatus);
+ return GCConstants.MEMBER_STATUS_PM.equalsIgnoreCase(Settings.getMemberStatus());
}
public static String getMemberStatus() {
@@ -317,7 +314,7 @@ public final class Settings {
return new ImmutablePair<String, String>(getString(tokenPublicPrefKey, null), getString(tokenSecretPrefKey, null));
}
- public static void setTokens(final int tokenPublicPrefKey, final String tokenPublic, final int tokenSecretPrefKey, final String tokenSecret) {
+ public static void setTokens(final int tokenPublicPrefKey, @Nullable final String tokenPublic, final int tokenSecretPrefKey, @Nullable final String tokenSecret) {
if (tokenPublic == null) {
remove(tokenPublicPrefKey);
} else {
@@ -441,6 +438,10 @@ public final class Settings {
return MapsforgeMapProvider.isValidMapFile(mapFileIn);
}
+ public static boolean isScaleMapsforgeText() {
+ return getBoolean(R.string.pref_mapsforge_scale_text, true);
+ }
+
public static CoordInputFormatEnum getCoordInputFormat() {
return CoordInputFormatEnum.fromInt(getInt(R.string.pref_coordinputformat, 0));
}
@@ -471,7 +472,7 @@ public final class Settings {
/**
* @return User selected date format on GC.com
- * @see Login#gcCustomDateFormats
+ * @see Login#GC_CUSTOM_DATE_FORMATS
*/
public static String getGcCustomDate() {
return getString(R.string.pref_gccustomdate, null);
@@ -548,16 +549,9 @@ public final class Settings {
static boolean getImperialUnitsDefault() {
final String countryCode = Locale.getDefault().getCountry();
- if ("US".equals(countryCode)) {
- return true; // USA
- }
- if ("LR".equals(countryCode)) {
- return true; // Liberia
- }
- if ("MM".equals(countryCode)) {
- return true; // Burma
- }
- return false;
+ return "US".equals(countryCode) // USA
+ || "LR".equals(countryCode) // Liberia
+ || "MM".equals(countryCode); // Burma
}
public static boolean isLiveMap() {
@@ -754,8 +748,8 @@ public final class Settings {
&& StringUtils.isNotBlank(getTokenSecret());
}
- public static void setTwitterTokens(final String tokenPublic,
- final String tokenSecret, boolean enableTwitter) {
+ public static void setTwitterTokens(@Nullable final String tokenPublic,
+ @Nullable final String tokenSecret, boolean enableTwitter) {
putString(R.string.pref_twitter_token_public, tokenPublic);
putString(R.string.pref_twitter_token_secret, tokenSecret);
if (tokenPublic != null) {
@@ -765,8 +759,8 @@ public final class Settings {
setUseTwitter(enableTwitter);
}
- public static void setTwitterTempTokens(final String tokenPublic,
- final String tokenSecret) {
+ public static void setTwitterTempTokens(@Nullable final String tokenPublic,
+ @Nullable final String tokenSecret) {
putString(R.string.pref_temp_twitter_token_public, tokenPublic);
putString(R.string.pref_temp_twitter_token_secret, tokenSecret);
}
diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java
index d2c73f3..e2b9b9b 100644
--- a/main/src/cgeo/geocaching/settings/SettingsActivity.java
+++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java
@@ -1,13 +1,14 @@
package cgeo.geocaching.settings;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Intents;
import cgeo.geocaching.R;
import cgeo.geocaching.SelectMapfileActivity;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.apps.cache.navi.NavigationAppFactory;
import cgeo.geocaching.apps.cache.navi.NavigationAppFactory.NavigationAppsEnum;
import cgeo.geocaching.compatibility.Compatibility;
+import cgeo.geocaching.connector.gc.GCConnector;
import cgeo.geocaching.connector.gc.Login;
import cgeo.geocaching.files.SimpleDirChooser;
import cgeo.geocaching.maps.MapProviderFactory;
@@ -151,10 +152,26 @@ public class SettingsActivity extends PreferenceActivity {
getPreference(R.string.pref_connectorOCActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER);
getPreference(R.string.pref_connectorOCPLActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER);
getPreference(R.string.pref_connectorGCActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER);
+ setWebsite(R.string.pref_fakekey_gc_website, GCConnector.getInstance().getHost());
+ setWebsite(R.string.pref_fakekey_ocde_website, "opencaching.de");
+ setWebsite(R.string.pref_fakekey_ocpl_website, "opencaching.pl");
+ setWebsite(R.string.pref_fakekey_gcvote_website, "gcvote.com");
+ setWebsite(R.string.pref_fakekey_sendtocgeo_website, "send2.cgeo.org");
+ }
+
+ private void setWebsite(final int preferenceKey, final String host) {
+ Preference preference = getPreference(preferenceKey);
+ preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(final Preference preference) {
+ startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://" + host)));
+ return true;
+ }
+ });
}
private static String getKey(final int prefKeyId) {
- return cgeoapplication.getInstance().getString(prefKeyId);
+ return CgeoApplication.getInstance().getString(prefKeyId);
}
private Preference getPreference(final int keyId) {
@@ -337,7 +354,7 @@ public class SettingsActivity extends PreferenceActivity {
@Override
public boolean onPreferenceClick(final Preference preference) {
boolean oldValue = Settings.isDbOnSDCard();
- ((cgeoapplication) SettingsActivity.this.getApplication())
+ ((CgeoApplication) SettingsActivity.this.getApplication())
.moveDatabase(SettingsActivity.this);
return oldValue != Settings.isDbOnSDCard();
}
@@ -506,7 +523,7 @@ public class SettingsActivity extends PreferenceActivity {
preference.setSummary(mapSource.getName());
} else if (isPreference(preference, R.string.pref_connectorOCActive) || isPreference(preference, R.string.pref_connectorOCPLActive) || isPreference(preference, R.string.pref_connectorGCActive)) {
// // reset log-in status if connector activation was changed
- cgeoapplication.getInstance().checkLogin = true;
+ CgeoApplication.getInstance().checkLogin = true;
} else if (preference instanceof ListPreference) {
// For list preferences, look up the correct display value in
// the preference's 'entries' list.
@@ -537,7 +554,7 @@ public class SettingsActivity extends PreferenceActivity {
if (Login.isActualLoginStatus()) {
Login.logout();
}
- cgeoapplication.getInstance().checkLogin = true;
+ CgeoApplication.getInstance().checkLogin = true;
}
return true;
}
diff --git a/main/src/cgeo/geocaching/sorting/ComparatorUserInterface.java b/main/src/cgeo/geocaching/sorting/ComparatorUserInterface.java
index 4d1a994..3cdd393 100644
--- a/main/src/cgeo/geocaching/sorting/ComparatorUserInterface.java
+++ b/main/src/cgeo/geocaching/sorting/ComparatorUserInterface.java
@@ -90,7 +90,9 @@ public class ComparatorUserInterface {
CacheComparator comparator = entry.cacheComparator.newInstance();
runAfterwards.run(comparator);
}
- } catch (Exception e) {
+ } catch (InstantiationException e) {
+ Log.e("selectComparator", e);
+ } catch (IllegalAccessException e) {
Log.e("selectComparator", e);
}
dialog.dismiss();
diff --git a/main/src/cgeo/geocaching/sorting/DateComparator.java b/main/src/cgeo/geocaching/sorting/DateComparator.java
index 3464103..091f6a4 100644
--- a/main/src/cgeo/geocaching/sorting/DateComparator.java
+++ b/main/src/cgeo/geocaching/sorting/DateComparator.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.sorting;
import cgeo.geocaching.Geocache;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import java.util.ArrayList;
import java.util.Date;
@@ -27,7 +27,7 @@ public class DateComparator extends AbstractCacheComparator {
final ArrayList<Geocache> list = new ArrayList<Geocache>();
list.add(cache1);
list.add(cache2);
- final DistanceComparator distanceComparator = new DistanceComparator(cgeoapplication.getInstance().currentGeo().getCoords(), list);
+ final DistanceComparator distanceComparator = new DistanceComparator(CgeoApplication.getInstance().currentGeo().getCoords(), list);
return distanceComparator.compare(cache1, cache2);
}
return dateDifference;
diff --git a/main/src/cgeo/geocaching/sorting/FindsComparator.java b/main/src/cgeo/geocaching/sorting/FindsComparator.java
index ba929b8..b147fad 100644
--- a/main/src/cgeo/geocaching/sorting/FindsComparator.java
+++ b/main/src/cgeo/geocaching/sorting/FindsComparator.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.sorting;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
-import cgeo.geocaching.cgData;
import cgeo.geocaching.enumerations.LogType;
public class FindsComparator extends AbstractCacheComparator {
@@ -20,7 +20,7 @@ public class FindsComparator extends AbstractCacheComparator {
private static int getFindsCount(Geocache cache) {
if (cache.getLogCounts().isEmpty()) {
- cache.setLogCounts(cgData.loadLogCounts(cache.getGeocode()));
+ cache.setLogCounts(DataStore.loadLogCounts(cache.getGeocode()));
}
Integer logged = cache.getLogCounts().get(LogType.FOUND_IT);
if (logged != null) {
diff --git a/main/src/cgeo/geocaching/speech/SpeechService.java b/main/src/cgeo/geocaching/speech/SpeechService.java
index 1907bfc..baa843b 100644
--- a/main/src/cgeo/geocaching/speech/SpeechService.java
+++ b/main/src/cgeo/geocaching/speech/SpeechService.java
@@ -2,7 +2,7 @@ package cgeo.geocaching.speech;
import cgeo.geocaching.DirectionProvider;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.settings.Settings;
@@ -48,7 +48,7 @@ public class SpeechService extends Service implements OnInitListener {
GeoDirHandler geoHandler = new GeoDirHandler() {
@Override
protected void updateDirection(float newDirection) {
- if (cgeoapplication.getInstance().currentGeo().getSpeed() <= 5) {
+ if (CgeoApplication.getInstance().currentGeo().getSpeed() <= 5) {
direction = DirectionProvider.getDirectionNow(startingActivity, newDirection);
directionInitialized = true;
updateCompass();
diff --git a/main/src/cgeo/geocaching/speech/TextFactory.java b/main/src/cgeo/geocaching/speech/TextFactory.java
index 81a74fb..2a3b6d7 100644
--- a/main/src/cgeo/geocaching/speech/TextFactory.java
+++ b/main/src/cgeo/geocaching/speech/TextFactory.java
@@ -1,8 +1,8 @@
package cgeo.geocaching.speech;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.R;
import cgeo.geocaching.settings.Settings;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.IConversion;
import cgeo.geocaching.utils.AngleUtils;
@@ -12,6 +12,13 @@ import java.util.Locale;
/**
* Creates the output to be read by TTS.
*
+ * Note: some languages need to read "one hour" as "a hour" (indefinite article). Also, other languages
+ * use the <tt>quantity="1"</tt> plurals rule for other values than 1, such as Slovenian, so it is not
+ * possible to store the literal value to use for 1 in this rule. For this reason, we need to have one
+ * string for the unit quantity ("one meter") and a plurals rule for everything else.
+ *
+ * See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html for rules
+ * on unit expressions.
*/
public class TextFactory {
public static String getText(Geopoint position, Geopoint target, float direction) {
@@ -78,11 +85,11 @@ public class TextFactory {
}
private static String getString(int resourceId, Object... formatArgs) {
- return cgeoapplication.getInstance().getString(resourceId, formatArgs);
+ return CgeoApplication.getInstance().getString(resourceId, formatArgs);
}
private static String getQuantityString(int resourceId, int quantity, Object... formatArgs) {
- return cgeoapplication.getInstance().getResources().getQuantityString(resourceId, quantity, formatArgs);
+ return CgeoApplication.getInstance().getResources().getQuantityString(resourceId, quantity, formatArgs);
}
private static String getDirection(Geopoint position, Geopoint target, float direction) {
diff --git a/main/src/cgeo/geocaching/twitter/Twitter.java b/main/src/cgeo/geocaching/twitter/Twitter.java
index 7233764..c3f99fa 100644
--- a/main/src/cgeo/geocaching/twitter/Twitter.java
+++ b/main/src/cgeo/geocaching/twitter/Twitter.java
@@ -1,9 +1,9 @@
package cgeo.geocaching.twitter;
+import cgeo.geocaching.CgeoApplication;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.Trackable;
-import cgeo.geocaching.cgData;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.enumerations.LoadFlags;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.GeopointFormatter.Format;
@@ -22,16 +22,16 @@ public final class Twitter {
private static final int MAX_TWEET_SIZE = 140;
public static void postTweetCache(String geocode) {
- final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
- postTweet(cgeoapplication.getInstance(), getStatusMessage(cache), null);
+ final Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
+ postTweet(CgeoApplication.getInstance(), getStatusMessage(cache), null);
}
public static void postTweetTrackable(String geocode) {
- final Trackable trackable = cgData.loadTrackable(geocode);
- postTweet(cgeoapplication.getInstance(), getStatusMessage(trackable), null);
+ final Trackable trackable = DataStore.loadTrackable(geocode);
+ postTweet(CgeoApplication.getInstance(), getStatusMessage(trackable), null);
}
- private static void postTweet(final cgeoapplication app, final String status, final Geopoint coords) {
+ private static void postTweet(final CgeoApplication app, final String status, final Geopoint coords) {
if (app == null || !Settings.isUseTwitter() || !Settings.isTwitterLoginValid()) {
return;
}
diff --git a/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java b/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java
index 4d9a1f2..b813389 100644
--- a/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java
+++ b/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java
@@ -1,10 +1,11 @@
package cgeo.geocaching.twitter;
import cgeo.geocaching.R;
-import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.network.OAuthAuthorizationActivity;
+import cgeo.geocaching.settings.Settings;
import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.eclipse.jdt.annotation.Nullable;
public class TwitterAuthorizationActivity extends OAuthAuthorizationActivity {
@@ -15,92 +16,33 @@ public class TwitterAuthorizationActivity extends OAuthAuthorizationActivity {
"/oauth/access_token",
true,
Settings.getKeyConsumerPublic(),
- Settings.getKeyConsumerSecret());
+ Settings.getKeyConsumerSecret(),
+ "callback://www.cgeo.org/twitter/");
}
@Override
- protected ImmutablePair<String, String> getTempTokens() {
+ protected final ImmutablePair<String, String> getTempTokens() {
return Settings.getTempToken();
}
@Override
- protected void setTempTokens(String tokenPublic, String tokenSecret) {
+ protected final void setTempTokens(@Nullable final String tokenPublic, @Nullable final String tokenSecret) {
Settings.setTwitterTempTokens(tokenPublic, tokenSecret);
}
@Override
- protected void setTokens(String tokenPublic, String tokenSecret, boolean enable) {
+ protected final void setTokens(@Nullable final String tokenPublic, @Nullable final String tokenSecret, final boolean enable) {
Settings.setTwitterTokens(tokenPublic, tokenSecret, enable);
}
@Override
- protected String getAuthTitle() {
+ protected final String getAuthTitle() {
return res.getString(R.string.auth_twitter);
}
@Override
- protected String getAuthAgain() {
- return res.getString(R.string.auth_again);
- }
-
- @Override
- protected String getErrAuthInitialize() {
- return res.getString(R.string.err_auth_initialize);
- }
-
- @Override
- protected String getAuthStart() {
- return res.getString(R.string.auth_start);
- }
-
- @Override
- protected String getAuthDialogCompleted() {
- return res.getString(R.string.auth_dialog_completed);
- }
-
- @Override
- protected String getErrAuthProcess() {
- return res.getString(R.string.err_auth_process);
- }
-
- @Override
- protected String getAuthDialogWait() {
- return res.getString(R.string.auth_dialog_wait);
- }
-
- @Override
- protected String getAuthDialogPinTitle() {
- return res.getString(R.string.auth_dialog_pin_title);
- }
-
- @Override
- protected String getAuthDialogPinMessage() {
- return res.getString(R.string.auth_dialog_pin_message);
- }
-
- @Override
- protected String getAboutAuth1() {
- return res.getString(R.string.about_auth_1);
- }
-
- @Override
- protected String getAboutAuth2() {
- return res.getString(R.string.about_auth_2);
- }
-
- @Override
- protected String getAuthAuthorize() {
- return res.getString(R.string.auth_authorize);
- }
-
- @Override
- protected String getAuthPinHint() {
- return res.getString(R.string.auth_pin_hint);
- }
-
- @Override
- protected String getAuthFinish() {
- return res.getString(R.string.auth_finish);
+ protected final String getAuthDialogCompleted() {
+ return res.getString(R.string.auth_dialog_completed_twitter);
}
}
diff --git a/main/src/cgeo/geocaching/ui/AbstractUIFactory.java b/main/src/cgeo/geocaching/ui/AbstractUIFactory.java
index 2351383..0d447f2 100644
--- a/main/src/cgeo/geocaching/ui/AbstractUIFactory.java
+++ b/main/src/cgeo/geocaching/ui/AbstractUIFactory.java
@@ -1,9 +1,9 @@
package cgeo.geocaching.ui;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import android.content.res.Resources;
public class AbstractUIFactory {
- protected final static Resources res = cgeoapplication.getInstance().getResources();
+ protected final static Resources res = CgeoApplication.getInstance().getResources();
}
diff --git a/main/src/cgeo/geocaching/ui/AbstractUserClickListener.java b/main/src/cgeo/geocaching/ui/AbstractUserClickListener.java
index b717568..f8cfb8a 100644
--- a/main/src/cgeo/geocaching/ui/AbstractUserClickListener.java
+++ b/main/src/cgeo/geocaching/ui/AbstractUserClickListener.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.ui;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeocaches;
+import cgeo.geocaching.CacheListActivity;
import cgeo.geocaching.activity.AbstractActivity;
import cgeo.geocaching.network.Network;
@@ -53,10 +53,10 @@ abstract class AbstractUserClickListener implements View.OnClickListener {
public void onClick(DialogInterface dialog, int item) {
switch (item) {
case 0:
- cgeocaches.startActivityOwner(context, name.toString());
+ CacheListActivity.startActivityOwner(context, name.toString());
return;
case 1:
- cgeocaches.startActivityUserName(context, name.toString());
+ CacheListActivity.startActivityUserName(context, name.toString());
return;
case 2:
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.geocaching.com/profile/?u=" + Network.encode(name.toString()))));
diff --git a/main/src/cgeo/geocaching/ui/AddressListAdapter.java b/main/src/cgeo/geocaching/ui/AddressListAdapter.java
index 736c036..0d5fba7 100644
--- a/main/src/cgeo/geocaching/ui/AddressListAdapter.java
+++ b/main/src/cgeo/geocaching/ui/AddressListAdapter.java
@@ -2,9 +2,9 @@ package cgeo.geocaching.ui;
import butterknife.InjectView;
+import cgeo.geocaching.CacheListActivity;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
-import cgeo.geocaching.cgeocaches;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Units;
@@ -38,7 +38,7 @@ public class AddressListAdapter extends ArrayAdapter<Address> {
public AddressListAdapter(final Context context) {
super(context, 0);
inflater = ((Activity) context).getLayoutInflater();
- location = cgeoapplication.getInstance().currentGeo().getCoords();
+ location = CgeoApplication.getInstance().currentGeo().getCoords();
}
@Override
@@ -61,7 +61,7 @@ public class AddressListAdapter extends ArrayAdapter<Address> {
@Override
public void onClick(final View v) {
final Activity activity = (Activity) v.getContext();
- cgeocaches.startActivityAddress(activity, new Geopoint(address.getLatitude(), address.getLongitude()), StringUtils.defaultString(address.getAddressLine(0)));
+ CacheListActivity.startActivityAddress(activity, new Geopoint(address.getLatitude(), address.getLongitude()), StringUtils.defaultString(address.getAddressLine(0)));
activity.finish();
}
});
diff --git a/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java b/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java
index 9059a6b..5f0d90a 100644
--- a/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java
+++ b/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java
@@ -1,9 +1,9 @@
package cgeo.geocaching.ui;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
import cgeo.geocaching.Waypoint;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Units;
@@ -134,7 +134,7 @@ public final class CacheDetailsCreator {
public void addDistance(final Geocache cache, final TextView cacheDistanceView) {
Float distance = null;
if (cache.getCoords() != null) {
- final Geopoint currentCoords = cgeoapplication.getInstance().currentGeo().getCoords();
+ final Geopoint currentCoords = CgeoApplication.getInstance().currentGeo().getCoords();
if (currentCoords != null) {
distance = currentCoords.distanceTo(cache);
}
@@ -159,7 +159,7 @@ public final class CacheDetailsCreator {
public void addDistance(final Waypoint wpt, final TextView waypointDistanceView) {
Float distance = null;
if (wpt.getCoords() != null) {
- final Geopoint currentCoords = cgeoapplication.getInstance().currentGeo().getCoords();
+ final Geopoint currentCoords = CgeoApplication.getInstance().currentGeo().getCoords();
if (currentCoords != null) {
distance = currentCoords.distanceTo(wpt);
}
diff --git a/main/src/cgeo/geocaching/ui/CacheListAdapter.java b/main/src/cgeo/geocaching/ui/CacheListAdapter.java
index c6aeaa6..9f41e59 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.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.enumerations.CacheListType;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.filter.IFilter;
@@ -112,7 +112,7 @@ public class CacheListAdapter extends ArrayAdapter<Geocache> {
public CacheListAdapter(final Activity activity, final List<Geocache> list, CacheListType cacheListType) {
super(activity, 0, list);
- final IGeoData currentGeo = cgeoapplication.getInstance().currentGeo();
+ final IGeoData currentGeo = CgeoApplication.getInstance().currentGeo();
if (currentGeo != null) {
coords = currentGeo.getCoords();
}
diff --git a/main/src/cgeo/geocaching/ui/DecryptTextClickListener.java b/main/src/cgeo/geocaching/ui/DecryptTextClickListener.java
index f10e13a..e2e587e 100644
--- a/main/src/cgeo/geocaching/ui/DecryptTextClickListener.java
+++ b/main/src/cgeo/geocaching/ui/DecryptTextClickListener.java
@@ -2,36 +2,38 @@ package cgeo.geocaching.ui;
import cgeo.geocaching.utils.CryptUtils;
+import org.eclipse.jdt.annotation.NonNull;
+
import android.text.Spannable;
import android.view.View;
import android.widget.TextView;
public class DecryptTextClickListener implements View.OnClickListener {
- @Override
- public void onClick(View view) {
- if (view == null) {
- return;
- }
+ @NonNull private final TextView targetView;
- try {
- final TextView logView = (TextView) view;
+ public DecryptTextClickListener(@NonNull final TextView targetView) {
+ this.targetView = targetView;
+ }
+ @Override
+ public final void onClick(final View view) {
+ try {
// do not run the click listener if a link was clicked
- if (logView.getSelectionStart() != -1 || logView.getSelectionEnd() != -1) {
+ if (targetView.getSelectionStart() != -1 || targetView.getSelectionEnd() != -1) {
return;
}
- CharSequence text = logView.getText();
+ CharSequence text = targetView.getText();
if (text instanceof Spannable) {
Spannable span = (Spannable) text;
- logView.setText(CryptUtils.rot13(span));
+ targetView.setText(CryptUtils.rot13(span));
}
else {
String string = (String) text;
- logView.setText(CryptUtils.rot13(string));
+ targetView.setText(CryptUtils.rot13(string));
}
- } catch (Exception e) {
+ } catch (RuntimeException e) {
// nothing
}
}
diff --git a/main/src/cgeo/geocaching/ui/DirectionImage.java b/main/src/cgeo/geocaching/ui/DirectionImage.java
index 9de360c..cd7695e 100644
--- a/main/src/cgeo/geocaching/ui/DirectionImage.java
+++ b/main/src/cgeo/geocaching/ui/DirectionImage.java
@@ -1,6 +1,6 @@
package cgeo.geocaching.ui;
-import cgeo.geocaching.StoredList;
+import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.network.HtmlImage;
import org.apache.commons.lang3.StringUtils;
diff --git a/main/src/cgeo/geocaching/ui/Formatter.java b/main/src/cgeo/geocaching/ui/Formatter.java
index ecae9ea..963807f 100644
--- a/main/src/cgeo/geocaching/ui/Formatter.java
+++ b/main/src/cgeo/geocaching/ui/Formatter.java
@@ -3,7 +3,7 @@ package cgeo.geocaching.ui;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
import cgeo.geocaching.Waypoint;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.enumerations.CacheListType;
import cgeo.geocaching.enumerations.CacheSize;
import cgeo.geocaching.enumerations.WaypointType;
@@ -22,7 +22,7 @@ public abstract class Formatter {
/** Text separator used for formatting texts */
public static final String SEPARATOR = " · ";
- private static final Context context = cgeoapplication.getInstance().getBaseContext();
+ private static final Context context = CgeoApplication.getInstance().getBaseContext();
/**
* Generate a time string according to system-wide settings (locale, 12/24 hour)
@@ -87,9 +87,9 @@ public abstract class Formatter {
int diff = cgeo.geocaching.utils.DateUtils.daysSince(date);
switch (diff) {
case 0:
- return cgeoapplication.getInstance().getString(R.string.log_today);
+ return CgeoApplication.getInstance().getString(R.string.log_today);
case 1:
- return cgeoapplication.getInstance().getString(R.string.log_yesterday);
+ return CgeoApplication.getInstance().getString(R.string.log_yesterday);
default:
return formatShortDate(date);
}
@@ -116,10 +116,10 @@ public abstract class Formatter {
addShortInfos(cache, infos);
if (cache.isPremiumMembersOnly()) {
- infos.add(cgeoapplication.getInstance().getString(R.string.cache_premium));
+ infos.add(CgeoApplication.getInstance().getString(R.string.cache_premium));
}
if (cacheListType != CacheListType.OFFLINE && cacheListType != CacheListType.HISTORY && cache.getListId() > 0) {
- infos.add(cgeoapplication.getInstance().getString(R.string.cache_offline));
+ infos.add(CgeoApplication.getInstance().getString(R.string.cache_offline));
}
return StringUtils.join(infos, Formatter.SEPARATOR);
}
@@ -161,7 +161,7 @@ public abstract class Formatter {
infos.add(waypointType.getL10n());
}
if (Waypoint.PREFIX_OWN.equalsIgnoreCase(waypoint.getPrefix())) {
- infos.add(cgeoapplication.getInstance().getString(R.string.waypoint_custom));
+ infos.add(CgeoApplication.getInstance().getString(R.string.waypoint_custom));
} else {
if (StringUtils.isNotBlank(waypoint.getPrefix())) {
infos.add(waypoint.getPrefix());
diff --git a/main/src/cgeo/geocaching/ui/ImagesList.java b/main/src/cgeo/geocaching/ui/ImagesList.java
index 0f860c4..fdff701 100644
--- a/main/src/cgeo/geocaching/ui/ImagesList.java
+++ b/main/src/cgeo/geocaching/ui/ImagesList.java
@@ -2,8 +2,8 @@ package cgeo.geocaching.ui;
import cgeo.geocaching.Image;
import cgeo.geocaching.R;
-import cgeo.geocaching.StoredList;
import cgeo.geocaching.files.LocalStorage;
+import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.network.HtmlImage;
import cgeo.geocaching.utils.IOUtils;
import cgeo.geocaching.utils.Log;
diff --git a/main/src/cgeo/geocaching/ui/LoggingUI.java b/main/src/cgeo/geocaching/ui/LoggingUI.java
index 0ee724a..1423da2 100644
--- a/main/src/cgeo/geocaching/ui/LoggingUI.java
+++ b/main/src/cgeo/geocaching/ui/LoggingUI.java
@@ -1,12 +1,11 @@
package cgeo.geocaching.ui;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.LogEntry;
import cgeo.geocaching.R;
-import cgeo.geocaching.settings.Settings;
-import cgeo.geocaching.cgData;
-import cgeo.geocaching.activity.IAbstractActivity;
import cgeo.geocaching.enumerations.LogType;
+import cgeo.geocaching.settings.Settings;
import android.app.Activity;
import android.app.AlertDialog;
@@ -61,13 +60,13 @@ public class LoggingUI extends AbstractUIFactory {
}
}
- public static boolean onMenuItemSelected(final MenuItem item, IAbstractActivity activity, Geocache cache) {
+ public static boolean onMenuItemSelected(final MenuItem item, final Activity activity, final Geocache cache) {
switch (item.getItemId()) {
case R.id.menu_log_visit:
cache.logVisit(activity);
return true;
case R.id.menu_log_visit_offline:
- showOfflineMenu(cache, (Activity) activity);
+ showOfflineMenu(cache, activity);
return true;
default:
return false;
@@ -75,7 +74,7 @@ public class LoggingUI extends AbstractUIFactory {
}
private static void showOfflineMenu(final Geocache cache, final Activity activity) {
- final LogEntry currentLog = cgData.loadLogOffline(cache.getGeocode());
+ final LogEntry currentLog = DataStore.loadLogOffline(cache.getGeocode());
final LogType currentLogType = currentLog == null ? null : currentLog.type;
final List<LogType> logTypes = cache.getPossibleLogTypes();
@@ -100,7 +99,7 @@ public class LoggingUI extends AbstractUIFactory {
if (logTypeEntry.logType == null) {
switch (logTypeEntry.specialLogType) {
case LOG_CACHE:
- cache.logVisit((IAbstractActivity) activity);
+ cache.logVisit(activity);
break;
case CLEAR_LOG:
diff --git a/main/src/cgeo/geocaching/ui/dialog/CustomProgressDialog.java b/main/src/cgeo/geocaching/ui/dialog/CustomProgressDialog.java
index e80c446..97c5c29 100644
--- a/main/src/cgeo/geocaching/ui/dialog/CustomProgressDialog.java
+++ b/main/src/cgeo/geocaching/ui/dialog/CustomProgressDialog.java
@@ -10,6 +10,7 @@ import android.view.View;
import android.widget.TextView;
import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
@@ -38,7 +39,11 @@ public class CustomProgressDialog extends ProgressDialog {
method.invoke(textView, View.GONE);
}
}
- } catch (Exception e) {
+ } catch (NoSuchMethodException e) {
+ Log.e("Failed to invoke the progressDialog method 'setVisibility' and set 'mProgressNumber' to GONE.", e);
+ } catch (IllegalAccessException e) {
+ Log.e("Failed to invoke the progressDialog method 'setVisibility' and set 'mProgressNumber' to GONE.", e);
+ } catch (InvocationTargetException e) {
Log.e("Failed to invoke the progressDialog method 'setVisibility' and set 'mProgressNumber' to GONE.", e);
}
}
diff --git a/main/src/cgeo/geocaching/ui/dialog/LiveMapInfoDialogBuilder.java b/main/src/cgeo/geocaching/ui/dialog/LiveMapInfoDialogBuilder.java
index 2c4f38d..6ad59ec 100644
--- a/main/src/cgeo/geocaching/ui/dialog/LiveMapInfoDialogBuilder.java
+++ b/main/src/cgeo/geocaching/ui/dialog/LiveMapInfoDialogBuilder.java
@@ -2,7 +2,7 @@ package cgeo.geocaching.ui.dialog;
import cgeo.geocaching.R;
import cgeo.geocaching.settings.Settings;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import android.app.Activity;
import android.app.AlertDialog;
@@ -33,7 +33,7 @@ public class LiveMapInfoDialogBuilder {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
- cgeoapplication.getInstance().setLiveMapHintShown();
+ CgeoApplication.getInstance().setLiveMapHintShown();
if (checkBoxHide.getVisibility() == View.VISIBLE && checkBoxHide.isChecked()) {
Settings.setHideLiveHint(true);
}
diff --git a/main/src/cgeo/geocaching/ui/logs/CacheLogsViewCreator.java b/main/src/cgeo/geocaching/ui/logs/CacheLogsViewCreator.java
index 8da711e..8fe3866 100644
--- a/main/src/cgeo/geocaching/ui/logs/CacheLogsViewCreator.java
+++ b/main/src/cgeo/geocaching/ui/logs/CacheLogsViewCreator.java
@@ -4,7 +4,7 @@ import cgeo.geocaching.CacheDetailActivity;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.LogEntry;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.ui.UserActionsClickListener;
@@ -23,7 +23,7 @@ import java.util.Map.Entry;
public class CacheLogsViewCreator extends LogsViewCreator {
private final boolean allLogs;
- private final Resources res = cgeoapplication.getInstance().getResources();
+ private final Resources res = CgeoApplication.getInstance().getResources();
public CacheLogsViewCreator(CacheDetailActivity cacheDetailActivity, boolean allLogs) {
super(cacheDetailActivity);
diff --git a/main/src/cgeo/geocaching/ui/logs/LogsViewCreator.java b/main/src/cgeo/geocaching/ui/logs/LogsViewCreator.java
index ee2713a..15634d3 100644
--- a/main/src/cgeo/geocaching/ui/logs/LogsViewCreator.java
+++ b/main/src/cgeo/geocaching/ui/logs/LogsViewCreator.java
@@ -4,9 +4,9 @@ import cgeo.geocaching.Image;
import cgeo.geocaching.ImagesActivity;
import cgeo.geocaching.LogEntry;
import cgeo.geocaching.R;
-import cgeo.geocaching.StoredList;
import cgeo.geocaching.activity.AbstractActivity;
import cgeo.geocaching.activity.Progress;
+import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.network.HtmlImage;
import cgeo.geocaching.ui.AbstractCachingPageViewCreator;
import cgeo.geocaching.ui.AnchorAwareLinkMovementMethod;
@@ -129,7 +129,7 @@ public abstract class LogsViewCreator extends AbstractCachingPageViewCreator<Lis
if (null == convertView) {
holder.author.setOnClickListener(createUserActionsListener());
holder.text.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance());
- holder.text.setOnClickListener(new DecryptTextClickListener());
+ holder.text.setOnClickListener(new DecryptTextClickListener(holder.text));
activity.registerForContextMenu(holder.text);
}
}
diff --git a/main/src/cgeo/geocaching/utils/ApplicationSettings.java b/main/src/cgeo/geocaching/utils/ApplicationSettings.java
index 99d3142..78fa4f6 100644
--- a/main/src/cgeo/geocaching/utils/ApplicationSettings.java
+++ b/main/src/cgeo/geocaching/utils/ApplicationSettings.java
@@ -17,7 +17,7 @@ public class ApplicationSettings {
*/
public static String getPreferencesName() {
// There is currently no Android API to get the file name of the shared preferences. Let's hardcode
- // it without needing a cgeoapplication instance.
+ // it without needing a CgeoApplication instance.
return "cgeo.geocaching_preferences";
}
diff --git a/main/src/cgeo/geocaching/utils/CancellableHandler.java b/main/src/cgeo/geocaching/utils/CancellableHandler.java
index 8cf8f28..cb4b9db 100644
--- a/main/src/cgeo/geocaching/utils/CancellableHandler.java
+++ b/main/src/cgeo/geocaching/utils/CancellableHandler.java
@@ -1,6 +1,6 @@
package cgeo.geocaching.utils;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import android.os.Handler;
import android.os.Message;
@@ -114,7 +114,7 @@ public abstract class CancellableHandler extends Handler {
public static void sendLoadProgressDetail(final Handler handler, final int resourceId) {
if (null != handler) {
- handler.obtainMessage(UPDATE_LOAD_PROGRESS_DETAIL, cgeoapplication.getInstance().getString(resourceId)).sendToTarget();
+ handler.obtainMessage(UPDATE_LOAD_PROGRESS_DETAIL, CgeoApplication.getInstance().getString(resourceId)).sendToTarget();
}
}
}
diff --git a/main/src/cgeo/geocaching/utils/ClipboardUtils.java b/main/src/cgeo/geocaching/utils/ClipboardUtils.java
index 67069b2..77250f3 100644
--- a/main/src/cgeo/geocaching/utils/ClipboardUtils.java
+++ b/main/src/cgeo/geocaching/utils/ClipboardUtils.java
@@ -1,6 +1,6 @@
package cgeo.geocaching.utils;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import android.content.Context;
@@ -24,7 +24,7 @@ public final class ClipboardUtils {
*/
public static void copyToClipboard(final CharSequence text) {
// fully qualified name used here to avoid buggy deprecation warning (of javac) on the import statement
- final android.text.ClipboardManager clipboard = (android.text.ClipboardManager) cgeoapplication.getInstance().getSystemService(Context.CLIPBOARD_SERVICE);
+ final android.text.ClipboardManager clipboard = (android.text.ClipboardManager) CgeoApplication.getInstance().getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.setText(text);
}
diff --git a/main/src/cgeo/geocaching/utils/CryptUtils.java b/main/src/cgeo/geocaching/utils/CryptUtils.java
index 18a337d..d98585a 100644
--- a/main/src/cgeo/geocaching/utils/CryptUtils.java
+++ b/main/src/cgeo/geocaching/utils/CryptUtils.java
@@ -1,11 +1,17 @@
package cgeo.geocaching.utils;
+import org.apache.commons.lang3.CharEncoding;
+import org.apache.commons.lang3.StringUtils;
+
import android.text.Spannable;
import android.text.SpannableStringBuilder;
+import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
+import java.security.GeneralSecurityException;
import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
@@ -62,7 +68,7 @@ public final class CryptUtils {
public static String rot13(String text) {
if (text == null) {
- return "";
+ return StringUtils.EMPTY;
}
final StringBuilder result = new StringBuilder();
Rot13Encryption rot13 = new Rot13Encryption();
@@ -76,42 +82,44 @@ public final class CryptUtils {
}
public static String md5(String text) {
- String hashed = "";
-
try {
final MessageDigest digest = MessageDigest.getInstance("MD5");
- digest.update(text.getBytes(), 0, text.length());
- hashed = new BigInteger(1, digest.digest()).toString(16);
- } catch (Exception e) {
+ digest.update(text.getBytes(CharEncoding.UTF_8), 0, text.length());
+ return new BigInteger(1, digest.digest()).toString(16);
+ } catch (NoSuchAlgorithmException e) {
+ Log.e("CryptUtils.md5", e);
+ } catch (UnsupportedEncodingException e) {
Log.e("CryptUtils.md5", e);
}
- return hashed;
+ return StringUtils.EMPTY;
}
public static String sha1(String text) {
- String hashed = "";
-
try {
final MessageDigest digest = MessageDigest.getInstance("SHA-1");
- digest.update(text.getBytes(), 0, text.length());
- hashed = new BigInteger(1, digest.digest()).toString(16);
- } catch (Exception e) {
+ digest.update(text.getBytes(CharEncoding.UTF_8), 0, text.length());
+ return new BigInteger(1, digest.digest()).toString(16);
+ } catch (NoSuchAlgorithmException e) {
+ Log.e("CryptUtils.sha1", e);
+ } catch (UnsupportedEncodingException e) {
Log.e("CryptUtils.sha1", e);
}
- return hashed;
+ return StringUtils.EMPTY;
}
public static byte[] hashHmac(String text, String salt) {
byte[] macBytes = {};
try {
- final SecretKeySpec secretKeySpec = new SecretKeySpec(salt.getBytes(), "HmacSHA1");
+ final SecretKeySpec secretKeySpec = new SecretKeySpec(salt.getBytes(CharEncoding.UTF_8), "HmacSHA1");
final Mac mac = Mac.getInstance("HmacSHA1");
mac.init(secretKeySpec);
- macBytes = mac.doFinal(text.getBytes());
- } catch (Exception e) {
+ macBytes = mac.doFinal(text.getBytes(CharEncoding.UTF_8));
+ } catch (GeneralSecurityException e) {
+ Log.e("CryptUtils.hashHmac", e);
+ } catch (UnsupportedEncodingException e) {
Log.e("CryptUtils.hashHmac", e);
}
diff --git a/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java b/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java
index 24f375d..5c8d641 100644
--- a/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java
+++ b/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java
@@ -1,8 +1,8 @@
package cgeo.geocaching.utils;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.MainActivity;
import cgeo.geocaching.R;
-import cgeo.geocaching.cgData;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.ui.Formatter;
@@ -50,7 +50,7 @@ public class DatabaseBackupUtils {
@Override
public void run() {
- restoreSuccessful.set(cgData.restoreDatabaseInternal());
+ restoreSuccessful.set(DataStore.restoreDatabaseInternal());
handler.sendMessage(handler.obtainMessage());
}
};
@@ -61,7 +61,7 @@ public class DatabaseBackupUtils {
final Context context = activity;
// avoid overwriting an existing backup with an empty database
// (can happen directly after reinstalling the app)
- if (cgData.getAllCachesCount() == 0) {
+ if (DataStore.getAllCachesCount() == 0) {
ActivityMixin.helpDialog(activity,
context.getString(R.string.init_backup),
context.getString(R.string.init_backup_unnecessary));
@@ -74,7 +74,7 @@ public class DatabaseBackupUtils {
new Thread() {
@Override
public void run() {
- final String backupFileName = cgData.backupDatabaseInternal();
+ final String backupFileName = DataStore.backupDatabaseInternal();
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
@@ -96,8 +96,8 @@ public class DatabaseBackupUtils {
}
public static File getRestoreFile() {
- final File fileSourceFile = cgData.getBackupFileInternal();
- return fileSourceFile.exists() ? fileSourceFile : null;
+ final File fileSourceFile = DataStore.getBackupFileInternal();
+ return fileSourceFile.exists() && fileSourceFile.length() > 0 ? fileSourceFile : null;
}
public static boolean hasBackup() {
diff --git a/main/src/cgeo/geocaching/utils/GeoDirHandler.java b/main/src/cgeo/geocaching/utils/GeoDirHandler.java
index a143730..c85648b 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.CgeoApplication;
import cgeo.geocaching.IGeoData;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.settings.Settings;
import android.os.Handler;
@@ -29,7 +29,7 @@ public abstract class GeoDirHandler extends Handler implements IObserver<Object>
private static final int STOP_GEO = 1 << 4;
private static final int STOP_DIR = 1 << 5;
- private static final cgeoapplication app = cgeoapplication.getInstance();
+ private static final CgeoApplication app = CgeoApplication.getInstance();
@Override
final public void handleMessage(final Message message) {
diff --git a/main/src/cgeo/geocaching/utils/IOUtils.java b/main/src/cgeo/geocaching/utils/IOUtils.java
index df90da3..8e483d3 100644
--- a/main/src/cgeo/geocaching/utils/IOUtils.java
+++ b/main/src/cgeo/geocaching/utils/IOUtils.java
@@ -1,5 +1,7 @@
package cgeo.geocaching.utils;
+import org.eclipse.jdt.annotation.Nullable;
+
import java.io.Closeable;
import java.io.IOException;
@@ -9,7 +11,7 @@ final public class IOUtils {
// utility class
}
- public static void closeQuietly(final Closeable closeable) {
+ public static void closeQuietly(@Nullable final Closeable closeable) {
if (closeable != null) {
try {
closeable.close();
diff --git a/main/src/cgeo/geocaching/utils/ImageUtils.java b/main/src/cgeo/geocaching/utils/ImageUtils.java
index 478be1f..ea4498b 100644
--- a/main/src/cgeo/geocaching/utils/ImageUtils.java
+++ b/main/src/cgeo/geocaching/utils/ImageUtils.java
@@ -1,8 +1,11 @@
package cgeo.geocaching.utils;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.compatibility.Compatibility;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Point;
@@ -13,6 +16,7 @@ import android.net.Uri;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
+import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
@@ -45,7 +49,7 @@ public final class ImageUtils {
* @return BitmapDrawable The scaled image
*/
public static BitmapDrawable scaleBitmapTo(final Bitmap image, final int maxWidth, final int maxHeight) {
- final cgeoapplication app = cgeoapplication.getInstance();
+ final CgeoApplication app = CgeoApplication.getInstance();
Bitmap result = image;
int width = image.getWidth();
int height = image.getHeight();
@@ -81,7 +85,7 @@ public final class ImageUtils {
bitmap.compress(format, quality, bos);
bos.flush();
bos.close();
- } catch (Exception e) {
+ } catch (IOException e) {
Log.e("ImageHelper.storeBitmap", e);
}
}
@@ -95,7 +99,8 @@ public final class ImageUtils {
* boundings
* @return filename and path, <tt>null</tt> if something fails
*/
- public static String readScaleAndWriteImage(final String filePath, final int maxXY) {
+ @Nullable
+ public static String readScaleAndWriteImage(@NonNull final String filePath, final int maxXY) {
if (maxXY <= 0) {
return filePath;
}
@@ -131,6 +136,7 @@ public final class ImageUtils {
* @return the temporary image file to use, or <tt>null</tt> if the media directory could
* not be created.
* */
+ @Nullable
public static File getOutputImageFile() {
// To be safe, you should check that the SDCard is mounted
// using Environment.getExternalStorageState() before doing this.
@@ -152,6 +158,7 @@ public final class ImageUtils {
return new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg");
}
+ @Nullable
public static Uri getOutputImageFileUri() {
final File file = getOutputImageFile();
if (file == null) {
diff --git a/main/src/cgeo/geocaching/utils/Log.java b/main/src/cgeo/geocaching/utils/Log.java
index aa8dbd1..1ade2f9 100644
--- a/main/src/cgeo/geocaching/utils/Log.java
+++ b/main/src/cgeo/geocaching/utils/Log.java
@@ -1,11 +1,14 @@
package cgeo.geocaching.utils;
+import org.apache.commons.lang3.CharEncoding;
+
import android.os.Environment;
import java.io.BufferedWriter;
import java.io.File;
-import java.io.FileWriter;
+import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.OutputStreamWriter;
import java.io.Writer;
public final class Log {
@@ -107,7 +110,7 @@ public final class Log {
}
Writer writer = null;
try {
- writer = new BufferedWriter(new FileWriter(file, true));
+ writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true), CharEncoding.UTF_8));
writer.write(msg);
} catch (final IOException e) {
Log.e("logToFile: cannot write to " + file, e);
diff --git a/main/src/cgeo/geocaching/utils/ProcessUtils.java b/main/src/cgeo/geocaching/utils/ProcessUtils.java
index 3345ff1..f19cdb5 100644
--- a/main/src/cgeo/geocaching/utils/ProcessUtils.java
+++ b/main/src/cgeo/geocaching/utils/ProcessUtils.java
@@ -1,6 +1,6 @@
package cgeo.geocaching.utils;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import org.apache.commons.collections.CollectionUtils;
@@ -43,7 +43,7 @@ public final class ProcessUtils {
* This will find installed applications even without launch intent (e.g. the streetview plugin).
*/
private static boolean hasPackageInstalled(final String packageName) {
- final List<PackageInfo> packs = cgeoapplication.getInstance().getPackageManager().getInstalledPackages(0);
+ final List<PackageInfo> packs = CgeoApplication.getInstance().getPackageManager().getInstalledPackages(0);
for (final PackageInfo packageInfo : packs) {
if (packageName.equals(packageInfo.packageName)) {
return true;
@@ -59,7 +59,7 @@ public final class ProcessUtils {
if (packageName == null) {
return null;
}
- final PackageManager packageManager = cgeoapplication.getInstance().getPackageManager();
+ final PackageManager packageManager = CgeoApplication.getInstance().getPackageManager();
try {
// This can throw an exception where the exception type is only defined on API Level > 3
// therefore surround with try-catch
@@ -70,7 +70,7 @@ public final class ProcessUtils {
}
public static boolean isIntentAvailable(final String intent) {
- final PackageManager packageManager = cgeoapplication.getInstance().getPackageManager();
+ final PackageManager packageManager = CgeoApplication.getInstance().getPackageManager();
final List<ResolveInfo> list = packageManager.queryIntentActivities(
new Intent(intent), PackageManager.MATCH_DEFAULT_ONLY);
diff --git a/main/src/cgeo/geocaching/utils/SimpleCancellableHandler.java b/main/src/cgeo/geocaching/utils/SimpleCancellableHandler.java
index 9207c74..22cd4d7 100644
--- a/main/src/cgeo/geocaching/utils/SimpleCancellableHandler.java
+++ b/main/src/cgeo/geocaching/utils/SimpleCancellableHandler.java
@@ -26,7 +26,6 @@ public class SimpleCancellableHandler extends CancellableHandler {
activity.showToast(msg.getData().getString(MESSAGE_TEXT));
}
dismissProgress();
- return;
}
@Override
diff --git a/main/src/cgeo/geocaching/utils/SimpleHandler.java b/main/src/cgeo/geocaching/utils/SimpleHandler.java
index b01d0e1..8e0a479 100644
--- a/main/src/cgeo/geocaching/utils/SimpleHandler.java
+++ b/main/src/cgeo/geocaching/utils/SimpleHandler.java
@@ -3,7 +3,6 @@ package cgeo.geocaching.utils;
import cgeo.geocaching.activity.AbstractActivity;
import cgeo.geocaching.activity.Progress;
-import android.content.res.Resources;
import android.os.Handler;
import android.os.Message;
@@ -15,48 +14,20 @@ public abstract class SimpleHandler extends Handler {
protected final WeakReference<Progress> progressDialogRef;
public SimpleHandler(final AbstractActivity activity, final Progress progress) {
- this.activityRef = new WeakReference<AbstractActivity>(activity);
- this.progressDialogRef = new WeakReference<Progress>(progress);
+ activityRef = new WeakReference<AbstractActivity>(activity);
+ progressDialogRef = new WeakReference<Progress>(progress);
}
@Override
public void handleMessage(final Message msg) {
- AbstractActivity activity = activityRef.get();
+ final AbstractActivity activity = activityRef.get();
if (activity != null && msg.getData() != null && msg.getData().getString(MESSAGE_TEXT) != null) {
activity.showToast(msg.getData().getString(MESSAGE_TEXT));
}
- dismissProgress();
- return;
- }
-
- protected final void showToast(final int resId) {
- AbstractActivity activity = activityRef.get();
- if (activity != null) {
- Resources res = activity.getResources();
- activity.showToast(res.getText(resId).toString());
- }
- }
-
- protected final void dismissProgress() {
- Progress progressDialog = progressDialogRef.get();
+ final Progress progressDialog = progressDialogRef.get();
if (progressDialog != null) {
progressDialog.dismiss();
}
}
- protected final void setProgressMessage(final String txt) {
- Progress progressDialog = progressDialogRef.get();
- if (progressDialog != null) {
- progressDialog.setMessage(txt);
- }
- }
-
- protected final void finishActivity() {
- AbstractActivity activity = activityRef.get();
- if (activity != null) {
- activity.finish();
- }
-
- }
-
}
diff --git a/main/src/cgeo/geocaching/utils/TranslationUtils.java b/main/src/cgeo/geocaching/utils/TranslationUtils.java
index 1224f7e..619db08 100644
--- a/main/src/cgeo/geocaching/utils/TranslationUtils.java
+++ b/main/src/cgeo/geocaching/utils/TranslationUtils.java
@@ -3,6 +3,8 @@ package cgeo.geocaching.utils;
import cgeo.geocaching.activity.AbstractActivity;
import cgeo.geocaching.network.Network;
+import org.apache.commons.lang3.StringUtils;
+
import android.content.Intent;
import android.net.Uri;
@@ -11,12 +13,12 @@ import android.net.Uri;
*/
public final class TranslationUtils {
- private static final String translationWebsite = "http://translate.google.com/";
- private static final String translationForceClassicMode = "?vi=c";
- private static final String translationAutoSelect = "#auto";
- private static final String translationFieldSeparator = "|";
+ private static final String TRANSLATION_WEBSITE = "http://translate.google.com/";
+ private static final String TRANSLATION_FORCE_CLASSIC_MODE = "?vi=c";
+ private static final String TRANSLATION_AUTO_SELECT = "#auto";
+ private static final String TRANSLATION_FIELD_SEPARATOR = "|";
- public static final int translationTextLengthToWarn = 500;
+ public static final int TRANSLATION_TEXT_LENGTH_WARN = 500;
private static final String TRANSLATION_APP = "com.google.android.apps.translate";
private TranslationUtils() {
@@ -24,8 +26,8 @@ public final class TranslationUtils {
}
/**
- * Build a URI for Google Translate
- *
+ * Build a URI for Google Translate.
+ *
* @param toLang
* The two-letter lowercase ISO language codes as defined by ISO 639-1
* @param text
@@ -36,13 +38,13 @@ public final class TranslationUtils {
String content = Network.encode(text);
// the app works better without the "+", the website works better with "+", therefore assume using the app if installed
if (ProcessUtils.isLaunchable(TRANSLATION_APP)) {
- content = content.replace("+", "%20");
+ content = StringUtils.replace(content, "+", "%20");
}
- return translationWebsite + translationForceClassicMode + translationAutoSelect + translationFieldSeparator + toLang + translationFieldSeparator + content;
+ return TRANSLATION_WEBSITE + TRANSLATION_FORCE_CLASSIC_MODE + TRANSLATION_AUTO_SELECT + TRANSLATION_FIELD_SEPARATOR + toLang + TRANSLATION_FIELD_SEPARATOR + content;
}
/**
- * Send Intent for Google Translate. Can be caught by Google Translate App or browser
+ * Send Intent for Google Translate. Can be caught by Google Translate App or browser.
*
* @param toLang
* The two-letter lowercase ISO language codes as defined by ISO 639-1
diff --git a/main/src/cgeo/geocaching/utils/UncertainProperty.java b/main/src/cgeo/geocaching/utils/UncertainProperty.java
index 5f86662..e8686e3 100644
--- a/main/src/cgeo/geocaching/utils/UncertainProperty.java
+++ b/main/src/cgeo/geocaching/utils/UncertainProperty.java
@@ -2,6 +2,11 @@ package cgeo.geocaching.utils;
import cgeo.geocaching.connector.gc.Tile;
+/**
+ * Property with certainty. When merging properties, the one with higher certainty wins.
+ *
+ * @param <T>
+ */
public class UncertainProperty<T> {
private final T value;
diff --git a/send2cgeo/firefox-addon/send2cgeo/data/LICENSE b/send2cgeo/firefox-addon/send2cgeo/data/LICENSE
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/send2cgeo/firefox-addon/send2cgeo/data/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/send2cgeo/firefox-addon/send2cgeo/data/NOTICE b/send2cgeo/firefox-addon/send2cgeo/data/NOTICE
new file mode 100644
index 0000000..d37863d
--- /dev/null
+++ b/send2cgeo/firefox-addon/send2cgeo/data/NOTICE
@@ -0,0 +1,10 @@
+ c:geo
+ Copyright 2011-2013 c:geo contributors
+
+ This product includes software developed by
+ the c:geo team and contributors. See main/res/values/strings_not_translatable.xml
+ for details.
+
+ Portions of this software were developed elsewhere. See the files in main/thirdparty
+ and the notices therein and the references in main/res/values/strings_not_translatable.xml
+ for details.
diff --git a/send2cgeo/firefox-addon/send2cgeo/data/send2cgeo.48.png b/send2cgeo/firefox-addon/send2cgeo/data/send2cgeo.48.png
new file mode 100644
index 0000000..585c6a5
--- /dev/null
+++ b/send2cgeo/firefox-addon/send2cgeo/data/send2cgeo.48.png
Binary files differ
diff --git a/send2cgeo/firefox-addon/send2cgeo/data/send2cgeo.64.png b/send2cgeo/firefox-addon/send2cgeo/data/send2cgeo.64.png
new file mode 100644
index 0000000..646e5c6
--- /dev/null
+++ b/send2cgeo/firefox-addon/send2cgeo/data/send2cgeo.64.png
Binary files differ
diff --git a/send2cgeo/firefox-addon/send2cgeo/data/send2cgeo.user.js b/send2cgeo/firefox-addon/send2cgeo/data/send2cgeo.user.js
new file mode 120000
index 0000000..1e1f91e
--- /dev/null
+++ b/send2cgeo/firefox-addon/send2cgeo/data/send2cgeo.user.js
@@ -0,0 +1 @@
+../../../send2cgeo.user.js \ No newline at end of file
diff --git a/send2cgeo/firefox-addon/send2cgeo/lib/main.js b/send2cgeo/firefox-addon/send2cgeo/lib/main.js
new file mode 100644
index 0000000..82eb508
--- /dev/null
+++ b/send2cgeo/firefox-addon/send2cgeo/lib/main.js
@@ -0,0 +1,8 @@
+var pageMod = require("sdk/page-mod");
+var data = require("sdk/self").data;
+
+pageMod.PageMod({
+ include: ["http://www.geocaching.com/seek/cache_details*", "http://www.geocaching.com/geocache/*", "http://www.geocaching.com/map/*"],
+ contentScriptWhen: "end",
+ contentScriptFile: data.url("send2cgeo.user.js")
+}); \ No newline at end of file
diff --git a/send2cgeo/firefox-addon/send2cgeo/package.json b/send2cgeo/firefox-addon/send2cgeo/package.json
new file mode 100644
index 0000000..ee7da8a
--- /dev/null
+++ b/send2cgeo/firefox-addon/send2cgeo/package.json
@@ -0,0 +1,17 @@
+{
+ "description": "This is a small wrapper around the send2cgeo Greasemonkey script.\n\nCredit goes to the developers of send2cgeo.user.js",
+ "contributors": [],
+ "dependencies": ["api-utils", "addon-kit"],
+ "fullName": "send2cgeo",
+ "id": "jid0-XabGAJzXPgqYfMo6BeiN59yek1k",
+ "lib": "lib",
+ "license": "Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)",
+ "icon": "data/send2cgeo.48.png",
+ "icon64": "data/send2cgeo.64.png",
+ "author": "JavaJens",
+ "url": "",
+ "name": "send2cgeo",
+ "version": "0.1a",
+ "main": "main",
+ "homepage": "http://send2.cgeo.org/"
+}
diff --git a/tests/src/cgeo/CGeoTestCase.java b/tests/src/cgeo/CGeoTestCase.java
index 6a63cbc..7dd5956 100644
--- a/tests/src/cgeo/CGeoTestCase.java
+++ b/tests/src/cgeo/CGeoTestCase.java
@@ -1,15 +1,24 @@
package cgeo;
-import cgeo.geocaching.cgData;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.enumerations.LoadFlags;
+import cgeo.geocaching.enumerations.LoadFlags.RemoveFlag;
+import cgeo.geocaching.settings.Settings;
+import cgeo.geocaching.settings.TestSettings;
import android.test.ApplicationTestCase;
-public abstract class CGeoTestCase extends ApplicationTestCase<cgeoapplication> {
+import java.util.EnumSet;
+
+public abstract class CGeoTestCase extends ApplicationTestCase<CgeoApplication> {
+
+ private boolean oldStoreMapsFlag;
+ private boolean oldStoreWpMapsFlag;
+ private boolean oldMapStoreFlagsRecorded = false;
public CGeoTestCase() {
- super(cgeoapplication.class);
+ super(CgeoApplication.class);
}
@Override
@@ -20,7 +29,58 @@ public abstract class CGeoTestCase extends ApplicationTestCase<cgeoapplication>
/** Remove cache from DB and cache to ensure that the cache is not loaded from the database */
protected static void deleteCacheFromDB(String geocode) {
- cgData.removeCache(geocode, LoadFlags.REMOVE_ALL);
+ DataStore.removeCache(geocode, LoadFlags.REMOVE_ALL);
+ }
+
+ /**
+ * remove cache from database and file system
+ *
+ * @param geocode
+ */
+ protected static void removeCacheCompletely(final String geocode) {
+ final EnumSet<RemoveFlag> flags = EnumSet.copyOf(LoadFlags.REMOVE_ALL);
+ flags.add(RemoveFlag.REMOVE_OWN_WAYPOINTS_ONLY_FOR_TESTING);
+ DataStore.removeCache(geocode, flags);
+ }
+
+ /**
+ * must be called once before setting the flags
+ * can be called again after restoring the flags
+ */
+ protected void recordMapStoreFlags() {
+ if (oldMapStoreFlagsRecorded) {
+ throw new IllegalStateException("MapStoreFlags already recorded!");
+ }
+ oldStoreMapsFlag = Settings.isStoreOfflineMaps();
+ oldStoreWpMapsFlag = Settings.isStoreOfflineWpMaps();
+ oldMapStoreFlagsRecorded = true;
}
+ /**
+ * can be called after recordMapStoreFlags,
+ * to set the flags for map storing as necessary
+ * @param storeCacheMap
+ * @param storeWpMaps
+ */
+ protected void setMapStoreFlags(boolean storeCacheMap, boolean storeWpMaps) {
+ if (!oldMapStoreFlagsRecorded) {
+ throw new IllegalStateException("Previous MapStoreFlags havn't been recorded! Setting not allowed");
+ }
+
+ TestSettings.setStoreOfflineMaps(storeCacheMap);
+ TestSettings.setStoreOfflineWpMaps(storeWpMaps);
+ }
+
+ /**
+ * has to be called after completion of the test (preferably in the finally part of a try statement)
+ */
+ protected void restoreMapStoreFlags() {
+ if (!oldMapStoreFlagsRecorded) {
+ throw new IllegalStateException("Previous MapStoreFlags havn't been recorded. Restore not possible");
+ }
+
+ TestSettings.setStoreOfflineMaps(oldStoreMapsFlag);
+ TestSettings.setStoreOfflineWpMaps(oldStoreWpMapsFlag);
+ oldMapStoreFlagsRecorded = false;
+ }
}
diff --git a/tests/src/cgeo/geocaching/cgDataTest.java b/tests/src/cgeo/geocaching/DataStoreTest.java
index cacf061..7dc3016 100644
--- a/tests/src/cgeo/geocaching/cgDataTest.java
+++ b/tests/src/cgeo/geocaching/DataStoreTest.java
@@ -8,6 +8,7 @@ import cgeo.geocaching.enumerations.LoadFlags;
import cgeo.geocaching.enumerations.LoadFlags.SaveFlag;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Viewport;
+import cgeo.geocaching.list.StoredList;
import org.apache.commons.lang3.StringUtils;
@@ -18,7 +19,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
-public class cgDataTest extends CGeoTestCase {
+public class DataStoreTest extends CGeoTestCase {
public static void testStoredLists() {
@@ -35,11 +36,11 @@ public class cgDataTest extends CGeoTestCase {
try {
// create lists
- listId1 = cgData.createList("cgData Test");
+ listId1 = DataStore.createList("DataStore Test");
assertTrue(listId1 > StoredList.STANDARD_LIST_ID);
- listId2 = cgData.createList("cgDataTest");
+ listId2 = DataStore.createList("DataStoreTest");
assertTrue(listId2 > StoredList.STANDARD_LIST_ID);
- assertTrue(cgData.getLists().size() >= 2);
+ assertTrue(DataStore.getLists().size() >= 2);
cache1.setDetailed(true);
cache1.setListId(listId1);
@@ -47,33 +48,33 @@ public class cgDataTest extends CGeoTestCase {
cache2.setListId(listId1);
// save caches to DB (cache1=listId1, cache2=listId1)
- cgData.saveCache(cache1, LoadFlags.SAVE_ALL);
- cgData.saveCache(cache2, LoadFlags.SAVE_ALL);
- assertTrue(cgData.getAllCachesCount() >= 2);
+ DataStore.saveCache(cache1, LoadFlags.SAVE_ALL);
+ DataStore.saveCache(cache2, LoadFlags.SAVE_ALL);
+ assertTrue(DataStore.getAllCachesCount() >= 2);
// rename list (cache1=listId1, cache2=listId1)
- assertEquals(1, cgData.renameList(listId1, "cgData Test (renamed)"));
+ assertEquals(1, DataStore.renameList(listId1, "DataStore Test (renamed)"));
// get list
- final StoredList list1 = cgData.getList(listId1);
- assertEquals("cgData Test (renamed)", list1.title);
+ final StoredList list1 = DataStore.getList(listId1);
+ assertEquals("DataStore Test (renamed)", list1.title);
// move to list (cache1=listId2, cache2=listId2)
- cgData.moveToList(Collections.singletonList(cache1), listId2);
- assertEquals(1, cgData.getAllStoredCachesCount(CacheType.ALL, listId2));
+ DataStore.moveToList(Collections.singletonList(cache1), listId2);
+ assertEquals(1, DataStore.getAllStoredCachesCount(CacheType.ALL, listId2));
// remove list (cache1=listId2, cache2=listId2)
- assertTrue(cgData.removeList(listId1));
+ assertTrue(DataStore.removeList(listId1));
// mark dropped (cache1=1, cache2=0)
- cgData.markDropped(Collections.singletonList(cache2));
+ DataStore.markDropped(Collections.singletonList(cache2));
// mark stored (cache1=1, cache2=listId2)
- cgData.moveToList(Collections.singletonList(cache2), listId2);
- assertEquals(2, cgData.getAllStoredCachesCount(CacheType.ALL, listId2));
+ DataStore.moveToList(Collections.singletonList(cache2), listId2);
+ assertEquals(2, DataStore.getAllStoredCachesCount(CacheType.ALL, listId2));
// drop stored (cache1=0, cache2=0)
- cgData.removeList(listId2);
+ DataStore.removeList(listId2);
} finally {
@@ -81,25 +82,25 @@ public class cgDataTest extends CGeoTestCase {
final Set<String> geocodes = new HashSet<String>();
geocodes.add(cache1.getGeocode());
geocodes.add(cache2.getGeocode());
- cgData.removeCaches(geocodes, LoadFlags.REMOVE_ALL);
+ DataStore.removeCaches(geocodes, LoadFlags.REMOVE_ALL);
// remove list
- cgData.removeList(listId1);
- cgData.removeList(listId2);
+ DataStore.removeList(listId1);
+ DataStore.removeList(listId2);
}
}
// Check that queries don't throw an exception (see issue #1429).
public static void testLoadWaypoints() {
final Viewport viewport = new Viewport(new Geopoint(-1, -2), new Geopoint(3, 4));
- cgData.loadWaypoints(viewport, false, false, CacheType.ALL);
- cgData.loadWaypoints(viewport, false, true, CacheType.ALL);
- cgData.loadWaypoints(viewport, true, false, CacheType.ALL);
- cgData.loadWaypoints(viewport, true, true, CacheType.ALL);
- cgData.loadWaypoints(viewport, false, false, CacheType.TRADITIONAL);
- cgData.loadWaypoints(viewport, false, true, CacheType.TRADITIONAL);
- cgData.loadWaypoints(viewport, true, false, CacheType.TRADITIONAL);
- cgData.loadWaypoints(viewport, true, true, CacheType.TRADITIONAL);
+ DataStore.loadWaypoints(viewport, false, false, CacheType.ALL);
+ DataStore.loadWaypoints(viewport, false, true, CacheType.ALL);
+ DataStore.loadWaypoints(viewport, true, false, CacheType.ALL);
+ DataStore.loadWaypoints(viewport, true, true, CacheType.ALL);
+ DataStore.loadWaypoints(viewport, false, false, CacheType.TRADITIONAL);
+ DataStore.loadWaypoints(viewport, false, true, CacheType.TRADITIONAL);
+ DataStore.loadWaypoints(viewport, true, false, CacheType.TRADITIONAL);
+ DataStore.loadWaypoints(viewport, true, true, CacheType.TRADITIONAL);
}
// Check that saving a cache and trackable without logs works (see #2199)
@@ -118,12 +119,12 @@ public class cgDataTest extends CGeoTestCase {
cache.setInventory(inventory);
try {
- cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
- final Geocache loadedCache = cgData.loadCache(GEOCODE_CACHE, LoadFlags.LOAD_ALL_DB_ONLY);
+ DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
+ final Geocache loadedCache = DataStore.loadCache(GEOCODE_CACHE, LoadFlags.LOAD_ALL_DB_ONLY);
assertNotNull("Cache was not saved!", loadedCache);
assertEquals(1, loadedCache.getInventory().size());
} finally {
- cgData.removeCache(GEOCODE_CACHE, LoadFlags.REMOVE_ALL);
+ DataStore.removeCache(GEOCODE_CACHE, LoadFlags.REMOVE_ALL);
}
}
@@ -141,25 +142,25 @@ public class cgDataTest extends CGeoTestCase {
cache.setDetailed(true);
try {
- final Geocache oldCache = cgData.loadCache(upperCase, LoadFlags.LOAD_ALL_DB_ONLY);
+ final Geocache oldCache = DataStore.loadCache(upperCase, LoadFlags.LOAD_ALL_DB_ONLY);
assertNull("Database contained old cache!", oldCache);
- cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
- final Geocache cacheWithOriginalCode = cgData.loadCache(upperCase, LoadFlags.LOAD_ALL_DB_ONLY);
+ DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB));
+ final Geocache cacheWithOriginalCode = DataStore.loadCache(upperCase, LoadFlags.LOAD_ALL_DB_ONLY);
assertNotNull("Cache was not saved correctly!", cacheWithOriginalCode);
- final Geocache cacheLowerCase = cgData.loadCache(lowerCase, LoadFlags.LOAD_ALL_DB_ONLY);
+ final Geocache cacheLowerCase = DataStore.loadCache(lowerCase, LoadFlags.LOAD_ALL_DB_ONLY);
assertNotNull("Could not find cache by case insensitive geocode", cacheLowerCase);
} finally {
- cgData.removeCache(upperCase, LoadFlags.REMOVE_ALL);
+ DataStore.removeCache(upperCase, LoadFlags.REMOVE_ALL);
}
}
// Loading logs for an empty geocode should return an empty list, not null!
public static void testLoadLogsFromEmptyGeocode() {
- final List<LogEntry> logs = cgData.loadLogs("");
+ final List<LogEntry> logs = DataStore.loadLogs("");
assertNotNull("Logs must not be null", logs);
assertEquals("Logs from empty geocode must be empty", 0, logs.size());
@@ -169,7 +170,7 @@ public class cgDataTest extends CGeoTestCase {
int sumCaches = 0;
int allCaches = 0;
for (CacheType cacheType : CacheType.values()) {
- SearchResult historyOfType = cgData.getHistoryOfCaches(false, cacheType);
+ SearchResult historyOfType = DataStore.getHistoryOfCaches(false, cacheType);
assertNotNull(historyOfType);
if (cacheType != CacheType.ALL) {
sumCaches += historyOfType.getCount();
@@ -180,7 +181,7 @@ public class cgDataTest extends CGeoTestCase {
// check that sum of types equals 'all'
assertEquals(sumCaches, allCaches);
// check that two different routines behave the same
- assertEquals(cgData.getAllHistoryCachesCount(), sumCaches);
+ assertEquals(DataStore.getAllHistoryCachesCount(), sumCaches);
}
public static void testCachedMissing() {
@@ -208,15 +209,15 @@ public class cgDataTest extends CGeoTestCase {
inTileHighZoom.setCoords(new Geopoint("N49 44.001 E8 37.001"), Tile.ZOOMLEVEL_MIN_PERSONALIZED + 1);
// put in cache
- cgData.saveCache(main, EnumSet.of(SaveFlag.SAVE_CACHE));
- cgData.saveCache(inTileLowZoom, EnumSet.of(SaveFlag.SAVE_CACHE));
- cgData.saveCache(inTileHighZoom, EnumSet.of(SaveFlag.SAVE_CACHE));
- cgData.saveCache(outTile, EnumSet.of(SaveFlag.SAVE_CACHE));
- cgData.saveCache(otherConnector, EnumSet.of(SaveFlag.SAVE_CACHE));
+ DataStore.saveCache(main, EnumSet.of(SaveFlag.SAVE_CACHE));
+ DataStore.saveCache(inTileLowZoom, EnumSet.of(SaveFlag.SAVE_CACHE));
+ DataStore.saveCache(inTileHighZoom, EnumSet.of(SaveFlag.SAVE_CACHE));
+ DataStore.saveCache(outTile, EnumSet.of(SaveFlag.SAVE_CACHE));
+ DataStore.saveCache(otherConnector, EnumSet.of(SaveFlag.SAVE_CACHE));
final SearchResult search = new SearchResult(main);
- Set<String> filteredGeoCodes = cgData.getCachedMissingFromSearch(search, tiles, GCConnector.getInstance(), Tile.ZOOMLEVEL_MIN_PERSONALIZED - 1);
+ Set<String> filteredGeoCodes = DataStore.getCachedMissingFromSearch(search, tiles, GCConnector.getInstance(), Tile.ZOOMLEVEL_MIN_PERSONALIZED - 1);
assertTrue(filteredGeoCodes.contains(inTileLowZoom.getGeocode()));
assertFalse(filteredGeoCodes.contains(inTileHighZoom.getGeocode()));
diff --git a/tests/src/cgeo/geocaching/GeocacheTest.java b/tests/src/cgeo/geocaching/GeocacheTest.java
index 4c09594..2f5281c 100644
--- a/tests/src/cgeo/geocaching/GeocacheTest.java
+++ b/tests/src/cgeo/geocaching/GeocacheTest.java
@@ -1,16 +1,15 @@
package cgeo.geocaching;
+import cgeo.CGeoTestCase;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.geopoint.Geopoint;
-
-import android.os.Handler;
-import android.test.AndroidTestCase;
+import cgeo.geocaching.list.StoredList;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
-public class GeocacheTest extends AndroidTestCase {
+public class GeocacheTest extends CGeoTestCase {
final static private class MockedEventCache extends Geocache {
public MockedEventCache(final Date date) {
@@ -52,31 +51,41 @@ public class GeocacheTest extends AndroidTestCase {
assertEquals("GC1234", cache.getGeocode());
}
- public static void testUpdateWaypointFromNote() {
+ public void testUpdateWaypointFromNote() {
assertWaypointsParsed("Test N51 13.888 E007 03.444", 1);
}
- public static void testUpdateWaypointsFromNote() {
+ public void testUpdateWaypointsFromNote() {
assertWaypointsParsed("Test N51 13.888 E007 03.444 Test N51 13.233 E007 03.444 Test N51 09.123 E007 03.444", 3);
}
- private static void assertWaypointsParsed(String note, int expectedWaypoints) {
- Geocache cache = new Geocache();
- cache.setGeocode("Test" + System.nanoTime());
- cache.setWaypoints(new ArrayList<Waypoint>(), false);
- for (int i = 0; i < 2; i++) {
- cache.setPersonalNote(note);
- cache.parseWaypointsFromNote();
- final List<Waypoint> waypoints = cache.getWaypoints();
- assertNotNull(waypoints);
- assertEquals(expectedWaypoints, waypoints.size());
- final Waypoint waypoint = waypoints.get(0);
- assertEquals(new Geopoint("N51 13.888 E007 03.444"), waypoint.getCoords());
- // assertEquals("Test", waypoint.getNote());
- assertEquals(cgeoapplication.getInstance().getString(R.string.cache_personal_note) + " 1", waypoint.getName());
- cache.store(StoredList.TEMPORARY_LIST_ID, null);
+ private void assertWaypointsParsed(String note, int expectedWaypoints) {
+
+ recordMapStoreFlags();
+
+ try {
+ setMapStoreFlags(false, false);
+
+ Geocache cache = new Geocache();
+ final String geocode = "Test" + System.nanoTime();
+ cache.setGeocode(geocode);
+ cache.setWaypoints(new ArrayList<Waypoint>(), false);
+ for (int i = 0; i < 2; i++) {
+ cache.setPersonalNote(note);
+ cache.parseWaypointsFromNote();
+ final List<Waypoint> waypoints = cache.getWaypoints();
+ assertNotNull(waypoints);
+ assertEquals(expectedWaypoints, waypoints.size());
+ final Waypoint waypoint = waypoints.get(0);
+ assertEquals(new Geopoint("N51 13.888 E007 03.444"), waypoint.getCoords());
+ // assertEquals("Test", waypoint.getNote());
+ assertEquals(CgeoApplication.getInstance().getString(R.string.cache_personal_note) + " 1", waypoint.getName());
+ cache.store(StoredList.TEMPORARY_LIST_ID, null);
+ }
+ removeCacheCompletely(geocode);
+ } finally {
+ restoreMapStoreFlags();
}
- cache.drop(new Handler());
}
public static void testMergeDownloadedStored() {
diff --git a/tests/src/cgeo/geocaching/PersonalNoteTest.java b/tests/src/cgeo/geocaching/PersonalNoteTest.java
index c8aa8ba..c31662f 100644
--- a/tests/src/cgeo/geocaching/PersonalNoteTest.java
+++ b/tests/src/cgeo/geocaching/PersonalNoteTest.java
@@ -1,5 +1,7 @@
package cgeo.geocaching;
+import cgeo.geocaching.list.StoredList;
+
import junit.framework.TestCase;
public class PersonalNoteTest extends TestCase {
diff --git a/tests/src/cgeo/geocaching/StoredListTest.java b/tests/src/cgeo/geocaching/StoredListTest.java
deleted file mode 100644
index dd8b6c7..0000000
--- a/tests/src/cgeo/geocaching/StoredListTest.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package cgeo.geocaching;
-
-import junit.framework.TestCase;
-
-public class StoredListTest extends TestCase {
-
- public static void testStandardListExists() {
- final StoredList list = cgData.getList(StoredList.STANDARD_LIST_ID);
- assertNotNull(list);
- }
-
- public static void testEquals() {
- final StoredList list1 = cgData.getList(StoredList.STANDARD_LIST_ID);
- final StoredList list2 = cgData.getList(StoredList.STANDARD_LIST_ID);
- assertEquals(list1, list2);
- }
-
-}
diff --git a/tests/src/cgeo/geocaching/cgeoApplicationTest.java b/tests/src/cgeo/geocaching/cgeoApplicationTest.java
index 83bf28d..69a1b3f 100644
--- a/tests/src/cgeo/geocaching/cgeoApplicationTest.java
+++ b/tests/src/cgeo/geocaching/cgeoApplicationTest.java
@@ -12,6 +12,7 @@ import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Viewport;
+import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.loaders.RecaptchaReceiver;
import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.settings.TestSettings;
@@ -111,7 +112,7 @@ public class cgeoApplicationTest extends CGeoTestCase {
if (Settings.isPremiumMember() || search.getError() == null) {
assertEquals(1, search.getGeocodes().size());
assertTrue(search.getGeocodes().contains(geocode));
- return cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
+ return DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
}
assertEquals(0, search.getGeocodes().size());
return null;
@@ -295,7 +296,7 @@ public class cgeoApplicationTest extends CGeoTestCase {
SearchResult search = ConnectorFactory.searchByViewport(viewport, tokens);
assertNotNull(search);
assertTrue(search.getGeocodes().contains(mockedCache.getGeocode()));
- Geocache parsedCache = cgData.loadCache(mockedCache.getGeocode(), LoadFlags.LOAD_CACHE_OR_DB);
+ Geocache parsedCache = DataStore.loadCache(mockedCache.getGeocode(), LoadFlags.LOAD_CACHE_OR_DB);
assertEquals(Settings.isPremiumMember(), mockedCache.getCoords().equals(parsedCache.getCoords()));
assertEquals(Settings.isPremiumMember(), parsedCache.isReliableLatLon());
@@ -307,7 +308,7 @@ public class cgeoApplicationTest extends CGeoTestCase {
search = ConnectorFactory.searchByViewport(viewport, tokens);
assertNotNull(search);
assertTrue(search.getGeocodes().contains(mockedCache.getGeocode()));
- parsedCache = cgData.loadCache(mockedCache.getGeocode(), LoadFlags.LOAD_CACHE_OR_DB);
+ parsedCache = DataStore.loadCache(mockedCache.getGeocode(), LoadFlags.LOAD_CACHE_OR_DB);
assertEquals(Settings.isPremiumMember(), mockedCache.getCoords().equals(parsedCache.getCoords()));
assertEquals(Settings.isPremiumMember(), parsedCache.isReliableLatLon());
@@ -350,7 +351,7 @@ public class cgeoApplicationTest extends CGeoTestCase {
assertNotNull(search);
assertTrue(search.getGeocodes().contains(cache.getGeocode()));
// coords differ
- final Geocache cacheFromViewport = cgData.loadCache(cache.getGeocode(), LoadFlags.LOAD_CACHE_OR_DB);
+ final Geocache cacheFromViewport = DataStore.loadCache(cache.getGeocode(), LoadFlags.LOAD_CACHE_OR_DB);
Log.d("cgeoApplicationTest.testSearchByViewportNotLoggedIn: Coords expected = " + cache.getCoords());
Log.d("cgeoApplicationTest.testSearchByViewportNotLoggedIn: Coords actual = " + cacheFromViewport.getCoords());
assertFalse(cache.getCoords().isEqualTo(cacheFromViewport.getCoords(), 1e-3));
diff --git a/tests/src/cgeo/geocaching/connector/gc/GCParserTest.java b/tests/src/cgeo/geocaching/connector/gc/GCParserTest.java
index de52171..dacbba6 100644
--- a/tests/src/cgeo/geocaching/connector/gc/GCParserTest.java
+++ b/tests/src/cgeo/geocaching/connector/gc/GCParserTest.java
@@ -1,11 +1,11 @@
package cgeo.geocaching.connector.gc;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.Image;
import cgeo.geocaching.SearchResult;
import cgeo.geocaching.Trackable;
import cgeo.geocaching.Waypoint;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.enumerations.LoadFlags;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.enumerations.WaypointType;
@@ -220,7 +220,7 @@ public class GCParserTest extends AbstractResourceInstrumentationTestCase {
final Trackable trackable = GCParser.parseTrackable(page, "TB123E");
assertNotNull(trackable);
assertEquals("TB123E", trackable.getGeocode());
- final String expectedDetails = cgeoapplication.getInstance().getString(cgeo.geocaching.R.string.trackable_not_activated);
+ final String expectedDetails = CgeoApplication.getInstance().getString(cgeo.geocaching.R.string.trackable_not_activated);
assertEquals(expectedDetails, trackable.getDetails());
}
}
diff --git a/tests/src/cgeo/geocaching/connector/gc/WaypointsTest.java b/tests/src/cgeo/geocaching/connector/gc/WaypointsTest.java
index d186526..19acd7c 100644
--- a/tests/src/cgeo/geocaching/connector/gc/WaypointsTest.java
+++ b/tests/src/cgeo/geocaching/connector/gc/WaypointsTest.java
@@ -1,9 +1,9 @@
package cgeo.geocaching.connector.gc;
import cgeo.CGeoTestCase;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.cgData;
import cgeo.geocaching.enumerations.LoadFlags;
import cgeo.geocaching.utils.CancellableHandler;
@@ -27,7 +27,7 @@ public class WaypointsTest extends CGeoTestCase {
public static void testDownloadWaypoints() {
// Check that repeated loads of "GC33HXE" hold the right number of waypoints (issue #2430).
final String GEOCODE = "GC33HXE";
- cgData.removeCache(GEOCODE, LoadFlags.REMOVE_ALL);
+ DataStore.removeCache(GEOCODE, LoadFlags.REMOVE_ALL);
assertEquals(9, downloadCache(GEOCODE).getWaypoints().size());
assertEquals(9, downloadCache(GEOCODE).getWaypoints().size());
}
diff --git a/tests/src/cgeo/geocaching/connector/oc/OCConnectorTest.java b/tests/src/cgeo/geocaching/connector/oc/OCConnectorTest.java
new file mode 100644
index 0000000..bbbd710
--- /dev/null
+++ b/tests/src/cgeo/geocaching/connector/oc/OCConnectorTest.java
@@ -0,0 +1,25 @@
+package cgeo.geocaching.connector.oc;
+
+import cgeo.geocaching.connector.ConnectorFactory;
+import cgeo.geocaching.connector.IConnector;
+
+import junit.framework.TestCase;
+
+public class OCConnectorTest extends TestCase {
+
+ /**
+ * OC.DE used up the 4 digit/character name space and switched over to 5 recently
+ */
+ public static void testCanHandleNew5DigitCodes() {
+ final IConnector ocConnector = getOcDeConnector();
+ assertTrue(ocConnector.canHandle("OCFFFF"));
+ assertTrue(ocConnector.canHandle("OC10000"));
+ }
+
+ private static IConnector getOcDeConnector() {
+ final IConnector ocConnector = ConnectorFactory.getConnector("OCXXX");
+ assertTrue(ocConnector.getHost().contains(".de"));
+ return ocConnector;
+ }
+
+}
diff --git a/tests/src/cgeo/geocaching/connector/oc/OkapiClientTest.java b/tests/src/cgeo/geocaching/connector/oc/OkapiClientTest.java
index 410252f..eb797c2 100644
--- a/tests/src/cgeo/geocaching/connector/oc/OkapiClientTest.java
+++ b/tests/src/cgeo/geocaching/connector/oc/OkapiClientTest.java
@@ -2,7 +2,7 @@ package cgeo.geocaching.connector.oc;
import cgeo.CGeoTestCase;
import cgeo.geocaching.Geocache;
-import cgeo.geocaching.cgData;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.enumerations.LoadFlags;
public class OkapiClientTest extends CGeoTestCase {
@@ -10,12 +10,12 @@ public class OkapiClientTest extends CGeoTestCase {
public static void testGetOCCache() {
final String geoCode = "OU0331";
Geocache cache = OkapiClient.getCache(geoCode);
- assertNotNull(cache);
- assertEquals(geoCode, cache.getGeocode());
+ assertNotNull("Did not get cache from OKAPI", cache);
+ assertEquals("Unexpected geo code", geoCode, cache.getGeocode());
assertEquals("Oshkosh Municipal Tank", cache.getName());
assertTrue(cache.isDetailed());
// cache should be stored to DB (to listID 0) when loaded above
- cache = cgData.loadCache(geoCode, LoadFlags.LOAD_ALL_DB_ONLY);
+ cache = DataStore.loadCache(geoCode, LoadFlags.LOAD_ALL_DB_ONLY);
assertNotNull(cache);
assertEquals(geoCode, cache.getGeocode());
assertEquals("Oshkosh Municipal Tank", cache.getName());
diff --git a/tests/src/cgeo/geocaching/connector/trackable/GeokretyParserTest.java b/tests/src/cgeo/geocaching/connector/trackable/GeokretyParserTest.java
index 3915993..8f21342 100644
--- a/tests/src/cgeo/geocaching/connector/trackable/GeokretyParserTest.java
+++ b/tests/src/cgeo/geocaching/connector/trackable/GeokretyParserTest.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.connector.trackable;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Trackable;
-import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.test.AbstractResourceInstrumentationTestCase;
import cgeo.geocaching.test.R;
@@ -13,7 +13,7 @@ public class GeokretyParserTest extends AbstractResourceInstrumentationTestCase
assertEquals("WeltenbummlerKret", trackable.getName());
assertEquals("GK008D", trackable.getGeocode());
assertEquals(2235f, trackable.getDistance());
- assertEquals(cgeoapplication.getInstance().getString(cgeo.geocaching.R.string.geokret_type_traditional), trackable.getType());
+ assertEquals(CgeoApplication.getInstance().getString(cgeo.geocaching.R.string.geokret_type_traditional), trackable.getType());
}
}
diff --git a/tests/src/cgeo/geocaching/export/ExportTest.java b/tests/src/cgeo/geocaching/export/ExportTest.java
index 3e5505a..6d39f8d 100644
--- a/tests/src/cgeo/geocaching/export/ExportTest.java
+++ b/tests/src/cgeo/geocaching/export/ExportTest.java
@@ -1,9 +1,9 @@
package cgeo.geocaching.export;
import cgeo.CGeoTestCase;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.LogEntry;
-import cgeo.geocaching.cgData;
import cgeo.geocaching.enumerations.LoadFlags;
import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.geopoint.Geopoint;
@@ -30,7 +30,7 @@ public class ExportTest extends CGeoTestCase {
cache.setCoords(new Geopoint("N 49 44.000 E 8 37.000"));
final LogEntry log = new LogEntry(1353244820000L, LogType.FOUND_IT, "Smile: \ud83d\ude0a");
cache.getLogs().add(log);
- cgData.saveCache(cache, LoadFlags.SAVE_ALL);
+ DataStore.saveCache(cache, LoadFlags.SAVE_ALL);
ArrayList<Geocache> exportList = new ArrayList<Geocache>();
exportList.add(cache);
GpxExportTester gpxExport = new GpxExportTester();
@@ -38,7 +38,7 @@ public class ExportTest extends CGeoTestCase {
try {
result = gpxExport.testExportSync(exportList);
} finally {
- cgData.removeCache(cache.getGeocode(), LoadFlags.REMOVE_ALL);
+ DataStore.removeCache(cache.getGeocode(), LoadFlags.REMOVE_ALL);
}
assertNotNull(result);
diff --git a/tests/src/cgeo/geocaching/export/GpxSerializerTest.java b/tests/src/cgeo/geocaching/export/GpxSerializerTest.java
index 0080b76..5c83b35 100644
--- a/tests/src/cgeo/geocaching/export/GpxSerializerTest.java
+++ b/tests/src/cgeo/geocaching/export/GpxSerializerTest.java
@@ -1,12 +1,19 @@
package cgeo.geocaching.export;
import cgeo.geocaching.Geocache;
+import cgeo.geocaching.files.GPX10Parser;
import cgeo.geocaching.files.ParserException;
+import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.test.AbstractResourceInstrumentationTestCase;
import cgeo.geocaching.test.R;
+import org.apache.commons.lang3.CharEncoding;
+
+import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.io.StringWriter;
+import java.util.Collection;
import java.util.Collections;
import java.util.concurrent.atomic.AtomicReference;
@@ -34,4 +41,42 @@ public class GpxSerializerTest extends AbstractResourceInstrumentationTestCase {
});
assertEquals("Progress listener not called", 1, importedCount.get().intValue());
}
+
+ /**
+ * This test verifies that a loop of import, export, import leads to the same cache information.
+ *
+ * @throws IOException
+ * @throws ParserException
+ */
+ public void testStableExportImportExport() throws IOException, ParserException {
+ final String geocode = "GC1BKP3";
+ final int cacheResource = R.raw.gc1bkp3_gpx101;
+ final Geocache cache = loadCacheFromResource(cacheResource);
+ assertNotNull(cache);
+
+ final String gpxFirst = getGPXFromCache(geocode);
+
+ assertTrue(gpxFirst.length() > 0);
+
+ final GPX10Parser parser = new GPX10Parser(StoredList.TEMPORARY_LIST_ID);
+
+ final InputStream stream = new ByteArrayInputStream(gpxFirst.getBytes(CharEncoding.UTF_8));
+ Collection<Geocache> caches = parser.parse(stream, null);
+ assertNotNull(caches);
+ assertEquals(1, caches.size());
+
+ final String gpxSecond = getGPXFromCache(geocode);
+ assertEquals(replaceLogIds(gpxFirst), replaceLogIds(gpxSecond));
+ }
+
+ private static String replaceLogIds(String gpx) {
+ return gpx.replaceAll("log id=\"\\d*\"", "");
+ }
+
+ private static String getGPXFromCache(String geocode) throws IOException {
+ final StringWriter writer = new StringWriter();
+ new GpxSerializer().writeGPX(Collections.singletonList(geocode), writer, null);
+ return writer.toString();
+ }
+
}
diff --git a/tests/src/cgeo/geocaching/files/GPXImporterTest.java b/tests/src/cgeo/geocaching/files/GPXImporterTest.java
index 03f917c..8f5d821 100644
--- a/tests/src/cgeo/geocaching/files/GPXImporterTest.java
+++ b/tests/src/cgeo/geocaching/files/GPXImporterTest.java
@@ -1,8 +1,8 @@
package cgeo.geocaching.files;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.cgData;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.LoadFlags;
import cgeo.geocaching.settings.Settings;
@@ -74,7 +74,7 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase {
assertEquals(GPXImporter.IMPORT_STEP_FINISHED, iMsg.next().what);
final SearchResult search = (SearchResult) importStepHandler.messages.get(3).obj;
assertEquals(Collections.singletonList(geocode), new ArrayList<String>(search.getGeocodes()));
- final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
+ final Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
assertCacheProperties(cache);
assertTrue(cache.getWaypoints().isEmpty());
@@ -101,7 +101,7 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase {
assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_READ_WPT_FILE, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED);
final SearchResult search = (SearchResult) importStepHandler.messages.get(4).obj;
assertEquals(Collections.singletonList("GC31J2H"), new ArrayList<String>(search.getGeocodes()));
- final Geocache cache = cgData.loadCache("GC31J2H", LoadFlags.LOAD_CACHE_OR_DB);
+ final Geocache cache = DataStore.loadCache("GC31J2H", LoadFlags.LOAD_CACHE_OR_DB);
assertCacheProperties(cache);
assertEquals(2, cache.getWaypoints().size());
}
@@ -114,7 +114,7 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase {
runImportThread(importThread);
assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED);
- final Geocache cache = cgData.loadCache("AID1", LoadFlags.LOAD_CACHE_OR_DB);
+ final Geocache cache = DataStore.loadCache("AID1", LoadFlags.LOAD_CACHE_OR_DB);
assertCacheProperties(cache);
assertEquals("First Aid Station #1", cache.getName());
}
@@ -136,7 +136,7 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase {
assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED);
final SearchResult search = (SearchResult) importStepHandler.messages.get(3).obj;
assertEquals(Collections.singletonList("OC5952"), new ArrayList<String>(search.getGeocodes()));
- final Geocache cache = cgData.loadCache("OC5952", LoadFlags.LOAD_CACHE_OR_DB);
+ final Geocache cache = DataStore.loadCache("OC5952", LoadFlags.LOAD_CACHE_OR_DB);
assertCacheProperties(cache);
}
@@ -178,7 +178,7 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase {
assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED);
final SearchResult search = (SearchResult) importStepHandler.messages.get(3).obj;
assertEquals(Collections.singletonList(geocode), new ArrayList<String>(search.getGeocodes()));
- final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
+ final Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
assertCacheProperties(cache);
assertTrue(cache.getWaypoints().isEmpty());
@@ -196,7 +196,7 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase {
assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_READ_WPT_FILE, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED);
final SearchResult search = (SearchResult) importStepHandler.messages.get(4).obj;
assertEquals(Collections.singletonList(geocode), new ArrayList<String>(search.getGeocodes()));
- final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
+ final Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
assertCacheProperties(cache);
assertEquals(1, cache.getWaypoints().size()); // this is the original pocket query result without test waypoint
}
@@ -222,7 +222,7 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase {
assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_READ_WPT_FILE, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED);
final SearchResult search = (SearchResult) importStepHandler.messages.get(4).obj;
assertEquals(Collections.singletonList(geocode), new ArrayList<String>(search.getGeocodes()));
- final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
+ final Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
assertCacheProperties(cache);
assertEquals(1, cache.getWaypoints().size()); // this is the original pocket query result without test waypoint
}
@@ -267,8 +267,8 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase {
tempDir.mkdir();
assertTrue("Could not create directory " + tempDir.getPath(), tempDir.exists());
// workaround to get storage initialized
- cgData.getAllHistoryCachesCount();
- listId = cgData.createList("cgeogpxesTest");
+ DataStore.getAllHistoryCachesCount();
+ listId = DataStore.createList("cgeogpxesTest");
importCacheStaticMaps = Settings.isStoreOfflineMaps();
TestSettings.setStoreOfflineMaps(true);
@@ -278,11 +278,11 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase {
@Override
protected void tearDown() throws Exception {
- final SearchResult search = cgData.getBatchOfStoredCaches(null, CacheType.ALL, listId);
+ final SearchResult search = DataStore.getBatchOfStoredCaches(null, CacheType.ALL, listId);
final List<Geocache> cachesInList = new ArrayList<Geocache>();
cachesInList.addAll(search.getCachesFromSearchResult(LoadFlags.LOAD_CACHE_OR_DB));
- cgData.markDropped(cachesInList);
- cgData.removeList(listId);
+ DataStore.markDropped(cachesInList);
+ DataStore.removeList(listId);
deleteDirectory(tempDir);
TestSettings.setStoreOfflineMaps(importCacheStaticMaps);
TestSettings.setStoreOfflineWpMaps(importWpStaticMaps);
diff --git a/tests/src/cgeo/geocaching/files/GPXParserTest.java b/tests/src/cgeo/geocaching/files/GPXParserTest.java
index 892b2a0..9604519 100644
--- a/tests/src/cgeo/geocaching/files/GPXParserTest.java
+++ b/tests/src/cgeo/geocaching/files/GPXParserTest.java
@@ -1,9 +1,9 @@
package cgeo.geocaching.files;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.LogEntry;
import cgeo.geocaching.Waypoint;
-import cgeo.geocaching.cgData;
import cgeo.geocaching.enumerations.CacheSize;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.LoadFlags;
@@ -150,6 +150,9 @@ public class GPXParserTest extends AbstractResourceInstrumentationTestCase {
assertEquals(parseTime("2011-09-11T07:00:00Z"), log.date);
assertEquals(-1, log.found);
assertEquals("Sehr schöne Runde und wir haben wieder etwas Neues über Hockenheim gelernt. Super Tarnung.\nTFTC, Geoteufel", log.log);
+ assertFalse(log.isOwn());
+ assertEquals(log.log, log.getDisplayText());
+ assertTrue(log.daysSinceLog() > 700);
// following info is not contained in pocket query gpx file
assertEquals(0, cache.getAttributes().size());
@@ -212,7 +215,7 @@ public class GPXParserTest extends AbstractResourceInstrumentationTestCase {
}
}
// reload caches, because the parser only returns the minimum version of each cache
- return new ArrayList<Geocache>(cgData.loadCaches(result, LoadFlags.LOAD_ALL_DB_ONLY));
+ return new ArrayList<Geocache>(DataStore.loadCaches(result, LoadFlags.LOAD_ALL_DB_ONLY));
}
public static void testParseDateWithFractionalSeconds() throws ParseException {
@@ -255,9 +258,9 @@ public class GPXParserTest extends AbstractResourceInstrumentationTestCase {
removeCacheCompletely(geocode);
final List<Geocache> caches = readGPX10(R.raw.lazy);
assertEquals(1, caches.size());
- cgData.removeAllFromCache();
+ DataStore.removeAllFromCache();
// load only the minimum cache, it has several members missing
- final Geocache minimalCache = cgData.loadCache(geocode, EnumSet.of(LoadFlag.LOAD_DB_MINIMAL));
+ final Geocache minimalCache = DataStore.loadCache(geocode, EnumSet.of(LoadFlag.LOAD_DB_MINIMAL));
// now check that we load lazy members on demand
assertFalse(minimalCache.getAttributes().isEmpty());
diff --git a/tests/src/cgeo/geocaching/list/PseudoListTest.java b/tests/src/cgeo/geocaching/list/PseudoListTest.java
new file mode 100644
index 0000000..3238678
--- /dev/null
+++ b/tests/src/cgeo/geocaching/list/PseudoListTest.java
@@ -0,0 +1,18 @@
+package cgeo.geocaching.list;
+
+import junit.framework.TestCase;
+
+public class PseudoListTest extends TestCase {
+
+ public static void testGetTitleAndCount() throws Exception {
+ final String title = PseudoList.ALL_LIST.title;
+ for (int i = 0; i < title.length(); i++) {
+ assertFalse("pseudo lists shall not have a number shown in their title", Character.isDigit(title.charAt(i)));
+ }
+ }
+
+ public static void testIsConcrete() throws Exception {
+ assertFalse("pseudo lists are not concrete lists", PseudoList.ALL_LIST.isConcrete());
+ }
+
+}
diff --git a/tests/src/cgeo/geocaching/list/StoredListTest.java b/tests/src/cgeo/geocaching/list/StoredListTest.java
new file mode 100644
index 0000000..985236a
--- /dev/null
+++ b/tests/src/cgeo/geocaching/list/StoredListTest.java
@@ -0,0 +1,27 @@
+package cgeo.geocaching.list;
+
+import cgeo.geocaching.DataStore;
+
+import junit.framework.TestCase;
+
+public class StoredListTest extends TestCase {
+
+ public static void testStandardListExists() {
+ final StoredList list = getStandardList();
+ assertNotNull(list);
+ }
+
+ private static StoredList getStandardList() {
+ return DataStore.getList(StoredList.STANDARD_LIST_ID);
+ }
+
+ public static void testEquals() {
+ final StoredList list1 = getStandardList();
+ final StoredList list2 = getStandardList();
+ assertEquals(list1, list2);
+ }
+
+ public static void testConcrete() {
+ assertTrue(getStandardList().isConcrete());
+ }
+}
diff --git a/tests/src/cgeo/geocaching/speech/TextFactoryTest.java b/tests/src/cgeo/geocaching/speech/TextFactoryTest.java
index 864757b..ec8e1b0 100644
--- a/tests/src/cgeo/geocaching/speech/TextFactoryTest.java
+++ b/tests/src/cgeo/geocaching/speech/TextFactoryTest.java
@@ -1,6 +1,6 @@
package cgeo.geocaching.speech;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.settings.TestSettings;
@@ -29,7 +29,7 @@ public class TextFactoryTest extends AndroidTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
- final Resources resources = cgeoapplication.getInstance().getResources();
+ final Resources resources = CgeoApplication.getInstance().getResources();
final Configuration config = resources.getConfiguration();
defaultLocale1 = config.locale;
defaultLocale2 = Locale.getDefault();
@@ -149,7 +149,7 @@ public class TextFactoryTest extends AndroidTestCase {
private static void setLocale(Locale locale1, Locale locale2, boolean metric) {
final Configuration config = new Configuration();
config.locale = locale1;
- final Resources resources = cgeoapplication.getInstance().getResources();
+ final Resources resources = CgeoApplication.getInstance().getResources();
resources.updateConfiguration(config, resources.getDisplayMetrics());
Locale.setDefault(locale2);
diff --git a/tests/src/cgeo/geocaching/test/AbstractResourceInstrumentationTestCase.java b/tests/src/cgeo/geocaching/test/AbstractResourceInstrumentationTestCase.java
index cb8238f..12e83cc 100644
--- a/tests/src/cgeo/geocaching/test/AbstractResourceInstrumentationTestCase.java
+++ b/tests/src/cgeo/geocaching/test/AbstractResourceInstrumentationTestCase.java
@@ -1,14 +1,14 @@
package cgeo.geocaching.test;
+import cgeo.geocaching.DataStore;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.StoredList;
-import cgeo.geocaching.cgData;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.LoadFlags;
import cgeo.geocaching.enumerations.LoadFlags.RemoveFlag;
import cgeo.geocaching.files.GPX10Parser;
import cgeo.geocaching.files.ParserException;
+import cgeo.geocaching.list.StoredList;
import android.content.res.Resources;
import android.test.InstrumentationTestCase;
@@ -27,7 +27,7 @@ public abstract class AbstractResourceInstrumentationTestCase extends Instrument
protected static void removeCacheCompletely(final String geocode) {
final EnumSet<RemoveFlag> flags = EnumSet.copyOf(LoadFlags.REMOVE_ALL);
flags.add(RemoveFlag.REMOVE_OWN_WAYPOINTS_ONLY_FOR_TESTING);
- cgData.removeCache(geocode, flags);
+ DataStore.removeCache(geocode, flags);
}
protected InputStream getResourceStream(int resourceId) {
@@ -65,17 +65,17 @@ public abstract class AbstractResourceInstrumentationTestCase extends Instrument
@Override
protected void setUp() throws Exception {
super.setUp();
- temporaryListId = cgData.createList("Temporary unit testing");
+ temporaryListId = DataStore.createList("Temporary unit testing");
assertTrue(temporaryListId != StoredList.TEMPORARY_LIST_ID);
assertTrue(temporaryListId != StoredList.STANDARD_LIST_ID);
}
@Override
protected void tearDown() throws Exception {
- final SearchResult search = cgData.getBatchOfStoredCaches(null, CacheType.ALL, temporaryListId);
+ final SearchResult search = DataStore.getBatchOfStoredCaches(null, CacheType.ALL, temporaryListId);
assertNotNull(search);
- cgData.removeCaches(search.getGeocodes(), LoadFlags.REMOVE_ALL);
- cgData.removeList(temporaryListId);
+ DataStore.removeCaches(search.getGeocodes(), LoadFlags.REMOVE_ALL);
+ DataStore.removeList(temporaryListId);
super.tearDown();
}
diff --git a/tests/src/cgeo/geocaching/ui/FormatterTest.java b/tests/src/cgeo/geocaching/ui/FormatterTest.java
index e65f425..53aba0f 100644
--- a/tests/src/cgeo/geocaching/ui/FormatterTest.java
+++ b/tests/src/cgeo/geocaching/ui/FormatterTest.java
@@ -2,7 +2,7 @@ package cgeo.geocaching.ui;
import cgeo.geocaching.R;
import cgeo.geocaching.Waypoint;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.enumerations.WaypointType;
import android.test.AndroidTestCase;
@@ -20,7 +20,7 @@ public class FormatterTest extends AndroidTestCase {
public static void testOwnWaypoint() {
final Waypoint own = new Waypoint("my own", WaypointType.OWN, true);
own.setPrefix(Waypoint.PREFIX_OWN);
- assertFormatting(own, cgeoapplication.getInstance().getString(R.string.waypoint_custom));
+ assertFormatting(own, CgeoApplication.getInstance().getString(R.string.waypoint_custom));
}
private static void assertFormatting(Waypoint waypoint, String expected) {
diff --git a/tests/src/cgeo/geocaching/utils/CryptUtilsTest.java b/tests/src/cgeo/geocaching/utils/CryptUtilsTest.java
index e727747..9264d29 100644
--- a/tests/src/cgeo/geocaching/utils/CryptUtilsTest.java
+++ b/tests/src/cgeo/geocaching/utils/CryptUtilsTest.java
@@ -23,4 +23,16 @@ public class CryptUtilsTest extends TestCase {
public static void testIssue1902() {
assertEquals("ƖƖlƖƖƖƖ", CryptUtils.rot13("ƖƖyƖƖƖƖ"));
}
+
+ public static void testSha1() {
+ assertEquals("da39a3ee5e6b4b0d3255bfef95601890afd80709", CryptUtils.sha1(""));
+ // expected value taken from debugger. should assure every developer uses UTF-8
+ assertEquals("cf2f343f59cea81afc0a5a566cb138ba349c548f", CryptUtils.sha1("äöü"));
+ }
+
+ public static void testMd5() {
+ assertEquals("d41d8cd98f00b204e9800998ecf8427e", CryptUtils.md5(""));
+ // expected value taken from debugger. should assure every developer uses UTF-8
+ assertEquals("a7f4e3ec08f09be2ef7ecb4eea5f8981", CryptUtils.md5("äöü"));
+ }
}
diff --git a/tests/src/cgeo/geocaching/utils/UncertainPropertyTest.java b/tests/src/cgeo/geocaching/utils/UncertainPropertyTest.java
new file mode 100644
index 0000000..74aa680
--- /dev/null
+++ b/tests/src/cgeo/geocaching/utils/UncertainPropertyTest.java
@@ -0,0 +1,19 @@
+package cgeo.geocaching.utils;
+
+import junit.framework.TestCase;
+
+public class UncertainPropertyTest extends TestCase {
+
+ public static void testHigherCertaintyWins() throws Exception {
+ final UncertainProperty<String> prop1 = new UncertainProperty<String>("prop1", 10);
+ final UncertainProperty<String> prop2 = new UncertainProperty<String>("prop2", 20);
+ assertEquals(prop2, UncertainProperty.getMergedProperty(prop1, prop2));
+ }
+
+ public static void testAvoidNull() throws Exception {
+ final UncertainProperty<String> prop1 = new UncertainProperty<String>("prop1", 10);
+ final UncertainProperty<String> prop2 = new UncertainProperty<String>(null, 20);
+ assertEquals(prop1, UncertainProperty.getMergedProperty(prop1, prop2));
+ assertEquals(prop1, UncertainProperty.getMergedProperty(prop2, prop1));
+ }
+}
diff --git a/tests/src/cgeo/geocaching/utils/XmlUtilsTest.java b/tests/src/cgeo/geocaching/utils/XmlUtilsTest.java
new file mode 100644
index 0000000..a089ee0
--- /dev/null
+++ b/tests/src/cgeo/geocaching/utils/XmlUtilsTest.java
@@ -0,0 +1,48 @@
+package cgeo.geocaching.utils;
+
+import cgeo.org.kxml2.io.KXmlSerializer;
+
+import org.apache.commons.lang3.CharEncoding;
+import org.xmlpull.v1.XmlSerializer;
+
+import java.io.IOException;
+import java.io.StringWriter;
+
+import junit.framework.TestCase;
+
+public class XmlUtilsTest extends TestCase {
+
+ private XmlSerializer xml;
+ private StringWriter stringWriter;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ stringWriter = new StringWriter();
+ xml = new KXmlSerializer();
+ xml.setOutput(stringWriter);
+ xml.startDocument(CharEncoding.UTF_8, null);
+ }
+
+ public void testSimpleText() throws Exception {
+ XmlUtils.simpleText(xml, "", "tag", "text");
+ assertXmlEquals("<tag>text</tag>");
+ }
+
+ public void testSimpleTextWithPrefix() throws Exception {
+ XmlUtils.simpleText(xml, "prefix", "tag", "text");
+ assertXmlEquals("<n0:tag xmlns:n0=\"prefix\">text</n0:tag>");
+ }
+
+ private void assertXmlEquals(final String expected) throws IOException {
+ xml.endDocument();
+ xml.flush();
+ assertEquals("<?xml version='1.0' encoding='UTF-8' ?>" + expected, stringWriter.toString());
+ }
+
+ public void testMultipleTexts() throws Exception {
+ XmlUtils.multipleTexts(xml, "", "tag1", "text1", "tag2", "text2");
+ assertXmlEquals("<tag1>text1</tag1><tag2>text2</tag2>");
+ }
+
+}