diff options
Diffstat (limited to 'main')
140 files changed, 1282 insertions, 1251 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/AndroidManifest.xml b/main/AndroidManifest.xml index 2d01358..59f5d58 100644 --- a/main/AndroidManifest.xml +++ b/main/AndroidManifest.xml @@ -30,7 +30,7 @@ android:xlargeScreens="true" /> <application - android:name=".cgeoapplication" + android:name=".CgeoApplication" android:allowBackup="true" android:backupAgent="cgeo.geocaching.backup.CentralBackupAgent" android:icon="@drawable/cgeo" @@ -137,7 +137,7 @@ android:configChanges="keyboardHidden|orientation" > </activity> <activity - android:name=".cgeocaches" + android:name=".CacheListActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:label="@string/app_name" > 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 Binary files differnew file mode 100644 index 0000000..daca164 --- /dev/null +++ b/main/compile-libs/org.eclipse.jdt.annotation_1.1.0.v20130513-1648.jar 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 Binary files differnew file mode 100644 index 0000000..e195370 --- /dev/null +++ b/main/libs/src/commons-collections-3.2.1-src.zip diff --git a/main/libs/src/commons-lang3-3.1-src.zip b/main/libs/src/commons-lang3-3.1-src.zip Binary files differnew file mode 100644 index 0000000..13010f4 --- /dev/null +++ b/main/libs/src/commons-lang3-3.1-src.zip 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 e82c9d6..38012f5 100644 --- a/main/res/values/preference_keys.xml +++ b/main/res/values/preference_keys.xml @@ -38,6 +38,7 @@ <string name="pref_choose_list">choose_list</string> <string name="pref_mapsource">mapsource</string> <string name="pref_mapDirectory">mapDirectory</string> + <string name="pref_mapsforge_scale_text">mapsforgeScaleText</string> <string name="pref_renderthemepath">renderthemepath</string> <string name="pref_showwaypointsthreshold">waypointsthreshold</string> <string name="pref_maptrail">maptrail</string> @@ -112,4 +113,9 @@ <string name="pref_ocpl_tokenpublic">ocpl_tokenpublic</string> <string name="pref_temp_ocpl_token_secret">ocpl-temp-token-secret</string> <string name="pref_temp_ocpl_token_public">ocpl-temp-token-public</string> + <string name="pref_fakekey_gc_website">fakekey_gc_website</string> + <string name="pref_fakekey_ocde_website">fakekey_ocde_website</string> + <string name="pref_fakekey_ocpl_website">fakekey_ocpl_website</string> + <string name="pref_fakekey_gcvote_website">fakekey_gcvote_website</string> + <string name="pref_fakekey_sendtocgeo_website">fakekey_sendtocgeo_website</string> </resources> diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml index 554ab0e..012bfe1 100644 --- a/main/res/values/strings.xml +++ b/main/res/values/strings.xml @@ -478,6 +478,8 @@ <string name="settings_info_themes_title">Info on Map Themes</string> <string name="settings_info_themes">c:geo supports custom themes for offline maps. These can be used to change the color style of the map (e.g. to have a nightview map) or to highlight certain objects like cycle paths or height lines within the map.</string> <string name="init_mapsource_select">Select Map Source</string> + <string name="settings_title_scale_map_text">Scale Map Text</string> + <string name="settings_summary_scale_map_text">Scale text labels on offline map according to device dpi</string> <string name="init_map_directory_description">Directory with offline maps</string> <string name="init_gpx_exportdir">GPX Export Directory</string> <string name="init_gpx_importdir">GPX Import Directory</string> @@ -510,7 +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 7ea3b59..4773acf 100644 --- a/main/res/xml/preferences.xml +++ b/main/res/xml/preferences.xml @@ -1,564 +1,531 @@ <?xml version="1.0" encoding="UTF-8"?> -<PreferenceScreen - xmlns:android="http://schemas.android.com/apk/res/android" +<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cgeo="http://schemas.android.com/apk/res/cgeo.geocaching" android:key="@string/pref_fakekey_main_screen" > <PreferenceScreen - android:title="@string/settings_title_services" android:icon="?attr/settings_cloud" - android:key="@string/pref_fakekey_services_screen" > - - <PreferenceCategory - android:title="@string/settings_category_geocaching" > - - <PreferenceScreen - android:title="@string/settings_title_gc" > - - <cgeo.geocaching.settings.CheckBoxWithPopupPreference - android:key="@string/pref_connectorGCActive" - android:title="@string/settings_activate_gc" - cgeo:title="@string/settings_title_gc" - cgeo:text="@string/settings_gc_legal_note" - cgeo:url="@string/settings_gc_legal_note_url" - cgeo:urlButton="@string/settings_goto_url_button" - android:defaultValue="true" /> - <EditTextPreference - android:key="@string/pref_username" - android:title="@string/init_username" - android:dialogTitle="@string/init_username" - android:hint="@string/init_username" - android:dependency="@string/pref_connectorGCActive" - android:singleLine="true" - android:imeOptions="actionDone" /> - <cgeo.geocaching.settings.EditPasswordPreference - android:key="@string/pref_password" - android:title="@string/init_password" - android:dialogTitle="@string/init_password" - android:hint="@string/init_password" - android:inputType="textPassword" - android:dependency="@string/pref_connectorGCActive" - android:singleLine="true" - android:imeOptions="actionDone" /> - <cgeo.geocaching.settings.CheckGcCredentialsPreference - android:title="@string/init_login" - android:dependency="@string/pref_connectorGCActive" /> - <PreferenceScreen - android:title="@string/settings_title_basicmembers" - android:key="@string/pref_fakekey_basicmembers_screen" - android:dependency="@string/pref_connectorGCActive" > - <CheckBoxPreference - android:key="@string/pref_showcaptcha" - android:title="@string/init_captcha" - android:summary="@string/init_summary_captcha" - android:defaultValue="false" /> - <CheckBoxPreference - android:key="@string/pref_loaddirectionimg" - android:title="@string/init_loaddirectionimg" - android:summary="@string/init_summary_loaddirectionimg" - android:defaultValue="true" /> - </PreferenceScreen> - <cgeo.geocaching.settings.InfoPreference - android:title="@string/settings_info_facebook_login_title" - android:text="@string/settings_info_facebook_login" - cgeo:url="@string/settings_facebook_login_url" - cgeo:urlButton="@string/settings_goto_url_button" /> - - </PreferenceScreen> - - <PreferenceScreen - android:title="@string/init_oc" > - - <CheckBoxPreference - android:key="@string/pref_connectorOCActive" - android:title="@string/settings_activate_oc" - android:defaultValue="false" /> - <cgeo.geocaching.settings.TextPreference - android:layout="@layout/text_preference" - android:text="@string/init_oc_de_description" - android:dependency="@string/pref_connectorOCActive" /> - <cgeo.geocaching.settings.AuthorizeOcPreference - android:key="@string/pref_fakekey_ocde_authorization" - android:dependency="@string/pref_connectorOCActive" /> - - </PreferenceScreen> - - <PreferenceScreen - android:title="@string/init_oc_pl" > - - <CheckBoxPreference - android:key="@string/pref_connectorOCPLActive" - android:title="@string/settings_activate_oc_pl" - android:defaultValue="false" /> - <cgeo.geocaching.settings.TextPreference - android:layout="@layout/text_preference" - android:text="@string/init_oc_pl_description" - android:dependency="@string/pref_connectorOCPLActive" /> - <cgeo.geocaching.settings.AuthorizeOcPreference - android:key="@string/pref_fakekey_ocpl_authorization" - android:dependency="@string/pref_connectorOCPLActive" /> - - </PreferenceScreen> - - <PreferenceScreen - android:title="@string/init_gcvote" > - - <cgeo.geocaching.settings.EditPasswordPreference - android:key="@string/pref_pass_vote" - android:title="@string/init_password" - android:dialogTitle="@string/init_password" - android:hint="@string/init_password" - android:inputType="textPassword" - android:singleLine="true" - android:imeOptions="actionDone" /> - - </PreferenceScreen> - - <PreferenceScreen - android:title="@string/init_sendToCgeo" > - - <cgeo.geocaching.settings.InfoPreference - android:title="@string/settings_info_send2cgeo_title" - android:text="@string/init_sendToCgeo_description" - cgeo:url="@string/settings_send2cgeo_url" - cgeo:urlButton="@string/settings_goto_url_button" /> - <EditTextPreference - android:key="@string/pref_webDeviceName" - android:title="@string/init_sendToCgeo_name" - android:dialogTitle="@string/init_sendToCgeo_name" - android:singleLine="true" - android:imeOptions="actionDone" /> - <cgeo.geocaching.settings.RegisterSend2CgeoPreference - android:title="@string/init_sendToCgeo_register" /> - - </PreferenceScreen> - </PreferenceCategory> - - <PreferenceCategory - android:title="@string/settings_category_social" > - <PreferenceScreen - android:title="@string/init_twitter" > - - <CheckBoxPreference - android:key="@string/pref_twitter" - android:title="@string/settings_activate_twitter" - android:defaultValue="false" /> - <cgeo.geocaching.settings.TextPreference - android:layout="@layout/text_preference" - android:text="@string/about_twitter" - android:dependency="@string/pref_twitter" /> - <cgeo.geocaching.settings.AuthorizeTwitterPreference - android:key="@string/pref_fakekey_twitter_authorization" - android:dependency="@string/pref_twitter" /> - - </PreferenceScreen> + android:key="@string/pref_fakekey_services_screen" + android:title="@string/settings_title_services" > + <PreferenceCategory android:title="@string/settings_category_geocaching" > + <PreferenceScreen android:title="@string/settings_title_gc" > + <PreferenceCategory android:title="@string/settings_settings" > + <cgeo.geocaching.settings.CheckBoxWithPopupPreference + android:defaultValue="true" + android:key="@string/pref_connectorGCActive" + android:title="@string/settings_activate_gc" + cgeo:text="@string/settings_gc_legal_note" + cgeo:title="@string/settings_title_gc" + cgeo:url="@string/settings_gc_legal_note_url" + cgeo:urlButton="@string/settings_goto_url_button" /> + + <EditTextPreference + android:dependency="@string/pref_connectorGCActive" + android:dialogTitle="@string/init_username" + android:hint="@string/init_username" + android:imeOptions="actionDone" + android:key="@string/pref_username" + android:singleLine="true" + android:title="@string/init_username" /> + + <cgeo.geocaching.settings.EditPasswordPreference + android:dependency="@string/pref_connectorGCActive" + android:dialogTitle="@string/init_password" + android:hint="@string/init_password" + android:imeOptions="actionDone" + android:inputType="textPassword" + android:key="@string/pref_password" + android:singleLine="true" + android:title="@string/init_password" /> + + <cgeo.geocaching.settings.CheckGcCredentialsPreference + android:dependency="@string/pref_connectorGCActive" + android:title="@string/init_login" /> + + <PreferenceScreen + android:dependency="@string/pref_connectorGCActive" + android:key="@string/pref_fakekey_basicmembers_screen" + android:title="@string/settings_title_basicmembers" > + <CheckBoxPreference + android:defaultValue="false" + android:key="@string/pref_showcaptcha" + android:summary="@string/init_summary_captcha" + android:title="@string/init_captcha" /> + <CheckBoxPreference + android:defaultValue="true" + android:key="@string/pref_loaddirectionimg" + android:summary="@string/init_summary_loaddirectionimg" + android:title="@string/init_loaddirectionimg" /> + </PreferenceScreen> + </PreferenceCategory> + <PreferenceCategory android:title="@string/settings_information" > + <cgeo.geocaching.settings.InfoPreference + android:text="@string/settings_info_facebook_login" + android:title="@string/settings_info_facebook_login_title" + cgeo:url="@string/settings_facebook_login_url" + cgeo:urlButton="@string/settings_goto_url_button" /> + + <Preference + android:key="@string/pref_fakekey_gc_website" + android:title="@string/settings_open_website" /> + </PreferenceCategory> + </PreferenceScreen> + <PreferenceScreen android:title="@string/init_oc" > + <PreferenceCategory android:title="@string/settings_settings" > + <CheckBoxPreference + android:defaultValue="false" + android:key="@string/pref_connectorOCActive" + android:title="@string/settings_activate_oc" /> + + <cgeo.geocaching.settings.TextPreference + android:dependency="@string/pref_connectorOCActive" + android:layout="@layout/text_preference" + android:text="@string/init_oc_de_description" /> + + <cgeo.geocaching.settings.AuthorizeOcPreference + android:dependency="@string/pref_connectorOCActive" + android:key="@string/pref_fakekey_ocde_authorization" /> + </PreferenceCategory> + <PreferenceCategory android:title="@string/settings_information" > + <Preference + android:key="@string/pref_fakekey_ocde_website" + android:title="@string/settings_open_website" /> + </PreferenceCategory> + </PreferenceScreen> + <PreferenceScreen android:title="@string/init_oc_pl" > + <PreferenceCategory android:title="@string/settings_settings" > + <CheckBoxPreference + android:defaultValue="false" + android:key="@string/pref_connectorOCPLActive" + android:title="@string/settings_activate_oc_pl" /> + + <cgeo.geocaching.settings.TextPreference + android:dependency="@string/pref_connectorOCPLActive" + android:layout="@layout/text_preference" + android:text="@string/init_oc_pl_description" /> + + <cgeo.geocaching.settings.AuthorizeOcPreference + android:dependency="@string/pref_connectorOCPLActive" + android:key="@string/pref_fakekey_ocpl_authorization" /> + </PreferenceCategory> + <PreferenceCategory android:title="@string/settings_information" > + <Preference + android:key="@string/pref_fakekey_ocpl_website" + android:title="@string/settings_open_website" /> + </PreferenceCategory> + </PreferenceScreen> + <PreferenceScreen android:title="@string/init_gcvote" > + <PreferenceCategory android:title="@string/settings_settings" > + <cgeo.geocaching.settings.EditPasswordPreference + android:dialogTitle="@string/init_password" + android:hint="@string/init_password" + android:imeOptions="actionDone" + android:inputType="textPassword" + android:key="@string/pref_pass_vote" + android:singleLine="true" + android:title="@string/init_password" /> + </PreferenceCategory> + <PreferenceCategory android:title="@string/settings_information" > + <Preference + android:key="@string/pref_fakekey_gcvote_website" + android:title="@string/settings_open_website" /> + </PreferenceCategory> + </PreferenceScreen> + <PreferenceScreen android:title="@string/init_sendToCgeo" > + <PreferenceCategory android:title="@string/settings_settings" > + <EditTextPreference + android:dialogTitle="@string/init_sendToCgeo_name" + android:imeOptions="actionDone" + android:key="@string/pref_webDeviceName" + android:singleLine="true" + android:title="@string/init_sendToCgeo_name" /> + + <cgeo.geocaching.settings.RegisterSend2CgeoPreference android:title="@string/init_sendToCgeo_register" /> + </PreferenceCategory> + <PreferenceCategory android:title="@string/settings_information" > + <cgeo.geocaching.settings.InfoPreference + android:text="@string/init_sendToCgeo_description" + android:title="@string/settings_info_send2cgeo_title" + cgeo:url="@string/settings_send2cgeo_url" + cgeo:urlButton="@string/settings_goto_url_button" /> + + <Preference + android:key="@string/pref_fakekey_sendtocgeo_website" + android:title="@string/settings_open_website" /> + </PreferenceCategory> + </PreferenceScreen> </PreferenceCategory> - - <PreferenceCategory - android:title="@string/settings_category_browser" > - - <CheckBoxPreference + <PreferenceCategory android:title="@string/settings_category_social" > + <PreferenceScreen android:title="@string/init_twitter" > + <CheckBoxPreference + android:defaultValue="false" + android:key="@string/pref_twitter" + android:title="@string/settings_activate_twitter" /> + + <cgeo.geocaching.settings.TextPreference + android:dependency="@string/pref_twitter" + android:layout="@layout/text_preference" + android:text="@string/about_twitter" /> + + <cgeo.geocaching.settings.AuthorizeTwitterPreference + android:dependency="@string/pref_twitter" + android:key="@string/pref_fakekey_twitter_authorization" /> + </PreferenceScreen> + </PreferenceCategory> + <PreferenceCategory android:title="@string/settings_category_browser" > + <CheckBoxPreference + android:defaultValue="false" android:key="@string/pref_nativeUa" - android:title="@string/init_use_native_ua" android:summary="@string/init_summary_use_native_ua" - android:defaultValue="false" /> - + android:title="@string/init_use_native_ua" /> </PreferenceCategory> - </PreferenceScreen> - <PreferenceScreen - android:title="@string/settings_title_appearance" - android:icon="?attr/settings_eye" > - - <CheckBoxPreference + android:icon="?attr/settings_eye" + android:title="@string/settings_title_appearance" > + <CheckBoxPreference + android:defaultValue="false" android:key="@string/pref_skin" - android:title="@string/init_skin" android:summary="@string/init_summary_skin" - android:defaultValue="false" /> - <CheckBoxPreference + android:title="@string/init_skin" /> + <CheckBoxPreference + android:defaultValue="true" android:key="@string/pref_showaddress" - android:title="@string/init_address" android:summary="@string/init_summary_address" - android:defaultValue="true" /> - <CheckBoxPreference + android:title="@string/init_address" /> + <CheckBoxPreference + android:defaultValue="false" android:key="@string/pref_plainLogs" - android:title="@string/init_plain_logs" android:summary="@string/init_summary_plain_logs" - android:defaultValue="false" /> - <CheckBoxPreference + android:title="@string/init_plain_logs" /> + <CheckBoxPreference + android:defaultValue="false" android:key="@string/pref_useenglish" - android:title="@string/init_useenglish" android:summary="@string/init_summary_useenglish" - android:defaultValue="false" /> - <CheckBoxPreference + android:title="@string/init_useenglish" /> + <CheckBoxPreference + android:defaultValue="false" android:key="@string/pref_units" - android:title="@string/init_units" android:summary="@string/init_summary_units" - android:defaultValue="false" /> - + android:title="@string/init_units" /> </PreferenceScreen> - <PreferenceScreen - android:title="@string/settings_title_cachedetails" - android:icon="?attr/settings_details" > - - <CheckBoxPreference + android:icon="?attr/settings_details" + android:title="@string/settings_title_cachedetails" > + <CheckBoxPreference + android:defaultValue="true" android:key="@string/pref_autoloaddesc" - android:title="@string/init_autoload" android:summary="@string/init_summary_autoload" - android:defaultValue="true" /> - <CheckBoxPreference + android:title="@string/init_autoload" /> + <CheckBoxPreference + android:defaultValue="true" android:key="@string/pref_ratingwanted" - android:title="@string/init_ratingwanted" android:summary="@string/init_summary_ratingwanted" - android:defaultValue="true" /> - <CheckBoxPreference + android:title="@string/init_ratingwanted" /> + <CheckBoxPreference + android:defaultValue="true" android:key="@string/pref_friendlogswanted" - android:title="@string/init_friendlogswanted" android:summary="@string/init_summary_friendlogswanted" - android:defaultValue="true" /> - <CheckBoxPreference + android:title="@string/init_friendlogswanted" /> + <CheckBoxPreference + android:defaultValue="false" android:key="@string/pref_opendetailslastpage" - android:title="@string/init_openlastdetailspage" android:summary="@string/init_summary_openlastdetailspage" - android:defaultValue="false" /> - <CheckBoxPreference + android:title="@string/init_openlastdetailspage" /> + <CheckBoxPreference + android:defaultValue="true" android:key="@string/pref_livelist" - android:title="@string/init_livelist" android:summary="@string/init_summary_livelist" - android:defaultValue="true" /> - <CheckBoxPreference + android:title="@string/init_livelist" /> + <CheckBoxPreference + android:defaultValue="false" android:key="@string/pref_excludemine" - android:title="@string/init_exclude" android:summary="@string/init_summary_exclude" - android:defaultValue="false" /> - <CheckBoxPreference + android:title="@string/init_exclude" /> + <CheckBoxPreference + android:defaultValue="false" android:key="@string/pref_excludedisabled" - android:title="@string/init_disabled" android:summary="@string/init_summary_disabled" - android:defaultValue="false" /> - + android:title="@string/init_disabled" /> </PreferenceScreen> - <PreferenceScreen - android:title="@string/settings_title_map" - android:icon="?attr/settings_map" > - - <PreferenceCategory - android:title="@string/settings_title_map_data" > - + android:icon="?attr/settings_map" + android:title="@string/settings_title_map" > + <PreferenceCategory android:title="@string/settings_title_map_data" > <ListPreference - android:key="@string/pref_mapsource" - android:title="@string/init_mapsource_select" + android:defaultValue="0" android:dialogTitle="@string/init_mapsource_select" - android:defaultValue="0" /> - - <cgeo.geocaching.settings.InfoPreference - android:title="@string/settings_info_offline_maps_title" + android:key="@string/pref_mapsource" + android:title="@string/init_mapsource_select" /> + + <cgeo.geocaching.settings.InfoPreference android:text="@string/settings_info_offline_maps" + android:title="@string/settings_info_offline_maps_title" cgeo:url="@string/settings_offline_maps_url" cgeo:urlButton="@string/settings_goto_url_button" /> - + <Preference android:key="@string/pref_mapDirectory" android:title="@string/init_map_directory_description" /> - - <cgeo.geocaching.settings.InfoPreference - android:title="@string/settings_info_themes_title" + + <cgeo.geocaching.settings.InfoPreference android:text="@string/settings_info_themes" + android:title="@string/settings_info_themes_title" cgeo:url="@string/settings_themes_url" cgeo:urlButton="@string/settings_goto_url_button" /> - + <Preference android:key="@string/pref_renderthemepath" android:title="@string/init_rendertheme_folder" /> + <CheckBoxPreference + android:key="@string/pref_mapsforge_scale_text" + android:title="@string/settings_title_scale_map_text" + android:summary="@string/settings_summary_scale_map_text" + android:defaultValue="true" /> </PreferenceCategory> - - <PreferenceCategory - android:title="@string/settings_title_map_content" > - + <PreferenceCategory android:title="@string/settings_title_map_content" > <Preference - android:title="@string/init_showwaypoints" + android:selectable="false" android:summary="@string/init_showwaypoint_description" - android:selectable="false" /> + android:title="@string/init_showwaypoints" /> + <cgeo.geocaching.settings.WpThresholdPreference android:key="@string/pref_showwaypointsthreshold" android:layout="@layout/wp_threshold_preference" /> - <CheckBoxPreference + <CheckBoxPreference + android:defaultValue="true" android:key="@string/pref_maptrail" - android:title="@string/init_maptrail" android:summary="@string/init_summary_maptrail" - android:defaultValue="true" /> - + android:title="@string/init_maptrail" /> </PreferenceCategory> - </PreferenceScreen> - <PreferenceScreen - android:title="@string/settings_title_logging" - android:icon="?attr/settings_pen" > - - <PreferenceCategory - android:title="@string/init_signature"> - + android:icon="?attr/settings_pen" + android:title="@string/settings_title_logging" > + <PreferenceCategory android:title="@string/init_signature" > <cgeo.geocaching.settings.LogSignaturePreference android:key="@string/pref_signature" android:title="@string/init_signature" /> - <CheckBoxPreference - android:key="@string/pref_sigautoinsert" - android:title="@string/init_sigautoinsert" - android:defaultValue="true" /> + <CheckBoxPreference + android:defaultValue="true" + android:key="@string/pref_sigautoinsert" + android:title="@string/init_sigautoinsert" /> </PreferenceCategory> - - <PreferenceCategory - android:title="@string/settings_category_logging_other"> - - <CheckBoxPreference + <PreferenceCategory android:title="@string/settings_category_logging_other" > + <CheckBoxPreference + android:defaultValue="false" android:key="@string/pref_trackautovisit" - android:title="@string/init_trackautovisit" android:summary="@string/init_summary_trackautovisit" - android:defaultValue="false" /> - <CheckBoxPreference + android:title="@string/init_trackautovisit" /> + <CheckBoxPreference + android:defaultValue="false" android:key="@string/pref_log_offline" - android:title="@string/init_log_offline" android:summary="@string/init_summary_log_offline" - android:defaultValue="false" /> - + android:title="@string/init_log_offline" /> </PreferenceCategory> - </PreferenceScreen> - <PreferenceScreen - android:title="@string/settings_title_offlinedata" - android:icon="?attr/settings_sdcard" > - - <CheckBoxPreference + android:icon="?attr/settings_sdcard" + android:title="@string/settings_title_offlinedata" > + <CheckBoxPreference + android:defaultValue="true" android:key="@string/pref_offlinemaps" - android:title="@string/init_offline" android:summary="@string/init_summary_offline" - android:defaultValue="true" /> - <CheckBoxPreference + android:title="@string/init_offline" /> + <CheckBoxPreference + android:defaultValue="false" android:key="@string/pref_offlinewpmaps" - android:title="@string/init_offline_wp" android:summary="@string/init_summary_offline_wp" - android:defaultValue="false" /> - <CheckBoxPreference + android:title="@string/init_offline_wp" /> + <CheckBoxPreference + android:defaultValue="false" android:key="@string/pref_logimages" - android:title="@string/init_save_log_img" android:summary="@string/init_summary_save_log_img" - android:defaultValue="false" /> - <CheckBoxPreference + android:title="@string/init_save_log_img" /> + <CheckBoxPreference + android:defaultValue="true" android:key="@string/pref_choose_list" - android:title="@string/init_choose_list" android:summary="@string/init_summary_choose_list" - android:defaultValue="true" /> - + android:title="@string/init_choose_list" /> </PreferenceScreen> - <PreferenceScreen - android:title="@string/settings_title_navigation" - android:icon="?attr/settings_arrow" > - - <PreferenceCategory - android:title="@string/init_default_navigation_tool" > - + android:icon="?attr/settings_arrow" + android:title="@string/settings_title_navigation" > + <PreferenceCategory android:title="@string/init_default_navigation_tool" > <cgeo.geocaching.settings.TextPreference android:layout="@layout/text_preference" android:text="@string/init_default_navigation_tool_description" /> <ListPreference - android:key="@string/pref_defaultNavigationTool" - android:title="@string/init_default_navigation_tool_select" + android:defaultValue="0" android:dialogTitle="@string/init_default_navigation_tool_select" - android:defaultValue="0" /> + android:key="@string/pref_defaultNavigationTool" + android:title="@string/init_default_navigation_tool_select" /> </PreferenceCategory> - - <PreferenceCategory - android:title="@string/init_secondary_navigation_tool" > - + <PreferenceCategory android:title="@string/init_secondary_navigation_tool" > <cgeo.geocaching.settings.TextPreference android:layout="@layout/text_preference" android:text="@string/init_default_navigation_tool_2_description" /> <ListPreference - android:key="@string/pref_defaultNavigationTool2" - android:title="@string/init_default_navigation_tool_select" + android:defaultValue="0" android:dialogTitle="@string/init_default_navigation_tool_select" - android:defaultValue="0" /> - + android:key="@string/pref_defaultNavigationTool2" + android:title="@string/init_default_navigation_tool_select" /> </PreferenceCategory> - - <PreferenceCategory - android:title="@string/settings_title_navigation_menu" > - + <PreferenceCategory android:title="@string/settings_title_navigation_menu" > <cgeo.geocaching.settings.TextPreference android:layout="@layout/text_preference" android:text="@string/init_navigation_menu_description" /> - + <PreferenceScreen - android:title="@string/settings_title_navigation_menu" - android:key="@string/pref_fakekey_navigation_menu_screen" > - <CheckBoxPreference - android:defaultValue="true" - android:enabled="false" - android:key="@string/pref_navigation_menu_compass" - android:title="@string/compass_title" /> - <CheckBoxPreference - android:defaultValue="true" - android:enabled="false" - android:key="@string/pref_navigation_menu_radar" - android:title="@string/cache_menu_radar" /> - <CheckBoxPreference - android:defaultValue="true" - android:enabled="false" - android:key="@string/pref_navigation_menu_internal_map" - android:title="@string/cache_menu_map" /> - <CheckBoxPreference - android:defaultValue="true" - android:enabled="false" - android:key="@string/pref_navigation_menu_static_map" - android:title="@string/cache_menu_map_static" /> - <CheckBoxPreference - android:defaultValue="true" - android:enabled="false" - android:key="@string/pref_navigation_menu_static_map_download" - android:title="@string/cache_menu_download_map_static" /> - <CheckBoxPreference - android:defaultValue="true" - android:enabled="false" - android:key="@string/pref_navigation_menu_locus" - android:title="@string/caches_map_locus" /> - <CheckBoxPreference - android:defaultValue="true" - android:enabled="false" - android:key="@string/pref_navigation_menu_rmaps" - android:title="@string/cache_menu_rmaps" /> - <CheckBoxPreference - android:defaultValue="true" - android:enabled="false" - android:key="@string/pref_navigation_menu_google_maps" - android:title="@string/cache_menu_map_ext" /> - <CheckBoxPreference - android:defaultValue="true" - android:enabled="false" - android:key="@string/pref_navigation_menu_google_navigation" - android:title="@string/cache_menu_navigation_drive" /> - <CheckBoxPreference - android:defaultValue="true" - android:enabled="false" - android:key="@string/pref_navigation_menu_google_streetview" - android:title="@string/cache_menu_streetview" /> - <CheckBoxPreference - android:defaultValue="true" - android:enabled="false" - android:key="@string/pref_navigation_menu_oruxmaps" - android:title="@string/cache_menu_oruxmaps" /> - <CheckBoxPreference - android:defaultValue="true" - android:enabled="false" - android:key="@string/pref_navigation_menu_navigon" - android:title="@string/cache_menu_navigon" /> - <CheckBoxPreference - android:defaultValue="true" - android:enabled="false" - android:key="@string/pref_navigation_menu_sygic" - android:title="@string/cache_menu_sygic" /> - <CheckBoxPreference - android:defaultValue="true" - android:enabled="false" - android:key="@string/pref_navigation_menu_google_walk" - android:title="@string/cache_menu_navigation_walk" /> - <CheckBoxPreference - android:defaultValue="true" - android:enabled="false" - android:key="@string/pref_navigation_menu_google_bike" - android:title="@string/cache_menu_navigation_bike" /> - <CheckBoxPreference - android:defaultValue="true" - android:enabled="false" - android:key="@string/pref_navigation_menu_google_maps_directions" - android:title="@string/cache_menu_maps_directions" /> - <CheckBoxPreference - android:defaultValue="true" - android:enabled="false" - android:key="@string/pref_navigation_menu_cache_beacon" - android:title="@string/cache_menu_cachebeacon" /> - <CheckBoxPreference - android:defaultValue="true" - android:enabled="false" - android:key="@string/pref_navigation_menu_gcc" - android:title="@string/cache_menu_gcc" /> - <CheckBoxPreference - android:defaultValue="true" - android:enabled="false" - android:key="@string/pref_navigation_menu_where_you_go" - android:title="@string/cache_menu_whereyougo" /> - </PreferenceScreen> - </PreferenceCategory> + android:key="@string/pref_fakekey_navigation_menu_screen" + android:title="@string/settings_title_navigation_menu" > + <CheckBoxPreference + android:defaultValue="true" + android:enabled="false" + android:key="@string/pref_navigation_menu_compass" + android:title="@string/compass_title" /> + <CheckBoxPreference + android:defaultValue="true" + android:enabled="false" + android:key="@string/pref_navigation_menu_radar" + android:title="@string/cache_menu_radar" /> + <CheckBoxPreference + android:defaultValue="true" + android:enabled="false" + android:key="@string/pref_navigation_menu_internal_map" + android:title="@string/cache_menu_map" /> + <CheckBoxPreference + android:defaultValue="true" + android:enabled="false" + android:key="@string/pref_navigation_menu_static_map" + android:title="@string/cache_menu_map_static" /> + <CheckBoxPreference + android:defaultValue="true" + android:enabled="false" + android:key="@string/pref_navigation_menu_static_map_download" + android:title="@string/cache_menu_download_map_static" /> + <CheckBoxPreference + android:defaultValue="true" + android:enabled="false" + android:key="@string/pref_navigation_menu_locus" + android:title="@string/caches_map_locus" /> + <CheckBoxPreference + android:defaultValue="true" + android:enabled="false" + android:key="@string/pref_navigation_menu_rmaps" + android:title="@string/cache_menu_rmaps" /> + <CheckBoxPreference + android:defaultValue="true" + android:enabled="false" + android:key="@string/pref_navigation_menu_google_maps" + android:title="@string/cache_menu_map_ext" /> + <CheckBoxPreference + android:defaultValue="true" + android:enabled="false" + android:key="@string/pref_navigation_menu_google_navigation" + android:title="@string/cache_menu_navigation_drive" /> + <CheckBoxPreference + android:defaultValue="true" + android:enabled="false" + android:key="@string/pref_navigation_menu_google_streetview" + android:title="@string/cache_menu_streetview" /> + <CheckBoxPreference + android:defaultValue="true" + android:enabled="false" + android:key="@string/pref_navigation_menu_oruxmaps" + android:title="@string/cache_menu_oruxmaps" /> + <CheckBoxPreference + android:defaultValue="true" + android:enabled="false" + android:key="@string/pref_navigation_menu_navigon" + android:title="@string/cache_menu_navigon" /> + <CheckBoxPreference + android:defaultValue="true" + android:enabled="false" + android:key="@string/pref_navigation_menu_sygic" + android:title="@string/cache_menu_sygic" /> + <CheckBoxPreference + android:defaultValue="true" + android:enabled="false" + android:key="@string/pref_navigation_menu_google_walk" + android:title="@string/cache_menu_navigation_walk" /> + <CheckBoxPreference + android:defaultValue="true" + android:enabled="false" + android:key="@string/pref_navigation_menu_google_bike" + android:title="@string/cache_menu_navigation_bike" /> + <CheckBoxPreference + android:defaultValue="true" + android:enabled="false" + android:key="@string/pref_navigation_menu_google_maps_directions" + android:title="@string/cache_menu_maps_directions" /> + <CheckBoxPreference + android:defaultValue="true" + android:enabled="false" + android:key="@string/pref_navigation_menu_cache_beacon" + android:title="@string/cache_menu_cachebeacon" /> + <CheckBoxPreference + android:defaultValue="true" + android:enabled="false" + android:key="@string/pref_navigation_menu_gcc" + android:title="@string/cache_menu_gcc" /> + <CheckBoxPreference + android:defaultValue="true" + android:enabled="false" + android:key="@string/pref_navigation_menu_where_you_go" + android:title="@string/cache_menu_whereyougo" /> + </PreferenceScreen> + </PreferenceCategory> </PreferenceScreen> - <PreferenceScreen - android:title="@string/settings_title_system" - android:icon="?attr/settings_nut" > - - <PreferenceCategory - android:title="@string/settings_title_gpx" > - + android:icon="?attr/settings_nut" + android:title="@string/settings_title_system" > + <PreferenceCategory android:title="@string/settings_title_gpx" > <Preference android:key="@string/pref_gpxExportDir" android:title="@string/init_gpx_exportdir" /> <Preference android:key="@string/pref_gpxImportDir" android:title="@string/init_gpx_importdir" /> - </PreferenceCategory> - - <PreferenceCategory - android:title="@string/init_backup" > - + <PreferenceCategory android:title="@string/init_backup" > <cgeo.geocaching.settings.TextPreference android:key="@string/pref_fakekey_preference_backup_info" android:layout="@layout/text_preference" android:text="@string/init_backup_note" /> - <Preference + + <Preference android:key="@string/pref_fakekey_preference_backup" android:title="@string/init_backup_backup" /> - <Preference + <Preference android:key="@string/pref_fakekey_preference_restore" android:title="@string/init_backup_restore" /> - </PreferenceCategory> - - <PreferenceCategory - android:title="@string/init_dbonsdcard_title" > - + <PreferenceCategory android:title="@string/init_dbonsdcard_title" > <cgeo.geocaching.settings.TextPreference android:layout="@layout/text_preference" android:text="@string/init_dbonsdcard_note" /> - <CheckBoxPreference - android:key="@string/pref_dbonsdcard" - android:title="@string/init_dbonsdcard" - android:defaultValue="false" /> + <CheckBoxPreference + android:defaultValue="false" + android:key="@string/pref_dbonsdcard" + android:title="@string/init_dbonsdcard" /> </PreferenceCategory> - - <PreferenceCategory - android:title="@string/init_debug_title" > - + <PreferenceCategory android:title="@string/init_debug_title" > <cgeo.geocaching.settings.TextPreference android:layout="@layout/text_preference" android:text="@string/init_debug_note" /> - <CheckBoxPreference - android:key="@string/pref_debug" - android:title="@string/init_debug" - android:defaultValue="false" /> + <CheckBoxPreference + android:defaultValue="false" + android:key="@string/pref_debug" + android:title="@string/init_debug" /> </PreferenceCategory> - </PreferenceScreen> -</PreferenceScreen> +</PreferenceScreen>
\ No newline at end of file diff --git a/main/src/cgeo/geocaching/AbstractPopupActivity.java b/main/src/cgeo/geocaching/AbstractPopupActivity.java index 1cf0353..6314003 100644 --- a/main/src/cgeo/geocaching/AbstractPopupActivity.java +++ b/main/src/cgeo/geocaching/AbstractPopupActivity.java @@ -64,7 +64,7 @@ public abstract class AbstractPopupActivity extends AbstractActivity { cacheDistance.bringToFront(); } onUpdateGeoData(geo); - } catch (final Exception e) { + } catch (final RuntimeException e) { Log.w("Failed to UpdateLocation location."); } } @@ -109,7 +109,7 @@ public abstract class AbstractPopupActivity extends AbstractActivity { } protected void init() { - cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); + cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); if (cache == null) { showToast(res.getString(R.string.err_detail_cache_find)); @@ -209,7 +209,7 @@ public abstract class AbstractPopupActivity extends AbstractActivity { menu.findItem(R.id.menu_default_navigation).setTitle(NavigationAppFactory.getDefaultNavigationApplication().getName()); LoggingUI.onPrepareOptionsMenu(menu, cache); - } catch (final Exception e) { + } catch (final RuntimeException e) { // nothing } @@ -285,7 +285,7 @@ public abstract class AbstractPopupActivity extends AbstractActivity { showToast(res.getString(R.string.err_location_unknown)); return; } - cgeocaches.startActivityCoordinates(this, coords); + CacheListActivity.startActivityCoordinates(this, coords); finish(); } diff --git a/main/src/cgeo/geocaching/AddressListActivity.java b/main/src/cgeo/geocaching/AddressListActivity.java index c984d28..dcccb66 100644 --- a/main/src/cgeo/geocaching/AddressListActivity.java +++ b/main/src/cgeo/geocaching/AddressListActivity.java @@ -66,7 +66,7 @@ public class AddressListActivity extends AbstractListActivity { } } else { finish(); - cgeocaches.startActivityAddress(AddressListActivity.this, null, keyword); + CacheListActivity.startActivityAddress(AddressListActivity.this, null, keyword); } } diff --git a/main/src/cgeo/geocaching/CacheCache.java b/main/src/cgeo/geocaching/CacheCache.java index e70b7a0..b3c674c 100644 --- a/main/src/cgeo/geocaching/CacheCache.java +++ b/main/src/cgeo/geocaching/CacheCache.java @@ -1,6 +1,6 @@ package cgeo.geocaching; -import cgeo.geocaching.cgData.StorageLocation; +import cgeo.geocaching.DataStore.StorageLocation; import cgeo.geocaching.connector.gc.Tile; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.geopoint.Viewport; diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index 4a9cc6e..1486af2 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())); @@ -493,14 +493,14 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc case CONTEXT_MENU_WAYPOINT_DUPLICATE: final Waypoint waypointDuplicate = cache.getWaypoint(index); if (cache.duplicateWaypoint(waypointDuplicate)) { - cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); + DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); notifyDataSetChanged(); } break; case CONTEXT_MENU_WAYPOINT_DELETE: final Waypoint waypointDelete = cache.getWaypoint(index); if (cache.deleteWaypoint(waypointDelete)) { - cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); + DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); notifyDataSetChanged(); } break; @@ -519,7 +519,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc case CONTEXT_MENU_WAYPOINT_CACHES_AROUND: final Waypoint waypointAround = cache.getWaypoint(index); if (waypointAround != null) { - cgeocaches.startActivityCoordinates(this, waypointAround.getCoords()); + CacheListActivity.startActivityCoordinates(this, waypointAround.getCoords()); } break; @@ -588,7 +588,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc cache.openInBrowser(this); return true; case MENU_CACHES_AROUND: - cgeocaches.startActivityCoordinates(this, cache.getCoords()); + CacheListActivity.startActivityCoordinates(this, cache.getCoords()); return true; case MENU_CALENDAR: addToCalendarWithIntent(); @@ -1134,7 +1134,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc if (time > 0) { String dateString = Formatter.formatFullDate(time); if (cache.isEventCache()) { - dateString = DateUtils.formatDateTime(cgeoapplication.getInstance().getBaseContext(), time, DateUtils.FORMAT_SHOW_WEEKDAY) + ", " + dateString; + dateString = DateUtils.formatDateTime(CgeoApplication.getInstance().getBaseContext(), time, DateUtils.FORMAT_SHOW_WEEKDAY) + ", " + dateString; } details.add(cache.isEventCache() ? R.string.cache_event : R.string.cache_hidden, dateString); } @@ -1279,7 +1279,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc private Handler handler; public DropCacheThread(Handler handler) { - super(); this.handler = handler; } @@ -1481,7 +1480,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } Settings.saveLastList(listId); - cgData.moveToList(cache, listId); + DataStore.moveToList(cache, listId); updateListBox(); } @@ -1564,7 +1563,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc // update text final TextView text = (TextView) view.findViewById(R.id.list_text); - final StoredList list = cgData.getList(cache.getListId()); + final StoredList list = DataStore.getList(cache.getListId()); if (list != null) { text.setText(res.getString(R.string.cache_list_text) + " " + list.title); } else { @@ -1615,7 +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)); @@ -2197,7 +2201,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc cache.setCoords(wpt.getCoords()); cache.setUserModifiedCoords(false); cache.deleteWaypointForce(wpt); - cgData.saveChangedCache(cache); + DataStore.saveChangedCache(cache); handler.sendEmptyMessage(LOCAL); } @@ -2452,7 +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(); @@ -2491,7 +2495,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc cache.parseWaypointsFromNote(); TextView personalNoteView = (TextView) activity.findViewById(R.id.personalnote); setPersonalNote(personalNoteView, note); - cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); + DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); activity.notifyDataSetChanged(); } }; diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/CacheListActivity.java index 59174f5..470a16a 100644 --- a/main/src/cgeo/geocaching/cgeocaches.java +++ b/main/src/cgeo/geocaching/CacheListActivity.java @@ -80,7 +80,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -public class cgeocaches extends AbstractListActivity implements FilteredActivity, LoaderManager.LoaderCallbacks<SearchResult> { +public class CacheListActivity extends AbstractListActivity implements FilteredActivity, LoaderManager.LoaderCallbacks<SearchResult> { private static final int MAX_LIST_ITEMS = 1000; private static final int MENU_REFRESH_STORED = 2; @@ -152,7 +152,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } if (app.currentGeo().getSpeed() <= 5) { // use compass when speed is lower than 18 km/h) { - final float northHeading = DirectionProvider.getDirectionNow(cgeocaches.this, direction); + final float northHeading = DirectionProvider.getDirectionNow(CacheListActivity.this, direction); adapter.setActualHeading(northHeading); } } @@ -211,7 +211,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity setAdapterCurrentCoordinates(false); } catch (final Exception e) { showToast(res.getString(R.string.err_detail_cache_find_any)); - Log.e("cgeocaches.loadCachesHandler", e); + Log.e("CacheListActivity.loadCachesHandler", e); hideLoading(); showProgress(false); @@ -224,7 +224,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity hideLoading(); showProgress(false); } catch (final Exception e2) { - Log.e("cgeocaches.loadCachesHandler.2", e2); + Log.e("CacheListActivity.loadCachesHandler.2", e2); } adapter.setSelectMode(false); @@ -232,15 +232,15 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity private final Handler loadCachesHandler = new LoadCachesHandler(this); - private static class LoadCachesHandler extends WeakReferenceHandler<cgeocaches> { + private static class LoadCachesHandler extends WeakReferenceHandler<CacheListActivity> { - protected LoadCachesHandler(cgeocaches activity) { + protected LoadCachesHandler(CacheListActivity activity) { super(activity); } @Override public void handleMessage(Message msg) { - final cgeocaches activity = getActivity(); + final CacheListActivity activity = getActivity(); if (activity == null) { return; } @@ -398,7 +398,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity private AbstractSearchLoader currentLoader; private String newListName = StringUtils.EMPTY; - public cgeocaches() { + public CacheListActivity() { super(true); } @@ -469,7 +469,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity private boolean isConcreteList() { return type == CacheListType.OFFLINE && - (listId == StoredList.STANDARD_LIST_ID || listId >= cgData.customListIdOffset); + (listId == StoredList.STANDARD_LIST_ID || listId >= DataStore.customListIdOffset); } private boolean isInvokedFromAttachment() { @@ -481,7 +481,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity @Override public void run(Integer listId) { - new GPXImporter(cgeocaches.this, listId, importGpxAttachementFinishedHandler).importGPX(); + new GPXImporter(CacheListActivity.this, listId, importGpxAttachementFinishedHandler).importGPX(); switchListById(listId); } }, true, 0); @@ -503,7 +503,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity // refresh standard list if it has changed (new caches downloaded) if (type == CacheListType.OFFLINE && listId >= StoredList.STANDARD_LIST_ID && search != null) { - final SearchResult newSearch = cgData.getBatchOfStoredCaches(coords, Settings.getCacheType(), listId); + final SearchResult newSearch = DataStore.getBatchOfStoredCaches(coords, Settings.getCacheType(), listId); if (newSearch.getTotal() != search.getTotal()) { refreshCurrentList(); } @@ -643,7 +643,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity item.setVisible(isNonDefaultList); } - final boolean multipleLists = cgData.getLists().size() >= 2; + final boolean multipleLists = DataStore.getLists().size() >= 2; item = menu.findItem(MENU_SWITCH_LIST); if (item != null) { item.setVisible(multipleLists); @@ -655,8 +655,8 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity setMenuItemLabel(menu, MENU_REMOVE_FROM_HISTORY, R.string.cache_remove_from_history, R.string.cache_clear_history); setMenuItemLabel(menu, MENU_EXPORT, R.string.export, R.string.export); - } catch (final Exception e) { - Log.e("cgeocaches.onPrepareOptionsMenu", e); + } catch (final RuntimeException e) { + Log.e("CacheListActivity.onPrepareOptionsMenu", e); } return true; @@ -832,7 +832,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity try { adapterInfo = (AdapterContextMenuInfo) info; } catch (final Exception e) { - Log.w("cgeocaches.onCreateContextMenu", e); + Log.w("CacheListActivity.onCreateContextMenu", e); } if (adapterInfo == null || adapterInfo.position >= adapter.getCount()) { @@ -866,7 +866,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity @Override public void run(Integer newListId) { - cgData.moveToList(adapter.getCheckedOrAllCaches(), newListId); + DataStore.moveToList(adapter.getCheckedOrAllCaches(), newListId); adapter.setSelectMode(false); refreshCurrentList(); @@ -889,7 +889,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity try { adapterInfo = (AdapterContextMenuInfo) info; } catch (final Exception e) { - Log.w("cgeocaches.onContextItemSelected", e); + Log.w("CacheListActivity.onContextItemSelected", e); } final Geocache cache = adapterInfo != null ? getCacheFromAdapter(adapterInfo) : null; @@ -924,7 +924,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity @Override public void run(Integer newListId) { - cgData.moveToList(Collections.singletonList(cache), newListId); + DataStore.moveToList(Collections.singletonList(cache), newListId); adapter.setSelectMode(false); refreshCurrentList(); } @@ -1265,7 +1265,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity Log.i("Waiting for next cache " + delay + " ms"); } catch (final Exception e) { - Log.e("cgeocaches.LoadDetailsThread.sleep", e); + Log.e("CacheListActivity.LoadDetailsThread.sleep", e); } } @@ -1283,7 +1283,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity Log.i(e.getMessage()); return false; } catch (final Exception e) { - Log.e("cgeocaches.LoadDetailsThread", e); + Log.e("CacheListActivity.LoadDetailsThread", e); } last = System.currentTimeMillis(); @@ -1326,7 +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(); @@ -1363,7 +1363,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity times = 0; } } catch (final InterruptedException e) { - Log.e("cgeocaches.LoadFromWebThread.sleep", e); + Log.e("CacheListActivity.LoadFromWebThread.sleep", e); } } @@ -1378,14 +1378,14 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity private final boolean removeListAfterwards; public DropDetailsTask(boolean removeListAfterwards) { - super(cgeocaches.this, null, res.getString(R.string.caches_drop_progress), true); + super(CacheListActivity.this, null, res.getString(R.string.caches_drop_progress), true); this.removeListAfterwards = removeListAfterwards; } @Override protected Void doInBackgroundInternal(Geocache[] caches) { removeGeoAndDir(); - cgData.markDropped(Arrays.asList(caches)); + DataStore.markDropped(Arrays.asList(caches)); startGeoAndDir(); return null; } @@ -1416,7 +1416,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity @Override public void run() { - cgData.clearLogsOffline(selected); + DataStore.clearLogsOffline(selected); handler.sendEmptyMessage(MSG_DONE); } } @@ -1429,7 +1429,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity showFooterLoadingCaches(); listFooter.setOnClickListener(null); - getSupportLoaderManager().restartLoader(CacheListLoaderType.NEXT_PAGE.ordinal(), null, cgeocaches.this); + getSupportLoaderManager().restartLoader(CacheListLoaderType.NEXT_PAGE.ordinal(), null, CacheListActivity.this); } } @@ -1468,7 +1468,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity return; } - final StoredList list = cgData.getList(id); + final StoredList list = DataStore.getList(id); if (list == null) { return; } @@ -1480,7 +1480,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity showProgress(true); showFooterLoadingCaches(); - cgData.moveToList(adapter.getCheckedCaches(), listId); + DataStore.moveToList(adapter.getCheckedCaches(), listId); currentLoader = (OfflineGeocacheListLoader) getSupportLoaderManager().initLoader(CacheListType.OFFLINE.ordinal(), new Bundle(), this); currentLoader.reset(); @@ -1503,7 +1503,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } private void removeListInternal() { - if (cgData.removeList(listId)) { + if (DataStore.removeList(listId)) { showToast(res.getString(R.string.list_dialog_remove_ok)); switchListById(StoredList.STANDARD_LIST_ID); } else { @@ -1576,7 +1576,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity } public static void startActivityOffline(final Context context) { - final Intent cachesIntent = new Intent(context, cgeocaches.class); + final Intent cachesIntent = new Intent(context, CacheListActivity.class); cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.OFFLINE); context.startActivity(cachesIntent); } @@ -1585,7 +1585,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity if (!isValidUsername(context, userName)) { return; } - final Intent cachesIntent = new Intent(context, cgeocaches.class); + final Intent cachesIntent = new Intent(context, CacheListActivity.class); cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.OWNER); cachesIntent.putExtra(Intents.EXTRA_USERNAME, userName); context.startActivity(cachesIntent); @@ -1593,7 +1593,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity private static boolean isValidUsername(AbstractActivity context, String username) { if (StringUtils.isBlank(username)) { - context.showToast(cgeoapplication.getInstance().getString(R.string.warn_no_username)); + context.showToast(CgeoApplication.getInstance().getString(R.string.warn_no_username)); return false; } return true; @@ -1603,7 +1603,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity if (!isValidUsername(context, userName)) { return; } - final Intent cachesIntent = new Intent(context, cgeocaches.class); + final Intent cachesIntent = new Intent(context, CacheListActivity.class); cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.USERNAME); cachesIntent.putExtra(Intents.EXTRA_USERNAME, userName); context.startActivity(cachesIntent); @@ -1629,20 +1629,20 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity if (!isValidCoords(context, coordsNow)) { return; } - final Intent cachesIntent = new Intent(context, cgeocaches.class); + final Intent cachesIntent = new Intent(context, CacheListActivity.class); cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.NEAREST); cachesIntent.putExtra(Intents.EXTRA_COORDS, coordsNow); context.startActivity(cachesIntent); } public static void startActivityHistory(Context context) { - final Intent cachesIntent = new Intent(context, cgeocaches.class); + final Intent cachesIntent = new Intent(context, CacheListActivity.class); cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.HISTORY); context.startActivity(cachesIntent); } public static void startActivityAddress(final Context context, final Geopoint coords, final String address) { - final Intent addressIntent = new Intent(context, cgeocaches.class); + final Intent addressIntent = new Intent(context, CacheListActivity.class); addressIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.ADDRESS); addressIntent.putExtra(Intents.EXTRA_COORDS, coords); addressIntent.putExtra(Intents.EXTRA_ADDRESS, address); @@ -1653,7 +1653,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity if (!isValidCoords(context, coords)) { return; } - final Intent cachesIntent = new Intent(context, cgeocaches.class); + final Intent cachesIntent = new Intent(context, CacheListActivity.class); cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.COORDINATE); cachesIntent.putExtra(Intents.EXTRA_COORDS, coords); context.startActivity(cachesIntent); @@ -1661,7 +1661,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity private static boolean isValidCoords(AbstractActivity context, Geopoint coords) { if (coords == null) { - context.showToast(cgeoapplication.getInstance().getString(R.string.warn_no_coordinates)); + context.showToast(CgeoApplication.getInstance().getString(R.string.warn_no_coordinates)); return false; } return true; @@ -1669,17 +1669,17 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity public static void startActivityKeyword(final AbstractActivity context, final String keyword) { if (keyword == null) { - context.showToast(cgeoapplication.getInstance().getString(R.string.warn_no_keyword)); + context.showToast(CgeoApplication.getInstance().getString(R.string.warn_no_keyword)); return; } - final Intent cachesIntent = new Intent(context, cgeocaches.class); + final Intent cachesIntent = new Intent(context, CacheListActivity.class); cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.KEYWORD); cachesIntent.putExtra(Intents.EXTRA_KEYWORD, keyword); context.startActivity(cachesIntent); } public static void startActivityMap(final Context context, final SearchResult search) { - final Intent cachesIntent = new Intent(context, cgeocaches.class); + final Intent cachesIntent = new Intent(context, CacheListActivity.class); cachesIntent.putExtra(Intents.EXTRA_LIST_TYPE, CacheListType.MAP); cachesIntent.putExtra(Intents.EXTRA_SEARCH, search); context.startActivity(cachesIntent); @@ -1701,7 +1701,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity listId = StoredList.STANDARD_LIST_ID; title = res.getString(R.string.stored_caches_button); } else { - final StoredList list = cgData.getList(listId); + final StoredList list = DataStore.getList(listId); // list.id may be different if listId was not valid listId = list.id; title = list.title; diff --git a/main/src/cgeo/geocaching/cgeoapplication.java b/main/src/cgeo/geocaching/CgeoApplication.java index 5a793f5..b725b0b 100644 --- a/main/src/cgeo/geocaching/cgeoapplication.java +++ b/main/src/cgeo/geocaching/CgeoApplication.java @@ -14,7 +14,7 @@ import android.os.Message; import java.util.concurrent.atomic.AtomicBoolean; -public class cgeoapplication extends Application { +public class CgeoApplication extends Application { private volatile GeoDataProvider geo; private volatile DirectionProvider dir; @@ -22,17 +22,17 @@ public class cgeoapplication extends Application { public boolean showLoginToast = true; //login toast shown just once. private boolean liveMapHintShown = false; // livemap hint has been shown final private StatusUpdater statusUpdater = new StatusUpdater(); - private static cgeoapplication instance; + private static CgeoApplication instance; - public cgeoapplication() { + public CgeoApplication() { setInstance(this); } - private static void setInstance(final cgeoapplication application) { + private static void setInstance(final CgeoApplication application) { instance = application; } - public static cgeoapplication getInstance() { + public static CgeoApplication getInstance() { return instance; } @@ -46,15 +46,15 @@ public class cgeoapplication extends Application { @Override public void onLowMemory() { Log.i("Cleaning applications cache."); - cgData.removeAllFromCache(); + DataStore.removeAllFromCache(); } @Override public void onTerminate() { Log.d("Terminating c:geoโฆ"); - cgData.clean(); - cgData.closeDb(); + DataStore.clean(); + DataStore.closeDb(); super.onTerminate(); } @@ -82,7 +82,7 @@ public class cgeoapplication extends Application { @Override public void run() { - atomic.set(cgData.moveDatabase()); + atomic.set(DataStore.moveDatabase()); handler.sendMessage(handler.obtainMessage()); } }; diff --git a/main/src/cgeo/geocaching/CompassActivity.java b/main/src/cgeo/geocaching/CompassActivity.java index 002f00e..b7bed7d 100644 --- a/main/src/cgeo/geocaching/CompassActivity.java +++ b/main/src/cgeo/geocaching/CompassActivity.java @@ -134,7 +134,7 @@ public class CompassActivity extends AbstractActivity { setCacheInfo(); // Force a refresh of location and direction when data is available. - final cgeoapplication app = cgeoapplication.getInstance(); + final CgeoApplication app = CgeoApplication.getInstance(); final IGeoData geo = app.currentGeo(); if (geo != null) { geoDirHandler.update(geo); @@ -282,7 +282,7 @@ public class CompassActivity extends AbstractActivity { if (!Settings.isUseCompass() || geo.getSpeed() > 5) { // use GPS when speed is higher than 18 km/h updateNorthHeading(geo.getBearing()); } - } catch (Exception e) { + } catch (RuntimeException e) { Log.w("Failed to LocationUpdater location."); } } diff --git a/main/src/cgeo/geocaching/cgData.java b/main/src/cgeo/geocaching/DataStore.java index 9d636f9..93067b8 100644 --- a/main/src/cgeo/geocaching/cgData.java +++ b/main/src/cgeo/geocaching/DataStore.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; @@ -51,9 +52,9 @@ import java.util.Map.Entry; import java.util.Set; import java.util.regex.Pattern; -public class cgData { +public class DataStore { - private cgData() { + private DataStore() { // utility class } @@ -293,10 +294,10 @@ public class cgData { } try { - final DbHelper dbHelper = new DbHelper(new DBContext(cgeoapplication.getInstance())); + final DbHelper dbHelper = new DbHelper(new DBContext(CgeoApplication.getInstance())); database = dbHelper.getWritableDatabase(); } catch (Exception e) { - Log.e("cgData.init: unable to open database for R/W", e); + Log.e("DataStore.init: unable to open database for R/W", e); } } @@ -756,7 +757,7 @@ public class cgData { // to NPE traces. final int staleHistorySearches = db.delete(dbTableSearchDestionationHistory, "date is null", null); if (staleHistorySearches > 0) { - Log.w(String.format(Locale.getDefault(), "cgData.dbHelper.onOpen: removed %d bad search history entries", staleHistorySearches)); + Log.w(String.format(Locale.getDefault(), "DataStore.dbHelper.onOpen: removed %d bad search history entries", staleHistorySearches)); } } @@ -859,7 +860,7 @@ public class cgData { return getFirstColumn(cursor); } catch (final Exception e) { - Log.e("cgData.allDetailedThere", e); + Log.e("DataStore.allDetailedThere", e); return new String[0]; } } @@ -906,7 +907,7 @@ public class cgData { cursor.close(); } catch (final Exception e) { - Log.e("cgData.isThere", e); + Log.e("DataStore.isThere", e); } if (detailed && dataDetailed == 0) { @@ -953,7 +954,7 @@ public class cgData { } catch (SQLiteDoneException e) { // Do nothing, it only means we have no information on the cache } catch (Exception e) { - Log.e("cgData.isOffline", e); + Log.e("DataStore.isOffline", e); } return false; @@ -974,7 +975,7 @@ public class cgData { } catch (SQLiteDoneException e) { // Do nothing, it only means we have no information on the cache } catch (Exception e) { - Log.e("cgData.getGeocodeForGuid", e); + Log.e("DataStore.getGeocodeForGuid", e); } return null; @@ -995,7 +996,7 @@ public class cgData { } catch (SQLiteDoneException e) { // Do nothing, it only means we have no information on the cache } catch (Exception e) { - Log.e("cgData.getCacheidForGeocode", e); + Log.e("DataStore.getCacheidForGeocode", e); } return null; @@ -1496,7 +1497,7 @@ public class cgData { } if (remaining.size() >= 1) { - Log.d("cgData.loadCaches(" + remaining.toString() + ") returned no results"); + Log.d("DataStore.loadCaches(" + remaining.toString() + ") returned no results"); } return result; } @@ -1527,7 +1528,7 @@ public class cgData { } query.append(" WHERE ").append(dbTableCaches).append('.'); - query.append(cgData.whereGeocodeIn(geocodes)); + query.append(DataStore.whereGeocodeIn(geocodes)); Cursor cursor = database.rawQuery(query.toString(), null); try { @@ -1535,7 +1536,7 @@ public class cgData { int logIndex = -1; while (cursor.moveToNext()) { - Geocache cache = cgData.createCacheFromDatabaseContent(cursor); + Geocache cache = DataStore.createCacheFromDatabaseContent(cursor); if (loadFlags.contains(LoadFlag.LOAD_ATTRIBUTES)) { cache.setAttributes(loadAttributes(cache.getGeocode())); @@ -1716,7 +1717,7 @@ public class cgData { null, "1"); - Log.d("cgData.loadWaypoint(" + id + ")"); + Log.d("DataStore.loadWaypoint(" + id + ")"); final Waypoint waypoint = cursor.moveToFirst() ? createWaypointFromDatabaseContent(cursor) : null; @@ -2037,7 +2038,7 @@ public class cgData { } return (int) compiledStmnt.simpleQueryForLong(); } catch (Exception e) { - Log.e("cgData.loadAllStoredCachesCount", e); + Log.e("DataStore.loadAllStoredCachesCount", e); } return 0; @@ -2049,7 +2050,7 @@ public class cgData { try { return (int) PreparedStatements.getCountHistoryCaches().simpleQueryForLong(); } catch (Exception e) { - Log.e("cgData.getAllHistoricCachesCount", e); + Log.e("DataStore.getAllHistoricCachesCount", e); } return 0; @@ -2114,7 +2115,7 @@ public class cgData { cursor.close(); } catch (final Exception e) { - Log.e("cgData.loadBatchOfStoredGeocodes", e); + Log.e("DataStore.loadBatchOfStoredGeocodes", e); } return geocodes; @@ -2151,7 +2152,7 @@ public class cgData { } cursor.close(); } catch (Exception e) { - Log.e("cgData.loadBatchOfHistoricGeocodes", e); + Log.e("DataStore.loadBatchOfHistoricGeocodes", e); } return geocodes; @@ -2221,7 +2222,7 @@ public class cgData { cursor.close(); } catch (final Exception e) { - Log.e("cgData.loadInViewport", e); + Log.e("DataStore.loadInViewport", e); } return new SearchResult(geocodes); @@ -2285,7 +2286,7 @@ public class cgData { removeCaches(geocodes, LoadFlags.REMOVE_ALL); } } catch (final Exception e) { - Log.w("cgData.clean", e); + Log.w("DataStore.clean", e); } Log.d("Database clean: finished"); @@ -2356,11 +2357,11 @@ public class cgData { public static boolean saveLogOffline(String geocode, Date date, LogType type, String log) { if (StringUtils.isBlank(geocode)) { - Log.e("cgData.saveLogOffline: cannot log a blank geocode"); + Log.e("DataStore.saveLogOffline: cannot log a blank geocode"); return false; } if (LogType.UNKNOWN == type && StringUtils.isBlank(log)) { - Log.e("cgData.saveLogOffline: cannot log an unknown log type and no message"); + Log.e("DataStore.saveLogOffline: cannot log an unknown log type and no message"); return false; } @@ -2451,7 +2452,7 @@ public class cgData { return logCount.simpleQueryForLong() > 0; } } catch (Exception e) { - Log.e("cgData.hasLogOffline", e); + Log.e("DataStore.hasLogOffline", e); } return false; @@ -2479,10 +2480,11 @@ public class cgData { } } + @NonNull public static List<StoredList> getLists() { init(); - final Resources res = cgeoapplication.getInstance().getResources(); + final Resources res = CgeoApplication.getInstance().getResources(); final List<StoredList> lists = new ArrayList<StoredList>(); lists.add(new StoredList(StoredList.STANDARD_LIST_ID, res.getString(R.string.list_inbox), (int) PreparedStatements.getCountCachesOnStandardList().simpleQueryForLong())); @@ -2498,7 +2500,7 @@ public class cgData { lists.addAll(storedLists); cursor.close(); } catch (final Exception e) { - Log.e("cgData.readLists", e); + Log.e("DataStore.readLists", e); } return lists; } @@ -2534,7 +2536,7 @@ public class cgData { } } - Resources res = cgeoapplication.getInstance().getResources(); + Resources res = CgeoApplication.getInstance().getResources(); if (id == StoredList.ALL_LIST_ID) { return new StoredList(StoredList.ALL_LIST_ID, res.getString(R.string.list_all_lists), getAllCachesCount()); } @@ -2738,7 +2740,7 @@ public class cgData { } catch (SQLiteDoneException e) { // Do nothing, it only means we have no information on the cache } catch (Exception e) { - Log.e("cgData.getCacheDescription", e); + Log.e("DataStore.getCacheDescription", e); } return partial; @@ -2848,7 +2850,7 @@ public class cgData { } public static boolean saveChangedCache(Geocache cache) { - return cgData.saveCache(cache, cache.getStorageLocation().contains(StorageLocation.DATABASE) ? LoadFlags.SAVE_ALL : EnumSet.of(SaveFlag.SAVE_CACHE)); + return DataStore.saveCache(cache, cache.getStorageLocation().contains(StorageLocation.DATABASE) ? LoadFlags.SAVE_ALL : EnumSet.of(SaveFlag.SAVE_CACHE)); } private static class PreparedStatements { @@ -2910,7 +2912,7 @@ public class cgData { } private static SQLiteStatement getLogCountOfGeocode() { - return getStatement("LogCountFromGeocode", "SELECT count(_id) FROM " + cgData.dbTableLogsOffline + " WHERE geocode = ?"); + return getStatement("LogCountFromGeocode", "SELECT count(_id) FROM " + DataStore.dbTableLogsOffline + " WHERE geocode = ?"); } private static SQLiteStatement getCountCachesOnStandardList() { @@ -2960,7 +2962,7 @@ public class cgData { return null; } - return cgData.getBounds(Collections.singleton(geocode)); + return DataStore.getBounds(Collections.singleton(geocode)); } public static void clearVisitDate(String[] selected) { @@ -2968,18 +2970,18 @@ public class cgData { } public static SearchResult getBatchOfStoredCaches(Geopoint coords, CacheType cacheType, int listId) { - final Set<String> geocodes = cgData.loadBatchOfStoredGeocodes(coords, cacheType, listId); - return new SearchResult(geocodes, cgData.getAllStoredCachesCount(cacheType, listId)); + final Set<String> geocodes = DataStore.loadBatchOfStoredGeocodes(coords, cacheType, listId); + return new SearchResult(geocodes, DataStore.getAllStoredCachesCount(cacheType, listId)); } public static SearchResult getHistoryOfCaches(boolean detailedOnly, CacheType cacheType) { - final Set<String> geocodes = cgData.loadBatchOfHistoricGeocodes(detailedOnly, cacheType); - return new SearchResult(geocodes, cgData.getAllHistoryCachesCount()); + final Set<String> geocodes = DataStore.loadBatchOfHistoricGeocodes(detailedOnly, cacheType); + return new SearchResult(geocodes, DataStore.getAllHistoryCachesCount()); } public static boolean saveWaypoint(int id, String geocode, Waypoint waypoint) { - if (cgData.saveWaypointInternal(id, geocode, waypoint)) { - cgData.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE)); + if (DataStore.saveWaypointInternal(id, geocode, waypoint)) { + DataStore.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE)); return true; } return false; @@ -2987,7 +2989,7 @@ public class cgData { public static Set<String> getCachedMissingFromSearch(final SearchResult searchResult, final Set<Tile> tiles, final IConnector connector, final int maxZoom) { - // get cached cgeocaches + // get cached CacheListActivity final Set<String> cachedGeocodes = new HashSet<String>(); for (Tile tile : tiles) { cachedGeocodes.addAll(cacheCache.getInViewport(tile.getViewport(), CacheType.ALL)); diff --git a/main/src/cgeo/geocaching/EditWaypointActivity.java b/main/src/cgeo/geocaching/EditWaypointActivity.java index 56ee959..ad6d743 100644 --- a/main/src/cgeo/geocaching/EditWaypointActivity.java +++ b/main/src/cgeo/geocaching/EditWaypointActivity.java @@ -107,14 +107,14 @@ public class EditWaypointActivity extends AbstractActivity { note.setText(StringUtils.trimToEmpty(waypoint.getNote())); } } - final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_ONLY); + final Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_ONLY); setCoordsModificationVisibility(ConnectorFactory.getConnector(geocode), cache); } if (own) { initializeWaypointTypeSelector(); } - } catch (Exception e) { + } catch (RuntimeException e) { Log.e("EditWaypointActivity.loadWaypointHandler", e); } finally { if (waitDialog != null) { @@ -168,7 +168,7 @@ public class EditWaypointActivity extends AbstractActivity { initializeWaypointTypeSelector(); if (geocode != null) { - final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); + final Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); setCoordsModificationVisibility(ConnectorFactory.getConnector(geocode), cache); } } @@ -259,7 +259,7 @@ public class EditWaypointActivity extends AbstractActivity { @Override public void run() { try { - waypoint = cgData.loadWaypoint(id); + waypoint = DataStore.loadWaypoint(id); loadWaypointHandler.sendMessage(Message.obtain()); } catch (Exception e) { @@ -278,7 +278,7 @@ public class EditWaypointActivity extends AbstractActivity { } catch (Geopoint.ParseException e) { // button text is blank when creating new waypoint } - Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS); + Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS); CoordinatesInputDialog coordsDialog = new CoordinatesInputDialog(EditWaypointActivity.this, cache, gp, app.currentGeo()); coordsDialog.setCancelable(true); coordsDialog.setOnCoordinateUpdate(new CoordinatesInputDialog.CoordinateUpdate() { @@ -416,14 +416,14 @@ public class EditWaypointActivity extends AbstractActivity { waypoint.setVisited(visited); waypoint.setId(id); - Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS); + Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS); if (cache == null) { finishHandler.sendEmptyMessage(SAVE_ERROR); return null; } Waypoint oldWaypoint = cache.getWaypointById(id); if (cache.addOrChangeWaypoint(waypoint, true)) { - cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); + DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); if (!StaticMapsProvider.hasAllStaticMapsForWaypoint(geocode, waypoint)) { StaticMapsProvider.removeWpStaticMaps(oldWaypoint, geocode); if (Settings.isStoreOfflineWpMaps()) { @@ -432,13 +432,13 @@ public class EditWaypointActivity extends AbstractActivity { } if (modifyLocal.isChecked() || modifyBoth.isChecked()) { if (!cache.hasUserModifiedCoords()) { - final Waypoint origWaypoint = new Waypoint(cgeoapplication.getInstance().getString(R.string.cache_coordinates_original), WaypointType.ORIGINAL, false); + final Waypoint origWaypoint = new Waypoint(CgeoApplication.getInstance().getString(R.string.cache_coordinates_original), WaypointType.ORIGINAL, false); origWaypoint.setCoords(cache.getCoords()); cache.addOrChangeWaypoint(origWaypoint, false); cache.setUserModifiedCoords(true); } cache.setCoords(waypoint.getCoords()); - cgData.saveChangedCache(cache); + DataStore.saveChangedCache(cache); } if (modifyBoth.isChecked() && waypoint.getCoords() != null) { finishHandler.sendEmptyMessage(UPLOAD_START); diff --git a/main/src/cgeo/geocaching/Geocache.java b/main/src/cgeo/geocaching/Geocache.java index 96fbc06..8798539 100644 --- a/main/src/cgeo/geocaching/Geocache.java +++ b/main/src/cgeo/geocaching/Geocache.java @@ -1,8 +1,7 @@ package cgeo.geocaching; -import cgeo.geocaching.cgData.StorageLocation; +import cgeo.geocaching.DataStore.StorageLocation; import cgeo.geocaching.activity.ActivityMixin; -import cgeo.geocaching.activity.IAbstractActivity; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.connector.ILoggingManager; @@ -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; @@ -112,20 +112,20 @@ public class Geocache implements ICache, IWaypoint { private final List<String> attributes = new LazyInitializedList<String>() { @Override public List<String> call() { - return cgData.loadAttributes(geocode); + return DataStore.loadAttributes(geocode); } }; private final List<Waypoint> waypoints = new LazyInitializedList<Waypoint>() { @Override public List<Waypoint> call() { - return cgData.loadWaypoints(geocode); + return DataStore.loadWaypoints(geocode); } }; private List<Image> spoilers = null; private final List<LogEntry> logs = new LazyInitializedList<LogEntry>() { @Override public List<LogEntry> call() { - return cgData.loadLogs(geocode); + return DataStore.loadLogs(geocode); } }; private List<Trackable> inventory = null; @@ -447,16 +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) { @@ -469,12 +469,12 @@ public class Geocache implements ICache, IWaypoint { if (logType == LogType.UNKNOWN) { return; } - final boolean status = cgData.saveLogOffline(geocode, date.getTime(), logType, log); + final boolean status = DataStore.saveLogOffline(geocode, date.getTime(), logType, log); final Resources res = fromActivity.getResources(); if (status) { ActivityMixin.showToast(fromActivity, res.getString(R.string.info_log_saved)); - cgData.saveVisitDate(geocode); + DataStore.saveVisitDate(geocode); logOffline = Boolean.TRUE; notifyChange(); @@ -484,7 +484,7 @@ public class Geocache implements ICache, IWaypoint { } public void clearOfflineLog() { - cgData.clearLogOffline(geocode); + DataStore.clearLogOffline(geocode); notifyChange(); } @@ -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 @@ -664,7 +664,7 @@ public class Geocache implements ICache, IWaypoint { */ private void initializeCacheTexts() { if (description == null || shortdesc == null || hint == null || location == null) { - final Geocache partial = cgData.loadCacheTexts(this.getGeocode()); + final Geocache partial = DataStore.loadCacheTexts(this.getGeocode()); if (description == null) { setDescription(partial.getDescription()); } @@ -767,16 +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; } /** @@ -1028,7 +1028,7 @@ public class Geocache implements ICache, IWaypoint { } } } - return saveToDatabase && cgData.saveWaypoints(this); + return saveToDatabase && DataStore.saveWaypoints(this); } /** @@ -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) { @@ -1244,7 +1244,7 @@ public class Geocache implements ICache, IWaypoint { // when waypoint was edited, finalDefined may have changed resetFinalDefined(); } - return saveToDatabase && cgData.saveWaypoint(waypoint.getId(), geocode, waypoint); + return saveToDatabase && DataStore.saveWaypoint(waypoint.getId(), geocode, waypoint); } public boolean hasWaypoints() { @@ -1295,9 +1295,9 @@ public class Geocache implements ICache, IWaypoint { final int index = getWaypointIndex(original); final Waypoint copy = new Waypoint(original); copy.setUserDefined(); - copy.setName(cgeoapplication.getInstance().getString(R.string.waypoint_copy_of) + " " + copy.getName()); + copy.setName(CgeoApplication.getInstance().getString(R.string.waypoint_copy_of) + " " + copy.getName()); waypoints.add(index + 1, copy); - return cgData.saveWaypoint(-1, geocode, copy); + return DataStore.saveWaypoint(-1, geocode, copy); } /** @@ -1317,8 +1317,8 @@ public class Geocache implements ICache, IWaypoint { if (waypoint.isUserDefined()) { final int index = getWaypointIndex(waypoint); waypoints.remove(index); - cgData.deleteWaypoint(waypoint.getId()); - cgData.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE)); + DataStore.deleteWaypoint(waypoint.getId()); + DataStore.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE)); // Check status if Final is defined if (waypoint.isFinalWithCoords()) { resetFinalDefined(); @@ -1337,8 +1337,8 @@ public class Geocache implements ICache, IWaypoint { public void deleteWaypointForce(Waypoint waypoint) { final int index = getWaypointIndex(waypoint); waypoints.remove(index); - cgData.deleteWaypoint(waypoint.getId()); - cgData.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE)); + DataStore.deleteWaypoint(waypoint.getId()); + DataStore.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE)); resetFinalDefined(); } @@ -1406,7 +1406,7 @@ public class Geocache implements ICache, IWaypoint { if (point.getLatitudeE6() != 0 && point.getLongitudeE6() != 0 && ((point.getLatitudeE6() % 1000) != 0 || (point.getLongitudeE6() % 1000) != 0) && !hasIdenticalWaypoint(point)) { - final String name = cgeoapplication.getInstance().getString(R.string.cache_personal_note) + " " + count; + final String name = CgeoApplication.getInstance().getString(R.string.cache_personal_note) + " " + count; final String potentialWaypointType = note.substring(Math.max(0, matcher.start() - 15)); final Waypoint waypoint = new Waypoint(name, parseWaypointType(potentialWaypointType), false); waypoint.setCoords(point); @@ -1511,8 +1511,8 @@ public class Geocache implements ICache, IWaypoint { public void drop(Handler handler) { try { - cgData.markDropped(Collections.singletonList(this)); - cgData.removeCache(getGeocode(), EnumSet.of(RemoveFlag.REMOVE_CACHE)); + DataStore.markDropped(Collections.singletonList(this)); + DataStore.removeCache(getGeocode(), EnumSet.of(RemoveFlag.REMOVE_CACHE)); handler.sendMessage(Message.obtain()); } catch (final Exception e) { @@ -1563,7 +1563,7 @@ public class Geocache implements ICache, IWaypoint { } public void refresh(int newListId, CancellableHandler handler) { - cgData.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE)); + DataStore.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE)); storeCache(null, geocode, newListId, true, handler); } @@ -1639,7 +1639,7 @@ public class Geocache implements ICache, IWaypoint { } cache.setListId(listId); - cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); + DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); if (CancellableHandler.isCancelled(handler)) { return; @@ -1661,9 +1661,9 @@ public class Geocache implements ICache, IWaypoint { return null; } - if (!forceReload && listId == StoredList.TEMPORARY_LIST_ID && (cgData.isOffline(geocode, guid) || cgData.isThere(geocode, guid, true, true))) { + if (!forceReload && listId == StoredList.TEMPORARY_LIST_ID && (DataStore.isOffline(geocode, guid) || DataStore.isThere(geocode, guid, true, true))) { final SearchResult search = new SearchResult(); - final String realGeocode = StringUtils.isNotBlank(geocode) ? geocode : cgData.getGeocodeForGuid(guid); + final String realGeocode = StringUtils.isNotBlank(geocode) ? geocode : DataStore.getGeocodeForGuid(guid); search.addGeocode(realGeocode); return search; } @@ -1708,7 +1708,7 @@ public class Geocache implements ICache, IWaypoint { } } // 12 o'clock - final String hourLocalized = cgeoapplication.getInstance().getString(R.string.cache_time_full_hours); + final String hourLocalized = CgeoApplication.getInstance().getString(R.string.cache_time_full_hours); if (StringUtils.isNotBlank(hourLocalized)) { final Pattern fullHours = Pattern.compile("\\b(\\d{1,2})\\s+" + Pattern.quote(hourLocalized), Pattern.CASE_INSENSITIVE); final MatcherWrapper matcherHours = new MatcherWrapper(fullHours, getDescription()); @@ -1735,7 +1735,7 @@ public class Geocache implements ICache, IWaypoint { * @return */ public boolean hasAttribute(CacheAttribute attribute, boolean yes) { - Geocache fullCache = cgData.loadCache(getGeocode(), EnumSet.of(LoadFlag.LOAD_ATTRIBUTES)); + Geocache fullCache = DataStore.loadCache(getGeocode(), EnumSet.of(LoadFlag.LOAD_ATTRIBUTES)); if (fullCache == null) { fullCache = this; } diff --git a/main/src/cgeo/geocaching/ImagesActivity.java b/main/src/cgeo/geocaching/ImagesActivity.java index 0b80d53..5eeb621 100644 --- a/main/src/cgeo/geocaching/ImagesActivity.java +++ b/main/src/cgeo/geocaching/ImagesActivity.java @@ -58,7 +58,7 @@ public class ImagesActivity extends AbstractActivity { return; } - offline = cgData.isOffline(geocode, null) && (imgType == ImageType.SpoilerImages + offline = DataStore.isOffline(geocode, null) && (imgType == ImageType.SpoilerImages || Settings.isStoreLogImages()); } diff --git a/main/src/cgeo/geocaching/LogCacheActivity.java b/main/src/cgeo/geocaching/LogCacheActivity.java index 78ec82d..98fee37 100644 --- a/main/src/cgeo/geocaching/LogCacheActivity.java +++ b/main/src/cgeo/geocaching/LogCacheActivity.java @@ -47,7 +47,6 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; -import java.util.Locale; public class LogCacheActivity extends AbstractLoggingActivity implements DateDialog.DateDialogParent { static final String EXTRAS_GEOCODE = "geocode"; @@ -80,7 +79,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia private ILoggingManager loggingManager; // Data to be saved while reconfiguring - private double rating; + private float rating; private LogType typeSelected; private Calendar date; private String imageCaption; @@ -215,13 +214,13 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia if (!postButton.isEnabled()) { return res.getString(R.string.log_post_not_possible); } - if (!Settings.isGCvoteLogin() || !cache.supportsGCVote()) { + if (!GCVote.isVotingPossible(cache)) { return res.getString(R.string.log_post); } - if (rating == 0) { - return res.getString(R.string.log_post_no_rate); + if (GCVote.isValidRating(rating)) { + return res.getString(R.string.log_post_rate) + " " + GCVote.getRatingText(rating) + "*"; } - return res.getString(R.string.log_post_rate) + " " + ratingTextValue(rating) + "*"; + return res.getString(R.string.log_post_no_rate); } @Override @@ -236,13 +235,13 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia } if ((StringUtils.isBlank(cacheid)) && StringUtils.isNotBlank(geocode)) { - cacheid = cgData.getCacheidForGeocode(geocode); + cacheid = DataStore.getCacheidForGeocode(geocode); } if (StringUtils.isBlank(geocode) && StringUtils.isNotBlank(cacheid)) { - geocode = cgData.getGeocodeForGuid(cacheid); + geocode = DataStore.getGeocodeForGuid(cacheid); } - cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); + cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); possibleLogTypes = cache.getPossibleLogTypes(); if (StringUtils.isNotBlank(cache.getName())) { @@ -262,7 +261,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia // Restore previous state if (savedInstanceState != null) { - rating = savedInstanceState.getDouble(SAVED_STATE_RATING); + rating = savedInstanceState.getFloat(SAVED_STATE_RATING); typeSelected = LogType.getById(savedInstanceState.getInt(SAVED_STATE_TYPE)); date.setTimeInMillis(savedInstanceState.getLong(SAVED_STATE_DATE)); imageCaption = savedInstanceState.getString(SAVED_STATE_IMAGE_CAPTION); @@ -270,7 +269,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia imageUri = Uri.parse(savedInstanceState.getString(SAVED_STATE_IMAGE_URI)); } else { // If log had been previously saved, load it now, otherwise initialize signature as needed - final LogEntry log = cgData.loadLogOffline(geocode); + final LogEntry log = DataStore.loadLogOffline(geocode); if (log != null) { typeSelected = log.type; date.setTime(new Date(log.date)); @@ -342,7 +341,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia private void setDefaultValues() { date = Calendar.getInstance(); - rating = 0.0; + rating = GCVote.NO_RATING; if (cache.isEventCache()) { final Date eventDate = cache.getHiddenDate(); boolean expired = DateUtils.daysSince(eventDate.getTime()) >= 0; @@ -418,8 +417,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); - final boolean voteAvailable = Settings.isGCvoteLogin() && StringUtils.isNotBlank(cache.getGuid()) && cache.supportsGCVote(); - menu.findItem(SUBMENU_VOTE).setVisible(voteAvailable); + menu.findItem(SUBMENU_VOTE).setVisible(GCVote.isVotingPossible(cache)); return true; } @@ -432,9 +430,9 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia final int id = item.getItemId(); if (id >= 10 && id <= 19) { - rating = (id - 9) / 2.0; - if (rating < 1) { - rating = 0; + rating = (id - 9) / 2.0f; + if (!GCVote.isValidRating(rating)) { + rating = GCVote.NO_RATING; } updatePostButtonText(); return true; @@ -443,10 +441,6 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia return false; } - private static String ratingTextValue(final double rating) { - return String.format(Locale.getDefault(), "%.1f", rating); - } - @Override protected void onSaveInstanceState(final Bundle outState) { super.onSaveInstanceState(outState); @@ -533,7 +527,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia final LogResult logResult = loggingManager.postLog(cache, typeSelected, date, log, logPwd, trackables); if (logResult.getPostLogResult() == StatusCode.NO_ERROR) { - final LogEntry logNow = new LogEntry(date, typeSelected, log); + final LogEntry logNow = new LogEntry(date.getTimeInMillis(), typeSelected, log); cache.getLogs().add(0, logNow); @@ -542,7 +536,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia cache.setVisitedDate(new Date().getTime()); } - cgData.saveChangedCache(cache); + DataStore.saveChangedCache(cache); cache.clearOfflineLog(); if (typeSelected == LogType.FOUND_IT) { @@ -550,7 +544,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia Twitter.postTweetCache(geocode); } } - if (rating > 0) { + if (GCVote.isValidRating(rating)) { GCVote.setRating(cache, rating); } @@ -559,14 +553,14 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia final String uploadedImageUrl = imageResult.getImageUri(); if (StringUtils.isNotEmpty(uploadedImageUrl)) { logNow.addLogImage(new Image(uploadedImageUrl, imageCaption, imageDescription)); - cgData.saveChangedCache(cache); + DataStore.saveChangedCache(cache); } return imageResult.getPostResult(); } } return logResult.getPostLogResult(); - } catch (Exception e) { + } catch (RuntimeException e) { Log.e("VisitCacheActivity.Poster.doInBackgroundInternal", e); } diff --git a/main/src/cgeo/geocaching/LogEntry.java b/main/src/cgeo/geocaching/LogEntry.java index 0121424..3c9f2b6 100644 --- a/main/src/cgeo/geocaching/LogEntry.java +++ b/main/src/cgeo/geocaching/LogEntry.java @@ -9,7 +9,6 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; -import java.util.Calendar; import java.util.Collections; import java.util.List; import java.util.regex.Pattern; @@ -30,10 +29,6 @@ public final class LogEntry { public String cacheName = ""; // used for trackables public String cacheGuid = ""; // used for trackables - public LogEntry(final Calendar date, final LogType type, final String text) { - this(Settings.getUsername(), date.getTimeInMillis(), type, text); - } - public LogEntry(final long dateInMilliSeconds, final LogType type, final String text) { this(Settings.getUsername(), dateInMilliSeconds, type, text); } @@ -94,7 +89,7 @@ public final class LogEntry { } } if (titles.isEmpty()) { - titles.add(cgeoapplication.getInstance().getString(R.string.cache_log_image_default_title)); + titles.add(CgeoApplication.getInstance().getString(R.string.cache_log_image_default_title)); } return StringUtils.join(titles, ", "); } diff --git a/main/src/cgeo/geocaching/LogTrackableActivity.java b/main/src/cgeo/geocaching/LogTrackableActivity.java index a45d584..129ae2a 100644 --- a/main/src/cgeo/geocaching/LogTrackableActivity.java +++ b/main/src/cgeo/geocaching/LogTrackableActivity.java @@ -130,7 +130,7 @@ public class LogTrackableActivity extends AbstractLoggingActivity implements Dat } } - trackable = cgData.loadTrackable(geocode); + trackable = DataStore.loadTrackable(geocode); if (StringUtils.isNotBlank(trackable.getName())) { setTitle(res.getString(R.string.trackable_touch) + ": " + trackable.getName()); diff --git a/main/src/cgeo/geocaching/MainActivity.java b/main/src/cgeo/geocaching/MainActivity.java index 0fd6759..1db0cd4 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 } @@ -283,7 +284,7 @@ public class MainActivity extends AbstractActivity { startActivity(new Intent(this, SettingsActivity.class)); return true; case R.id.menu_history: - cgeocaches.startActivityHistory(this); + CacheListActivity.startActivityHistory(this); return true; case R.id.menu_scan: startScannerApplication(); @@ -366,7 +367,7 @@ public class MainActivity extends AbstractActivity { @Override public void run(final Integer selectedListId) { Settings.saveLastList(selectedListId); - cgeocaches.startActivityOffline(MainActivity.this); + CacheListActivity.startActivityOffline(MainActivity.this); } }); return true; @@ -468,7 +469,7 @@ public class MainActivity extends AbstractActivity { } private void checkRestore() { - if (!cgData.isNewlyCreatedDatebase() || null == DatabaseBackupUtils.getRestoreFile()) { + if (!DataStore.isNewlyCreatedDatebase() || null == DatabaseBackupUtils.getRestoreFile()) { return; } new AlertDialog.Builder(this) @@ -479,7 +480,7 @@ public class MainActivity extends AbstractActivity { @Override public void onClick(final DialogInterface dialog, final int id) { dialog.dismiss(); - cgData.resetNewlyCreatedDatabase(); + DataStore.resetNewlyCreatedDatabase(); DatabaseBackupUtils.restoreDatabase(MainActivity.this); } }) @@ -487,7 +488,7 @@ public class MainActivity extends AbstractActivity { @Override public void onClick(final DialogInterface dialog, final int id) { dialog.cancel(); - cgData.resetNewlyCreatedDatabase(); + DataStore.resetNewlyCreatedDatabase(); } }) .create() @@ -542,7 +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."); } } @@ -567,7 +568,7 @@ public class MainActivity extends AbstractActivity { } nearestView.setPressed(true); - cgeocaches.startActivityNearest(this, app.currentGeo().getCoords()); + CacheListActivity.startActivityNearest(this, app.currentGeo().getCoords()); } /** @@ -576,7 +577,7 @@ public class MainActivity extends AbstractActivity { */ public void cgeoFindByOffline(final View v) { findByOffline.setPressed(true); - cgeocaches.startActivityOffline(this); + CacheListActivity.startActivityOffline(this); } /** @@ -640,7 +641,7 @@ public class MainActivity extends AbstractActivity { } int checks = 0; - while (!cgData.isInitialized()) { + while (!DataStore.isInitialized()) { try { wait(500); checks++; @@ -653,7 +654,7 @@ public class MainActivity extends AbstractActivity { } } - countBubbleCnt = cgData.getAllCachesCount(); + countBubbleCnt = DataStore.getAllCachesCount(); countBubbleHandler.sendEmptyMessage(0); } @@ -678,7 +679,7 @@ public class MainActivity extends AbstractActivity { } cleanupRunning = true; - cgData.clean(more); + DataStore.clean(more); cleanupRunning = false; if (version > 0) { @@ -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..ddafb51 100644 --- a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java +++ b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java @@ -214,7 +214,7 @@ public class NavigateAnyPointActivity extends AbstractActivity { private List<Destination> getHistoryOfSearchedLocations() { if (historyOfSearchedLocations == null) { // Load from database - historyOfSearchedLocations = cgData.loadHistoryOfSearchedLocations(); + historyOfSearchedLocations = DataStore.loadHistoryOfSearchedLocations(); } return historyOfSearchedLocations; @@ -331,7 +331,7 @@ public class NavigateAnyPointActivity extends AbstractActivity { menu.findItem(R.id.menu_caches_around).setVisible(visible); menu.findItem(R.id.menu_clear_history).setEnabled(!getHistoryOfSearchedLocations().isEmpty()); - } catch (Exception e) { + } catch (RuntimeException e) { // nothing } @@ -377,7 +377,7 @@ public class NavigateAnyPointActivity extends AbstractActivity { getHistoryOfSearchedLocations().add(0, loc); // Save location - cgData.saveSearchedDestination(loc); + DataStore.saveSearchedDestination(loc); // Ensure to remove the footer historyListView.removeFooterView(getEmptyHistoryFooter()); @@ -396,7 +396,7 @@ public class NavigateAnyPointActivity extends AbstractActivity { getHistoryOfSearchedLocations().remove(destination); // Save - cgData.removeSearchedDestination(destination); + DataStore.removeSearchedDestination(destination); if (getHistoryOfSearchedLocations().isEmpty()) { if (historyListView.getFooterViewsCount() == 0) { @@ -415,7 +415,7 @@ public class NavigateAnyPointActivity extends AbstractActivity { getHistoryOfSearchedLocations().clear(); // Save - cgData.clearSearchedDestinations(); + DataStore.clearSearchedDestinations(); if (historyListView.getFooterViewsCount() == 0) { historyListView.addFooterView(getEmptyHistoryFooter()); @@ -443,7 +443,7 @@ public class NavigateAnyPointActivity extends AbstractActivity { return; } - cgeocaches.startActivityCoordinates(this, coords); + CacheListActivity.startActivityCoordinates(this, coords); finish(); } @@ -454,7 +454,7 @@ public class NavigateAnyPointActivity extends AbstractActivity { try { latButton.setHint(geo.getCoords().format(GeopointFormatter.Format.LAT_DECMINUTE_RAW)); lonButton.setHint(geo.getCoords().format(GeopointFormatter.Format.LON_DECMINUTE_RAW)); - } catch (final Exception e) { + } catch (final RuntimeException e) { Log.w("Failed to update location."); } } diff --git a/main/src/cgeo/geocaching/SearchActivity.java b/main/src/cgeo/geocaching/SearchActivity.java index 57b391f..c6c13cf 100644 --- a/main/src/cgeo/geocaching/SearchActivity.java +++ b/main/src/cgeo/geocaching/SearchActivity.java @@ -142,7 +142,7 @@ public class SearchActivity extends AbstractActivity { } if (keywordSearch) { // keyword fallback, if desired by caller - cgeocaches.startActivityKeyword(this, query.trim()); + CacheListActivity.startActivityKeyword(this, query.trim()); return true; } @@ -171,7 +171,7 @@ public class SearchActivity extends AbstractActivity { findByGeocodeFn(); } }); - addHistoryEntries(geocodeEdit, cgData.getRecentGeocodesForSearch()); + addHistoryEntries(geocodeEdit, DataStore.getRecentGeocodesForSearch()); displayByGeocode.setOnClickListener(new FindByGeocodeListener()); EditUtils.setActionListener((EditText) findViewById(R.id.keyword), new Runnable() { @@ -214,7 +214,7 @@ public class SearchActivity extends AbstractActivity { findTrackableFn(); } }); - addHistoryEntries(trackable, cgData.getTrackableCodes()); + addHistoryEntries(trackable, DataStore.getTrackableCodes()); disableSuggestions(trackable); displayTrackable.setOnClickListener(new FindTrackableListener()); } @@ -238,7 +238,7 @@ public class SearchActivity extends AbstractActivity { lonEdit.setHint(geo.getCoords().format(GeopointFormatter.Format.LON_DECMINUTE_RAW)); } } - } catch (final Exception e) { + } catch (final RuntimeException e) { Log.w("Failed to update location."); } } @@ -281,7 +281,7 @@ public class SearchActivity extends AbstractActivity { } } else { try { - cgeocaches.startActivityCoordinates(this, new Geopoint(StringUtils.trim(latText), StringUtils.trim(lonText))); + CacheListActivity.startActivityCoordinates(this, new Geopoint(StringUtils.trim(latText), StringUtils.trim(lonText))); } catch (final Geopoint.ParseException e) { showToast(res.getString(e.resource)); } @@ -305,7 +305,7 @@ public class SearchActivity extends AbstractActivity { return; } - cgeocaches.startActivityKeyword(this, StringUtils.trim(keyText)); + CacheListActivity.startActivityKeyword(this, StringUtils.trim(keyText)); } private class FindByAddressListener implements View.OnClickListener { @@ -344,7 +344,7 @@ public class SearchActivity extends AbstractActivity { return; } - cgeocaches.startActivityUserName(this, StringUtils.trim(usernameText)); + CacheListActivity.startActivityUserName(this, StringUtils.trim(usernameText)); } private void findByOwnerFn() { @@ -359,7 +359,7 @@ public class SearchActivity extends AbstractActivity { return; } - cgeocaches.startActivityOwner(this, StringUtils.trim(usernameText)); + CacheListActivity.startActivityOwner(this, StringUtils.trim(usernameText)); } private class FindByGeocodeListener implements View.OnClickListener { diff --git a/main/src/cgeo/geocaching/SearchResult.java b/main/src/cgeo/geocaching/SearchResult.java index e637d1f..add7ce2 100644 --- a/main/src/cgeo/geocaching/SearchResult.java +++ b/main/src/cgeo/geocaching/SearchResult.java @@ -199,7 +199,7 @@ public class SearchResult implements Parcelable { SearchResult result = new SearchResult(this); result.geocodes.clear(); final ArrayList<Geocache> cachesForVote = new ArrayList<Geocache>(); - final Set<Geocache> caches = cgData.loadCaches(geocodes, LoadFlags.LOAD_CACHE_OR_DB); + final Set<Geocache> caches = DataStore.loadCaches(geocodes, LoadFlags.LOAD_CACHE_OR_DB); int excluded = 0; for (Geocache cache : caches) { // Is there any reason to exclude the cache from the list? @@ -220,11 +220,11 @@ public class SearchResult implements Parcelable { } public Geocache getFirstCacheFromResult(final EnumSet<LoadFlag> loadFlags) { - return CollectionUtils.isNotEmpty(geocodes) ? cgData.loadCache(geocodes.iterator().next(), loadFlags) : null; + return CollectionUtils.isNotEmpty(geocodes) ? DataStore.loadCache(geocodes.iterator().next(), loadFlags) : null; } public Set<Geocache> getCachesFromSearchResult(final EnumSet<LoadFlag> loadFlags) { - return cgData.loadCaches(geocodes, loadFlags); + return DataStore.loadCaches(geocodes, loadFlags); } /** Add the geocode to the search. No cache is loaded into the CacheCache */ @@ -243,7 +243,7 @@ public class SearchResult implements Parcelable { /** Add the cache geocode to the search and store the cache in the CacheCache */ public boolean addAndPutInCache(final Geocache cache) { addGeocode(cache.getGeocode()); - return cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_CACHE)); + return DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_CACHE)); } public boolean isEmpty() { @@ -252,7 +252,7 @@ public class SearchResult implements Parcelable { public boolean hasUnsavedCaches() { for (final String geocode : getGeocodes()) { - if (!cgData.isOffline(geocode, null)) { + if (!DataStore.isOffline(geocode, null)) { return true; } } diff --git a/main/src/cgeo/geocaching/StaticMapsActivity.java b/main/src/cgeo/geocaching/StaticMapsActivity.java index 2268df9..0f03b34 100644 --- a/main/src/cgeo/geocaching/StaticMapsActivity.java +++ b/main/src/cgeo/geocaching/StaticMapsActivity.java @@ -117,7 +117,7 @@ public class StaticMapsActivity extends AbstractActivity { for (int level = 1; level <= StaticMapsProvider.MAPS_LEVEL_MAX; level++) { try { if (waypointId != null) { - final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); + final Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); final Bitmap image = StaticMapsProvider.getWaypointMap(geocode, cache.getWaypointById(waypointId), level); if (image != null) { maps.add(image); @@ -151,7 +151,7 @@ public class StaticMapsActivity extends AbstractActivity { } private boolean downloadStaticMaps() { - final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); + final Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); if (waypointId == null) { showToast(res.getString(R.string.info_storing_static_maps)); StaticMapsProvider.storeCacheStaticMap(cache, true); diff --git a/main/src/cgeo/geocaching/StaticMapsProvider.java b/main/src/cgeo/geocaching/StaticMapsProvider.java index eb59bcb..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/StatusFragment.java b/main/src/cgeo/geocaching/StatusFragment.java index e0e714a..4f70f0e 100644 --- a/main/src/cgeo/geocaching/StatusFragment.java +++ b/main/src/cgeo/geocaching/StatusFragment.java @@ -38,12 +38,12 @@ public class StatusFragment extends Fragment { @Override public void onResume() { super.onResume(); - cgeoapplication.getInstance().getStatusUpdater().addObserver(statusHandler); + CgeoApplication.getInstance().getStatusUpdater().addObserver(statusHandler); } @Override public void onPause() { - cgeoapplication.getInstance().getStatusUpdater().deleteObserver(statusHandler); + CgeoApplication.getInstance().getStatusUpdater().deleteObserver(statusHandler); super.onPause(); } diff --git a/main/src/cgeo/geocaching/StoredList.java b/main/src/cgeo/geocaching/StoredList.java index 4946420..367ddcb 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; @@ -58,12 +59,12 @@ public final class StoredList { public static class UserInterface { private final Activity activity; - private final cgeoapplication app; + private final CgeoApplication app; private final Resources res; public UserInterface(final Activity activity) { this.activity = activity; - app = cgeoapplication.getInstance(); + app = CgeoApplication.getInstance(); res = app.getResources(); } @@ -78,12 +79,8 @@ 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); + StoredList exceptList = DataStore.getList(exceptListId); if (exceptList != null) { lists.remove(exceptList); } @@ -122,9 +119,10 @@ public final class StoredList { builder.create().show(); } + @NonNull private static List<StoredList> getSortedLists() { final Collator collator = Collator.getInstance(); - final List<StoredList> lists = cgData.getLists(); + final List<StoredList> lists = DataStore.getLists(); Collections.sort(lists, new Comparator<StoredList>() { @Override @@ -148,9 +146,9 @@ public final class StoredList { @Override public void run(final String listName) { - final int newId = cgData.createList(listName); + final int newId = DataStore.createList(listName); - if (newId >= cgData.customListIdOffset) { + if (newId >= DataStore.customListIdOffset) { ActivityMixin.showToast(activity, res.getString(R.string.list_dialog_create_ok)); if (runAfterwards != null) { runAfterwards.run(newId); @@ -191,12 +189,12 @@ public final class StoredList { } public void promptForListRename(final int listId, final Runnable runAfterRename) { - final StoredList list = cgData.getList(listId); + final StoredList list = DataStore.getList(listId); handleListNameInput(list.title, R.string.list_dialog_rename_title, R.string.list_dialog_rename, new RunnableWithArgument<String>() { @Override public void run(final String listName) { - cgData.renameList(listId, listName); + DataStore.renameList(listId, listName); if (runAfterRename != null) { runAfterRename.run(); } diff --git a/main/src/cgeo/geocaching/TrackableActivity.java b/main/src/cgeo/geocaching/TrackableActivity.java index 20a9ccf..1ab428e 100644 --- a/main/src/cgeo/geocaching/TrackableActivity.java +++ b/main/src/cgeo/geocaching/TrackableActivity.java @@ -233,7 +233,7 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi @Override public void run() { if (StringUtils.isNotEmpty(geocode)) { - trackable = cgData.loadTrackable(geocode); + trackable = DataStore.loadTrackable(geocode); if (trackable == null || trackable.isLoggable()) { // iterate over the connectors as some codes may be handled by multiple connectors diff --git a/main/src/cgeo/geocaching/UsefulAppsActivity.java b/main/src/cgeo/geocaching/UsefulAppsActivity.java index 8093bba..41ea96e 100644 --- a/main/src/cgeo/geocaching/UsefulAppsActivity.java +++ b/main/src/cgeo/geocaching/UsefulAppsActivity.java @@ -50,7 +50,7 @@ public class UsefulAppsActivity extends AbstractActivity { marketIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); activity.startActivity(marketIntent); - } catch (Exception e) { + } catch (RuntimeException e) { // market not available in standard emulator } } diff --git a/main/src/cgeo/geocaching/Waypoint.java b/main/src/cgeo/geocaching/Waypoint.java index e39d26a..f3d4e4f 100644 --- a/main/src/cgeo/geocaching/Waypoint.java +++ b/main/src/cgeo/geocaching/Waypoint.java @@ -35,7 +35,7 @@ public class Waypoint implements IWaypoint, Comparable<Waypoint> { public static void initializeScale() { // Calculate visited inset based on screen density - VISITED_INSET = (int) (6.6f * cgeoapplication.getInstance().getResources().getDisplayMetrics().density + 0.5f); + VISITED_INSET = (int) (6.6f * CgeoApplication.getInstance().getResources().getDisplayMetrics().density + 0.5f); } /** diff --git a/main/src/cgeo/geocaching/WaypointPopup.java b/main/src/cgeo/geocaching/WaypointPopup.java index a1ab36a..c33bbb5 100644 --- a/main/src/cgeo/geocaching/WaypointPopup.java +++ b/main/src/cgeo/geocaching/WaypointPopup.java @@ -56,7 +56,7 @@ public class WaypointPopup extends AbstractPopupActivity { @Override protected void init() { super.init(); - waypoint = cgData.loadWaypoint(waypointId); + waypoint = DataStore.loadWaypoint(waypointId); try { if (StringUtils.isNotBlank(waypoint.getName())) { setTitle(waypoint.getName()); diff --git a/main/src/cgeo/geocaching/activity/AbstractActivity.java b/main/src/cgeo/geocaching/activity/AbstractActivity.java index 28c0cdd..1abc704 100644 --- a/main/src/cgeo/geocaching/activity/AbstractActivity.java +++ b/main/src/cgeo/geocaching/activity/AbstractActivity.java @@ -2,7 +2,7 @@ package cgeo.geocaching.activity; import butterknife.Views; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.compatibility.Compatibility; import cgeo.geocaching.network.Cookies; import cgeo.geocaching.settings.Settings; @@ -18,7 +18,7 @@ import android.widget.EditText; public abstract class AbstractActivity extends FragmentActivity implements IAbstractActivity { - protected cgeoapplication app = null; + protected CgeoApplication app = null; protected Resources res = null; private boolean keepScreenOn = false; @@ -101,7 +101,7 @@ public abstract class AbstractActivity extends FragmentActivity implements IAbst private void initializeCommonFields() { // initialize commonly used members res = this.getResources(); - app = (cgeoapplication) this.getApplication(); + app = (CgeoApplication) this.getApplication(); // only needed in some activities, but implemented in super class nonetheless Cookies.restoreCookieStore(Settings.getCookieStore()); diff --git a/main/src/cgeo/geocaching/activity/AbstractListActivity.java b/main/src/cgeo/geocaching/activity/AbstractListActivity.java index 47c747f..d2bc0b4 100644 --- a/main/src/cgeo/geocaching/activity/AbstractListActivity.java +++ b/main/src/cgeo/geocaching/activity/AbstractListActivity.java @@ -1,7 +1,6 @@ package cgeo.geocaching.activity; -import cgeo.geocaching.cgeoapplication; -import cgeo.geocaching.compatibility.Compatibility; +import cgeo.geocaching.CgeoApplication; import android.content.res.Resources; import android.graphics.drawable.Drawable; @@ -14,7 +13,7 @@ public abstract class AbstractListActivity extends FragmentListActivity implemen private boolean keepScreenOn = false; - protected cgeoapplication app = null; + protected CgeoApplication app = null; protected Resources res = null; protected AbstractListActivity() { @@ -66,7 +65,7 @@ public abstract class AbstractListActivity extends FragmentListActivity implemen private void initializeCommonFields() { // init res = this.getResources(); - app = (cgeoapplication) this.getApplication(); + app = (CgeoApplication) this.getApplication(); ActivityMixin.keepScreenOn(this, keepScreenOn); } @@ -77,7 +76,7 @@ public abstract class AbstractListActivity extends FragmentListActivity implemen @Override public void invalidateOptionsMenuCompatible() { - Compatibility.invalidateOptionsMenu(this); + ActivityMixin.invalidateOptionsMenu(this); } public void onCreate(Bundle savedInstanceState, int resourceLayoutID) { diff --git a/main/src/cgeo/geocaching/apps/AbstractApp.java b/main/src/cgeo/geocaching/apps/AbstractApp.java index 7b6b3d9..d861542 100644 --- a/main/src/cgeo/geocaching/apps/AbstractApp.java +++ b/main/src/cgeo/geocaching/apps/AbstractApp.java @@ -1,7 +1,7 @@ package cgeo.geocaching.apps; import cgeo.geocaching.Geocache; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.utils.ProcessUtils; import org.apache.commons.lang3.StringUtils; @@ -53,7 +53,7 @@ public abstract class AbstractApp implements App { } protected static String getString(int ressourceId) { - return cgeoapplication.getInstance().getString(ressourceId); + return CgeoApplication.getInstance().getString(ressourceId); } @Override diff --git a/main/src/cgeo/geocaching/apps/AbstractLocusApp.java b/main/src/cgeo/geocaching/apps/AbstractLocusApp.java index 53620e4..2db8918 100644 --- a/main/src/cgeo/geocaching/apps/AbstractLocusApp.java +++ b/main/src/cgeo/geocaching/apps/AbstractLocusApp.java @@ -3,7 +3,7 @@ package cgeo.geocaching.apps; import cgeo.geocaching.Geocache; import cgeo.geocaching.R; import cgeo.geocaching.Waypoint; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.enumerations.CacheSize; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.enumerations.WaypointType; @@ -43,7 +43,7 @@ public abstract class AbstractLocusApp extends AbstractApp { @Override public boolean isInstalled() { - return LocusUtils.isLocusAvailable(cgeoapplication.getInstance()); + return LocusUtils.isLocusAvailable(CgeoApplication.getInstance()); } /** diff --git a/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java b/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java index d898d7e..d5c9435 100644 --- a/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java +++ b/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java @@ -6,7 +6,7 @@ import cgeo.geocaching.R; import cgeo.geocaching.StaticMapsActivity; import cgeo.geocaching.StaticMapsProvider; import cgeo.geocaching.Waypoint; -import cgeo.geocaching.cgData; +import cgeo.geocaching.DataStore; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.apps.AbstractApp; @@ -34,7 +34,7 @@ abstract class AbstractStaticMapsApp extends AbstractApp implements CacheNavigat return false; } String geocode = waypoint.getGeocode(); - if (StringUtils.isNotEmpty(geocode) && cgData.isOffline(geocode, null)) { + if (StringUtils.isNotEmpty(geocode) && DataStore.isOffline(geocode, null)) { return StaticMapsProvider.hasStaticMapForWaypoint(geocode, waypoint); } return false; diff --git a/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsApp.java b/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsApp.java index 03fae9e..4cbfa00 100644 --- a/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsApp.java +++ b/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsApp.java @@ -27,7 +27,7 @@ class GoogleMapsApp extends AbstractPointNavigationApp { activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("geo:" + point.getLatitude() + "," + point.getLongitude()))); return; - } catch (Exception e) { + } catch (RuntimeException e) { // nothing } Log.i("GoogleMapsApp.navigate: No maps application available."); diff --git a/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsDirectionApp.java b/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsDirectionApp.java index a84b7e8..a5b9a94 100644 --- a/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsDirectionApp.java +++ b/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsDirectionApp.java @@ -2,7 +2,7 @@ package cgeo.geocaching.apps.cache.navi; import cgeo.geocaching.IGeoData; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.maps.MapProviderFactory; import cgeo.geocaching.utils.Log; @@ -25,7 +25,7 @@ public class GoogleMapsDirectionApp extends AbstractPointNavigationApp { @Override public void navigate(Activity activity, Geopoint coords) { try { - IGeoData geo = cgeoapplication.getInstance().currentGeo(); + IGeoData geo = CgeoApplication.getInstance().currentGeo(); final Geopoint coordsNow = geo == null ? null : geo.getCoords(); if (coordsNow != null) { diff --git a/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java b/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java index ec6b3e1..eea0f0a 100644 --- a/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java +++ b/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java @@ -1,9 +1,9 @@ package cgeo.geocaching.apps.cache.navi; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.Geocache; import cgeo.geocaching.R; import cgeo.geocaching.Waypoint; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.apps.AbstractAppFactory; import cgeo.geocaching.apps.App; @@ -320,7 +320,7 @@ public final class NavigationAppFactory extends AbstractAppFactory { */ public static void startDefaultNavigationApplication(int defaultNavigation, Activity activity, Geocache cache) { if (cache == null || cache.getCoords() == null) { - ActivityMixin.showToast(activity, cgeoapplication.getInstance().getString(R.string.err_location_unknown)); + ActivityMixin.showToast(activity, CgeoApplication.getInstance().getString(R.string.err_location_unknown)); return; } @@ -342,7 +342,7 @@ public final class NavigationAppFactory extends AbstractAppFactory { */ public static void startDefaultNavigationApplication(int defaultNavigation, Activity activity, Waypoint waypoint) { if (waypoint == null || waypoint.getCoords() == null) { - ActivityMixin.showToast(activity, cgeoapplication.getInstance().getString(R.string.err_location_unknown)); + ActivityMixin.showToast(activity, CgeoApplication.getInstance().getString(R.string.err_location_unknown)); return; } navigateWaypoint(activity, waypoint, getDefaultNavigationApplication(defaultNavigation)); @@ -356,7 +356,7 @@ public final class NavigationAppFactory extends AbstractAppFactory { */ public static void startDefaultNavigationApplication(int defaultNavigation, Activity activity, final Geopoint destination) { if (destination == null) { - ActivityMixin.showToast(activity, cgeoapplication.getInstance().getString(R.string.err_location_unknown)); + ActivityMixin.showToast(activity, CgeoApplication.getInstance().getString(R.string.err_location_unknown)); return; } diff --git a/main/src/cgeo/geocaching/apps/cache/navi/StreetviewApp.java b/main/src/cgeo/geocaching/apps/cache/navi/StreetviewApp.java index e2c0828..df67e43 100644 --- a/main/src/cgeo/geocaching/apps/cache/navi/StreetviewApp.java +++ b/main/src/cgeo/geocaching/apps/cache/navi/StreetviewApp.java @@ -1,7 +1,7 @@ package cgeo.geocaching.apps.cache.navi; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.utils.ProcessUtils; @@ -31,7 +31,7 @@ class StreetviewApp extends AbstractPointNavigationApp { activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("google.streetview:cbll=" + point.getLatitude() + "," + point.getLongitude()))); } catch (final ActivityNotFoundException e) { - ActivityMixin.showToast(activity, cgeoapplication.getInstance().getString(R.string.err_application_no)); + ActivityMixin.showToast(activity, CgeoApplication.getInstance().getString(R.string.err_application_no)); } } }
\ No newline at end of file diff --git a/main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java b/main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java index b747eee..ca06c52 100644 --- a/main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java +++ b/main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java @@ -1,9 +1,9 @@ package cgeo.geocaching.apps.cachelist; +import cgeo.geocaching.Geocache; import cgeo.geocaching.R; import cgeo.geocaching.SearchResult; -import cgeo.geocaching.Geocache; -import cgeo.geocaching.activity.IAbstractActivity; +import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.apps.AbstractAppFactory; import cgeo.geocaching.utils.Log; @@ -55,13 +55,13 @@ public final class CacheListAppFactory extends AbstractAppFactory { } } - public static boolean onMenuItemSelected(final MenuItem item, final List<Geocache> caches, final IAbstractActivity activity, + public static boolean onMenuItemSelected(final MenuItem item, final List<Geocache> caches, final Activity activity, final SearchResult search) { final CacheListApp app = (CacheListApp) getAppFromMenuItem(item, LazyHolder.apps); if (app != null) { try { - boolean result = app.invoke(caches, (Activity) activity, search); - activity.invalidateOptionsMenuCompatible(); + boolean result = app.invoke(caches, activity, search); + ActivityMixin.invalidateOptionsMenu(activity); return result; } catch (Exception e) { Log.e("CacheListAppFactory.onMenuItemSelected", e); diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel13.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel13.java index f08ac22..eb2be4b 100644 --- a/main/src/cgeo/geocaching/compatibility/AndroidLevel13.java +++ b/main/src/cgeo/geocaching/compatibility/AndroidLevel13.java @@ -1,6 +1,6 @@ package cgeo.geocaching.compatibility; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import android.annotation.TargetApi; import android.content.Context; @@ -18,7 +18,7 @@ public class AndroidLevel13 implements AndroidLevel13Interface { @Override public Point getDisplaySize() { Point dimensions = new Point(); - ((WindowManager) cgeoapplication.getInstance().getSystemService(Context.WINDOW_SERVICE)) + ((WindowManager) CgeoApplication.getInstance().getSystemService(Context.WINDOW_SERVICE)) .getDefaultDisplay().getSize(dimensions); return dimensions; } diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel13Emulation.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel13Emulation.java index ded20cb..56c784f 100644 --- a/main/src/cgeo/geocaching/compatibility/AndroidLevel13Emulation.java +++ b/main/src/cgeo/geocaching/compatibility/AndroidLevel13Emulation.java @@ -1,6 +1,6 @@ package cgeo.geocaching.compatibility; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import android.content.Context; import android.graphics.Point; @@ -22,7 +22,7 @@ public class AndroidLevel13Emulation implements AndroidLevel13Interface { } private static Display getDisplay() { - return ((WindowManager) cgeoapplication.getInstance().getSystemService(Context.WINDOW_SERVICE)) + return ((WindowManager) CgeoApplication.getInstance().getSystemService(Context.WINDOW_SERVICE)) .getDefaultDisplay(); } } diff --git a/main/src/cgeo/geocaching/connector/AbstractConnector.java b/main/src/cgeo/geocaching/connector/AbstractConnector.java index 28ad12b..b93cda0 100644 --- a/main/src/cgeo/geocaching/connector/AbstractConnector.java +++ b/main/src/cgeo/geocaching/connector/AbstractConnector.java @@ -1,13 +1,12 @@ package cgeo.geocaching.connector; import cgeo.geocaching.Geocache; +import cgeo.geocaching.LogCacheActivity; import cgeo.geocaching.R; import cgeo.geocaching.geopoint.Geopoint; import org.apache.commons.lang3.StringUtils; -import android.app.Activity; - public abstract class AbstractConnector implements IConnector { @Override @@ -79,7 +78,7 @@ public abstract class AbstractConnector implements IConnector { } @Override - public ILoggingManager getLoggingManager(Activity activity, Geocache cache) { + public ILoggingManager getLoggingManager(final LogCacheActivity activity, final Geocache cache) { return new NoLoggingManager(); } diff --git a/main/src/cgeo/geocaching/connector/IConnector.java b/main/src/cgeo/geocaching/connector/IConnector.java index 0c175cd..4ab7bde 100644 --- a/main/src/cgeo/geocaching/connector/IConnector.java +++ b/main/src/cgeo/geocaching/connector/IConnector.java @@ -2,10 +2,9 @@ package cgeo.geocaching.connector; import cgeo.geocaching.Geocache; import cgeo.geocaching.ICache; +import cgeo.geocaching.LogCacheActivity; import cgeo.geocaching.geopoint.Geopoint; -import android.app.Activity; - public interface IConnector { /** * get name for display (currently only used in links) @@ -87,7 +86,7 @@ public interface IConnector { * * @return */ - public ILoggingManager getLoggingManager(Activity activity, Geocache cache); + public ILoggingManager getLoggingManager(final LogCacheActivity activity, final Geocache cache); /** * get host name of the connector server for dynamic loading of data diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java index 835359a..9388de1 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java @@ -1,11 +1,12 @@ package cgeo.geocaching.connector.gc; +import cgeo.geocaching.CgeoApplication; +import cgeo.geocaching.DataStore; import cgeo.geocaching.Geocache; import cgeo.geocaching.ICache; +import cgeo.geocaching.LogCacheActivity; import cgeo.geocaching.R; import cgeo.geocaching.SearchResult; -import cgeo.geocaching.cgData; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.connector.AbstractConnector; import cgeo.geocaching.connector.ILoggingManager; import cgeo.geocaching.connector.capability.ILogin; @@ -15,15 +16,14 @@ import cgeo.geocaching.connector.capability.ISearchByViewPort; import cgeo.geocaching.enumerations.StatusCode; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.Viewport; -import cgeo.geocaching.settings.SettingsActivity; import cgeo.geocaching.settings.Settings; +import cgeo.geocaching.settings.SettingsActivity; import cgeo.geocaching.utils.CancellableHandler; import cgeo.geocaching.utils.Log; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import android.app.Activity; import android.content.Context; import android.os.Handler; @@ -104,7 +104,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, } @Override - public ILoggingManager getLoggingManager(Activity activity, Geocache cache) { + public ILoggingManager getLoggingManager(final LogCacheActivity activity, final Geocache cache) { return new GCLoggingManager(activity, cache); } @@ -137,10 +137,10 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, if (StringUtils.isEmpty(page)) { final SearchResult search = new SearchResult(); - if (cgData.isThere(geocode, guid, true, false)) { + if (DataStore.isThere(geocode, guid, true, false)) { if (StringUtils.isBlank(geocode) && StringUtils.isNotBlank(guid)) { Log.i("Loading old cache from cache."); - search.addGeocode(cgData.getGeocodeForGuid(guid)); + search.addGeocode(DataStore.getGeocodeForGuid(guid)); } else { search.addGeocode(geocode); } @@ -189,7 +189,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, public boolean addToWatchlist(Geocache cache) { final boolean added = GCParser.addToWatchlist(cache); if (added) { - cgData.saveChangedCache(cache); + DataStore.saveChangedCache(cache); } return added; } @@ -198,7 +198,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, public boolean removeFromWatchlist(Geocache cache) { final boolean removed = GCParser.removeFromWatchlist(cache); if (removed) { - cgData.saveChangedCache(cache); + DataStore.saveChangedCache(cache); } return removed; } @@ -215,7 +215,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, public static boolean addToFavorites(Geocache cache) { final boolean added = GCParser.addToFavorites(cache); if (added) { - cgData.saveChangedCache(cache); + DataStore.saveChangedCache(cache); } return added; } @@ -232,7 +232,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, public static boolean removeFromFavorites(Geocache cache) { final boolean removed = GCParser.removeFromFavorites(cache); if (removed) { - cgData.saveChangedCache(cache); + DataStore.saveChangedCache(cache); } return removed; } @@ -241,7 +241,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, public boolean uploadModifiedCoordinates(Geocache cache, Geopoint wpt) { final boolean uploaded = GCParser.uploadModifiedCoordinates(cache, wpt); if (uploaded) { - cgData.saveChangedCache(cache); + DataStore.saveChangedCache(cache); } return uploaded; } @@ -250,7 +250,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, public boolean deleteModifiedCoordinates(Geocache cache) { final boolean deleted = GCParser.deleteModifiedCoordinates(cache); if (deleted) { - cgData.saveChangedCache(cache); + DataStore.saveChangedCache(cache); } return deleted; } @@ -259,7 +259,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, public boolean uploadPersonalNote(Geocache cache) { final boolean uploaded = GCParser.uploadPersonalNote(cache); if (uploaded) { - cgData.saveChangedCache(cache); + DataStore.saveChangedCache(cache); } return uploaded; } @@ -299,13 +299,13 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, final StatusCode status = Login.login(); if (status == StatusCode.NO_ERROR) { - cgeoapplication.getInstance().checkLogin = false; + CgeoApplication.getInstance().checkLogin = false; Login.detectGcCustomDate(); } - if (cgeoapplication.getInstance().showLoginToast && handler != null) { + if (CgeoApplication.getInstance().showLoginToast && handler != null) { handler.sendMessage(handler.obtainMessage(0, status)); - cgeoapplication.getInstance().showLoginToast = false; + CgeoApplication.getInstance().showLoginToast = false; // invoke settings activity to insert login details if (status == StatusCode.NO_LOGIN_INFO_STORED && fromActivity != null) { diff --git a/main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java b/main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java index 2aa5c75..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..d76a987 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCMap.java +++ b/main/src/cgeo/geocaching/connector/gc/GCMap.java @@ -1,9 +1,9 @@ package cgeo.geocaching.connector.gc; +import cgeo.geocaching.DataStore; import cgeo.geocaching.Geocache; import cgeo.geocaching.SearchResult; -import cgeo.geocaching.cgData; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.enumerations.CacheSize; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.enumerations.LiveMapStrategy.Strategy; @@ -236,7 +236,9 @@ public class GCMap { } Log.d("Retrieved " + searchResult.getCount() + " caches for tile " + tile.toString()); - } catch (Exception e) { + } catch (RuntimeException e) { + Log.e("GCMap.parseMapJSON", e); + } catch (JSONException e) { Log.e("GCMap.parseMapJSON", e); } @@ -253,7 +255,7 @@ public class GCMap { * @return */ public static SearchResult searchByViewport(final Viewport viewport, final String[] tokens) { - int speed = (int) cgeoapplication.getInstance().currentGeo().getSpeed() * 60 * 60 / 1000; // in km/h + int speed = (int) CgeoApplication.getInstance().currentGeo().getSpeed() * 60 * 60 / 1000; // in km/h Strategy strategy = Settings.getLiveMapStrategy(); if (strategy == Strategy.AUTO) { strategy = speed >= 30 ? Strategy.FAST : Strategy.DETAILED; @@ -359,7 +361,7 @@ public class GCMap { // Check for vanished found caches if (tiles.iterator().next().getZoomLevel() >= Tile.ZOOMLEVEL_MIN_PERSONALIZED) { - searchResult.addFilteredGeocodes(cgData.getCachedMissingFromSearch(searchResult, tiles, GCConnector.getInstance(), Tile.ZOOMLEVEL_MIN_PERSONALIZED - 1)); + searchResult.addFilteredGeocodes(DataStore.getCachedMissingFromSearch(searchResult, tiles, GCConnector.getInstance(), Tile.ZOOMLEVEL_MIN_PERSONALIZED - 1)); } } @@ -370,7 +372,7 @@ public class GCMap { SearchResult search = GCParser.searchByCoords(center, Settings.getCacheType(), false, null); if (search != null && !search.isEmpty()) { final Set<String> geocodes = search.getGeocodes(); - lastSearchViewport = cgData.getBounds(geocodes); + lastSearchViewport = DataStore.getBounds(geocodes); searchResult.addGeocodes(geocodes); } } diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java index 34e48ab..78d4fea 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCParser.java +++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java @@ -1,5 +1,7 @@ package cgeo.geocaching.connector.gc; +import cgeo.geocaching.CgeoApplication; +import cgeo.geocaching.DataStore; import cgeo.geocaching.Geocache; import cgeo.geocaching.Image; import cgeo.geocaching.LogEntry; @@ -8,8 +10,6 @@ import cgeo.geocaching.SearchResult; import cgeo.geocaching.Trackable; import cgeo.geocaching.TrackableLog; import cgeo.geocaching.Waypoint; -import cgeo.geocaching.cgData; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.enumerations.CacheSize; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.enumerations.LoadFlags; @@ -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); } } @@ -357,7 +357,7 @@ public abstract class GCParser { // save full detailed caches CancellableHandler.sendLoadProgressDetail(handler, R.string.cache_dialog_loading_details_status_cache); - cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); + DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); // update progress message so user knows we're still working. This is more of a place holder than // actual indication of what the program is doing @@ -569,7 +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"); } @@ -667,7 +667,7 @@ public abstract class GCParser { final String originalCoords = TextUtils.getMatch(page, GCConstants.PATTERN_LATLON_ORIG, false, null); if (null != originalCoords) { - final Waypoint waypoint = new Waypoint(cgeoapplication.getInstance().getString(R.string.cache_coordinates_original), WaypointType.ORIGINAL, false); + final Waypoint waypoint = new Waypoint(CgeoApplication.getInstance().getString(R.string.cache_coordinates_original), WaypointType.ORIGINAL, false); waypoint.setCoords(new Geopoint(originalCoords)); cache.addOrChangeWaypoint(waypoint, false); cache.setUserModifiedCoords(true); @@ -706,7 +706,7 @@ public abstract class GCParser { // waypoint name // res is null during the unit tests - final String name = TextUtils.getMatch(wp[6], GCConstants.PATTERN_WPNAME, true, 1, cgeoapplication.getInstance().getString(R.string.waypoint), true); + final String name = TextUtils.getMatch(wp[6], GCConstants.PATTERN_WPNAME, true, 1, CgeoApplication.getInstance().getString(R.string.waypoint), true); // waypoint type final String resulttype = TextUtils.getMatch(wp[3], GCConstants.PATTERN_WPTYPE, null); @@ -1083,7 +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); } @@ -1094,7 +1094,7 @@ public abstract class GCParser { Log.i("Log successfully posted to cache #" + cacheid); if (geocode != null) { - cgData.saveVisitDate(geocode); + DataStore.saveVisitDate(geocode); } Login.getLoginStatus(page); @@ -1396,7 +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,12 +1476,12 @@ public abstract class GCParser { trackable.setDetails(convertLinks(details)); } } - } catch (final Exception e) { + } catch (final RuntimeException e) { // failed to parse trackable details & image Log.w("GCParser.parseTrackable: Failed to parse trackable details & image"); } if (StringUtils.isEmpty(trackable.getDetails()) && page.contains(GCConstants.ERROR_TB_NOT_ACTIVATED)) { - trackable.setDetails(cgeoapplication.getInstance().getString(R.string.trackable_not_activated)); + trackable.setDetails(CgeoApplication.getInstance().getString(R.string.trackable_not_activated)); } // trackable logs @@ -1538,8 +1538,8 @@ public abstract class GCParser { trackable.setTrackingcode(possibleTrackingcode); } - if (cgeoapplication.getInstance() != null) { - cgData.saveTrackable(trackable); + if (CgeoApplication.getInstance() != null) { + DataStore.saveTrackable(trackable); } return trackable; diff --git a/main/src/cgeo/geocaching/connector/gc/Login.java b/main/src/cgeo/geocaching/connector/gc/Login.java index 0d8fb05..4e427ba 100644 --- a/main/src/cgeo/geocaching/connector/gc/Login.java +++ b/main/src/cgeo/geocaching/connector/gc/Login.java @@ -1,7 +1,7 @@ package cgeo.geocaching.connector.gc; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.enumerations.StatusCode; import cgeo.geocaching.network.Cookies; import cgeo.geocaching.network.HtmlImage; @@ -76,7 +76,7 @@ public abstract class Login { return StatusCode.NO_LOGIN_INFO_STORED; } - Login.setActualStatus(cgeoapplication.getInstance().getString(R.string.init_login_popup_working)); + Login.setActualStatus(CgeoApplication.getInstance().getString(R.string.init_login_popup_working)); HttpResponse loginResponse = Network.getRequest("https://www.geocaching.com/login/default.aspx"); String loginData = Network.getResponseData(loginResponse); if (loginResponse != null && loginResponse.getStatusLine().getStatusCode() == 503 && TextUtils.matches(loginData, GCConstants.PATTERN_MAINTENANCE)) { @@ -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 @@ -171,7 +171,7 @@ public abstract class Login { resetLoginStatus(); setActualCachesFound(-1); - setActualStatus(cgeoapplication.getInstance().getString(R.string.err_login)); + setActualStatus(CgeoApplication.getInstance().getString(R.string.err_login)); } static void setActualCachesFound(final int found) { @@ -218,7 +218,7 @@ public abstract class Login { return false; } - setActualStatus(cgeoapplication.getInstance().getString(R.string.init_login_popup_ok)); + setActualStatus(CgeoApplication.getInstance().getString(R.string.init_login_popup_ok)); // on every page except login page setActualLoginStatus(TextUtils.matches(page, GCConstants.PATTERN_LOGIN_NAME)); @@ -246,7 +246,7 @@ public abstract class Login { return true; } - setActualStatus(cgeoapplication.getInstance().getString(R.string.init_login_popup_failed)); + setActualStatus(CgeoApplication.getInstance().getString(R.string.init_login_popup_failed)); return false; } @@ -276,7 +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..8f38641 100644 --- a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java +++ b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java @@ -1,9 +1,10 @@ package cgeo.geocaching.connector.oc; +import cgeo.geocaching.CgeoApplication; +import cgeo.geocaching.DataStore; import cgeo.geocaching.Geocache; +import cgeo.geocaching.LogCacheActivity; import cgeo.geocaching.SearchResult; -import cgeo.geocaching.cgData; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.connector.ILoggingManager; import cgeo.geocaching.connector.capability.ILogin; import cgeo.geocaching.connector.capability.ISearchByCenter; @@ -16,7 +17,6 @@ import cgeo.geocaching.utils.CryptUtils; import org.apache.commons.lang3.StringUtils; -import android.app.Activity; import android.content.Context; import android.os.Handler; @@ -29,9 +29,9 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente private UserInfo userInfo = new UserInfo(StringUtils.EMPTY, 0, UserInfoStatus.NOT_RETRIEVED); public OCApiLiveConnector(String name, String host, String prefix, String licenseString, int cKResId, int cSResId, int isActivePrefKeyId, int tokenPublicPrefKeyId, int tokenSecretPrefKeyId, ApiSupport apiSupport) { - super(name, host, prefix, CryptUtils.rot13(cgeoapplication.getInstance().getResources().getString(cKResId)), licenseString, apiSupport); + super(name, host, prefix, CryptUtils.rot13(CgeoApplication.getInstance().getResources().getString(cKResId)), licenseString, apiSupport); - cS = CryptUtils.rot13(cgeoapplication.getInstance().getResources().getString(cSResId)); + cS = CryptUtils.rot13(CgeoApplication.getInstance().getResources().getString(cSResId)); this.isActivePrefKeyId = isActivePrefKeyId; this.tokenPublicPrefKeyId = tokenPublicPrefKeyId; this.tokenSecretPrefKeyId = tokenSecretPrefKeyId; @@ -87,7 +87,7 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente final boolean added = OkapiClient.setWatchState(cache, true, this); if (added) { - cgData.saveChangedCache(cache); + DataStore.saveChangedCache(cache); } return added; @@ -98,7 +98,7 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente final boolean removed = OkapiClient.setWatchState(cache, false, this); if (removed) { - cgData.saveChangedCache(cache); + DataStore.saveChangedCache(cache); } return removed; @@ -110,7 +110,7 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente } @Override - public ILoggingManager getLoggingManager(Activity activity, Geocache cache) { + public ILoggingManager getLoggingManager(final LogCacheActivity activity, final Geocache cache) { return new OkapiLoggingManager(activity, this, cache); } @@ -145,7 +145,7 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente @Override public String getLoginStatusString() { - return cgeoapplication.getInstance().getString(userInfo.getStatus().resId); + return CgeoApplication.getInstance().getString(userInfo.getStatus().resId); } @Override diff --git a/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java b/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java index 10d6a66..ec6bbf4 100644 --- a/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java +++ b/main/src/cgeo/geocaching/connector/oc/OCAuthorizationActivity.java @@ -1,7 +1,7 @@ package cgeo.geocaching.connector.oc; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.network.OAuthAuthorizationActivity; import cgeo.geocaching.settings.Settings; @@ -17,8 +17,8 @@ public class OCAuthorizationActivity extends OAuthAuthorizationActivity { "/okapi/services/oauth/authorize", "/okapi/services/oauth/access_token", false, - cgeoapplication.getInstance().getResources().getString(authParams.getCKResId()), - cgeoapplication.getInstance().getResources().getString(authParams.getCSResId())); + CgeoApplication.getInstance().getResources().getString(authParams.getCKResId()), + CgeoApplication.getInstance().getResources().getString(authParams.getCSResId())); this.authParams = authParams; } diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java index 189b6a4..0aebcdc 100644 --- a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java +++ b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java @@ -1,12 +1,12 @@ package cgeo.geocaching.connector.oc; +import cgeo.geocaching.DataStore; import cgeo.geocaching.Geocache; import cgeo.geocaching.Image; import cgeo.geocaching.LogEntry; import cgeo.geocaching.R; import cgeo.geocaching.Waypoint; -import cgeo.geocaching.cgData; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.connector.LogResult; @@ -265,7 +265,7 @@ final class OkapiClient { parseCoreCache(response, cache); - cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_CACHE)); + DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_CACHE)); } catch (final JSONException e) { Log.e("OkapiClient.parseSmallCache", e); } @@ -297,7 +297,7 @@ final class OkapiClient { final StringBuilder description = new StringBuilder(500); if (!response.isNull("gc_code")) { final String gccode = response.getString("gc_code"); - description.append(cgeoapplication.getInstance().getResources() + description.append(CgeoApplication.getInstance().getResources() .getString(R.string.cache_listed_on, GCConnector.getInstance().getName())) .append(": <a href=\"http://coord.info/") .append(gccode) @@ -340,7 +340,7 @@ final class OkapiClient { cache.setDetailedUpdatedNow(); // save full detailed caches - cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); + DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); } catch (final JSONException e) { Log.e("OkapiClient.parseCache", e); } diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java b/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java index c995975..9ffe7a2 100644 --- a/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java +++ b/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java @@ -9,7 +9,6 @@ import cgeo.geocaching.connector.LogResult; import cgeo.geocaching.enumerations.LogType; import cgeo.geocaching.enumerations.StatusCode; -import android.app.Activity; import android.net.Uri; import java.util.Arrays; @@ -26,10 +25,10 @@ public class OkapiLoggingManager implements ILoggingManager { private final static List<LogType> standardLogTypes = Arrays.asList(LogType.FOUND_IT, LogType.DIDNT_FIND_IT, LogType.NOTE); private final static List<LogType> eventLogTypes = Arrays.asList(LogType.WILL_ATTEND, LogType.ATTENDED, LogType.NOTE); - public OkapiLoggingManager(Activity activity, OCApiLiveConnector connector, Geocache cache) { + public OkapiLoggingManager(final LogCacheActivity activity, OCApiLiveConnector connector, Geocache cache) { this.connector = connector; this.cache = cache; - this.activity = (LogCacheActivity) activity; + this.activity = activity; } @Override diff --git a/main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java b/main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java index 66ca5f7..9f79896 100644 --- a/main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java +++ b/main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java @@ -1,8 +1,8 @@ package cgeo.geocaching.connector.trackable; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.R; import cgeo.geocaching.Trackable; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.utils.Log; import org.xml.sax.Attributes; @@ -63,15 +63,15 @@ public class GeokretyParser { protected static String getType(int type) { switch (type) { case 0: - return cgeoapplication.getInstance().getString(R.string.geokret_type_traditional); + return CgeoApplication.getInstance().getString(R.string.geokret_type_traditional); case 1: - return cgeoapplication.getInstance().getString(R.string.geokret_type_book_or_media); + return CgeoApplication.getInstance().getString(R.string.geokret_type_book_or_media); case 2: - return cgeoapplication.getInstance().getString(R.string.geokret_type_human); + return CgeoApplication.getInstance().getString(R.string.geokret_type_human); case 3: - return cgeoapplication.getInstance().getString(R.string.geokret_type_coin); + return CgeoApplication.getInstance().getString(R.string.geokret_type_coin); case 4: - return cgeoapplication.getInstance().getString(R.string.geokret_type_post); + return CgeoApplication.getInstance().getString(R.string.geokret_type_post); } return null; } diff --git a/main/src/cgeo/geocaching/enumerations/CacheAttribute.java b/main/src/cgeo/geocaching/enumerations/CacheAttribute.java index 243f63d..1ddfeaf 100644 --- a/main/src/cgeo/geocaching/enumerations/CacheAttribute.java +++ b/main/src/cgeo/geocaching/enumerations/CacheAttribute.java @@ -1,7 +1,7 @@ package cgeo.geocaching.enumerations; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import org.apache.commons.lang3.StringUtils; @@ -143,7 +143,7 @@ public enum CacheAttribute { * @return the localized text */ public String getL10n(final boolean enabled) { - return cgeoapplication.getInstance().getResources().getString( + return CgeoApplication.getInstance().getResources().getString( enabled ? stringIdYes : stringIdNo); } diff --git a/main/src/cgeo/geocaching/enumerations/CacheSize.java b/main/src/cgeo/geocaching/enumerations/CacheSize.java index 726ebe2..a6f8df3 100644 --- a/main/src/cgeo/geocaching/enumerations/CacheSize.java +++ b/main/src/cgeo/geocaching/enumerations/CacheSize.java @@ -1,7 +1,7 @@ package cgeo.geocaching.enumerations; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import java.util.Collections; import java.util.HashMap; @@ -60,7 +60,7 @@ public enum CacheSize { } public final String getL10n() { - return cgeoapplication.getInstance().getBaseContext().getResources().getString(stringId); + return CgeoApplication.getInstance().getBaseContext().getResources().getString(stringId); } } diff --git a/main/src/cgeo/geocaching/enumerations/CacheType.java b/main/src/cgeo/geocaching/enumerations/CacheType.java index c7a9130..c952ba0 100644 --- a/main/src/cgeo/geocaching/enumerations/CacheType.java +++ b/main/src/cgeo/geocaching/enumerations/CacheType.java @@ -2,7 +2,7 @@ package cgeo.geocaching.enumerations; import cgeo.geocaching.ICache; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import java.util.Collections; import java.util.HashMap; @@ -85,7 +85,7 @@ public enum CacheType { } public final String getL10n() { - return cgeoapplication.getInstance().getBaseContext().getResources().getString(stringId); + return CgeoApplication.getInstance().getBaseContext().getResources().getString(stringId); } public boolean isEvent() { @@ -114,7 +114,7 @@ public enum CacheType { } public boolean applyDistanceRule() { - return !isVirtual() && !isEvent(); + return TRADITIONAL == this || PROJECT_APE == this || GCHQ == this; } public boolean isVirtual() { diff --git a/main/src/cgeo/geocaching/enumerations/LiveMapStrategy.java b/main/src/cgeo/geocaching/enumerations/LiveMapStrategy.java index 5f5b2c9..710c3ba 100644 --- a/main/src/cgeo/geocaching/enumerations/LiveMapStrategy.java +++ b/main/src/cgeo/geocaching/enumerations/LiveMapStrategy.java @@ -1,7 +1,7 @@ package cgeo.geocaching.enumerations; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import java.util.EnumSet; @@ -42,7 +42,7 @@ public interface LiveMapStrategy { } public final String getL10n() { - return cgeoapplication.getInstance().getBaseContext().getResources().getString(stringId); + return CgeoApplication.getInstance().getBaseContext().getResources().getString(stringId); } } } diff --git a/main/src/cgeo/geocaching/enumerations/LogType.java b/main/src/cgeo/geocaching/enumerations/LogType.java index 9902d3f..543f83d 100644 --- a/main/src/cgeo/geocaching/enumerations/LogType.java +++ b/main/src/cgeo/geocaching/enumerations/LogType.java @@ -1,7 +1,7 @@ package cgeo.geocaching.enumerations; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; import java.util.Collections; import java.util.HashMap; @@ -102,6 +102,6 @@ public enum LogType { } public final String getL10n() { - return cgeoapplication.getInstance().getBaseContext().getResources().getString(stringId); + return CgeoApplication.getInstance().getBaseContext().getResources().getString(stringId); } } diff --git a/main/src/cgeo/geocaching/enumerations/WaypointType.java b/main/src/cgeo/geocaching/enumerations/WaypointType.java index 79c8106..272b2f2 100644 --- a/main/src/cgeo/geocaching/enumerations/WaypointType.java +++ b/main/src/cgeo/geocaching/enumerations/WaypointType.java @@ -1,7 +1,7 @@ package cgeo.geocaching.enumerations; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; import java.util.Collections; import java.util.HashMap; @@ -65,7 +65,7 @@ public enum WaypointType { } public final String getL10n() { - return cgeoapplication.getInstance().getBaseContext().getResources().getString(stringId); + return CgeoApplication.getInstance().getBaseContext().getResources().getString(stringId); } @Override diff --git a/main/src/cgeo/geocaching/export/AbstractExport.java b/main/src/cgeo/geocaching/export/AbstractExport.java index e4ba5f0..5d15ecb 100644 --- a/main/src/cgeo/geocaching/export/AbstractExport.java +++ b/main/src/cgeo/geocaching/export/AbstractExport.java @@ -1,7 +1,7 @@ package cgeo.geocaching.export; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; abstract class AbstractExport implements Export { private final String name; @@ -23,7 +23,7 @@ abstract class AbstractExport implements Export { * @return localized string */ protected static String getString(int resourceId) { - return cgeoapplication.getInstance().getString(resourceId); + return CgeoApplication.getInstance().getString(resourceId); } /** @@ -36,7 +36,7 @@ abstract class AbstractExport implements Export { * @return localized string */ protected static String getString(int resourceId, Object... params) { - return cgeoapplication.getInstance().getString(resourceId, params); + return CgeoApplication.getInstance().getString(resourceId, params); } @Override diff --git a/main/src/cgeo/geocaching/export/FieldnoteExport.java b/main/src/cgeo/geocaching/export/FieldnoteExport.java index d0040a9..16c8780 100644 --- a/main/src/cgeo/geocaching/export/FieldnoteExport.java +++ b/main/src/cgeo/geocaching/export/FieldnoteExport.java @@ -3,7 +3,7 @@ package cgeo.geocaching.export; import cgeo.geocaching.Geocache; import cgeo.geocaching.LogEntry; import cgeo.geocaching.R; -import cgeo.geocaching.cgData; +import cgeo.geocaching.DataStore; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.connector.gc.Login; import cgeo.geocaching.enumerations.StatusCode; @@ -134,7 +134,7 @@ class FieldnoteExport extends AbstractExport { int i = 0; for (final Geocache cache : caches) { if (cache.isLogOffline()) { - final LogEntry log = cgData.loadLogOffline(cache.getGeocode()); + final LogEntry log = DataStore.loadLogOffline(cache.getGeocode()); if (!onlyNew || log.date > Settings.getFieldnoteExportDate()) { appendFieldNote(fieldNoteBuffer, cache, log); } diff --git a/main/src/cgeo/geocaching/export/GpxExport.java b/main/src/cgeo/geocaching/export/GpxExport.java index 821a3f6..a2e0f93 100644 --- a/main/src/cgeo/geocaching/export/GpxExport.java +++ b/main/src/cgeo/geocaching/export/GpxExport.java @@ -2,7 +2,7 @@ package cgeo.geocaching.export; import cgeo.geocaching.Geocache; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.settings.Settings; import cgeo.geocaching.utils.AsyncTaskWithProgress; @@ -125,7 +125,7 @@ class GpxExport extends AbstractExport { final List<String> allGeocodes = new ArrayList<String>(Arrays.asList(geocodes)); - setMessage(cgeoapplication.getInstance().getResources().getQuantityString(R.plurals.cache_counts, allGeocodes.size(), allGeocodes.size())); + setMessage(CgeoApplication.getInstance().getResources().getQuantityString(R.plurals.cache_counts, allGeocodes.size(), allGeocodes.size())); final File exportFile = getExportFile(); BufferedWriter writer = null; @@ -141,7 +141,7 @@ class GpxExport extends AbstractExport { ExportTask.this.publishProgress(countExported); } }); - } catch (final Exception e) { + } catch (final IOException e) { Log.e("GpxExport.ExportTask export", e); if (writer != null) { diff --git a/main/src/cgeo/geocaching/export/GpxSerializer.java b/main/src/cgeo/geocaching/export/GpxSerializer.java index 1e39be4..e4051b5 100644 --- a/main/src/cgeo/geocaching/export/GpxSerializer.java +++ b/main/src/cgeo/geocaching/export/GpxSerializer.java @@ -1,9 +1,9 @@ package cgeo.geocaching.export; +import cgeo.geocaching.DataStore; import cgeo.geocaching.Geocache; import cgeo.geocaching.LogEntry; import cgeo.geocaching.Waypoint; -import cgeo.geocaching.cgData; import cgeo.geocaching.enumerations.CacheAttribute; import cgeo.geocaching.enumerations.LoadFlags; import cgeo.geocaching.geopoint.Geopoint; @@ -81,7 +81,7 @@ public final class GpxSerializer { } private void exportBatch(final XmlSerializer gpx, Collection<String> geocodesOfBatch) throws IOException { - final Set<Geocache> caches = cgData.loadCaches(geocodesOfBatch, LoadFlags.LOAD_ALL_DB_ONLY); + final Set<Geocache> caches = DataStore.loadCaches(geocodesOfBatch, LoadFlags.LOAD_ALL_DB_ONLY); for (final Geocache cache : caches) { gpx.startTag(PREFIX_GPX, "wpt"); gpx.attribute("", "lat", Double.toString(cache.getCoords().getLatitude())); diff --git a/main/src/cgeo/geocaching/files/GPXImporter.java b/main/src/cgeo/geocaching/files/GPXImporter.java index a1c04d7..bf0aa72 100644 --- a/main/src/cgeo/geocaching/files/GPXImporter.java +++ b/main/src/cgeo/geocaching/files/GPXImporter.java @@ -3,12 +3,12 @@ package cgeo.geocaching.files; import cgeo.geocaching.Geocache; import cgeo.geocaching.R; import cgeo.geocaching.SearchResult; -import cgeo.geocaching.settings.Settings; import cgeo.geocaching.StaticMapsProvider; -import cgeo.geocaching.cgData; -import cgeo.geocaching.activity.IAbstractActivity; +import cgeo.geocaching.DataStore; +import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.activity.Progress; import cgeo.geocaching.enumerations.LoadFlags; +import cgeo.geocaching.settings.Settings; import cgeo.geocaching.utils.CancellableHandler; import cgeo.geocaching.utils.Log; @@ -17,7 +17,6 @@ import org.apache.commons.lang3.StringUtils; import android.app.Activity; import android.app.ProgressDialog; import android.content.ContentResolver; -import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.net.Uri; @@ -61,13 +60,13 @@ public class GPXImporter { private final Resources res; private final int listId; - private final IAbstractActivity fromActivity; + private final Activity fromActivity; private final Handler importFinishedHandler; - public GPXImporter(final IAbstractActivity fromActivity, final int listId, final Handler importFinishedHandler) { + public GPXImporter(final Activity fromActivity, final int listId, final Handler importFinishedHandler) { this.listId = listId; this.fromActivity = fromActivity; - res = ((Activity) fromActivity).getResources(); + res = fromActivity.getResources(); this.importFinishedHandler = importFinishedHandler; } @@ -91,8 +90,8 @@ public class GPXImporter { * Import GPX provided via intent of activity that instantiated this GPXImporter. */ public void importGPX() { - final ContentResolver contentResolver = ((Activity) fromActivity).getContentResolver(); - final Intent intent = ((Activity) fromActivity).getIntent(); + final ContentResolver contentResolver = fromActivity.getContentResolver(); + final Intent intent = fromActivity.getIntent(); final Uri uri = intent.getData(); String mimeType = intent.getType(); @@ -176,7 +175,7 @@ public class GPXImporter { private boolean importStaticMaps(final SearchResult importedCaches) { int storedCacheMaps = 0; for (final String geocode : importedCaches.getGeocodes()) { - final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS); + final Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS); if (cache != null) { Log.d("GPXImporter.ImportThread.importStaticMaps start downloadMaps for cache " + geocode); StaticMapsProvider.downloadMaps(cache); @@ -397,7 +396,7 @@ public class GPXImporter { switch (msg.what) { case IMPORT_STEP_START: final Message cancelMessage = importStepHandler.obtainMessage(IMPORT_STEP_CANCEL); - progress.show((Context) fromActivity, res.getString(R.string.gpx_import_title_reading_file), res.getString(R.string.gpx_import_loading_caches), ProgressDialog.STYLE_HORIZONTAL, cancelMessage); + progress.show(fromActivity, res.getString(R.string.gpx_import_title_reading_file), res.getString(R.string.gpx_import_loading_caches), ProgressDialog.STYLE_HORIZONTAL, cancelMessage); break; case IMPORT_STEP_READ_FILE: @@ -409,7 +408,7 @@ public class GPXImporter { case IMPORT_STEP_STORE_STATIC_MAPS: progress.dismiss(); final Message skipMessage = importStepHandler.obtainMessage(IMPORT_STEP_STATIC_MAPS_SKIPPED, msg.arg2, 0); - progress.show((Context) fromActivity, res.getString(R.string.gpx_import_title_static_maps), res.getString(R.string.gpx_import_store_static_maps), ProgressDialog.STYLE_HORIZONTAL, skipMessage); + progress.show(fromActivity, res.getString(R.string.gpx_import_title_static_maps), res.getString(R.string.gpx_import_store_static_maps), ProgressDialog.STYLE_HORIZONTAL, skipMessage); progress.setMaxProgressAndReset(msg.arg2); break; @@ -418,19 +417,19 @@ public class GPXImporter { progressHandler.cancel(); final StringBuilder bufferSkipped = new StringBuilder(20); bufferSkipped.append(res.getString(R.string.gpx_import_static_maps_skipped)).append(", ").append(msg.arg1).append(' ').append(res.getString(R.string.gpx_import_caches_imported)); - fromActivity.helpDialog(res.getString(R.string.gpx_import_title_caches_imported), bufferSkipped.toString()); + ActivityMixin.helpDialog(fromActivity, res.getString(R.string.gpx_import_title_caches_imported), bufferSkipped.toString()); importFinished(); break; case IMPORT_STEP_FINISHED: progress.dismiss(); - fromActivity.helpDialog(res.getString(R.string.gpx_import_title_caches_imported), msg.arg1 + " " + res.getString(R.string.gpx_import_caches_imported)); + ActivityMixin.helpDialog(fromActivity, res.getString(R.string.gpx_import_title_caches_imported), msg.arg1 + " " + res.getString(R.string.gpx_import_caches_imported)); importFinished(); break; case IMPORT_STEP_FINISHED_WITH_ERROR: progress.dismiss(); - fromActivity.helpDialog(res.getString(R.string.gpx_import_title_caches_import_failed), res.getString(msg.arg1) + "\n\n" + msg.obj); + ActivityMixin.helpDialog(fromActivity, res.getString(R.string.gpx_import_title_caches_import_failed), res.getString(msg.arg1) + "\n\n" + msg.obj); importFinished(); break; @@ -442,7 +441,7 @@ public class GPXImporter { case IMPORT_STEP_CANCELED: final StringBuilder bufferCanceled = new StringBuilder(20); bufferCanceled.append(res.getString(R.string.gpx_import_canceled)); - fromActivity.showShortToast(bufferCanceled.toString()); + ActivityMixin.showShortToast(fromActivity, bufferCanceled.toString()); importFinished(); break; diff --git a/main/src/cgeo/geocaching/files/GPXParser.java b/main/src/cgeo/geocaching/files/GPXParser.java index 7ea0a39..686bfb1 100644 --- a/main/src/cgeo/geocaching/files/GPXParser.java +++ b/main/src/cgeo/geocaching/files/GPXParser.java @@ -1,13 +1,13 @@ package cgeo.geocaching.files; +import cgeo.geocaching.DataStore; import cgeo.geocaching.Geocache; import cgeo.geocaching.LogEntry; import cgeo.geocaching.R; import cgeo.geocaching.StoredList; import cgeo.geocaching.Trackable; import cgeo.geocaching.Waypoint; -import cgeo.geocaching.cgData; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.enumerations.CacheSize; import cgeo.geocaching.enumerations.CacheType; @@ -205,7 +205,7 @@ public abstract class GPXParser extends FileParser { // get text for string String stringName; try { - stringName = cgeoapplication.getInstance().getResources().getResourceName(stringId); + stringName = CgeoApplication.getInstance().getResources().getResourceName(stringId); } catch (final NullPointerException e) { return null; } @@ -272,7 +272,7 @@ public abstract class GPXParser extends FileParser { Double.valueOf(longitude))); } } - } catch (final Exception e) { + } catch (final NumberFormatException e) { Log.w("Failed to parse waypoint's latitude and/or longitude."); } } @@ -312,10 +312,10 @@ public abstract class GPXParser extends FileParser { // finally store the cache in the database result.add(geocode); - cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); + DataStore.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); // avoid the cachecache using lots of memory for caches which the user did not actually look at - cgData.removeAllFromCache(); + DataStore.removeAllFromCache(); showProgressMessage(progressHandler, progressStream.getProgress()); } else if (StringUtils.isNotBlank(cache.getName()) && StringUtils.containsIgnoreCase(type, "waypoint")) { @@ -331,7 +331,7 @@ public abstract class GPXParser extends FileParser { if (cache.getName().length() > 2) { final String cacheGeocodeForWaypoint = "GC" + cache.getName().substring(2).toUpperCase(Locale.US); // lookup cache for waypoint in already parsed caches - final Geocache cacheForWaypoint = cgData.loadCache(cacheGeocodeForWaypoint, LoadFlags.LOAD_CACHE_OR_DB); + final Geocache cacheForWaypoint = DataStore.loadCache(cacheGeocodeForWaypoint, LoadFlags.LOAD_CACHE_OR_DB); if (cacheForWaypoint != null) { final Waypoint waypoint = new Waypoint(cache.getShortDescription(), convertWaypointSym2Type(sym), false); waypoint.setId(-1); @@ -349,7 +349,7 @@ public abstract class GPXParser extends FileParser { newPoints.add(waypoint); Waypoint.mergeWayPoints(newPoints, mergedWayPoints, true); cacheForWaypoint.setWaypoints(newPoints, false); - cgData.saveCache(cacheForWaypoint, EnumSet.of(SaveFlag.SAVE_DB)); + DataStore.saveCache(cacheForWaypoint, EnumSet.of(SaveFlag.SAVE_DB)); showProgressMessage(progressHandler, progressStream.getProgress()); } } @@ -501,7 +501,7 @@ public abstract class GPXParser extends FileParser { if (attrs.getIndex("available") > -1) { cache.setDisabled(!attrs.getValue("available").equalsIgnoreCase("true")); } - } catch (final Exception e) { + } catch (final RuntimeException e) { Log.w("Failed to parse cache attributes."); } } @@ -680,7 +680,7 @@ public abstract class GPXParser extends FileParser { if (attrs.getIndex("ref") > -1) { trackable.setGeocode(attrs.getValue("ref")); } - } catch (final Exception e) { + } catch (final RuntimeException e) { // nothing } } @@ -724,7 +724,7 @@ public abstract class GPXParser extends FileParser { if (attrs.getIndex("id") > -1) { log.id = Integer.parseInt(attrs.getValue("id")); } - } catch (final Exception e) { + } catch (final NumberFormatException e) { // nothing } } @@ -785,7 +785,7 @@ public abstract class GPXParser extends FileParser { try { progressStream = new ProgressInputStream(stream); Xml.parse(progressStream, Xml.Encoding.UTF_8, root.getContentHandler()); - return cgData.loadCaches(result, EnumSet.of(LoadFlag.LOAD_DB_MINIMAL)); + return DataStore.loadCaches(result, EnumSet.of(LoadFlag.LOAD_DB_MINIMAL)); } catch (final SAXException e) { Log.w("Cannot parse .gpx file as GPX " + version + ": could not parse XML - ", e); throw new ParserException("Cannot parse .gpx file as GPX " + version + ": could not parse XML", e); diff --git a/main/src/cgeo/geocaching/files/LocParser.java b/main/src/cgeo/geocaching/files/LocParser.java index 1cfb2a3..3d01c1b 100644 --- a/main/src/cgeo/geocaching/files/LocParser.java +++ b/main/src/cgeo/geocaching/files/LocParser.java @@ -1,8 +1,8 @@ package cgeo.geocaching.files; +import cgeo.geocaching.DataStore; import cgeo.geocaching.Geocache; import cgeo.geocaching.SearchResult; -import cgeo.geocaching.cgData; import cgeo.geocaching.enumerations.CacheSize; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.enumerations.LoadFlags; @@ -59,7 +59,7 @@ public final class LocParser extends FileParser { contained.add(geocode); } } - Set<Geocache> caches = cgData.loadCaches(contained, LoadFlags.LOAD_CACHE_OR_DB); + Set<Geocache> caches = DataStore.loadCaches(contained, LoadFlags.LOAD_CACHE_OR_DB); for (Geocache cache : caches) { Geocache coord = cidCoords.get(cache.getGeocode()); copyCoordToCache(coord, cache); diff --git a/main/src/cgeo/geocaching/files/LocalStorage.java b/main/src/cgeo/geocaching/files/LocalStorage.java index fc82409..05713cc 100644 --- a/main/src/cgeo/geocaching/files/LocalStorage.java +++ b/main/src/cgeo/geocaching/files/LocalStorage.java @@ -1,6 +1,6 @@ package cgeo.geocaching.files; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.utils.CryptUtils; import cgeo.geocaching.utils.FileUtils; import cgeo.geocaching.utils.IOUtils; @@ -86,7 +86,7 @@ public final class LocalStorage { private static File getInternalStorageBase() { if (internalStorageBase == null) { // A race condition will do no harm as the operation is idempotent. No need to synchronize. - internalStorageBase = cgeoapplication.getInstance().getApplicationContext().getFilesDir().getParentFile(); + internalStorageBase = CgeoApplication.getInstance().getApplicationContext().getFilesDir().getParentFile(); } return internalStorageBase; } diff --git a/main/src/cgeo/geocaching/files/SimpleDirChooser.java b/main/src/cgeo/geocaching/files/SimpleDirChooser.java index cf969dc..ba7c679 100644 --- a/main/src/cgeo/geocaching/files/SimpleDirChooser.java +++ b/main/src/cgeo/geocaching/files/SimpleDirChooser.java @@ -93,7 +93,7 @@ public class SimpleDirChooser extends AbstractListActivity { for (File currentDir : dirs) { listDirs.add(new Option(currentDir.getName(), currentDir.getAbsolutePath())); } - } catch (Exception e) { + } catch (RuntimeException e) { } Collections.sort(listDirs); if (dir.getParent() != null) { diff --git a/main/src/cgeo/geocaching/filter/AbstractRangeFilter.java b/main/src/cgeo/geocaching/filter/AbstractRangeFilter.java index 96d256a..cafb92b 100644 --- a/main/src/cgeo/geocaching/filter/AbstractRangeFilter.java +++ b/main/src/cgeo/geocaching/filter/AbstractRangeFilter.java @@ -1,6 +1,6 @@ package cgeo.geocaching.filter; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; abstract class AbstractRangeFilter extends AbstractFilter { @@ -9,7 +9,7 @@ abstract class AbstractRangeFilter extends AbstractFilter { protected final float rangeMax; protected AbstractRangeFilter(final int ressourceId, final int range) { - super(cgeoapplication.getInstance().getResources().getString(ressourceId) + ' ' + (range == 5 ? '5' : range + " + " + String.format("%.1f", range + 0.5))); + super(CgeoApplication.getInstance().getResources().getString(ressourceId) + ' ' + (range == 5 ? '5' : range + " + " + String.format("%.1f", range + 0.5))); this.rangeMin = range; rangeMax = rangeMin + 1f; } diff --git a/main/src/cgeo/geocaching/filter/AttributeFilter.java b/main/src/cgeo/geocaching/filter/AttributeFilter.java index cadcf49..6f0d5da 100644 --- a/main/src/cgeo/geocaching/filter/AttributeFilter.java +++ b/main/src/cgeo/geocaching/filter/AttributeFilter.java @@ -1,9 +1,9 @@ package cgeo.geocaching.filter; +import cgeo.geocaching.CgeoApplication; +import cgeo.geocaching.DataStore; import cgeo.geocaching.Geocache; import cgeo.geocaching.R; -import cgeo.geocaching.cgData; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.enumerations.LoadFlags.LoadFlag; import android.content.res.Resources; @@ -29,7 +29,7 @@ class AttributeFilter extends AbstractFilter { @Override public boolean accepts(final Geocache cache) { - Geocache fullCache = cgData.loadCache(cache.getGeocode(), EnumSet.of(LoadFlag.LOAD_ATTRIBUTES)); + Geocache fullCache = DataStore.loadCache(cache.getGeocode(), EnumSet.of(LoadFlag.LOAD_ATTRIBUTES)); if (fullCache == null) { fullCache = cache; } @@ -40,8 +40,8 @@ class AttributeFilter extends AbstractFilter { @Override public List<IFilter> getFilters() { - final String packageName = cgeoapplication.getInstance().getBaseContext().getPackageName(); - final Resources res = cgeoapplication.getInstance().getResources(); + final String packageName = CgeoApplication.getInstance().getBaseContext().getPackageName(); + final Resources res = CgeoApplication.getInstance().getResources(); final List<IFilter> filters = new LinkedList<IFilter>(); for (final String id: res.getStringArray(R.array.attribute_ids)) { diff --git a/main/src/cgeo/geocaching/filter/DistanceFilter.java b/main/src/cgeo/geocaching/filter/DistanceFilter.java index 2f39473..54225d2 100644 --- a/main/src/cgeo/geocaching/filter/DistanceFilter.java +++ b/main/src/cgeo/geocaching/filter/DistanceFilter.java @@ -3,7 +3,7 @@ package cgeo.geocaching.filter; import cgeo.geocaching.Geocache; import cgeo.geocaching.IGeoData; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.geopoint.Geopoint; import java.util.ArrayList; @@ -18,7 +18,7 @@ class DistanceFilter extends AbstractFilter { super(name); this.minDistance = minDistance; this.maxDistance = maxDistance; - geo = cgeoapplication.getInstance().currentGeo(); + geo = CgeoApplication.getInstance().currentGeo(); } @Override @@ -27,7 +27,7 @@ class DistanceFilter extends AbstractFilter { final Geopoint coords = cache.getCoords(); if (coords == null) { // If a cache has no coordinates, consider it to be out of range. It will - // happen with archived cache. + // happen with archived caches. return false; } final float distance = currentPos.distanceTo(coords); @@ -50,8 +50,8 @@ class DistanceFilter extends AbstractFilter { else { maxRange = Integer.MAX_VALUE; } - final String range = maxRange == Integer.MAX_VALUE ? "> " + String.valueOf(minRange) : String.valueOf(minRange) + " - " + String.valueOf(maxRange); - final String name = cgeoapplication.getInstance().getResources().getQuantityString(R.plurals.tts_kilometers, maxRange, range); + final String range = maxRange == Integer.MAX_VALUE ? "> " + minRange : minRange + " - " + maxRange; + final String name = CgeoApplication.getInstance().getResources().getQuantityString(R.plurals.tts_kilometers, maxRange, range); filters.add(new DistanceFilter(name, minRange, maxRange)); } return filters; diff --git a/main/src/cgeo/geocaching/filter/FilterUserInterface.java b/main/src/cgeo/geocaching/filter/FilterUserInterface.java index 2404f44..8ff700a 100644 --- a/main/src/cgeo/geocaching/filter/FilterUserInterface.java +++ b/main/src/cgeo/geocaching/filter/FilterUserInterface.java @@ -1,7 +1,7 @@ package cgeo.geocaching.filter; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.settings.Settings; import cgeo.geocaching.utils.Log; @@ -41,7 +41,7 @@ public final class FilterUserInterface { public FilterUserInterface(final Activity activity) { this.activity = activity; - this.res = cgeoapplication.getInstance().getResources(); + this.res = CgeoApplication.getInstance().getResources(); registry = new ArrayList<FactoryEntry>(); if (Settings.getCacheType() == CacheType.ALL) { diff --git a/main/src/cgeo/geocaching/filter/ModifiedFilter.java b/main/src/cgeo/geocaching/filter/ModifiedFilter.java index 74befda..d976b69 100644 --- a/main/src/cgeo/geocaching/filter/ModifiedFilter.java +++ b/main/src/cgeo/geocaching/filter/ModifiedFilter.java @@ -2,7 +2,7 @@ package cgeo.geocaching.filter; import cgeo.geocaching.Geocache; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import java.util.Collections; import java.util.List; @@ -10,7 +10,7 @@ import java.util.List; class ModifiedFilter extends AbstractFilter implements IFilterFactory { public ModifiedFilter() { - super(cgeoapplication.getInstance().getString(R.string.caches_filter_modified)); + super(CgeoApplication.getInstance().getString(R.string.caches_filter_modified)); } @Override diff --git a/main/src/cgeo/geocaching/filter/StateFilter.java b/main/src/cgeo/geocaching/filter/StateFilter.java index 98589ab..d5b3027 100644 --- a/main/src/cgeo/geocaching/filter/StateFilter.java +++ b/main/src/cgeo/geocaching/filter/StateFilter.java @@ -1,8 +1,8 @@ package cgeo.geocaching.filter; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.Geocache; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; import android.content.res.Resources; @@ -13,7 +13,7 @@ import java.util.List; abstract class StateFilter extends AbstractFilter { - static final Resources res = cgeoapplication.getInstance().getResources(); + static final Resources res = CgeoApplication.getInstance().getResources(); protected StateFilter(final String name) { super(name); diff --git a/main/src/cgeo/geocaching/filter/TrackablesFilter.java b/main/src/cgeo/geocaching/filter/TrackablesFilter.java index 74f43be..d836a0f 100644 --- a/main/src/cgeo/geocaching/filter/TrackablesFilter.java +++ b/main/src/cgeo/geocaching/filter/TrackablesFilter.java @@ -1,15 +1,15 @@ package cgeo.geocaching.filter; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.Geocache; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; import java.util.Collections; import java.util.List; class TrackablesFilter extends AbstractFilter implements IFilterFactory { public TrackablesFilter() { - super(cgeoapplication.getInstance().getString(R.string.caches_filter_track)); + super(CgeoApplication.getInstance().getString(R.string.caches_filter_track)); } @Override diff --git a/main/src/cgeo/geocaching/gcvote/GCVote.java b/main/src/cgeo/geocaching/gcvote/GCVote.java index 868be2b..f20a6d4 100644 --- a/main/src/cgeo/geocaching/gcvote/GCVote.java +++ b/main/src/cgeo/geocaching/gcvote/GCVote.java @@ -16,20 +16,28 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.regex.Pattern; public final class GCVote { - private static final Pattern patternLogIn = Pattern.compile("loggedIn='([^']+)'", Pattern.CASE_INSENSITIVE); - private static final Pattern patternGuid = Pattern.compile("cacheId='([^']+)'", Pattern.CASE_INSENSITIVE); - private static final Pattern patternWaypoint = Pattern.compile("waypoint='([^']+)'", Pattern.CASE_INSENSITIVE); - private static final Pattern patternRating = Pattern.compile("voteAvg='([0-9.]+)'", Pattern.CASE_INSENSITIVE); - private static final Pattern patternVotes = Pattern.compile("voteCnt='([0-9]+)'", Pattern.CASE_INSENSITIVE); - private static final Pattern patternVote = Pattern.compile("voteUser='([0-9.]+)'", Pattern.CASE_INSENSITIVE); - private static final Pattern patternVoteElement = Pattern.compile("<vote ([^>]+)>", Pattern.CASE_INSENSITIVE); + public static final float NO_RATING = 0; + private static final Pattern PATTERN_LOG_IN = Pattern.compile("loggedIn='([^']+)'", Pattern.CASE_INSENSITIVE); + private static final Pattern PATTERN_GUID = Pattern.compile("cacheId='([^']+)'", Pattern.CASE_INSENSITIVE); + private static final Pattern PATTERN_WAYPOINT = Pattern.compile("waypoint='([^']+)'", Pattern.CASE_INSENSITIVE); + private static final Pattern PATTERN_RATING = Pattern.compile("voteAvg='([0-9.]+)'", Pattern.CASE_INSENSITIVE); + private static final Pattern PATTERN_VOTES = Pattern.compile("voteCnt='([0-9]+)'", Pattern.CASE_INSENSITIVE); + private static final Pattern PATTERN_VOTE = Pattern.compile("voteUser='([0-9.]+)'", Pattern.CASE_INSENSITIVE); + private static final Pattern PATTERN_VOTE_ELEMENT = Pattern.compile("<vote ([^>]+)>", Pattern.CASE_INSENSITIVE); private static final int MAX_CACHED_RATINGS = 1000; - private static LeastRecentlyUsedMap<String, GCVoteRating> ratingsCache = new LeastRecentlyUsedMap.LruCache<String, GCVoteRating>(MAX_CACHED_RATINGS); + private static final LeastRecentlyUsedMap<String, GCVoteRating> RATINGS_CACHE = new LeastRecentlyUsedMap.LruCache<String, GCVoteRating>(MAX_CACHED_RATINGS); + private static final float MIN_RATING = 1; + private static final float MAX_RATING = 5; + + private GCVote() { + // utility class + } /** * Get user rating for a given guid or geocode. For a guid first the ratings cache is checked @@ -39,9 +47,9 @@ public final class GCVote { * @param geocode * @return */ - public static GCVoteRating getRating(String guid, String geocode) { - if (StringUtils.isNotBlank(guid) && ratingsCache.containsKey(guid)) { - return ratingsCache.get(guid); + public static GCVoteRating getRating(final String guid, final String geocode) { + if (StringUtils.isNotBlank(guid) && RATINGS_CACHE.containsKey(guid)) { + return RATINGS_CACHE.get(guid); } final Map<String, GCVoteRating> ratings = getRating(singletonOrNull(guid), singletonOrNull(geocode)); @@ -59,7 +67,7 @@ public final class GCVote { * @param geocodes * @return */ - public static Map<String, GCVoteRating> getRating(List<String> guids, List<String> geocodes) { + public static Map<String, GCVoteRating> getRating(final List<String> guids, final List<String> geocodes) { if (guids == null && geocodes == null) { return null; } @@ -88,7 +96,7 @@ public final class GCVote { return null; } - final MatcherWrapper matcherVoteElement = new MatcherWrapper(patternVoteElement, page); + final MatcherWrapper matcherVoteElement = new MatcherWrapper(PATTERN_VOTE_ELEMENT, page); while (matcherVoteElement.find()) { String voteData = matcherVoteElement.group(1); if (voteData == null) { @@ -97,29 +105,21 @@ public final class GCVote { String id = null; String guid = null; - try { - final MatcherWrapper matcherGuid = new MatcherWrapper(patternGuid, voteData); - if (matcherGuid.find()) { - if (matcherGuid.groupCount() > 0) { - guid = matcherGuid.group(1); - if (requestByGuids) { - id = guid; - } + final MatcherWrapper matcherGuid = new MatcherWrapper(PATTERN_GUID, voteData); + if (matcherGuid.find()) { + if (matcherGuid.groupCount() > 0) { + guid = matcherGuid.group(1); + if (requestByGuids) { + id = guid; } } - } catch (Exception e) { - Log.w("GCVote.getRating: Failed to parse guid"); } if (!requestByGuids) { - try { - final MatcherWrapper matcherWp = new MatcherWrapper(patternWaypoint, voteData); - if (matcherWp.find()) { - if (matcherWp.groupCount() > 0) { - id = matcherWp.group(1); - } + final MatcherWrapper matcherWp = new MatcherWrapper(PATTERN_WAYPOINT, voteData); + if (matcherWp.find()) { + if (matcherWp.groupCount() > 0) { + id = matcherWp.group(1); } - } catch (Exception e) { - Log.w("GCVote.getRating: Failed to parse waypoint"); } } if (id == null) { @@ -127,53 +127,49 @@ public final class GCVote { } boolean loggedIn = false; - try { - final MatcherWrapper matcherLoggedIn = new MatcherWrapper(patternLogIn, page); - if (matcherLoggedIn.find()) { - if (matcherLoggedIn.groupCount() > 0) { - if (matcherLoggedIn.group(1).equalsIgnoreCase("true")) { - loggedIn = true; - } + final MatcherWrapper matcherLoggedIn = new MatcherWrapper(PATTERN_LOG_IN, page); + if (matcherLoggedIn.find()) { + if (matcherLoggedIn.groupCount() > 0) { + if (matcherLoggedIn.group(1).equalsIgnoreCase("true")) { + loggedIn = true; } } - } catch (Exception e) { - Log.w("GCVote.getRating: Failed to parse loggedIn"); } - float rating = 0; + float rating = NO_RATING; try { - final MatcherWrapper matcherRating = new MatcherWrapper(patternRating, voteData); + final MatcherWrapper matcherRating = new MatcherWrapper(PATTERN_RATING, voteData); if (matcherRating.find()) { rating = Float.parseFloat(matcherRating.group(1)); } - } catch (Exception e) { + } catch (NumberFormatException e) { Log.w("GCVote.getRating: Failed to parse rating"); } - if (rating <= 0) { + if (!isValidRating(rating)) { continue; } int votes = -1; try { - final MatcherWrapper matcherVotes = new MatcherWrapper(patternVotes, voteData); + final MatcherWrapper matcherVotes = new MatcherWrapper(PATTERN_VOTES, voteData); if (matcherVotes.find()) { votes = Integer.parseInt(matcherVotes.group(1)); } - } catch (Exception e) { + } catch (NumberFormatException e) { Log.w("GCVote.getRating: Failed to parse vote count"); } if (votes < 0) { continue; } - float myVote = 0; + float myVote = NO_RATING; if (loggedIn) { try { - final MatcherWrapper matcherVote = new MatcherWrapper(patternVote, voteData); + final MatcherWrapper matcherVote = new MatcherWrapper(PATTERN_VOTE, voteData); if (matcherVote.find()) { myVote = Float.parseFloat(matcherVote.group(1)); } - } catch (Exception e) { + } catch (NumberFormatException e) { Log.w("GCVote.getRating: Failed to parse user's vote"); } } @@ -181,10 +177,10 @@ public final class GCVote { if (StringUtils.isNotBlank(id)) { GCVoteRating gcvoteRating = new GCVoteRating(rating, votes, myVote); ratings.put(id, gcvoteRating); - ratingsCache.put(guid, gcvoteRating); + RATINGS_CACHE.put(guid, gcvoteRating); } } - } catch (Exception e) { + } catch (RuntimeException e) { Log.e("GCVote.getRating", e); } @@ -198,18 +194,11 @@ public final class GCVote { * @param vote * @return {@code true} if the rating was submitted successfully */ - public static boolean setRating(Geocache cache, double vote) { - if (!Settings.isGCvoteLogin()) { - return false; - } - if (!cache.supportsGCVote()) { + public static boolean setRating(final Geocache cache, final float vote) { + if (!isVotingPossible(cache)) { return false; } - String guid = cache.getGuid(); - if (StringUtils.isBlank(guid)) { - return false; - } - if (vote <= 0.0 || vote > 5.0) { + if (!isValidRating(vote)) { return false; } @@ -221,16 +210,16 @@ public final class GCVote { final Parameters params = new Parameters( "userName", login.left, "password", login.right, - "cacheId", guid, + "cacheId", cache.getGuid(), "voteUser", String.format("%.1f", vote).replace(',', '.'), "version", "cgeo"); final String result = Network.getResponseData(Network.getRequest("http://gcvote.com/setVote.php", params)); - return result.trim().equalsIgnoreCase("ok"); + return result != null && result.trim().equalsIgnoreCase("ok"); } - public static void loadRatings(ArrayList<Geocache> caches) { + public static void loadRatings(final ArrayList<Geocache> caches) { if (!Settings.isRatingWanted()) { return; } @@ -266,4 +255,17 @@ public final class GCVote { Log.e("GCvote.loadRatings", e); } } + + public static boolean isValidRating(final float rating) { + return rating >= MIN_RATING && rating <= MAX_RATING; + } + + public static String getRatingText(final float rating) { + return String.format(Locale.getDefault(), "%.1f", rating); + } + + public static boolean isVotingPossible(final Geocache cache) { + return Settings.isGCvoteLogin() && StringUtils.isNotBlank(cache.getGuid()) && cache.supportsGCVote(); + } + } diff --git a/main/src/cgeo/geocaching/gcvote/GCVoteRating.java b/main/src/cgeo/geocaching/gcvote/GCVoteRating.java index f6813a2..1e65589 100644 --- a/main/src/cgeo/geocaching/gcvote/GCVoteRating.java +++ b/main/src/cgeo/geocaching/gcvote/GCVoteRating.java @@ -5,7 +5,7 @@ public final class GCVoteRating { private final int votes; private final float myVote; - public GCVoteRating(float rating, int votes, float myVote) { + public GCVoteRating(final float rating, final int votes, final float myVote) { this.rating = rating; this.votes = votes; this.myVote = myVote; diff --git a/main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java index 722f9f5..605f461 100644 --- a/main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java +++ b/main/src/cgeo/geocaching/loaders/HistoryGeocacheListLoader.java @@ -1,8 +1,8 @@ package cgeo.geocaching.loaders; +import cgeo.geocaching.DataStore; import cgeo.geocaching.SearchResult; import cgeo.geocaching.settings.Settings; -import cgeo.geocaching.cgData; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.geopoint.Geopoint; @@ -18,7 +18,7 @@ public class HistoryGeocacheListLoader extends AbstractSearchLoader { @Override public SearchResult runSearch() { - return cgData.getHistoryOfCaches(true, coords != null ? Settings.getCacheType() : CacheType.ALL); + return DataStore.getHistoryOfCaches(true, coords != null ? Settings.getCacheType() : CacheType.ALL); } } diff --git a/main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java b/main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java index ab8ba6a..5088484 100644 --- a/main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java +++ b/main/src/cgeo/geocaching/loaders/OfflineGeocacheListLoader.java @@ -2,7 +2,7 @@ package cgeo.geocaching.loaders; import cgeo.geocaching.SearchResult; import cgeo.geocaching.settings.Settings; -import cgeo.geocaching.cgData; +import cgeo.geocaching.DataStore; import cgeo.geocaching.geopoint.Geopoint; import android.content.Context; @@ -20,7 +20,7 @@ public class OfflineGeocacheListLoader extends AbstractSearchLoader { @Override public SearchResult runSearch() { - return cgData.getBatchOfStoredCaches(searchCenter, Settings.getCacheType(), listId); + return DataStore.getBatchOfStoredCaches(searchCenter, Settings.getCacheType(), listId); } public void setListId(int listId) { diff --git a/main/src/cgeo/geocaching/loaders/RemoveFromHistoryLoader.java b/main/src/cgeo/geocaching/loaders/RemoveFromHistoryLoader.java index 2229afe..8ca0fa5 100644 --- a/main/src/cgeo/geocaching/loaders/RemoveFromHistoryLoader.java +++ b/main/src/cgeo/geocaching/loaders/RemoveFromHistoryLoader.java @@ -1,8 +1,8 @@ package cgeo.geocaching.loaders; +import cgeo.geocaching.DataStore; import cgeo.geocaching.SearchResult; import cgeo.geocaching.settings.Settings; -import cgeo.geocaching.cgData; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.geopoint.Geopoint; @@ -21,8 +21,8 @@ public class RemoveFromHistoryLoader extends AbstractSearchLoader { @Override public SearchResult runSearch() { - cgData.clearVisitDate(selected); - return cgData.getHistoryOfCaches(true, coords != null ? Settings.getCacheType() : CacheType.ALL); + DataStore.clearVisitDate(selected); + return DataStore.getHistoryOfCaches(true, coords != null ? Settings.getCacheType() : CacheType.ALL); } } diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java index 0817170..78c1571 100644 --- a/main/src/cgeo/geocaching/maps/CGeoMap.java +++ b/main/src/cgeo/geocaching/maps/CGeoMap.java @@ -1,5 +1,6 @@ package cgeo.geocaching.maps; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.DirectionProvider; import cgeo.geocaching.Geocache; import cgeo.geocaching.IGeoData; @@ -7,9 +8,8 @@ import cgeo.geocaching.R; import cgeo.geocaching.SearchResult; import cgeo.geocaching.StoredList; import cgeo.geocaching.Waypoint; -import cgeo.geocaching.cgData; -import cgeo.geocaching.cgeoapplication; -import cgeo.geocaching.cgeocaches; +import cgeo.geocaching.DataStore; +import cgeo.geocaching.CacheListActivity; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.gc.Login; @@ -128,7 +128,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto private MapItemFactory mapItemFactory = null; private Activity activity = null; private MapViewImpl mapView = null; - private cgeoapplication app = null; + private CgeoApplication app = null; final private GeoDirHandler geoDirUpdate = new UpdateLoc(); private SearchResult searchIntent = null; private String geocodeIntent = null; @@ -359,9 +359,9 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto // class init res = this.getResources(); activity = this.getActivity(); - app = (cgeoapplication) activity.getApplication(); + app = (CgeoApplication) activity.getApplication(); - int countBubbleCnt = cgData.getAllCachesCount(); + int countBubbleCnt = DataStore.getAllCachesCount(); caches = new LeastRecentlyUsedSet<Geocache>(MAX_CACHES + countBubbleCnt); final MapProvider mapProvider = Settings.getMapProvider(); @@ -491,7 +491,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto if (!CollectionUtils.isEmpty(dirtyCaches)) { for (String geocode : dirtyCaches) { - Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS); + Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS); if (cache != null) { // new collection type needs to remove first caches.remove(cache); @@ -609,7 +609,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto default: // DETAILED menu.findItem(R.id.menu_strategy_detailed).setChecked(true); } - } catch (Exception e) { + } catch (RuntimeException e) { Log.e("CGeoMap.onPrepareOptionsMenu", e); } @@ -641,7 +641,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto final List<String> geocodes = new ArrayList<String>(); for (final String geocode : geocodesInViewport) { - if (!cgData.isOffline(geocode, null)) { + if (!DataStore.isOffline(geocode, null)) { geocodes.add(geocode); } } @@ -690,7 +690,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto selectMapTheme(); return true; case R.id.menu_as_list: { - cgeocaches.startActivityMap(activity, new SearchResult(getGeocodesForCachesInViewport())); + CacheListActivity.startActivityMap(activity, new SearchResult(getGeocodesForCachesInViewport())); return true; } case R.id.menu_strategy_fastest: { @@ -948,7 +948,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto mapView.repaintRequired(overlayPosition); } } - } catch (Exception e) { + } catch (RuntimeException e) { Log.w("Failed to update location."); } } @@ -1090,7 +1090,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto SearchResult searchResult; if (mapMode == MapMode.LIVE) { - searchResult = isLiveEnabled ? new SearchResult() : new SearchResult(cgData.loadStoredInViewport(viewport, Settings.getCacheType())); + searchResult = isLiveEnabled ? new SearchResult() : new SearchResult(DataStore.loadStoredInViewport(viewport, Settings.getCacheType())); } else { // map started from another activity searchResult = searchIntent != null ? new SearchResult(searchIntent) : new SearchResult(); @@ -1100,7 +1100,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto } // live mode search result if (isLiveEnabled) { - searchResult.addSearchResult(cgData.loadCachedInViewport(viewport, Settings.getCacheType())); + searchResult.addSearchResult(DataStore.loadCachedInViewport(viewport, Settings.getCacheType())); } downloaded = true; @@ -1123,7 +1123,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto || mapMode == MapMode.COORDS) { //All visible waypoints CacheType type = Settings.getCacheType(); - Set<Waypoint> waypointsInViewport = cgData.loadWaypoints(viewport, excludeMine, excludeDisabled, type); + Set<Waypoint> waypointsInViewport = DataStore.loadWaypoints(viewport, excludeMine, excludeDisabled, type); waypoints.addAll(waypointsInViewport); } else { @@ -1196,8 +1196,8 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto // first remove filtered out final Set<String> filteredCodes = searchResult.getFilteredGeocodes(); Log.d("Filtering out " + filteredCodes.size() + " caches: " + filteredCodes.toString()); - caches.removeAll(cgData.loadCaches(filteredCodes, LoadFlags.LOAD_CACHE_ONLY)); - cgData.removeCaches(filteredCodes, EnumSet.of(RemoveFlag.REMOVE_CACHE)); + caches.removeAll(DataStore.loadCaches(filteredCodes, LoadFlags.LOAD_CACHE_ONLY)); + DataStore.removeCaches(filteredCodes, EnumSet.of(RemoveFlag.REMOVE_CACHE)); // new collection type needs to remove first to refresh caches.removeAll(result); caches.addAll(result); @@ -1409,7 +1409,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto break; } - if (!cgData.isOffline(geocode, null)) { + if (!DataStore.isOffline(geocode, null)) { if ((System.currentTimeMillis() - last) < 1500) { try { int delay = 1000 + (int) (Math.random() * 1000.0) - (int) (System.currentTimeMillis() - last); @@ -1418,7 +1418,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto } sleep(delay); - } catch (Exception e) { + } catch (InterruptedException e) { // nothing } } @@ -1501,7 +1501,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto try { mapController.setCenter(mapItemFactory.getGeoPointBase(new Geopoint(mapState[0] / 1.0e6, mapState[1] / 1.0e6))); mapController.setZoom(mapState[2]); - } catch (Exception e) { + } catch (RuntimeException e) { // nothing at all } @@ -1512,9 +1512,9 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto Viewport viewport = null; if (geocodeCenter != null) { - viewport = cgData.getBounds(geocodeCenter); + viewport = DataStore.getBounds(geocodeCenter); } else if (searchCenter != null) { - viewport = cgData.getBounds(searchCenter.getGeocodes()); + viewport = DataStore.getBounds(searchCenter.getGeocodes()); } if (viewport == null) { @@ -1525,7 +1525,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto if (viewport.getLatitudeSpan() != 0 && viewport.getLongitudeSpan() != 0) { mapController.zoomToSpan((int) (viewport.getLatitudeSpan() * 1e6), (int) (viewport.getLongitudeSpan() * 1e6)); } - } catch (Exception e) { + } catch (RuntimeException e) { // nothing at all } diff --git a/main/src/cgeo/geocaching/maps/CachesOverlay.java b/main/src/cgeo/geocaching/maps/CachesOverlay.java index 8e117eb..cd2ff75 100644 --- a/main/src/cgeo/geocaching/maps/CachesOverlay.java +++ b/main/src/cgeo/geocaching/maps/CachesOverlay.java @@ -4,9 +4,8 @@ import cgeo.geocaching.CachePopup; import cgeo.geocaching.Geocache; import cgeo.geocaching.IWaypoint; import cgeo.geocaching.R; -import cgeo.geocaching.settings.Settings; import cgeo.geocaching.WaypointPopup; -import cgeo.geocaching.cgData; +import cgeo.geocaching.DataStore; import cgeo.geocaching.activity.Progress; import cgeo.geocaching.connector.gc.GCMap; import cgeo.geocaching.enumerations.CacheType; @@ -19,11 +18,13 @@ import cgeo.geocaching.maps.interfaces.MapItemFactory; import cgeo.geocaching.maps.interfaces.MapProjectionImpl; import cgeo.geocaching.maps.interfaces.MapProvider; import cgeo.geocaching.maps.interfaces.MapViewImpl; +import cgeo.geocaching.settings.Settings; import cgeo.geocaching.utils.Log; import org.apache.commons.lang3.StringUtils; import android.content.Context; +import android.content.res.Resources.NotFoundException; import android.graphics.Canvas; import android.graphics.DashPathEffect; import android.graphics.Paint; @@ -121,6 +122,8 @@ public class CachesOverlay extends AbstractItemizedOverlay { try { lazyInitializeDrawingObjects(); canvas.setDrawFilter(setFilter); + final int height = canvas.getHeight(); + final int width = canvas.getWidth(); final int radius = calculateDrawingRadius(projection); final Point center = new Point(); @@ -130,16 +133,17 @@ public class CachesOverlay extends AbstractItemizedOverlay { final Geopoint itemCoord = item.getCoord().getCoords(); final GeoPointImpl itemGeo = mapItemFactory.getGeoPointBase(itemCoord); projection.toPixels(itemGeo, center); - - // dashed circle around the waypoint - blockedCircle.setColor(0x66BB0000); - blockedCircle.setStyle(Style.STROKE); - canvas.drawCircle(center.x, center.y, radius, blockedCircle); - - // filling the circle area with a transparent color - blockedCircle.setColor(0x44BB0000); - blockedCircle.setStyle(Style.FILL); - canvas.drawCircle(center.x, center.y, radius, blockedCircle); + if (center.x > -radius && center.y > -radius && center.x < width + radius && center.y < height + radius) { + // dashed circle around the waypoint + blockedCircle.setColor(0x66BB0000); + blockedCircle.setStyle(Style.STROKE); + canvas.drawCircle(center.x, center.y, radius, blockedCircle); + + // filling the circle area with a transparent color + blockedCircle.setColor(0x44BB0000); + blockedCircle.setStyle(Style.FILL); + canvas.drawCircle(center.x, center.y, radius, blockedCircle); + } } } canvas.setDrawFilter(removeFilter); @@ -224,7 +228,7 @@ public class CachesOverlay extends AbstractItemizedOverlay { final IWaypoint coordinate = item.getCoord(); if (StringUtils.isNotBlank(coordinate.getCoordType()) && coordinate.getCoordType().equalsIgnoreCase("cache") && StringUtils.isNotBlank(coordinate.getGeocode())) { - Geocache cache = cgData.loadCache(coordinate.getGeocode(), LoadFlags.LOAD_CACHE_OR_DB); + Geocache cache = DataStore.loadCache(coordinate.getGeocode(), LoadFlags.LOAD_CACHE_OR_DB); RequestDetailsThread requestDetailsThread = new RequestDetailsThread(cache); if (!requestDetailsThread.requestRequired()) { // don't show popup if we have enough details @@ -243,7 +247,7 @@ public class CachesOverlay extends AbstractItemizedOverlay { } progress.dismiss(); - } catch (Exception e) { + } catch (NotFoundException e) { Log.e("CachesOverlay.onTap", e); if (progress != null) { progress.dismiss(); diff --git a/main/src/cgeo/geocaching/maps/MapProviderFactory.java b/main/src/cgeo/geocaching/maps/MapProviderFactory.java index a03fc47..2e43e19 100644 --- a/main/src/cgeo/geocaching/maps/MapProviderFactory.java +++ b/main/src/cgeo/geocaching/maps/MapProviderFactory.java @@ -1,7 +1,7 @@ package cgeo.geocaching.maps; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.maps.google.GoogleMapProvider; import cgeo.geocaching.maps.interfaces.MapProvider; import cgeo.geocaching.maps.interfaces.MapSource; @@ -31,7 +31,7 @@ public class MapProviderFactory { public static boolean isGoogleMapsInstalled() { // Check if API key is available - if (StringUtils.isBlank(cgeoapplication.getInstance().getString(R.string.maps_api_key))) { + if (StringUtils.isBlank(CgeoApplication.getInstance().getString(R.string.maps_api_key))) { Log.w("No Google API key available."); return false; } diff --git a/main/src/cgeo/geocaching/maps/PositionHistory.java b/main/src/cgeo/geocaching/maps/PositionHistory.java index 9b090fc..bc6779e 100644 --- a/main/src/cgeo/geocaching/maps/PositionHistory.java +++ b/main/src/cgeo/geocaching/maps/PositionHistory.java @@ -28,7 +28,7 @@ public class PositionHistory { if (coordinates.getAccuracy() >= 50f) { return; } - if (coordinates.getLatitude() == 0.0 && coordinates.getLatitude() == 0.0) { + if (coordinates.getLatitude() == 0.0 && coordinates.getLongitude() == 0.0) { return; } if (history.isEmpty()) { diff --git a/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java b/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java index 1fa38ad..cb95b2c 100644 --- a/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java +++ b/main/src/cgeo/geocaching/maps/google/GoogleMapProvider.java @@ -1,7 +1,7 @@ package cgeo.geocaching.maps.google; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.maps.AbstractMapProvider; import cgeo.geocaching.maps.AbstractMapSource; import cgeo.geocaching.maps.interfaces.MapItemFactory; @@ -20,7 +20,7 @@ public final class GoogleMapProvider extends AbstractMapProvider { private final MapItemFactory mapItemFactory; private GoogleMapProvider() { - final Resources resources = cgeoapplication.getInstance().getResources(); + final Resources resources = CgeoApplication.getInstance().getResources(); registerMapSource(new GoogleMapSource(this, resources.getString(R.string.map_source_google_map))); registerMapSource(new GoogleSatelliteSource(this, resources.getString(R.string.map_source_google_satellite))); diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java index d099b79..50dc51d 100644 --- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java +++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java @@ -1,7 +1,7 @@ package cgeo.geocaching.maps.mapsforge; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.maps.AbstractMapProvider; import cgeo.geocaching.maps.MapProviderFactory; import cgeo.geocaching.maps.interfaces.MapItemFactory; @@ -33,7 +33,7 @@ public final class MapsforgeMapProvider extends AbstractMapProvider { private MapItemFactory mapItemFactory = new MapsforgeMapItemFactory(); private MapsforgeMapProvider() { - final Resources resources = cgeoapplication.getInstance().getResources(); + final Resources resources = CgeoApplication.getInstance().getResources(); registerMapSource(new MapsforgeMapSource(MAPSFORGE_MAPNIK_ID, this, resources.getString(R.string.map_source_osm_mapnik), MapGeneratorInternal.MAPNIK)); registerMapSource(new MapsforgeMapSource(MAPSFORGE_CYCLEMAP_ID, this, resources.getString(R.string.map_source_osm_cyclemap), MapGeneratorInternal.OPENCYCLEMAP)); @@ -163,7 +163,7 @@ public final class MapsforgeMapProvider extends AbstractMapProvider { public void updateOfflineMaps() { MapProviderFactory.deleteOfflineMapSources(); - final Resources resources = cgeoapplication.getInstance().getResources(); + final Resources resources = CgeoApplication.getInstance().getResources(); final List<String> offlineMaps = getOfflineMaps(); for (String mapFile : offlineMaps) { final String mapName = StringUtils.capitalize(StringUtils.substringBeforeLast(new File(mapFile).getName(), ".")); diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java index aa11405..dc4e82c 100644 --- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java +++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java @@ -1,7 +1,6 @@ package cgeo.geocaching.maps.mapsforge; import cgeo.geocaching.R; -import cgeo.geocaching.settings.Settings; import cgeo.geocaching.geopoint.Viewport; import cgeo.geocaching.maps.CachesOverlay; import cgeo.geocaching.maps.PositionOverlay; @@ -15,6 +14,7 @@ import cgeo.geocaching.maps.interfaces.MapViewImpl; import cgeo.geocaching.maps.interfaces.OnMapDragListener; import cgeo.geocaching.maps.interfaces.OverlayImpl; import cgeo.geocaching.maps.interfaces.OverlayImpl.OverlayType; +import cgeo.geocaching.settings.Settings; import cgeo.geocaching.utils.Log; import org.apache.commons.lang3.StringUtils; @@ -46,6 +46,9 @@ public class MapsforgeMapView extends MapView implements MapViewImpl { public MapsforgeMapView(Context context, AttributeSet attrs) { super(context, attrs); gestureDetector = new GestureDetector(context, new GestureListener()); + if (Settings.isScaleMapsforgeText()) { + this.setTextScale(getResources().getDisplayMetrics().density); + } } @Override diff --git a/main/src/cgeo/geocaching/network/HtmlImage.java b/main/src/cgeo/geocaching/network/HtmlImage.java index 797e67d..f7fbb30 100644 --- a/main/src/cgeo/geocaching/network/HtmlImage.java +++ b/main/src/cgeo/geocaching/network/HtmlImage.java @@ -1,8 +1,8 @@ package cgeo.geocaching.network; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.R; import cgeo.geocaching.StoredList; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.compatibility.Compatibility; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.files.LocalStorage; @@ -74,7 +74,7 @@ public class HtmlImage implements Html.ImageGetter { Point displaySize = Compatibility.getDisplaySize(); this.maxWidth = displaySize.x - 25; this.maxHeight = displaySize.y - 25; - this.resources = cgeoapplication.getInstance().getResources(); + this.resources = CgeoApplication.getInstance().getResources(); } @Override diff --git a/main/src/cgeo/geocaching/network/Network.java b/main/src/cgeo/geocaching/network/Network.java index 3aa1828..431730b 100644 --- a/main/src/cgeo/geocaching/network/Network.java +++ b/main/src/cgeo/geocaching/network/Network.java @@ -34,9 +34,9 @@ import ch.boye.httpclientandroidlib.params.CoreProtocolPNames; import ch.boye.httpclientandroidlib.params.HttpParams; import ch.boye.httpclientandroidlib.protocol.HttpContext; import ch.boye.httpclientandroidlib.util.EntityUtils; - import org.apache.commons.lang3.CharEncoding; import org.apache.commons.lang3.StringUtils; +import org.eclipse.jdt.annotation.Nullable; import org.json.JSONException; import org.json.JSONObject; @@ -54,8 +54,6 @@ import java.nio.charset.Charset; public abstract class Network { - private static final int NB_DOWNLOAD_RETRIES = 4; - /** User agent id */ private final static String PC_USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1"; /** Native user agent, taken from a Android 2.2 Nexus **/ @@ -75,7 +73,7 @@ public abstract class Network { static { Network.clientParams.setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, CharEncoding.UTF_8); Network.clientParams.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 30000); - Network.clientParams.setParameter(CoreConnectionPNames.SO_TIMEOUT, 30000); + Network.clientParams.setParameter(CoreConnectionPNames.SO_TIMEOUT, 90000); Network.clientParams.setParameter(ClientPNames.HANDLE_REDIRECTS, true); } @@ -150,6 +148,7 @@ public abstract class Network { * @param params the parameters to add to the POST request * @return the HTTP response, or null in case of an encoding error params */ + @Nullable public static HttpResponse postRequest(final String uri, final Parameters params) { return request("POST", uri, params, null, null); } @@ -162,6 +161,7 @@ public abstract class Network { * @params headers the headers to add to the request * @return the HTTP response, or null in case of an encoding error params */ + @Nullable public static HttpResponse postRequest(final String uri, final Parameters params, final Parameters headers) { return request("POST", uri, params, headers, null); } @@ -173,6 +173,7 @@ public abstract class Network { * @param json the json object to add to the POST request * @return the HTTP response, or null in case of an encoding error params */ + @Nullable public static HttpResponse postJsonRequest(final String uri, final JSONObject json) { HttpPost request = new HttpPost(uri); request.addHeader("Content-Type", "application/json; charset=utf-8"); @@ -197,6 +198,7 @@ public abstract class Network { * @param file the file to include in the request * @return the HTTP response, or null in case of an encoding error param */ + @Nullable public static HttpResponse postRequest(final String uri, final Parameters params, final String fileFieldName, final String fileContentType, final File file) { final MultipartEntity entity = new MultipartEntity(); @@ -232,7 +234,9 @@ public abstract class Network { * the cache file used to cache this query * @return the HTTP response, or null in case of an encoding error in a POST request arguments */ - private static HttpResponse request(final String method, final String uri, final Parameters params, final Parameters headers, final File cacheFile) { + @Nullable + private static HttpResponse request(final String method, final String uri, + @Nullable final Parameters params, @Nullable final Parameters headers, @Nullable final File cacheFile) { HttpRequestBase request; if (method.equals("GET")) { final String fullUri = params == null ? uri : Uri.parse(uri).buildUpon().encodedQuery(params.toString()).build().toString(); @@ -263,7 +267,7 @@ public abstract class Network { * @param cacheFile * if non-null, the file to take ETag and If-Modified-Since information from */ - private static void addHeaders(final HttpRequestBase request, final Parameters headers, final File cacheFile) { + private static void addHeaders(final HttpRequestBase request, @Nullable final Parameters headers, @Nullable final File cacheFile) { for (final NameValuePair header : Parameters.extend(Parameters.merge(headers, cacheHeaders(cacheFile)), "Accept-Charset", "utf-8,iso-8859-1;q=0.8,utf-16;q=0.8,*;q=0.7", "Accept-Language", "en-US,*;q=0.9", @@ -282,37 +286,32 @@ public abstract class Network { * @return * the response, or null if there has been a failure */ + @Nullable private static HttpResponse doRepeatedRequests(final HttpRequestBase request) { final String reqLogStr = request.getMethod() + " " + Network.hidePassword(request.getURI().toString()); Log.d(reqLogStr); final HttpClient client = Network.getHttpClient(); - for (int i = 0; i <= Network.NB_DOWNLOAD_RETRIES; i++) { - final long before = System.currentTimeMillis(); - try { - final HttpResponse response = client.execute(request); - int status = response.getStatusLine().getStatusCode(); - if (status == 200) { - Log.d(status + Network.formatTimeSpan(before) + reqLogStr); - } else { - Log.w(status + " [" + response.getStatusLine().getReasonPhrase() + "]" + Network.formatTimeSpan(before) + reqLogStr); - } - return response; - } catch (IOException e) { - final String timeSpan = Network.formatTimeSpan(before); - final String tries = (i + 1) + "/" + (Network.NB_DOWNLOAD_RETRIES + 1); - if (i == Network.NB_DOWNLOAD_RETRIES) { - Log.w("Failure " + tries + timeSpan + reqLogStr + " (" + e.toString() + ")"); - } else { - Log.w("Failure " + tries + " (" + e.toString() + ")" + timeSpan + "- retrying " + reqLogStr); - } + final long before = System.currentTimeMillis(); + try { + final HttpResponse response = client.execute(request); + int status = response.getStatusLine().getStatusCode(); + if (status == 200) { + Log.d(status + Network.formatTimeSpan(before) + reqLogStr); + } else { + Log.w(status + " [" + response.getStatusLine().getReasonPhrase() + "]" + Network.formatTimeSpan(before) + reqLogStr); } + return response; + } catch (IOException e) { + final String timeSpan = Network.formatTimeSpan(before); + Log.w("Failure" + timeSpan + reqLogStr + " (" + e.toString() + ")"); } return null; } - private static Parameters cacheHeaders(final File cacheFile) { + @Nullable + private static Parameters cacheHeaders(@Nullable final File cacheFile) { if (cacheFile == null || !cacheFile.exists()) { return null; } @@ -343,7 +342,8 @@ public abstract class Network { * the name of the file storing the cached resource, or null not to use one * @return the HTTP response */ - public static HttpResponse getRequest(final String uri, final Parameters params, final File cacheFile) { + @Nullable + public static HttpResponse getRequest(final String uri, @Nullable final Parameters params, @Nullable final File cacheFile) { return request("GET", uri, params, null, cacheFile); } @@ -357,7 +357,8 @@ public abstract class Network { * the parameters to add the the GET request * @return the HTTP response */ - public static HttpResponse getRequest(final String uri, final Parameters params) { + @Nullable + public static HttpResponse getRequest(final String uri, @Nullable final Parameters params) { return request("GET", uri, params, null, null); } @@ -372,7 +373,8 @@ public abstract class Network { * the headers to add to the GET request * @return the HTTP response */ - public static HttpResponse getRequest(final String uri, final Parameters params, final Parameters headers) { + @Nullable + public static HttpResponse getRequest(final String uri, @Nullable final Parameters params, @Nullable final Parameters headers) { return request("GET", uri, params, headers, null); } @@ -383,6 +385,7 @@ public abstract class Network { * the URI to request * @return the HTTP response */ + @Nullable public static HttpResponse getRequest(final String uri) { return request("GET", uri, null, null, null); } @@ -392,7 +395,7 @@ public abstract class Network { return " (" + (System.currentTimeMillis() - before) + " ms) "; } - static public boolean isSuccess(final HttpResponse response) { + static public boolean isSuccess(@Nullable final HttpResponse response) { return response != null && response.getStatusLine().getStatusCode() == 200; } @@ -403,7 +406,8 @@ public abstract class Network { * @param params the query parameters, or <code>null</code> if there are none * @return a JSON object if the request was successful and the body could be decoded, <code>null</code> otherwise */ - public static JSONObject requestJSON(final String uri, final Parameters params) { + @Nullable + public static JSONObject requestJSON(final String uri, @Nullable final Parameters params) { final HttpResponse response = request("GET", uri, params, new Parameters("Accept", "application/json, text/javascript, */*; q=0.01"), null); final String responseData = Network.getResponseData(response, false); if (responseData != null) { @@ -417,6 +421,7 @@ public abstract class Network { return null; } + @Nullable private static String getResponseDataNoError(final HttpResponse response, boolean replaceWhitespace) { try { String data = EntityUtils.toString(response.getEntity(), CharEncoding.UTF_8); @@ -435,7 +440,8 @@ public abstract class Network { * @param response a HTTP response, which can be null * @return the body if the response comes from a successful HTTP request, <code>null</code> otherwise */ - public static String getResponseData(final HttpResponse response) { + @Nullable + public static String getResponseData(@Nullable final HttpResponse response) { return Network.getResponseData(response, true); } @@ -447,17 +453,22 @@ public abstract class Network { * should be called on the body * @return the body if the response comes from a successful HTTP request, <code>null</code> otherwise */ - public static String getResponseData(final HttpResponse response, boolean replaceWhitespace) { + @Nullable + public static String getResponseData(@Nullable final HttpResponse response, boolean replaceWhitespace) { if (!isSuccess(response)) { return null; } + assert response != null; // Caught above return getResponseDataNoError(response, replaceWhitespace); } + @Nullable public static String rfc3986URLEncode(String text) { - return StringUtils.replace(Network.encode(text).replace("+", "%20"), "%7E", "~"); + final String encoded = Network.encode(text); + return encoded != null ? StringUtils.replace(encoded.replace("+", "%20"), "%7E", "~") : null; } + @Nullable public static String decode(final String text) { try { return URLDecoder.decode(text, CharEncoding.UTF_8); @@ -467,6 +478,7 @@ public abstract class Network { return null; } + @Nullable public static String encode(final String text) { try { return URLEncoder.encode(text, CharEncoding.UTF_8); diff --git a/main/src/cgeo/geocaching/network/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/network/StatusUpdater.java b/main/src/cgeo/geocaching/network/StatusUpdater.java index ee9bc31..cb4c7f4 100644 --- a/main/src/cgeo/geocaching/network/StatusUpdater.java +++ b/main/src/cgeo/geocaching/network/StatusUpdater.java @@ -1,6 +1,6 @@ package cgeo.geocaching.network; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.utils.MemorySubject; import cgeo.geocaching.utils.PeriodicHandler; import cgeo.geocaching.utils.PeriodicHandler.PeriodicHandlerListener; @@ -42,8 +42,8 @@ public class StatusUpdater extends MemorySubject<StatusUpdater.Status> implement public void onPeriodic() { final JSONObject response = Network.requestJSON("http://status.cgeo.org/api/status.json", - new Parameters("version_code", String.valueOf(Version.getVersionCode(cgeoapplication.getInstance())), - "version_name", Version.getVersionName(cgeoapplication.getInstance()), + new Parameters("version_code", String.valueOf(Version.getVersionCode(CgeoApplication.getInstance())), + "version_name", Version.getVersionName(CgeoApplication.getInstance()), "locale", Locale.getDefault().toString())); if (response != null) { notifyObservers(new Status(get(response, "message"), get(response, "message_id"), get(response, "icon"), get(response, "url"))); diff --git a/main/src/cgeo/geocaching/settings/AuthorizeOcPreference.java b/main/src/cgeo/geocaching/settings/AuthorizeOcPreference.java index f5d6a57..15b5976 100644 --- a/main/src/cgeo/geocaching/settings/AuthorizeOcPreference.java +++ b/main/src/cgeo/geocaching/settings/AuthorizeOcPreference.java @@ -1,7 +1,7 @@ package cgeo.geocaching.settings; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.connector.oc.OCDEAuthorizationActivity; import cgeo.geocaching.connector.oc.OCPLAuthorizationActivity; @@ -35,7 +35,7 @@ public class AuthorizeOcPreference extends Preference { private OCAuthorizations getAuthorization() { final String prefKey = getKey(); for (OCAuthorizations auth : OCAuthorizations.values()) { - if (auth.prefKeyId != NO_KEY && prefKey.equals(cgeoapplication.getInstance().getString(auth.prefKeyId))) { + if (auth.prefKeyId != NO_KEY && prefKey.equals(CgeoApplication.getInstance().getString(auth.prefKeyId))) { return auth; } } diff --git a/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java b/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java index a019c4a..fbf08fa 100644 --- a/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java +++ b/main/src/cgeo/geocaching/settings/RegisterSend2CgeoPreference.java @@ -99,7 +99,7 @@ public class RegisterSend2CgeoPreference extends Preference { if (response != null && response.getStatusLine().getStatusCode() == 200) { //response was OK - String[] strings = Network.getResponseData(response).split(","); + String[] strings = StringUtils.split(Network.getResponseData(response), ','); try { pin = Integer.parseInt(strings[1].trim()); } catch (Exception e) { diff --git a/main/src/cgeo/geocaching/settings/Settings.java b/main/src/cgeo/geocaching/settings/Settings.java index 71c6d4a..51f0729 100644 --- a/main/src/cgeo/geocaching/settings/Settings.java +++ b/main/src/cgeo/geocaching/settings/Settings.java @@ -1,8 +1,8 @@ package cgeo.geocaching.settings; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.R; import cgeo.geocaching.StoredList; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory.NavigationAppsEnum; import cgeo.geocaching.connector.gc.GCConstants; import cgeo.geocaching.connector.gc.Login; @@ -69,7 +69,7 @@ public final class Settings { } private static final SharedPreferences sharedPrefs = PreferenceManager - .getDefaultSharedPreferences(cgeoapplication.getInstance().getBaseContext()); + .getDefaultSharedPreferences(CgeoApplication.getInstance().getBaseContext()); static { migrateSettings(); Log.setDebug(sharedPrefs.getBoolean(getKey(R.string.pref_debug), false)); @@ -90,7 +90,7 @@ public final class Settings { int oldVersion = getInt(R.string.pref_settingsversion, 0); if (oldVersion < 1) { final String oldPreferencesName = "cgeo.pref"; - final SharedPreferences old = cgeoapplication.getInstance().getSharedPreferences(oldPreferencesName, Context.MODE_PRIVATE); + final SharedPreferences old = CgeoApplication.getInstance().getSharedPreferences(oldPreferencesName, Context.MODE_PRIVATE); final Editor e = sharedPrefs.edit(); e.putString(getKey(R.string.pref_temp_twitter_token_secret), old.getString(getKey(R.string.pref_temp_twitter_token_secret), null)); @@ -191,7 +191,7 @@ public final class Settings { } private static String getKey(final int prefKeyId) { - return cgeoapplication.getInstance().getString(prefKeyId); + return CgeoApplication.getInstance().getString(prefKeyId); } static String getString(final int prefKeyId, final String defaultValue) { @@ -257,7 +257,7 @@ public final class Settings { public static void setLanguage(boolean useEnglish) { final Configuration config = new Configuration(); config.locale = useEnglish ? Locale.ENGLISH : Locale.getDefault(); - final Resources resources = cgeoapplication.getInstance().getResources(); + final Resources resources = CgeoApplication.getInstance().getResources(); resources.updateConfiguration(config, resources.getDisplayMetrics()); } @@ -441,6 +441,10 @@ public final class Settings { return MapsforgeMapProvider.isValidMapFile(mapFileIn); } + public static boolean isScaleMapsforgeText() { + return getBoolean(R.string.pref_mapsforge_scale_text, true); + } + public static CoordInputFormatEnum getCoordInputFormat() { return CoordInputFormatEnum.fromInt(getInt(R.string.pref_coordinputformat, 0)); } @@ -471,7 +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); @@ -548,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..e2b9b9b 100644 --- a/main/src/cgeo/geocaching/settings/SettingsActivity.java +++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java @@ -1,13 +1,14 @@ package cgeo.geocaching.settings; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.Intents; import cgeo.geocaching.R; import cgeo.geocaching.SelectMapfileActivity; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory.NavigationAppsEnum; import cgeo.geocaching.compatibility.Compatibility; +import cgeo.geocaching.connector.gc.GCConnector; import cgeo.geocaching.connector.gc.Login; import cgeo.geocaching.files.SimpleDirChooser; import cgeo.geocaching.maps.MapProviderFactory; @@ -151,10 +152,26 @@ public class SettingsActivity extends PreferenceActivity { getPreference(R.string.pref_connectorOCActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER); getPreference(R.string.pref_connectorOCPLActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER); getPreference(R.string.pref_connectorGCActive).setOnPreferenceChangeListener(VALUE_CHANGE_LISTENER); + setWebsite(R.string.pref_fakekey_gc_website, GCConnector.getInstance().getHost()); + setWebsite(R.string.pref_fakekey_ocde_website, "opencaching.de"); + setWebsite(R.string.pref_fakekey_ocpl_website, "opencaching.pl"); + setWebsite(R.string.pref_fakekey_gcvote_website, "gcvote.com"); + setWebsite(R.string.pref_fakekey_sendtocgeo_website, "send2.cgeo.org"); + } + + private void setWebsite(final int preferenceKey, final String host) { + Preference preference = getPreference(preferenceKey); + preference.setOnPreferenceClickListener(new OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(final Preference preference) { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://" + host))); + return true; + } + }); } private static String getKey(final int prefKeyId) { - return cgeoapplication.getInstance().getString(prefKeyId); + return CgeoApplication.getInstance().getString(prefKeyId); } private Preference getPreference(final int keyId) { @@ -337,7 +354,7 @@ public class SettingsActivity extends PreferenceActivity { @Override public boolean onPreferenceClick(final Preference preference) { boolean oldValue = Settings.isDbOnSDCard(); - ((cgeoapplication) SettingsActivity.this.getApplication()) + ((CgeoApplication) SettingsActivity.this.getApplication()) .moveDatabase(SettingsActivity.this); return oldValue != Settings.isDbOnSDCard(); } @@ -506,7 +523,7 @@ public class SettingsActivity extends PreferenceActivity { preference.setSummary(mapSource.getName()); } else if (isPreference(preference, R.string.pref_connectorOCActive) || isPreference(preference, R.string.pref_connectorOCPLActive) || isPreference(preference, R.string.pref_connectorGCActive)) { // // reset log-in status if connector activation was changed - cgeoapplication.getInstance().checkLogin = true; + CgeoApplication.getInstance().checkLogin = true; } else if (preference instanceof ListPreference) { // For list preferences, look up the correct display value in // the preference's 'entries' list. @@ -537,7 +554,7 @@ public class SettingsActivity extends PreferenceActivity { if (Login.isActualLoginStatus()) { Login.logout(); } - cgeoapplication.getInstance().checkLogin = true; + CgeoApplication.getInstance().checkLogin = true; } return true; } diff --git a/main/src/cgeo/geocaching/sorting/ComparatorUserInterface.java b/main/src/cgeo/geocaching/sorting/ComparatorUserInterface.java index 4d1a994..3cdd393 100644 --- a/main/src/cgeo/geocaching/sorting/ComparatorUserInterface.java +++ b/main/src/cgeo/geocaching/sorting/ComparatorUserInterface.java @@ -90,7 +90,9 @@ public class ComparatorUserInterface { CacheComparator comparator = entry.cacheComparator.newInstance(); runAfterwards.run(comparator); } - } catch (Exception e) { + } catch (InstantiationException e) { + Log.e("selectComparator", e); + } catch (IllegalAccessException e) { Log.e("selectComparator", e); } dialog.dismiss(); diff --git a/main/src/cgeo/geocaching/sorting/DateComparator.java b/main/src/cgeo/geocaching/sorting/DateComparator.java index 3464103..091f6a4 100644 --- a/main/src/cgeo/geocaching/sorting/DateComparator.java +++ b/main/src/cgeo/geocaching/sorting/DateComparator.java @@ -1,7 +1,7 @@ package cgeo.geocaching.sorting; import cgeo.geocaching.Geocache; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import java.util.ArrayList; import java.util.Date; @@ -27,7 +27,7 @@ public class DateComparator extends AbstractCacheComparator { final ArrayList<Geocache> list = new ArrayList<Geocache>(); list.add(cache1); list.add(cache2); - final DistanceComparator distanceComparator = new DistanceComparator(cgeoapplication.getInstance().currentGeo().getCoords(), list); + final DistanceComparator distanceComparator = new DistanceComparator(CgeoApplication.getInstance().currentGeo().getCoords(), list); return distanceComparator.compare(cache1, cache2); } return dateDifference; diff --git a/main/src/cgeo/geocaching/sorting/FindsComparator.java b/main/src/cgeo/geocaching/sorting/FindsComparator.java index ba929b8..b147fad 100644 --- a/main/src/cgeo/geocaching/sorting/FindsComparator.java +++ b/main/src/cgeo/geocaching/sorting/FindsComparator.java @@ -1,7 +1,7 @@ package cgeo.geocaching.sorting; +import cgeo.geocaching.DataStore; import cgeo.geocaching.Geocache; -import cgeo.geocaching.cgData; import cgeo.geocaching.enumerations.LogType; public class FindsComparator extends AbstractCacheComparator { @@ -20,7 +20,7 @@ public class FindsComparator extends AbstractCacheComparator { private static int getFindsCount(Geocache cache) { if (cache.getLogCounts().isEmpty()) { - cache.setLogCounts(cgData.loadLogCounts(cache.getGeocode())); + cache.setLogCounts(DataStore.loadLogCounts(cache.getGeocode())); } Integer logged = cache.getLogCounts().get(LogType.FOUND_IT); if (logged != null) { diff --git a/main/src/cgeo/geocaching/speech/SpeechService.java b/main/src/cgeo/geocaching/speech/SpeechService.java index 1907bfc..baa843b 100644 --- a/main/src/cgeo/geocaching/speech/SpeechService.java +++ b/main/src/cgeo/geocaching/speech/SpeechService.java @@ -2,7 +2,7 @@ package cgeo.geocaching.speech; import cgeo.geocaching.DirectionProvider; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.settings.Settings; @@ -48,7 +48,7 @@ public class SpeechService extends Service implements OnInitListener { GeoDirHandler geoHandler = new GeoDirHandler() { @Override protected void updateDirection(float newDirection) { - if (cgeoapplication.getInstance().currentGeo().getSpeed() <= 5) { + if (CgeoApplication.getInstance().currentGeo().getSpeed() <= 5) { direction = DirectionProvider.getDirectionNow(startingActivity, newDirection); directionInitialized = true; updateCompass(); diff --git a/main/src/cgeo/geocaching/speech/TextFactory.java b/main/src/cgeo/geocaching/speech/TextFactory.java index 81a74fb..72475f7 100644 --- a/main/src/cgeo/geocaching/speech/TextFactory.java +++ b/main/src/cgeo/geocaching/speech/TextFactory.java @@ -1,8 +1,8 @@ package cgeo.geocaching.speech; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.R; import cgeo.geocaching.settings.Settings; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.IConversion; import cgeo.geocaching.utils.AngleUtils; @@ -78,11 +78,11 @@ public class TextFactory { } private static String getString(int resourceId, Object... formatArgs) { - return cgeoapplication.getInstance().getString(resourceId, formatArgs); + return CgeoApplication.getInstance().getString(resourceId, formatArgs); } private static String getQuantityString(int resourceId, int quantity, Object... formatArgs) { - return cgeoapplication.getInstance().getResources().getQuantityString(resourceId, quantity, formatArgs); + return CgeoApplication.getInstance().getResources().getQuantityString(resourceId, quantity, formatArgs); } private static String getDirection(Geopoint position, Geopoint target, float direction) { diff --git a/main/src/cgeo/geocaching/twitter/Twitter.java b/main/src/cgeo/geocaching/twitter/Twitter.java index 7233764..c3f99fa 100644 --- a/main/src/cgeo/geocaching/twitter/Twitter.java +++ b/main/src/cgeo/geocaching/twitter/Twitter.java @@ -1,9 +1,9 @@ package cgeo.geocaching.twitter; +import cgeo.geocaching.CgeoApplication; +import cgeo.geocaching.DataStore; import cgeo.geocaching.Geocache; import cgeo.geocaching.Trackable; -import cgeo.geocaching.cgData; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.enumerations.LoadFlags; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.GeopointFormatter.Format; @@ -22,16 +22,16 @@ public final class Twitter { private static final int MAX_TWEET_SIZE = 140; public static void postTweetCache(String geocode) { - final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); - postTweet(cgeoapplication.getInstance(), getStatusMessage(cache), null); + final Geocache cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); + postTweet(CgeoApplication.getInstance(), getStatusMessage(cache), null); } public static void postTweetTrackable(String geocode) { - final Trackable trackable = cgData.loadTrackable(geocode); - postTweet(cgeoapplication.getInstance(), getStatusMessage(trackable), null); + final Trackable trackable = DataStore.loadTrackable(geocode); + postTweet(CgeoApplication.getInstance(), getStatusMessage(trackable), null); } - private static void postTweet(final cgeoapplication app, final String status, final Geopoint coords) { + private static void postTweet(final CgeoApplication app, final String status, final Geopoint coords) { if (app == null || !Settings.isUseTwitter() || !Settings.isTwitterLoginValid()) { return; } diff --git a/main/src/cgeo/geocaching/ui/AbstractUIFactory.java b/main/src/cgeo/geocaching/ui/AbstractUIFactory.java index 2351383..0d447f2 100644 --- a/main/src/cgeo/geocaching/ui/AbstractUIFactory.java +++ b/main/src/cgeo/geocaching/ui/AbstractUIFactory.java @@ -1,9 +1,9 @@ package cgeo.geocaching.ui; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import android.content.res.Resources; public class AbstractUIFactory { - protected final static Resources res = cgeoapplication.getInstance().getResources(); + protected final static Resources res = CgeoApplication.getInstance().getResources(); } diff --git a/main/src/cgeo/geocaching/ui/AbstractUserClickListener.java b/main/src/cgeo/geocaching/ui/AbstractUserClickListener.java index b717568..f8cfb8a 100644 --- a/main/src/cgeo/geocaching/ui/AbstractUserClickListener.java +++ b/main/src/cgeo/geocaching/ui/AbstractUserClickListener.java @@ -1,7 +1,7 @@ package cgeo.geocaching.ui; import cgeo.geocaching.R; -import cgeo.geocaching.cgeocaches; +import cgeo.geocaching.CacheListActivity; import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.network.Network; @@ -53,10 +53,10 @@ abstract class AbstractUserClickListener implements View.OnClickListener { public void onClick(DialogInterface dialog, int item) { switch (item) { case 0: - cgeocaches.startActivityOwner(context, name.toString()); + CacheListActivity.startActivityOwner(context, name.toString()); return; case 1: - cgeocaches.startActivityUserName(context, name.toString()); + CacheListActivity.startActivityUserName(context, name.toString()); return; case 2: context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.geocaching.com/profile/?u=" + Network.encode(name.toString())))); diff --git a/main/src/cgeo/geocaching/ui/AddressListAdapter.java b/main/src/cgeo/geocaching/ui/AddressListAdapter.java index 736c036..0d5fba7 100644 --- a/main/src/cgeo/geocaching/ui/AddressListAdapter.java +++ b/main/src/cgeo/geocaching/ui/AddressListAdapter.java @@ -2,9 +2,9 @@ package cgeo.geocaching.ui; import butterknife.InjectView; +import cgeo.geocaching.CacheListActivity; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; -import cgeo.geocaching.cgeocaches; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.Units; @@ -38,7 +38,7 @@ public class AddressListAdapter extends ArrayAdapter<Address> { public AddressListAdapter(final Context context) { super(context, 0); inflater = ((Activity) context).getLayoutInflater(); - location = cgeoapplication.getInstance().currentGeo().getCoords(); + location = CgeoApplication.getInstance().currentGeo().getCoords(); } @Override @@ -61,7 +61,7 @@ public class AddressListAdapter extends ArrayAdapter<Address> { @Override public void onClick(final View v) { final Activity activity = (Activity) v.getContext(); - cgeocaches.startActivityAddress(activity, new Geopoint(address.getLatitude(), address.getLongitude()), StringUtils.defaultString(address.getAddressLine(0))); + CacheListActivity.startActivityAddress(activity, new Geopoint(address.getLatitude(), address.getLongitude()), StringUtils.defaultString(address.getAddressLine(0))); activity.finish(); } }); diff --git a/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java b/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java index 9059a6b..5f0d90a 100644 --- a/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java +++ b/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java @@ -1,9 +1,9 @@ package cgeo.geocaching.ui; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.Geocache; import cgeo.geocaching.R; import cgeo.geocaching.Waypoint; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.Units; @@ -134,7 +134,7 @@ public final class CacheDetailsCreator { public void addDistance(final Geocache cache, final TextView cacheDistanceView) { Float distance = null; if (cache.getCoords() != null) { - final Geopoint currentCoords = cgeoapplication.getInstance().currentGeo().getCoords(); + final Geopoint currentCoords = CgeoApplication.getInstance().currentGeo().getCoords(); if (currentCoords != null) { distance = currentCoords.distanceTo(cache); } @@ -159,7 +159,7 @@ public final class CacheDetailsCreator { public void addDistance(final Waypoint wpt, final TextView waypointDistanceView) { Float distance = null; if (wpt.getCoords() != null) { - final Geopoint currentCoords = cgeoapplication.getInstance().currentGeo().getCoords(); + final Geopoint currentCoords = CgeoApplication.getInstance().currentGeo().getCoords(); if (currentCoords != null) { distance = currentCoords.distanceTo(wpt); } diff --git a/main/src/cgeo/geocaching/ui/CacheListAdapter.java b/main/src/cgeo/geocaching/ui/CacheListAdapter.java index c6aeaa6..9f41e59 100644 --- a/main/src/cgeo/geocaching/ui/CacheListAdapter.java +++ b/main/src/cgeo/geocaching/ui/CacheListAdapter.java @@ -6,7 +6,7 @@ import cgeo.geocaching.CacheDetailActivity; import cgeo.geocaching.Geocache; import cgeo.geocaching.IGeoData; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.enumerations.CacheListType; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.filter.IFilter; @@ -112,7 +112,7 @@ public class CacheListAdapter extends ArrayAdapter<Geocache> { public CacheListAdapter(final Activity activity, final List<Geocache> list, CacheListType cacheListType) { super(activity, 0, list); - final IGeoData currentGeo = cgeoapplication.getInstance().currentGeo(); + final IGeoData currentGeo = CgeoApplication.getInstance().currentGeo(); if (currentGeo != null) { coords = currentGeo.getCoords(); } diff --git a/main/src/cgeo/geocaching/ui/DecryptTextClickListener.java b/main/src/cgeo/geocaching/ui/DecryptTextClickListener.java index f10e13a..e2e587e 100644 --- a/main/src/cgeo/geocaching/ui/DecryptTextClickListener.java +++ b/main/src/cgeo/geocaching/ui/DecryptTextClickListener.java @@ -2,36 +2,38 @@ package cgeo.geocaching.ui; import cgeo.geocaching.utils.CryptUtils;
+import org.eclipse.jdt.annotation.NonNull;
+
import android.text.Spannable;
import android.view.View;
import android.widget.TextView;
public class DecryptTextClickListener implements View.OnClickListener {
- @Override
- public void onClick(View view) {
- if (view == null) {
- return;
- }
+ @NonNull private final TextView targetView;
- try {
- final TextView logView = (TextView) view;
+ public DecryptTextClickListener(@NonNull final TextView targetView) {
+ this.targetView = targetView;
+ }
+ @Override
+ public final void onClick(final View view) {
+ try {
// do not run the click listener if a link was clicked
- if (logView.getSelectionStart() != -1 || logView.getSelectionEnd() != -1) {
+ if (targetView.getSelectionStart() != -1 || targetView.getSelectionEnd() != -1) {
return;
}
- CharSequence text = logView.getText();
+ CharSequence text = targetView.getText();
if (text instanceof Spannable) {
Spannable span = (Spannable) text;
- logView.setText(CryptUtils.rot13(span));
+ targetView.setText(CryptUtils.rot13(span));
}
else {
String string = (String) text;
- logView.setText(CryptUtils.rot13(string));
+ targetView.setText(CryptUtils.rot13(string));
}
- } catch (Exception e) {
+ } catch (RuntimeException e) {
// nothing
}
}
diff --git a/main/src/cgeo/geocaching/ui/Formatter.java b/main/src/cgeo/geocaching/ui/Formatter.java index ecae9ea..963807f 100644 --- a/main/src/cgeo/geocaching/ui/Formatter.java +++ b/main/src/cgeo/geocaching/ui/Formatter.java @@ -3,7 +3,7 @@ package cgeo.geocaching.ui; import cgeo.geocaching.Geocache; import cgeo.geocaching.R; import cgeo.geocaching.Waypoint; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.enumerations.CacheListType; import cgeo.geocaching.enumerations.CacheSize; import cgeo.geocaching.enumerations.WaypointType; @@ -22,7 +22,7 @@ public abstract class Formatter { /** Text separator used for formatting texts */ public static final String SEPARATOR = " ยท "; - private static final Context context = cgeoapplication.getInstance().getBaseContext(); + private static final Context context = CgeoApplication.getInstance().getBaseContext(); /** * Generate a time string according to system-wide settings (locale, 12/24 hour) @@ -87,9 +87,9 @@ public abstract class Formatter { int diff = cgeo.geocaching.utils.DateUtils.daysSince(date); switch (diff) { case 0: - return cgeoapplication.getInstance().getString(R.string.log_today); + return CgeoApplication.getInstance().getString(R.string.log_today); case 1: - return cgeoapplication.getInstance().getString(R.string.log_yesterday); + return CgeoApplication.getInstance().getString(R.string.log_yesterday); default: return formatShortDate(date); } @@ -116,10 +116,10 @@ public abstract class Formatter { addShortInfos(cache, infos); if (cache.isPremiumMembersOnly()) { - infos.add(cgeoapplication.getInstance().getString(R.string.cache_premium)); + infos.add(CgeoApplication.getInstance().getString(R.string.cache_premium)); } if (cacheListType != CacheListType.OFFLINE && cacheListType != CacheListType.HISTORY && cache.getListId() > 0) { - infos.add(cgeoapplication.getInstance().getString(R.string.cache_offline)); + infos.add(CgeoApplication.getInstance().getString(R.string.cache_offline)); } return StringUtils.join(infos, Formatter.SEPARATOR); } @@ -161,7 +161,7 @@ public abstract class Formatter { infos.add(waypointType.getL10n()); } if (Waypoint.PREFIX_OWN.equalsIgnoreCase(waypoint.getPrefix())) { - infos.add(cgeoapplication.getInstance().getString(R.string.waypoint_custom)); + infos.add(CgeoApplication.getInstance().getString(R.string.waypoint_custom)); } else { if (StringUtils.isNotBlank(waypoint.getPrefix())) { infos.add(waypoint.getPrefix()); diff --git a/main/src/cgeo/geocaching/ui/LoggingUI.java b/main/src/cgeo/geocaching/ui/LoggingUI.java index 0ee724a..1423da2 100644 --- a/main/src/cgeo/geocaching/ui/LoggingUI.java +++ b/main/src/cgeo/geocaching/ui/LoggingUI.java @@ -1,12 +1,11 @@ package cgeo.geocaching.ui; +import cgeo.geocaching.DataStore; import cgeo.geocaching.Geocache; import cgeo.geocaching.LogEntry; import cgeo.geocaching.R; -import cgeo.geocaching.settings.Settings; -import cgeo.geocaching.cgData; -import cgeo.geocaching.activity.IAbstractActivity; import cgeo.geocaching.enumerations.LogType; +import cgeo.geocaching.settings.Settings; import android.app.Activity; import android.app.AlertDialog; @@ -61,13 +60,13 @@ public class LoggingUI extends AbstractUIFactory { } } - public static boolean onMenuItemSelected(final MenuItem item, IAbstractActivity activity, Geocache cache) { + public static boolean onMenuItemSelected(final MenuItem item, final Activity activity, final Geocache cache) { switch (item.getItemId()) { case R.id.menu_log_visit: cache.logVisit(activity); return true; case R.id.menu_log_visit_offline: - showOfflineMenu(cache, (Activity) activity); + showOfflineMenu(cache, activity); return true; default: return false; @@ -75,7 +74,7 @@ public class LoggingUI extends AbstractUIFactory { } private static void showOfflineMenu(final Geocache cache, final Activity activity) { - final LogEntry currentLog = cgData.loadLogOffline(cache.getGeocode()); + final LogEntry currentLog = DataStore.loadLogOffline(cache.getGeocode()); final LogType currentLogType = currentLog == null ? null : currentLog.type; final List<LogType> logTypes = cache.getPossibleLogTypes(); @@ -100,7 +99,7 @@ public class LoggingUI extends AbstractUIFactory { if (logTypeEntry.logType == null) { switch (logTypeEntry.specialLogType) { case LOG_CACHE: - cache.logVisit((IAbstractActivity) activity); + cache.logVisit(activity); break; case CLEAR_LOG: diff --git a/main/src/cgeo/geocaching/ui/dialog/CustomProgressDialog.java b/main/src/cgeo/geocaching/ui/dialog/CustomProgressDialog.java index e80c446..97c5c29 100644 --- a/main/src/cgeo/geocaching/ui/dialog/CustomProgressDialog.java +++ b/main/src/cgeo/geocaching/ui/dialog/CustomProgressDialog.java @@ -10,6 +10,7 @@ import android.view.View; import android.widget.TextView; import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** @@ -38,7 +39,11 @@ public class CustomProgressDialog extends ProgressDialog { method.invoke(textView, View.GONE); } } - } catch (Exception e) { + } catch (NoSuchMethodException e) { + Log.e("Failed to invoke the progressDialog method 'setVisibility' and set 'mProgressNumber' to GONE.", e); + } catch (IllegalAccessException e) { + Log.e("Failed to invoke the progressDialog method 'setVisibility' and set 'mProgressNumber' to GONE.", e); + } catch (InvocationTargetException e) { Log.e("Failed to invoke the progressDialog method 'setVisibility' and set 'mProgressNumber' to GONE.", e); } } diff --git a/main/src/cgeo/geocaching/ui/dialog/LiveMapInfoDialogBuilder.java b/main/src/cgeo/geocaching/ui/dialog/LiveMapInfoDialogBuilder.java index 2c4f38d..6ad59ec 100644 --- a/main/src/cgeo/geocaching/ui/dialog/LiveMapInfoDialogBuilder.java +++ b/main/src/cgeo/geocaching/ui/dialog/LiveMapInfoDialogBuilder.java @@ -2,7 +2,7 @@ package cgeo.geocaching.ui.dialog; import cgeo.geocaching.R; import cgeo.geocaching.settings.Settings; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import android.app.Activity; import android.app.AlertDialog; @@ -33,7 +33,7 @@ public class LiveMapInfoDialogBuilder { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - cgeoapplication.getInstance().setLiveMapHintShown(); + CgeoApplication.getInstance().setLiveMapHintShown(); if (checkBoxHide.getVisibility() == View.VISIBLE && checkBoxHide.isChecked()) { Settings.setHideLiveHint(true); } diff --git a/main/src/cgeo/geocaching/ui/logs/CacheLogsViewCreator.java b/main/src/cgeo/geocaching/ui/logs/CacheLogsViewCreator.java index 8da711e..8fe3866 100644 --- a/main/src/cgeo/geocaching/ui/logs/CacheLogsViewCreator.java +++ b/main/src/cgeo/geocaching/ui/logs/CacheLogsViewCreator.java @@ -4,7 +4,7 @@ import cgeo.geocaching.CacheDetailActivity; import cgeo.geocaching.Geocache; import cgeo.geocaching.LogEntry; import cgeo.geocaching.R; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.enumerations.LogType; import cgeo.geocaching.ui.UserActionsClickListener; @@ -23,7 +23,7 @@ import java.util.Map.Entry; public class CacheLogsViewCreator extends LogsViewCreator { private final boolean allLogs; - private final Resources res = cgeoapplication.getInstance().getResources(); + private final Resources res = CgeoApplication.getInstance().getResources(); public CacheLogsViewCreator(CacheDetailActivity cacheDetailActivity, boolean allLogs) { super(cacheDetailActivity); diff --git a/main/src/cgeo/geocaching/ui/logs/LogsViewCreator.java b/main/src/cgeo/geocaching/ui/logs/LogsViewCreator.java index ee2713a..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/ApplicationSettings.java b/main/src/cgeo/geocaching/utils/ApplicationSettings.java index 99d3142..78fa4f6 100644 --- a/main/src/cgeo/geocaching/utils/ApplicationSettings.java +++ b/main/src/cgeo/geocaching/utils/ApplicationSettings.java @@ -17,7 +17,7 @@ public class ApplicationSettings { */ public static String getPreferencesName() { // There is currently no Android API to get the file name of the shared preferences. Let's hardcode - // it without needing a cgeoapplication instance. + // it without needing a CgeoApplication instance. return "cgeo.geocaching_preferences"; } diff --git a/main/src/cgeo/geocaching/utils/CancellableHandler.java b/main/src/cgeo/geocaching/utils/CancellableHandler.java index 8cf8f28..cb4b9db 100644 --- a/main/src/cgeo/geocaching/utils/CancellableHandler.java +++ b/main/src/cgeo/geocaching/utils/CancellableHandler.java @@ -1,6 +1,6 @@ package cgeo.geocaching.utils; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import android.os.Handler; import android.os.Message; @@ -114,7 +114,7 @@ public abstract class CancellableHandler extends Handler { public static void sendLoadProgressDetail(final Handler handler, final int resourceId) { if (null != handler) { - handler.obtainMessage(UPDATE_LOAD_PROGRESS_DETAIL, cgeoapplication.getInstance().getString(resourceId)).sendToTarget(); + handler.obtainMessage(UPDATE_LOAD_PROGRESS_DETAIL, CgeoApplication.getInstance().getString(resourceId)).sendToTarget(); } } } diff --git a/main/src/cgeo/geocaching/utils/ClipboardUtils.java b/main/src/cgeo/geocaching/utils/ClipboardUtils.java index 67069b2..77250f3 100644 --- a/main/src/cgeo/geocaching/utils/ClipboardUtils.java +++ b/main/src/cgeo/geocaching/utils/ClipboardUtils.java @@ -1,6 +1,6 @@ package cgeo.geocaching.utils; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import android.content.Context; @@ -24,7 +24,7 @@ public final class ClipboardUtils { */ public static void copyToClipboard(final CharSequence text) { // fully qualified name used here to avoid buggy deprecation warning (of javac) on the import statement - final android.text.ClipboardManager clipboard = (android.text.ClipboardManager) cgeoapplication.getInstance().getSystemService(Context.CLIPBOARD_SERVICE); + final android.text.ClipboardManager clipboard = (android.text.ClipboardManager) CgeoApplication.getInstance().getSystemService(Context.CLIPBOARD_SERVICE); clipboard.setText(text); } diff --git a/main/src/cgeo/geocaching/utils/CryptUtils.java b/main/src/cgeo/geocaching/utils/CryptUtils.java index 18a337d..d98585a 100644 --- a/main/src/cgeo/geocaching/utils/CryptUtils.java +++ b/main/src/cgeo/geocaching/utils/CryptUtils.java @@ -1,11 +1,17 @@ package cgeo.geocaching.utils; +import org.apache.commons.lang3.CharEncoding; +import org.apache.commons.lang3.StringUtils; + import android.text.Spannable; import android.text.SpannableStringBuilder; +import java.io.UnsupportedEncodingException; import java.math.BigInteger; +import java.security.GeneralSecurityException; import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; @@ -62,7 +68,7 @@ public final class CryptUtils { public static String rot13(String text) { if (text == null) { - return ""; + return StringUtils.EMPTY; } final StringBuilder result = new StringBuilder(); Rot13Encryption rot13 = new Rot13Encryption(); @@ -76,42 +82,44 @@ public final class CryptUtils { } public static String md5(String text) { - String hashed = ""; - try { final MessageDigest digest = MessageDigest.getInstance("MD5"); - digest.update(text.getBytes(), 0, text.length()); - hashed = new BigInteger(1, digest.digest()).toString(16); - } catch (Exception e) { + digest.update(text.getBytes(CharEncoding.UTF_8), 0, text.length()); + return new BigInteger(1, digest.digest()).toString(16); + } catch (NoSuchAlgorithmException e) { + Log.e("CryptUtils.md5", e); + } catch (UnsupportedEncodingException e) { Log.e("CryptUtils.md5", e); } - return hashed; + return StringUtils.EMPTY; } public static String sha1(String text) { - String hashed = ""; - try { final MessageDigest digest = MessageDigest.getInstance("SHA-1"); - digest.update(text.getBytes(), 0, text.length()); - hashed = new BigInteger(1, digest.digest()).toString(16); - } catch (Exception e) { + digest.update(text.getBytes(CharEncoding.UTF_8), 0, text.length()); + return new BigInteger(1, digest.digest()).toString(16); + } catch (NoSuchAlgorithmException e) { + Log.e("CryptUtils.sha1", e); + } catch (UnsupportedEncodingException e) { Log.e("CryptUtils.sha1", e); } - return hashed; + return StringUtils.EMPTY; } public static byte[] hashHmac(String text, String salt) { byte[] macBytes = {}; try { - final SecretKeySpec secretKeySpec = new SecretKeySpec(salt.getBytes(), "HmacSHA1"); + final SecretKeySpec secretKeySpec = new SecretKeySpec(salt.getBytes(CharEncoding.UTF_8), "HmacSHA1"); final Mac mac = Mac.getInstance("HmacSHA1"); mac.init(secretKeySpec); - macBytes = mac.doFinal(text.getBytes()); - } catch (Exception e) { + macBytes = mac.doFinal(text.getBytes(CharEncoding.UTF_8)); + } catch (GeneralSecurityException e) { + Log.e("CryptUtils.hashHmac", e); + } catch (UnsupportedEncodingException e) { Log.e("CryptUtils.hashHmac", e); } diff --git a/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java b/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java index 24f375d..5c8d641 100644 --- a/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java +++ b/main/src/cgeo/geocaching/utils/DatabaseBackupUtils.java @@ -1,8 +1,8 @@ package cgeo.geocaching.utils; +import cgeo.geocaching.DataStore; import cgeo.geocaching.MainActivity; import cgeo.geocaching.R; -import cgeo.geocaching.cgData; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.ui.Formatter; @@ -50,7 +50,7 @@ public class DatabaseBackupUtils { @Override public void run() { - restoreSuccessful.set(cgData.restoreDatabaseInternal()); + restoreSuccessful.set(DataStore.restoreDatabaseInternal()); handler.sendMessage(handler.obtainMessage()); } }; @@ -61,7 +61,7 @@ public class DatabaseBackupUtils { final Context context = activity; // avoid overwriting an existing backup with an empty database // (can happen directly after reinstalling the app) - if (cgData.getAllCachesCount() == 0) { + if (DataStore.getAllCachesCount() == 0) { ActivityMixin.helpDialog(activity, context.getString(R.string.init_backup), context.getString(R.string.init_backup_unnecessary)); @@ -74,7 +74,7 @@ public class DatabaseBackupUtils { new Thread() { @Override public void run() { - final String backupFileName = cgData.backupDatabaseInternal(); + final String backupFileName = DataStore.backupDatabaseInternal(); activity.runOnUiThread(new Runnable() { @Override public void run() { @@ -96,8 +96,8 @@ public class DatabaseBackupUtils { } public static File getRestoreFile() { - final File fileSourceFile = cgData.getBackupFileInternal(); - return fileSourceFile.exists() ? fileSourceFile : null; + final File fileSourceFile = DataStore.getBackupFileInternal(); + return fileSourceFile.exists() && fileSourceFile.length() > 0 ? fileSourceFile : null; } public static boolean hasBackup() { diff --git a/main/src/cgeo/geocaching/utils/GeoDirHandler.java b/main/src/cgeo/geocaching/utils/GeoDirHandler.java index a143730..c85648b 100644 --- a/main/src/cgeo/geocaching/utils/GeoDirHandler.java +++ b/main/src/cgeo/geocaching/utils/GeoDirHandler.java @@ -1,7 +1,7 @@ package cgeo.geocaching.utils; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.IGeoData; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.settings.Settings; import android.os.Handler; @@ -29,7 +29,7 @@ public abstract class GeoDirHandler extends Handler implements IObserver<Object> private static final int STOP_GEO = 1 << 4; private static final int STOP_DIR = 1 << 5; - private static final cgeoapplication app = cgeoapplication.getInstance(); + private static final CgeoApplication app = CgeoApplication.getInstance(); @Override final public void handleMessage(final Message message) { diff --git a/main/src/cgeo/geocaching/utils/ImageUtils.java b/main/src/cgeo/geocaching/utils/ImageUtils.java index 6851241..1bbe70c 100644 --- a/main/src/cgeo/geocaching/utils/ImageUtils.java +++ b/main/src/cgeo/geocaching/utils/ImageUtils.java @@ -1,6 +1,6 @@ package cgeo.geocaching.utils; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.compatibility.Compatibility; import android.graphics.Bitmap; @@ -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; @@ -45,7 +46,7 @@ public final class ImageUtils { * @return BitmapDrawable The scaled image */ public static BitmapDrawable scaleBitmapTo(final Bitmap image, final int maxWidth, final int maxHeight) { - final cgeoapplication app = cgeoapplication.getInstance(); + final CgeoApplication app = CgeoApplication.getInstance(); Bitmap result = image; int width = image.getWidth(); int height = image.getHeight(); @@ -81,7 +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/ProcessUtils.java b/main/src/cgeo/geocaching/utils/ProcessUtils.java index 3345ff1..f19cdb5 100644 --- a/main/src/cgeo/geocaching/utils/ProcessUtils.java +++ b/main/src/cgeo/geocaching/utils/ProcessUtils.java @@ -1,6 +1,6 @@ package cgeo.geocaching.utils; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.CgeoApplication; import org.apache.commons.collections.CollectionUtils; @@ -43,7 +43,7 @@ public final class ProcessUtils { * This will find installed applications even without launch intent (e.g. the streetview plugin). */ private static boolean hasPackageInstalled(final String packageName) { - final List<PackageInfo> packs = cgeoapplication.getInstance().getPackageManager().getInstalledPackages(0); + final List<PackageInfo> packs = CgeoApplication.getInstance().getPackageManager().getInstalledPackages(0); for (final PackageInfo packageInfo : packs) { if (packageName.equals(packageInfo.packageName)) { return true; @@ -59,7 +59,7 @@ public final class ProcessUtils { if (packageName == null) { return null; } - final PackageManager packageManager = cgeoapplication.getInstance().getPackageManager(); + final PackageManager packageManager = CgeoApplication.getInstance().getPackageManager(); try { // This can throw an exception where the exception type is only defined on API Level > 3 // therefore surround with try-catch @@ -70,7 +70,7 @@ public final class ProcessUtils { } public static boolean isIntentAvailable(final String intent) { - final PackageManager packageManager = cgeoapplication.getInstance().getPackageManager(); + final PackageManager packageManager = CgeoApplication.getInstance().getPackageManager(); final List<ResolveInfo> list = packageManager.queryIntentActivities( new Intent(intent), PackageManager.MATCH_DEFAULT_ONLY); diff --git a/main/src/cgeo/geocaching/utils/SimpleCancellableHandler.java b/main/src/cgeo/geocaching/utils/SimpleCancellableHandler.java index 9207c74..22cd4d7 100644 --- a/main/src/cgeo/geocaching/utils/SimpleCancellableHandler.java +++ b/main/src/cgeo/geocaching/utils/SimpleCancellableHandler.java @@ -26,7 +26,6 @@ public class SimpleCancellableHandler extends CancellableHandler { activity.showToast(msg.getData().getString(MESSAGE_TEXT)); } dismissProgress(); - return; } @Override diff --git a/main/src/cgeo/geocaching/utils/SimpleHandler.java b/main/src/cgeo/geocaching/utils/SimpleHandler.java index b01d0e1..8e0a479 100644 --- a/main/src/cgeo/geocaching/utils/SimpleHandler.java +++ b/main/src/cgeo/geocaching/utils/SimpleHandler.java @@ -3,7 +3,6 @@ package cgeo.geocaching.utils; import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.activity.Progress; -import android.content.res.Resources; import android.os.Handler; import android.os.Message; @@ -15,48 +14,20 @@ public abstract class SimpleHandler extends Handler { protected final WeakReference<Progress> progressDialogRef; public SimpleHandler(final AbstractActivity activity, final Progress progress) { - this.activityRef = new WeakReference<AbstractActivity>(activity); - this.progressDialogRef = new WeakReference<Progress>(progress); + activityRef = new WeakReference<AbstractActivity>(activity); + progressDialogRef = new WeakReference<Progress>(progress); } @Override public void handleMessage(final Message msg) { - AbstractActivity activity = activityRef.get(); + final AbstractActivity activity = activityRef.get(); if (activity != null && msg.getData() != null && msg.getData().getString(MESSAGE_TEXT) != null) { activity.showToast(msg.getData().getString(MESSAGE_TEXT)); } - dismissProgress(); - return; - } - - protected final void showToast(final int resId) { - AbstractActivity activity = activityRef.get(); - if (activity != null) { - Resources res = activity.getResources(); - activity.showToast(res.getText(resId).toString()); - } - } - - protected final void dismissProgress() { - Progress progressDialog = progressDialogRef.get(); + final Progress progressDialog = progressDialogRef.get(); if (progressDialog != null) { progressDialog.dismiss(); } } - protected final void setProgressMessage(final String txt) { - Progress progressDialog = progressDialogRef.get(); - if (progressDialog != null) { - progressDialog.setMessage(txt); - } - } - - protected final void finishActivity() { - AbstractActivity activity = activityRef.get(); - if (activity != null) { - activity.finish(); - } - - } - } diff --git a/main/src/cgeo/geocaching/utils/TranslationUtils.java b/main/src/cgeo/geocaching/utils/TranslationUtils.java index 1224f7e..619db08 100644 --- a/main/src/cgeo/geocaching/utils/TranslationUtils.java +++ b/main/src/cgeo/geocaching/utils/TranslationUtils.java @@ -3,6 +3,8 @@ package cgeo.geocaching.utils; import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.network.Network; +import org.apache.commons.lang3.StringUtils; + import android.content.Intent; import android.net.Uri; @@ -11,12 +13,12 @@ import android.net.Uri; */ public final class TranslationUtils { - private static final String translationWebsite = "http://translate.google.com/"; - private static final String translationForceClassicMode = "?vi=c"; - private static final String translationAutoSelect = "#auto"; - private static final String translationFieldSeparator = "|"; + private static final String TRANSLATION_WEBSITE = "http://translate.google.com/"; + private static final String TRANSLATION_FORCE_CLASSIC_MODE = "?vi=c"; + private static final String TRANSLATION_AUTO_SELECT = "#auto"; + private static final String TRANSLATION_FIELD_SEPARATOR = "|"; - public static final int translationTextLengthToWarn = 500; + public static final int TRANSLATION_TEXT_LENGTH_WARN = 500; private static final String TRANSLATION_APP = "com.google.android.apps.translate"; private TranslationUtils() { @@ -24,8 +26,8 @@ public final class TranslationUtils { } /** - * Build a URI for Google Translate - * + * Build a URI for Google Translate. + * * @param toLang * The two-letter lowercase ISO language codes as defined by ISO 639-1 * @param text @@ -36,13 +38,13 @@ public final class TranslationUtils { String content = Network.encode(text); // the app works better without the "+", the website works better with "+", therefore assume using the app if installed if (ProcessUtils.isLaunchable(TRANSLATION_APP)) { - content = content.replace("+", "%20"); + content = StringUtils.replace(content, "+", "%20"); } - return translationWebsite + translationForceClassicMode + translationAutoSelect + translationFieldSeparator + toLang + translationFieldSeparator + content; + return TRANSLATION_WEBSITE + TRANSLATION_FORCE_CLASSIC_MODE + TRANSLATION_AUTO_SELECT + TRANSLATION_FIELD_SEPARATOR + toLang + TRANSLATION_FIELD_SEPARATOR + content; } /** - * Send Intent for Google Translate. Can be caught by Google Translate App or browser + * Send Intent for Google Translate. Can be caught by Google Translate App or browser. * * @param toLang * The two-letter lowercase ISO language codes as defined by ISO 639-1 diff --git a/main/src/cgeo/geocaching/utils/UncertainProperty.java b/main/src/cgeo/geocaching/utils/UncertainProperty.java index 5f86662..e8686e3 100644 --- a/main/src/cgeo/geocaching/utils/UncertainProperty.java +++ b/main/src/cgeo/geocaching/utils/UncertainProperty.java @@ -2,6 +2,11 @@ package cgeo.geocaching.utils; import cgeo.geocaching.connector.gc.Tile; +/** + * Property with certainty. When merging properties, the one with higher certainty wins. + * + * @param <T> + */ public class UncertainProperty<T> { private final T value; |
