diff options
45 files changed, 668 insertions, 363 deletions
diff --git a/cgeo-calendar/.classpath b/cgeo-calendar/.classpath index fba8f51..2f1c26a 100644 --- a/cgeo-calendar/.classpath +++ b/cgeo-calendar/.classpath @@ -7,7 +7,7 @@ </attributes> </classpathentry> <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/> - <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/> + <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/> <classpathentry combineaccessrules="false" kind="src" path="/cgeo"/> <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/> <classpathentry kind="output" path="bin/classes"/> diff --git a/main/build.xml b/main/build.xml index 2444787..b6f5170 100644 --- a/main/build.xml +++ b/main/build.xml @@ -89,7 +89,13 @@ <filter token="ocde.okapi.consumer.secret" value="${ocde.okapi.consumer.secret}"/> </filterset> </copy> - </target> + <copy file="./templates/ocpl_okapi.xml" todir="./res/values/" overwrite="true"> + <filterset> + <filter token="ocpl.okapi.consumer.key" value="${ocpl.okapi.consumer.key}"/> + <filter token="ocpl.okapi.consumer.secret" value="${ocpl.okapi.consumer.secret}"/> + </filterset> + </copy> + </target> <!-- start of modifications for android annotations, see https://github.com/excilys/androidannotations/wiki/Building-Project-Ant --> <property name="generated.dir" value="annotation_gen" /> diff --git a/main/res/drawable-mdpi/settings_arrow_black.png b/main/res/drawable-mdpi/settings_arrow_black.png Binary files differnew file mode 100644 index 0000000..486f456 --- /dev/null +++ b/main/res/drawable-mdpi/settings_arrow_black.png diff --git a/main/res/drawable-mdpi/settings_arrow_white.png b/main/res/drawable-mdpi/settings_arrow_white.png Binary files differnew file mode 100644 index 0000000..4d36438 --- /dev/null +++ b/main/res/drawable-mdpi/settings_arrow_white.png diff --git a/main/res/menu/map_activity.xml b/main/res/menu/map_activity.xml index df8fe09..d81a49b 100644 --- a/main/res/menu/map_activity.xml +++ b/main/res/menu/map_activity.xml @@ -39,6 +39,11 @@ android:title="@string/map_circles_hide"> </item> <item + android:id="@+id/menu_mycaches_mode" + android:icon="@android:drawable/ic_menu_myplaces" + android:title="@string/map_mycaches_hide"> + </item> + <item android:id="@+id/menu_theme_mode" android:icon="@drawable/ic_menu_preferences" android:title="@string/map_theme_select"> diff --git a/main/res/values-cs/strings.xml b/main/res/values-cs/strings.xml index 487a4e6..636060c 100644 --- a/main/res/values-cs/strings.xml +++ b/main/res/values-cs/strings.xml @@ -1049,6 +1049,7 @@ <string name="status_new_rc" tools:ignore="UnusedResources">Dostupný nový kandidát na vydání.\nKlepni pro instalaci.</string> <string name="status_geocaching_change" tools:ignore="UnusedResources">Nedávné změny na geocaching.com rozbily c:geo.\nPracujeme na opravě, proveď kontrolu později.</string> <string name="status_geocaching_livemap" tools:ignore="UnusedResources">Nedávné změny na geocaching.com rozbily Aktivní mapu c:geo.\nPracujeme na opravě, proveď kontrolu později.</string> + <string name="status_closeout_warning" tools:ignore="UnusedResources">Pravděpodobně používáš Android starší než 2.1. Budoucí verze c:geo nemusí být k dispozici pro tvoje zařízení.</string> <string name="clipboard_copy_ok">Zkopírováno do schránky</string> <plurals name="days_ago"> diff --git a/main/res/values-de/strings.xml b/main/res/values-de/strings.xml index cc74154..7945f16 100644 --- a/main/res/values-de/strings.xml +++ b/main/res/values-de/strings.xml @@ -370,7 +370,8 @@ <string name="settings_title_map_content">Karteninhalt</string> <string name="settings_title_gpx">GPX</string> <string name="settings_title_basicmembers">Basic Member</string> - <string name="settings_title_miscellaneous">Mehr Einstellungen</string> + <string name="settings_title_navigation">Navigation</string> + <string name="settings_title_system">System</string> <string name="settings_category_browser">Browser</string> <string name="settings_category_logging_other">Andere Log-Optionen</string> @@ -386,6 +387,7 @@ <string name="settings_activate_oc">Aktivieren</string> <string name="init_oc_de_description">Autorisiere c:geo auf opencaching.de zuzugreifen um Caches zu suchen und nach deinen Funden zu filtern.</string> <string name="init_register_oc_de">c:geo autorisieren</string> + <string name="init_reregister_oc_de">c:geo neu autorisieren</string> <string name="init_gcvote">GCvote.com</string> <string name="init_twitter">Twitter</string> <string name="settings_activate_twitter">Aktivieren</string> @@ -399,6 +401,7 @@ <string name="init_login_popup_failed_reason">Login fehlgeschlagen:</string> <string name="init_login_popup_not_authorized">Nicht autorisiert</string> <string name="init_twitter_authorize">c:geo autorisieren</string> + <string name="init_twitter_reauthorize">c:geo neu autorisieren</string> <string name="init_signature">Signatur</string> <string name="init_signature_help_text">Verwendete Signatur für Logtexte.\nErlaubte Platzhalter sind: [DATE], [TIME], [DATETIME], [USER] & [NUMBER]. Diese werden beim Einfügen der Signatur durch die entsprechenden Werte ersetzt.</string> <string name="init_signature_template_button">Platzhalter einfügen</string> diff --git a/main/res/values-hu/strings.xml b/main/res/values-hu/strings.xml index 8d6f846..ca15ea1 100644 --- a/main/res/values-hu/strings.xml +++ b/main/res/values-hu/strings.xml @@ -933,6 +933,7 @@ <string name="status_new_rc" tools:ignore="UnusedResources">Új kiadásra jelölt verzió található.\nKattints a telepítéshez.</string> <string name="status_geocaching_change" tools:ignore="UnusedResources">A c:geo a geocaching.com-on nemrégen történt változások miatt nem működik.\nDolgozunk a megoldáson. Nézz vissza hamarosan.</string> <string name="status_geocaching_livemap" tools:ignore="UnusedResources">Az élő térkép a geocaching.com-on nemrégen történt változások miatt nem működik.\nDolgozunk a megoldáson. Nézz vissza hamarosan.</string> + <string name="status_closeout_warning" tools:ignore="UnusedResources">Úgy tűnik az Android 2.1-es verziójánál régebbit használsz. A c:geo jövőbeli frissítései lehet hogy nem lesznek elérhetők az eszközödre.</string> <string name="clipboard_copy_ok">Kimásolva a vágólapra</string> <plurals name="days_ago"> diff --git a/main/res/values-it/strings.xml b/main/res/values-it/strings.xml index c672c65..09eb40c 100644 --- a/main/res/values-it/strings.xml +++ b/main/res/values-it/strings.xml @@ -1079,6 +1079,7 @@ <string name="status_new_rc" tools:ignore="UnusedResources">Una nuova release candidate è disponibile.\nClicca per installarla.</string> <string name="status_geocaching_change" tools:ignore="UnusedResources">Modifiche recenti al sito geocaching hanno disattivato c:geo.\nCi stiamo lavorando, riprova più tardi.</string> <string name="status_geocaching_livemap" tools:ignore="UnusedResources">Modifiche recenti al sito geocaching hanno disattivato la mappa live.\nCi stiamo lavorando, riprova più tardi.</string> + <string name="status_closeout_warning" tools:ignore="UnusedResources">Sembra che tu stia utilizzando una versione di Android precedente alla 2.1. Le future versioni di c:geo potrebbero non supportare il tuo dispositivo.</string> <!-- text-to-speech for compass view --> <string name="tts_service">Bussola parlante</string> diff --git a/main/res/values-pl/strings.xml b/main/res/values-pl/strings.xml index d306485..7854e09 100644 --- a/main/res/values-pl/strings.xml +++ b/main/res/values-pl/strings.xml @@ -1052,6 +1052,7 @@ <string name="status_new_rc" tools:ignore="UnusedResources">Dostępny nowy kandydat na nową wersję.\nKliknij aby zainstalować.</string> <string name="status_geocaching_change" tools:ignore="UnusedResources">Ostatnie zmiany na geocaching.com popsuły c:geo.\nPracujemy nad tym, sprawdź ponownie niedługo.</string> <string name="status_geocaching_livemap" tools:ignore="UnusedResources">Ostatnie zmiany na geocaching.com popsuły funkcjonalność map Live.\nWe are working on it, Pracujemy nad tym, sprawdź ponownie niedługo.</string> + <string name="status_closeout_warning" tools:ignore="UnusedResources">Wydaje się, że używasz wersji Androida starszej niż 2.1. Przyszłe aktualizacje c:geo mogą nie być dłużej dostępne dla twojego urządzenia.</string> <string name="clipboard_copy_ok">Skopiowano do schowka</string> <plurals name="days_ago"> diff --git a/main/res/values-sv/strings.xml b/main/res/values-sv/strings.xml index 9f5950d..3cbf60d 100644 --- a/main/res/values-sv/strings.xml +++ b/main/res/values-sv/strings.xml @@ -869,6 +869,7 @@ <string name="status_new_rc" tools:ignore="UnusedResources">Ny kandidat till officiellt bygge finns tillgängligt.\nKlicka för att installera.</string> <string name="status_geocaching_change" tools:ignore="UnusedResources">Ändringar som gjorts på geocaching.com har gjort så att c:geo inte fungerar.\nVi jobbar för att lösa problemen, försök igen om en stund.</string> <string name="status_geocaching_livemap" tools:ignore="UnusedResources">Ändringar som gjorts på geocaching.com har gjort så att Live kartan inte fungerar.\nVi jobbar för att lösa problemen, försök igen om en stund.</string> + <string name="status_closeout_warning" tools:ignore="UnusedResources">Du verkar använda en version av Android som är äldre än 2.1. Framtida versioner av c:geo kommer troligtvis inte fungera på din telefon.</string> <!-- text-to-speech for compass view --> <string name="tts_service">Talande kompass</string> diff --git a/main/res/values/.gitignore b/main/res/values/.gitignore index 1f65bef..ade2b6e 100644 --- a/main/res/values/.gitignore +++ b/main/res/values/.gitignore @@ -1 +1,2 @@ /ocde_okapi.xml +/ocpl_okapi.xml diff --git a/main/res/values/attrs.xml b/main/res/values/attrs.xml index 4a82255..5eaa6a0 100644 --- a/main/res/values/attrs.xml +++ b/main/res/values/attrs.xml @@ -34,6 +34,7 @@ <attr name="settings_details" format="integer" /> <attr name="settings_eye" format="integer" /> <attr name="settings_map" format="integer" /> + <attr name="settings_arrow" format="integer" /> <attr name="settings_nut" format="integer" /> <attr name="settings_pen" format="integer" /> <attr name="settings_sdcard" format="integer" /> diff --git a/main/res/values/changelog_release.xml b/main/res/values/changelog_release.xml index 0ca942d..d5aea77 100644 --- a/main/res/values/changelog_release.xml +++ b/main/res/values/changelog_release.xml @@ -6,6 +6,7 @@ <b>Changes:</b>\n · A warning message is shown if an android version less than 2.1 is used\n c:geo will no longer support these devices starting with the next main release\n + · Upgraded to new twitter API to fix non working tweets\n \n \n <b>2013.06.05</b>\n diff --git a/main/res/values/preference_keys.xml b/main/res/values/preference_keys.xml index b1a7b01..eb851bf 100644 --- a/main/res/values/preference_keys.xml +++ b/main/res/values/preference_keys.xml @@ -3,6 +3,9 @@ <!-- preferences used in settings --> <string name="pref_fakekey_main_screen">fakekey_main_screen</string> <string name="pref_fakekey_services_screen">fakekey_services_screen</string> + <string name="pref_fakekey_basicmembers_screen">fakekey_basicmembers_screen</string> + <string name="pref_fakekey_ocde_authorization">fakekey_ocde_authorization</string> + <string name="pref_fakekey_twitter_authorization">fakekey_twitter_authorization</string> <string name="pref_connectorGCActive">connectorGCActive</string> <string name="pref_username">username</string> <string name="pref_password">password</string> diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml index a8e4351..db6c1c5 100644 --- a/main/res/values/strings.xml +++ b/main/res/values/strings.xml @@ -141,32 +141,32 @@ <!-- translation --> <string name="translate_to_sys_lang">Translate to %s</string> <string name="translate_to_english">Translate to English</string> - <string name="translate_length_warning">Translate may fail with large amounts of text.</string> + <string name="translate_length_warning">Translation may fail with a large amount of text.</string> <!-- errors, warnings, info toasts --> <string name="err_none">OK</string> <string name="err_start">Communication not started</string> <string name="err_parse">Failed Login page parsing</string> - <string name="err_server">Unable to contact Geocaching.com. The website may be down or your Internet connection not working.</string> + <string name="err_server">Unable to contact Geocaching.com. The website may be down or your internet connection not working.</string> <string name="err_login">No Login information stored</string> <string name="err_login_failed">c:geo can\'t log in.</string> - <string name="err_login_failed_toast">c:geo can\'t log in. c:geo works offline with Stored caches. Check your Login settings or enable Internet connection.</string> + <string name="err_login_failed_toast">c:geo can\'t log in. c:geo works offline with Stored caches. Check Login settings or enable your internet connection.</string> <string name="err_unknown">Unknown error</string> <string name="err_comm">Unknown communication error</string> <string name="err_missing_auth">No username and/or password set.</string> <string name="err_wrong">Login information incorrect</string> <string name="err_maintenance">Geocaching.com is down for maintenance. c:geo works offline with Stored caches.</string> - <string name="err_license">You have not agreed to Geocaching.com license agreement, so c:geo can\'t load cache coordinates.</string> - <string name="err_unvalidated_account">You must validate your account on Geocaching.com web site first.</string> + <string name="err_license">You have not agreed to the Geocaching.com license agreement, so c:geo can\'t load cache coordinates.</string> + <string name="err_unvalidated_account">You must validate your account on the Geocaching.com website first.</string> <string name="err_unpublished">The requested cache is unpublished.</string> <string name="err_premium_only">This Cache is only available to Geocaching.com Premium Members.</string> <string name="err_detail_open">c:geo can\'t open geocache details.</string> <string name="err_detail_cache">c:geo can\'t display the geocache you want. Is it really a geocache?</string> <string name="err_detail_cache_find">c:geo can\'t find geocache</string> <string name="err_detail_cache_find_some">c:geo can\'t find that geocache.</string> - <string name="err_detail_cache_find_any">c:geo can\'t find any geocache.</string> + <string name="err_detail_cache_find_any">c:geo can\'t find any geocaches.</string> <string name="err_detail_cache_forgot">c:geo forgot which geocache you want.</string> - <string name="err_detail_google_maps_limit_reached">c:geo failed to download static maps. Maybe google maps limit is reached.</string> + <string name="err_detail_google_maps_limit_reached">c:geo failed to download static maps. Maybe the Google Maps API limit was reached.</string> <string name="err_detail_no_spoiler">c:geo found no spoiler images for this cache.</string> <string name="err_detail_no_map_static">c:geo found no static maps for this cache.</string> <string name="err_detail_not_load_map_static">c:geo failed to load static maps.</string> @@ -176,7 +176,7 @@ <string name="err_application_no">c:geo can\'t find any suitable application.</string> <string name="err_auth_initialize">c:geo failed to initialize authorization process.</string> <string name="err_auth_process">Authorization process failed.</string> - <string name="err_cannot_log_visit">c:geo is unable to log your visit. Please log your visit from full cache details screen.</string> + <string name="err_cannot_log_visit">c:geo is unable to log your visit. Please log your visit from the full cache details screen.</string> <string name="err_download_fail">c:geo failed to download caches.</string> <string name="err_dwld_details_failed">c:geo failed to download cache details.</string> <string name="err_load_descr_failed">c:geo can\'t load description.</string> @@ -185,19 +185,19 @@ <string name="err_favorite_failed">Changing favorite status failed.</string> <string name="err_select_logimage_failed">Selecting an image for the log failed.</string> <string name="err_acquire_image_failed">Acquiring an image failed.</string> - <string name="err_tb_display">c:geo can\'t display trackable you want. Is it really a trackable?</string> + <string name="err_tb_display">c:geo can\'t display the trackable you want. Is it really a trackable?</string> <string name="err_tb_details_open">c:geo can\'t open trackable details.</string> <string name="err_tb_forgot_saw">c:geo forgot which trackable you saw.</string> <string name="err_tb_find">c:geo can\'t find trackable</string> <string name="err_tb_find_that">c:geo can\'t find that trackable.</string> - <string name="err_waypoint_cache_unknown">c:geo doesn\'t know to which cache you want to add waypoint.</string> + <string name="err_waypoint_cache_unknown">c:geo doesn\'t know to which cache you want to add a waypoint for.</string> <string name="err_waypoint_add_failed">c:geo failed to add your waypoint.</string> <string name="err_point_unknown_position">c:geo can\'t recognize where you are.</string> <string name="err_point_no_position_given_title">Info required</string> - <string name="err_point_no_position_given">Fill at least latitude or longitude or distance and bearing. You can also fill all four fields.</string> + <string name="err_point_no_position_given">Fill at least latitude and longitude or distance and bearing. You can also fill all four fields.</string> <string name="err_point_curr_position_unavailable">c:geo still doesn\'t have current coordinates. Please, wait a while…</string> <string name="err_point_bear_and_dist_title">Need some help?</string> - <string name="err_point_bear_and_dist">Fill both bearing and distance. Bearing is angle 0 to 360 degrees relative to north. Distance with or without units.</string> + <string name="err_point_bear_and_dist">Fill both bearing and distance. Bearing is angle 0 to 360 degrees relative to north. Distance doesn\'t require units.</string> <string name="err_point_location_error">c:geo can\'t get location of waypoint.</string> <string name="err_log_load_data">c:geo can\'t load data required to log visit.</string> <string name="err_log_load_data_again">c:geo can\'t load data required to log visit. Trying again.</string> @@ -211,20 +211,20 @@ <string name="err_parse_dist">c:geo can\'t parse distance.</string> <string name="err_parse_lat_lon">c:geo can\'t parse latitude or longitude.</string> <string name="warn_save_nothing">There is nothing to be saved.</string> - <string name="warn_no_cache_coord">There is no cache with coordinates.</string> + <string name="warn_no_cache_coord">There are no caches with coordinates.</string> <string name="warn_no_coordinates">No Coordinates given.</string> <string name="warn_no_keyword">No Keyword given.</string> <string name="warn_no_username">No Username given.</string> <string name="warn_search_help_title">Need some help?</string> <string name="warn_search_help_address">Enter an address or location name. For example use a postal address \"Radlicka 100, Prague, Czech Republic\", a city name \"Berlin\" or just a name of something like \"Yellowstone Park\".</string> <string name="warn_search_help_gccode">Enter the code for a geocache. For example \"GC1VCAZ\".</string> - <string name="warn_search_help_keyword">Enter all or part of a geocache name. For example \"Night Cache\".</string> + <string name="warn_search_help_keyword">Enter all or part of a geocache\'s name. For example \"Night Cache\".</string> <string name="warn_search_help_user">Enter a username from Geocaching.com.</string> <string name="warn_search_help_tb">Enter the code for a trackable. For example \"TB29QMZ\".</string> - <string name="warn_log_text_fill">Please fill in text for your log.</string> + <string name="warn_log_text_fill">Please input some text for your log.</string> <string name="warn_load_images">c:geo failed to load images.</string> <string name="warn_invalid_mapfile">The selected map file is not a valid mapsforge version 0.3.0 map file.\nOffline maps are not available.</string> - <string name="warn_deprecated_mapfile">You are using a deprecated version 0.2.4 map file.\nConsider switching to a version 0.3.0 map.\nWe will drop support for version 0.2.4 in the next release.</string> + <string name="warn_deprecated_mapfile">You are using a deprecated version of map file (0.2.4).\nConsider switching to a version 0.3.0 map.\nWe will drop support for version 0.2.4 in the next release.</string> <string name="warn_nonexistant_mapfile">The selected map file does not exist.\nOffline maps are not available.</string> <string name="warn_rendertheme_missing">Map theme not found.</string> <string name="info_log_posted">c:geo successfully submitted the log.</string> @@ -258,10 +258,10 @@ <string name="advanced_search_button">Search</string> <string name="stored_caches_button">Stored</string> <string name="any_button">Any destination</string> - <string name="unknown_scan">Didn\'t find any geocode in the scan result.</string> + <string name="unknown_scan">Didn\'t find any geocodes in the scan result.</string> <!-- caches --> - <string name="caches_no_cache">There is no cache</string> + <string name="caches_no_cache">No caches here</string> <string name="caches_more_caches">Load more caches</string> <string name="caches_more_caches_no">No more caches</string> <string name="caches_more_caches_loading">Loading caches…</string> @@ -274,7 +274,7 @@ <item quantity="other">minutes</item> </plurals> - <string name="caches_store_offline">Store for Offline</string> + <string name="caches_store_offline">Store Offline</string> <string name="caches_store_selected">Store Selected</string> <string name="caches_history">History</string> <string name="caches_on_map">Show on map</string> @@ -301,7 +301,7 @@ <string name="caches_nearby">Nearby</string> <string name="caches_manage">Manage</string> <string name="caches_drop_selected">Drop selected</string> - <string name="caches_drop_selected_ask">Do you want to remove selected caches from device?</string> + <string name="caches_drop_selected_ask">Do you want to remove the selected caches from your device?</string> <string name="caches_drop_all">Drop all</string> <string name="caches_drop_all_ask">Do you want to remove all caches from current list?</string> <string name="caches_drop_stored">Drop stored</string> @@ -315,7 +315,7 @@ <string name="caches_map_locus">Locus</string> <string name="caches_map_locus_export">Export to Locus</string> <string name="caches_recaptcha_title">reCAPTCHA</string> - <string name="caches_recaptcha_explanation">Please, write text from image. It\'s important to download coordinates of caches. It\'s optional and can be switched off in Settings.</string> + <string name="caches_recaptcha_explanation">Please enter the text you see in the image. This enables downloading of cache coordinates, which can be disabled in Settings.</string> <string name="caches_recaptcha_hint">Text from image</string> <string name="caches_recaptcha_continue">Continue</string> <string name="caches_filter">Filter</string> @@ -344,12 +344,12 @@ <string name="list_dialog_create">Create</string> <string name="list_dialog_cancel">Cancel</string> <string name="list_dialog_create_ok">A new list was created</string> - <string name="list_dialog_create_err">c:geo failed to create new list</string> + <string name="list_dialog_create_err">c:geo failed to create the new list</string> <string name="list_dialog_remove_title">Remove list</string> - <string name="list_dialog_remove_description">Do you want to remove the current list of caches? All caches remaining in the list will be moved to \"Stored\".</string> + <string name="list_dialog_remove_description">Do you want to remove the current list? All caches remaining in the list will be moved to \"Stored\".</string> <string name="list_dialog_remove">Remove</string> <string name="list_dialog_remove_ok">The list was removed</string> - <string name="list_dialog_remove_err">c:geo failed to remove current list</string> + <string name="list_dialog_remove_err">c:geo failed to remove the current list</string> <string name="list_dialog_rename_title">Rename list</string> <string name="list_dialog_rename">Rename</string> @@ -372,7 +372,8 @@ <string name="settings_title_map_content">Map Content</string> <string name="settings_title_gpx">GPX</string> <string name="settings_title_basicmembers">Basic Members</string> - <string name="settings_title_miscellaneous">More Settings</string> + <string name="settings_title_navigation">Navigation</string> + <string name="settings_title_system">System</string> <string name="settings_category_browser">Browser</string> <string name="settings_category_logging_other">Other Logging Options</string> @@ -381,13 +382,14 @@ <string name="settings_title_gc">Geocaching.com</string> <string name="settings_activate_gc">Activate</string> - <string name="settings_gc_legal_note">To use the services of Geocaching.com terms and conditions of the Groundspeak disclaimer have to be agreed.</string> + <string name="settings_gc_legal_note">To use the services of geocaching.com, you must agree to the Groundspeak Terms of Use.</string> <string name="settings_info_facebook_login_title">Facebook Login</string> <string name="settings_info_facebook_login">You can\'t make c:geo login to geocaching.com with your Facebook account. But there is a simple workaround …</string> <string name="init_oc">Opencaching.de</string> <string name="settings_activate_oc">Activate</string> <string name="init_oc_de_description">Authorize c:geo with opencaching.de to search for caches and access/filter your found caches.</string> <string name="init_register_oc_de">Authorize c:geo</string> + <string name="init_reregister_oc_de">Authorize c:geo again</string> <string name="init_gcvote">GCvote.com</string> <string name="init_twitter">Twitter</string> <string name="settings_activate_twitter">Activate</string> @@ -401,8 +403,9 @@ <string name="init_login_popup_failed_reason">Login failed:</string> <string name="init_login_popup_not_authorized">Not authorized</string> <string name="init_twitter_authorize">Authorize c:geo</string> + <string name="init_twitter_reauthorize">Authorize c:geo again</string> <string name="init_signature">Signature</string> - <string name="init_signature_help_text">Enter your signature to use it in the log text.\nSpecial strings that can be used are: [DATE] , [TIME], [DATETIME], [USER] & [NUMBER].\nThese will be expanded when the signature is inserted.</string> + <string name="init_signature_help_text">Enter a signature to be appended to your logs.\nSpecial strings that can be used are: [DATE] , [TIME], [DATETIME], [USER] & [NUMBER].\nThese will be expanded when the signature is inserted.</string> <string name="init_signature_template_button">Insert Template</string> <string name="init_signature_template_date">Date</string> <string name="init_signature_template_time">Time</string> @@ -412,22 +415,22 @@ <string name="init_signature_template_owner">Owner</string> <string name="init_ratingwanted">GCvote Rating</string> <string name="init_summary_ratingwanted">Load cache rating from GCvote.com</string> - <string name="init_friendlogswanted">Friend\'s Logs</string> - <string name="init_summary_friendlogswanted">Load additional logbook page for logs from friends</string> + <string name="init_friendlogswanted">Show Friends\' Logs</string> + <string name="init_summary_friendlogswanted">Display additional logbook page for logs from friends</string> <string name="init_openlastdetailspage">Last Details Page</string> <string name="init_summary_openlastdetailspage">Open details with last used page</string> <string name="init_autoload">Long Description</string> - <string name="init_summary_autoload">Auto-loading of long description</string> + <string name="init_summary_autoload">Always load long description</string> <string name="init_skin">Light Skin</string> <string name="init_summary_skin">Use light skin (Restart needed)</string> <string name="init_address">Show Address</string> <string name="init_summary_address">Show address instead of coordinates on main screen</string> <string name="init_captcha">Show CAPTCHA</string> <string name="init_summary_captcha">Show CAPTCHA if necessary (only Basic Member)</string> - <string name="init_useenglish">Use in English</string> + <string name="init_useenglish">Use English</string> <string name="init_summary_useenglish">Use English language for c:geo (Restart needed)</string> <string name="init_exclude">Exclude Own and Found</string> - <string name="init_summary_exclude">Exclude own and found caches</string> + <string name="init_summary_exclude">Exclude caches you own or have found</string> <string name="init_showwaypoints">Show Waypoints</string> <string name="init_showwaypoint_description">If less than the given amount of caches are displayed on the map, their waypoints are shown additionally.</string> <string name="init_disabled">Exclude Disabled</string> @@ -441,18 +444,18 @@ <string name="init_units">Use Imperial Units</string> <string name="init_summary_units">Use Imperial Units instead of Metric Units</string> <string name="init_log_offline">Offline Logging</string> - <string name="init_summary_log_offline">Enable Offline Logging (Don\'t show online Log screen when logging, don\'t send the Log online)</string> + <string name="init_summary_log_offline">Enable Offline Logging (Wont\'t show online log screen when logging, won\'t upload logs)</string> <string name="init_choose_list">Ask for List</string> - <string name="init_summary_choose_list">Ask for list when storing caches</string> + <string name="init_summary_choose_list">Ask which list to store caches in</string> <string name="init_livelist">Show Direction</string> - <string name="init_summary_livelist">Show Direction to caches in the list</string> + <string name="init_summary_livelist">Show direction of caches in the list</string> <string name="init_backup">Backup</string> <string name="init_backup_backup">Backup</string> <string name="init_backup_running">Creating backup of cache database…</string> - <string name="init_backup_note">Please note, that this option will backup or restore the database containing caches and waypoints, but not your settings.\nYour Login data or passwords will never leave this application.</string> + <string name="init_backup_note">Please note that this feature will backup/restore a database containing caches and waypoints, but not your settings.\nYour Login data and passwords will never leave this application.</string> <string name="init_backup_restore">Restore</string> - <string name="init_backup_success">Database of c:geo was successfully copied to the file</string> - <string name="init_backup_failed">Backup of database of c:geo failed.</string> + <string name="init_backup_success">c:geo\'s database was successfully copied to:</string> + <string name="init_backup_failed">Backup of c:geo\'s database failed.</string> <string name="init_backup_unnecessary">Database is empty, no backup necessary.</string> <string name="init_restore_success">Restoration completed.</string> <string name="init_restore_failed">Restoration failed.</string> @@ -472,19 +475,19 @@ <string name="init_summary_maptrail">Show trail on Map</string> <string name="init_share_after_export">Open share menu after GPX export</string> <string name="init_trackautovisit">Visit TBs</string> - <string name="init_summary_trackautovisit">Set trackables to \"Visited\" as a default</string> + <string name="init_summary_trackautovisit">Set trackables to \"Visited\" by default</string> <string name="init_sigautoinsert">Insert automatically</string> <string name="init_loaddirectionimg">Direction Image</string> - <string name="init_summary_loaddirectionimg">Load image for directional arrow if necessary (only Basic Member)</string> + <string name="init_summary_loaddirectionimg">Download directional arrow image if necessary (only required for Basic Members)</string> <string name="init_default_navigation_tool">Default Navigation</string> <string name="init_default_navigation_tool_description">Here you can select your preferred navigation tool.</string> <string name="init_default_navigation_tool_select">Select tool</string> - <string name="init_default_navigation_tool_2_description">Here you can select your second preferred navigation tool. It\'s activated by long clicking the navigation icon next to the title of the cache.</string> + <string name="init_default_navigation_tool_2_description">Here you can select your second preferred navigation tool. Activate it by long pressing the navigation icon next to the title of the cache.</string> <string name="init_debug_title">Debug information</string> - <string name="init_debug_note">c:geo can generate a lot of debugging information. While this information is generally not useful for c:geo users, developers may need to generate this information in order to analyze a bug. In this case, they will ask you to check the box below and send them the log file.</string> + <string name="init_debug_note">c:geo can generate a lot of debugging information. While this information is generally not useful for c:geo users, developers may need you to generate this information in order to analyze a bug. In this case, they will ask you to check the box below and send them the resulting log file.</string> <string name="init_debug">Generate debug information</string> <string name="init_dbonsdcard_title">Database location</string> - <string name="init_dbonsdcard_note">You may store the database of c:geo on the external storage medium. If you do so you will save internal memory, but you may loose a bit of performance and c:geo will not work if your sdcard is not available.</string> + <string name="init_dbonsdcard_note">You may store the database of c:geo on your external storage medium. Doing so will save internal memory, but you may lose a bit of performance and c:geo will not work if your SD card isn\'t available.</string> <string name="init_dbonsdcard">On external storage</string> <string name="init_dbmove_dbmove">Moving Database</string> <string name="init_dbmove_running">Moving Database</string> @@ -493,7 +496,7 @@ <string name="init_plain_logs">Plain Logs</string> <string name="init_summary_plain_logs">Display log entries without colors</string> <string name="init_use_native_ua">Android browser</string> - <string name="init_summary_use_native_ua">Identify as Android browser. Solves login problems of some network providers.</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> <!-- map sources --> @@ -505,12 +508,12 @@ <string name="init_sendToCgeo">Send to c:geo</string> <string name="settings_info_send2cgeo_title">Info on send2cgeo</string> <string name="init_sendToCgeo_name">Your device name</string> - <string name="init_sendToCgeo_description"><b>Send2cgeo</b> allows you to receive caches directly from the geocaching site using a special plugin for Firefox or Chrome. Before registration please read <a href="http://send2.cgeo.org/">http://send2.cgeo.org/</a>. You only need to register if you want to use send2cgeo. c:geo will work normal even without registering your device.</string> + <string name="init_sendToCgeo_description"><b>Send2c:geo</b> allows you to send caches to your Android device directly from geocaching.com using a special plugin for Firefox or Chrome. Before registering, please see <a href="http://send2.cgeo.org/">http://send2.cgeo.org/</a>. You only need to register if you want to use send2c:geo. c:geo will work normally without registering your device.</string> <string name="init_sendToCgeo_register">Request Registration</string> - <string name="init_sendToCgeo_registering">Registering your device for "Send to c:geo"…</string> - <string name="init_sendToCgeo_register_ok">Registration successful. PIN code is ####. Use it on c:geo website to add this device to your browser.</string> + <string name="init_sendToCgeo_registering">Registering your device for Send2c:geo…</string> + <string name="init_sendToCgeo_register_ok">Registration successful. PIN code is ####. Use it on the c:geo website to connect this device to your browser.</string> <string name="init_sendToCgeo_register_fail">Registration failed.</string> - <string name="sendToCgeo_download_fail">c:geo failed to download caches. No internet connection or send2c:geo is down.</string> + <string name="sendToCgeo_download_fail">c:geo failed to download caches. No internet connection, or send2c:geo is down.</string> <string name="sendToCgeo_no_registration">c:geo failed to download caches. Registration for send2c:geo expired. Please register in settings.</string> <!-- auth twitter --> @@ -522,10 +525,10 @@ <string name="auth_finish">Finish</string> <string name="auth_dialog_wait">Waiting for Twitter…</string> <string name="auth_dialog_pin_title">PIN code</string> - <string name="auth_dialog_pin_message">Please type in PIN code provided by the Twitter website. It is mandatory to complete the authorization.</string> + <string name="auth_dialog_pin_message">Please type in the PIN code provided by Twitter. It is required to complete authorization.</string> <string name="auth_dialog_completed">c:geo is now authorized to post on Twitter.</string> - <string name="about_auth_1">The following process allows <b>c:geo</b> to access Twitter - if agreed.</string> - <string name="about_auth_2">A click on the \"authorize c:geo\" button will start the process. This process will open up a web browser with a Twitter page. Login on this page and allow <b>c:geo</b> to access your account. If this is accepted, Twitter will show up a numeric PIN code. This PIN must be pasted into <b>c:geo</b> and confirmed. That\'s all.</string> + <string name="about_auth_1">The following process will allow <b>c:geo</b> to access Twitter.</string> + <string name="about_auth_2">Pressing the \"authorize c:geo\" button will start the process. This process will open up a web browser with a Twitter page. Log in on this page and allow <b>c:geo</b> to access your account. After this, Twitter will show up a numeric PIN code. This PIN must be pasted into <b>c:geo</b> and confirmed. That\'s all.</string> <!-- auth opencaching --> <string name="auth_ocde">opencaching.de</string> @@ -536,10 +539,10 @@ <string name="auth_finish_oc">Finish</string> <string name="auth_dialog_wait_oc">Waiting for %s…</string> <string name="auth_dialog_pin_title_oc">PIN code</string> - <string name="auth_dialog_pin_message_oc">Please type in PIN code provided by the %s website. It is mandatory to complete the authorization.</string> + <string name="auth_dialog_pin_message_oc">Please type in PIN code provided by the %s website. It is required to complete authorization.</string> <string name="auth_dialog_completed_oc">c:geo is now authorized to interact with %s.</string> - <string name="about_auth_1_oc">The following process allows <b>c:geo</b> to access %s - if agreed.</string> - <string name="about_auth_2_oc">A click on the \"authorize c:geo\" button will start the process. This process will open up a web browser with a %s page. Login on this page and allow <b>c:geo</b> to access your account. If this is accepted, %s will show up a numeric PIN code. This PIN must be pasted into <b>c:geo</b> and confirmed. That\'s all.</string> + <string name="about_auth_1_oc">The following process allows <b>c:geo</b> to access %s.</string> + <string name="about_auth_2_oc">Pressing the \"authorize c:geo\" button will start the process. This process will open up a web browser with a %s page. Log in on this page and allow <b>c:geo</b> to access your account. After this, %s will show up a numeric PIN code. This PIN must be pasted into <b>c:geo</b> and confirmed. That\'s all.</string> <!-- cache --> <plurals name="cache_counts"> @@ -643,7 +646,7 @@ <string name="cache_menu_details">Details</string> <string name="cache_menu_refresh">Refresh</string> <string name="cache_menu_share">Share cache</string> - <string name="cache_menu_move_list">Move to other list</string> + <string name="cache_menu_move_list">Move to different list</string> <string name="cache_menu_gcc">GCC</string> <string name="cache_menu_whereyougo">WhereYouGo</string> <string name="cache_menu_oruxmaps">OruxMaps</string> @@ -665,7 +668,7 @@ <string name="cache_difficulty">Difficulty</string> <string name="cache_terrain">Terrain</string> <string name="cache_rating">Rating</string> - <string name="cache_own_rating">Own Rating</string> + <string name="cache_own_rating">Your Rating</string> <string name="cache_rating_of">of</string> <string name="cache_favorite">Favorite</string> <string name="cache_owner">Owner</string> @@ -780,18 +783,20 @@ <string name="map_map">Map</string> <string name="map_live">Live map</string> <string name="map_view_map">Map view</string> - <string name="map_modes">Map modes</string> + <string name="map_modes">Map settings</string> <string name="map_trail_show">Show trail</string> <string name="map_trail_hide">Hide trail</string> <string name="map_circles_show">Show circles</string> <string name="map_circles_hide">Hide circles</string> + <string name="map_mycaches_show">Show own/found caches</string> + <string name="map_mycaches_hide">Hide own/found caches</string> <string name="map_theme_builtin">Default</string> <string name="map_theme_select">Select map theme</string> <string name="map_live_enable">Enable live</string> <string name="map_live_disable">Disable live</string> <string name="map_static_title">Static maps</string> <string name="map_static_loading">Loading static maps…</string> - <string name="map_token_err">Since c:geo is able to download only partial data, coordinates of caches could be inaccurate.</string> + <string name="map_token_err">Since c:geo is only able to download partial data, coordinates of caches could be inaccurate.</string> <string name="map_as_list">Show as list</string> <string name="map_strategy">Strategy</string> <string name="map_strategy_title">Live Map strategy</string> @@ -799,7 +804,7 @@ <string name="map_strategy_fast">Fast</string> <string name="map_strategy_auto">Speed dependent</string> <string name="map_strategy_detailed">Detailed</string> - <string name="live_map_notification">On the new live map coordinates may not always be precise. Possibly imprecise coordinates are marked by an orange circle.\nOpening the cache details or saving the cache for offline use will always obtain precise coordinates.\n\nMore information on all changes can be found on the \"About c:geo\" page inside the app.</string> + <string name="live_map_notification">Coordinates on the live map may not always be precise. Possibly imprecise coordinates are marked by an orange circle.\nOpening the cache details or saving the cache for offline use will always obtain precise coordinates.\n\nMore information can be found on the \"About c:geo\" page inside the app.</string> <string name="live_map_note_dontshow">Do not show again</string> <!-- search --> @@ -845,11 +850,11 @@ <string name="trackable_spotted_in_cache">In</string> <string name="trackable_spotted_at_user">In the hands of</string> <string name="trackable_spotted_unknown_location">Unknown location</string> - <string name="trackable_spotted_owner">In the hands of the owner</string> + <string name="trackable_spotted_owner">In the hands of its owner</string> <string name="trackable_origin">Origin</string> <string name="trackable_unknown">Unknown</string> <string name="trackable_released">Released</string> - <string name="trackable_distance">Travelled</string> + <string name="trackable_distance">Traveled</string> <string name="trackable_touch">Touch</string> <string name="trackable_not_activated">Trackable not activated</string> @@ -884,17 +889,17 @@ <!-- helpers --> <string name="helper_calendar_title">c:geo calendar add-on</string> <string name="helper_calendar_missing">c:geo calendar add-on not installed.</string> - <string name="helper_calendar_description">Enables you to export event caches into the calendar on your device.</string> + <string name="helper_calendar_description">Enables you to export event caches to the calendar on your device.</string> <string name="helper_locus_title">Locus</string> - <string name="helper_locus_description">Simple usable application showing Online maps and allowing to download them directly into Offline mode (raster maps only). Also support track recording, POI handling and many other useful functions.</string> + <string name="helper_locus_description">Simple, usable application which shows online maps and allows you to download them directly into Offline mode (raster maps only). Also supports track recording, POI handling and many other useful functions.</string> <string name="helper_gpsstatus_title">GPS Status</string> - <string name="helper_gpsstatus_description">You can use radar from this application with c:geo. It also offers a lot of other GPS-related information.</string> + <string name="helper_gpsstatus_description">You can use the radar in this application in conjunction with c:geo. It also offers a lot of other GPS-related information.</string> <string name="helper_bluetoothgps_title">Bluetooth GPS</string> - <string name="helper_bluetoothgps_description">Allows you to use an external GPS receiver to get more precise location and can spare battery of your device.</string> + <string name="helper_bluetoothgps_description">Allows you to use an external GPS receiver to get more precise location data, and can spare battery of your device.</string> <string name="helper_barcode_title">Barcode Scanner</string> - <string name="helper_barcode_description">There are Greasemonkey scripts and websites which allow to display a geocode as barcode. With this app c:geo can read that geocode directly from the screen of your computer.</string> + <string name="helper_barcode_description">There are Greasemonkey scripts and websites which enable display of geocodes as barcodes. With this app, c:geo can read such geocodes directly from the screen of your computer.</string> <string name="helper_pocketquery_title">Pocket Query Creator</string> - <string name="helper_pocketquery_description">Allows easy creation and download of Pocket Queries centred on your current position or a point selected from a map. Requires a premium Geocaching.com account.</string> + <string name="helper_pocketquery_description">Allows easy creation and download of Pocket Queries centred on your current position or a point selected from a map. Requires a Premium Geocaching.com account.</string> <!-- add-ons --> <string name="addon_missing_title">Missing Add-On</string> @@ -905,14 +910,14 @@ <string name="export_exportedto">exported to</string> <string name="export_failed">Export failed</string> <string name="export_fieldnotes">Field Notes</string> - <string name="export_fieldnotes_info">Field Notes will be exported to /sdcard/field-notes with current date and time as file name.</string> + <string name="export_fieldnotes_info">Field Notes will be exported to /sdcard/field-notes with the current date and time as their file name.</string> <string name="export_fieldnotes_upload">Upload to geocaching.com</string> <string name="export_fieldnotes_uploading">Uploading…</string> <string name="export_fieldnotes_upload_success">Upload to geocaching.com successful</string> <string name="export_fieldnotes_onlynew">Only since last export</string> <string name="export_fieldnotes_creating">Creating Field Notes…</string> <string name="export_gpx">GPX</string> - <string name="export_gpx_info">The GPX file will be exported to %1$s with current date and time as file name.</string> + <string name="export_gpx_info">The GPX file will be exported to %1$s with the current date and time as its file name.</string> <string name="export_gpx_to">Send exported GPX to</string> <!-- GC attributes --> @@ -979,13 +984,13 @@ <string name="attribute_touristok_yes">Tourist friendly</string> <string name="attribute_touristok_no">Not tourist friendly</string> <string name="attribute_frontyard_yes">Private residence</string> - <string name="attribute_frontyard_no">No private residence</string> + <string name="attribute_frontyard_no">Not a private residence</string> <string name="attribute_teamwork_yes">Teamwork required</string> <string name="attribute_teamwork_no">No teamwork required</string> <string name="attribute_landf_yes">Lost and found tour</string> - <string name="attribute_landf_no">No lost and found tour</string> + <string name="attribute_landf_no">Not a lost and found tour</string> <string name="attribute_partnership_yes">Partnership cache</string> - <string name="attribute_partnership_no">No partnership cache</string> + <string name="attribute_partnership_no">Not a partnership cache</string> <string name="attribute_fee_yes">Access or parking fee required</string> <string name="attribute_fee_no">Access or parking fee not required</string> <string name="attribute_rappelling_yes">Climbing gear required</string> @@ -1021,7 +1026,7 @@ <string name="attribute_hunting_yes">Hunting</string> <string name="attribute_hunting_no">No hunting</string> <string name="attribute_danger_yes">Dangerous area</string> - <string name="attribute_danger_no">No dangerous area</string> + <string name="attribute_danger_no">Not a dangerous area</string> <string name="attribute_thorn_yes">Thorns</string> <string name="attribute_thorn_no">No thorns</string> <string name="attribute_wheelchair_yes">Wheelchair accessible</string> @@ -1047,7 +1052,7 @@ <string name="attribute_food_yes">Food nearby</string> <string name="attribute_food_no">No food nearby</string> <string name="attribute_oc_only_yes">Only loggable at Opencaching</string> - <string name="attribute_oc_only_no">Not only loggable at Opencaching</string> + <string name="attribute_oc_only_no">Not loggable only at Opencaching</string> <string name="attribute_link_only_yes">Hyperlink to another caching portal only</string> <string name="attribute_link_only_no">Not only a hyperlink to another caching portal</string> <string name="attribute_letterbox_yes">Letterbox (needs stamp)</string> @@ -1059,7 +1064,7 @@ <string name="attribute_swamp_yes">Swamp or marsh</string> <string name="attribute_swamp_no">No swamp or marsh</string> <string name="attribute_hills_yes">Hilly area</string> - <string name="attribute_hills_no">No hilly area</string> + <string name="attribute_hills_no">Not a hilly area</string> <string name="attribute_easy_climbing_yes">Lightweight climbing</string> <string name="attribute_easy_climbing_no">No lightweight climbing</string> <string name="attribute_poi_yes">Point of interest</string> @@ -1098,8 +1103,8 @@ <string name="attribute_investigation_no">No investigation</string> <string name="attribute_puzzle_yes">Puzzle / Mystery</string> <string name="attribute_puzzle_no">No puzzle / mystery</string> - <string name="attribute_arithmetic_yes">Arithmetical problem</string> - <string name="attribute_arithmetic_no">No arithmetical problem</string> + <string name="attribute_arithmetic_yes">Arithmetic problem</string> + <string name="attribute_arithmetic_no">No arithmetic problem</string> <string name="attribute_other_cache_yes">Other cache type</string> <string name="attribute_other_cache_no">No other cache type</string> <string name="attribute_ask_owner_yes">Ask owner for start conditions</string> diff --git a/main/res/values/themes.xml b/main/res/values/themes.xml index 69e6187..ed64ef5 100644 --- a/main/res/values/themes.xml +++ b/main/res/values/themes.xml @@ -158,6 +158,7 @@ <item name="settings_details">@drawable/settings_details_white</item> <item name="settings_eye">@drawable/settings_eye_white</item> <item name="settings_map">@drawable/settings_map_white</item> + <item name="settings_arrow">@drawable/settings_arrow_white</item> <item name="settings_nut">@drawable/settings_nut_white</item> <item name="settings_pen">@drawable/settings_pen_white</item> <item name="settings_sdcard">@drawable/settings_sdcard_white</item> @@ -169,6 +170,7 @@ <item name="settings_details">@drawable/settings_details_black</item> <item name="settings_eye">@drawable/settings_eye_black</item> <item name="settings_map">@drawable/settings_map_black</item> + <item name="settings_arrow">@drawable/settings_arrow_black</item> <item name="settings_nut">@drawable/settings_nut_black</item> <item name="settings_pen">@drawable/settings_pen_black</item> <item name="settings_sdcard">@drawable/settings_sdcard_black</item> diff --git a/main/res/xml/preferences.xml b/main/res/xml/preferences.xml index 8bbe8ad..f2d54c7 100644 --- a/main/res/xml/preferences.xml +++ b/main/res/xml/preferences.xml @@ -36,6 +36,21 @@ <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" @@ -56,7 +71,7 @@ android:text="@string/init_oc_de_description" android:dependency="@string/pref_connectorOCActive" /> <cgeo.geocaching.settings.AuthorizeOcDePreference - android:title="@string/init_register_oc_de" + android:key="@string/pref_fakekey_ocde_authorization" android:dependency="@string/pref_connectorOCActive" /> </PreferenceCategory> @@ -85,7 +100,7 @@ android:text="@string/about_twitter" android:dependency="@string/pref_twitter" /> <cgeo.geocaching.settings.AuthorizeTwitterPreference - android:title="@string/init_twitter_authorize" + android:key="@string/pref_fakekey_twitter_authorization" android:dependency="@string/pref_twitter" /> </PreferenceCategory> @@ -144,7 +159,7 @@ android:title="@string/init_units" android:summary="@string/init_summary_units" android:defaultValue="false" /> - + </PreferenceScreen> <PreferenceScreen @@ -313,8 +328,8 @@ </PreferenceScreen> <PreferenceScreen - android:title="@string/settings_title_miscellaneous" - android:icon="?attr/settings_nut" > + android:title="@string/settings_title_navigation" + android:icon="?attr/settings_arrow" > <PreferenceCategory android:title="@string/init_default_navigation_tool" > @@ -341,6 +356,12 @@ </PreferenceCategory> + </PreferenceScreen> + + <PreferenceScreen + android:title="@string/settings_title_system" + android:icon="?attr/settings_nut" > + <PreferenceCategory android:title="@string/settings_title_gpx" > @@ -352,22 +373,6 @@ android:title="@string/init_gpx_importdir" /> </PreferenceCategory> - - <PreferenceCategory - android:title="@string/settings_title_basicmembers" > - - <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" /> - - </PreferenceCategory> <PreferenceCategory android:title="@string/init_backup" > diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index a5ace9e..ac9b156 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -4,6 +4,7 @@ import butterknife.InjectView; import butterknife.Views; import cgeo.calendar.ICalendar; +import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.activity.AbstractViewPagerActivity; import cgeo.geocaching.activity.Progress; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; @@ -45,6 +46,8 @@ import cgeo.geocaching.utils.ImageUtils; import cgeo.geocaching.utils.Log; import cgeo.geocaching.utils.MatcherWrapper; import cgeo.geocaching.utils.RunnableWithArgument; +import cgeo.geocaching.utils.SimpleCancellableHandler; +import cgeo.geocaching.utils.SimpleHandler; import cgeo.geocaching.utils.TextUtils; import cgeo.geocaching.utils.TranslationUtils; import cgeo.geocaching.utils.UnknownTagsHandler; @@ -105,6 +108,7 @@ import android.widget.ScrollView; import android.widget.TextView; import android.widget.TextView.BufferType; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Collections; import java.util.EnumSet; @@ -149,6 +153,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc private Geocache cache; private final Progress progress = new Progress(); + private SearchResult search; private EditNoteDialogListener editNoteDialogListener; @@ -178,12 +183,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc // some views that must be available from everywhere // TODO: Reference can block GC? private TextView cacheDistanceView; - private final Handler cacheChangeNotificationHandler = new Handler() { - @Override - public void handleMessage(Message msg) { - notifyDataSetChanged(); - } - }; protected ImagesList imagesList; @Override @@ -278,7 +277,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc return; } - final LoadCacheHandler loadCacheHandler = new LoadCacheHandler(); + final LoadCacheHandler loadCacheHandler = new LoadCacheHandler(this, progress); try { String title = res.getString(R.string.cache); @@ -609,44 +608,56 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc return true; } - private class LoadCacheHandler extends CancellableHandler { + private final static class LoadCacheHandler extends SimpleCancellableHandler { + + public LoadCacheHandler(CacheDetailActivity activity, Progress progress) { + super(activity, progress); + } + @Override public void handleRegularMessage(final Message msg) { if (UPDATE_LOAD_PROGRESS_DETAIL == msg.what && msg.obj instanceof String) { updateStatusMsg((String) msg.obj); } else { + CacheDetailActivity activity = ((CacheDetailActivity) activityRef.get()); + if (activity == null) { + return; + } + SearchResult search = activity.getSearch(); if (search == null) { - showToast(res.getString(R.string.err_dwld_details_failed)); - - progress.dismiss(); - finish(); + showToast(R.string.err_dwld_details_failed); + dismissProgress(); + finishActivity(); return; } if (search.getError() != null) { - showToast(res.getString(R.string.err_dwld_details_failed) + " " + search.getError().getErrorString(res) + "."); - - progress.dismiss(); - finish(); + activity.showToast(activity.getResources().getString(R.string.err_dwld_details_failed) + " " + search.getError().getErrorString(activity.getResources()) + "."); + dismissProgress(); + finishActivity(); return; } - updateStatusMsg(res.getString(R.string.cache_dialog_loading_details_status_render)); + updateStatusMsg(activity.getResources().getString(R.string.cache_dialog_loading_details_status_render)); // Data loaded, we're ready to show it! - notifyDataSetChanged(); + activity.notifyDataSetChanged(); } } private void updateStatusMsg(final String msg) { - progress.setMessage(res.getString(R.string.cache_dialog_loading_details) + CacheDetailActivity activity = ((CacheDetailActivity) activityRef.get()); + if (activity == null) { + return; + } + setProgressMessage(activity.getResources().getString(R.string.cache_dialog_loading_details) + "\n\n" + msg); } @Override public void handleCancel(final Object extra) { - finish(); + finishActivity(); } } @@ -666,7 +677,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } // allow cache to notify CacheDetailActivity when it changes so it can be reloaded - cache.setChangeNotificationHandler(cacheChangeNotificationHandler); + cache.setChangeNotificationHandler(new ChangeNotificationHandler(this, progress)); // action bar: title and icon if (StringUtils.isNotBlank(cache.getName())) { @@ -1183,49 +1194,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc return view; } - private class StoreCacheHandler extends CancellableHandler { - @Override - public void handleRegularMessage(Message msg) { - if (UPDATE_LOAD_PROGRESS_DETAIL == msg.what && msg.obj instanceof String) { - updateStatusMsg((String) msg.obj); - } else { - storeThread = null; - CacheDetailActivity.this.notifyDataSetChanged(); // reload cache details - } - } - - private void updateStatusMsg(final String msg) { - progress.setMessage(res.getString(R.string.cache_dialog_offline_save_message) - + "\n\n" - + msg); - } - } - - private class RefreshCacheHandler extends CancellableHandler { - @Override - public void handleRegularMessage(Message msg) { - if (UPDATE_LOAD_PROGRESS_DETAIL == msg.what && msg.obj instanceof String) { - updateStatusMsg((String) msg.obj); - } else { - refreshThread = null; - CacheDetailActivity.this.notifyDataSetChanged(); // reload cache details - } - } - - private void updateStatusMsg(final String msg) { - progress.setMessage(res.getString(R.string.cache_dialog_refresh_message) - + "\n\n" - + msg); - } - } - - private class DropCacheHandler extends Handler { - @Override - public void handleMessage(Message msg) { - CacheDetailActivity.this.notifyDataSetChanged(); - } - } - private class StoreCacheClickListener implements View.OnClickListener { @Override public void onClick(View arg0) { @@ -1249,7 +1217,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } protected void storeCache(int listId) { - final StoreCacheHandler storeCacheHandler = new StoreCacheHandler(); + final StoreCacheHandler storeCacheHandler = new StoreCacheHandler(CacheDetailActivity.this, progress); 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()); @@ -1275,7 +1243,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc return; } - final RefreshCacheHandler refreshCacheHandler = new RefreshCacheHandler(); + final RefreshCacheHandler refreshCacheHandler = new RefreshCacheHandler(CacheDetailActivity.this, progress); progress.show(CacheDetailActivity.this, res.getString(R.string.cache_dialog_refresh_title), res.getString(R.string.cache_dialog_refresh_message), true, refreshCacheHandler.cancelMessage()); @@ -1300,6 +1268,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc @Override public void run() { cache.store(listId, handler); + storeThread = null; } } @@ -1313,7 +1282,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc @Override public void run() { cache.refresh(cache.getListId(), handler); - + refreshThread = null; handler.sendEmptyMessage(0); } } @@ -1326,24 +1295,22 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc return; } - final DropCacheHandler dropCacheHandler = new DropCacheHandler(); - progress.show(CacheDetailActivity.this, res.getString(R.string.cache_dialog_offline_drop_title), res.getString(R.string.cache_dialog_offline_drop_message), true, null); - new DropCacheThread(dropCacheHandler).start(); + new DropCacheThread(new ChangeNotificationHandler(CacheDetailActivity.this, progress)).start(); } } private class DropCacheThread extends Thread { + private Handler handler; - private Handler handler = null; - - public DropCacheThread(Handler handlerIn) { - handler = handlerIn; + public DropCacheThread(Handler handler) { + super(); + this.handler = handler; } @Override public void run() { - cache.drop(handler); + cache.drop(this.handler); } } @@ -1375,7 +1342,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc public void onClick(View arg0) { doExecute(R.string.cache_dialog_watchlist_add_title, R.string.cache_dialog_watchlist_add_message, - new WatchlistAddThread(new WatchlistHandler())); + new WatchlistAddThread(new WatchlistHandler(CacheDetailActivity.this, progress))); } } @@ -1387,7 +1354,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc public void onClick(View arg0) { doExecute(R.string.cache_dialog_watchlist_remove_title, R.string.cache_dialog_watchlist_remove_message, - new WatchlistRemoveThread(new WatchlistHandler())); + new WatchlistRemoveThread(new WatchlistHandler(CacheDetailActivity.this, progress))); } } @@ -1401,6 +1368,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc @Override public void run() { + watchlistThread = null; handler.sendEmptyMessage(ConnectorFactory.getConnector(cache).addToWatchlist(cache) ? 1 : -1); } } @@ -1415,6 +1383,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc @Override public void run() { + watchlistThread = null; handler.sendEmptyMessage(ConnectorFactory.getConnector(cache).removeFromWatchlist(cache) ? 1 : -1); } } @@ -1429,6 +1398,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc @Override public void run() { + watchlistThread = null; handler.sendEmptyMessage(GCConnector.addToFavorites(cache) ? 1 : -1); } } @@ -1443,22 +1413,11 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc @Override public void run() { + watchlistThread = null; handler.sendEmptyMessage(GCConnector.removeFromFavorites(cache) ? 1 : -1); } } - private class FavoriteUpdateHandler extends Handler { - @Override - public void handleMessage(Message msg) { - progress.dismiss(); - if (msg.what == -1) { - showToast(res.getString(R.string.err_favorite_failed)); - } else { - CacheDetailActivity.this.notifyDataSetChanged(); // reload cache details - } - } - } - /** * Listener for "add to favorites" button */ @@ -1467,7 +1426,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc public void onClick(View arg0) { doExecute(R.string.cache_dialog_favorite_add_title, R.string.cache_dialog_favorite_add_message, - new FavoriteAddThread(new FavoriteUpdateHandler())); + new FavoriteAddThread(new FavoriteUpdateHandler(CacheDetailActivity.this, progress))); } } @@ -1479,7 +1438,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc public void onClick(View arg0) { doExecute(R.string.cache_dialog_favorite_remove_title, R.string.cache_dialog_favorite_remove_message, - new FavoriteRemoveThread(new FavoriteUpdateHandler())); + new FavoriteRemoveThread(new FavoriteUpdateHandler(CacheDetailActivity.this, progress))); } } @@ -1607,22 +1566,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } } - /** - * Handler, called when watchlist add or remove is done - */ - private class WatchlistHandler extends Handler { - @Override - public void handleMessage(Message msg) { - watchlistThread = null; - progress.dismiss(); - if (msg.what == -1) { - showToast(res.getString(R.string.err_watchlist_failed)); - } else { - CacheDetailActivity.this.notifyDataSetChanged(); // reload cache details - } - } - } - private class PreviewMapTask extends AsyncTask<Void, Void, BitmapDrawable> { @Override protected BitmapDrawable doInBackground(Void... parameters) { @@ -1805,7 +1748,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc Thread currentThread; private void uploadPersonalNote() { - final SimpleHandler myHandler = new SimpleHandler(); + final SimpleCancellableHandler myHandler = new SimpleCancellableHandler(CacheDetailActivity.this, progress); Message cancelMessage = myHandler.cancelMessage(res.getString(R.string.cache_personal_note_upload_cancelled)); progress.show(CacheDetailActivity.this, res.getString(R.string.cache_personal_note_uploading), res.getString(R.string.cache_personal_note_uploading), true, cancelMessage); @@ -2311,24 +2254,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } } - public class SimpleHandler extends CancellableHandler { - public static final String SUCCESS_TEXT = "success_message"; - - @Override - public void handleRegularMessage(final Message msg) { - if (msg.getData() != null && msg.getData().getString(SUCCESS_TEXT) != null) { - showToast(msg.getData().getString(SUCCESS_TEXT)); - } - progress.dismiss(); - } - - @Override - public void handleCancel(final Object extra) { - showToast((String) extra); - progress.dismiss(); - } - } - private class UploadPersonalNoteThread extends Thread { private Geocache cache = null; private CancellableHandler handler = null; @@ -2346,7 +2271,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } Message msg = Message.obtain(); Bundle bundle = new Bundle(); - bundle.putString(SimpleHandler.SUCCESS_TEXT, res.getString(R.string.cache_personal_note_upload_done)); + bundle.putString(SimpleCancellableHandler.SUCCESS_TEXT, res.getString(R.string.cache_personal_note_upload_done)); msg.setData(bundle); handler.sendMessage(msg); } @@ -2460,4 +2385,95 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc return cache; } + public SearchResult getSearch() { + return search; + } + + private static final class StoreCacheHandler extends SimpleCancellableHandler { + + public StoreCacheHandler(CacheDetailActivity activity, Progress progress) { + super(activity, progress); + } + + @Override + public void handleRegularMessage(Message msg) { + if (UPDATE_LOAD_PROGRESS_DETAIL == msg.what && msg.obj instanceof String) { + updateStatusMsg(R.string.cache_dialog_offline_save_message, (String) msg.obj); + } else { + notifyDatasetChanged(activityRef); + } + } + } + + private static final class RefreshCacheHandler extends SimpleCancellableHandler { + + public RefreshCacheHandler(CacheDetailActivity activity, Progress progress) { + super(activity, progress); + } + + @Override + public void handleRegularMessage(Message msg) { + if (UPDATE_LOAD_PROGRESS_DETAIL == msg.what && msg.obj instanceof String) { + updateStatusMsg(R.string.cache_dialog_refresh_message, (String) msg.obj); + } else { + notifyDatasetChanged(activityRef); + } + } + } + + private static final class ChangeNotificationHandler extends SimpleHandler { + + public ChangeNotificationHandler(CacheDetailActivity activity, Progress progress) { + super(activity, progress); + } + + @Override + public void handleMessage(Message msg) { + notifyDatasetChanged(activityRef); + } + } + + private static final class FavoriteUpdateHandler extends SimpleHandler { + + public FavoriteUpdateHandler(CacheDetailActivity activity, Progress progress) { + super(activity, progress); + } + + @Override + public void handleMessage(Message msg) { + if (msg.what == -1) { + dismissProgress(); + showToast(R.string.err_favorite_failed); + } else { + notifyDatasetChanged(activityRef); + } + } + } + + /** + * Handler, called when watchlist add or remove is done + */ + private static final class WatchlistHandler extends SimpleHandler { + + public WatchlistHandler(CacheDetailActivity activity, Progress progress) { + super(activity, progress); + } + + @Override + public void handleMessage(Message msg) { + if (msg.what == -1) { + dismissProgress(); + showToast(R.string.err_watchlist_failed); + } else { + notifyDatasetChanged(activityRef); + } + } + } + + private static void notifyDatasetChanged(WeakReference<AbstractActivity> activityRef) { + CacheDetailActivity activity = ((CacheDetailActivity) activityRef.get()); + if (activity != null) { + activity.notifyDataSetChanged(); + } + } } diff --git a/main/src/cgeo/geocaching/LogEntry.java b/main/src/cgeo/geocaching/LogEntry.java index 790becd..0121424 100644 --- a/main/src/cgeo/geocaching/LogEntry.java +++ b/main/src/cgeo/geocaching/LogEntry.java @@ -38,7 +38,7 @@ public final class LogEntry { this(Settings.getUsername(), dateInMilliSeconds, type, text); } - public LogEntry(final String author, long dateInMilliSeconds, final LogType type, final String text) { + public LogEntry(final String author, final long dateInMilliSeconds, final LogType type, final String text) { this.author = author; this.date = dateInMilliSeconds; this.type = type; @@ -51,7 +51,7 @@ public final class LogEntry { } @Override - public boolean equals(Object obj) { + public boolean equals(final Object obj) { if (this == obj) { return true; } @@ -109,7 +109,7 @@ public final class LogEntry { public String getDisplayText() { if (Settings.getPlainLogs()) { MatcherWrapper matcher = new MatcherWrapper(PATTERN_REMOVE_COLORS, log); - return matcher.replaceAll(""); + return matcher.replaceAll(StringUtils.EMPTY); } return log; } diff --git a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java index e7ffc3b..be4ef05 100644 --- a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java +++ b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java @@ -62,7 +62,7 @@ public class NavigateAnyPointActivity extends AbstractActivity { private int contextMenuItemPosition; - private String distanceUnit = ""; + private String distanceUnit = StringUtils.EMPTY; protected static class ViewHolder extends AbstractViewHolder { @InjectView(R.id.simple_way_point_longitude) protected TextView longitude; diff --git a/main/src/cgeo/geocaching/PersonalNote.java b/main/src/cgeo/geocaching/PersonalNote.java index 3413307..82e88f7 100644 --- a/main/src/cgeo/geocaching/PersonalNote.java +++ b/main/src/cgeo/geocaching/PersonalNote.java @@ -4,8 +4,7 @@ import org.apache.commons.lang3.StringUtils; public class PersonalNote { - private static final String MERGED_PREFIX = "merged:\n"; - private static final String SEPARATOR = "--\n"; + private static final String SEPARATOR = "\n--\n"; private String cgeoNote; private String providerNote; private boolean isOffline; @@ -15,23 +14,18 @@ public class PersonalNote { } public PersonalNote(final Geocache cache) { + this.isOffline = cache.isOffline(); final String personalNote = cache.getPersonalNote(); - if (!StringUtils.startsWith(personalNote, MERGED_PREFIX)) { - this.providerNote = personalNote; + if (StringUtils.isEmpty(personalNote)) { return; } final String[] notes = StringUtils.splitByWholeSeparator(personalNote, SEPARATOR); - if (notes.length > 0) { - notes[0] = StringUtils.removeStart(notes[0], MERGED_PREFIX); - notes[0] = StringUtils.removeEnd(notes[0], "\n"); - } if (notes.length > 1) { this.cgeoNote = notes[0]; this.providerNote = notes[1]; } else { this.providerNote = notes[0]; } - this.isOffline = cache.isOffline(); } public final PersonalNote mergeWith(final PersonalNote other) { @@ -95,7 +89,7 @@ public class PersonalNote { public final String toString() { final StringBuilder builder = new StringBuilder(); if (cgeoNote != null) { - builder.append(MERGED_PREFIX).append(cgeoNote).append("\n").append(SEPARATOR); + builder.append(cgeoNote).append(SEPARATOR); } builder.append(providerNote); return builder.toString(); diff --git a/main/src/cgeo/geocaching/SearchActivity.java b/main/src/cgeo/geocaching/SearchActivity.java index b1a58a4..6285cda 100644 --- a/main/src/cgeo/geocaching/SearchActivity.java +++ b/main/src/cgeo/geocaching/SearchActivity.java @@ -127,9 +127,7 @@ public class SearchActivity extends AbstractActivity { final IConnector connector = ConnectorFactory.getConnector(geocode); if (connector instanceof ISearchByGeocode) { - final Intent cachesIntent = new Intent(this, CacheDetailActivity.class); - cachesIntent.putExtra(Intents.EXTRA_GEOCODE, geocode.toUpperCase(Locale.US)); - startActivity(cachesIntent); + CacheDetailActivity.startActivity(this, geocode.toUpperCase(Locale.US)); return true; } diff --git a/main/src/cgeo/geocaching/StaticMapsActivity.java b/main/src/cgeo/geocaching/StaticMapsActivity.java index 4658262..2268df9 100644 --- a/main/src/cgeo/geocaching/StaticMapsActivity.java +++ b/main/src/cgeo/geocaching/StaticMapsActivity.java @@ -33,7 +33,7 @@ public class StaticMapsActivity extends AbstractActivity { private static final String EXTRAS_GEOCODE = "geocode"; @Extra(EXTRAS_DOWNLOAD) boolean download = false; - @Extra(EXTRAS_WAYPOINT) Integer waypoint_id = null; + @Extra(EXTRAS_WAYPOINT) Integer waypointId = null; @Extra(EXTRAS_GEOCODE) String geocode = null; private final List<Bitmap> maps = new ArrayList<Bitmap>(); @@ -43,7 +43,7 @@ public class StaticMapsActivity extends AbstractActivity { private final Handler loadMapsHandler = new Handler() { @Override - public void handleMessage(Message msg) { + public void handleMessage(final Message msg) { if (waitDialog != null) { waitDialog.dismiss(); } @@ -92,7 +92,7 @@ public class StaticMapsActivity extends AbstractActivity { } @Override - public void onCreate(Bundle savedInstanceState) { + public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState, R.layout.staticmaps_activity); if (geocode == null) { @@ -107,12 +107,6 @@ public class StaticMapsActivity extends AbstractActivity { (new LoadMapsThread()).start(); } - @Override - public void onResume() { - super.onResume(); - - } - private class LoadMapsThread extends Thread { @Override @@ -120,11 +114,11 @@ public class StaticMapsActivity extends AbstractActivity { try { // try downloading 2 times for (int trials = 0; trials < 2; trials++) { - for (int level = 1; level <= 5; level++) { + for (int level = 1; level <= StaticMapsProvider.MAPS_LEVEL_MAX; level++) { try { - if (waypoint_id != null) { + if (waypointId != null) { final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); - final Bitmap image = StaticMapsProvider.getWaypointMap(geocode, cache.getWaypointById(waypoint_id), level); + final Bitmap image = StaticMapsProvider.getWaypointMap(geocode, cache.getWaypointById(waypointId), level); if (image != null) { maps.add(image); } @@ -158,12 +152,12 @@ public class StaticMapsActivity extends AbstractActivity { private boolean downloadStaticMaps() { final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); - if (waypoint_id == null) { + if (waypointId == null) { showToast(res.getString(R.string.info_storing_static_maps)); StaticMapsProvider.storeCacheStaticMap(cache, true); return cache.hasStaticMap(); } - final Waypoint waypoint = cache.getWaypointById(waypoint_id); + final Waypoint waypoint = cache.getWaypointById(waypointId); if (waypoint != null) { showToast(res.getString(R.string.info_storing_static_maps)); // refresh always removes old waypoint files @@ -178,7 +172,7 @@ public class StaticMapsActivity extends AbstractActivity { public static void startActivity(final Context activity, final String geocode, final boolean download, final Waypoint waypoint) { StaticMapsActivity_.IntentBuilder_ builder = StaticMapsActivity_.intent(activity).geocode(geocode).download(download); if (waypoint != null) { - builder.waypoint_id(waypoint.getId()); + builder.waypointId(waypoint.getId()); } builder.start(); } diff --git a/main/src/cgeo/geocaching/StaticMapsProvider.java b/main/src/cgeo/geocaching/StaticMapsProvider.java index 041e703..2555b80 100644 --- a/main/src/cgeo/geocaching/StaticMapsProvider.java +++ b/main/src/cgeo/geocaching/StaticMapsProvider.java @@ -24,7 +24,8 @@ import android.view.WindowManager; import java.io.File; import java.util.concurrent.TimeUnit; -public class StaticMapsProvider { +public final class StaticMapsProvider { + static final int MAPS_LEVEL_MAX = 5; private static final String PREFIX_PREVIEW = "preview"; private static final String GOOGLE_STATICMAP_URL = "http://maps.google.com/maps/api/staticmap"; private static final String SATELLITE = "satellite"; @@ -32,16 +33,22 @@ public class StaticMapsProvider { private static final String WAYPOINT_PREFIX = "wp"; private static final String MAP_FILENAME_PREFIX = "map_"; private static final String MARKERS_URL = "http://status.cgeo.org/assets/markers/"; - /** We assume there is no real usable image with less than 1k */ + + /** We assume there is no real usable image with less than 1k. */ private static final int MIN_MAP_IMAGE_BYTES = 1000; + /** ThreadPool restricting this to 1 Thread. **/ - private static final BlockingThreadPool pool = new BlockingThreadPool(1, Thread.MIN_PRIORITY); + private static final BlockingThreadPool POOL = new BlockingThreadPool(1, Thread.MIN_PRIORITY); + + private StaticMapsProvider() { + // utility class + } - private static File getMapFile(final String geocode, String prefix, final boolean createDirs) { + private static File getMapFile(final String geocode, final String prefix, final boolean createDirs) { return LocalStorage.getStorageFile(geocode, MAP_FILENAME_PREFIX + prefix, false, createDirs); } - private static void downloadDifferentZooms(final String geocode, String markerUrl, String prefix, String latlonMap, int edge, final Parameters waypoints) { + private static void downloadDifferentZooms(final String geocode, final String markerUrl, final String prefix, final String latlonMap, final int edge, final Parameters waypoints) { downloadMap(geocode, 20, SATELLITE, markerUrl, prefix + '1', "", latlonMap, edge, edge, waypoints); downloadMap(geocode, 18, SATELLITE, markerUrl, prefix + '2', "", latlonMap, edge, edge, waypoints); downloadMap(geocode, 16, ROADMAP, markerUrl, prefix + '3', "", latlonMap, edge, edge, waypoints); @@ -49,7 +56,7 @@ public class StaticMapsProvider { downloadMap(geocode, 11, ROADMAP, markerUrl, prefix + '5', "", latlonMap, edge, edge, waypoints); } - private static void downloadMap(String geocode, int zoom, String mapType, String markerUrl, String prefix, String shadow, String latlonMap, int width, int height, final Parameters waypoints) { + private static void downloadMap(final String geocode, final int zoom, final String mapType, final String markerUrl, final String prefix, final String shadow, final String latlonMap, final int width, final int height, final Parameters waypoints) { final Parameters params = new Parameters( "center", latlonMap, "zoom", String.valueOf(zoom), @@ -80,7 +87,7 @@ public class StaticMapsProvider { } } - public static void downloadMaps(Geocache cache) { + public static void downloadMaps(final Geocache cache) { if ((!Settings.isStoreOfflineMaps() && !Settings.isStoreOfflineWpMaps()) || StringUtils.isBlank(cache.getGeocode())) { return; } @@ -110,19 +117,19 @@ public class StaticMapsProvider { * @param edge * The boundings */ - private static void refreshAllWpStaticMaps(Geocache cache, int edge) { + private static void refreshAllWpStaticMaps(final Geocache cache, final int edge) { LocalStorage.deleteFilesWithPrefix(cache.getGeocode(), MAP_FILENAME_PREFIX + WAYPOINT_PREFIX); for (Waypoint waypoint : cache.getWaypoints()) { storeWaypointStaticMap(cache.getGeocode(), edge, waypoint, false); } } - public static void storeWaypointStaticMap(Geocache cache, Waypoint waypoint, boolean waitForResult) { + public static void storeWaypointStaticMap(final Geocache cache, final Waypoint waypoint, final boolean waitForResult) { int edge = StaticMapsProvider.guessMaxDisplaySide(); storeWaypointStaticMap(cache.getGeocode(), edge, waypoint, waitForResult); } - private static void storeWaypointStaticMap(final String geocode, int edge, Waypoint waypoint, final boolean waitForResult) { + private static void storeWaypointStaticMap(final String geocode, final int edge, final Waypoint waypoint, final boolean waitForResult) { if (geocode == null) { Log.e("storeWaypointStaticMap - missing input parameter geocode"); return; @@ -142,7 +149,7 @@ public class StaticMapsProvider { } } - public static void storeCacheStaticMap(Geocache cache, final boolean waitForResult) { + public static void storeCacheStaticMap(final Geocache cache, final boolean waitForResult) { int edge = guessMaxDisplaySide(); storeCacheStaticMap(cache, edge, waitForResult); } @@ -179,7 +186,7 @@ public class StaticMapsProvider { } private static void downloadMaps(final String geocode, final String markerUrl, final String prefix, final String latlonMap, final int edge, - final Parameters waypoints, boolean waitForResult) { + final Parameters waypoints, final boolean waitForResult) { if (waitForResult) { downloadDifferentZooms(geocode, markerUrl, prefix, latlonMap, edge, waypoints); } @@ -191,7 +198,7 @@ public class StaticMapsProvider { } }; try { - pool.add(currentTask, 20, TimeUnit.SECONDS); + POOL.add(currentTask, 20, TimeUnit.SECONDS); } catch (InterruptedException e) { Log.e("StaticMapsProvider.downloadMaps error adding task", e); } @@ -215,13 +222,13 @@ public class StaticMapsProvider { return MARKERS_URL + "marker_waypoint_" + type + ".png"; } - public static void removeWpStaticMaps(Waypoint waypoint, final String geocode) { + public static void removeWpStaticMaps(final Waypoint waypoint, final String geocode) { if (waypoint == null) { return; } int waypointId = waypoint.getId(); int waypointMapHash = waypoint.getStaticMapsHashcode(); - for (int level = 1; level <= 5; level++) { + for (int level = 1; level <= MAPS_LEVEL_MAX; level++) { try { StaticMapsProvider.getMapFile(geocode, WAYPOINT_PREFIX + waypointId + "_" + waypointMapHash + '_' + level, false).delete(); } catch (Exception e) { @@ -244,7 +251,7 @@ public class StaticMapsProvider { if (StringUtils.isBlank(geocode)) { return false; } - for (int level = 1; level <= 5; level++) { + for (int level = 1; level <= MAPS_LEVEL_MAX; level++) { File mapFile = StaticMapsProvider.getMapFile(geocode, String.valueOf(level), false); if (mapFile.exists()) { return true; @@ -260,10 +267,10 @@ public class StaticMapsProvider { * @param waypoint * @return <code>true</code> if at least one map file exists; <code>false</code> otherwise */ - public static boolean hasStaticMapForWaypoint(String geocode, Waypoint waypoint) { + public static boolean hasStaticMapForWaypoint(final String geocode, final Waypoint waypoint) { int waypointId = waypoint.getId(); int waypointMapHash = waypoint.getStaticMapsHashcode(); - for (int level = 1; level <= 5; level++) { + for (int level = 1; level <= MAPS_LEVEL_MAX; level++) { File mapFile = StaticMapsProvider.getMapFile(geocode, WAYPOINT_PREFIX + waypointId + "_" + waypointMapHash + "_" + level, false); if (mapFile.exists()) { return true; @@ -279,10 +286,10 @@ public class StaticMapsProvider { * @param waypoint * @return <code>true</code> if all map files exist; <code>false</code> otherwise */ - public static boolean hasAllStaticMapsForWaypoint(String geocode, Waypoint waypoint) { + public static boolean hasAllStaticMapsForWaypoint(final String geocode, final Waypoint waypoint) { int waypointId = waypoint.getId(); int waypointMapHash = waypoint.getStaticMapsHashcode(); - for (int level = 1; level <= 5; level++) { + for (int level = 1; level <= MAPS_LEVEL_MAX; level++) { File mapFile = StaticMapsProvider.getMapFile(geocode, WAYPOINT_PREFIX + waypointId + "_" + waypointMapHash + "_" + level, false); boolean mapExists = mapFile.exists(); if (!mapExists) { @@ -296,13 +303,13 @@ public class StaticMapsProvider { return decodeFile(StaticMapsProvider.getMapFile(geocode, PREFIX_PREVIEW, false)); } - public static Bitmap getWaypointMap(final String geocode, Waypoint waypoint, int level) { + public static Bitmap getWaypointMap(final String geocode, final Waypoint waypoint, final int level) { int waypointId = waypoint.getId(); int waypointMapHash = waypoint.getStaticMapsHashcode(); return decodeFile(StaticMapsProvider.getMapFile(geocode, WAYPOINT_PREFIX + waypointId + "_" + waypointMapHash + "_" + level, false)); } - public static Bitmap getCacheMap(final String geocode, int level) { + public static Bitmap getCacheMap(final String geocode, final int level) { return decodeFile(StaticMapsProvider.getMapFile(geocode, String.valueOf(level), false)); } diff --git a/main/src/cgeo/geocaching/cgData.java b/main/src/cgeo/geocaching/cgData.java index ead698d..87710fb 100644 --- a/main/src/cgeo/geocaching/cgData.java +++ b/main/src/cgeo/geocaching/cgData.java @@ -1102,7 +1102,6 @@ public class cgData { //try to update record else insert fresh.. database.beginTransaction(); - boolean result = false; try { saveAttributesWithoutTransaction(cache); saveOriginalWaypointsWithoutTransaction(cache); @@ -1118,14 +1117,14 @@ public class cgData { database.insert(dbTableCaches, null, values); } database.setTransactionSuccessful(); - result = true; + return true; } catch (Exception e) { Log.e("SaveCache", e); } finally { database.endTransaction(); } - return result; + return false; } private static void saveAttributesWithoutTransaction(final Geocache cache) { @@ -1172,17 +1171,16 @@ public class cgData { init(); database.beginTransaction(); - boolean result = false; try { saveOriginalWaypointsWithoutTransaction(cache); database.setTransactionSuccessful(); - result = true; + return true; } catch (Exception e) { Log.e("saveWaypoints", e); } finally { database.endTransaction(); } - return result; + return false; } private static void saveOriginalWaypointsWithoutTransaction(final Geocache cache) { @@ -1376,7 +1374,7 @@ public class cgData { } } - public static boolean saveTrackable(final Trackable trackable) { + public static void saveTrackable(final Trackable trackable) { init(); database.beginTransaction(); @@ -1386,8 +1384,6 @@ public class cgData { } finally { database.endTransaction(); } - - return true; } private static void saveInventoryWithoutTransaction(final String geocode, final List<Trackable> trackables) { @@ -1842,18 +1838,17 @@ public class cgData { init(); database.beginTransaction(); - boolean success = true; try { database.delete(dbTableSearchDestionationHistory, null, null); database.setTransactionSuccessful(); + return true; } catch (Exception e) { - success = false; Log.e("Unable to clear searched destinations", e); } finally { database.endTransaction(); } - return success; + return false; } public static List<LogEntry> loadLogs(String geocode) { @@ -2693,18 +2688,17 @@ public class cgData { init(); database.beginTransaction(); - boolean result = false; try { database.delete(dbTableSearchDestionationHistory, "_id = " + destination.getId(), null); database.setTransactionSuccessful(); - result = true; + return true; } catch (Exception e) { Log.e("Unable to remove searched destination", e); } finally { database.endTransaction(); } - return result; + return false; } /** @@ -3007,14 +3001,14 @@ public class cgData { if (connector.canHandle(geocode)) { Geocache geocache = cacheCache.getCacheFromCache(geocode); if (geocache.getZoomLevel() <= maxZoom) { - boolean bFound = false; + boolean found = false; for (Tile tile : tiles) { if (tile.containsPoint(geocache)) { - bFound = true; + found = true; break; } } - if (bFound) { + if (found) { missingFromSearch.add(geocode); } } diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/cgeocaches.java index e388078..5d7841d 100644 --- a/main/src/cgeo/geocaching/cgeocaches.java +++ b/main/src/cgeo/geocaching/cgeocaches.java @@ -907,10 +907,7 @@ public class cgeocaches extends AbstractListActivity implements FilteredActivity NavigationAppFactory.showNavigationMenu(this, cache, null, null); break; case MENU_CACHE_DETAILS: - final Intent cachesIntent = new Intent(this, CacheDetailActivity.class); - cachesIntent.putExtra(Intents.EXTRA_GEOCODE, cache.getGeocode()); - cachesIntent.putExtra(Intents.EXTRA_NAME, cache.getName()); - startActivity(cachesIntent); + CacheDetailActivity.startActivity(this, cache.getGeocode(), cache.getName()); break; case MENU_DROP_CACHE: cache.drop(new Handler() { diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java index 44d6e8f..e6fff79 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java @@ -309,7 +309,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, // invoke settings activity to insert login details if (status == StatusCode.NO_LOGIN_INFO_STORED && fromActivity != null) { - SettingsActivity.startWithServicesPage(fromActivity); + SettingsActivity.jumpToServicesPage(fromActivity); } } return status == StatusCode.NO_ERROR; diff --git a/main/src/cgeo/geocaching/connector/gc/GCConstants.java b/main/src/cgeo/geocaching/connector/gc/GCConstants.java index d908b47..c2aeffd 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConstants.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConstants.java @@ -127,6 +127,7 @@ public final class GCConstants { public final static Pattern PATTERN_SEARCH_TOTALCOUNT = Pattern.compile("<span>Total Records\\D*(\\d+)<"); public final static Pattern PATTERN_SEARCH_RECAPTCHA = Pattern.compile("<script[^>]*src=\"[^\"]*/recaptcha/api/challenge\\?k=([^\"]+)\"[^>]*>"); public final static Pattern PATTERN_SEARCH_RECAPTCHACHALLENGE = Pattern.compile("challenge : '([^']+)'"); + public final static Pattern PATTERN_SEARCH_HIDDEN_DATE = Pattern.compile("<span class=\"small\">([\\d-/]{6,10})</span>"); /** * Patterns for waypoints diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java index 9ecb51b..e32f72d 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCParser.java +++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java @@ -5,7 +5,6 @@ import cgeo.geocaching.Image; import cgeo.geocaching.LogEntry; import cgeo.geocaching.R; import cgeo.geocaching.SearchResult; -import cgeo.geocaching.settings.Settings; import cgeo.geocaching.Trackable; import cgeo.geocaching.TrackableLog; import cgeo.geocaching.Waypoint; @@ -27,6 +26,7 @@ import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.loaders.RecaptchaReceiver; import cgeo.geocaching.network.Network; import cgeo.geocaching.network.Parameters; +import cgeo.geocaching.settings.Settings; import cgeo.geocaching.ui.DirectionImage; import cgeo.geocaching.utils.CancellableHandler; import cgeo.geocaching.utils.Log; @@ -53,6 +53,7 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; +import java.util.Date; import java.util.EnumSet; import java.util.GregorianCalendar; import java.util.List; @@ -199,6 +200,19 @@ public abstract class GCParser { final String container = TextUtils.getMatch(row, GCConstants.PATTERN_SEARCH_CONTAINER, false, 1, null, false); cache.setSize(CacheSize.getById(container)); + // date hidden, makes sorting event caches easier + final String dateHidden = TextUtils.getMatch(row, GCConstants.PATTERN_SEARCH_HIDDEN_DATE, false, 1, null, false); + if (StringUtils.isNotBlank(dateHidden)) { + try { + Date date = Login.parseGcCustomDate(dateHidden); + if (date != null) { + cache.setHidden(date); + } + } catch (ParseException e) { + Log.e("Error parsing event date from search"); + } + } + // cache inventory final MatcherWrapper matcherTbs = new MatcherWrapper(GCConstants.PATTERN_SEARCH_TRACKABLES, row); String inventoryPre = null; diff --git a/main/src/cgeo/geocaching/connector/gc/Tile.java b/main/src/cgeo/geocaching/connector/gc/Tile.java index ec90036..3177f2c 100644 --- a/main/src/cgeo/geocaching/connector/gc/Tile.java +++ b/main/src/cgeo/geocaching/connector/gc/Tile.java @@ -324,6 +324,10 @@ public class Tile { public static void add(final Tile tile) { tileCache.put(tile.hashCode(), tile); } + + public static void clear() { + tileCache.clear(); + } } } diff --git a/main/src/cgeo/geocaching/files/LocalStorage.java b/main/src/cgeo/geocaching/files/LocalStorage.java index 0f3e0e1..ec09433 100644 --- a/main/src/cgeo/geocaching/files/LocalStorage.java +++ b/main/src/cgeo/geocaching/files/LocalStorage.java @@ -31,6 +31,9 @@ import java.io.OutputStream; */ public class LocalStorage { + public static final String HEADER_LAST_MODIFIED = "last-modified"; + public static final String HEADER_ETAG = "etag"; + /** Name of the local private directory used to hold cached information */ public final static String cache = ".cgeo"; @@ -177,8 +180,8 @@ public class LocalStorage { try { final boolean saved = saveToFile(response.getEntity().getContent(), targetFile); - saveHeader("etag", saved ? response : null, targetFile); - saveHeader("last-modified", saved ? response : null, targetFile); + saveHeader(HEADER_ETAG, saved ? response : null, targetFile); + saveHeader(HEADER_LAST_MODIFIED, saved ? response : null, targetFile); return saved; } catch (IOException e) { Log.e("LocalStorage.saveEntityToFile", e); diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java index 007f707..f892622 100644 --- a/main/src/cgeo/geocaching/maps/CGeoMap.java +++ b/main/src/cgeo/geocaching/maps/CGeoMap.java @@ -13,6 +13,7 @@ import cgeo.geocaching.cgeocaches; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.gc.Login; +import cgeo.geocaching.connector.gc.Tile; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.enumerations.LiveMapStrategy.Strategy; import cgeo.geocaching.enumerations.LoadFlags; @@ -182,7 +183,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto /** Live mode enabled for map. **/ private boolean isLiveEnabled; // other things - private boolean liveChanged = false; // previous state for loadTimer + private boolean markersInvalidated = false; // previous state for loadTimer private boolean centered = false; // if map is already centered private boolean alreadyCentered = false; // -""- for setting my location private static Set<String> dirtyCaches = null; @@ -571,6 +572,13 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto item.setTitle(res.getString(R.string.map_live_enable)); } + item = menu.findItem(R.id.menu_mycaches_mode); // own & found caches + if (Settings.isExcludeMyCaches()) { + item.setTitle(res.getString(R.string.map_mycaches_show)); + } else { + item.setTitle(res.getString(R.string.map_mycaches_hide)); + } + final Set<String> geocodesInViewport = getGeocodesForCachesInViewport(); menu.findItem(R.id.menu_store_caches).setEnabled(!isLoading() && CollectionUtils.isNotEmpty(geocodesInViewport) && new SearchResult(geocodesInViewport).hasUnsavedCaches()); @@ -622,7 +630,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto if (mapMode == MapMode.LIVE) { Settings.setLiveMap(isLiveEnabled); } - liveChanged = true; + markersInvalidated = true; lastSearchResult = null; searchIntent = null; ActivityMixin.invalidateOptionsMenu(activity); @@ -670,6 +678,14 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto mapView.repaintRequired(overlayCaches); ActivityMixin.invalidateOptionsMenu(activity); return true; + case R.id.menu_mycaches_mode: + Settings.setExcludeMine(!Settings.isExcludeMyCaches()); + markersInvalidated = true; + ActivityMixin.invalidateOptionsMenu(activity); + if (!Settings.isExcludeMyCaches()) { + Tile.Cache.clear(); + } + return true; case R.id.menu_theme_mode: selectMapTheme(); return true; @@ -1018,7 +1034,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto // check if map moved or zoomed //TODO Portree Use Rectangle inside with bigger search window. That will stop reloading on every move - final boolean moved = liveChanged || (isLiveEnabled && !downloaded) || (viewport == null) || zoomNow != zoom || + final boolean moved = markersInvalidated || (isLiveEnabled && !downloaded) || (viewport == null) || zoomNow != zoom || (mapMoved(viewport, viewportNow) && (cachesCnt <= 0 || CollectionUtils.isEmpty(caches) || !viewport.includes(viewportNow))); // update title on any change @@ -1029,7 +1045,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto // save new values if (moved) { - liveChanged = false; + markersInvalidated = false; long currentTime = System.currentTimeMillis(); diff --git a/main/src/cgeo/geocaching/network/Network.java b/main/src/cgeo/geocaching/network/Network.java index 14a9513..2d2ab0b 100644 --- a/main/src/cgeo/geocaching/network/Network.java +++ b/main/src/cgeo/geocaching/network/Network.java @@ -1,9 +1,9 @@ package cgeo.geocaching.network; -import cgeo.geocaching.settings.Settings; import cgeo.geocaching.files.LocalStorage; -import cgeo.geocaching.utils.TextUtils; +import cgeo.geocaching.settings.Settings; import cgeo.geocaching.utils.Log; +import cgeo.geocaching.utils.TextUtils; import ch.boye.httpclientandroidlib.Header; import ch.boye.httpclientandroidlib.HeaderElement; @@ -317,12 +317,14 @@ public abstract class Network { return null; } - final String etag = LocalStorage.getSavedHeader(cacheFile, "etag"); + final String etag = LocalStorage.getSavedHeader(cacheFile, LocalStorage.HEADER_ETAG); if (etag != null) { + // The ETag is a more robust check than a timestamp. If we have an ETag, it is enough + // to identify the right version of the resource. return new Parameters("If-None-Match", etag); } - final String lastModified = LocalStorage.getSavedHeader(cacheFile, "last-modified"); + final String lastModified = LocalStorage.getSavedHeader(cacheFile, LocalStorage.HEADER_LAST_MODIFIED); if (lastModified != null) { return new Parameters("If-Modified-Since", lastModified); } @@ -476,10 +478,10 @@ public abstract class Network { /** * Checks if the device has network connection. - * + * * @param context * context of the application, cannot be null - * + * * @return <code>true</code> if the device is connected to the network. */ public static boolean isNetworkConnected(Context context) { diff --git a/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java b/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java index 751443e..8dc8b03 100644 --- a/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java +++ b/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java @@ -82,6 +82,7 @@ public abstract class OAuthAuthorizationActivity extends AbstractActivity { pinEntryButton.setVisibility(View.GONE); + setResult(RESULT_OK); finish(); } else { showToast(getErrAuthProcess()); diff --git a/main/src/cgeo/geocaching/settings/AuthorizeOcDePreference.java b/main/src/cgeo/geocaching/settings/AuthorizeOcDePreference.java index 4ef3086..28807eb 100644 --- a/main/src/cgeo/geocaching/settings/AuthorizeOcDePreference.java +++ b/main/src/cgeo/geocaching/settings/AuthorizeOcDePreference.java @@ -25,16 +25,21 @@ public class AuthorizeOcDePreference extends Preference { @Override protected View onCreateView(ViewGroup parent) { + final SettingsActivity activity = (SettingsActivity) getContext(); + setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { Intent authIntent = new Intent(preference.getContext(), OCAuthorizationActivity.class); - preference.getContext().startActivity(authIntent); + activity.startActivityForResult(authIntent, + SettingsActivity.OAUTH_OCDE_REQUEST); return false; // no shared preference has to be changed } }); + + activity.setOCDEAuthTitle(); return super.onCreateView(parent); } } diff --git a/main/src/cgeo/geocaching/settings/AuthorizeTwitterPreference.java b/main/src/cgeo/geocaching/settings/AuthorizeTwitterPreference.java index 1a6d908..ed3e159 100644 --- a/main/src/cgeo/geocaching/settings/AuthorizeTwitterPreference.java +++ b/main/src/cgeo/geocaching/settings/AuthorizeTwitterPreference.java @@ -25,16 +25,21 @@ public class AuthorizeTwitterPreference extends Preference { @Override protected View onCreateView(ViewGroup parent) { + final SettingsActivity activity = (SettingsActivity) getContext(); + setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { Intent authIntent = new Intent(preference.getContext(), TwitterAuthorizationActivity.class); - preference.getContext().startActivity(authIntent); + activity.startActivityForResult(authIntent, + SettingsActivity.OAUTH_TWITTER_REQUEST); return false; // no shared preference has to be changed } }); + + activity.setTwitterAuthTitle(); return super.onCreateView(parent); } } diff --git a/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java b/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java index 877a6c7..3ecd1b2 100644 --- a/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java +++ b/main/src/cgeo/geocaching/settings/CheckGcCredentialsPreference.java @@ -1,6 +1,5 @@ package cgeo.geocaching.settings; -import cgeo.geocaching.settings.Settings; import cgeo.geocaching.R; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.connector.gc.Login; @@ -12,7 +11,6 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; import android.annotation.SuppressLint; -import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.content.res.Resources; @@ -48,7 +46,7 @@ public class CheckGcCredentialsPreference extends Preference { private class GcLoginCheck implements OnPreferenceClickListener { private Resources res; - private Activity activity; + private SettingsActivity activity; private ProgressDialog loginDialog; @SuppressLint("HandlerLeak") @@ -76,17 +74,19 @@ public class CheckGcCredentialsPreference extends Preference { } catch (Exception e) { ActivityMixin.showToast(activity, R.string.err_login_failed); Log.e("SettingsActivity.logInHandler", e); - } - - if (loginDialog != null && loginDialog.isShowing()) { - loginDialog.dismiss(); + } finally { + if (loginDialog != null && loginDialog.isShowing()) { + loginDialog.dismiss(); + } + // enable/disable basic member preferences + activity.initBasicMemberPreferences(); } } }; @Override public boolean onPreferenceClick(Preference preference) { - this.activity = (Activity) CheckGcCredentialsPreference.this.getContext(); + this.activity = (SettingsActivity) CheckGcCredentialsPreference.this.getContext(); this.res = activity.getResources(); ImmutablePair<String, String> credentials = Settings.getGcLogin(); diff --git a/main/src/cgeo/geocaching/settings/Settings.java b/main/src/cgeo/geocaching/settings/Settings.java index 08f30af..aabb13a 100644 --- a/main/src/cgeo/geocaching/settings/Settings.java +++ b/main/src/cgeo/geocaching/settings/Settings.java @@ -316,6 +316,11 @@ public final class Settings { return getString(R.string.pref_ocde_tokensecret, ""); } + public static boolean hasOCDEAuthorization() { + return StringUtils.isNotBlank(getOCDETokenPublic()) + && StringUtils.isNotBlank(getOCDETokenSecret()); + } + public static void setOCDETokens(final String tokenPublic, final String tokenSecret, boolean enableOcDe) { putString(R.string.pref_ocde_tokenpublic, tokenPublic); @@ -735,6 +740,11 @@ public final class Settings { } + public static boolean hasTwitterAuthorization() { + return StringUtils.isNotBlank(getTokenPublic()) + && StringUtils.isNotBlank(getTokenSecret()); + } + public static void setTwitterTokens(final String tokenPublic, final String tokenSecret, boolean enableTwitter) { putString(R.string.pref_twitter_token_public, tokenPublic); @@ -753,7 +763,7 @@ public final class Settings { } public static ImmutablePair<String, String> getTempToken() { - String tokenPublic = getString(R.string.pref_twitter_token_public, null); + String tokenPublic = getString(R.string.pref_temp_twitter_token_public, null); String tokenSecret = getString(R.string.pref_temp_twitter_token_secret, null); return new ImmutablePair<String, String>(tokenPublic, tokenSecret); } @@ -934,7 +944,7 @@ public final class Settings { putBoolean(R.string.pref_excludedisabled, exclude); } - static void setExcludeMine(final boolean exclude) { + public static void setExcludeMine(final boolean exclude) { putBoolean(R.string.pref_excludemine, exclude); } diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java index 299290a..4b1c92b 100644 --- a/main/src/cgeo/geocaching/settings/SettingsActivity.java +++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java @@ -38,7 +38,9 @@ import android.view.ContextMenu.ContextMenuInfo; import android.view.MenuItem; import android.view.MenuItem.OnMenuItemClickListener; import android.view.View; +import android.widget.BaseAdapter; import android.widget.EditText; +import android.widget.ListAdapter; import java.io.File; import java.util.ArrayList; @@ -62,6 +64,8 @@ public class SettingsActivity extends PreferenceActivity { private static final int INTENT_GOTO_SERVICES = 1; private static final int DIR_CHOOSER_MAPS_DIRECTORY_REQUEST = 4; + static final int OAUTH_OCDE_REQUEST = 5; + static final int OAUTH_TWITTER_REQUEST = 6; private EditText signatureText; @@ -99,8 +103,8 @@ public class SettingsActivity extends PreferenceActivity { int gotoPage = intent.getIntExtra(INTENT_GOTO, 0); if (gotoPage == INTENT_GOTO_SERVICES) { // start with services screen - PreferenceScreen main = (PreferenceScreen) SettingsActivity.findPreference(this, getKey(R.string.pref_fakekey_main_screen)); - int index = SettingsActivity.findPreference(this, getKey(R.string.pref_fakekey_services_screen)).getOrder(); + PreferenceScreen main = (PreferenceScreen) getPreference(R.string.pref_fakekey_main_screen); + int index = getPreference(R.string.pref_fakekey_services_screen).getOrder(); main.onItemClick(null, null, index, 0); } } @@ -128,7 +132,7 @@ public class SettingsActivity extends PreferenceActivity { R.string.pref_mapDirectory, R.string.pref_defaultNavigationTool, R.string.pref_defaultNavigationTool2, R.string.pref_webDeviceName, R.string.pref_fakekey_preference_backup_info, }) { - bindSummaryToStringValue(this, getKey(k)); + bindSummaryToStringValue(k); } } @@ -136,6 +140,10 @@ public class SettingsActivity extends PreferenceActivity { return cgeoapplication.getInstance().getString(prefKeyId); } + private Preference getPreference(final int keyId) { + return SettingsActivity.findPreference(this, getKey(keyId)); + } + // workaround, because OnContextItemSelected nor onMenuItemSelected is never called OnMenuItemClickListener TEMPLATE_CLICK = new OnMenuItemClickListener() { @Override @@ -149,7 +157,7 @@ public class SettingsActivity extends PreferenceActivity { } }; - // workaround, because OnContextItemSelected nor onMenuItemSelected is never called + // workaround, because OnContextItemSelected and onMenuItemSelected are never called void setSignatureTextView(final EditText view) { this.signatureText = view; } @@ -178,7 +186,7 @@ public class SettingsActivity extends PreferenceActivity { * Fill the choice list for map sources. */ private void initMapSourcePreference() { - ListPreference pref = (ListPreference) SettingsActivity.findPreference(this, getKey(R.string.pref_mapsource)); + ListPreference pref = (ListPreference) getPreference(R.string.pref_mapsource); List<MapSource> mapSources = MapProviderFactory.getMapSources(); CharSequence[] entries = new CharSequence[mapSources.size()]; @@ -205,10 +213,10 @@ public class SettingsActivity extends PreferenceActivity { values[i] = String.valueOf(apps.get(i).id); } - ListPreference pref = (ListPreference) SettingsActivity.findPreference(this, getKey(R.string.pref_defaultNavigationTool)); + ListPreference pref = (ListPreference) getPreference(R.string.pref_defaultNavigationTool); pref.setEntries(entries); pref.setEntryValues(values); - pref = (ListPreference) SettingsActivity.findPreference(this, getKey(R.string.pref_defaultNavigationTool2)); + pref = (ListPreference) getPreference(R.string.pref_defaultNavigationTool2); pref.setEntries(entries); pref.setEntryValues(values); } @@ -216,7 +224,7 @@ public class SettingsActivity extends PreferenceActivity { private void initDirChoosers() { for (final DirChooserType dct : DirChooserType.values()) { - SettingsActivity.findPreference(this, getKey(dct.keyId)).setOnPreferenceClickListener( + getPreference(dct.keyId).setOnPreferenceClickListener( new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(final Preference preference) { @@ -226,7 +234,7 @@ public class SettingsActivity extends PreferenceActivity { }); } - SettingsActivity.findPreference(this, getKey(R.string.pref_mapDirectory)).setOnPreferenceClickListener( + getPreference(R.string.pref_mapDirectory).setOnPreferenceClickListener( new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(final Preference preference) { @@ -271,7 +279,7 @@ public class SettingsActivity extends PreferenceActivity { private void setChosenDirectory(final DirChooserType dct, final Intent data) { final String directory = new File(data.getData().getPath()).getAbsolutePath(); if (StringUtils.isNotBlank(directory)) { - Preference p = SettingsActivity.findPreference(this, getKey(dct.keyId)); + Preference p = getPreference(dct.keyId); if (p == null) { return; } @@ -281,7 +289,7 @@ public class SettingsActivity extends PreferenceActivity { } public void initBackupButtons() { - Preference backup = SettingsActivity.findPreference(this, getKey(R.string.pref_fakekey_preference_backup)); + Preference backup = getPreference(R.string.pref_fakekey_preference_backup); backup.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(final Preference preference) { @@ -312,7 +320,7 @@ public class SettingsActivity extends PreferenceActivity { ? context.getString(R.string.init_backup_success) + "\n" + backupFileName : context.getString(R.string.init_backup_failed)); - VALUE_CHANGE_LISTENER.onPreferenceChange(SettingsActivity.findPreference(SettingsActivity.this, getKey(R.string.pref_fakekey_preference_backup_info)), ""); + VALUE_CHANGE_LISTENER.onPreferenceChange(SettingsActivity.this.getPreference(R.string.pref_fakekey_preference_backup_info), ""); } }); } @@ -321,7 +329,7 @@ public class SettingsActivity extends PreferenceActivity { } }); - Preference restore = SettingsActivity.findPreference(this, getKey(R.string.pref_fakekey_preference_restore)); + Preference restore = getPreference(R.string.pref_fakekey_preference_restore); restore.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(final Preference preference) { @@ -333,7 +341,7 @@ public class SettingsActivity extends PreferenceActivity { } private void initDbLocationPreference() { - Preference p = SettingsActivity.findPreference(this, getKey(R.string.pref_dbonsdcard)); + Preference p = getPreference(R.string.pref_dbonsdcard); p.setPersistent(false); p.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override @@ -347,7 +355,7 @@ public class SettingsActivity extends PreferenceActivity { } private void initDebugPreference() { - Preference p = SettingsActivity.findPreference(this, getKey(R.string.pref_debug)); + Preference p = getPreference(R.string.pref_debug); p.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(final Preference preference, final Object newValue) { @@ -357,18 +365,47 @@ public class SettingsActivity extends PreferenceActivity { }); } - private void initBasicMemberPreferences() { - SettingsActivity.findPreference(this, getKey(R.string.pref_loaddirectionimg)).setEnabled( - !Settings.isPremiumMember()); - SettingsActivity.findPreference(this, getKey(R.string.pref_showcaptcha)).setEnabled( - !Settings.isPremiumMember()); + void initBasicMemberPreferences() { + getPreference(R.string.pref_fakekey_basicmembers_screen) + .setEnabled(!Settings.isPremiumMember()); + getPreference(R.string.pref_loaddirectionimg) + .setEnabled(!Settings.isPremiumMember()); + getPreference(R.string.pref_showcaptcha) + .setEnabled(!Settings.isPremiumMember()); + + redrawScreen(R.string.pref_fakekey_services_screen); + } + + void redrawScreen(int key) { + PreferenceScreen screen = (PreferenceScreen) getPreference(key); + if (screen == null) { + return; + } + ListAdapter adapter = screen.getRootAdapter(); + if (adapter instanceof BaseAdapter) { + ((BaseAdapter) adapter).notifyDataSetChanged(); + } } private static void initSend2CgeoPreferences() { Settings.putString(R.string.pref_webDeviceName, Settings.getWebDeviceName()); } - public static void startWithServicesPage(final Context fromActivity) { + void setOCDEAuthTitle() { + getPreference(R.string.pref_fakekey_ocde_authorization) + .setTitle(getString(Settings.hasOCDEAuthorization() + ? R.string.init_reregister_oc_de + : R.string.init_register_oc_de)); + } + + void setTwitterAuthTitle() { + getPreference(R.string.pref_fakekey_twitter_authorization) + .setTitle(getString(Settings.hasTwitterAuthorization() + ? R.string.init_twitter_reauthorize + : R.string.init_twitter_authorize)); + } + + public static void jumpToServicesPage(final Context fromActivity) { final Intent intent = new Intent(fromActivity, SettingsActivity.class); intent.putExtra(INTENT_GOTO, INTENT_GOTO_SERVICES); fromActivity.startActivity(intent); @@ -398,9 +435,17 @@ public class SettingsActivity extends PreferenceActivity { } } initMapSourcePreference(); - SettingsActivity.findPreference(this, getKey(R.string.pref_mapDirectory)).setSummary( + getPreference(R.string.pref_mapDirectory).setSummary( Settings.getMapFileDirectory()); break; + case OAUTH_OCDE_REQUEST: + setOCDEAuthTitle(); + redrawScreen(R.string.pref_fakekey_services_screen); + break; + case OAUTH_TWITTER_REQUEST: + setTwitterAuthTitle(); + redrawScreen(R.string.pref_fakekey_services_screen); + break; default: throw new IllegalArgumentException(); } @@ -478,10 +523,9 @@ public class SettingsActivity extends PreferenceActivity { * * @param key */ - private static void bindSummaryToStringValue(final PreferenceActivity preferenceActivity, final String key) { - - Preference pref = findPreference(preferenceActivity, key); + private void bindSummaryToStringValue(final int key) { + Preference pref = getPreference(key); if (pref == null) { return; } diff --git a/main/src/cgeo/geocaching/utils/SimpleCancellableHandler.java b/main/src/cgeo/geocaching/utils/SimpleCancellableHandler.java new file mode 100644 index 0000000..94246e0 --- /dev/null +++ b/main/src/cgeo/geocaching/utils/SimpleCancellableHandler.java @@ -0,0 +1,86 @@ +package cgeo.geocaching.utils; + +import cgeo.geocaching.CacheDetailActivity; +import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.activity.Progress; + +import android.content.res.Resources; +import android.os.Message; + +import java.lang.ref.WeakReference; + +public class SimpleCancellableHandler extends CancellableHandler { + public static final String SUCCESS_TEXT = "success_message"; + protected final WeakReference<AbstractActivity> activityRef; + protected final WeakReference<Progress> progressDialogRef; + + public SimpleCancellableHandler(final AbstractActivity activity, final Progress progress) { + this.activityRef = new WeakReference<AbstractActivity>(activity); + this.progressDialogRef = new WeakReference<Progress>(progress); + } + + @Override + public void handleRegularMessage(final Message msg) { + AbstractActivity activity = activityRef.get(); + if (activity != null && msg.getData() != null && msg.getData().getString(SUCCESS_TEXT) != null) { + activity.showToast(msg.getData().getString(SUCCESS_TEXT)); + } + Progress progressDialog = progressDialogRef.get(); + if (progressDialog != null) { + progressDialog.dismiss(); + } + return; + } + + @Override + public void handleCancel(final Object extra) { + AbstractActivity activity = activityRef.get(); + if (activity != null) { + activity.showToast((String) extra); + } + Progress progressDialog = progressDialogRef.get(); + if (progressDialog != null) { + progressDialog.dismiss(); + } + } + + public final void showToast(int resId) { + AbstractActivity activity = activityRef.get(); + if (activity != null) { + Resources res = activity.getResources(); + activity.showToast(res.getText(resId).toString()); + } + } + + public final void dismissProgress() { + 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(); + } + + } + + protected void updateStatusMsg(final int resId, final String msg) { + CacheDetailActivity activity = ((CacheDetailActivity) activityRef.get()); + if (activity != null) { + setProgressMessage(activity.getResources().getString(resId) + + "\n\n" + + msg); + } + } + +} diff --git a/main/src/cgeo/geocaching/utils/SimpleHandler.java b/main/src/cgeo/geocaching/utils/SimpleHandler.java new file mode 100644 index 0000000..554ded6 --- /dev/null +++ b/main/src/cgeo/geocaching/utils/SimpleHandler.java @@ -0,0 +1,65 @@ +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; + +import java.lang.ref.WeakReference; + +public abstract class SimpleHandler extends Handler { + public static final String SUCCESS_TEXT = "success_message"; + protected final WeakReference<AbstractActivity> activityRef; + 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); + } + + @Override + public void handleMessage(final Message msg) { + AbstractActivity activity = activityRef.get(); + if (activity != null && msg.getData() != null && msg.getData().getString(SUCCESS_TEXT) != null) { + activity.showToast(msg.getData().getString(SUCCESS_TEXT)); + } + Progress progressDialog = progressDialogRef.get(); + if (progressDialog != null) { + progressDialog.dismiss(); + } + 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(); + 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/templates/ocpl_okapi.xml b/main/templates/ocpl_okapi.xml new file mode 100644 index 0000000..6903ce7 --- /dev/null +++ b/main/templates/ocpl_okapi.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<resources> + <string name="oc_pl_okapi_consumer_key" translatable="false">@ocpl.okapi.consumer.key@</string> + <string name="oc_pl_okapi_consumer_secret" translatable="false">@ocpl.okapi.consumer.secret@</string> +</resources> diff --git a/main/templates/private.properties b/main/templates/private.properties index 731ff50..0c40fda 100644 --- a/main/templates/private.properties +++ b/main/templates/private.properties @@ -23,3 +23,10 @@ maps.api.key.market= ocde.okapi.consumer.key= ocde.okapi.consumer.secret= + +# These keys allow c:geo to be registered at openaching.pl and +# to search and log caches in your name +# You can request your own at http://www.opencaching.pl/okapi/signup.html + +ocpl.okapi.consumer.key= +ocpl.okapi.consumer.secret= diff --git a/tests/src/cgeo/geocaching/PersonalNoteTest.java b/tests/src/cgeo/geocaching/PersonalNoteTest.java index fd185ed..c8aa8ba 100644 --- a/tests/src/cgeo/geocaching/PersonalNoteTest.java +++ b/tests/src/cgeo/geocaching/PersonalNoteTest.java @@ -5,7 +5,7 @@ import junit.framework.TestCase; public class PersonalNoteTest extends TestCase { public static void testParse() { - final String testString = "merged:\nSimple cgeo note\n--\nSimple provider note"; + final String testString = "Simple cgeo note\n--\nSimple provider note"; Geocache cache = new Geocache(); cache.setPersonalNote(testString); PersonalNote parsedNote = new PersonalNote(cache); @@ -24,7 +24,7 @@ public class PersonalNoteTest extends TestCase { } public static void testParseCgeoOnly() { - final String testString = "merged:\nSimple cgeo note"; + final String testString = "Simple cgeo note"; Geocache cache = new Geocache(); cache.setPersonalNote(testString); PersonalNote parsedNote = new PersonalNote(cache); @@ -34,30 +34,30 @@ public class PersonalNoteTest extends TestCase { public static void testSimpleMerge() { Geocache cache1 = new Geocache(); // not stored - cache1.setPersonalNote("merged:\nSimple cgeo note\n--\nSimple provider note"); + cache1.setPersonalNote("Simple cgeo note\n--\nSimple provider note"); PersonalNote myNote = new PersonalNote(cache1); Geocache cache2 = new Geocache(); cache2.setListId(StoredList.STANDARD_LIST_ID); // stored - cache2.setPersonalNote("merged:\ncgeo note\n--\nProvider note"); + cache2.setPersonalNote("cgeo note\n--\nProvider note"); PersonalNote otherNote = new PersonalNote(cache2); PersonalNote result = myNote.mergeWith(otherNote); - assertEquals("merged:\ncgeo note\n--\nSimple provider note", result.toString()); + assertEquals("cgeo note\n--\nSimple provider note", result.toString()); assertPersonalNote(result, "cgeo note", "Simple provider note"); } public static void testMixedMerge() { Geocache cache1 = new Geocache(); // not stored - cache1.setPersonalNote("merged:\nSimple cgeo note\n--\nSimple provider note"); + cache1.setPersonalNote("Simple cgeo note\n--\nSimple provider note"); PersonalNote myNote = new PersonalNote(cache1); Geocache cache2 = new Geocache(); cache2.setListId(StoredList.STANDARD_LIST_ID); // stored cache2.setPersonalNote("Provider note"); PersonalNote otherNote = new PersonalNote(cache2); PersonalNote result = myNote.mergeWith(otherNote); - assertEquals("merged:\nSimple cgeo note\n--\nSimple provider note", result.toString()); + assertEquals("Simple cgeo note\n--\nSimple provider note", result.toString()); assertPersonalNote(result, "Simple cgeo note", "Simple provider note"); result = otherNote.mergeWith(myNote); - assertEquals("merged:\nSimple cgeo note\n--\nProvider note", result.toString()); + assertEquals("Simple cgeo note\n--\nProvider note", result.toString()); assertPersonalNote(result, "Simple cgeo note", "Provider note"); } |
