aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
Diffstat (limited to 'main')
-rw-r--r--main/.classpath1
-rw-r--r--main/.settings/org.eclipse.jdt.core.prefs22
-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
-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-sv/strings.xml3
-rw-r--r--main/res/values/preference_keys.xml5
-rw-r--r--main/res/values/strings.xml5
-rw-r--r--main/res/xml/preferences.xml817
-rw-r--r--main/src/cgeo/geocaching/AbstractPopupActivity.java4
-rw-r--r--main/src/cgeo/geocaching/CacheDetailActivity.java18
-rw-r--r--main/src/cgeo/geocaching/CompassActivity.java2
-rw-r--r--main/src/cgeo/geocaching/EditWaypointActivity.java2
-rw-r--r--main/src/cgeo/geocaching/Geocache.java40
-rw-r--r--main/src/cgeo/geocaching/LogCacheActivity.java34
-rw-r--r--main/src/cgeo/geocaching/LogEntry.java5
-rw-r--r--main/src/cgeo/geocaching/MainActivity.java7
-rw-r--r--main/src/cgeo/geocaching/NavigateAnyPointActivity.java4
-rw-r--r--main/src/cgeo/geocaching/SearchActivity.java2
-rw-r--r--main/src/cgeo/geocaching/StaticMapsProvider.java24
-rw-r--r--main/src/cgeo/geocaching/StoredList.java6
-rw-r--r--main/src/cgeo/geocaching/UsefulAppsActivity.java2
-rw-r--r--main/src/cgeo/geocaching/activity/AbstractListActivity.java3
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsApp.java2
-rw-r--r--main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java10
-rw-r--r--main/src/cgeo/geocaching/cgData.java2
-rw-r--r--main/src/cgeo/geocaching/cgeocaches.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.java6
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java7
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCMap.java4
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCParser.java22
-rw-r--r--main/src/cgeo/geocaching/connector/gc/Login.java5
-rw-r--r--main/src/cgeo/geocaching/connector/gc/SearchHandler.java2
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java4
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java5
-rw-r--r--main/src/cgeo/geocaching/enumerations/CacheType.java2
-rw-r--r--main/src/cgeo/geocaching/export/GpxExport.java2
-rw-r--r--main/src/cgeo/geocaching/files/GPXImporter.java27
-rw-r--r--main/src/cgeo/geocaching/files/GPXParser.java8
-rw-r--r--main/src/cgeo/geocaching/files/SimpleDirChooser.java2
-rw-r--r--main/src/cgeo/geocaching/filter/DistanceFilter.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/maps/CGeoMap.java10
-rw-r--r--main/src/cgeo/geocaching/maps/CachesOverlay.java28
-rw-r--r--main/src/cgeo/geocaching/maps/PositionHistory.java2
-rw-r--r--main/src/cgeo/geocaching/network/Network.java80
-rw-r--r--main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java58
-rw-r--r--main/src/cgeo/geocaching/network/Parameters.java9
-rw-r--r--main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java2
-rw-r--r--main/src/cgeo/geocaching/settings/Settings.java15
-rw-r--r--main/src/cgeo/geocaching/settings/SettingsActivity.java17
-rw-r--r--main/src/cgeo/geocaching/sorting/ComparatorUserInterface.java4
-rw-r--r--main/src/cgeo/geocaching/ui/DecryptTextClickListener.java26
-rw-r--r--main/src/cgeo/geocaching/ui/LoggingUI.java9
-rw-r--r--main/src/cgeo/geocaching/ui/dialog/CustomProgressDialog.java7
-rw-r--r--main/src/cgeo/geocaching/ui/logs/LogsViewCreator.java2
-rw-r--r--main/src/cgeo/geocaching/utils/CryptUtils.java40
-rw-r--r--main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java2
-rw-r--r--main/src/cgeo/geocaching/utils/ImageUtils.java3
-rw-r--r--main/src/cgeo/geocaching/utils/Log.java7
-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
72 files changed, 838 insertions, 823 deletions
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..9fb16cd 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
@@ -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/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/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-sv/strings.xml b/main/res/values-sv/strings.xml
index 6abc9a1..8230277 100644
--- a/main/res/values-sv/strings.xml
+++ b/main/res/values-sv/strings.xml
@@ -510,6 +510,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>
diff --git a/main/res/values/preference_keys.xml b/main/res/values/preference_keys.xml
index 140d3b3..38012f5 100644
--- a/main/res/values/preference_keys.xml
+++ b/main/res/values/preference_keys.xml
@@ -113,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 311b95a..012bfe1 100644
--- a/main/res/values/strings.xml
+++ b/main/res/values/strings.xml
@@ -512,7 +512,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>
diff --git a/main/res/xml/preferences.xml b/main/res/xml/preferences.xml
index 0cbeb71..4773acf 100644
--- a/main/res/xml/preferences.xml
+++ b/main/res/xml/preferences.xml
@@ -1,279 +1,282 @@
<?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"
@@ -281,290 +284,248 @@
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..03f0680 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.");
}
}
@@ -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
}
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java
index 4a9cc6e..e04f7ed 100644
--- a/main/src/cgeo/geocaching/CacheDetailActivity.java
+++ b/main/src/cgeo/geocaching/CacheDetailActivity.java
@@ -291,7 +291,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 +422,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
break;
}
}
- } catch (final Exception e) {
+ } catch (final RuntimeException e) {
}
}
break;
@@ -438,7 +438,7 @@ 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()));
@@ -1279,7 +1279,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
private Handler handler;
public DropCacheThread(Handler handler) {
- super();
this.handler = handler;
}
@@ -1615,7 +1614,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 +1706,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));
@@ -2452,7 +2456,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();
diff --git a/main/src/cgeo/geocaching/CompassActivity.java b/main/src/cgeo/geocaching/CompassActivity.java
index 002f00e..c8579e1 100644
--- a/main/src/cgeo/geocaching/CompassActivity.java
+++ b/main/src/cgeo/geocaching/CompassActivity.java
@@ -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/EditWaypointActivity.java b/main/src/cgeo/geocaching/EditWaypointActivity.java
index 56ee959..59666e9 100644
--- a/main/src/cgeo/geocaching/EditWaypointActivity.java
+++ b/main/src/cgeo/geocaching/EditWaypointActivity.java
@@ -114,7 +114,7 @@ public class EditWaypointActivity extends AbstractActivity {
if (own) {
initializeWaypointTypeSelector();
}
- } catch (Exception e) {
+ } catch (RuntimeException e) {
Log.e("EditWaypointActivity.loadWaypointHandler", e);
} finally {
if (waitDialog != null) {
diff --git a/main/src/cgeo/geocaching/Geocache.java b/main/src/cgeo/geocaching/Geocache.java
index 96fbc06..7aceed4 100644
--- a/main/src/cgeo/geocaching/Geocache.java
+++ b/main/src/cgeo/geocaching/Geocache.java
@@ -2,7 +2,6 @@ package cgeo.geocaching;
import cgeo.geocaching.cgData.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;
@@ -33,6 +32,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;
@@ -447,16 +447,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) {
@@ -568,7 +568,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 +602,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
@@ -767,16 +767,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 +990,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;
}
/**
@@ -1063,11 +1063,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 +1140,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) {
diff --git a/main/src/cgeo/geocaching/LogCacheActivity.java b/main/src/cgeo/geocaching/LogCacheActivity.java
index c739067..cb565bd 100644
--- a/main/src/cgeo/geocaching/LogCacheActivity.java
+++ b/main/src/cgeo/geocaching/LogCacheActivity.java
@@ -46,7 +46,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";
@@ -79,7 +78,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;
@@ -214,13 +213,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
@@ -261,7 +260,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);
@@ -341,7 +340,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;
@@ -424,8 +423,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;
}
@@ -438,9 +436,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;
@@ -449,10 +447,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);
@@ -539,7 +533,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);
@@ -556,7 +550,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
Twitter.postTweetCache(geocode);
}
}
- if (rating > 0) {
+ if (GCVote.isValidRating(rating)) {
GCVote.setRating(cache, rating);
}
@@ -572,7 +566,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
}
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..a01c431 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);
}
diff --git a/main/src/cgeo/geocaching/MainActivity.java b/main/src/cgeo/geocaching/MainActivity.java
index 0fd6759..b6f267a 100644
--- a/main/src/cgeo/geocaching/MainActivity.java
+++ b/main/src/cgeo/geocaching/MainActivity.java
@@ -47,6 +47,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 +142,7 @@ public class MainActivity extends AbstractActivity {
navLocation.setText(StringUtils.join(addressParts, ", "));
}
- } catch (Exception e) {
+ } catch (RuntimeException e) {
// nothing
}
@@ -542,7 +543,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.");
}
}
@@ -721,7 +722,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..87d7ba7 100644
--- a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java
+++ b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java
@@ -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
}
@@ -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..8f58bcd 100644
--- a/main/src/cgeo/geocaching/SearchActivity.java
+++ b/main/src/cgeo/geocaching/SearchActivity.java
@@ -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.");
}
}
diff --git a/main/src/cgeo/geocaching/StaticMapsProvider.java b/main/src/cgeo/geocaching/StaticMapsProvider.java
index eb59bcb..cf279c0 100644
--- a/main/src/cgeo/geocaching/StaticMapsProvider.java
+++ b/main/src/cgeo/geocaching/StaticMapsProvider.java
@@ -14,13 +14,9 @@ import ch.boye.httpclientandroidlib.HttpResponse;
import org.apache.commons.lang3.StringUtils;
-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() {
diff --git a/main/src/cgeo/geocaching/StoredList.java b/main/src/cgeo/geocaching/StoredList.java
index 4946420..6f49625 100644
--- a/main/src/cgeo/geocaching/StoredList.java
+++ b/main/src/cgeo/geocaching/StoredList.java
@@ -4,6 +4,7 @@ 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;
@@ -78,10 +79,6 @@ public final class StoredList {
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;
- }
-
if (exceptListId > StoredList.TEMPORARY_LIST_ID) {
StoredList exceptList = cgData.getList(exceptListId);
if (exceptList != null) {
@@ -122,6 +119,7 @@ public final class StoredList {
builder.create().show();
}
+ @NonNull
private static List<StoredList> getSortedLists() {
final Collator collator = Collator.getInstance();
final List<StoredList> lists = cgData.getLists();
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/activity/AbstractListActivity.java b/main/src/cgeo/geocaching/activity/AbstractListActivity.java
index 47c747f..93e9b7f 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 android.content.res.Resources;
import android.graphics.drawable.Drawable;
@@ -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/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/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/cgData.java b/main/src/cgeo/geocaching/cgData.java
index 9d636f9..a2c9367 100644
--- a/main/src/cgeo/geocaching/cgData.java
+++ b/main/src/cgeo/geocaching/cgData.java
@@ -20,6 +20,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;
@@ -2479,6 +2480,7 @@ public class cgData {
}
}
+ @NonNull
public static List<StoredList> getLists() {
init();
diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/cgeocaches.java
index 59174f5..423e9c6 100644
--- a/main/src/cgeo/geocaching/cgeocaches.java
+++ b/main/src/cgeo/geocaching/cgeocaches.java
@@ -655,7 +655,7 @@ 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) {
+ } catch (final RuntimeException e) {
Log.e("cgeocaches.onPrepareOptionsMenu", e);
}
@@ -1326,7 +1326,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();
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..9ac9c9d 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java
@@ -2,6 +2,7 @@ package cgeo.geocaching.connector.gc;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.ICache;
+import cgeo.geocaching.LogCacheActivity;
import cgeo.geocaching.R;
import cgeo.geocaching.SearchResult;
import cgeo.geocaching.cgData;
@@ -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);
}
diff --git a/main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java b/main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java
index 2aa5c75..dfb1f55 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,12 @@ 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 android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.LoaderManager;
@@ -38,8 +37,8 @@ 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;
}
diff --git a/main/src/cgeo/geocaching/connector/gc/GCMap.java b/main/src/cgeo/geocaching/connector/gc/GCMap.java
index 4fdde56..27d8a77 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCMap.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCMap.java
@@ -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);
}
diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java
index 34e48ab..7eacb8e 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCParser.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java
@@ -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");
}
@@ -309,7 +309,7 @@ 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")) {
+ if (coordinates != null && 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);
@@ -320,7 +320,7 @@ public abstract class GCParser {
LocParser.parseLoc(searchResult, coordinates);
- } catch (final Exception e) {
+ } catch (final RuntimeException e) {
Log.e("GCParser.parseSearch.CIDs", e);
}
}
@@ -569,7 +569,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 +598,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 +632,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 +654,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");
}
@@ -1083,7 +1083,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);
}
@@ -1396,7 +1396,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 +1427,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,7 +1476,7 @@ 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");
}
diff --git a/main/src/cgeo/geocaching/connector/gc/Login.java b/main/src/cgeo/geocaching/connector/gc/Login.java
index 0d8fb05..10ea18d 100644
--- a/main/src/cgeo/geocaching/connector/gc/Login.java
+++ b/main/src/cgeo/geocaching/connector/gc/Login.java
@@ -114,7 +114,7 @@ public abstract class Login {
loginResponse = Network.postRequest("https://www.geocaching.com/login/default.aspx", params);
loginData = Network.getResponseData(loginResponse);
- if (StringUtils.isBlank(loginData)) {
+ if (loginData == null || StringUtils.isBlank(loginData)) {
Log.e("Login.login: Failed to retrieve login page (2nd)");
// FIXME: should it be CONNECTION_FAILED to match the first attempt?
return StatusCode.COMMUNICATION_ERROR; // no login page
@@ -276,7 +276,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/OCApiLiveConnector.java b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
index d35e54b..663bbf7 100644
--- a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
+++ b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java
@@ -1,6 +1,7 @@
package cgeo.geocaching.connector.oc;
import cgeo.geocaching.Geocache;
+import cgeo.geocaching.LogCacheActivity;
import cgeo.geocaching.SearchResult;
import cgeo.geocaching.cgData;
import cgeo.geocaching.cgeoapplication;
@@ -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;
@@ -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);
}
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/enumerations/CacheType.java b/main/src/cgeo/geocaching/enumerations/CacheType.java
index c7a9130..31ec392 100644
--- a/main/src/cgeo/geocaching/enumerations/CacheType.java
+++ b/main/src/cgeo/geocaching/enumerations/CacheType.java
@@ -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/export/GpxExport.java b/main/src/cgeo/geocaching/export/GpxExport.java
index 821a3f6..36e43a0 100644
--- a/main/src/cgeo/geocaching/export/GpxExport.java
+++ b/main/src/cgeo/geocaching/export/GpxExport.java
@@ -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/files/GPXImporter.java b/main/src/cgeo/geocaching/files/GPXImporter.java
index a1c04d7..3f11c26 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.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();
@@ -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..3358759 100644
--- a/main/src/cgeo/geocaching/files/GPXParser.java
+++ b/main/src/cgeo/geocaching/files/GPXParser.java
@@ -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.");
}
}
@@ -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
}
}
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/DistanceFilter.java b/main/src/cgeo/geocaching/filter/DistanceFilter.java
index 2f39473..4d00b65 100644
--- a/main/src/cgeo/geocaching/filter/DistanceFilter.java
+++ b/main/src/cgeo/geocaching/filter/DistanceFilter.java
@@ -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,7 +50,7 @@ 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 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));
}
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/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java
index 0817170..0703dd8 100644
--- a/main/src/cgeo/geocaching/maps/CGeoMap.java
+++ b/main/src/cgeo/geocaching/maps/CGeoMap.java
@@ -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);
}
@@ -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.");
}
}
@@ -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
}
@@ -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..8fbb3db 100644
--- a/main/src/cgeo/geocaching/maps/CachesOverlay.java
+++ b/main/src/cgeo/geocaching/maps/CachesOverlay.java
@@ -4,7 +4,6 @@ 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.activity.Progress;
@@ -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);
@@ -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/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/network/Network.java b/main/src/cgeo/geocaching/network/Network.java
index 3aa1828..8c44c9c 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/OAuthAuthorizationActivity.java b/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java
index 14e0b33..221147c 100644
--- a/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java
+++ b/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java
@@ -5,6 +5,7 @@ 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;
@@ -22,6 +23,7 @@ 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 {
@@ -156,38 +158,36 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity {
private void requestToken() {
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);
- }
+ 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(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);
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/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 680e38f..34f5dc1 100644
--- a/main/src/cgeo/geocaching/settings/Settings.java
+++ b/main/src/cgeo/geocaching/settings/Settings.java
@@ -475,7 +475,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);
@@ -552,16 +552,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() {
diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java
index d2c73f3..90b6145 100644
--- a/main/src/cgeo/geocaching/settings/SettingsActivity.java
+++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java
@@ -8,6 +8,7 @@ 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,6 +152,22 @@ 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) {
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/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/LoggingUI.java b/main/src/cgeo/geocaching/ui/LoggingUI.java
index 0ee724a..c2e2d24 100644
--- a/main/src/cgeo/geocaching/ui/LoggingUI.java
+++ b/main/src/cgeo/geocaching/ui/LoggingUI.java
@@ -3,10 +3,9 @@ package cgeo.geocaching.ui;
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;
@@ -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/logs/LogsViewCreator.java b/main/src/cgeo/geocaching/ui/logs/LogsViewCreator.java
index ee2713a..4572bc6 100644
--- a/main/src/cgeo/geocaching/ui/logs/LogsViewCreator.java
+++ b/main/src/cgeo/geocaching/ui/logs/LogsViewCreator.java
@@ -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/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..8aa605f 100644
--- a/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java
+++ b/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java
@@ -97,7 +97,7 @@ public class DatabaseBackupUtils {
public static File getRestoreFile() {
final File fileSourceFile = cgData.getBackupFileInternal();
- return fileSourceFile.exists() ? fileSourceFile : null;
+ return fileSourceFile.exists() && fileSourceFile.length() > 0 ? fileSourceFile : null;
}
public static boolean hasBackup() {
diff --git a/main/src/cgeo/geocaching/utils/ImageUtils.java b/main/src/cgeo/geocaching/utils/ImageUtils.java
index 6851241..34bfa1c 100644
--- a/main/src/cgeo/geocaching/utils/ImageUtils.java
+++ b/main/src/cgeo/geocaching/utils/ImageUtils.java
@@ -13,6 +13,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;
@@ -81,7 +82,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);
}
}
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/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;