diff options
| -rw-r--r-- | cgeo-calendar/AndroidManifest.xml | 5 | ||||
| -rw-r--r-- | cgeo-calendar/lint.xml | 4 | ||||
| -rw-r--r-- | cgeo-calendar/src/cgeo/calendar/AbstractAddEntry.java | 1 | ||||
| -rw-r--r-- | cgeo-calendar/src/cgeo/calendar/CalendarActivity.java | 3 | ||||
| -rw-r--r-- | main/AndroidManifest.xml | 5 | ||||
| -rw-r--r-- | main/lint.xml | 5 | ||||
| -rw-r--r-- | main/project.properties | 2 | ||||
| -rw-r--r-- | main/res/drawable-hdpi/ic_menu_mylocation.png | bin | 3948 -> 0 bytes | |||
| -rw-r--r-- | main/res/drawable-hdpi/marker_personalnote.png | bin | 1294 -> 675 bytes | |||
| -rw-r--r-- | main/res/drawable-hdpi/marker_usermodifiedcoords.png | bin | 736 -> 559 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/actionbar_cgeo.png (renamed from main/res/drawable/actionbar_cgeo.png) | bin | 1865 -> 1865 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/actionbar_compass_dark.png (renamed from main/res/drawable/actionbar_compass_dark.png) | bin | 870 -> 870 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/actionbar_compass_light.png (renamed from main/res/drawable/actionbar_compass_light.png) | bin | 2061 -> 2061 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/actionbar_home.png (renamed from main/res/drawable/actionbar_home.png) | bin | 706 -> 706 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/actionbar_manual.png (renamed from main/res/drawable/actionbar_manual.png) | bin | 769 -> 769 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/actionbar_map.png (renamed from main/res/drawable/actionbar_map.png) | bin | 886 -> 886 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/actionbar_mylocation_off.png (renamed from main/res/drawable/actionbar_mylocation_off.png) | bin | 912 -> 912 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/actionbar_mylocation_on.png (renamed from main/res/drawable/actionbar_mylocation_on.png) | bin | 919 -> 919 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/actionbar_search.png (renamed from main/res/drawable/actionbar_search.png) | bin | 668 -> 668 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute__strikethru.png (renamed from main/res/drawable/attribute__strikethru.png) | bin | 354 -> 354 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_abandonedbuilding.png (renamed from main/res/drawable/attribute_abandonedbuilding.png) | bin | 1084 -> 1084 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_available.png (renamed from main/res/drawable/attribute_available.png) | bin | 1048 -> 1048 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_bicycles.png (renamed from main/res/drawable/attribute_bicycles.png) | bin | 1266 -> 1266 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_boat.png (renamed from main/res/drawable/attribute_boat.png) | bin | 860 -> 860 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_campfires.png (renamed from main/res/drawable/attribute_campfires.png) | bin | 1152 -> 1152 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_camping.png (renamed from main/res/drawable/attribute_camping.png) | bin | 919 -> 919 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_cliff.png (renamed from main/res/drawable/attribute_cliff.png) | bin | 1090 -> 1090 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_climbing.png (renamed from main/res/drawable/attribute_climbing.png) | bin | 1286 -> 1286 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_cow.png (renamed from main/res/drawable/attribute_cow.png) | bin | 1027 -> 1027 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_danger.png (renamed from main/res/drawable/attribute_danger.png) | bin | 1204 -> 1204 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_dangerousanimals.png (renamed from main/res/drawable/attribute_dangerousanimals.png) | bin | 1360 -> 1360 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_dogs.png (renamed from main/res/drawable/attribute_dogs.png) | bin | 1156 -> 1156 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_fee.png (renamed from main/res/drawable/attribute_fee.png) | bin | 1072 -> 1072 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_field_puzzle.png (renamed from main/res/drawable/attribute_field_puzzle.png) | bin | 1445 -> 1445 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_firstaid.png (renamed from main/res/drawable/attribute_firstaid.png) | bin | 565 -> 565 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_flashlight.png (renamed from main/res/drawable/attribute_flashlight.png) | bin | 827 -> 827 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_food.png (renamed from main/res/drawable/attribute_food.png) | bin | 764 -> 764 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_frontyard.png (renamed from main/res/drawable/attribute_frontyard.png) | bin | 1010 -> 1010 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_fuel.png (renamed from main/res/drawable/attribute_fuel.png) | bin | 855 -> 855 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_hike_long.png (renamed from main/res/drawable/attribute_hike_long.png) | bin | 1257 -> 1257 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_hike_med.png (renamed from main/res/drawable/attribute_hike_med.png) | bin | 1261 -> 1261 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_hike_short.png (renamed from main/res/drawable/attribute_hike_short.png) | bin | 1141 -> 1141 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_hiking.png (renamed from main/res/drawable/attribute_hiking.png) | bin | 1141 -> 1141 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_horses.png (renamed from main/res/drawable/attribute_horses.png) | bin | 1120 -> 1120 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_hunting.png (renamed from main/res/drawable/attribute_hunting.png) | bin | 1324 -> 1324 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_icon_not_found.png (renamed from main/res/drawable/attribute_icon_not_found.png) | bin | 1362 -> 1362 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_jeeps.png (renamed from main/res/drawable/attribute_jeeps.png) | bin | 1076 -> 1076 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_kids.png (renamed from main/res/drawable/attribute_kids.png) | bin | 1141 -> 1141 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_landf.png (renamed from main/res/drawable/attribute_landf.png) | bin | 1252 -> 1252 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_mine.png (renamed from main/res/drawable/attribute_mine.png) | bin | 1192 -> 1192 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_motorcycles.png (renamed from main/res/drawable/attribute_motorcycles.png) | bin | 1151 -> 1151 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_night.png (renamed from main/res/drawable/attribute_night.png) | bin | 1196 -> 1196 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_nightcache.png (renamed from main/res/drawable/attribute_nightcache.png) | bin | 1278 -> 1278 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_onehour.png (renamed from main/res/drawable/attribute_onehour.png) | bin | 1307 -> 1307 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_parking.png (renamed from main/res/drawable/attribute_parking.png) | bin | 820 -> 820 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_parkngrab.png (renamed from main/res/drawable/attribute_parkngrab.png) | bin | 1299 -> 1299 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_partnership.png (renamed from main/res/drawable/attribute_partnership.png) | bin | 1228 -> 1228 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_phone.png (renamed from main/res/drawable/attribute_phone.png) | bin | 990 -> 990 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_picnic.png (renamed from main/res/drawable/attribute_picnic.png) | bin | 986 -> 986 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_poisonoak.png (renamed from main/res/drawable/attribute_poisonoak.png) | bin | 1239 -> 1239 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_public.png (renamed from main/res/drawable/attribute_public.png) | bin | 1066 -> 1066 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_quads.png (renamed from main/res/drawable/attribute_quads.png) | bin | 1218 -> 1218 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_rappelling.png (renamed from main/res/drawable/attribute_rappelling.png) | bin | 1166 -> 1166 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_restrooms.png (renamed from main/res/drawable/attribute_restrooms.png) | bin | 1092 -> 1092 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_rv.png (renamed from main/res/drawable/attribute_rv.png) | bin | 961 -> 961 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_s_tool.png (renamed from main/res/drawable/attribute_s_tool.png) | bin | 1168 -> 1168 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_scenic.png (renamed from main/res/drawable/attribute_scenic.png) | bin | 888 -> 888 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_scuba.png (renamed from main/res/drawable/attribute_scuba.png) | bin | 1072 -> 1072 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_seasonal.png (renamed from main/res/drawable/attribute_seasonal.png) | bin | 1251 -> 1251 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_skiis.png (renamed from main/res/drawable/attribute_skiis.png) | bin | 1292 -> 1292 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_snowmobiles.png (renamed from main/res/drawable/attribute_snowmobiles.png) | bin | 993 -> 993 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_snowshoes.png (renamed from main/res/drawable/attribute_snowshoes.png) | bin | 1220 -> 1220 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_stealth.png (renamed from main/res/drawable/attribute_stealth.png) | bin | 1041 -> 1041 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_stroller.png (renamed from main/res/drawable/attribute_stroller.png) | bin | 1185 -> 1185 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_swimming.png (renamed from main/res/drawable/attribute_swimming.png) | bin | 1121 -> 1121 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_teamwork.png (renamed from main/res/drawable/attribute_teamwork.png) | bin | 1086 -> 1086 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_thorn.png (renamed from main/res/drawable/attribute_thorn.png) | bin | 1259 -> 1259 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_ticks.png (renamed from main/res/drawable/attribute_ticks.png) | bin | 1263 -> 1263 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_touristok.png (renamed from main/res/drawable/attribute_touristok.png) | bin | 800 -> 800 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_treeclimbing.png (renamed from main/res/drawable/attribute_treeclimbing.png) | bin | 851 -> 851 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_uv.png (renamed from main/res/drawable/attribute_uv.png) | bin | 1037 -> 1037 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_wading.png (renamed from main/res/drawable/attribute_wading.png) | bin | 954 -> 954 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_water.png (renamed from main/res/drawable/attribute_water.png) | bin | 1129 -> 1129 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_wheelchair.png (renamed from main/res/drawable/attribute_wheelchair.png) | bin | 1167 -> 1167 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_winter.png (renamed from main/res/drawable/attribute_winter.png) | bin | 1439 -> 1439 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/attribute_wirelessbeacon.png (renamed from main/res/drawable/attribute_wirelessbeacon.png) | bin | 1396 -> 1396 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/cgeo.png (renamed from main/res/drawable/cgeo.png) | bin | 4942 -> 4942 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/cgeo_logo.png (renamed from main/res/drawable/cgeo_logo.png) | bin | 85871 -> 85871 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/compass_arrow.png (renamed from main/res/drawable/compass_arrow.png) | bin | 8608 -> 8608 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/compass_arrow_mini_black.png (renamed from main/res/drawable/compass_arrow_mini_black.png) | bin | 313 -> 313 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/compass_arrow_mini_white.png (renamed from main/res/drawable/compass_arrow_mini_white.png) | bin | 318 -> 318 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/compass_overlay.png (renamed from main/res/drawable/compass_overlay.png) | bin | 4526 -> 4526 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/compass_rose.png (renamed from main/res/drawable/compass_rose.png) | bin | 4972 -> 4972 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/compass_underlay.png (renamed from main/res/drawable/compass_underlay.png) | bin | 22480 -> 22480 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/helper_barcode.png (renamed from main/res/drawable/helper_barcode.png) | bin | 13114 -> 13114 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/helper_bluetoothgps.png (renamed from main/res/drawable/helper_bluetoothgps.png) | bin | 31768 -> 31768 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/helper_gpsstatus.png (renamed from main/res/drawable/helper_gpsstatus.png) | bin | 59328 -> 59328 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/helper_locus.png (renamed from main/res/drawable/helper_locus.png) | bin | 43680 -> 43680 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/helper_manual.png (renamed from main/res/drawable/helper_manual.png) | bin | 50536 -> 50536 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_add.png (renamed from main/res/drawable/ic_menu_add.png) | bin | 2017 -> 2017 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_agenda.png (renamed from main/res/drawable/ic_menu_agenda.png) | bin | 4805 -> 4805 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_barcode.png (renamed from main/res/drawable/ic_menu_barcode.png) | bin | 2657 -> 2657 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_circle.png (renamed from main/res/drawable/ic_menu_circle.png) | bin | 2374 -> 2374 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_clear_playlist.png (renamed from main/res/drawable/ic_menu_clear_playlist.png) | bin | 2281 -> 2281 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_compass.png (renamed from main/res/drawable/ic_menu_compass.png) | bin | 3943 -> 3943 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_delete.png (renamed from main/res/drawable/ic_menu_delete.png) | bin | 1747 -> 1747 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_edit.png (renamed from main/res/drawable/ic_menu_edit.png) | bin | 1661 -> 1661 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_emoticons.png (renamed from main/res/drawable/ic_menu_emoticons.png) | bin | 2056 -> 2056 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_filter.png (renamed from main/res/drawable/ic_menu_filter.png) | bin | 1690 -> 1690 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_globe.png (renamed from main/res/drawable/ic_menu_globe.png) | bin | 3248 -> 3248 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_info_details.png (renamed from main/res/drawable/ic_menu_info_details.png) | bin | 2128 -> 2128 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_mapmode.png (renamed from main/res/drawable/ic_menu_mapmode.png) | bin | 1923 -> 1923 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_mark.png (renamed from main/res/drawable/ic_menu_mark.png) | bin | 2519 -> 2519 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_myplaces.png (renamed from main/res/drawable/ic_menu_myplaces.png) | bin | 2011 -> 2011 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_preferences.png (renamed from main/res/drawable/ic_menu_preferences.png) | bin | 2315 -> 2315 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_recent_history.png (renamed from main/res/drawable/ic_menu_recent_history.png) | bin | 2647 -> 2647 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_refresh.png (renamed from main/res/drawable/ic_menu_refresh.png) | bin | 2450 -> 2450 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_rotate.png (renamed from main/res/drawable/ic_menu_rotate.png) | bin | 2477 -> 2477 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_save.png (renamed from main/res/drawable/ic_menu_save.png) | bin | 1645 -> 1645 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_set_as.png (renamed from main/res/drawable/ic_menu_set_as.png) | bin | 1828 -> 1828 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_share.png (renamed from main/res/drawable/ic_menu_share.png) | bin | 2194 -> 2194 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_shopping.png (renamed from main/res/drawable/ic_menu_shopping.png) | bin | 1947 -> 1947 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_sort_alphabetically.png (renamed from main/res/drawable/ic_menu_sort_alphabetically.png) | bin | 2077 -> 2077 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_sort_by_size.png (renamed from main/res/drawable/ic_menu_sort_by_size.png) | bin | 1067 -> 1067 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/ic_menu_trail.png (renamed from main/res/drawable/ic_menu_trail.png) | bin | 1836 -> 1836 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/image_no_placement.png (renamed from main/res/drawable/image_no_placement.png) | bin | 147 -> 147 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/image_not_loaded.png (renamed from main/res/drawable/image_not_loaded.png) | bin | 3336 -> 3336 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/log_img_dark.png (renamed from main/res/drawable/log_img_dark.png) | bin | 329 -> 329 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/log_img_light.png (renamed from main/res/drawable/log_img_light.png) | bin | 317 -> 317 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/main_any_default.png (renamed from main/res/drawable/main_any_default.png) | bin | 5115 -> 5115 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/main_filter_default.png (renamed from main/res/drawable/main_filter_default.png) | bin | 2634 -> 2634 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/main_live_default.png (renamed from main/res/drawable/main_live_default.png) | bin | 4799 -> 4799 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/main_nearby_default.png (renamed from main/res/drawable/main_nearby_default.png) | bin | 4536 -> 4536 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/main_nearby_disabled.png (renamed from main/res/drawable/main_nearby_disabled.png) | bin | 3922 -> 3922 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/main_search_default.png (renamed from main/res/drawable/main_search_default.png) | bin | 4707 -> 4707 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/main_stored_default.png (renamed from main/res/drawable/main_stored_default.png) | bin | 4614 -> 4614 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/marker.png (renamed from main/res/drawable/marker.png) | bin | 2500 -> 2500 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/marker_disabled.png (renamed from main/res/drawable/marker_disabled.png) | bin | 3067 -> 3067 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/marker_found.png (renamed from main/res/drawable/marker_found.png) | bin | 623 -> 623 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/marker_found_offline.png (renamed from main/res/drawable/marker_found_offline.png) | bin | 646 -> 646 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/marker_notreliable.png (renamed from main/res/drawable/marker_notreliable.png) | bin | 481 -> 481 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/marker_own.png (renamed from main/res/drawable/marker_own.png) | bin | 420 -> 420 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/marker_personalnote.png (renamed from main/res/drawable/marker_personalnote.png) | bin | 538 -> 538 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/marker_stored.png (renamed from main/res/drawable/marker_stored.png) | bin | 483 -> 483 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/marker_usermodifiedcoords.png (renamed from main/res/drawable/marker_usermodifiedcoords.png) | bin | 440 -> 440 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/my_location_chevron.png (renamed from main/res/drawable/my_location_chevron.png) | bin | 2264 -> 2264 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/star_half.png (renamed from main/res/drawable/star_half.png) | bin | 522 -> 522 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/star_off.png (renamed from main/res/drawable/star_off.png) | bin | 499 -> 499 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/star_on.png (renamed from main/res/drawable/star_on.png) | bin | 549 -> 549 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/trackable_all.png (renamed from main/res/drawable/trackable_all.png) | bin | 748 -> 748 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/type_ape.png (renamed from main/res/drawable/type_ape.png) | bin | 697 -> 697 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/type_cito.png (renamed from main/res/drawable/type_cito.png) | bin | 781 -> 781 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/type_earth.png (renamed from main/res/drawable/type_earth.png) | bin | 872 -> 872 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/type_event.png (renamed from main/res/drawable/type_event.png) | bin | 654 -> 654 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/type_hq.png (renamed from main/res/drawable/type_hq.png) | bin | 621 -> 621 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/type_letterbox.png (renamed from main/res/drawable/type_letterbox.png) | bin | 692 -> 692 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/type_mega.png (renamed from main/res/drawable/type_mega.png) | bin | 736 -> 736 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/type_multi.png (renamed from main/res/drawable/type_multi.png) | bin | 1073 -> 1073 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/type_mystery.png (renamed from main/res/drawable/type_mystery.png) | bin | 899 -> 899 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/type_traditional.png (renamed from main/res/drawable/type_traditional.png) | bin | 756 -> 756 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/type_unknown.png (renamed from main/res/drawable/type_unknown.png) | bin | 838 -> 838 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/type_virtual.png (renamed from main/res/drawable/type_virtual.png) | bin | 580 -> 580 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/type_webcam.png (renamed from main/res/drawable/type_webcam.png) | bin | 769 -> 769 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/type_wherigo.png (renamed from main/res/drawable/type_wherigo.png) | bin | 807 -> 807 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/waypoint_flag.png (renamed from main/res/drawable/waypoint_flag.png) | bin | 462 -> 462 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/waypoint_pkg.png (renamed from main/res/drawable/waypoint_pkg.png) | bin | 487 -> 487 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/waypoint_puzzle.png (renamed from main/res/drawable/waypoint_puzzle.png) | bin | 560 -> 560 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/waypoint_stage.png (renamed from main/res/drawable/waypoint_stage.png) | bin | 554 -> 554 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/waypoint_trailhead.png (renamed from main/res/drawable/waypoint_trailhead.png) | bin | 560 -> 560 bytes | |||
| -rw-r--r-- | main/res/drawable-mdpi/waypoint_waypoint.png (renamed from main/res/drawable/waypoint_waypoint.png) | bin | 550 -> 550 bytes | |||
| -rw-r--r-- | main/res/drawable/action_button_dark_dialog.xml | 9 | ||||
| -rw-r--r-- | main/res/drawable/action_button_light_dialog.xml | 9 | ||||
| -rw-r--r-- | main/res/drawable/bcg_dark.xml | 6 | ||||
| -rw-r--r-- | main/res/drawable/bcg_dialog_dark.xml | 6 | ||||
| -rw-r--r-- | main/res/drawable/bcg_dialog_light.xml | 6 | ||||
| -rw-r--r-- | main/res/drawable/bcg_light.xml | 6 | ||||
| -rw-r--r-- | main/res/drawable/cache_dark.xml | 6 | ||||
| -rw-r--r-- | main/res/drawable/cache_light.xml | 6 | ||||
| -rw-r--r-- | main/res/drawable/cache_light_pressed.xml | 6 | ||||
| -rw-r--r-- | main/res/drawable/client_cgeo.png | bin | 2413 -> 0 bytes | |||
| -rw-r--r-- | main/res/drawable/client_handygeocaching.png | bin | 2072 -> 0 bytes | |||
| -rw-r--r-- | main/res/drawable/client_precaching.png | bin | 2030 -> 0 bytes | |||
| -rw-r--r-- | main/res/drawable/dialog_button_dark.xml | 6 | ||||
| -rw-r--r-- | main/res/drawable/dialog_button_light.xml | 6 | ||||
| -rw-r--r-- | main/res/drawable/ic_menu_mylocation.png | bin | 5307 -> 0 bytes | |||
| -rw-r--r-- | main/res/drawable/icon_big.png | bin | 4551 -> 0 bytes | |||
| -rw-r--r-- | main/res/drawable/map_status_dark.xml | 9 | ||||
| -rw-r--r-- | main/res/drawable/map_status_light.xml | 9 | ||||
| -rw-r--r-- | main/res/drawable/mark_gray.xml (renamed from main/res/drawable/cache_dark_pressed.xml) | 2 | ||||
| -rw-r--r-- | main/res/drawable/separator_dark.xml | 6 | ||||
| -rw-r--r-- | main/res/drawable/separator_light.xml | 6 | ||||
| -rw-r--r-- | main/res/drawable/user_location.png | bin | 553 -> 0 bytes | |||
| -rw-r--r-- | main/res/drawable/user_location_active.png | bin | 574 -> 0 bytes | |||
| -rw-r--r-- | main/res/layout-land/coords.xml | 305 | ||||
| -rw-r--r-- | main/res/layout-land/navigate.xml | 100 | ||||
| -rw-r--r-- | main/res/layout/about.xml | 2 | ||||
| -rw-r--r-- | main/res/layout/auth.xml | 161 | ||||
| -rw-r--r-- | main/res/layout/cacheview.xml | 2 | ||||
| -rw-r--r-- | main/res/layout/cacheview_description.xml | 2 | ||||
| -rw-r--r-- | main/res/layout/cacheview_details.xml | 2 | ||||
| -rw-r--r-- | main/res/layout/cacheview_waypoints.xml | 2 | ||||
| -rw-r--r-- | main/res/layout/coords.xml | 288 | ||||
| -rw-r--r-- | main/res/layout/editor.xml | 2 | ||||
| -rw-r--r-- | main/res/layout/filter_bar.xml | 23 | ||||
| -rw-r--r-- | main/res/layout/init.xml | 23 | ||||
| -rw-r--r-- | main/res/layout/navigate.xml | 2 | ||||
| -rw-r--r-- | main/res/layout/popup.xml | 76 | ||||
| -rw-r--r-- | main/res/layout/search.xml | 317 | ||||
| -rw-r--r-- | main/res/layout/trackable_detail.xml | 2 | ||||
| -rw-r--r-- | main/res/layout/trackable_logs_item.xml | 16 | ||||
| -rw-r--r-- | main/res/layout/useful_apps.xml | 2 | ||||
| -rw-r--r-- | main/res/layout/visit.xml | 5 | ||||
| -rw-r--r-- | main/res/values-cs/strings.xml | 24 | ||||
| -rw-r--r-- | main/res/values-da/strings.xml | 5 | ||||
| -rw-r--r-- | main/res/values-de/strings.xml | 55 | ||||
| -rw-r--r-- | main/res/values-es/strings.xml | 29 | ||||
| -rw-r--r-- | main/res/values-fr/strings.xml | 46 | ||||
| -rw-r--r-- | main/res/values-hu/strings.xml | 55 | ||||
| -rw-r--r-- | main/res/values-it/strings.xml | 50 | ||||
| -rw-r--r-- | main/res/values-ja/strings.xml | 64 | ||||
| -rw-r--r-- | main/res/values-nb/strings.xml | 14 | ||||
| -rw-r--r-- | main/res/values-nl/strings.xml | 32 | ||||
| -rw-r--r-- | main/res/values-pl/strings.xml | 29 | ||||
| -rw-r--r-- | main/res/values-pt/strings.xml | 85 | ||||
| -rw-r--r-- | main/res/values-sk/strings.xml | 54 | ||||
| -rw-r--r-- | main/res/values-sv/strings.xml | 54 | ||||
| -rw-r--r-- | main/res/values/cache_attributes.xml | 2 | ||||
| -rw-r--r-- | main/res/values/colors.xml | 2 | ||||
| -rw-r--r-- | main/res/values/strings.xml | 208 | ||||
| -rw-r--r-- | main/res/values/strings_not_translatable.xml | 112 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/AbstractPopupActivity.java | 8 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/CacheDetailActivity.java | 120 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/CachePopup.java | 4 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/Destination.java | 8 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/DirectionProvider.java | 18 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/EditWaypointActivity.java | 10 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/ImagesActivity.java | 4 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/LogTrackableActivity.java | 6 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/SearchActivity.java | 21 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/SearchResult.java | 89 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/Settings.java | 18 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/SettingsActivity.java | 129 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/StaticMapsActivity.java | 6 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/StaticMapsProvider.java | 29 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/StoredList.java | 8 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/VisitCacheActivity.java | 20 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/WaypointPopup.java | 6 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/activity/FilteredActivity.java | 11 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/apps/AbstractLocusApp.java | 9 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/apps/cache/navi/AbstractNavigationApp.java | 26 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java | 7 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsDirectionApp.java | 48 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/apps/cache/navi/GoogleNavigationApp.java | 63 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/apps/cache/navi/NavigationApp.java | 18 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java | 14 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgCache.java | 103 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgData.java | 706 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgTrackable.java | 10 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgWaypoint.java | 4 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgeo.java | 10 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgeoapplication.java | 338 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgeocaches.java | 189 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgeonavigate.java | 5 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgeopoint.java | 8 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgeotrackable.java | 39 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/compatibility/AndroidLevel11Emulation.java (renamed from main/src/cgeo/geocaching/compatibility/AndroidLevel11Dummy.java) | 4 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/compatibility/AndroidLevel13.java | 31 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/compatibility/AndroidLevel13Emulation.java | 33 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/compatibility/AndroidLevel13Interface.java | 11 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/compatibility/AndroidLevel8.java | 20 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/compatibility/AndroidLevel8Dummy.java | 16 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/compatibility/AndroidLevel8Emulation.java | 30 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/compatibility/AndroidLevel8Interface.java | 1 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/compatibility/Compatibility.java | 51 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/AbstractConnector.java | 16 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/ConnectorFactory.java | 10 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/GeocachingAustraliaConnector.java | 7 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/GeopeitusConnector.java | 7 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/IConnector.java | 10 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/UnknownConnector.java | 5 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/gc/GCConnector.java | 20 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/gc/GCConstants.java | 7 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/gc/GCMap.java | 23 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/gc/GCParser.java | 71 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/gc/IconDecoder.java | 610 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/gc/Tile.java | 5 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/oc/OCConnector.java | 8 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/oc/OkapiClient.java | 5 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/ox/OXConnector.java | 7 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/enumerations/CacheAttribute.java | 9 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/enumerations/CacheSize.java | 5 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/enumerations/CacheType.java | 7 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/enumerations/LogType.java | 47 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/export/FieldnoteExport.java | 10 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/export/GpxExport.java | 5 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/files/GPXImporter.java | 5 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/files/GPXParser.java | 40 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/files/LocParser.java | 9 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/files/ParserException.java | 4 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/files/SimpleDirChooser.java | 13 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/filter/AttributeFilter.java | 3 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/filter/FilterUserInterface.java | 2 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/geopoint/DistanceParser.java | 3 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/geopoint/GeopointFormatter.java | 14 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/geopoint/Viewport.java | 5 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/maps/CGeoMap.java | 25 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/maps/CachesOverlay.java | 4 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/maps/MapProviderFactory.java | 2 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java | 7 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapActivity.java | 8 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java | 1 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapActivity024.java | 8 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/network/HtmlImage.java | 11 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/network/Network.java | 23 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/network/StatusUpdater.java | 2 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/sorting/DistanceComparator.java | 18 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/sorting/FindsComparator.java | 8 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/sorting/InverseComparator.java | 22 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/twitter/Twitter.java | 5 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/ui/CacheListAdapter.java | 45 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/ui/EditorDialog.java | 2 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/ui/ImagesList.java | 4 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/ui/LoggingUI.java | 6 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/ui/WeakReferenceHandler.java | 27 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/utils/AngleUtils.java | 8 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/utils/ImageHelper.java | 11 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/utils/TranslationUtils.java | 5 | ||||
| -rw-r--r-- | main/src/org/openintents/intents/FileManagerIntents.java | 127 | ||||
| -rw-r--r-- | main/templates/mapsapikey.xml | 2 | ||||
| -rw-r--r-- | tests/AndroidManifest.xml | 12 | ||||
| -rw-r--r-- | tests/build.xml | 22 | ||||
| -rw-r--r-- | tests/libs/robotium-solo-3.6.jar | bin | 0 -> 59067 bytes | |||
| -rw-r--r-- | tests/res/raw/map1.png | bin | 0 -> 3438 bytes | |||
| -rw-r--r-- | tests/res/raw/map11.png | bin | 0 -> 5774 bytes | |||
| -rw-r--r-- | tests/res/raw/map2.png | bin | 0 -> 5341 bytes | |||
| -rw-r--r-- | tests/res/raw/map3.png | bin | 0 -> 4807 bytes | |||
| -rw-r--r-- | tests/res/raw/map4.png | bin | 0 -> 10798 bytes | |||
| -rw-r--r-- | tests/res/raw/map5.png | bin | 0 -> 10962 bytes | |||
| -rw-r--r-- | tests/res/raw/trackable_tbxatg.htm | 2 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/CacheTest.java | 6 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/SettingsTest.java | 2 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/TrackableTest.java | 18 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/cgDataTest.java | 66 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/cgWaypointTest.java | 5 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/cgeoApplicationTest.java | 18 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/compatibility/CompatibilityTest.java | 2 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/connector/ConnectorFactoryTest.java | 6 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/connector/gc/GCConnectorTest.java | 9 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/connector/gc/IconDecoderTest.java | 313 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/connector/gc/TrackablesTest.java | 29 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/connector/opencaching/OkapiClientTest.java | 5 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/enumerations/CacheSizeTest.java | 7 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/enumerations/CacheTypeTest.java | 10 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/enumerations/LogTypeTest.java | 3 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/export/ExportTest.java | 2 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/files/GPXImporterTest.java | 34 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/files/GPXParserTest.java | 20 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/files/SimpleDirChooserUITest.java | 64 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/test/AbstractResourceInstrumentationTestCase.java | 4 |
359 files changed, 3698 insertions, 3024 deletions
diff --git a/cgeo-calendar/AndroidManifest.xml b/cgeo-calendar/AndroidManifest.xml index b76a6d4..7c2d3a7 100644 --- a/cgeo-calendar/AndroidManifest.xml +++ b/cgeo-calendar/AndroidManifest.xml @@ -1,11 +1,10 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - name="c:geo - calendar (add-on)" package="cgeo.calendar" android:versionCode="2" android:versionName="1.1" > - <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="8"/> + <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="13"/> <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" /> @@ -18,7 +17,7 @@ <application android:icon="@drawable/ic_launcher" - android:label="@string/app_name" > + android:label="@string/app_name" android:allowBackup="false"> <activity android:label="@string/app_name" android:name=".CalendarActivity" diff --git a/cgeo-calendar/lint.xml b/cgeo-calendar/lint.xml new file mode 100644 index 0000000..a846461 --- /dev/null +++ b/cgeo-calendar/lint.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<lint> + <issue id="MissingTranslation" severity="ignore" /> +</lint>
\ No newline at end of file diff --git a/cgeo-calendar/src/cgeo/calendar/AbstractAddEntry.java b/cgeo-calendar/src/cgeo/calendar/AbstractAddEntry.java index 99bd6d0..2860625 100644 --- a/cgeo-calendar/src/cgeo/calendar/AbstractAddEntry.java +++ b/cgeo-calendar/src/cgeo/calendar/AbstractAddEntry.java @@ -16,6 +16,7 @@ abstract class AbstractAddEntry { void addEntryToCalendar() { try { addEntryToCalendarInternal(); + activity.showToast(R.string.event_success); } catch (Exception e) { activity.showToast(R.string.event_fail); diff --git a/cgeo-calendar/src/cgeo/calendar/CalendarActivity.java b/cgeo-calendar/src/cgeo/calendar/CalendarActivity.java index b1c106d..b56e72f 100644 --- a/cgeo-calendar/src/cgeo/calendar/CalendarActivity.java +++ b/cgeo-calendar/src/cgeo/calendar/CalendarActivity.java @@ -13,7 +13,6 @@ import android.widget.Toast; public final class CalendarActivity extends Activity { static final String LOG_TAG = "cgeo.calendar"; - private Uri uri; /** Called when the activity is first created. */ @Override @@ -21,7 +20,7 @@ public final class CalendarActivity extends Activity { super.onCreate(savedInstanceState); try { - uri = getIntent().getData(); + final Uri uri = getIntent().getData(); if (uri == null) { finish(); return; diff --git a/main/AndroidManifest.xml b/main/AndroidManifest.xml index b07e0e7..40bf906 100644 --- a/main/AndroidManifest.xml +++ b/main/AndroidManifest.xml @@ -4,7 +4,7 @@ android:versionCode="20121203" package="cgeo.geocaching" android:installLocation="auto"> - <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="8" /> + <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="13" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> @@ -204,8 +204,7 @@ </activity> <activity android:name=".cgeonavigate" - android:label="@string/app_name_compass" - android:screenOrientation="portrait"> + android:label="@string/app_name_compass"> </activity> <activity android:name=".cgeogpxes" diff --git a/main/lint.xml b/main/lint.xml new file mode 100644 index 0000000..dc32e31 --- /dev/null +++ b/main/lint.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<lint> + <issue id="ContentDescription" severity="ignore" /> + <issue id="MissingTranslation" severity="ignore" /> +</lint>
\ No newline at end of file diff --git a/main/project.properties b/main/project.properties index 942b689..a475ee2 100644 --- a/main/project.properties +++ b/main/project.properties @@ -8,4 +8,4 @@ # project structure. # Project target. -target=Google Inc.:Google APIs:11 +target=Google Inc.:Google APIs:17 diff --git a/main/res/drawable-hdpi/ic_menu_mylocation.png b/main/res/drawable-hdpi/ic_menu_mylocation.png Binary files differdeleted file mode 100644 index 1bcb0cd..0000000 --- a/main/res/drawable-hdpi/ic_menu_mylocation.png +++ /dev/null diff --git a/main/res/drawable-hdpi/marker_personalnote.png b/main/res/drawable-hdpi/marker_personalnote.png Binary files differindex 6014320..c9d7c91 100644 --- a/main/res/drawable-hdpi/marker_personalnote.png +++ b/main/res/drawable-hdpi/marker_personalnote.png diff --git a/main/res/drawable-hdpi/marker_usermodifiedcoords.png b/main/res/drawable-hdpi/marker_usermodifiedcoords.png Binary files differindex d537dfc..08fbf11 100644 --- a/main/res/drawable-hdpi/marker_usermodifiedcoords.png +++ b/main/res/drawable-hdpi/marker_usermodifiedcoords.png diff --git a/main/res/drawable/actionbar_cgeo.png b/main/res/drawable-mdpi/actionbar_cgeo.png Binary files differindex a89abf8..a89abf8 100644 --- a/main/res/drawable/actionbar_cgeo.png +++ b/main/res/drawable-mdpi/actionbar_cgeo.png diff --git a/main/res/drawable/actionbar_compass_dark.png b/main/res/drawable-mdpi/actionbar_compass_dark.png Binary files differindex 2f5c22b..2f5c22b 100644 --- a/main/res/drawable/actionbar_compass_dark.png +++ b/main/res/drawable-mdpi/actionbar_compass_dark.png diff --git a/main/res/drawable/actionbar_compass_light.png b/main/res/drawable-mdpi/actionbar_compass_light.png Binary files differindex fa50d54..fa50d54 100644 --- a/main/res/drawable/actionbar_compass_light.png +++ b/main/res/drawable-mdpi/actionbar_compass_light.png diff --git a/main/res/drawable/actionbar_home.png b/main/res/drawable-mdpi/actionbar_home.png Binary files differindex e109f0a..e109f0a 100644 --- a/main/res/drawable/actionbar_home.png +++ b/main/res/drawable-mdpi/actionbar_home.png diff --git a/main/res/drawable/actionbar_manual.png b/main/res/drawable-mdpi/actionbar_manual.png Binary files differindex a71acb3..a71acb3 100644 --- a/main/res/drawable/actionbar_manual.png +++ b/main/res/drawable-mdpi/actionbar_manual.png diff --git a/main/res/drawable/actionbar_map.png b/main/res/drawable-mdpi/actionbar_map.png Binary files differindex 80287d7..80287d7 100644 --- a/main/res/drawable/actionbar_map.png +++ b/main/res/drawable-mdpi/actionbar_map.png diff --git a/main/res/drawable/actionbar_mylocation_off.png b/main/res/drawable-mdpi/actionbar_mylocation_off.png Binary files differindex 1cdeeba..1cdeeba 100644 --- a/main/res/drawable/actionbar_mylocation_off.png +++ b/main/res/drawable-mdpi/actionbar_mylocation_off.png diff --git a/main/res/drawable/actionbar_mylocation_on.png b/main/res/drawable-mdpi/actionbar_mylocation_on.png Binary files differindex 1d1b625..1d1b625 100644 --- a/main/res/drawable/actionbar_mylocation_on.png +++ b/main/res/drawable-mdpi/actionbar_mylocation_on.png diff --git a/main/res/drawable/actionbar_search.png b/main/res/drawable-mdpi/actionbar_search.png Binary files differindex cce7789..cce7789 100644 --- a/main/res/drawable/actionbar_search.png +++ b/main/res/drawable-mdpi/actionbar_search.png diff --git a/main/res/drawable/attribute__strikethru.png b/main/res/drawable-mdpi/attribute__strikethru.png Binary files differindex 3f00745..3f00745 100644 --- a/main/res/drawable/attribute__strikethru.png +++ b/main/res/drawable-mdpi/attribute__strikethru.png diff --git a/main/res/drawable/attribute_abandonedbuilding.png b/main/res/drawable-mdpi/attribute_abandonedbuilding.png Binary files differindex 20be7ba..20be7ba 100644 --- a/main/res/drawable/attribute_abandonedbuilding.png +++ b/main/res/drawable-mdpi/attribute_abandonedbuilding.png diff --git a/main/res/drawable/attribute_available.png b/main/res/drawable-mdpi/attribute_available.png Binary files differindex c587fa7..c587fa7 100644 --- a/main/res/drawable/attribute_available.png +++ b/main/res/drawable-mdpi/attribute_available.png diff --git a/main/res/drawable/attribute_bicycles.png b/main/res/drawable-mdpi/attribute_bicycles.png Binary files differindex 53ea040..53ea040 100644 --- a/main/res/drawable/attribute_bicycles.png +++ b/main/res/drawable-mdpi/attribute_bicycles.png diff --git a/main/res/drawable/attribute_boat.png b/main/res/drawable-mdpi/attribute_boat.png Binary files differindex f4db083..f4db083 100644 --- a/main/res/drawable/attribute_boat.png +++ b/main/res/drawable-mdpi/attribute_boat.png diff --git a/main/res/drawable/attribute_campfires.png b/main/res/drawable-mdpi/attribute_campfires.png Binary files differindex 229bb40..229bb40 100644 --- a/main/res/drawable/attribute_campfires.png +++ b/main/res/drawable-mdpi/attribute_campfires.png diff --git a/main/res/drawable/attribute_camping.png b/main/res/drawable-mdpi/attribute_camping.png Binary files differindex 15f2891..15f2891 100644 --- a/main/res/drawable/attribute_camping.png +++ b/main/res/drawable-mdpi/attribute_camping.png diff --git a/main/res/drawable/attribute_cliff.png b/main/res/drawable-mdpi/attribute_cliff.png Binary files differindex 31b6921..31b6921 100644 --- a/main/res/drawable/attribute_cliff.png +++ b/main/res/drawable-mdpi/attribute_cliff.png diff --git a/main/res/drawable/attribute_climbing.png b/main/res/drawable-mdpi/attribute_climbing.png Binary files differindex 585b841..585b841 100644 --- a/main/res/drawable/attribute_climbing.png +++ b/main/res/drawable-mdpi/attribute_climbing.png diff --git a/main/res/drawable/attribute_cow.png b/main/res/drawable-mdpi/attribute_cow.png Binary files differindex 2a2a2ce..2a2a2ce 100644 --- a/main/res/drawable/attribute_cow.png +++ b/main/res/drawable-mdpi/attribute_cow.png diff --git a/main/res/drawable/attribute_danger.png b/main/res/drawable-mdpi/attribute_danger.png Binary files differindex 25e0fe0..25e0fe0 100644 --- a/main/res/drawable/attribute_danger.png +++ b/main/res/drawable-mdpi/attribute_danger.png diff --git a/main/res/drawable/attribute_dangerousanimals.png b/main/res/drawable-mdpi/attribute_dangerousanimals.png Binary files differindex 9ba4ea4..9ba4ea4 100644 --- a/main/res/drawable/attribute_dangerousanimals.png +++ b/main/res/drawable-mdpi/attribute_dangerousanimals.png diff --git a/main/res/drawable/attribute_dogs.png b/main/res/drawable-mdpi/attribute_dogs.png Binary files differindex f7f0628..f7f0628 100644 --- a/main/res/drawable/attribute_dogs.png +++ b/main/res/drawable-mdpi/attribute_dogs.png diff --git a/main/res/drawable/attribute_fee.png b/main/res/drawable-mdpi/attribute_fee.png Binary files differindex aa0c950..aa0c950 100644 --- a/main/res/drawable/attribute_fee.png +++ b/main/res/drawable-mdpi/attribute_fee.png diff --git a/main/res/drawable/attribute_field_puzzle.png b/main/res/drawable-mdpi/attribute_field_puzzle.png Binary files differindex e524761..e524761 100644 --- a/main/res/drawable/attribute_field_puzzle.png +++ b/main/res/drawable-mdpi/attribute_field_puzzle.png diff --git a/main/res/drawable/attribute_firstaid.png b/main/res/drawable-mdpi/attribute_firstaid.png Binary files differindex 2c2433f..2c2433f 100644 --- a/main/res/drawable/attribute_firstaid.png +++ b/main/res/drawable-mdpi/attribute_firstaid.png diff --git a/main/res/drawable/attribute_flashlight.png b/main/res/drawable-mdpi/attribute_flashlight.png Binary files differindex c4b68d4..c4b68d4 100644 --- a/main/res/drawable/attribute_flashlight.png +++ b/main/res/drawable-mdpi/attribute_flashlight.png diff --git a/main/res/drawable/attribute_food.png b/main/res/drawable-mdpi/attribute_food.png Binary files differindex d14902c..d14902c 100644 --- a/main/res/drawable/attribute_food.png +++ b/main/res/drawable-mdpi/attribute_food.png diff --git a/main/res/drawable/attribute_frontyard.png b/main/res/drawable-mdpi/attribute_frontyard.png Binary files differindex 40affd2..40affd2 100644 --- a/main/res/drawable/attribute_frontyard.png +++ b/main/res/drawable-mdpi/attribute_frontyard.png diff --git a/main/res/drawable/attribute_fuel.png b/main/res/drawable-mdpi/attribute_fuel.png Binary files differindex 363ea34..363ea34 100644 --- a/main/res/drawable/attribute_fuel.png +++ b/main/res/drawable-mdpi/attribute_fuel.png diff --git a/main/res/drawable/attribute_hike_long.png b/main/res/drawable-mdpi/attribute_hike_long.png Binary files differindex 70ca001..70ca001 100644 --- a/main/res/drawable/attribute_hike_long.png +++ b/main/res/drawable-mdpi/attribute_hike_long.png diff --git a/main/res/drawable/attribute_hike_med.png b/main/res/drawable-mdpi/attribute_hike_med.png Binary files differindex d368721..d368721 100644 --- a/main/res/drawable/attribute_hike_med.png +++ b/main/res/drawable-mdpi/attribute_hike_med.png diff --git a/main/res/drawable/attribute_hike_short.png b/main/res/drawable-mdpi/attribute_hike_short.png Binary files differindex ce421ae..ce421ae 100644 --- a/main/res/drawable/attribute_hike_short.png +++ b/main/res/drawable-mdpi/attribute_hike_short.png diff --git a/main/res/drawable/attribute_hiking.png b/main/res/drawable-mdpi/attribute_hiking.png Binary files differindex 1579be0..1579be0 100644 --- a/main/res/drawable/attribute_hiking.png +++ b/main/res/drawable-mdpi/attribute_hiking.png diff --git a/main/res/drawable/attribute_horses.png b/main/res/drawable-mdpi/attribute_horses.png Binary files differindex 171a70f..171a70f 100644 --- a/main/res/drawable/attribute_horses.png +++ b/main/res/drawable-mdpi/attribute_horses.png diff --git a/main/res/drawable/attribute_hunting.png b/main/res/drawable-mdpi/attribute_hunting.png Binary files differindex 816ad49..816ad49 100644 --- a/main/res/drawable/attribute_hunting.png +++ b/main/res/drawable-mdpi/attribute_hunting.png diff --git a/main/res/drawable/attribute_icon_not_found.png b/main/res/drawable-mdpi/attribute_icon_not_found.png Binary files differindex 33e0ce2..33e0ce2 100644 --- a/main/res/drawable/attribute_icon_not_found.png +++ b/main/res/drawable-mdpi/attribute_icon_not_found.png diff --git a/main/res/drawable/attribute_jeeps.png b/main/res/drawable-mdpi/attribute_jeeps.png Binary files differindex e2cec60..e2cec60 100644 --- a/main/res/drawable/attribute_jeeps.png +++ b/main/res/drawable-mdpi/attribute_jeeps.png diff --git a/main/res/drawable/attribute_kids.png b/main/res/drawable-mdpi/attribute_kids.png Binary files differindex f322f5b..f322f5b 100644 --- a/main/res/drawable/attribute_kids.png +++ b/main/res/drawable-mdpi/attribute_kids.png diff --git a/main/res/drawable/attribute_landf.png b/main/res/drawable-mdpi/attribute_landf.png Binary files differindex 1b27327..1b27327 100644 --- a/main/res/drawable/attribute_landf.png +++ b/main/res/drawable-mdpi/attribute_landf.png diff --git a/main/res/drawable/attribute_mine.png b/main/res/drawable-mdpi/attribute_mine.png Binary files differindex 221e210..221e210 100644 --- a/main/res/drawable/attribute_mine.png +++ b/main/res/drawable-mdpi/attribute_mine.png diff --git a/main/res/drawable/attribute_motorcycles.png b/main/res/drawable-mdpi/attribute_motorcycles.png Binary files differindex adf0abb..adf0abb 100644 --- a/main/res/drawable/attribute_motorcycles.png +++ b/main/res/drawable-mdpi/attribute_motorcycles.png diff --git a/main/res/drawable/attribute_night.png b/main/res/drawable-mdpi/attribute_night.png Binary files differindex 416d965..416d965 100644 --- a/main/res/drawable/attribute_night.png +++ b/main/res/drawable-mdpi/attribute_night.png diff --git a/main/res/drawable/attribute_nightcache.png b/main/res/drawable-mdpi/attribute_nightcache.png Binary files differindex 6163808..6163808 100644 --- a/main/res/drawable/attribute_nightcache.png +++ b/main/res/drawable-mdpi/attribute_nightcache.png diff --git a/main/res/drawable/attribute_onehour.png b/main/res/drawable-mdpi/attribute_onehour.png Binary files differindex eb28014..eb28014 100644 --- a/main/res/drawable/attribute_onehour.png +++ b/main/res/drawable-mdpi/attribute_onehour.png diff --git a/main/res/drawable/attribute_parking.png b/main/res/drawable-mdpi/attribute_parking.png Binary files differindex 26e43cc..26e43cc 100644 --- a/main/res/drawable/attribute_parking.png +++ b/main/res/drawable-mdpi/attribute_parking.png diff --git a/main/res/drawable/attribute_parkngrab.png b/main/res/drawable-mdpi/attribute_parkngrab.png Binary files differindex 8cc4fcc..8cc4fcc 100644 --- a/main/res/drawable/attribute_parkngrab.png +++ b/main/res/drawable-mdpi/attribute_parkngrab.png diff --git a/main/res/drawable/attribute_partnership.png b/main/res/drawable-mdpi/attribute_partnership.png Binary files differindex 228c009..228c009 100644 --- a/main/res/drawable/attribute_partnership.png +++ b/main/res/drawable-mdpi/attribute_partnership.png diff --git a/main/res/drawable/attribute_phone.png b/main/res/drawable-mdpi/attribute_phone.png Binary files differindex 1225f2b..1225f2b 100644 --- a/main/res/drawable/attribute_phone.png +++ b/main/res/drawable-mdpi/attribute_phone.png diff --git a/main/res/drawable/attribute_picnic.png b/main/res/drawable-mdpi/attribute_picnic.png Binary files differindex 88229ea..88229ea 100644 --- a/main/res/drawable/attribute_picnic.png +++ b/main/res/drawable-mdpi/attribute_picnic.png diff --git a/main/res/drawable/attribute_poisonoak.png b/main/res/drawable-mdpi/attribute_poisonoak.png Binary files differindex 7112410..7112410 100644 --- a/main/res/drawable/attribute_poisonoak.png +++ b/main/res/drawable-mdpi/attribute_poisonoak.png diff --git a/main/res/drawable/attribute_public.png b/main/res/drawable-mdpi/attribute_public.png Binary files differindex 5fcf129..5fcf129 100644 --- a/main/res/drawable/attribute_public.png +++ b/main/res/drawable-mdpi/attribute_public.png diff --git a/main/res/drawable/attribute_quads.png b/main/res/drawable-mdpi/attribute_quads.png Binary files differindex 844657c..844657c 100644 --- a/main/res/drawable/attribute_quads.png +++ b/main/res/drawable-mdpi/attribute_quads.png diff --git a/main/res/drawable/attribute_rappelling.png b/main/res/drawable-mdpi/attribute_rappelling.png Binary files differindex c97d891..c97d891 100644 --- a/main/res/drawable/attribute_rappelling.png +++ b/main/res/drawable-mdpi/attribute_rappelling.png diff --git a/main/res/drawable/attribute_restrooms.png b/main/res/drawable-mdpi/attribute_restrooms.png Binary files differindex 0d1a841..0d1a841 100644 --- a/main/res/drawable/attribute_restrooms.png +++ b/main/res/drawable-mdpi/attribute_restrooms.png diff --git a/main/res/drawable/attribute_rv.png b/main/res/drawable-mdpi/attribute_rv.png Binary files differindex c344108..c344108 100644 --- a/main/res/drawable/attribute_rv.png +++ b/main/res/drawable-mdpi/attribute_rv.png diff --git a/main/res/drawable/attribute_s_tool.png b/main/res/drawable-mdpi/attribute_s_tool.png Binary files differindex 5ce3a92..5ce3a92 100644 --- a/main/res/drawable/attribute_s_tool.png +++ b/main/res/drawable-mdpi/attribute_s_tool.png diff --git a/main/res/drawable/attribute_scenic.png b/main/res/drawable-mdpi/attribute_scenic.png Binary files differindex f800b40..f800b40 100644 --- a/main/res/drawable/attribute_scenic.png +++ b/main/res/drawable-mdpi/attribute_scenic.png diff --git a/main/res/drawable/attribute_scuba.png b/main/res/drawable-mdpi/attribute_scuba.png Binary files differindex 2fa5faa..2fa5faa 100644 --- a/main/res/drawable/attribute_scuba.png +++ b/main/res/drawable-mdpi/attribute_scuba.png diff --git a/main/res/drawable/attribute_seasonal.png b/main/res/drawable-mdpi/attribute_seasonal.png Binary files differindex 8046ebf..8046ebf 100644 --- a/main/res/drawable/attribute_seasonal.png +++ b/main/res/drawable-mdpi/attribute_seasonal.png diff --git a/main/res/drawable/attribute_skiis.png b/main/res/drawable-mdpi/attribute_skiis.png Binary files differindex 5589442..5589442 100644 --- a/main/res/drawable/attribute_skiis.png +++ b/main/res/drawable-mdpi/attribute_skiis.png diff --git a/main/res/drawable/attribute_snowmobiles.png b/main/res/drawable-mdpi/attribute_snowmobiles.png Binary files differindex 412046e..412046e 100644 --- a/main/res/drawable/attribute_snowmobiles.png +++ b/main/res/drawable-mdpi/attribute_snowmobiles.png diff --git a/main/res/drawable/attribute_snowshoes.png b/main/res/drawable-mdpi/attribute_snowshoes.png Binary files differindex 1da4519..1da4519 100644 --- a/main/res/drawable/attribute_snowshoes.png +++ b/main/res/drawable-mdpi/attribute_snowshoes.png diff --git a/main/res/drawable/attribute_stealth.png b/main/res/drawable-mdpi/attribute_stealth.png Binary files differindex d6d04e1..d6d04e1 100644 --- a/main/res/drawable/attribute_stealth.png +++ b/main/res/drawable-mdpi/attribute_stealth.png diff --git a/main/res/drawable/attribute_stroller.png b/main/res/drawable-mdpi/attribute_stroller.png Binary files differindex f8309b2..f8309b2 100644 --- a/main/res/drawable/attribute_stroller.png +++ b/main/res/drawable-mdpi/attribute_stroller.png diff --git a/main/res/drawable/attribute_swimming.png b/main/res/drawable-mdpi/attribute_swimming.png Binary files differindex 0768b9e..0768b9e 100644 --- a/main/res/drawable/attribute_swimming.png +++ b/main/res/drawable-mdpi/attribute_swimming.png diff --git a/main/res/drawable/attribute_teamwork.png b/main/res/drawable-mdpi/attribute_teamwork.png Binary files differindex ee0df0b..ee0df0b 100644 --- a/main/res/drawable/attribute_teamwork.png +++ b/main/res/drawable-mdpi/attribute_teamwork.png diff --git a/main/res/drawable/attribute_thorn.png b/main/res/drawable-mdpi/attribute_thorn.png Binary files differindex 1800f87..1800f87 100644 --- a/main/res/drawable/attribute_thorn.png +++ b/main/res/drawable-mdpi/attribute_thorn.png diff --git a/main/res/drawable/attribute_ticks.png b/main/res/drawable-mdpi/attribute_ticks.png Binary files differindex 65108a3..65108a3 100644 --- a/main/res/drawable/attribute_ticks.png +++ b/main/res/drawable-mdpi/attribute_ticks.png diff --git a/main/res/drawable/attribute_touristok.png b/main/res/drawable-mdpi/attribute_touristok.png Binary files differindex f264340..f264340 100644 --- a/main/res/drawable/attribute_touristok.png +++ b/main/res/drawable-mdpi/attribute_touristok.png diff --git a/main/res/drawable/attribute_treeclimbing.png b/main/res/drawable-mdpi/attribute_treeclimbing.png Binary files differindex c2623a3..c2623a3 100644 --- a/main/res/drawable/attribute_treeclimbing.png +++ b/main/res/drawable-mdpi/attribute_treeclimbing.png diff --git a/main/res/drawable/attribute_uv.png b/main/res/drawable-mdpi/attribute_uv.png Binary files differindex 859478e..859478e 100644 --- a/main/res/drawable/attribute_uv.png +++ b/main/res/drawable-mdpi/attribute_uv.png diff --git a/main/res/drawable/attribute_wading.png b/main/res/drawable-mdpi/attribute_wading.png Binary files differindex 653bfdc..653bfdc 100644 --- a/main/res/drawable/attribute_wading.png +++ b/main/res/drawable-mdpi/attribute_wading.png diff --git a/main/res/drawable/attribute_water.png b/main/res/drawable-mdpi/attribute_water.png Binary files differindex 59ba217..59ba217 100644 --- a/main/res/drawable/attribute_water.png +++ b/main/res/drawable-mdpi/attribute_water.png diff --git a/main/res/drawable/attribute_wheelchair.png b/main/res/drawable-mdpi/attribute_wheelchair.png Binary files differindex c6fccd1..c6fccd1 100644 --- a/main/res/drawable/attribute_wheelchair.png +++ b/main/res/drawable-mdpi/attribute_wheelchair.png diff --git a/main/res/drawable/attribute_winter.png b/main/res/drawable-mdpi/attribute_winter.png Binary files differindex 29d7421..29d7421 100644 --- a/main/res/drawable/attribute_winter.png +++ b/main/res/drawable-mdpi/attribute_winter.png diff --git a/main/res/drawable/attribute_wirelessbeacon.png b/main/res/drawable-mdpi/attribute_wirelessbeacon.png Binary files differindex a3b05c1..a3b05c1 100644 --- a/main/res/drawable/attribute_wirelessbeacon.png +++ b/main/res/drawable-mdpi/attribute_wirelessbeacon.png diff --git a/main/res/drawable/cgeo.png b/main/res/drawable-mdpi/cgeo.png Binary files differindex 126feb3..126feb3 100644 --- a/main/res/drawable/cgeo.png +++ b/main/res/drawable-mdpi/cgeo.png diff --git a/main/res/drawable/cgeo_logo.png b/main/res/drawable-mdpi/cgeo_logo.png Binary files differindex 0d8654f..0d8654f 100644 --- a/main/res/drawable/cgeo_logo.png +++ b/main/res/drawable-mdpi/cgeo_logo.png diff --git a/main/res/drawable/compass_arrow.png b/main/res/drawable-mdpi/compass_arrow.png Binary files differindex a6524d9..a6524d9 100644 --- a/main/res/drawable/compass_arrow.png +++ b/main/res/drawable-mdpi/compass_arrow.png diff --git a/main/res/drawable/compass_arrow_mini_black.png b/main/res/drawable-mdpi/compass_arrow_mini_black.png Binary files differindex 682f067..682f067 100644 --- a/main/res/drawable/compass_arrow_mini_black.png +++ b/main/res/drawable-mdpi/compass_arrow_mini_black.png diff --git a/main/res/drawable/compass_arrow_mini_white.png b/main/res/drawable-mdpi/compass_arrow_mini_white.png Binary files differindex 2b11847..2b11847 100644 --- a/main/res/drawable/compass_arrow_mini_white.png +++ b/main/res/drawable-mdpi/compass_arrow_mini_white.png diff --git a/main/res/drawable/compass_overlay.png b/main/res/drawable-mdpi/compass_overlay.png Binary files differindex 98b8fd6..98b8fd6 100644 --- a/main/res/drawable/compass_overlay.png +++ b/main/res/drawable-mdpi/compass_overlay.png diff --git a/main/res/drawable/compass_rose.png b/main/res/drawable-mdpi/compass_rose.png Binary files differindex 08e2c8c..08e2c8c 100644 --- a/main/res/drawable/compass_rose.png +++ b/main/res/drawable-mdpi/compass_rose.png diff --git a/main/res/drawable/compass_underlay.png b/main/res/drawable-mdpi/compass_underlay.png Binary files differindex 7b19442..7b19442 100644 --- a/main/res/drawable/compass_underlay.png +++ b/main/res/drawable-mdpi/compass_underlay.png diff --git a/main/res/drawable/helper_barcode.png b/main/res/drawable-mdpi/helper_barcode.png Binary files differindex 0b56af3..0b56af3 100644 --- a/main/res/drawable/helper_barcode.png +++ b/main/res/drawable-mdpi/helper_barcode.png diff --git a/main/res/drawable/helper_bluetoothgps.png b/main/res/drawable-mdpi/helper_bluetoothgps.png Binary files differindex ecae5ee..ecae5ee 100644 --- a/main/res/drawable/helper_bluetoothgps.png +++ b/main/res/drawable-mdpi/helper_bluetoothgps.png diff --git a/main/res/drawable/helper_gpsstatus.png b/main/res/drawable-mdpi/helper_gpsstatus.png Binary files differindex 07c6419..07c6419 100644 --- a/main/res/drawable/helper_gpsstatus.png +++ b/main/res/drawable-mdpi/helper_gpsstatus.png diff --git a/main/res/drawable/helper_locus.png b/main/res/drawable-mdpi/helper_locus.png Binary files differindex 836bb4e..836bb4e 100644 --- a/main/res/drawable/helper_locus.png +++ b/main/res/drawable-mdpi/helper_locus.png diff --git a/main/res/drawable/helper_manual.png b/main/res/drawable-mdpi/helper_manual.png Binary files differindex c3c43db..c3c43db 100644 --- a/main/res/drawable/helper_manual.png +++ b/main/res/drawable-mdpi/helper_manual.png diff --git a/main/res/drawable/ic_menu_add.png b/main/res/drawable-mdpi/ic_menu_add.png Binary files differindex 6752bfd..6752bfd 100644 --- a/main/res/drawable/ic_menu_add.png +++ b/main/res/drawable-mdpi/ic_menu_add.png diff --git a/main/res/drawable/ic_menu_agenda.png b/main/res/drawable-mdpi/ic_menu_agenda.png Binary files differindex 9f2c1dc..9f2c1dc 100644 --- a/main/res/drawable/ic_menu_agenda.png +++ b/main/res/drawable-mdpi/ic_menu_agenda.png diff --git a/main/res/drawable/ic_menu_barcode.png b/main/res/drawable-mdpi/ic_menu_barcode.png Binary files differindex abc13cc..abc13cc 100644 --- a/main/res/drawable/ic_menu_barcode.png +++ b/main/res/drawable-mdpi/ic_menu_barcode.png diff --git a/main/res/drawable/ic_menu_circle.png b/main/res/drawable-mdpi/ic_menu_circle.png Binary files differindex a3a26f9..a3a26f9 100644 --- a/main/res/drawable/ic_menu_circle.png +++ b/main/res/drawable-mdpi/ic_menu_circle.png diff --git a/main/res/drawable/ic_menu_clear_playlist.png b/main/res/drawable-mdpi/ic_menu_clear_playlist.png Binary files differindex 750db62..750db62 100644 --- a/main/res/drawable/ic_menu_clear_playlist.png +++ b/main/res/drawable-mdpi/ic_menu_clear_playlist.png diff --git a/main/res/drawable/ic_menu_compass.png b/main/res/drawable-mdpi/ic_menu_compass.png Binary files differindex 7717dde..7717dde 100644 --- a/main/res/drawable/ic_menu_compass.png +++ b/main/res/drawable-mdpi/ic_menu_compass.png diff --git a/main/res/drawable/ic_menu_delete.png b/main/res/drawable-mdpi/ic_menu_delete.png Binary files differindex 7d95494..7d95494 100644 --- a/main/res/drawable/ic_menu_delete.png +++ b/main/res/drawable-mdpi/ic_menu_delete.png diff --git a/main/res/drawable/ic_menu_edit.png b/main/res/drawable-mdpi/ic_menu_edit.png Binary files differindex 41a9c2e..41a9c2e 100644 --- a/main/res/drawable/ic_menu_edit.png +++ b/main/res/drawable-mdpi/ic_menu_edit.png diff --git a/main/res/drawable/ic_menu_emoticons.png b/main/res/drawable-mdpi/ic_menu_emoticons.png Binary files differindex 765000b..765000b 100644 --- a/main/res/drawable/ic_menu_emoticons.png +++ b/main/res/drawable-mdpi/ic_menu_emoticons.png diff --git a/main/res/drawable/ic_menu_filter.png b/main/res/drawable-mdpi/ic_menu_filter.png Binary files differindex 84176c5..84176c5 100644 --- a/main/res/drawable/ic_menu_filter.png +++ b/main/res/drawable-mdpi/ic_menu_filter.png diff --git a/main/res/drawable/ic_menu_globe.png b/main/res/drawable-mdpi/ic_menu_globe.png Binary files differindex cd283ab..cd283ab 100644 --- a/main/res/drawable/ic_menu_globe.png +++ b/main/res/drawable-mdpi/ic_menu_globe.png diff --git a/main/res/drawable/ic_menu_info_details.png b/main/res/drawable-mdpi/ic_menu_info_details.png Binary files differindex 1786d1e..1786d1e 100644 --- a/main/res/drawable/ic_menu_info_details.png +++ b/main/res/drawable-mdpi/ic_menu_info_details.png diff --git a/main/res/drawable/ic_menu_mapmode.png b/main/res/drawable-mdpi/ic_menu_mapmode.png Binary files differindex d85cab5..d85cab5 100644 --- a/main/res/drawable/ic_menu_mapmode.png +++ b/main/res/drawable-mdpi/ic_menu_mapmode.png diff --git a/main/res/drawable/ic_menu_mark.png b/main/res/drawable-mdpi/ic_menu_mark.png Binary files differindex 5e95da7..5e95da7 100644 --- a/main/res/drawable/ic_menu_mark.png +++ b/main/res/drawable-mdpi/ic_menu_mark.png diff --git a/main/res/drawable/ic_menu_myplaces.png b/main/res/drawable-mdpi/ic_menu_myplaces.png Binary files differindex 06f11ba..06f11ba 100644 --- a/main/res/drawable/ic_menu_myplaces.png +++ b/main/res/drawable-mdpi/ic_menu_myplaces.png diff --git a/main/res/drawable/ic_menu_preferences.png b/main/res/drawable-mdpi/ic_menu_preferences.png Binary files differindex 60dbff6..60dbff6 100644 --- a/main/res/drawable/ic_menu_preferences.png +++ b/main/res/drawable-mdpi/ic_menu_preferences.png diff --git a/main/res/drawable/ic_menu_recent_history.png b/main/res/drawable-mdpi/ic_menu_recent_history.png Binary files differindex 4ccae5d..4ccae5d 100644 --- a/main/res/drawable/ic_menu_recent_history.png +++ b/main/res/drawable-mdpi/ic_menu_recent_history.png diff --git a/main/res/drawable/ic_menu_refresh.png b/main/res/drawable-mdpi/ic_menu_refresh.png Binary files differindex 77d70dd..77d70dd 100644 --- a/main/res/drawable/ic_menu_refresh.png +++ b/main/res/drawable-mdpi/ic_menu_refresh.png diff --git a/main/res/drawable/ic_menu_rotate.png b/main/res/drawable-mdpi/ic_menu_rotate.png Binary files differindex 27368b2..27368b2 100644 --- a/main/res/drawable/ic_menu_rotate.png +++ b/main/res/drawable-mdpi/ic_menu_rotate.png diff --git a/main/res/drawable/ic_menu_save.png b/main/res/drawable-mdpi/ic_menu_save.png Binary files differindex 36d50b3..36d50b3 100644 --- a/main/res/drawable/ic_menu_save.png +++ b/main/res/drawable-mdpi/ic_menu_save.png diff --git a/main/res/drawable/ic_menu_set_as.png b/main/res/drawable-mdpi/ic_menu_set_as.png Binary files differindex cb9dc49..cb9dc49 100644 --- a/main/res/drawable/ic_menu_set_as.png +++ b/main/res/drawable-mdpi/ic_menu_set_as.png diff --git a/main/res/drawable/ic_menu_share.png b/main/res/drawable-mdpi/ic_menu_share.png Binary files differindex 44db9b1..44db9b1 100644 --- a/main/res/drawable/ic_menu_share.png +++ b/main/res/drawable-mdpi/ic_menu_share.png diff --git a/main/res/drawable/ic_menu_shopping.png b/main/res/drawable-mdpi/ic_menu_shopping.png Binary files differindex 7088155..7088155 100644 --- a/main/res/drawable/ic_menu_shopping.png +++ b/main/res/drawable-mdpi/ic_menu_shopping.png diff --git a/main/res/drawable/ic_menu_sort_alphabetically.png b/main/res/drawable-mdpi/ic_menu_sort_alphabetically.png Binary files differindex 2583eb8..2583eb8 100644 --- a/main/res/drawable/ic_menu_sort_alphabetically.png +++ b/main/res/drawable-mdpi/ic_menu_sort_alphabetically.png diff --git a/main/res/drawable/ic_menu_sort_by_size.png b/main/res/drawable-mdpi/ic_menu_sort_by_size.png Binary files differindex 65e2786..65e2786 100644 --- a/main/res/drawable/ic_menu_sort_by_size.png +++ b/main/res/drawable-mdpi/ic_menu_sort_by_size.png diff --git a/main/res/drawable/ic_menu_trail.png b/main/res/drawable-mdpi/ic_menu_trail.png Binary files differindex 34abeab..34abeab 100644 --- a/main/res/drawable/ic_menu_trail.png +++ b/main/res/drawable-mdpi/ic_menu_trail.png diff --git a/main/res/drawable/image_no_placement.png b/main/res/drawable-mdpi/image_no_placement.png Binary files differindex d73f7c7..d73f7c7 100644 --- a/main/res/drawable/image_no_placement.png +++ b/main/res/drawable-mdpi/image_no_placement.png diff --git a/main/res/drawable/image_not_loaded.png b/main/res/drawable-mdpi/image_not_loaded.png Binary files differindex ce7c6d8..ce7c6d8 100644 --- a/main/res/drawable/image_not_loaded.png +++ b/main/res/drawable-mdpi/image_not_loaded.png diff --git a/main/res/drawable/log_img_dark.png b/main/res/drawable-mdpi/log_img_dark.png Binary files differindex b30db2c..b30db2c 100644 --- a/main/res/drawable/log_img_dark.png +++ b/main/res/drawable-mdpi/log_img_dark.png diff --git a/main/res/drawable/log_img_light.png b/main/res/drawable-mdpi/log_img_light.png Binary files differindex a4ad4dd..a4ad4dd 100644 --- a/main/res/drawable/log_img_light.png +++ b/main/res/drawable-mdpi/log_img_light.png diff --git a/main/res/drawable/main_any_default.png b/main/res/drawable-mdpi/main_any_default.png Binary files differindex cea3288..cea3288 100644 --- a/main/res/drawable/main_any_default.png +++ b/main/res/drawable-mdpi/main_any_default.png diff --git a/main/res/drawable/main_filter_default.png b/main/res/drawable-mdpi/main_filter_default.png Binary files differindex 996d15b..996d15b 100644 --- a/main/res/drawable/main_filter_default.png +++ b/main/res/drawable-mdpi/main_filter_default.png diff --git a/main/res/drawable/main_live_default.png b/main/res/drawable-mdpi/main_live_default.png Binary files differindex f2cc262..f2cc262 100644 --- a/main/res/drawable/main_live_default.png +++ b/main/res/drawable-mdpi/main_live_default.png diff --git a/main/res/drawable/main_nearby_default.png b/main/res/drawable-mdpi/main_nearby_default.png Binary files differindex 9166267..9166267 100644 --- a/main/res/drawable/main_nearby_default.png +++ b/main/res/drawable-mdpi/main_nearby_default.png diff --git a/main/res/drawable/main_nearby_disabled.png b/main/res/drawable-mdpi/main_nearby_disabled.png Binary files differindex 8980b9f..8980b9f 100644 --- a/main/res/drawable/main_nearby_disabled.png +++ b/main/res/drawable-mdpi/main_nearby_disabled.png diff --git a/main/res/drawable/main_search_default.png b/main/res/drawable-mdpi/main_search_default.png Binary files differindex c3c1fdc..c3c1fdc 100644 --- a/main/res/drawable/main_search_default.png +++ b/main/res/drawable-mdpi/main_search_default.png diff --git a/main/res/drawable/main_stored_default.png b/main/res/drawable-mdpi/main_stored_default.png Binary files differindex b595723..b595723 100644 --- a/main/res/drawable/main_stored_default.png +++ b/main/res/drawable-mdpi/main_stored_default.png diff --git a/main/res/drawable/marker.png b/main/res/drawable-mdpi/marker.png Binary files differindex f6e0e10..f6e0e10 100644 --- a/main/res/drawable/marker.png +++ b/main/res/drawable-mdpi/marker.png diff --git a/main/res/drawable/marker_disabled.png b/main/res/drawable-mdpi/marker_disabled.png Binary files differindex 6e1c17b..6e1c17b 100644 --- a/main/res/drawable/marker_disabled.png +++ b/main/res/drawable-mdpi/marker_disabled.png diff --git a/main/res/drawable/marker_found.png b/main/res/drawable-mdpi/marker_found.png Binary files differindex aa8b154..aa8b154 100644 --- a/main/res/drawable/marker_found.png +++ b/main/res/drawable-mdpi/marker_found.png diff --git a/main/res/drawable/marker_found_offline.png b/main/res/drawable-mdpi/marker_found_offline.png Binary files differindex 823e972..823e972 100644 --- a/main/res/drawable/marker_found_offline.png +++ b/main/res/drawable-mdpi/marker_found_offline.png diff --git a/main/res/drawable/marker_notreliable.png b/main/res/drawable-mdpi/marker_notreliable.png Binary files differindex fced841..fced841 100644 --- a/main/res/drawable/marker_notreliable.png +++ b/main/res/drawable-mdpi/marker_notreliable.png diff --git a/main/res/drawable/marker_own.png b/main/res/drawable-mdpi/marker_own.png Binary files differindex b091cf3..b091cf3 100644 --- a/main/res/drawable/marker_own.png +++ b/main/res/drawable-mdpi/marker_own.png diff --git a/main/res/drawable/marker_personalnote.png b/main/res/drawable-mdpi/marker_personalnote.png Binary files differindex 70ef9f1..70ef9f1 100644 --- a/main/res/drawable/marker_personalnote.png +++ b/main/res/drawable-mdpi/marker_personalnote.png diff --git a/main/res/drawable/marker_stored.png b/main/res/drawable-mdpi/marker_stored.png Binary files differindex 6689e26..6689e26 100644 --- a/main/res/drawable/marker_stored.png +++ b/main/res/drawable-mdpi/marker_stored.png diff --git a/main/res/drawable/marker_usermodifiedcoords.png b/main/res/drawable-mdpi/marker_usermodifiedcoords.png Binary files differindex f174a17..f174a17 100644 --- a/main/res/drawable/marker_usermodifiedcoords.png +++ b/main/res/drawable-mdpi/marker_usermodifiedcoords.png diff --git a/main/res/drawable/my_location_chevron.png b/main/res/drawable-mdpi/my_location_chevron.png Binary files differindex 67b863f..67b863f 100644 --- a/main/res/drawable/my_location_chevron.png +++ b/main/res/drawable-mdpi/my_location_chevron.png diff --git a/main/res/drawable/star_half.png b/main/res/drawable-mdpi/star_half.png Binary files differindex 1ea9152..1ea9152 100644 --- a/main/res/drawable/star_half.png +++ b/main/res/drawable-mdpi/star_half.png diff --git a/main/res/drawable/star_off.png b/main/res/drawable-mdpi/star_off.png Binary files differindex 126815f..126815f 100644 --- a/main/res/drawable/star_off.png +++ b/main/res/drawable-mdpi/star_off.png diff --git a/main/res/drawable/star_on.png b/main/res/drawable-mdpi/star_on.png Binary files differindex 801928a..801928a 100644 --- a/main/res/drawable/star_on.png +++ b/main/res/drawable-mdpi/star_on.png diff --git a/main/res/drawable/trackable_all.png b/main/res/drawable-mdpi/trackable_all.png Binary files differindex 8c830d4..8c830d4 100644 --- a/main/res/drawable/trackable_all.png +++ b/main/res/drawable-mdpi/trackable_all.png diff --git a/main/res/drawable/type_ape.png b/main/res/drawable-mdpi/type_ape.png Binary files differindex 3487013..3487013 100644 --- a/main/res/drawable/type_ape.png +++ b/main/res/drawable-mdpi/type_ape.png diff --git a/main/res/drawable/type_cito.png b/main/res/drawable-mdpi/type_cito.png Binary files differindex 56f0e5f..56f0e5f 100644 --- a/main/res/drawable/type_cito.png +++ b/main/res/drawable-mdpi/type_cito.png diff --git a/main/res/drawable/type_earth.png b/main/res/drawable-mdpi/type_earth.png Binary files differindex 356b3b8..356b3b8 100644 --- a/main/res/drawable/type_earth.png +++ b/main/res/drawable-mdpi/type_earth.png diff --git a/main/res/drawable/type_event.png b/main/res/drawable-mdpi/type_event.png Binary files differindex 93b60fe..93b60fe 100644 --- a/main/res/drawable/type_event.png +++ b/main/res/drawable-mdpi/type_event.png diff --git a/main/res/drawable/type_hq.png b/main/res/drawable-mdpi/type_hq.png Binary files differindex e4f700a..e4f700a 100644 --- a/main/res/drawable/type_hq.png +++ b/main/res/drawable-mdpi/type_hq.png diff --git a/main/res/drawable/type_letterbox.png b/main/res/drawable-mdpi/type_letterbox.png Binary files differindex 52348f2..52348f2 100644 --- a/main/res/drawable/type_letterbox.png +++ b/main/res/drawable-mdpi/type_letterbox.png diff --git a/main/res/drawable/type_mega.png b/main/res/drawable-mdpi/type_mega.png Binary files differindex 9551892..9551892 100644 --- a/main/res/drawable/type_mega.png +++ b/main/res/drawable-mdpi/type_mega.png diff --git a/main/res/drawable/type_multi.png b/main/res/drawable-mdpi/type_multi.png Binary files differindex 5bcfd31..5bcfd31 100644 --- a/main/res/drawable/type_multi.png +++ b/main/res/drawable-mdpi/type_multi.png diff --git a/main/res/drawable/type_mystery.png b/main/res/drawable-mdpi/type_mystery.png Binary files differindex f462d5d..f462d5d 100644 --- a/main/res/drawable/type_mystery.png +++ b/main/res/drawable-mdpi/type_mystery.png diff --git a/main/res/drawable/type_traditional.png b/main/res/drawable-mdpi/type_traditional.png Binary files differindex e3e1a4b..e3e1a4b 100644 --- a/main/res/drawable/type_traditional.png +++ b/main/res/drawable-mdpi/type_traditional.png diff --git a/main/res/drawable/type_unknown.png b/main/res/drawable-mdpi/type_unknown.png Binary files differindex 67e0dd9..67e0dd9 100644 --- a/main/res/drawable/type_unknown.png +++ b/main/res/drawable-mdpi/type_unknown.png diff --git a/main/res/drawable/type_virtual.png b/main/res/drawable-mdpi/type_virtual.png Binary files differindex 14bc704..14bc704 100644 --- a/main/res/drawable/type_virtual.png +++ b/main/res/drawable-mdpi/type_virtual.png diff --git a/main/res/drawable/type_webcam.png b/main/res/drawable-mdpi/type_webcam.png Binary files differindex 922fddd..922fddd 100644 --- a/main/res/drawable/type_webcam.png +++ b/main/res/drawable-mdpi/type_webcam.png diff --git a/main/res/drawable/type_wherigo.png b/main/res/drawable-mdpi/type_wherigo.png Binary files differindex 96318f6..96318f6 100644 --- a/main/res/drawable/type_wherigo.png +++ b/main/res/drawable-mdpi/type_wherigo.png diff --git a/main/res/drawable/waypoint_flag.png b/main/res/drawable-mdpi/waypoint_flag.png Binary files differindex 123ec84..123ec84 100644 --- a/main/res/drawable/waypoint_flag.png +++ b/main/res/drawable-mdpi/waypoint_flag.png diff --git a/main/res/drawable/waypoint_pkg.png b/main/res/drawable-mdpi/waypoint_pkg.png Binary files differindex 1a901f0..1a901f0 100644 --- a/main/res/drawable/waypoint_pkg.png +++ b/main/res/drawable-mdpi/waypoint_pkg.png diff --git a/main/res/drawable/waypoint_puzzle.png b/main/res/drawable-mdpi/waypoint_puzzle.png Binary files differindex a659f36..a659f36 100644 --- a/main/res/drawable/waypoint_puzzle.png +++ b/main/res/drawable-mdpi/waypoint_puzzle.png diff --git a/main/res/drawable/waypoint_stage.png b/main/res/drawable-mdpi/waypoint_stage.png Binary files differindex 52e0481..52e0481 100644 --- a/main/res/drawable/waypoint_stage.png +++ b/main/res/drawable-mdpi/waypoint_stage.png diff --git a/main/res/drawable/waypoint_trailhead.png b/main/res/drawable-mdpi/waypoint_trailhead.png Binary files differindex 1aca26f..1aca26f 100644 --- a/main/res/drawable/waypoint_trailhead.png +++ b/main/res/drawable-mdpi/waypoint_trailhead.png diff --git a/main/res/drawable/waypoint_waypoint.png b/main/res/drawable-mdpi/waypoint_waypoint.png Binary files differindex 91b69a9..91b69a9 100644 --- a/main/res/drawable/waypoint_waypoint.png +++ b/main/res/drawable-mdpi/waypoint_waypoint.png diff --git a/main/res/drawable/action_button_dark_dialog.xml b/main/res/drawable/action_button_dark_dialog.xml deleted file mode 100644 index 17db3fb..0000000 --- a/main/res/drawable/action_button_dark_dialog.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<shape xmlns:android="http://schemas.android.com/apk/res/android" - android:shape="rectangle"> - <stroke - android:color="#66FFFFFF" - android:width="1px" /> - <solid - android:color="#FF080808" /> -</shape>
\ No newline at end of file diff --git a/main/res/drawable/action_button_light_dialog.xml b/main/res/drawable/action_button_light_dialog.xml deleted file mode 100644 index e17a55a..0000000 --- a/main/res/drawable/action_button_light_dialog.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<shape xmlns:android="http://schemas.android.com/apk/res/android" - android:shape="rectangle"> - <stroke - android:color="#66000000" - android:width="1px" /> - <solid - android:color="#FFEEEEEE" /> -</shape>
\ No newline at end of file diff --git a/main/res/drawable/bcg_dark.xml b/main/res/drawable/bcg_dark.xml deleted file mode 100644 index 0acf0e0..0000000 --- a/main/res/drawable/bcg_dark.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<shape xmlns:android="http://schemas.android.com/apk/res/android" - android:shape="rectangle"> - <solid - android:color="@color/background_dark" /> -</shape>
\ No newline at end of file diff --git a/main/res/drawable/bcg_dialog_dark.xml b/main/res/drawable/bcg_dialog_dark.xml deleted file mode 100644 index 73b2276..0000000 --- a/main/res/drawable/bcg_dialog_dark.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<shape xmlns:android="http://schemas.android.com/apk/res/android" - android:shape="rectangle"> - <solid - android:color="#11FFFFFF" /> -</shape>
\ No newline at end of file diff --git a/main/res/drawable/bcg_dialog_light.xml b/main/res/drawable/bcg_dialog_light.xml deleted file mode 100644 index b89730f..0000000 --- a/main/res/drawable/bcg_dialog_light.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<shape xmlns:android="http://schemas.android.com/apk/res/android" - android:shape="rectangle"> - <solid - android:color="#11000000" /> -</shape>
\ No newline at end of file diff --git a/main/res/drawable/bcg_light.xml b/main/res/drawable/bcg_light.xml deleted file mode 100644 index 0acf0e0..0000000 --- a/main/res/drawable/bcg_light.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<shape xmlns:android="http://schemas.android.com/apk/res/android" - android:shape="rectangle"> - <solid - android:color="@color/background_dark" /> -</shape>
\ No newline at end of file diff --git a/main/res/drawable/cache_dark.xml b/main/res/drawable/cache_dark.xml deleted file mode 100644 index 7e87cd7..0000000 --- a/main/res/drawable/cache_dark.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<selector xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:state_pressed="true" android:drawable="@drawable/cache_dark_pressed" /> - <item android:state_focused="true" android:drawable="@drawable/cache_dark_pressed" /> - <item android:drawable="@drawable/bcg_dark" /> -</selector>
\ No newline at end of file diff --git a/main/res/drawable/cache_light.xml b/main/res/drawable/cache_light.xml deleted file mode 100644 index b2c669a..0000000 --- a/main/res/drawable/cache_light.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<selector xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:state_pressed="true" android:drawable="@drawable/cache_light_pressed" /> - <item android:state_focused="true" android:drawable="@drawable/cache_light_pressed" /> - <item android:drawable="@drawable/bcg_light" /> -</selector>
\ No newline at end of file diff --git a/main/res/drawable/cache_light_pressed.xml b/main/res/drawable/cache_light_pressed.xml deleted file mode 100644 index 411f915..0000000 --- a/main/res/drawable/cache_light_pressed.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<shape xmlns:android="http://schemas.android.com/apk/res/android" - android:shape="rectangle"> - <solid - android:color="#44000000" /> -</shape>
\ No newline at end of file diff --git a/main/res/drawable/client_cgeo.png b/main/res/drawable/client_cgeo.png Binary files differdeleted file mode 100644 index 119f0dd..0000000 --- a/main/res/drawable/client_cgeo.png +++ /dev/null diff --git a/main/res/drawable/client_handygeocaching.png b/main/res/drawable/client_handygeocaching.png Binary files differdeleted file mode 100644 index a842cb5..0000000 --- a/main/res/drawable/client_handygeocaching.png +++ /dev/null diff --git a/main/res/drawable/client_precaching.png b/main/res/drawable/client_precaching.png Binary files differdeleted file mode 100644 index 5fd95d6..0000000 --- a/main/res/drawable/client_precaching.png +++ /dev/null diff --git a/main/res/drawable/dialog_button_dark.xml b/main/res/drawable/dialog_button_dark.xml deleted file mode 100644 index e36438b..0000000 --- a/main/res/drawable/dialog_button_dark.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<selector xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:state_pressed="true" android:drawable="@drawable/action_button_dark_pressed" /> - <item android:state_focused="true" android:drawable="@drawable/action_button_dark_pressed" /> - <item android:drawable="@drawable/action_button_dark_dialog" /> -</selector>
\ No newline at end of file diff --git a/main/res/drawable/dialog_button_light.xml b/main/res/drawable/dialog_button_light.xml deleted file mode 100644 index 95414ff..0000000 --- a/main/res/drawable/dialog_button_light.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<selector xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:state_pressed="true" android:drawable="@drawable/action_button_light_pressed" /> - <item android:state_focused="true" android:drawable="@drawable/action_button_light_pressed" /> - <item android:drawable="@drawable/action_button_light_dialog" /> -</selector>
\ No newline at end of file diff --git a/main/res/drawable/ic_menu_mylocation.png b/main/res/drawable/ic_menu_mylocation.png Binary files differdeleted file mode 100644 index fdbd5ca..0000000 --- a/main/res/drawable/ic_menu_mylocation.png +++ /dev/null diff --git a/main/res/drawable/icon_big.png b/main/res/drawable/icon_big.png Binary files differdeleted file mode 100644 index a7d0d1b..0000000 --- a/main/res/drawable/icon_big.png +++ /dev/null diff --git a/main/res/drawable/map_status_dark.xml b/main/res/drawable/map_status_dark.xml deleted file mode 100644 index bc257ff..0000000 --- a/main/res/drawable/map_status_dark.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<shape xmlns:android="http://schemas.android.com/apk/res/android" - android:shape="rectangle"> - <gradient - android:startColor="#00000000" - android:centerColor="#66000000" - android:endColor="#88000000" - android:angle="90" /> -</shape>
\ No newline at end of file diff --git a/main/res/drawable/map_status_light.xml b/main/res/drawable/map_status_light.xml deleted file mode 100644 index a6ae801..0000000 --- a/main/res/drawable/map_status_light.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<shape xmlns:android="http://schemas.android.com/apk/res/android" - android:shape="rectangle"> - <gradient - android:startColor="#00FFFFFF" - android:centerColor="#66FFFFFF" - android:endColor="#88FFFFFF" - android:angle="90" /> -</shape>
\ No newline at end of file diff --git a/main/res/drawable/cache_dark_pressed.xml b/main/res/drawable/mark_gray.xml index 593caea..239739e 100644 --- a/main/res/drawable/cache_dark_pressed.xml +++ b/main/res/drawable/mark_gray.xml @@ -2,5 +2,5 @@ <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid - android:color="#44FFFFFF" /> + android:color="#77777777" /> </shape>
\ No newline at end of file diff --git a/main/res/drawable/separator_dark.xml b/main/res/drawable/separator_dark.xml deleted file mode 100644 index ece89e1..0000000 --- a/main/res/drawable/separator_dark.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<shape xmlns:android="http://schemas.android.com/apk/res/android" - android:shape="rectangle"> - <solid - android:color="#22FFFFFF" /> -</shape>
\ No newline at end of file diff --git a/main/res/drawable/separator_light.xml b/main/res/drawable/separator_light.xml deleted file mode 100644 index f57780a..0000000 --- a/main/res/drawable/separator_light.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<shape xmlns:android="http://schemas.android.com/apk/res/android" - android:shape="rectangle"> - <solid - android:color="#22000000" /> -</shape>
\ No newline at end of file diff --git a/main/res/drawable/user_location.png b/main/res/drawable/user_location.png Binary files differdeleted file mode 100644 index e1bde6e..0000000 --- a/main/res/drawable/user_location.png +++ /dev/null diff --git a/main/res/drawable/user_location_active.png b/main/res/drawable/user_location_active.png Binary files differdeleted file mode 100644 index d7d22d2..0000000 --- a/main/res/drawable/user_location_active.png +++ /dev/null diff --git a/main/res/layout-land/coords.xml b/main/res/layout-land/coords.xml index c2dc9c5..70601d4 100644 --- a/main/res/layout-land/coords.xml +++ b/main/res/layout-land/coords.xml @@ -1,127 +1,192 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/linearLayout1" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="vertical" - android:background="?background_color"> - <LinearLayout style="@style/action_bar"> - <TextView style="@style/action_bar_title" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/linearLayout1" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:background="?background_color" + android:orientation="vertical" > + + <LinearLayout style="@style/action_bar" > + + <TextView + style="@style/action_bar_title" android:text="@string/cache_coordinates" /> + <View style="@style/action_bar_separator" /> - <ImageView android:id="@+id/actionBarManualbutton" + + <ImageView + android:id="@+id/actionBarManualbutton" style="@style/action_bar_action" android:src="@drawable/actionbar_manual" /> </LinearLayout> - <ScrollView android:id="@+id/scroller" - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:fillViewport="true" > - <LinearLayout android:id="@+id/scroller_child" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="vertical" > - <Spinner android:id="@+id/spinnerCoordinateFormats" - android:layout_width="fill_parent" - android:layout_height="wrap_content" /> - <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/coordTable" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:stretchColumns="0,1,3,5,7" - android:layout_weight="1"> - <TableRow android:id="@+id/tableRow1"> - <Button android:id="@+id/ButtonLat" - style="@style/button_full"/> - <EditText style="@style/edittext_full" - android:id="@+id/EditTextLatDeg" - android:gravity="right" - android:inputType="number" - android:selectAllOnFocus="true" /> - <TextView android:id="@+id/LatSeparator1" - android:text="°" /> - <EditText android:id="@+id/EditTextLatMin" - style="@style/edittext_full" - android:gravity="right" - android:inputType="number" - android:selectAllOnFocus="true" /> - <TextView android:id="@+id/LatSeparator2" - android:text="," /> - <EditText android:id="@+id/EditTextLatSec" - style="@style/edittext_full" - android:gravity="right" - android:inputType="number" - android:selectAllOnFocus="true" /> - <TextView android:id="@+id/LatSeparator3" - android:text="," /> - <EditText android:id="@+id/EditTextLatSecFrac" - style="@style/edittext_full" - android:inputType="number" - android:selectAllOnFocus="true" /> - </TableRow> - <TableRow android:id="@+id/tableRow2"> - <Button android:id="@+id/ButtonLon" - style="@style/button_full"/> - <EditText android:id="@+id/EditTextLonDeg" - style="@style/edittext_full" - android:gravity="right" - android:inputType="number" - android:selectAllOnFocus="true" /> - <TextView android:id="@+id/LonSeparator1" - android:text="°" /> - <EditText android:id="@+id/EditTextLonMin" - style="@style/edittext_full" - android:gravity="right" - android:inputType="number" - android:selectAllOnFocus="true" /> - <TextView android:id="@+id/LonSeparator2" - android:text="," /> - <EditText android:id="@+id/EditTextLonSec" - style="@style/edittext_full" - android:gravity="right" - android:inputType="number" - android:selectAllOnFocus="true" /> - <TextView android:id="@+id/LonSeparator3" - android:text="," /> - <EditText android:id="@+id/EditTextLonSecFrac" - style="@style/edittext_full" - android:inputType="number" - android:selectAllOnFocus="true" /> - </TableRow> - </TableLayout> - <EditText - android:id="@+id/latitude" - style="@style/edittext_full" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:hint="@string/latitude" /> - <EditText - android:id="@+id/longitude" - style="@style/edittext_full" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:hint="@string/longitude" /> - <LinearLayout - android:id="@+id/linearLayout2" - android:layout_width="fill_parent" - android:layout_height="wrap_content" > - <Button style="@style/button_full" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:id="@+id/current" - android:layout_weight="1" - android:text="@string/waypoint_my_coordinates" /> - <Button style="@style/button_full" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:id="@+id/cache" - android:layout_weight="1" - android:text="@string/waypoint_cache_coordinates" /> - </LinearLayout> - <Button style="@style/button_full" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:id="@+id/done" - android:text="@string/waypoint_done" /> - </LinearLayout> + + <ScrollView + android:id="@+id/scroller" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:fillViewport="true" > + + <LinearLayout + android:id="@+id/scroller_child" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="vertical" > + + <Spinner + android:id="@+id/spinnerCoordinateFormats" + android:layout_width="fill_parent" + android:layout_height="wrap_content" /> + + <TableLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/coordTable" + android:layout_width="fill_parent" + android:layout_height="0dp" + android:layout_weight="1" + android:stretchColumns="0,1,3,5,7" > + + <TableRow android:id="@+id/tableRow1" > + + <Button + android:id="@+id/ButtonLat" + style="@style/button_full" /> + + <EditText + android:id="@+id/EditTextLatDeg" + style="@style/edittext_full" + android:gravity="right" + android:inputType="number" + android:selectAllOnFocus="true" /> + + <TextView + android:id="@+id/LatSeparator1" + android:text="°" + tools:ignore="HardcodedText" /> + + <EditText + android:id="@+id/EditTextLatMin" + style="@style/edittext_full" + android:gravity="right" + android:inputType="number" + android:selectAllOnFocus="true" /> + + <TextView + android:id="@+id/LatSeparator2" + android:text="," + tools:ignore="HardcodedText" /> + + <EditText + android:id="@+id/EditTextLatSec" + style="@style/edittext_full" + android:gravity="right" + android:inputType="number" + android:selectAllOnFocus="true" /> + + <TextView + android:id="@+id/LatSeparator3" + android:text="," + tools:ignore="HardcodedText" /> + + <EditText + android:id="@+id/EditTextLatSecFrac" + style="@style/edittext_full" + android:inputType="number" + android:selectAllOnFocus="true" /> + </TableRow> + + <TableRow android:id="@+id/tableRow2" > + + <Button + android:id="@+id/ButtonLon" + style="@style/button_full" /> + + <EditText + android:id="@+id/EditTextLonDeg" + style="@style/edittext_full" + android:gravity="right" + android:inputType="number" + android:selectAllOnFocus="true" /> + + <TextView + android:id="@+id/LonSeparator1" + android:text="°" + tools:ignore="HardcodedText" /> + + <EditText + android:id="@+id/EditTextLonMin" + style="@style/edittext_full" + android:gravity="right" + android:inputType="number" + android:selectAllOnFocus="true" /> + + <TextView + android:id="@+id/LonSeparator2" + android:text="," + tools:ignore="HardcodedText" /> + + <EditText + android:id="@+id/EditTextLonSec" + style="@style/edittext_full" + android:gravity="right" + android:inputType="number" + android:selectAllOnFocus="true" /> + + <TextView + android:id="@+id/LonSeparator3" + android:text="," + tools:ignore="HardcodedText" /> + + <EditText + android:id="@+id/EditTextLonSecFrac" + style="@style/edittext_full" + android:inputType="number" + android:selectAllOnFocus="true" /> + </TableRow> + </TableLayout> + + <EditText + android:id="@+id/latitude" + style="@style/edittext_full" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:hint="@string/latitude" /> + + <EditText + android:id="@+id/longitude" + style="@style/edittext_full" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:hint="@string/longitude" /> + + <LinearLayout + android:id="@+id/linearLayout2" + android:layout_width="fill_parent" + android:layout_height="wrap_content" > + + <Button + android:id="@+id/current" + style="@style/button_full" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@string/waypoint_my_coordinates" /> + + <Button + android:id="@+id/cache" + style="@style/button_full" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@string/waypoint_cache_coordinates" /> + </LinearLayout> + + <Button + android:id="@+id/done" + style="@style/button_full" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:text="@string/waypoint_done" /> + </LinearLayout> </ScrollView> -</LinearLayout> + +</LinearLayout>
\ No newline at end of file diff --git a/main/res/layout-land/navigate.xml b/main/res/layout-land/navigate.xml new file mode 100644 index 0000000..0beffb4 --- /dev/null +++ b/main/res/layout-land/navigate.xml @@ -0,0 +1,100 @@ +<?xml version="1.0" encoding="UTF-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:orientation="vertical" + android:background="?background_color" > + <LinearLayout style="@style/action_bar"> + <ImageView style="@style/action_bar_action" + android:onClick="goHome" /> + <View style="@style/action_bar_separator" /> + <TextView style="@style/action_bar_title" /> + <View style="@style/action_bar_separator" /> + <ImageView style="@style/action_bar_action" + android:src="@drawable/actionbar_manual" + android:onClick="goManual" /> + </LinearLayout> + <LinearLayout + android:orientation="horizontal" + android:layout_width="fill_parent" + android:layout_height="fill_parent"> + <RelativeLayout + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:orientation="vertical" android:layout_weight="1"> + <TextView android:id="@+id/destination" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_centerHorizontal="true" + android:layout_gravity="center" + android:textSize="14dip" + android:textColor="?text_color" android:layout_alignParentLeft="false" + android:layout_alignParentTop="true" + android:gravity="center_horizontal"/> + <TextView android:id="@+id/cacheinfo" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_centerHorizontal="true" + android:layout_gravity="center" + android:textSize="14dip" + android:textColor="?text_color" android:layout_alignParentLeft="false" + android:layout_alignParentTop="false" + android:layout_below="@+id/destination" android:gravity="center_horizontal"/> + <TextView android:id="@+id/heading" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginLeft="3dip" + android:layout_alignParentLeft="true" + android:layout_gravity="left" + android:textSize="26dip" + android:textColor="?text_color" + android:text="@null" android:layout_centerVertical="true"/> + <TextView android:id="@+id/distance" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginRight="3dip" + android:layout_alignParentRight="true" + android:layout_gravity="right" + android:textSize="26dip" + android:textColor="?text_color" + android:text="@null" android:layout_centerVertical="true"/> + <TextView android:id="@+id/nav_location" + style="@style/location_current" + android:layout_above="@id/status" + android:text="@string/loc_trying" android:layout_alignParentLeft="false" + android:layout_marginLeft="0dp" android:layout_alignParentTop="false" + android:layout_marginTop="95dp" android:layout_alignParentBottom="false" + /> + <RelativeLayout + android:layout_width="fill_parent" + android:layout_height="16dip" android:longClickable="true" + android:layout_alignParentLeft="false" + android:layout_alignParentTop="false" + android:layout_alignParentBottom="true" android:id="@+id/status"> + <TextView android:id="@+id/nav_type" + style="@style/location_current_type" + android:textColor="?text_color_grey" /> + <TextView android:id="@+id/nav_accuracy" + style="@style/location_current_accuracy" + android:textColor="?text_color_grey" /> + <TextView android:id="@+id/nav_satellites" + style="@style/location_current_satellites" + android:textColor="?text_color_grey" /> + </RelativeLayout> + </RelativeLayout> + <view class="cgeo.geocaching.ui.CompassView" + android:id="@+id/rose" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:layout_marginTop="6dip" + android:layout_marginBottom="1dip" + android:layout_marginRight="1dip" + android:layout_marginLeft="1dip" + android:layout_gravity="center_vertical" + android:layout_centerInParent="true" + android:keepScreenOn="true" + android:gravity="center" + android:padding="4dip" + android:layout_weight="1"/> + </LinearLayout> +</LinearLayout>
\ No newline at end of file diff --git a/main/res/layout/about.xml b/main/res/layout/about.xml index 13d7c04..39ad8ff 100644 --- a/main/res/layout/about.xml +++ b/main/res/layout/about.xml @@ -17,7 +17,7 @@ android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" - android:layout_height="fill_parent" + android:layout_height="wrap_content" android:layout_marginTop="10dip" android:orientation="vertical" > <LinearLayout diff --git a/main/res/layout/auth.xml b/main/res/layout/auth.xml index d94b08a..ea06d9c 100644 --- a/main/res/layout/auth.xml +++ b/main/res/layout/auth.xml @@ -1,82 +1,85 @@ <?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:orientation="vertical" - android:background="?background_color" > - <LinearLayout style="@style/action_bar"> - <ImageView style="@style/action_bar_action" - android:onClick="goHome" /> - <View style="@style/action_bar_separator" /> - <TextView style="@style/action_bar_title" /> - </LinearLayout> - <ScrollView - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:padding="4dip" - android:orientation="vertical" > - <LinearLayout - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:layout_marginTop="10dip" - android:orientation="vertical" > - <LinearLayout - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="horizontal" - android:padding="7dip" > - <ImageView - android:layout_width="64dip" - android:layout_height="64dip" - android:maxWidth="64dip" - android:maxHeight="64dip" - android:scaleType="fitXY" - android:layout_marginTop="7dip" - android:layout_marginBottom="7dip" - android:layout_marginLeft="7dip" - android:layout_marginRight="7dip" - android:src="@drawable/icon_big" /> - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginLeft="10dip" - android:layout_marginRight="10dip" - android:layout_marginBottom="5dip" - android:layout_gravity="left|center_vertical" - android:gravity="left|center_vertical" - android:textSize="14dip" - android:textColor="?text_color" - android:text="@string/about_auth_1" /> - </LinearLayout> - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginLeft="10dip" - android:layout_marginRight="10dip" - android:layout_marginBottom="5dip" - android:layout_gravity="left|center_vertical" - android:gravity="left|center_vertical" - android:textSize="14dip" - android:textColor="?text_color" - android:text="@string/about_auth_2" /> - <LinearLayout - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="vertical" - android:padding="7dip" > - <Button style="@style/button_full" - android:id="@+id/start" - android:text="@string/auth_authorize" /> - <EditText style="@style/edittext_full" - android:id="@+id/pin" - android:visibility="gone" - android:inputType="number" - android:hint="@string/auth_pin_hint" /> - <Button style="@style/button_full" - android:id="@+id/pin_button" - android:visibility="gone" - android:text="@string/auth_finish" /> - </LinearLayout> - </LinearLayout> - </ScrollView> + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:background="?background_color" + android:orientation="vertical" + android:visibility="visible" > + + <LinearLayout style="@style/action_bar" > + + <ImageView + style="@style/action_bar_action" + android:onClick="goHome"/> + + <View style="@style/action_bar_separator" /> + + <TextView style="@style/action_bar_title" /> + </LinearLayout> + + <ScrollView + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:orientation="vertical" + android:padding="4dip" > + + <LinearLayout + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_marginTop="10dip" + android:orientation="vertical" > + + <TextView + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_gravity="left|center_vertical" + android:layout_marginBottom="20dip" + android:layout_marginLeft="10dip" + android:layout_marginRight="10dip" + android:drawableLeft="@drawable/cgeo" + android:drawablePadding="15dip" + android:gravity="left|center_vertical" + android:text="@string/about_auth_1" + android:textColor="?text_color" + android:textSize="14sp" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="left|center_vertical" + android:layout_marginBottom="5dip" + android:layout_marginLeft="10dip" + android:layout_marginRight="10dip" + android:gravity="left|center_vertical" + android:text="@string/about_auth_2" + android:textColor="?text_color" + android:textSize="14sp" /> + + <LinearLayout + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:padding="7dip" > + + <Button + android:id="@+id/start" + style="@style/button_full" + android:text="@string/auth_authorize" /> + + <EditText + android:id="@+id/pin" + style="@style/edittext_full" + android:hint="@string/auth_pin_hint" + android:inputType="number" + android:visibility="gone" /> + + <Button + android:id="@+id/pin_button" + style="@style/button_full" + android:text="@string/auth_finish" + android:visibility="visible" /> + </LinearLayout> + </LinearLayout> + </ScrollView> + </LinearLayout>
\ No newline at end of file diff --git a/main/res/layout/cacheview.xml b/main/res/layout/cacheview.xml index 2f6f155..b13fc95 100644 --- a/main/res/layout/cacheview.xml +++ b/main/res/layout/cacheview.xml @@ -36,7 +36,7 @@ <android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="fill_parent"
- android:layout_height="wrap_content"
+ android:layout_height="0dp"
android:layout_weight="1" />
<com.viewpagerindicator.TitlePageIndicator
diff --git a/main/res/layout/cacheview_description.xml b/main/res/layout/cacheview_description.xml index 60e70e7..044329b 100644 --- a/main/res/layout/cacheview_description.xml +++ b/main/res/layout/cacheview_description.xml @@ -5,7 +5,7 @@ <LinearLayout
android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="4dip" >
diff --git a/main/res/layout/cacheview_details.xml b/main/res/layout/cacheview_details.xml index 2598fdd..62ee2af 100644 --- a/main/res/layout/cacheview_details.xml +++ b/main/res/layout/cacheview_details.xml @@ -6,7 +6,7 @@ <LinearLayout
android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="4dip" >
diff --git a/main/res/layout/cacheview_waypoints.xml b/main/res/layout/cacheview_waypoints.xml index faf90f5..fc990d5 100644 --- a/main/res/layout/cacheview_waypoints.xml +++ b/main/res/layout/cacheview_waypoints.xml @@ -5,7 +5,7 @@ <LinearLayout
android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="4dip" >
diff --git a/main/res/layout/coords.xml b/main/res/layout/coords.xml index 3adcb2a..21307f7 100644 --- a/main/res/layout/coords.xml +++ b/main/res/layout/coords.xml @@ -1,118 +1,184 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/linearLayout1" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="vertical" - android:background="?background_color"> - <LinearLayout style="@style/action_bar"> - <TextView style="@style/action_bar_title" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/linearLayout1" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:background="?background_color" + android:orientation="vertical" > + + <LinearLayout style="@style/action_bar" > + + <TextView + style="@style/action_bar_title" android:text="@string/cache_coordinates" /> + <View style="@style/action_bar_separator" /> - <ImageView android:id="@+id/actionBarManualbutton" + + <ImageView + android:id="@+id/actionBarManualbutton" style="@style/action_bar_action" android:src="@drawable/actionbar_manual" /> </LinearLayout> - <ScrollView android:id="@+id/scroller" - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:fillViewport="true" > - <LinearLayout android:id="@+id/scroller_child" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="vertical" > - <Spinner android:id="@+id/spinnerCoordinateFormats" - android:layout_width="fill_parent" - android:layout_height="wrap_content" /> - <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/coordTable" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:stretchColumns="0,1,3,5,7" - android:layout_weight="1"> - <TableRow android:id="@+id/tableRow1"> - <Button android:id="@+id/ButtonLat" - style="@style/button_full"/> - <EditText style="@style/edittext_full" - android:id="@+id/EditTextLatDeg" - android:gravity="right" - android:inputType="number" - android:selectAllOnFocus="true" /> - <TextView android:id="@+id/LatSeparator1" - android:text="°" /> - <EditText android:id="@+id/EditTextLatMin" - style="@style/edittext_full" - android:gravity="right" - android:inputType="number" - android:selectAllOnFocus="true" /> - <TextView android:id="@+id/LatSeparator2" - android:text="," /> - <EditText android:id="@+id/EditTextLatSec" - style="@style/edittext_full" - android:gravity="right" - android:inputType="number" - android:selectAllOnFocus="true" /> - <TextView android:id="@+id/LatSeparator3" - android:text="," /> - <EditText android:id="@+id/EditTextLatSecFrac" - style="@style/edittext_full" - android:inputType="number" - android:selectAllOnFocus="true" /> - </TableRow> - <TableRow android:id="@+id/tableRow2"> - <Button android:id="@+id/ButtonLon" - style="@style/button_full"/> - <EditText android:id="@+id/EditTextLonDeg" - style="@style/edittext_full" - android:gravity="right" - android:inputType="number" - android:selectAllOnFocus="true" /> - <TextView android:id="@+id/LonSeparator1" - android:text="°" /> - <EditText android:id="@+id/EditTextLonMin" - style="@style/edittext_full" - android:gravity="right" - android:inputType="number" - android:selectAllOnFocus="true" /> - <TextView android:id="@+id/LonSeparator2" - android:text="," /> - <EditText android:id="@+id/EditTextLonSec" - style="@style/edittext_full" - android:gravity="right" - android:inputType="number" - android:selectAllOnFocus="true" /> - <TextView android:id="@+id/LonSeparator3" - android:text="," /> - <EditText android:id="@+id/EditTextLonSecFrac" - style="@style/edittext_full" - android:inputType="number" - android:selectAllOnFocus="true" /> - </TableRow> - </TableLayout> - <EditText style="@style/edittext_full" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:id="@+id/latitude" - android:hint="@string/latitude" /> - <EditText style="@style/edittext_full" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:id="@+id/longitude" - android:hint="@string/longitude" /> - <Button style="@style/button_full" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:id="@+id/current" - android:text="@string/waypoint_my_coordinates" /> - <Button style="@style/button_full" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:id="@+id/cache" - android:text="@string/waypoint_cache_coordinates" /> - <Button style="@style/button_full" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:id="@+id/done" - android:text="@string/waypoint_done" /> - </LinearLayout> + + <ScrollView + android:id="@+id/scroller" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:fillViewport="true" > + + <LinearLayout + android:id="@+id/scroller_child" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="vertical" > + + <Spinner + android:id="@+id/spinnerCoordinateFormats" + android:layout_width="fill_parent" + android:layout_height="wrap_content" /> + + <TableLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/coordTable" + android:layout_width="fill_parent" + android:layout_height="0dp" + android:layout_weight="1" + android:stretchColumns="0,1,3,5,7" > + + <TableRow android:id="@+id/tableRow1" > + + <Button + android:id="@+id/ButtonLat" + style="@style/button_full" /> + + <EditText + android:id="@+id/EditTextLatDeg" + style="@style/edittext_full" + android:gravity="right" + android:inputType="number" + android:selectAllOnFocus="true" /> + + <TextView + android:id="@+id/LatSeparator1" + android:text="°" + tools:ignore="HardcodedText" /> + + <EditText + android:id="@+id/EditTextLatMin" + style="@style/edittext_full" + android:gravity="right" + android:inputType="number" + android:selectAllOnFocus="true" /> + + <TextView + android:id="@+id/LatSeparator2" + android:text="," + tools:ignore="HardcodedText" /> + + <EditText + android:id="@+id/EditTextLatSec" + style="@style/edittext_full" + android:gravity="right" + android:inputType="number" + android:selectAllOnFocus="true" /> + + <TextView + android:id="@+id/LatSeparator3" + android:text="," + tools:ignore="HardcodedText" /> + + <EditText + android:id="@+id/EditTextLatSecFrac" + style="@style/edittext_full" + android:inputType="number" + android:selectAllOnFocus="true" /> + </TableRow> + + <TableRow android:id="@+id/tableRow2" > + + <Button + android:id="@+id/ButtonLon" + style="@style/button_full" /> + + <EditText + android:id="@+id/EditTextLonDeg" + style="@style/edittext_full" + android:gravity="right" + android:inputType="number" + android:selectAllOnFocus="true" /> + + <TextView + android:id="@+id/LonSeparator1" + android:text="°" + tools:ignore="HardcodedText" /> + + <EditText + android:id="@+id/EditTextLonMin" + style="@style/edittext_full" + android:gravity="right" + android:inputType="number" + android:selectAllOnFocus="true" /> + + <TextView + android:id="@+id/LonSeparator2" + android:text="," + tools:ignore="HardcodedText" /> + + <EditText + android:id="@+id/EditTextLonSec" + style="@style/edittext_full" + android:gravity="right" + android:inputType="number" + android:selectAllOnFocus="true" /> + + <TextView + android:id="@+id/LonSeparator3" + android:text="," + tools:ignore="HardcodedText" /> + + <EditText + android:id="@+id/EditTextLonSecFrac" + style="@style/edittext_full" + android:inputType="number" + android:selectAllOnFocus="true" /> + </TableRow> + </TableLayout> + + <EditText + android:id="@+id/latitude" + style="@style/edittext_full" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:hint="@string/latitude" /> + + <EditText + android:id="@+id/longitude" + style="@style/edittext_full" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:hint="@string/longitude" /> + + <Button + android:id="@+id/current" + style="@style/button_full" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:text="@string/waypoint_my_coordinates" /> + + <Button + android:id="@+id/cache" + style="@style/button_full" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:text="@string/waypoint_cache_coordinates" /> + + <Button + android:id="@+id/done" + style="@style/button_full" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:text="@string/waypoint_done" /> + </LinearLayout> </ScrollView> -</LinearLayout> + +</LinearLayout>
\ No newline at end of file diff --git a/main/res/layout/editor.xml b/main/res/layout/editor.xml index 88b1b10..e07d31f 100644 --- a/main/res/layout/editor.xml +++ b/main/res/layout/editor.xml @@ -8,7 +8,7 @@ <EditText android:id="@+id/editorEditText" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="0dp" android:layout_weight="1" android:inputType="textMultiLine" android:scrollbars="vertical" > diff --git a/main/res/layout/filter_bar.xml b/main/res/layout/filter_bar.xml index 35ee929..9df8f84 100644 --- a/main/res/layout/filter_bar.xml +++ b/main/res/layout/filter_bar.xml @@ -1,10 +1,19 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/filter_bar" - style="@style/filter_bar" - android:visibility="gone"> - <ImageView style="@style/filter_bar_image" - android:src="@drawable/main_filter_default"></ImageView> - <TextView android:id="@+id/filter_text" - style="@style/filter_bar_text"/> + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/filter_bar" + style="@style/filter_bar" + android:onClick="showFilterMenu" + android:visibility="gone" + tools:ignore="UseCompoundDrawables" > <!-- This cannot be done with a compound drawable as there is no easy way to set the size of the image in XML --> + + <ImageView + style="@style/filter_bar_image" + android:src="@drawable/main_filter_default" > + </ImageView> + + <TextView + android:id="@+id/filter_text" + style="@style/filter_bar_text" /> + </LinearLayout>
\ No newline at end of file diff --git a/main/res/layout/init.xml b/main/res/layout/init.xml index 8450ff8..fc425ec 100644 --- a/main/res/layout/init.xml +++ b/main/res/layout/init.xml @@ -21,7 +21,7 @@ android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" - android:layout_height="fill_parent" + android:layout_height="wrap_content" android:layout_marginTop="10dip" android:orientation="vertical" > <!-- ** --> @@ -296,7 +296,6 @@ <CheckBox android:id="@+id/offline_wp" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentLeft="true" android:layout_gravity="left" android:padding="1px" android:gravity="center" /> @@ -527,26 +526,6 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > - <CheckBox android:id="@+id/gnav" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="left" - android:padding="1px" - android:gravity="center" /> - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center_vertical" - android:gravity="left" - android:paddingRight="3dip" - android:textSize="14dip" - android:textColor="?text_color" - android:text="@string/init_nav" /> - </LinearLayout> - <LinearLayout - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="horizontal" > <CheckBox android:id="@+id/livelist" android:layout_width="wrap_content" android:layout_height="wrap_content" diff --git a/main/res/layout/navigate.xml b/main/res/layout/navigate.xml index 94ed7bc..61cfe2a 100644 --- a/main/res/layout/navigate.xml +++ b/main/res/layout/navigate.xml @@ -24,14 +24,12 @@ <TextView android:id="@+id/destination" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_centerHorizontal="true" android:layout_gravity="center" android:textSize="14dip" android:textColor="?text_color"/> <TextView android:id="@+id/cacheinfo" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_centerHorizontal="true" android:layout_gravity="center" android:textSize="14dip" android:textColor="?text_color"/> diff --git a/main/res/layout/popup.xml b/main/res/layout/popup.xml index 9a33c55..201b9e6 100644 --- a/main/res/layout/popup.xml +++ b/main/res/layout/popup.xml @@ -26,55 +26,45 @@ android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" - android:layout_height="fill_parent" + android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:id="@+id/details_list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > </LinearLayout> - <LinearLayout android:id="@+id/more_details_box" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="vertical" > - <Button style="@style/button_small" - android:id="@+id/more_details" - android:text="@string/popup_more" /> - </LinearLayout> - <LinearLayout android:id="@+id/offline_box" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="vertical" > - <RelativeLayout style="@style/separator_horizontal_layout" > - <View style="@style/separator_horizontal" /> - </RelativeLayout> - <RelativeLayout - android:layout_width="fill_parent" - android:layout_height="wrap_content" > - <TextView android:id="@+id/offline_text" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:layout_marginLeft="6dip" - android:layout_marginRight="130dip" - android:layout_alignParentLeft="true" - android:layout_gravity="left" - android:paddingRight="3dip" - android:textSize="14dip" - android:textColor="?text_color" /> - <Button style="@style/button_small" - android:id="@+id/offline_refresh" - android:visibility="gone" - android:layout_width="60dip" - android:layout_marginRight="71dip" - android:layout_alignParentRight="true" - android:text="@string/cache_offline_refresh" /> - <Button style="@style/button_small" - android:id="@+id/offline_store" - android:layout_width="60dip" - android:layout_alignParentRight="true" - android:text="@string/cache_offline_store" /> - </RelativeLayout> - </LinearLayout> + <Button style="@style/button_small" android:id="@+id/more_details" android:text="@string/popup_more" + android:layout_width="fill_parent" android:layout_height="wrap_content" + android:layout_gravity="center_horizontal"/> + <RelativeLayout style="@style/separator_horizontal_layout" > + <View style="@style/separator_horizontal" /> + </RelativeLayout> + <RelativeLayout + android:layout_width="fill_parent" + android:layout_height="wrap_content" > + <TextView android:id="@+id/offline_text" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_marginLeft="6dip" + android:layout_marginRight="130dip" + android:layout_alignParentLeft="true" + android:layout_gravity="left" + android:paddingRight="3dip" + android:textSize="14dip" + android:textColor="?text_color" /> + <Button style="@style/button_small" + android:id="@+id/offline_refresh" + android:visibility="gone" + android:layout_width="60dip" + android:layout_marginRight="71dip" + android:layout_alignParentRight="true" + android:text="@string/cache_offline_refresh" /> + <Button style="@style/button_small" + android:id="@+id/offline_store" + android:layout_width="60dip" + android:layout_alignParentRight="true" + android:text="@string/cache_offline_store" /> + </RelativeLayout> </LinearLayout> </ScrollView> </LinearLayout>
\ No newline at end of file diff --git a/main/res/layout/search.xml b/main/res/layout/search.xml index 9848609..5869962 100644 --- a/main/res/layout/search.xml +++ b/main/res/layout/search.xml @@ -1,125 +1,196 @@ <?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:orientation="vertical" - android:background="?background_color" > - <LinearLayout style="@style/action_bar"> - <ImageView style="@style/action_bar_action" - android:onClick="goHome" /> - <View style="@style/action_bar_separator" /> - <TextView style="@style/action_bar_title" /> - <View style="@style/action_bar_separator" /> - <ImageView style="@style/action_bar_action" - android:src="@drawable/actionbar_manual" - android:onClick="goManual" /> - </LinearLayout> - <ScrollView - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:padding="4dip" - android:orientation="vertical" > - <LinearLayout - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:layout_marginTop="10dip" - android:layout_marginBottom="10dip" - android:orientation="vertical" > - <RelativeLayout style="@style/separator_horizontal_layout" > - <View style="@style/separator_horizontal" /> - <TextView style="@style/separator_horizontal_headline" - android:text="@string/search_coordinates" /> - </RelativeLayout> - <Button style="@style/button_full" - android:hint="@string/latitude" - android:id="@+id/buttonLatitude"/> - <Button style="@style/button_full" - android:hint="@string/longitude" - android:id="@+id/buttonLongitude"/> - <Button style="@style/button_full" - android:id="@+id/search_coordinates" - android:text="@string/search_coordinates_button" /> -<!-- ** --> - <RelativeLayout style="@style/separator_horizontal_layout" > - <View style="@style/separator_horizontal" /> - <TextView style="@style/separator_horizontal_headline" - android:text="@string/search_address" /> - </RelativeLayout> - <EditText style="@style/edittext_full" - android:id="@+id/address" - android:hint="@string/search_address" - android:imeOptions="actionGo" /> - <Button style="@style/button_full" - android:id="@+id/search_address" - android:text="@string/search_address_button" /> -<!-- ** --> - <RelativeLayout style="@style/separator_horizontal_layout" > - <View style="@style/separator_horizontal" /> - <TextView style="@style/separator_horizontal_headline" - android:text="@string/search_gc" /> - </RelativeLayout> - <AutoCompleteTextView style="@style/edittext_full" - android:id="@+id/geocode" - android:hint="@string/search_gc" - android:imeOptions="actionGo" - android:text="GC" - android:inputType="textCapCharacters" /> - <Button style="@style/button_full" - android:id="@+id/display_geocode" - android:text="@string/search_gc_button" /> -<!-- ** --> - <RelativeLayout style="@style/separator_horizontal_layout" > - <View style="@style/separator_horizontal" /> - <TextView style="@style/separator_horizontal_headline" - android:text="@string/search_kw" /> - </RelativeLayout> - <EditText style="@style/edittext_full" - android:id="@+id/keyword" - android:hint="@string/search_kw_prefill" - android:imeOptions="actionGo" /> - <Button style="@style/button_full" - android:id="@+id/search_keyword" - android:text="@string/search_kw_button" /> -<!-- ** --> - <RelativeLayout style="@style/separator_horizontal_layout" > - <View style="@style/separator_horizontal" /> - <TextView style="@style/separator_horizontal_headline" - android:text="@string/search_fbu" /> - </RelativeLayout> - <EditText style="@style/edittext_full" - android:id="@+id/username" - android:hint="@string/search_fbu_prefill" - android:imeOptions="actionGo" /> - <Button style="@style/button_full" - android:id="@+id/search_username" - android:text="@string/search_fbu_button" /> -<!-- ** --> - <RelativeLayout style="@style/separator_horizontal_layout" > - <View style="@style/separator_horizontal" /> - <TextView style="@style/separator_horizontal_headline" - android:text="@string/search_hbu" /> - </RelativeLayout> - <EditText style="@style/edittext_full" - android:id="@+id/owner" - android:hint="@string/search_hbu_prefill" - android:imeOptions="actionGo" /> - <Button style="@style/button_full" - android:id="@+id/search_owner" - android:text="@string/search_hbu_button" /> -<!-- ** --> - <RelativeLayout style="@style/separator_horizontal_layout" > - <View style="@style/separator_horizontal" /> - <TextView style="@style/separator_horizontal_headline" - android:text="@string/search_tb" /> - </RelativeLayout> - <AutoCompleteTextView style="@style/edittext_full" - android:id="@+id/trackable" - android:hint="@string/search_tb_hint" - android:imeOptions="actionGo" - android:inputType="textCapCharacters" /> - <Button style="@style/button_full" - android:id="@+id/display_trackable" - android:text="@string/search_tb_button" /> - </LinearLayout> - </ScrollView> -</LinearLayout> + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:background="?background_color" + android:orientation="vertical" > + + <LinearLayout style="@style/action_bar" > + + <ImageView + style="@style/action_bar_action" + android:onClick="goHome" /> + + <View style="@style/action_bar_separator" /> + + <TextView style="@style/action_bar_title" /> + + <View style="@style/action_bar_separator" /> + + <ImageView + style="@style/action_bar_action" + android:onClick="goManual" + android:src="@drawable/actionbar_manual" /> + </LinearLayout> + + <ScrollView + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:orientation="vertical" + android:padding="4dip" > + + <LinearLayout + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_marginBottom="10dip" + android:layout_marginTop="10dip" + android:orientation="vertical" > + + <RelativeLayout style="@style/separator_horizontal_layout" > + + <View style="@style/separator_horizontal" /> + + <TextView + style="@style/separator_horizontal_headline" + android:text="@string/search_coordinates" /> + </RelativeLayout> + + <Button + android:id="@+id/buttonLatitude" + style="@style/button_full" + android:hint="@string/latitude" /> + + <Button + android:id="@+id/buttonLongitude" + style="@style/button_full" + android:hint="@string/longitude" /> + + <Button + android:id="@+id/search_coordinates" + style="@style/button_full" + android:text="@string/search_coordinates_button" /> + <!-- ** --> + + <RelativeLayout style="@style/separator_horizontal_layout" > + + <View style="@style/separator_horizontal" /> + + <TextView + style="@style/separator_horizontal_headline" + android:text="@string/search_address" /> + </RelativeLayout> + + <EditText + android:id="@+id/address" + style="@style/edittext_full" + android:hint="@string/search_address" + android:imeOptions="actionGo" /> + + <Button + android:id="@+id/search_address" + style="@style/button_full" + android:text="@string/search_address_button" /> + <!-- ** --> + + <RelativeLayout style="@style/separator_horizontal_layout" > + + <View style="@style/separator_horizontal" /> + + <TextView + style="@style/separator_horizontal_headline" + android:text="@string/search_gc" /> + </RelativeLayout> + + <AutoCompleteTextView + android:id="@+id/geocode" + style="@style/edittext_full" + android:hint="@string/search_gc" + android:imeOptions="actionGo" + android:inputType="textCapCharacters" + android:text="GC" + tools:ignore="HardcodedText" /> + + <Button + android:id="@+id/display_geocode" + style="@style/button_full" + android:text="@string/search_gc_button" /> + <!-- ** --> + + <RelativeLayout style="@style/separator_horizontal_layout" > + + <View style="@style/separator_horizontal" /> + + <TextView + style="@style/separator_horizontal_headline" + android:text="@string/search_kw" /> + </RelativeLayout> + + <EditText + android:id="@+id/keyword" + style="@style/edittext_full" + android:hint="@string/search_kw_prefill" + android:imeOptions="actionGo" /> + + <Button + android:id="@+id/search_keyword" + style="@style/button_full" + android:text="@string/search_kw_button" /> + <!-- ** --> + + <RelativeLayout style="@style/separator_horizontal_layout" > + + <View style="@style/separator_horizontal" /> + + <TextView + style="@style/separator_horizontal_headline" + android:text="@string/search_fbu" /> + </RelativeLayout> + + <EditText + android:id="@+id/username" + style="@style/edittext_full" + android:hint="@string/search_fbu_prefill" + android:imeOptions="actionGo" /> + + <Button + android:id="@+id/search_username" + style="@style/button_full" + android:text="@string/search_fbu_button" /> + <!-- ** --> + + <RelativeLayout style="@style/separator_horizontal_layout" > + + <View style="@style/separator_horizontal" /> + + <TextView + style="@style/separator_horizontal_headline" + android:text="@string/search_hbu" /> + </RelativeLayout> + + <EditText + android:id="@+id/owner" + style="@style/edittext_full" + android:hint="@string/search_hbu_prefill" + android:imeOptions="actionGo" /> + + <Button + android:id="@+id/search_owner" + style="@style/button_full" + android:text="@string/search_hbu_button" /> + <!-- ** --> + + <RelativeLayout style="@style/separator_horizontal_layout" > + + <View style="@style/separator_horizontal" /> + + <TextView + style="@style/separator_horizontal_headline" + android:text="@string/search_tb" /> + </RelativeLayout> + + <AutoCompleteTextView + android:id="@+id/trackable" + style="@style/edittext_full" + android:hint="@string/search_tb_hint" + android:imeOptions="actionGo" + android:inputType="textCapCharacters" /> + + <Button + android:id="@+id/display_trackable" + style="@style/button_full" + android:text="@string/search_tb_button" /> + </LinearLayout> + </ScrollView> + +</LinearLayout>
\ No newline at end of file diff --git a/main/res/layout/trackable_detail.xml b/main/res/layout/trackable_detail.xml index 9ffd5cb..4fc34a5 100644 --- a/main/res/layout/trackable_detail.xml +++ b/main/res/layout/trackable_detail.xml @@ -22,7 +22,7 @@ android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" - android:layout_height="fill_parent" + android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:id="@+id/details_list" android:layout_width="fill_parent" diff --git a/main/res/layout/trackable_logs_item.xml b/main/res/layout/trackable_logs_item.xml index d13416a..77f057e 100644 --- a/main/res/layout/trackable_logs_item.xml +++ b/main/res/layout/trackable_logs_item.xml @@ -2,7 +2,8 @@ <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" - android:padding="3dip" > + android:paddingTop="3dip" + android:paddingBottom="3dip" > <TextView android:id="@+id/author" android:layout_width="wrap_content" android:layout_height="wrap_content" @@ -62,9 +63,16 @@ android:ellipsize="marquee" android:textSize="14dip" android:textColor="?text_color_headline" /> - </LinearLayout> - </LinearLayout> - <LinearLayout android:id="@+id/log_layout" + </LinearLayout> + <ImageView android:id="@+id/log_mark" + android:layout_width="2dip" + android:layout_height="fill_parent" + android:layout_marginTop="2dip" + android:layout_marginBottom="2dip" + android:scaleType="fitXY" + android:src="@drawable/mark_green" /> + </LinearLayout> + <LinearLayout android:id="@+id/log_layout" android:layout_height="wrap_content" android:layout_width="fill_parent" android:orientation="vertical" diff --git a/main/res/layout/useful_apps.xml b/main/res/layout/useful_apps.xml index d9dbd62..1d7aecd 100644 --- a/main/res/layout/useful_apps.xml +++ b/main/res/layout/useful_apps.xml @@ -18,7 +18,7 @@ <LinearLayout android:id="@+id/parent" android:layout_width="fill_parent" - android:layout_height="fill_parent" + android:layout_height="wrap_content" android:orientation="vertical" > </LinearLayout> </ScrollView> diff --git a/main/res/layout/visit.xml b/main/res/layout/visit.xml index 8e2f06b..e88c21b 100644 --- a/main/res/layout/visit.xml +++ b/main/res/layout/visit.xml @@ -23,7 +23,7 @@ android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" - android:layout_height="fill_parent" + android:layout_height="wrap_content" android:layout_marginTop="10dip" android:orientation="vertical" > <LinearLayout @@ -131,7 +131,8 @@ android:layout_marginBottom="5dip" android:gravity="right" android:textSize="14dip" - android:text="@string/log_tb_changeall" /> + android:text="@string/log_tb_changeall" + android:layout_height="0dp"/> </LinearLayout> </LinearLayout> </LinearLayout> diff --git a/main/res/values-cs/strings.xml b/main/res/values-cs/strings.xml index bf43a6e..40f724d 100644 --- a/main/res/values-cs/strings.xml +++ b/main/res/values-cs/strings.xml @@ -72,9 +72,6 @@ <string name="log_post_rate">Odeslat log a hlasovat</string> <string name="log_post_no_rate">Odeslat log a nehlasovat</string> <string name="log_add">Přidat</string> - <string name="log_date">Datum</string> - <string name="log_time">Čas</string> - <string name="log_date_time">Datum a čas</string> <string name="log_rating">Hlasovat</string> <string name="log_no_rating">Nehlasovat</string> <string name="log_stars_1">1 hvězdička</string> @@ -111,8 +108,6 @@ <string name="err_missing_auth">nevyplněné uživatelské jméno a/nebo heslo.</string> <string name="err_wrong">uložené přihlašovací údaje jsou špatné</string> <string name="err_license">uživatel nepotvrdil souhlas s licenčním ujednáním serveru Geocaching.com</string> - <string name="err_store">c:geo nemůže uložit keš.</string> - <string name="err_drop">c:geo nemůže smazat keš.</string> <string name="err_detail_open">c:geo nedokáže načíst detaily keše.</string> <string name="err_detail_cache">c:geo nedokáže načíst detaily keše. Je to opravdu keš?</string> <string name="err_detail_cache_find">c:geo nemůže najít keš</string> @@ -123,31 +118,22 @@ <string name="err_detail_cache_forgot_visit">c:geo zapomělo, jakou keš jste pohlížel.</string> <string name="err_detail_no_spoiler">c:geo nenašlo žádný obrázek pro tuto keš.</string> <string name="err_detail_no_map_static">c:geo nenašlo žádnou statickou mapu pro tuto keš.</string> - <string name="err_navigation_no">c:geo nemůže najít žádnou podporovanou navigaci.</string> <string name="err_application_no">c:geo nemůže najít žádnou použitelnou aplikaci.</string> <string name="err_auth_initialize">c:geo nedokázalo zahájit autorizaci.</string> <string name="err_auth_process">Autorizace selhala.</string> <string name="err_cannot_log_visit">c:geo nemá dostatek informací pro zapsání návštěvy. Prosím udělejte to z kompletního detailu keše.</string> <string name="err_init_cleared">c:geo nedokázalo smazat přihlašovací údaje.</string> <string name="err_download_fail">c:geo nemůže načíst keši, protože</string> - <string name="err_list_load_fail">c:geo nemůže načíst seznam keší</string> - <string name="err_store_failed">c:geo nemůže uložit keš</string> - <string name="err_refresh_failed">c:geo nemůže obnovit keš</string> <string name="err_dwld_details_failed">c:geo nemůže stáhnout detaily keše</string> <string name="err_load_descr_failed">c:geo nemůže stáhnout popis keše.</string> <string name="err_location_unknown">c:geo nezná souřadnice keše</string> <string name="err_tb_display">"C:geo nemůže zobrazit trackable. Je to opravdu trackable?</string> <string name="err_tb_details_open">C:geo nemůže otevřít podrobnosti k trackable.</string> - <string name="err_tb_details_download">C:geo nemůže stáhnout podronsti k trackable z důvodu</string> - <string name="err_tb_forgot">C:geo zapomělo, který trackable jste chtěli.</string> <string name="err_tb_forgot_saw">C:geo zapomělo, který trackable jste prohlíželi.</string> <string name="err_tb_find">c:geo nemůže najít trackable.</string> <string name="err_tb_find_that">c:geo nemůže najít toto trackable.</string> <string name="err_waypoint_cache_unknown">c:geo neví k jeké keši chcete přidat bod trasy.</string> - <string name="err_waypoint_unknown">c:geo zapomělo jaký bod trasy chcete zobrazit.</string> <string name="err_waypoint_add_failed">c:geo nemůže přidat bod trasy.</string> - <string name="err_waypoint_load_failed">c:geo nemůže načíst bod trasy.</string> - <string name="err_waypoint_delete_failed">c:geo nemůže smazat bod trasy.</string> <string name="err_point_unknown_position">c:geo neví kde jste.</string> <string name="err_point_no_position_given_title">popis je požadovaný</string> <string name="err_point_no_position_given">Vyplňte alespoň šířku nebo délku nebo vzdálenost a směr. Můžete také vyplnit všechny čtyři pole.</string> @@ -160,7 +146,6 @@ <string name="err_log_load_data_still">c:geo stále načítá data potřebná pro zalogování návštěvy. Prosím počkejte chvilku.</string> <string name="err_log_failed_server">c:geo nemohlo odeslat log, protože server neodpovídá.</string> <string name="err_log_post_failed">c:geo nemohlo odeslat log.</string> - <string name="err_search_address_no_match">c:geo nenašlo žádné odpovídající místo</string> <string name="err_search_address_forgot">c:geo zapomělo adresu, kterou se pokoušíte najít.</string> <string name="err_parse_lat">c:geo nemůže dopočítat šířku.</string> <string name="err_parse_lon">c:geo nemůže dopočítat délku.</string> @@ -267,10 +252,7 @@ <string name="caches_filter_type">Typ</string> <string name="caches_filter_track">Se sledovatelnými předměty</string> <string name="caches_filter_clear">Vymaž filtry</string> - <string name="caches_filter_size_title">Vyber velikost</string> - <string name="caches_filter_type_title">Vyber typ</string> <string name="caches_filter_modified">S upravenými souřadnicemi</string> - <string name="caches_exporting_fieldnote">Exportuji jako Field Notes…</string> <string name="caches_removing_from_history">Mažu z Historie…</string> <!-- caches lists --> @@ -347,7 +329,6 @@ <string name="init_offline_wp">Ukládat statické mapy k waypointům pro offline použití</string> <string name="init_save_log_img">Ulož obrázky z logů</string> <string name="init_units">Používat imperiální jednotky vzdálenosti</string> - <string name="init_nav">Používat Google Navigaci</string> <string name="init_log_offline">Offline logování\n(Při logování nezobrazovat online logovací obrazovku a neodesílat log na server)</string> <string name="init_livelist">Zobrazovat směr v seznamu keší</string> <string name="init_altitude">Výšková korekce</string> @@ -440,7 +421,6 @@ <string name="cache_description">Popis</string> <string name="cache_description_long">Dlouhý popis</string> <string name="cache_description_table_note">Popis obsahuje tabulkové formátování, které je pravděpodobně nutné prohlížet na geocaching.com, aby bylo správně zobrazené.</string> - <string name="cache_watchlist">Watchlist</string> <string name="cache_watchlist_on">Tato je ve vašem watchlistu.</string> <string name="cache_watchlist_not_on">Tato keš není ve vašem watchlistu.</string> <string name="cache_watchlist_add">Přidej na Watchlist</string> @@ -467,7 +447,6 @@ <string name="cache_dialog_refresh_title">Aktualizace</string> <string name="cache_dialog_refresh_message">Aktualizuji detaily keše…</string> <string name="cache_menu_navigate">Navigovat</string> - <string name="cache_menu_tbt">Turn-by-turn</string> <string name="cache_menu_radar">Radar</string> <string name="cache_menu_map">Zobrazit na mapě</string> <string name="cache_menu_map_ext">Zobrazit na jiné mapě</string> @@ -503,7 +482,6 @@ <string name="gpx_import_loading_caches">nahrávání keší z .gpx souboru</string> <string name="gpx_import_loading_waypoints">Načítám soubor s waypointy</string> <string name="gpx_import_store_static_maps">Ukládám statické mapy</string> - <string name="gpx_import_storing">Zapisuji keše do databáze</string> <string name="gpx_import_caches_imported">keše importovány</string> <string name="gpx_import_static_maps_skipped">Stažení statických map zrušeno</string> <string name="gpx_import_title_static_maps">Ulož statické mapy</string> @@ -521,7 +499,6 @@ <string name="map_file_select_title">Vyber mapový soubor</string> <!-- import --> - <string name="import_title">Import…</string> <string name="web_import_title">Import z webu</string> <string name="web_import_waiting">Čekám na nové keše z webu…</string> <string name="web_downloading">Stahuji</string> @@ -531,7 +508,6 @@ <string name="popup_more">více detailů</string> <!-- waypoint --> - <string name="waypoint_title">Bod trasy</string> <string name="waypoint_custom">vlastní</string> <string name="waypoint_my_coordinates">Aktuální poloha</string> <string name="waypoint_bearing">Směr</string> diff --git a/main/res/values-da/strings.xml b/main/res/values-da/strings.xml index 7ff7408..d98a7fe 100644 --- a/main/res/values-da/strings.xml +++ b/main/res/values-da/strings.xml @@ -73,8 +73,6 @@ <string name="err_comm">Ukendt forbindelsesfejl</string> <string name="err_wrong">Fejl i login</string> <string name="err_license">Bruger accepterer betingelser på Geocaching.com</string> - <string name="err_store">Beklager, c:geo kan ikke gemme cachen.</string> - <string name="err_drop">Beklager, c:geo kan ikke slette cachen.</string> <string name="err_detail_open">Beklager, c:geo kan ikke indlæse cachedetaljer.</string> <string name="err_detail_cache">Beklager, c:geo kan ikke vise denne cache.</string> <string name="err_detail_cache_find">Beklager, c:geo kan ikke vise denne cache</string> @@ -82,7 +80,6 @@ <string name="err_detail_cache_forgot">Beklager, c:geo husker ikke hvilken cache du ønskede.</string> <string name="err_detail_no_spoiler">c:geo fandt ingen spoilerbilleder til denne cache.</string> <string name="err_detail_no_map_static">c:geo fandt ingen statiske kort til denne cache.</string> - <string name="err_navigation_no">c:geo kan ikke finde understøttet navigation.</string> <string name="err_application_no">c:geo kan ikke finde en passende applikation.</string> <string name="err_auth_initialize">Beklager, c:geo kan ikke gennemføre godkendelsen.</string> <string name="err_auth_process">Godkendelse fejlede.</string> @@ -150,7 +147,6 @@ <string name="init_disabled">Udelad deaktiverede cacher</string> <string name="init_offline">Gem kort til offlinebrug</string> <string name="init_units">Benyt britiske afstandsmål</string> - <string name="init_nav">Benyt Google Navigation</string> <string name="init_autoload">Auto-indlæs lang cachebeskrivelse</string> <string name="init_livelist">Vis retning til cacher i lister</string> <string name="init_cleared">c:geo slettede login-informationer.</string> @@ -202,7 +198,6 @@ <string name="cache_dialog_refresh_title">Genindlæs</string> <string name="cache_dialog_refresh_message">Genindlæser cachedetaljer…</string> <string name="cache_menu_navigate">Naviger</string> - <string name="cache_menu_tbt">Vejvisning</string> <string name="cache_menu_radar">Radar</string> <string name="cache_menu_map">Vis på kort</string> <string name="cache_menu_map_ext">Vis på ext. kort</string> diff --git a/main/res/values-de/strings.xml b/main/res/values-de/strings.xml index d563608..def9b7d 100644 --- a/main/res/values-de/strings.xml +++ b/main/res/values-de/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<resources> +<resources xmlns:tools="http://schemas.android.com/tools"> <string name="app_name">c:geo</string> <string name="app_name_compass">c:geo Kompass</string> @@ -87,9 +87,6 @@ <string name="log_post_no_rate">Loggen ohne Bewertung</string> <string name="log_post_not_possible">Lade Log-Seite…</string> <string name="log_add">Hinzufügen</string> - <string name="log_date">Datum</string> - <string name="log_time">Uhrzeit</string> - <string name="log_date_time">Datum & Uhrzeit</string> <string name="log_rating">Bewertung</string> <string name="log_no_rating">Keine Bewertung</string> <string name="log_stars_1">1 Stern</string> @@ -139,8 +136,6 @@ <string name="err_license">Die Geocaching.com Nutzungsbedingungen wurden nicht akzeptiert. c:geo kann deshalb keine Koordinaten laden.</string> <string name="err_unpublished">Der aufgerufene Cache ist noch nicht veröffentlicht</string> <string name="err_premium_only">Der Cache ist nur für Premium Mitglieder von Geocaching.com verfügbar</string> - <string name="err_store">c:geo konnte den Cache nicht speichern.</string> - <string name="err_drop">c:geo konnte den Cache nicht löschen.</string> <string name="err_detail_open">c:geo konnte die Cache-Details nicht öffnen.</string> <string name="err_detail_cache">c:geo konnte diesen Cache nicht darstellen. Ist es wirklich ein Cache?</string> <string name="err_detail_cache_find">c:geo konnte keinen Cache finden.</string> @@ -153,20 +148,15 @@ <string name="err_detail_no_spoiler">c:geo hat kein Hinweisbild für diesen Cache gefunden.</string> <string name="err_detail_no_map_static">c:geo hat keine statische Karte für diesen Cache gefunden.</string> <string name="err_detail_not_load_map_static">c:geo konnte die statische Karte nicht laden.</string> - <string name="err_detail_ask_store_map_static">c:geo konnte die statische Karte nicht laden. Jetzt speichern?</string> <string name="err_detail_still_working">Arbeite noch an anderer Aufgabe.</string> <string name="err_watchlist_still_managing">c:geo versucht noch immer die Watchlist zu aktualisieren.</string> <string name="err_watchlist_failed">Ändern der Watchlist nicht erfolgreich.</string> - <string name="err_navigation_no">c:geo konnte keine unterstützte Art der Navigation finden.</string> <string name="err_application_no">c:geo konnte keine passende Anwendung finden.</string> <string name="err_auth_initialize">c:geo konnte die Autorisierung nicht initialisieren.</string> <string name="err_auth_process">Autorisierung fehlgeschlagen.</string> <string name="err_cannot_log_visit">c:geo hat nicht genügend Informationen um den Besuch zu loggen. Bitte über die Cache-Details versuchen.</string> <string name="err_init_cleared">c:geo konnte die Anmeldedaten nicht entfernen.</string> <string name="err_download_fail">c:geo konnte keine Caches laden, weil </string> - <string name="err_list_load_fail">Laden der Cacheliste fehlgeschlagen.</string> - <string name="err_store_failed">Speichern des Caches fehlgeschlagen.</string> - <string name="err_refresh_failed">Aktualisierung fehlgeschlagen.</string> <string name="err_dwld_details_failed">Download der Cache-Details fehlgeschlagen.</string> <string name="err_load_descr_failed">Laden der Cachebeschreibung fehlgeschlagen.</string> <string name="err_location_unknown">c:geo erkennt die Position des Caches nicht.</string> @@ -174,18 +164,12 @@ <string name="err_tb_display">"c:geo kann den gewünschten Trackable nicht anzeigen. Ist es wirklich einer?</string> <string name="err_tb_details_open">c:geo konnte die Details des Trackables nicht öffnen.</string> - <string name="err_tb_details_download">c:geo konnte die Details des Trackables nicht laden, weil</string> - <string name="err_tb_forgot">c:geo hat vergessen, welcher Trackable geöffnet werden sollte.</string> <string name="err_tb_forgot_saw">c:geo hat vergessen, welcher Trackable gesehen wurde.</string> <string name="err_tb_find">c:geo findet den Trackable nicht</string> <string name="err_tb_find_that">c:geo konnte diesen Trackable nicht finden.</string> <string name="err_waypoint_cache_unknown">c:geo weiß nicht, zu welchem Cache der Wegpunkt hinzugefügt werden soll.</string> - <string name="err_waypoint_unknown">c:geo hat vergessen, welcher Wegpunkt angesehen werden sollte.</string> <string name="err_waypoint_add_failed">c:geo konnte den Wegpunkt nicht hinzufügen.</string> - <string name="err_waypoint_load_failed">c:geo konnte den Wegpunkt nicht laden.</string> - <string name="err_waypoint_delete_failed">c:geo konnte den Wegpunkt nicht löschen.</string> - <string name="err_waypoint_open_cache_failed">c:geo konnte die Cachedetails nicht laden.</string> <string name="err_point_unknown_position">c:geo konnte den aktuellen Standort nicht bestimmen.</string> <string name="err_point_no_position_given_title">Info benötigt</string> <string name="err_point_no_position_given">Mindestens Längen- und Breitengrad oder Entfernung und Richtung angeben. Auch alle Angaben sind möglich.</string> @@ -200,15 +184,12 @@ <string name="err_log_failed_server">c:geo konnte Log nicht senden, weil der Server nicht antwortete.</string> <string name="err_log_post_failed">c:geo konnte Log nicht absenden.</string> - <string name="err_search_address_no_match">Keinen passenden Ort gefunden.</string> <string name="err_search_address_forgot">c:geo hat die Adresse vergessen, die gesucht wurde.</string> <string name="err_parse_lat">c:geo konnte den Breitengrad nicht verarbeiten.</string> <string name="err_parse_lon">c:geo konnte den Längengrad nicht verarbeiten.</string> <string name="err_parse_dist">c:geo konnte die Entfernung nicht verarbeiten.</string> <string name="err_parse_lat_lon">c:geo konnte den Breiten- oder Längengrad nicht verarbeiten.</string> - <string name="err_fieldnotes_export_failed">Exportieren der Field-Notes fehlgeschlagen.</string> - <string name="warn_save_nothing">Es gibt nichts zum Speichern.</string> <string name="warn_no_cache_coord">Es gibt hier keinen Cache mit Koordinaten.</string> <string name="warn_no_coordinates">Keine Koordinaten angegeben.</string> @@ -232,7 +213,6 @@ <string name="info_log_cleared">Log wurde geleert.</string> <string name="info_log_type_changed">Logtyp wurde verändert!</string> - <string name="info_fieldnotes_exported_to">Field-Notes exportiert nach</string> <string name="info_storing_static_maps">Versuche, statische Karten zu speichern</string> <!-- location service --> @@ -322,10 +302,7 @@ <string name="caches_filter_type">Typ</string> <string name="caches_filter_track">Mit Trackables</string> <string name="caches_filter_clear">Filter zurücksetzen</string> - <string name="caches_filter_size_title">Größe wählen</string> - <string name="caches_filter_type_title">Typ wählen</string> <string name="caches_filter_modified">Mit geänderten Koordinaten</string> - <string name="caches_exporting_fieldnote">Exportiere als Field-Notes…</string> <string name="caches_removing_from_history">Lösche aus Verlauf…</string> <!-- caches lists --> @@ -403,7 +380,6 @@ <string name="init_offline_wp">Statische Karten zu Wegpunkten für Offline-Verwendung speichern</string> <string name="init_save_log_img">Logbilder abspeichern</string> <string name="init_units">Imperiale Einheiten (Meilen/Fuß)</string> - <string name="init_nav">Google Navigation verwenden</string> <string name="init_log_offline">Offline loggen (Dialog für Online-Log nicht anzeigen)</string> <string name="init_livelist">Richtung zum Cache in der Cache-Liste anzeigen</string> <string name="init_altitude">Höhenkorrektur</string> @@ -427,16 +403,11 @@ <string name="init_mapsources">Kartenherkunft</string> <string name="init_mapsources_description">Hier kann die Quelle der benutzten Karte gewählt werden. Alternativ zu Google Maps stehen verschiedene OpenStreetMap-Stile zur Verfügung und daneben auch Karten-Dateien für die Offline-Nutzung (siehe http://code.google.com/p/mapsforge/ für die Details).\nWeiterhin werden verschiedene Darstellungen(Themes) für Offline-Karten unterstützt.</string> <string name="init_mapsource_select">Kartenquelle wählen</string> - <string name="init_select_themefolder">…</string> - <string name="init_select_gpx_exportdir">…</string> - <string name="init_select_gpx_importdir">…</string> <string name="init_map_directory_description">Verzeichnis mit Offline-Karten</string> <string name="init_gpx_exportdir">Verzeichnis für GPX-Exporte</string> <string name="init_gpx_importdir">Verzeichnis für GPX-Importe</string> <string name="init_gpx_exportdir_description">Hier kann das Verzeichnis für GPX-Exporte gewählt werden.</string> <string name="init_gpx_importdir_description">Hier kann das Verzeichnis für GPX-Importe gewählt werden.</string> - <string name="init_gpx_exportdir_select">Wähle Verzeichnis für GPX-Exporte</string> - <string name="init_gpx_importdir_select">Wähle Verzeichnis für GPX-Importe</string> <string name="init_maptrail">Zeige Spur auf Karte</string> <string name="init_share_after_export">Weiterleiten nach dem Export</string> <string name="init_trackautovisit">Trackables automatisch auf \"besuchen\" setzen</string> @@ -452,7 +423,6 @@ <string name="init_dbonsdcard_title">Datenspeicherung</string> <string name="init_dbonsdcard_note">Die Datenbank von c:geo kann auf eine externe Speicherkarte verschoben werden. Hiermit kann interner Speicher gespart werden, allerdings wird sich die Leistung etwas reduzieren und c:geo funktioniert nicht mehr ohne verfügbare Speicherkarte.</string> <string name="init_dbonsdcard">Datenbank auf externer Karte</string> - <string name="init_dbmove">Verschiebe Datenbank</string> <string name="init_dbmove_dbmove">Verschiebe Datenbank</string> <string name="init_dbmove_running">Verschiebe Datenbank</string> <string name="init_dbmove_success">Die Datenbank wurde erfolgreich verschoben.</string> @@ -521,7 +491,6 @@ <string name="cache_description">Beschreibung</string> <string name="cache_description_long">Ausführliche Beschreibung</string> <string name="cache_description_table_note">Diese Beschreibung enthält Tabellenelemente, die evtl. nur auf Geocaching.com korrekt angezeigt werden.</string> - <string name="cache_watchlist">Watchlist</string> <string name="cache_watchlist_on">Dieser Cache ist auf deiner Watchlist.</string> <string name="cache_watchlist_not_on">Dieser Cache ist nicht auf deiner Watchlist.</string> <string name="cache_watchlist_add">Hinzufügen</string> @@ -562,7 +531,8 @@ <string name="cache_dialog_watchlist_remove_title">Watchlist</string> <string name="cache_dialog_watchlist_remove_message">Entferne den Cache von deiner Watchlist…</string> <string name="cache_menu_navigate">Navigieren</string> - <string name="cache_menu_tbt">Google Maps Navigation</string> + <string name="cache_menu_navigation_drive">Navigation (Fahren)</string> + <string name="cache_menu_navigation_walk">Navigation (Gehen)</string> <string name="cache_menu_radar">Radar</string> <string name="cache_menu_map">Karte</string> <string name="cache_menu_map_static">Statische Karten</string> @@ -610,7 +580,6 @@ <string name="cache_spoiler_images_loading">Lade Hinweisbilder…</string> <string name="cache_log_types">Logs</string> <string name="cache_coordinates_no">Dieser Cache hat keine Koordinaten.</string> - <string name="cache_export_fieldnote">Exportiere als Field-Notes</string> <string name="cache_clear_history">Verlauf leeren</string> <string name="cache_remove_from_history">Aus Verlauf löschen</string> <string name="cache_license">Lizenz</string> @@ -638,7 +607,6 @@ <string name="gpx_import_loading_caches">Lade Caches aus GPX-Datei</string> <string name="gpx_import_loading_waypoints">Lade Wegpunkte aus GPX-Datei</string> <string name="gpx_import_store_static_maps">Schreibe statische Karten</string> - <string name="gpx_import_storing">Schreibe Caches in Datenbank</string> <string name="gpx_import_caches_imported">Caches importiert</string> <string name="gpx_import_static_maps_skipped">Download statischer Karten abgebrochen</string> <string name="gpx_import_title_static_maps">Speichern statischer Karten</string> @@ -658,10 +626,7 @@ <string name="map_file_select_title">Kartendatei wählen</string> <!-- theme file select --> - <string name="theme_file_select_title">Karten-Theme wählen</string> - <!-- import --> - <string name="import_title">Importiere…</string> <string name="web_import_title">Aus dem Internet importieren</string> <string name="web_import_waiting">Warte auf neue Caches aus dem Internet…</string> <string name="web_downloading">Lade herunter</string> @@ -672,7 +637,6 @@ <!-- waypoint --> <string name="waypoint">Wegpunkt</string> - <string name="waypoint_title">Wegpunkt</string> <string name="waypoint_cache_coordinates">Cache Koordinaten</string> <string name="waypoint_custom">Benutzerdefiniert</string> <string name="waypoint_my_coordinates">Meine Koordinaten</string> @@ -686,11 +650,9 @@ <string name="waypoint_note">Notiz</string> <string name="waypoint_save">Speichern</string> <string name="waypoint_loading">Lade Wegpunkt…</string> - <string name="waypoint_unknown_coordinates">Unbekannte Koordinaten</string> <string name="waypoint_done">Fertig</string> <string name="waypoint_duplicate">Duplizieren</string> <string name="waypoint_copy_of">Kopie von</string> - <string name="waypoint_menu_open_cache">Cache öffnen</string> <string name="search_history">Verlauf</string> <string name="search_history_empty">Keine Ziele bisher</string> <string name="search_remove_destination">Ziel gelöscht</string> @@ -828,7 +790,6 @@ <!-- export --> <string name="export">Exportieren</string> - <string name="export_as">Exportieren als…</string> <string name="export_exportedto">exportiert nach</string> <string name="export_failed">Exportieren fehlgeschlagen</string> <string name="export_fieldnotes">Field Notes</string> @@ -1000,11 +961,11 @@ <string name="about_auth_2">Ein Klick auf \"Starte Autorisierung\" öffnet eine Twitter-Seite in einem Browserfenster. Durch die Anmeldung und die Bestätigung wird <b>c:geo</b> ermöglicht, auf den persönlichen Twitter-Account zuzugreifen. Wird dies bestätigt, nennt Twitter eine numerische PIN, diese muss kopiert und in <b>c:geo</b> eingefügt werden. Das ist alles.</string> <!-- status --> - <string name="status_new_release">Neuer Release verfügbar.\nKlicken zum Installieren.</string> - <string name="status_new_nightly">Neuer Nightly Build verfügbar.\nKlicken zum Installieren.</string> - <string name="status_new_rc">Neuer Release Candidate verfügbar.\nKlicken zum Installieren.</string> - <string name="status_geocaching_change">Änderungen auf geocaching.com führen zu Problemen mit c:geo.\nWir arbeiten daran.</string> - <string name="status_geocaching_livemap">Änderungen auf geocaching.com führen zu Problemen mit der Live Map.\nWir arbeiten daran.</string> + <string name="status_new_release" tools:ignore="UnusedResources">Neuer Release verfügbar.\nKlicken zum Installieren.</string> + <string name="status_new_nightly" tools:ignore="UnusedResources">Neuer Nightly Build verfügbar.\nKlicken zum Installieren.</string> + <string name="status_new_rc" tools:ignore="UnusedResources">Neuer Release Candidate verfügbar.\nKlicken zum Installieren.</string> + <string name="status_geocaching_change" tools:ignore="UnusedResources">Änderungen auf geocaching.com führen zu Problemen mit c:geo.\nWir arbeiten daran.</string> + <string name="status_geocaching_livemap" tools:ignore="UnusedResources">Änderungen auf geocaching.com führen zu Problemen mit der Live Map.\nWir arbeiten daran.</string> <string name="clipboard_copy_ok">In Zwischenablage kopiert</string> <plurals name="days_ago"> diff --git a/main/res/values-es/strings.xml b/main/res/values-es/strings.xml index 4fd9a29..f0fe8e1 100644 --- a/main/res/values-es/strings.xml +++ b/main/res/values-es/strings.xml @@ -81,9 +81,6 @@ <string name="log_post_rate">Enviar registro y puntuación</string> <string name="log_post_no_rate">Enviar registro sin puntuar</string> <string name="log_add">Añadir</string> - <string name="log_date">Fecha</string> - <string name="log_time">Hora</string> - <string name="log_date_time">Fecha y hora</string> <string name="log_rating">Puntuación</string> <string name="log_no_rating">Sin puntuación</string> <string name="log_stars_1">1 estrella</string> @@ -121,8 +118,6 @@ <string name="err_missing_auth">Falta nombre de usuario o contraseña.</string> <string name="err_wrong">Información de acceso errónea</string> <string name="err_license">El usuario no ha aceptado las condiciones de Geocaching.com license agreement, por lo que c:geo no puede cargar las coordenadas de los escondites.</string> - <string name="err_store">Lo siento, c:geo no puede almacenar el escondite.</string> - <string name="err_drop">Lo siento, c:geo no puede omitir el escondite.</string> <string name="err_detail_open">Lo siento, c:geo no puede abrir los detalles del escondite.</string> <string name="err_detail_cache">Lo siento, c:geo no puee mostrar el escondite que quieres. ¿Segur que es un geocache?</string> <string name="err_detail_cache_find">Lo siento, c:geo no puede encontrar escondites</string> @@ -136,16 +131,12 @@ <string name="err_detail_not_load_map_static">Lo siento, c:geo no ha podido cargar mapas estáticos.</string> <string name="err_watchlist_still_managing">Seguir gestionando tu lista de seguimiento.</string> <string name="err_watchlist_failed">Error al cambiar la lista de seguimiento.</string> - <string name="err_navigation_no">c:geo no encuentra ninguna navegación soportada.</string> <string name="err_application_no">c:geo no encuentra ninguna aplicación válida.</string> <string name="err_auth_initialize">Lo siento, c:geo no ha podido iniciar el proceso de autorización.</string> <string name="err_auth_process">El proceso de autorización ha fallado.</string> <string name="err_cannot_log_visit">c:geo no tiene información suficiente para registrar la visita. Inténtalo de nuevo con más detalles sobre el escondite.</string> <string name="err_init_cleared">Lo siento, c:geo no puede borrar la información registrada.</string> <string name="err_download_fail">Lo siento, c:geo no ha podido descargar escondites a causa de </string> - <string name="err_list_load_fail">Lo siento, c:geo no ha podido cargar la lista de escondites.</string> - <string name="err_store_failed">Lo siento, c:geo no puede guardar el escondite.</string> - <string name="err_refresh_failed">Lo siento, c:geo no puede actualizar el escondite.</string> <string name="err_dwld_details_failed">Lo siento, c:geo no ha podido descargar los detalles del escondite.</string> <string name="err_load_descr_failed">Lo siento, c:geo no ha podido cargar la descripción.</string> <string name="err_location_unknown">c:geo no conoce la ubicación del escondite.</string> @@ -153,17 +144,12 @@ <string name="err_tb_display">"Lo siento, c:geo no puede mostrar el rastreable que buscas. ¿Es realmente rastreable?</string> <string name="err_tb_details_open">Lo siento, c:geo no puede abrir los detalles del rastreable.</string> - <string name="err_tb_details_download">Lo siento, c:geo no ha podido descargar los detalles del rastreable a causa de</string> - <string name="err_tb_forgot">Lo siento, c:geo ha olvidado qué rastreable quieres.</string> <string name="err_tb_forgot_saw">Lo siento, c:geo ha olvidado qué rastreable has visto.</string> <string name="err_tb_find">Lo siento, c:geo no encuentra el rasteable</string> <string name="err_tb_find_that">Lo siento, c:geo no encuentra ese rastreable.</string> <string name="err_waypoint_cache_unknown">Lo siento, c:geo no sabe a qué escondite quieres añadir un punto de referencia.</string> - <string name="err_waypoint_unknown">Lo siento, c:geo ha olvidado qué punto de referencia quieres visualizar.</string> <string name="err_waypoint_add_failed">Lo siento, c:geo no ha podido añadir tu punto de referencia.</string> - <string name="err_waypoint_load_failed">Lo siento, c:geo no ha podido cargar el punto de referencia.</string> - <string name="err_waypoint_delete_failed">Lo siento, c:geo no puede borrar el punto de referencia.</string> <string name="err_point_unknown_position">Lo siento, c:geo n puedo identificar donde estás.</string> <string name="err_point_no_position_given_title">Información obligatoria</string> <string name="err_point_no_position_given">Rellena como mínimo latitud y longitud o distancia y orientación. También puedes rellenar los cuatro campos.</string> @@ -179,14 +165,11 @@ <string name="err_log_failed_server">Lo siento, c:geo no ha podido enviar el registro porque el servidor no responde.</string> <string name="err_log_post_failed">Lo siento, c:geo no ha podido enviar el registro.</string> - <string name="err_search_address_no_match">Lo siento, c:geo no encuentra ningún lugar coincidente.</string> <string name="err_search_address_forgot">Lo siento, c:geo ha olvidado la dirección que buscabas.</string> <string name="err_parse_lat">Lo siento, c:geo no puede procesar la latitud.</string> <string name="err_parse_lon">Lo siento, c:geo no puede procesar la longitud.</string> <string name="err_parse_dist">Lo siento, c:geo can\'t no puede procesar la distancia.</string> - <string name="err_fieldnotes_export_failed">Eror al exportar notas de campo.</string> - <string name="warn_save_nothing">No hay nada para guardar.</string> <string name="warn_no_cache_coord">No hay escondite con coordenadas.</string> <string name="warn_no_coordinates">No se han dado coordenadas.</string> @@ -208,8 +191,6 @@ <string name="info_log_cleared">Registro borrado.</string> <string name="info_log_type_changed">¡El tipo de registro ha sido cambiado!</string> - <string name="info_fieldnotes_exported_to">Notas de campo exportadas a</string> - <!-- location service --> <string name="loc_last">Última conocida</string> <string name="loc_net">Red</string> @@ -287,9 +268,6 @@ <string name="caches_filter_type">tipo</string> <string name="caches_filter_track">con rastreables</string> <string name="caches_filter_clear">limpiar filtros</string> - <string name="caches_filter_size_title">Indica tamaño</string> - <string name="caches_filter_type_title">Indica tipo</string> - <string name="caches_exporting_fieldnote">Exportando como Notas de campo…</string> <string name="caches_removing_from_history">Borrando del historial…</string> <!-- caches lists --> @@ -351,7 +329,6 @@ <string name="init_offline">Guardar mapas para usar sin conexión</string> <string name="init_save_log_img">Guardar imágenes de los registros</string> <string name="init_units">Usar millas/pies (unidades imperiales)</string> - <string name="init_nav">Usar Google Navigation</string> <string name="init_autoload">Autocargar descripción larga</string> <string name="init_livelist">Mostrar dirección a los escondites en su listado</string> <string name="init_altitude">Corrección de altitud</string> @@ -430,7 +407,6 @@ <string name="cache_log_image_default_title">Foto</string> <string name="cache_personal_note">Nota personal</string> <string name="cache_description">Descripción</string> - <string name="cache_watchlist">Lista de seguimiento</string> <string name="cache_watchlist_on">Este escondite está en tu Lista de seguimiento.</string> <string name="cache_watchlist_not_on">Este escondite no está en tu Lista de seguimiento.</string> <string name="cache_watchlist_add">Añadir a Lista de seguimiento</string> @@ -452,7 +428,6 @@ <string name="cache_dialog_watchlist_remove_title">Lista de seguimiento</string> <string name="cache_dialog_watchlist_remove_message">Borrando escondite de tu Lista de seguimiento…</string> <string name="cache_menu_navigate">Navegar</string> - <string name="cache_menu_tbt">Paso a paso</string> <string name="cache_menu_radar">Radar</string> <string name="cache_menu_map">Ver en mapa</string> <string name="cache_menu_map_static">Mapas estáticos</string> @@ -493,7 +468,6 @@ <string name="cache_spoiler_images_loading">Cargando imágenes reveladoras…</string> <string name="cache_log_types">Tipos de registro</string> <string name="cache_coordinates_no">Este escondite no tiene coordenadas.</string> - <string name="cache_export_fieldnote">Exportar como Notas de campo</string> <string name="cache_clear_history">Borrar historial</string> <string name="cache_remove_from_history">Borrar del historial</string> @@ -514,7 +488,6 @@ <string name="map_file_select_title">Selecciona un mapa</string> <!-- import --> - <string name="import_title">Importar…</string> <string name="web_import_title">Importar de la web</string> <string name="web_import_waiting">Esperando por nuevos escondites desde la web…</string> <string name="web_downloading">Descargando</string> @@ -524,7 +497,6 @@ <string name="popup_more">Más detalles</string> <!-- waypoint --> - <string name="waypoint_title">Punto de referencia</string> <string name="waypoint_custom">A medida</string> <string name="waypoint_my_coordinates">Mis coordenadas</string> <string name="waypoint_bearing">Orientación</string> @@ -537,7 +509,6 @@ <string name="waypoint_note">Nota</string> <string name="waypoint_save">Guardar</string> <string name="waypoint_loading">Cargando punto de referencia…</string> - <string name="waypoint_unknown_coordinates">Coordenadas desconocidas</string> <string name="search_history">Historial</string> <string name="search_history_empty">No hay destinos anteriores</string> <string name="search_remove_destination">Destino borrado</string> diff --git a/main/res/values-fr/strings.xml b/main/res/values-fr/strings.xml index 35e2d8f..41a4600 100644 --- a/main/res/values-fr/strings.xml +++ b/main/res/values-fr/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<resources> +<resources xmlns:tools="http://schemas.android.com/tools"> <string name="app_name">c:geo</string> <string name="app_name_compass">boussole c:geo</string> @@ -88,9 +88,6 @@ <string name="log_post_no_rate">Envoyer & ne pas noter</string> <string name="log_post_not_possible">Chargement de la page…</string> <string name="log_add">Ajouter</string> - <string name="log_date">Date</string> - <string name="log_time">Heure</string> - <string name="log_date_time">Date & heure</string> <string name="log_rating">Note</string> <string name="log_no_rating">Pas de note</string> <string name="log_stars_1">1 étoile</string> @@ -139,8 +136,6 @@ <string name="err_license">L\'utilisateur n\'a pas accepté les termes et les conditions d\'utilisation de Geocaching.com</string> <string name="err_unpublished">La cache a été retirée de la publication</string> <string name="err_premium_only">La cache est réservée aux membres Premium de Geocaching.com</string> - <string name="err_store">c:geo ne peut pas enregister la cache.</string> - <string name="err_drop">c:geo ne peut pas effacer la cache.</string> <string name="err_detail_open">c:geo ne peut pas ouvrir le détail de la cache.</string> <string name="err_detail_cache">c:geo ne peut pas afficher cette cache. Est-ce vraiment une géocache?</string> <string name="err_detail_cache_find">c:geo ne peut pas trouver de caches</string> @@ -153,20 +148,15 @@ <string name="err_detail_no_spoiler">c:geo n\'a pas trouvé d\'image indice pour cette cache.</string> <string name="err_detail_no_map_static">c:geo n\'a pas trouvé de cartes statiques pour cette cache.</string> <string name="err_detail_not_load_map_static">c:geo n\'a pas réussi à charger les cartes statiques.</string> - <string name="err_detail_ask_store_map_static">c:geo n\'a pas réussi à charger les cartes statiques. Les stocker maintenant ?</string> <string name="err_detail_still_working">Autre tâche déjà en cours.</string> <string name="err_watchlist_still_managing">Liste de suivi toujours en traitement.</string> <string name="err_watchlist_failed">Échec lors du changement de votre liste de suivi.</string> - <string name="err_navigation_no">c:geo ne trouve pas de navigation supportée.</string> <string name="err_application_no">c:geo ne trouve pas d\'application conforme.</string> <string name="err_auth_initialize">c:geo a échoué dans la demande d\'autorisation.</string> <string name="err_auth_process">Échec de la demande d\'autorisation.</string> <string name="err_cannot_log_visit">c:geo n\'a pas assez d\'information pour logger votre visite. Faites le depuis le détail de la cache, s\'il vous plait!</string> <string name="err_init_cleared">c:geo ne peux pas effacer votre nom d\'utilisateur.</string> <string name="err_download_fail">c:geo n\'a pas réussi à télécharger les caches car </string> - <string name="err_list_load_fail">c:geo n\'a pas réussi à charger la liste des caches.</string> - <string name="err_store_failed">c:geo ne peut pas enregistrer la cache.</string> - <string name="err_refresh_failed">c:geo ne peut pas rafraîchir la cache.</string> <string name="err_dwld_details_failed">c:geo n\'a pas réussi à télécharger les détails de la cache.</string> <string name="err_load_descr_failed">c:geo ne peut pas charger la description.</string> <string name="err_location_unknown">c:geo ne connait pas la position de la cache.</string> @@ -174,18 +164,12 @@ <string name="err_tb_display">"c:geo ne peut pas afficher l\'objet voyageur demandé. Est-ce vraiment un objet voyageur?</string> <string name="err_tb_details_open">c:geo ne peut pas ouvrir le détail de l\'objet voyageur.</string> - <string name="err_tb_details_download">c:geo ne peut pas télécharger le détail de l\'objet voyageur car </string> - <string name="err_tb_forgot">c:geo a oublié quel objet voyageur vous vouliez.</string> <string name="err_tb_forgot_saw">c:geo a oublié quel objet voyageur vous avez vu.</string> <string name="err_tb_find">c:geo ne peut pas trouver d\'objet voyageur.</string> <string name="err_tb_find_that">c:geo ne peut pas trouver cet objet voyageur.</string> <string name="err_waypoint_cache_unknown">c:geo ne sait pas à quel cache vous voulez ajouter une étape.</string> - <string name="err_waypoint_unknown">c:geo a oublié quel étape vous vouliez afficher.</string> <string name="err_waypoint_add_failed">c:geo n\'a pas réussi à afficher l\'étape.</string> - <string name="err_waypoint_load_failed">c:geo n\'arrive pas à charger l\'étape.</string> - <string name="err_waypoint_delete_failed">c:geo ne peut pas effacer l\'étape.</string> - <string name="err_waypoint_open_cache_failed">c:geo n\'a pas réussi à obtenir les détails de la cache.</string> <string name="err_point_unknown_position">c:geo ne peut pas savoir où vous êtes.</string> <string name="err_point_no_position_given_title">Information obligatoire</string> <string name="err_point_no_position_given">Remplissez au moins la latitude ou la longitude ou la distance et le relèvement. Vous pouvez aussi remplir tous les champs.</string> @@ -200,15 +184,12 @@ <string name="err_log_failed_server">c:geo n\'a pas réussi à charger les données pour enregistrer votre visite car le serveur ne répond pas.</string> <string name="err_log_post_failed">Il semble que votre visite n\'a pas été enregistrée. Veuillez vérifier sur le site geocaching.com.</string> - <string name="err_search_address_no_match">c:geo n\'a pas trouvé de lieu correspondant.</string> <string name="err_search_address_forgot">c:geo a oublié l\'adresse recherchée.</string> <string name="err_parse_lat">c:geo n\'arrive pas à lire la latitude.</string> <string name="err_parse_lon">c:geo n\'arrive pas à lire la longitude.</string> <string name="err_parse_dist">c:geo n\'arrive pas à lire la distance.</string> <string name="err_parse_lat_lon">c:geo n\'arrive pas à lire la latitude ou la longitude.</string> - <string name="err_fieldnotes_export_failed">L\'export du champ Notes a échoué.</string> - <string name="warn_save_nothing">Il n\'y a rien à sauver.</string> <string name="warn_no_cache_coord">Il n\'y pas de caches avec les coordonnées associées.</string> <string name="warn_no_coordinates">Aucune coordonnée associée.</string> @@ -231,7 +212,6 @@ <string name="info_log_cleared">La visite a été effacée.</string> <string name="info_log_type_changed">Le type de visite a changé!</string> - <string name="info_fieldnotes_exported_to">Notes exporté vers</string> <string name="info_storing_static_maps">Sauvegarde des cartes statiques</string> <!-- location service --> @@ -319,10 +299,7 @@ <string name="caches_filter_type">type</string> <string name="caches_filter_track">avec des trackables</string> <string name="caches_filter_clear">effacer les filtres</string> - <string name="caches_filter_size_title">Choisir la taille</string> - <string name="caches_filter_type_title">Choisir le type</string> <string name="caches_filter_modified">Avec les coordonnées modifiées</string> - <string name="caches_exporting_fieldnote">Exporter commme notes de terrain…</string> <string name="caches_removing_from_history">Effacer de l\'historique…</string> <!-- caches lists --> @@ -400,7 +377,6 @@ <string name="init_offline_wp">Enregistrer les cartes autour des points intermédiaires pour une utilisation hors ligne</string> <string name="init_save_log_img">Sauver les images des visites</string> <string name="init_units">Utiliser des unités de distance impériales</string> - <string name="init_nav">Utiliser Google Navigation</string> <string name="init_log_offline">Toujours utiliser le mode hors-ligne, même si connecté.</string> <string name="init_livelist">Afficher la direction des caches dans les listes</string> <string name="init_altitude">Correction de l\'altitude</string> @@ -438,7 +414,6 @@ <string name="init_dbonsdcard_title">Emplacement de la base</string> <string name="init_dbonsdcard_note">La base de données de c:geo peut être enregistrée sur un support externe. En choisissant cette option, vous récupérerez de l\'espace de stockage sur votre appareil au détriment de performances réduites. c:geo ne fonctionnera pas si votre carte SD est absente.</string> <string name="init_dbonsdcard">Base de données sur stockage externe</string> - <string name="init_dbmove">Déplacement de la base de données</string> <string name="init_dbmove_dbmove">Déplacement de la base de données</string> <string name="init_dbmove_running">Déplacement de la base de données</string> <string name="init_dbmove_success">Base de données déplacée</string> @@ -503,7 +478,6 @@ <string name="cache_description">Description</string> <string name="cache_description_long">Description longue</string> <string name="cache_description_table_note">La description contient des informations de formattages qui nécessitent possiblement d\'être vues sur le site geocaching.com pour être affichées correctement.</string> - <string name="cache_watchlist">Liste de suivi</string> <string name="cache_watchlist_on">Cette cache est dans votre liste de suivi.</string> <string name="cache_watchlist_not_on">Cette cache n\'est pas dans votre liste de suivi.</string> <string name="cache_watchlist_add">Ajouter à votre liste de suivi</string> @@ -543,7 +517,6 @@ <string name="cache_dialog_watchlist_remove_title">Liste de suivi</string> <string name="cache_dialog_watchlist_remove_message">Retrait de la cache de votre liste de suivi…</string> <string name="cache_menu_navigate">Navigation</string> - <string name="cache_menu_tbt">Itinéraire</string> <string name="cache_menu_radar">Radar</string> <string name="cache_menu_map">Carte</string> <string name="cache_menu_map_static">Cartes statiques</string> @@ -590,7 +563,6 @@ <string name="cache_spoiler_images_loading">Chargement des images indices…</string> <string name="cache_log_types">Types de visites</string> <string name="cache_coordinates_no">Cette cache n\'a pas de coordonnées.</string> - <string name="cache_export_fieldnote">Export en tant que champ Notes</string> <string name="cache_clear_history">Effacer l\'historique</string> <string name="cache_remove_from_history">Effacer de l\'historique</string> <string name="cache_license">Licence</string> @@ -610,7 +582,6 @@ <string name="gpx_import_loading_caches">Chargement des caches depuis le fichier .gpx</string> <string name="gpx_import_loading_waypoints">Chargement des points intermédiaires depuis le fichier .gpx</string> <string name="gpx_import_store_static_maps">Écriture des cartes statiques</string> - <string name="gpx_import_storing">Écriture des caches dans la base de données\nEnregistrés :</string> <string name="gpx_import_caches_imported">caches importées</string> <string name="gpx_import_static_maps_skipped">Chargement des cartes statiques interrompu</string> <string name="gpx_import_title_static_maps">Enregistrement des cartes statiques</string> @@ -628,7 +599,6 @@ <string name="map_file_select_title">Choisir un fichier carte</string> <!-- import --> - <string name="import_title">Import…</string> <string name="web_import_title">Import depuis le web</string> <string name="web_import_waiting">En attente de nouvelles caches depuis le web…</string> <string name="web_downloading">Téléchargement</string> @@ -639,7 +609,6 @@ <!-- waypoint --> <string name="waypoint">Étape</string> - <string name="waypoint_title">Étape</string> <string name="waypoint_cache_coordinates">Coordonnées de la cache</string> <string name="waypoint_custom">Personnalisé</string> <string name="waypoint_my_coordinates">Ma position</string> @@ -653,11 +622,9 @@ <string name="waypoint_note">Note</string> <string name="waypoint_save">Sauver</string> <string name="waypoint_loading">Chargement d\'une étape…</string> - <string name="waypoint_unknown_coordinates">Coordonnées inconnues</string> <string name="waypoint_done">Ok</string> <string name="waypoint_duplicate">Dupliquer</string> <string name="waypoint_copy_of">Copie de</string> - <string name="waypoint_menu_open_cache">Ouvrir la cache</string> <string name="search_history">Historique</string> <string name="search_history_empty">Aucune destination précédente</string> <string name="search_remove_destination">Destination effacée</string> @@ -792,7 +759,6 @@ <!-- export --> <string name="export">Exporter</string> - <string name="export_as">Exporter en tant que…</string> <string name="export_exportedto">exporté vers</string> <string name="export_failed">Échec de l\'exportation</string> <string name="export_fieldnotes">Notes de terrain</string> @@ -961,11 +927,11 @@ <string name="about_auth_2">Cliquer sur le bouton \"début d\'autorisation\" pour démarrer. Une fenêtre de navigateur va s\'ouvrir pour vous connecter sur Twitter. Accepter pour que <b>c:geo</b> accéde à votre compte. Twitter vous affichera alors une code PIN composé de chiffres. Merci de coller ce code dans <b>c:geo</b> puis confirmer. C\'est tout!</string> <!-- status --> - <string name="status_new_release">Nouvelle version disponible.\nCliquer pour installer.</string> - <string name="status_new_nightly">Nouvelle version de test disponible.\nCliquer pour installer.</string> - <string name="status_new_rc">Nouvelle version candidate disponible.\nCliquer pour installer.</string> - <string name="status_geocaching_change">Des changements récents sur geocaching.com ont cassé c:geo.\nNous sommes en train de nous en occuper.</string> - <string name="status_geocaching_livemap">Des changements récents sur geocaching.com ont cassé la carte active.\nNous sommes en train de nous en occuper.</string> + <string name="status_new_release" tools:ignore="UnusedResources">Nouvelle version disponible.\nCliquer pour installer.</string> + <string name="status_new_nightly" tools:ignore="UnusedResources">Nouvelle version de test disponible.\nCliquer pour installer.</string> + <string name="status_new_rc" tools:ignore="UnusedResources">Nouvelle version candidate disponible.\nCliquer pour installer.</string> + <string name="status_geocaching_change" tools:ignore="UnusedResources">Des changements récents sur geocaching.com ont cassé c:geo.\nNous sommes en train de nous en occuper.</string> + <string name="status_geocaching_livemap" tools:ignore="UnusedResources">Des changements récents sur geocaching.com ont cassé la carte active.\nNous sommes en train de nous en occuper.</string> <string name="clipboard_copy_ok">Copié dans le presse-papiers</string> <plurals name="days_ago"> diff --git a/main/res/values-hu/strings.xml b/main/res/values-hu/strings.xml index 7b3239d..b4f59c7 100644 --- a/main/res/values-hu/strings.xml +++ b/main/res/values-hu/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<resources> +<resources xmlns:tools="http://schemas.android.com/tools"> <string name="app_name">c:geo</string> <string name="app_name_compass">c:geo iránytű</string> @@ -87,9 +87,6 @@ <string name="log_post_no_rate">Log beküldése & nincs értékelés</string> <string name="log_post_not_possible">Log oldal betöltése…</string> <string name="log_add">Hozzáadás</string> - <string name="log_date">Dátum</string> - <string name="log_time">Idő</string> - <string name="log_date_time">Dátum & idő</string> <string name="log_rating">Értékelés</string> <string name="log_no_rating">Nincs értékelés</string> <string name="log_stars_1">1 csillag</string> @@ -139,8 +136,6 @@ <string name="err_license">A felhasználó nem fogadta el a geocaching.com licenszmegállapodását, így a c:geo nem tudja betölteni a ládák koordinátáit.</string> <string name="err_unpublished">A kért geoládát eltávolították.</string> <string name="err_premium_only">Ez a geoláda csak a Geocaching.com prémium felhasználóinak elérhető.</string> - <string name="err_store">Sajnáljuk, a c:geo nem tudja menteni a ládát.</string> - <string name="err_drop">Sajnáljuk, a c:geo nem tudja elvetni a ládát.</string> <string name="err_detail_open">Sajnáljuk, a c:geo nem tudja megnyitni a geoláda részletes adatait.</string> <string name="err_detail_cache">Sajnáljuk, a c:geo nem tudja megmutatni a geoládát amit szeretnél. Biztos hogy ez egy geoláda?</string> <string name="err_detail_cache_find">Sajnáljuk, a c:geo nem találja a geoládát.</string> @@ -153,20 +148,15 @@ <string name="err_detail_no_spoiler">A c:geo nem talált spoiler képeket ehhez a ládához.</string> <string name="err_detail_no_map_static">A c:geo nem talált statikus térképeket ehhez a ládához.</string> <string name="err_detail_not_load_map_static">Sajnáljuk, a c:geo nem tudott betölteni statikus térképeket.</string> - <string name="err_detail_ask_store_map_static">A c:geonak nem sikerült betölteni a statikus térképeket. Mentés?</string> <string name="err_detail_still_working">Egy másik feladat még folyamatban van.</string> <string name="err_watchlist_still_managing">Még folyik a figyelőlista kezelése.</string> <string name="err_watchlist_failed">A figyelőlita megváltoztatása nem sikerült.</string> - <string name="err_navigation_no">A c:geo nem talál semilyen támogatott navigációt.</string> <string name="err_application_no">A c:geo nem talál megfelelő alkalmazást.</string> <string name="err_auth_initialize">Sajnáljuk, a c:geo nem tudta elindítani az engedélyezési eljárást.</string> <string name="err_auth_process">Az engedélyezési eljárás sikertelen.</string> <string name="err_cannot_log_visit">A c:geo-nak nincs elég információja a láda logolásához. Kérlek logold a ládát a teljes láda leírásnál.</string> <string name="err_init_cleared">Sajnáljuk, a c:geo nem tudja törölni a belépési adatokat.</string> <string name="err_download_fail">Sajnáljuk, a c:geo nem tudja letölteni a ládákat, mert </string> - <string name="err_list_load_fail">Sajnáljuk, a c:geo nem tudja betölteni a ládalistát.</string> - <string name="err_store_failed">Sajnáljuk, a c:geo nem tudja elmenteni a geoládát.</string> - <string name="err_refresh_failed">Sajnáljuk, a c:geo nem tudjarefresh geocache.</string> <string name="err_dwld_details_failed">Sajnáljuk, a c:geo nem tudja letölteni a láda adatait.</string> <string name="err_load_descr_failed">Sajnáljuk, a c:geo nem tudja betölteni a leírást.</string> <string name="err_location_unknown">a c:geo nem ismeri a láda helyzetét.</string> @@ -174,18 +164,12 @@ <string name="err_tb_display">Sajnáljuk, a c:geo nem tudja megjeleníteni a nyomonkövethető tárgyat. Biztos, hogy ez egy nyomonkövethető tárgy?</string> <string name="err_tb_details_open">Sajnáljuk, a c:geo nem tudja megnyitni a nyomonkövethető tárgy részleteit.</string> - <string name="err_tb_details_download">Sajnáljuk, a c:geo nem tudta letölteni a nyomonkövethető tárgy részleteit, mert</string> - <string name="err_tb_forgot">Sajnáljuk, a c:geo elfelejtette melyik nyomonkövethető tárgyat szeretnéd.</string> <string name="err_tb_forgot_saw">Sajnáljuk, a c:geo elfelejtette melyik nyomonkövethető tárgyat láttad.</string> <string name="err_tb_find">Sajnáljuk, a c:geo nem találja a nyomonkövethető tárgyat.</string> <string name="err_tb_find_that">Sajnáljuk, a c:geo nem találja azt a követhető tárgyat.</string> <string name="err_waypoint_cache_unknown">Sajnáljuk, a c:geo nem tudja melyik ládához szeretnéd hozzáadni az útpontot.</string> - <string name="err_waypoint_unknown">Sajnáljuk, a c:geo elfelejtette melyik útpontot szeretnéd megjeleníteni.</string> <string name="err_waypoint_add_failed">Sajnáljuk, a c:geo nem tudta hozzáadni az útpontodat.</string> - <string name="err_waypoint_load_failed">Sajnáljuk, a c:geo nem tudta betölteni az útpontot.</string> - <string name="err_waypoint_delete_failed">Sajnáljuk, a c:geo nem tudja törölni az útpontot.</string> - <string name="err_waypoint_open_cache_failed">A c:geo nem tudja megnyitni a geoláda részleteit.</string> <string name="err_point_unknown_position">Sajnáljuk, a c:geo nem tudja felismerni hol vagy.</string> <string name="err_point_no_position_given_title">Információ szükséges</string> <string name="err_point_no_position_given">Írd be legalább a szélességi, hosszúsági, távolsági vagy irány értéket. Megadhatod mind a négyet is.</string> @@ -200,15 +184,12 @@ <string name="err_log_failed_server">Sajnáljuk, a c:geo-nak nem sikerült hozzáadni a logot mert a szerver nem válaszol.</string> <string name="err_log_post_failed">Úgy tűnik a logot nem került hozzáadásra. Kérlek ellenőrizd a geocaching.com-on.</string> - <string name="err_search_address_no_match">Sajnáljuk, a c:geo nem talált eggyező helyet.</string> <string name="err_search_address_forgot">Sajnáljuk, a c:geo elfelejtette a címet amit kerestél.</string> <string name="err_parse_lat">Sajnáljuk, a c:geo nem tudja értelmezni a szélességet.</string> <string name="err_parse_lon">Sajnáljuk, a c:geo nem tudja értelmezni a hosszúságot.</string> <string name="err_parse_dist">Sajnáljuk, a c:geo nem tudja értelmezni a távolságot.</string> <string name="err_parse_lat_lon">Sajnáljuk, a c:geo nem tudja értelmezni a szélességet vagy a hosszúságot.</string> - <string name="err_fieldnotes_export_failed">A terepjegyzetek exportálása sikertelen.</string> - <string name="warn_save_nothing">Nincs semmi amit menteni lehetne.</string> <string name="warn_no_cache_coord">Nincsenek a láda koordináták megadva.</string> <string name="warn_no_coordinates">Nincsenek koordináták.</string> @@ -233,7 +214,6 @@ <string name="info_log_cleared">A bejegyzés törölve.</string> <string name="info_log_type_changed">A bejegyzés típusa megváltoztatva!</string> - <string name="info_fieldnotes_exported_to">A terepfeljegyzések exportálva lettek ide:</string> <string name="info_storing_static_maps">Kísérlet a statikus térképek mentésére.</string> <!-- location service --> @@ -322,10 +302,7 @@ <string name="caches_filter_type">típu</string> <string name="caches_filter_track">nyomonkövethető tárgyak</string> <string name="caches_filter_clear">szűrők törlése</string> - <string name="caches_filter_size_title">Válassz méretet</string> - <string name="caches_filter_type_title">Válassz típust</string> <string name="caches_filter_modified">Módosított koordinátákkal</string> - <string name="caches_exporting_fieldnote">Exportálás terepjegyzetként…</string> <string name="caches_removing_from_history">Eltávolítás a Előzményekből…</string> <!-- caches lists --> @@ -404,7 +381,6 @@ <string name="init_offline_wp">Az útpontok statikus térképeinek mentése offline használathoz</string> <string name="init_save_log_img">Logokban található képek mentése</string> <string name="init_units">Mérföld/láb használata\n(angolszász mértékegységek)</string> - <string name="init_nav">Google Navigáció használata</string> <string name="init_log_offline">Offline logolás használata mindig (ne mutassa az online log ablakot logoláskor, ne küldje el a logot online)</string> <string name="init_livelist">Mutassa a ládák irányát a listában</string> <string name="init_altitude">Magasság korrekció</string> @@ -428,17 +404,11 @@ <string name="init_mapsources">Térkép források</string> <string name="init_mapsources_description">Itt választhatod ki a térképeid forrását. A Google térképek alternatívájaként több OpenStreetMap stílus is hozzáférhető és offline térkép fájlokat is használhatsz. (További információ <a href="http://code.google.com/p/mapsforge/">http://code.google.com/p/mapsforge/</a>).</string> <string name="init_mapsource_select">Válassz térkép forrást</string> - <string name="init_select_themefolder">…</string> <string name="init_map_directory_description">Könyvtár az offline térképekhez</string> - <string name="init_select_map_directory">…</string> - <string name="init_select_gpx_exportdir">…</string> - <string name="init_select_gpx_importdir">…</string> <string name="init_gpx_exportdir">GPX exportálási könyvtár</string> <string name="init_gpx_importdir">GPX importálási könyvtár</string> <string name="init_gpx_exportdir_description">Itt választhatod ki a könyvtárat a GPX exportálásokhoz.</string> <string name="init_gpx_importdir_description">Itt választhatod ki a könyvtárat a GPX importálásokhoz.</string> - <string name="init_gpx_exportdir_select">A GPX exportálási könyvtár kiválasztása</string> - <string name="init_gpx_importdir_select">A GPX importálási könyvtár kiválasztása</string> <string name="init_maptrail">A nyomvonal mutatása a térképen</string> <string name="init_share_after_export">A megosztás menü megnyitása a GPX exportálás után</string> <string name="init_trackautovisit">A nyomonkövethető tárgyak automatikus \"látogatott\" logolása</string> @@ -454,7 +424,6 @@ <string name="init_dbonsdcard_title">Adatbázis helye</string> <string name="init_dbonsdcard_note">Elmentheted az adatbázist a külső eszközön is. Ezzel belső memóriát takaríthatsz meg, de a teljesítmény csökkenhet és a c:geo nem fog tudni működni ha az SD kártya nem hozzáférhető.</string> <string name="init_dbonsdcard">Az adatbázis a külső eszközön</string> - <string name="init_dbmove">Adatbázis mozgatása</string> <string name="init_dbmove_dbmove">Adatbázis mozgatása</string> <string name="init_dbmove_running">Adatbázis mozgatása</string> <string name="init_dbmove_success">Az adatbázis mozgatása sikeresen lezajlott</string> @@ -525,7 +494,6 @@ <string name="cache_description">Leírás</string> <string name="cache_description_long">Hosszú leírás</string> <string name="cache_description_table_note">A leírás táblázatot is tartalmaz aminek helyes megjelenítéséhez szükség lehet a geocaching.com meglátogatására.</string> - <string name="cache_watchlist">Figyelőlista</string> <string name="cache_watchlist_on">Ez a láda a figyelőlistádon van.</string> <string name="cache_watchlist_not_on">Ez a láda nincs a figyelőlistádon.</string> <string name="cache_watchlist_add">Figyelőlistához adás</string> @@ -566,7 +534,6 @@ <string name="cache_dialog_watchlist_remove_title">Figyelőlista</string> <string name="cache_dialog_watchlist_remove_message">Láda eltávolítása a figyelőlistádról…</string> <string name="cache_menu_navigate">Navigáció</string> - <string name="cache_menu_tbt">Lépésről lépésre</string> <string name="cache_menu_radar">Radar</string> <string name="cache_menu_map">Térkép</string> <string name="cache_menu_map_static">Statikus térképek</string> @@ -618,7 +585,6 @@ <string name="cache_images_loading">Képek betéltése…</string> <string name="cache_log_types">Bejegyzés típusok</string> <string name="cache_coordinates_no">Ennek a ládának nincsenek koordinátái.</string> - <string name="cache_export_fieldnote">Exportálás terepjegyzetként</string> <string name="cache_clear_history">Előzmények törlése</string> <string name="cache_remove_from_history">Eltávolítás az előzményekből</string> <string name="cache_license">Licensz</string> @@ -646,7 +612,6 @@ <string name="gpx_import_loading_caches">Geoládák betöltése .gpx fájlból</string> <string name="gpx_import_loading_waypoints">Útpontfájl betöltése</string> <string name="gpx_import_store_static_maps">Statikus térképek mentése</string> - <string name="gpx_import_storing">Geoládák adatbázisba írása</string> <string name="gpx_import_caches_imported">ládák importálva</string> <string name="gpx_import_static_maps_skipped">A statikus térképek letöltése megszakítva.</string> <string name="gpx_import_title_static_maps">Statikus térképek mentése</string> @@ -665,11 +630,7 @@ <!-- map file select --> <string name="map_file_select_title">Térkép fájl kiválasztása</string> - <!-- theme file select --> - <string name="theme_file_select_title">Válaszd ki az egyéni térképtéma fájlját</string> - <!-- import --> - <string name="import_title">Importálás…</string> <string name="web_import_title">Importálás webről</string> <string name="web_import_waiting">Várakozás új ládákra webről…</string> <string name="web_downloading">Letöltés</string> @@ -680,7 +641,6 @@ <!-- waypoint --> <string name="waypoint">Útpont</string> - <string name="waypoint_title">Útpont neve</string> <string name="waypoint_cache_coordinates">Geoláda koordinátái</string> <string name="waypoint_custom">Egyedi</string> <string name="waypoint_my_coordinates">Az én koordinátáim</string> @@ -694,11 +654,9 @@ <string name="waypoint_note">Jegyzet</string> <string name="waypoint_save">Mentés</string> <string name="waypoint_loading">Útpont betöltése…</string> - <string name="waypoint_unknown_coordinates">Ismeretlen koordináták</string> <string name="waypoint_done">Kész</string> <string name="waypoint_duplicate">Duplikálás</string> <string name="waypoint_copy_of">Ennek másolata</string> - <string name="waypoint_menu_open_cache">Geoláda megnyitása</string> <string name="search_history">Előzmény</string> <string name="search_history_empty">Nincsenek előző célpontok</string> <string name="search_remove_destination">Célpont eltávolítva</string> @@ -837,7 +795,6 @@ <!-- export --> <string name="export">Exportálás</string> - <string name="export_as">Exportálás mint…</string> <string name="export_exportedto">exportálva ide</string> <string name="export_failed">Exportálás sikertelen</string> <string name="export_fieldnotes">Helyszíni jegyzetek</string> @@ -1008,11 +965,11 @@ <string name="about_auth_2">Kattints a \"c:geo engedélyezése\" gombra, hogy elindítsd a folyamatot. Ez a folyamat meg fog nyitni egy böngészőt a Twitter weboldallal. Lépj be ezen az oldalon és hagyd jóvá, hogy a <b>c:geo</b> hozzáférjen a felhasználói fiókodhoz. Ha elfogadod, a Twitter mutatni fog egy számokból álló PIN kódot. Ezt a PIN kódot kell a <b>c:geo</b>-ban beillesztened és jóváhagynod. Ilyen egyszerű.</string> <!-- status --> - <string name="status_new_release">Új kiadás található.\nKattints a telepítéshez.</string> - <string name="status_new_nightly">Új napi verzió található.\nKattints a telepítéshez.</string> - <string name="status_new_rc">Új kiadásra jelölt verzió található.\nKattints a telepítéshez.</string> - <string name="status_geocaching_change">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">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_new_release" tools:ignore="UnusedResources">Új kiadás található.\nKattints a telepítéshez.</string> + <string name="status_new_nightly" tools:ignore="UnusedResources">Új napi verzió található.\nKattints a telepítéshez.</string> + <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="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 016d3f6..a60cde2 100644 --- a/main/res/values-it/strings.xml +++ b/main/res/values-it/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<resources> +<resources xmlns:tools="http://schemas.android.com/tools"> <string name="app_name">c:geo</string> <string name="app_name_compass">c:geo bussola</string> @@ -87,9 +87,6 @@ <string name="log_post_no_rate">Invia log senza voto</string> <string name="log_post_not_possible">Connessione…</string> <string name="log_add">Aggiungi</string> - <string name="log_date">Data</string> - <string name="log_time">Ota</string> - <string name="log_date_time">Data e ora</string> <string name="log_rating">Voto</string> <string name="log_no_rating">Nessun voto</string> <string name="log_stars_1">1 stella</string> @@ -139,8 +136,6 @@ <string name="err_license">L\'utente non ha approvato le condizione del Geocaching.com license agreement, così c:geo non può caricare le coordinate dei cache.</string> <string name="err_unpublished">Il cache richiesto è stato ritirato</string> <string name="err_premium_only">Cache disponibile solo per utenti premium di Geocaching.com</string> - <string name="err_store">c:geo non può salvare il cache.</string> - <string name="err_drop">c:geo non può eliminare il cache.</string> <string name="err_detail_open">c:geo non può aprire i dettagli del cache.</string> <string name="err_detail_cache">c:geo non può visualizzare il cache richiesto. È veramente un geocache?</string> <string name="err_detail_cache_find">c:geo non trova il geocache</string> @@ -153,20 +148,15 @@ <string name="err_detail_no_spoiler">c:geo non trova alcuna immagine spoiler per questo cache.</string> <string name="err_detail_no_map_static">c:geo non trova alcuna mappa statica per questo cache.</string> <string name="err_detail_not_load_map_static">c:geo non riesce a caricare la mappe statiche.</string> - <string name="err_detail_ask_store_map_static">c:geo non riesce a caricare la mappa statica. La salvo ora?</string> <string name="err_detail_still_working">Momentaneamente occupato a svolgere un altro compito.</string> <string name="err_watchlist_still_managing">Sto ancora gestendo la tua watchlist.</string> <string name="err_watchlist_failed">La modifica alla tua watchlist è fallita.</string> - <string name="err_navigation_no">c:geo non trova nessun navigatore supportato.</string> <string name="err_application_no">c:geo non trova nessuna applicazione compatibile.</string> <string name="err_auth_initialize">c:geo ha fallito l\'inizializzazione del processo di autorizzazione.</string> <string name="err_auth_process">Processo di autorizzazione fallito.</string> <string name="err_cannot_log_visit">c:geo non ha abbastanza informazioni per salvare il log. Per cortesia effettuarlo dalla pagina dei dettagli completi del cache.</string> <string name="err_init_cleared">c:geo non può cancellare le informazioni di login.</string> <string name="err_download_fail">c:geo ha fallito il download dei cache perché </string> - <string name="err_list_load_fail">c:geo ha fallito il caricamento della lista cache.</string> - <string name="err_store_failed">c:geo non può salvare i geocache.</string> - <string name="err_refresh_failed">c:geo non può aggiornare i geocache.</string> <string name="err_dwld_details_failed">c:geo ha fallito il download dei dettagli del cache.</string> <string name="err_load_descr_failed">c:geo non può caricare la descrizione.</string> <string name="err_location_unknown">c:geo non conosce la posizione dei cache.</string> @@ -174,18 +164,12 @@ <string name="err_tb_display">c:geo non riesce a visualizzare il trackable che vuoi. È veramente un trackable?</string> <string name="err_tb_details_open">c:geo non riesce ad aprire i dettagli del trackable.</string> - <string name="err_tb_details_download">c:geo ha fallito il download dei dettagli del trackable perché </string> - <string name="err_tb_forgot">c:geo ha dimenticato quale trackable volevi.</string> <string name="err_tb_forgot_saw">c:geo ha dimenticato quale trackable vedevi.</string> <string name="err_tb_find">c:geo non trova nessun trackable</string> <string name="err_tb_find_that">c:geo non trova quel trackable.</string> <string name="err_waypoint_cache_unknown">c:geo non conosce a quale cache vuoi aggiungere un waypoint.</string> - <string name="err_waypoint_unknown">c:geo ha dimenticato quale waypoint vuoi visualizzare.</string> <string name="err_waypoint_add_failed">c:geo non è riuscito ad aggiungere il tuo waypoint.</string> - <string name="err_waypoint_load_failed">c:geo non è riuscito a caricare il waypoint.</string> - <string name="err_waypoint_delete_failed">c:geo non riesce a cancellare il waypoint.</string> - <string name="err_waypoint_open_cache_failed">c:geo non riesce ad aprire i dettagli del cache.</string> <string name="err_point_unknown_position">c:geo non capisce dove ti trovi.</string> <string name="err_point_no_position_given_title">Info richieste</string> <string name="err_point_no_position_given">Inserisci almeno latitudine, o longitudine, o distanza e angolo. Puoi anche inserire tutti e quattro i valori.</string> @@ -200,15 +184,12 @@ <string name="err_log_failed_server">c:geo non è riuscito ad inviare il log perché il server non risponde.</string> <string name="err_log_post_failed">Sembra che il log non sia stato inviato. Prego verificare su Geocaching.com.</string> - <string name="err_search_address_no_match">c:geo non ha trovato luoghi corrispondenti.</string> <string name="err_search_address_forgot">c:geo ha dimenticato l\'indirizzo che vuoi trovare.</string> <string name="err_parse_lat">c:geo non riesce ad interpretare la latitudine.</string> <string name="err_parse_lon">c:geo non riesce ad interpretare la longitudine.</string> <string name="err_parse_dist">c:geo non riesce ad interpretare la distanza.</string> <string name="err_parse_lat_lon">c:geo non riesce ad interpretare la latitudine o la longitudine.</string> - <string name="err_fieldnotes_export_failed">Esportazione delle note fallita.</string> - <string name="warn_save_nothing">Non c\'è nulla da salvare.</string> <string name="warn_no_cache_coord">Non ci sono cache con coordinate.</string> <string name="warn_no_coordinates">Coordinate non fornite.</string> @@ -231,7 +212,6 @@ <string name="info_log_cleared">Il log è stato azzerato.</string> <string name="info_log_type_changed">Il tipo di log è cambiato!</string> - <string name="info_fieldnotes_exported_to">Note esportate verso </string> <string name="info_storing_static_maps">Tento di salvare la static map</string> <!-- location service --> @@ -319,10 +299,7 @@ <string name="caches_filter_type">Tipo</string> <string name="caches_filter_track">Con oggetti trackables</string> <string name="caches_filter_clear">Rimuovi filtri</string> - <string name="caches_filter_size_title">Scegli dimensione</string> - <string name="caches_filter_type_title">Scegli tipo</string> <string name="caches_filter_modified">Con coordinate modificate</string> - <string name="caches_exporting_fieldnote">Esportazione Field Notes…</string> <string name="caches_removing_from_history">Rimozione dalla cronologia…</string> <!-- caches lists --> @@ -398,7 +375,6 @@ <string name="init_offline_wp">Salva i waypoints delle mappe per uso offline</string> <string name="init_save_log_img">Salva immagini contenute nei log</string> <string name="init_units">Usa miglia/piedi</string> - <string name="init_nav">Usa Google Navigation</string> <string name="init_log_offline">Quando salvi log, fallo sempre offline (non visualizzerà lo schermo di log online, non invierà subito il log)</string> <string name="init_livelist">Visualizza in che direzione sono i cache, nelle liste</string> <string name="init_altitude">Correzione di altitudine</string> @@ -422,14 +398,10 @@ <string name="init_mapsources">Tipi di mappe</string> <string name="init_mapsources_description">Qui puoi scegliere dove c:geo preleverà le mappe. Come alternativa a Google maps esistono vari stili di OpenStreetMap disponibili anche per uso offline (vedi <a href="http://code.google.com/p/mapsforge/">http://code.google.com/p/mapsforge/</a> per dettagli).</string> <string name="init_mapsource_select">Seleziona il tipo di mappa</string> - <string name="init_select_gpx_exportdir">…</string> - <string name="init_select_gpx_importdir">…</string> <string name="init_gpx_exportdir">Cartella di export GPX</string> <string name="init_gpx_importdir">Cartella di import GPX</string> <string name="init_gpx_exportdir_description">Qui puoi selezionare la cartella di esportazione GPX.</string> <string name="init_gpx_importdir_description">Qui puoi selezionare la cartella di importazione GPX.</string> - <string name="init_gpx_exportdir_select">Scegli la cartella di esportazione GPX</string> - <string name="init_gpx_importdir_select">Scegli la cartella di esportazione GPX</string> <string name="init_maptrail">Mostra la scia nella Mappa</string> <string name="init_share_after_export">Apri menu condividi dopo export GPX</string> <string name="init_trackautovisit">Setta i miei oggetti Trackables automaticamente su \"visit\" quando invio log</string> @@ -446,7 +418,6 @@ <string name="init_dbonsdcard_title">Posizione Database</string> <string name="init_dbonsdcard_note">Puoi decidere di salvare il database su memoria esterna. In questo caso risparmierai memoria interna ma potresti perdere un pochino di velocità e c:geo non funzionerà se la tua sdcard non sarà disponibile.</string> <string name="init_dbonsdcard">Database su memoria esterna</string> - <string name="init_dbmove">Spostamento Database</string> <string name="init_dbmove_dbmove">Spostamento Database</string> <string name="init_dbmove_running">Spostamento Database</string> <string name="init_dbmove_success">Database spostato con successo.</string> @@ -507,7 +478,6 @@ <string name="cache_description">Descrizione</string> <string name="cache_description_long">Descrizione estesa</string> <string name="cache_description_table_note">La descrizione contiene una tabella formattata in modo tale che potresti aver bisogno di andare su geocaching.com per vederla correttamente.</string> - <string name="cache_watchlist">Watchlist</string> <string name="cache_watchlist_on">Questo cache è nella tua watchlist.</string> <string name="cache_watchlist_not_on">Questo cache non è nella tua watchlist.</string> <string name="cache_watchlist_add">Aggiungi alla watchlist</string> @@ -546,7 +516,6 @@ <string name="cache_dialog_watchlist_remove_title">Watchlist</string> <string name="cache_dialog_watchlist_remove_message">Rimozione dei cache dalla tua watchlist…</string> <string name="cache_menu_navigate">Naviga</string> - <string name="cache_menu_tbt">Itinerario guidato</string> <string name="cache_menu_radar">Radar</string> <string name="cache_menu_map">Mappa</string> <string name="cache_menu_map_static">Mappe statiche</string> @@ -594,7 +563,6 @@ <string name="cache_spoiler_images_loading">Caricamento immagini spoiler…</string> <string name="cache_log_types">Tipi di Log</string> <string name="cache_coordinates_no">Questo cache non ha coordinate.</string> - <string name="cache_export_fieldnote">Esporta le note (Field Notes)</string> <string name="cache_clear_history">Cancella cronologia</string> <string name="cache_remove_from_history">Rimuovi dalla cronologia</string> <string name="cache_license">Licenza</string> @@ -619,7 +587,6 @@ <string name="gpx_import_loading_caches">Caricamento dei cache da file GPX</string> <string name="gpx_import_loading_waypoints">Caricamento file waypoints</string> <string name="gpx_import_store_static_maps">Salvataggio mappe statiche</string> - <string name="gpx_import_storing">Salvataggio dei cache nel database</string> <string name="gpx_import_caches_imported">cache importati</string> <string name="gpx_import_static_maps_skipped">Download mappe statiche interrotto</string> <string name="gpx_import_title_static_maps">Salva mappe statiche</string> @@ -639,7 +606,6 @@ <string name="map_file_select_title">Seleziona il file mappa</string> <!-- import --> - <string name="import_title">Importa…</string> <string name="web_import_title">Importa dal web</string> <string name="web_import_waiting">In attesa di nuovi cache dal web…</string> <string name="web_downloading">Download in corso</string> @@ -650,7 +616,6 @@ <!-- waypoint --> <string name="waypoint">Waypoint</string> - <string name="waypoint_title">Waypoint</string> <string name="waypoint_cache_coordinates">Coordinate cache</string> <string name="waypoint_custom">Custom</string> <string name="waypoint_my_coordinates">Coordinate attuali</string> @@ -664,11 +629,9 @@ <string name="waypoint_note">Note</string> <string name="waypoint_save">Salva</string> <string name="waypoint_loading">Caricamento waypoint…</string> - <string name="waypoint_unknown_coordinates">Coordinate sconosciute</string> <string name="waypoint_done">Fatto</string> <string name="waypoint_duplicate">Duplicato</string> <string name="waypoint_copy_of">Copia di</string> - <string name="waypoint_menu_open_cache">Apri Cache</string> <string name="search_history">Cronologia</string> <string name="search_history_empty">Nessuna precedente destinazione</string> <string name="search_remove_destination">Destinazione rimossa</string> @@ -803,7 +766,6 @@ <!-- export --> <string name="export">Esporta</string> - <string name="export_as">Esporta come…</string> <string name="export_exportedto">esportato in</string> <string name="export_failed">Esportazione fallita</string> <string name="export_fieldnotes">Field Note</string> @@ -974,11 +936,11 @@ <string name="about_auth_2">Clicca sul pulsante \"Autorizza c:geo\" per iniziare. Questa procedura aprirà il browser sulla pagina Twitter. Fai Login su questa pagina e autorizza <b>c:geo</b> ad accedere al tuo account. Se accettato, Twitter mostrerà un PIN code numerico. Questo PIN deve essere riportato in <b>c:geo</b> e confermato.</string> <!-- status --> - <string name="status_new_release">Una nuova versione è disponibile.\nClicca per installarla.</string> - <string name="status_new_nightly">Una nuova versione nightly è disponibile.\nClicca per installarla.</string> - <string name="status_new_rc">Una nuova release candidate è disponibile.\nClicca per installarla.</string> - <string name="status_geocaching_change">Modifiche recenti al sito geocaching hanno disattivato c:geo.\nCi stiamo lavorando, riprova più tardi.</string> - <string name="status_geocaching_livemap">Modifiche recenti al sito geocaching hanno disattivato la mappa live.\nCi stiamo lavorando, riprova più tardi.</string> + <string name="status_new_release" tools:ignore="UnusedResources">Una nuova versione è disponibile.\nClicca per installarla.</string> + <string name="status_new_nightly" tools:ignore="UnusedResources">Una nuova versione nightly è disponibile.\nClicca per installarla.</string> + <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="clipboard_copy_ok">Copiato nella clipboard</string> <plurals name="days_ago"> diff --git a/main/res/values-ja/strings.xml b/main/res/values-ja/strings.xml index a8e5ef6..83aae5e 100644 --- a/main/res/values-ja/strings.xml +++ b/main/res/values-ja/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<resources> +<resources xmlns:tools="http://schemas.android.com/tools"> <string name="app_name">c:geo</string> <string name="app_name_compass">c:geo コンパス</string> @@ -87,9 +87,6 @@ <string name="log_post_no_rate">ログの投稿(未評価)</string> <string name="log_post_not_possible">ログのページをロード中…</string> <string name="log_add">挿入</string> - <string name="log_date">日付</string> - <string name="log_time">時間</string> - <string name="log_date_time">日付と時間</string> <string name="log_rating">評価</string> <string name="log_no_rating">未評価</string> <string name="log_stars_1">星1つ</string> @@ -138,8 +135,6 @@ <string name="err_license">Geocaching.comのライセンス契約に同意しなかったのでキャッシュの座標を見ることはできません。</string> <string name="err_unpublished">The requested cache is unpublished.</string> <string name="err_premium_only">このキャッシュはプレミアム会員のみ有効です。</string> - <string name="err_store">キャッシュ情報を保存することができません。</string> - <string name="err_drop">キャッシュ情報を破棄することができません。</string> <string name="err_detail_open">キャッシュの詳細を開くことができません。</string> <string name="err_detail_cache">キャッシュ情報を表示することができません。これは本当にジオキャッシュですか?</string> <string name="err_detail_cache_find">キャッシュ情報が見つかりません。</string> @@ -152,20 +147,15 @@ <string name="err_detail_no_spoiler">このキャッシュのスポイラー画像を見つけることができませんでした。</string> <string name="err_detail_no_map_static">このキャッシュのオフライン地図を見つけることができませんでした。</string> <string name="err_detail_not_load_map_static">オフライン地図のロードに失敗しました。</string> - <string name="err_detail_ask_store_map_static">オフライン地図のロードに失敗しました。再度保存しますか?</string> <string name="err_detail_still_working">他のタスクがまだ動作中です。</string> <string name="err_watchlist_still_managing">Still managing your watchlist.</string> <string name="err_watchlist_failed">ウォッチリストの変更に失敗しました。</string> - <string name="err_navigation_no">使用できるナビゲーションが見つかりません。</string> <string name="err_application_no">適切なアプリケーションが見つかりません。</string> <string name="err_auth_initialize">認証プロセスの初期化に失敗しました。</string> <string name="err_auth_process">認証プロセスに失敗しました。</string> <string name="err_cannot_log_visit">ログを保存するのに十分な情報がありません。キャッシュの詳細を全て入力してください。</string> <string name="err_init_cleared">ログイン情報を消去することができません。</string> <string name="err_download_fail">キャッシュ情報のダウンロードに失敗しました。</string> - <string name="err_list_load_fail">キャッシュリストのロードに失敗しました。</string> - <string name="err_store_failed">キャッシュ情報を保存することができません。</string> - <string name="err_refresh_failed">キャッシュ情報を更新することができません。</string> <string name="err_dwld_details_failed">キャッシュ情報の詳細をダウンロードすることができません。</string> <string name="err_load_descr_failed">キャッシュの説明をロードすることができません。</string> <string name="err_location_unknown">キャッシュの場所が分かりません。</string> @@ -173,18 +163,12 @@ <string name="err_tb_display">トラッカブルアイテムを表示することができません。本当にトラッカブルアイテムですか?</string> <string name="err_tb_details_open">トラッカブルアイテムの詳細を開くことができません。</string> - <string name="err_tb_details_download">トラッカブルアイテムの詳細をダウンロードすることができません。</string> - <string name="err_tb_forgot">c:geo forgot which trackable you want.</string> <string name="err_tb_forgot_saw">c:geo forgot which trackable you saw.</string> <string name="err_tb_find">トラッカブルアイテムが見つかりません。</string> <string name="err_tb_find_that">トラッカブルアイテムが見つかりません。</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_unknown">c:geo forgot what waypoint you want to display.</string> <string name="err_waypoint_add_failed">ウェイポイントを追加することができませんでした。</string> - <string name="err_waypoint_load_failed">ウェイポイントをロードすることができませんでした。</string> - <string name="err_waypoint_delete_failed">ウェイポイントを削除することができません。</string> - <string name="err_waypoint_open_cache_failed">キャッシュの詳細を開くことができません。</string> <string name="err_point_unknown_position">現在地を認識できません。</string> <string name="err_point_no_position_given_title">必要な情報</string> <string name="err_point_no_position_given">少なくとも経度、緯度、または距離と方位を入力してください。全てを入力することもできます。</string> @@ -199,15 +183,12 @@ <string name="err_log_failed_server">サーバの反応がないのでログを投稿することができませんでした。</string> <string name="err_log_post_failed">ログを投稿することができなかったようです。geocaching.comで確認してください。</string> - <string name="err_search_address_no_match">該当する場所が見つかりません。</string> <string name="err_search_address_forgot">c:geo forgot the address you tried to find.</string> <string name="err_parse_lat">緯度の解析ができません。</string> <string name="err_parse_lon">経度の解析ができません。</string> <string name="err_parse_dist">距離の解析ができません。</string> <string name="err_parse_lat_lon">緯度または経度の解析ができません。</string> - <string name="err_fieldnotes_export_failed">フィールドノートのエクスポートに失敗しました。</string> - <string name="warn_save_nothing">保存すべきものがありません。</string> <string name="warn_no_cache_coord">座標のあるキャッシュがありません。</string> <string name="warn_no_coordinates">座標が入力されていません。</string> @@ -231,7 +212,6 @@ <string name="info_log_cleared">ログを消去しました。</string> <string name="info_log_type_changed">ログのタイプを変更しました。</string> - <string name="info_fieldnotes_exported_to">フィールドノートとしてエクスポートしました</string> <string name="info_storing_static_maps">オフライン用に地図を保存中</string> <!-- location service --> @@ -320,10 +300,7 @@ <string name="caches_filter_type">タイプ</string> <string name="caches_filter_track">トラッカブルアイテムあり</string> <string name="caches_filter_clear">フィルターをクリア</string> - <string name="caches_filter_size_title">サイズを選択</string> - <string name="caches_filter_type_title">タイプを選択</string> <string name="caches_filter_modified">座標の更新あり</string> - <string name="caches_exporting_fieldnote">フィールドノートとしてエクスポート中…</string> <string name="caches_removing_from_history">履歴から削除中…</string> <!-- caches lists --> @@ -402,7 +379,6 @@ <string name="init_offline_wp">オフライン用にウェイポイントの地図を保存する</string> <string name="init_save_log_img">オフライン用にログの添付画像を保存する</string> <string name="init_units">距離をマイル/フィートで表示\n(イギリス帝国単位)</string> - <string name="init_nav">Googleマップナビを使う</string> <string name="init_log_offline">ログ書きをオフライン専用にする\n(ログを書く際にオフライン専用にし、オンラインでの投稿をしない。このチェックを外してもオフライン用に保存することは可能です)</string> <string name="init_livelist">キャッシュの一覧で方向をアイコン表示する</string> <string name="init_altitude">標高の修正</string> @@ -426,14 +402,10 @@ <string name="init_mapsources">地図の設定</string> <string name="init_mapsources_description">オンライン地図をGoogleマップからOpenStreetMap(その派生オンライン地図やオフライン地図)に変更できます。詳細は<a href="http://code.google.com/p/mapsforge/">http://code.google.com/p/mapsforge/</a> (英語)をご覧ください。</string> <string name="init_mapsource_select">地図の選択</string> - <string name="init_select_gpx_exportdir">選択…</string> - <string name="init_select_gpx_importdir">選択…</string> <string name="init_gpx_exportdir">GPXエクスポートフォルダ</string> <string name="init_gpx_importdir">GPXインポートフォルダ</string> <string name="init_gpx_exportdir_description">GPXファイルへエクスポートする際の保存先フォルダを選択できます。</string> <string name="init_gpx_importdir_description">GPXファイルへインポートする際の保存先フォルダを選択できます。</string> - <string name="init_gpx_exportdir_select">GPXファイルのエクスポートフォルダを選択</string> - <string name="init_gpx_importdir_select">GPXファイルのインポートフォルダを選択</string> <string name="init_maptrail">地図に軌跡を表示</string> <string name="init_share_after_export">エクスポートした後に共有メニューを表示</string> <string name="init_trackautovisit">「見つけた」ログを書く際に、持っているトラッカブルアイテムを自動的に「訪れた」にする</string> @@ -449,20 +421,11 @@ <string name="init_dbonsdcard_title">データベースの保存場所</string> <string name="init_dbonsdcard_note">c:geoのデータベースを外部メディア(SDカード)に保存することもできます。その場合は端末の内蔵メモリの空き容量は増えますが、c:geoはSDカードなしでは使用できなくなり動作も少し遅くなるかもしれません。</string> <string name="init_dbonsdcard">SDカードにデータベースを保存</string> - <string name="init_dbmove">データベースの移動</string> <string name="init_dbmove_dbmove">データベースの移動</string> <string name="init_dbmove_running">データベースの移動中</string> <string name="init_dbmove_success">データベースを移動しました。</string> <string name="init_dbmove_failed">データベースの移動に失敗しました</string> - <!-- map sources --> - <string-array name="map_sources"> - <item>@string/map_source_google_map</item> - <item>@string/map_source_google_satellite</item> - <item>@string/map_source_osm_mapnik</item> - <item>@string/map_source_osm_cyclemap</item> - <item>@string/map_source_osm_offline</item> - </string-array> <string name="map_source_google_map">Googleマップ:地図</string> <string name="map_source_google_satellite">Googleマップ:航空写真</string> <string name="map_source_osm_mapnik">OpenStreetMap</string> @@ -523,7 +486,6 @@ <string name="cache_description">説明</string> <string name="cache_description_long">全て表示</string> <string name="cache_description_table_note">キャッシュ情報の説明にはhtmlを使ったテーブル表が含まれています。正しく表示するにはブラウザで開く必要があるかもしれません。</string> - <string name="cache_watchlist">ウォッチリスト</string> <string name="cache_watchlist_on">このキャッシュはウォッチリストに登録されています。</string> <string name="cache_watchlist_not_on">このキャッシュはウォッチリストに登録されていません。</string> <string name="cache_watchlist_add">ウォッチリストに追加</string> @@ -563,7 +525,6 @@ <string name="cache_dialog_watchlist_remove_title">ウォッチリスト</string> <string name="cache_dialog_watchlist_remove_message">ウォッチリストから削除中…</string> <string name="cache_menu_navigate">ナビゲーション</string> - <string name="cache_menu_tbt">道順ナビ</string> <string name="cache_menu_radar">レーダー</string> <string name="cache_menu_map">地図で表示</string> <string name="cache_menu_map_static">オフライン地図</string> @@ -611,7 +572,6 @@ <string name="cache_spoiler_images_loading">スポイラー画像をロード中…</string> <string name="cache_log_types">ログタイプ</string> <string name="cache_coordinates_no">このキャッシュに座標値はありません。</string> - <string name="cache_export_fieldnote">フィールドノートとしてエクスポート</string> <string name="cache_clear_history">全履歴を削除</string> <string name="cache_remove_from_history">履歴から削除</string> <string name="cache_license">ライセンス</string> @@ -636,7 +596,6 @@ <string name="gpx_import_loading_caches">GPXファイルからキャッシュをロード中</string> <string name="gpx_import_loading_waypoints">ウェイポイントファイルをロード中</string> <string name="gpx_import_store_static_maps">オフライン地図を保存中</string> - <string name="gpx_import_storing">キャッシュ情報をデータベースに書き込み中</string> <string name="gpx_import_caches_imported">個のキャッシュをインポートしました</string> <string name="gpx_import_static_maps_skipped">オフライン用地図のダウンロードを中止しました</string> <string name="gpx_import_title_static_maps">オフライン用に地図を保存</string> @@ -654,7 +613,6 @@ <string name="map_file_select_title">地図ファイルの選択</string> <!-- import --> - <string name="import_title">インポート…</string> <string name="web_import_title">Webからインポート(Send 2 c:geo経由)</string> <string name="web_import_waiting">Webから新しいキャッシュ情報を確認中…</string> <string name="web_downloading">ダウンロード中</string> @@ -665,7 +623,6 @@ <!-- waypoint --> <string name="waypoint">ウェイポイント</string> - <string name="waypoint_title">ウェイポイント</string> <string name="waypoint_cache_coordinates">キャッシュ座標</string> <string name="waypoint_custom">カスタム</string> <string name="waypoint_my_coordinates">現在地</string> @@ -679,23 +636,15 @@ <string name="waypoint_note">メモ</string> <string name="waypoint_save">保存</string> <string name="waypoint_loading">ウェイポイントをロード中…</string> - <string name="waypoint_unknown_coordinates">座標値が不明</string> <string name="waypoint_done">決定</string> <string name="waypoint_duplicate">複製</string> <string name="waypoint_copy_of">コピー ~ </string> - <string name="waypoint_menu_open_cache">Open Cache</string> <string name="search_history">履歴</string> <string name="search_history_empty">履歴はありません</string> <string name="search_remove_destination">履歴から削除しました</string> <string name="search_clear_history">全履歴を削除</string> <string name="search_history_cleared">全履歴を削除しました</string> - <string-array name="waypoint_coordinate_formats"> - <item>@string/waypoint_coordinate_formats_plain</item> - <item>DDD.DDDDD°</item> - <item>DDD°MM.MMM\'</item> - <item>DDD°MM\'SS.SSS\"</item> - </string-array> <string name="waypoint_coordinate_formats_plain">プレーン</string> <!-- distance units --> @@ -832,7 +781,6 @@ <!-- export --> <string name="export">エクスポート</string> - <string name="export_as">Export as…</string> <string name="export_exportedto">にエクスポートしました</string> <string name="export_failed">エクスポートに失敗しました</string> <string name="export_fieldnotes">フィールドノート</string> @@ -1003,11 +951,11 @@ <string name="about_auth_2">「認証を開始する」ボタンを押すとブラウザでTwitterのページが開きます。そのページにログインすれば<b>c:geo</b>があなたのアカウントにアクセルする許可が得られます。ログインに成功したら数字のPINコードが表示されるので、この下の入力欄にコピー&ペーストして「完了」ボタンを押してください。</string> <!-- status --> - <string name="status_new_release">新しいバージョンがあります。\nクリックしてインストールしてください。</string> - <string name="status_new_nightly">新しいナイトリービルドがあります。\nクリックしてインストールしてください。</string> - <string name="status_new_rc">新しいRCバージョンがあります。\nクリックしてインストールしてください。</string> - <string name="status_geocaching_change">geocaching.comが更新されましたがc:geoはまだ未対応です。\n現在、作業中です。しばらくお待ちください。</string> - <string name="status_geocaching_livemap">geocaching.comが更新されましたがオンライン地図機能はまだ未対応です。\n現在、作業中です。しばらくお待ちください。</string> + <string name="status_new_release" tools:ignore="UnusedResources">新しいバージョンがあります。\nクリックしてインストールしてください。</string> + <string name="status_new_nightly" tools:ignore="UnusedResources">新しいナイトリービルドがあります。\nクリックしてインストールしてください。</string> + <string name="status_new_rc" tools:ignore="UnusedResources">新しいRCバージョンがあります。\nクリックしてインストールしてください。</string> + <string name="status_geocaching_change" tools:ignore="UnusedResources">geocaching.comが更新されましたがc:geoはまだ未対応です。\n現在、作業中です。しばらくお待ちください。</string> + <string name="status_geocaching_livemap" tools:ignore="UnusedResources">geocaching.comが更新されましたがオンライン地図機能はまだ未対応です。\n現在、作業中です。しばらくお待ちください。</string> <string name="clipboard_copy_ok">クリップボードにコピーしました</string> <plurals name="days_ago"> diff --git a/main/res/values-nb/strings.xml b/main/res/values-nb/strings.xml index 6e8435c..b10871e 100644 --- a/main/res/values-nb/strings.xml +++ b/main/res/values-nb/strings.xml @@ -68,9 +68,6 @@ <string name="log_post_rate">Last opp loggen og rangér</string> <string name="log_post_no_rate">Last opp loggen uten å rangere</string> <string name="log_add">Legg til</string> - <string name="log_date">Dato</string> - <string name="log_time">Klokkelsett</string> - <string name="log_date_time">Dato og klokkeslett</string> <string name="log_rating">Rangering</string> <string name="log_no_rating">Ingen rangering</string> <string name="log_stars_1">1 stjerne</string> @@ -94,8 +91,6 @@ <string name="err_missing_auth">Brukernavn eller passord er ikke oppgitt.</string> <string name="err_wrong">Feilaktige innloggings-opplysninger</string> <string name="err_license">Brukeren har ikke akseptert Geocaching.com sin lisens-betingelse, så c:geo kan ikke laste cachens koordinater</string> - <string name="err_store">Beklager, c:geo klarte ikke å lagre cachen.</string> - <string name="err_drop">Beklager, c:geo klarte ikke å slette cachen.</string> <string name="err_detail_open">Beklager, c:geo klarte ikke å finne detaljene.</string> <string name="err_detail_cache">Beklager, c:geo klarte ikke å finne den forespurte cachen. Er du sikker på at den eksisterer?</string> <string name="err_detail_cache_find">Beklager, c:geo klarte ikke å finne geocachen</string> @@ -106,24 +101,18 @@ <string name="err_detail_cache_forgot_visit">Beklager, c:geo glemte hvilken cache du fant.</string> <string name="err_detail_no_spoiler">c:geo fant ingen bilder for denne cachen.</string> <string name="err_detail_no_map_static">c:geo fant ingen statiske kart for denne cachen.</string> - <string name="err_navigation_no">c:geo klarte ikke å finne støttet navigasjon.</string> <string name="err_application_no">c:geo klarte ikke å finne en passende applikasjon.</string> <string name="err_auth_initialize">Beklager, c:geo klarte ikke å igangsette autoriserings-prosessen.</string> <string name="err_auth_process">Autoriserings-prosessen mislyktes.</string> <string name="err_cannot_log_visit">c:geo har ikke nok informasjon til å logge funn. Prøv å laste inn cachens detaljer først.</string> <string name="err_init_cleared">Beklager, c:geo klarte ikke å fjerne innloggings-opplysningene.</string> <string name="err_download_fail">Beklager. c:geo klarte ikke å laste ned cachene p.g.a.</string> - <string name="err_list_load_fail">Beklager, c:geo klarte ikke å laste cache-listen..</string> - <string name="err_store_failed">Beklager, c:geo klarte ikke å lagre cachen.</string> - <string name="err_refresh_failed">Beklager, c:geo klarte ikke å oppdatere cachen.</string> <string name="err_dwld_details_failed">Beklager, c:geo klarte ikke å laste ned cachens detaljer</string> <string name="err_load_descr_failed">Beklager, c:geo klarte ikke å åpne beskrivelsen.</string> <string name="err_location_unknown">c:geo vet ikke hvor cachen er.</string> <string name="err_tb_display">"Beklager, c:geo klarte ikke å finne trackable\'en du etterspurte. Er det virkelig en trackable?</string> <string name="err_tb_details_open">Beklager, c:geo klarte ikke å åpne tracable\'ens detaljer.</string> - <string name="err_tb_details_download">Beklager, c:geo klarte ikke å laste ned trackable\'ens detaljer p.g.a.</string> - <string name="err_tb_forgot">Beklager, c:geo glemte hvilken trackable du etterspurte.</string> <string name="err_tb_forgot_saw">Beklager, c:geo glemte hvilken trackable du oppdaget.</string> <string name="err_tb_find">Beklager, c:geo klarte ikke å finne noen trackable\'er.</string> <string name="err_tb_find_that">Beklager, c:geo kan ikke finne noen trackable\'er</string> @@ -134,7 +123,6 @@ <string name="err_log_failed_server">Beklager, c:geo klarte ikke å logge funnet fordi serveren er nede.</string> <string name="err_log_post_failed">Beklager, c:geo klarte ikke å logge funnet.</string> - <string name="err_search_address_no_match">Beklager, c:geo klarte ikke å finne den forespurte adressen.</string> <string name="err_search_address_forgot">Beklager, c:geo glemte adressen du prøvde å finne.</string> <string name="err_parse_lat">Beklager, c:geo klarte ikke å lese breddegraden.</string> <string name="err_parse_lon">Beklager, c:geo klarte ikke å lese lengdegraden.</string> @@ -230,7 +218,6 @@ <string name="init_disabled">Ekskluder deaktiverte cacher</string> <string name="init_offline">Lagre kartet for offline-bruk (små deler)</string> <string name="init_units">Bruk imperialistiske måleenheter</string> - <string name="init_nav">Bruk Google Navigation</string> <string name="init_autoload">Last full beskrivelse automatisk</string> <string name="init_livelist">Vis cachers retning i listen</string> <string name="init_clear">Ikke husk meg</string> @@ -284,7 +271,6 @@ <string name="cache_dialog_refresh_title">Oppdater</string> <string name="cache_dialog_refresh_message">Laster cachens detaljer på nytt…</string> <string name="cache_menu_navigate">Navigér</string> - <string name="cache_menu_tbt">Punktvis navigasjon</string> <string name="cache_menu_radar">Radar</string> <string name="cache_menu_map">Vis på kartet</string> <string name="cache_menu_map_ext">Vis på utvidet kart</string> diff --git a/main/res/values-nl/strings.xml b/main/res/values-nl/strings.xml index 8013de3..9502d3e 100644 --- a/main/res/values-nl/strings.xml +++ b/main/res/values-nl/strings.xml @@ -87,9 +87,6 @@ <string name="log_post_no_rate">Post log zonder beoordeling</string> <string name="log_post_not_possible">Laden Log Pagina…</string> <string name="log_add">Toevoegen</string> - <string name="log_date">Datum</string> - <string name="log_time">Tijd</string> - <string name="log_date_time">Datum & tijd</string> <string name="log_rating">Beoordeling</string> <string name="log_no_rating">Geen beoordeling</string> <string name="log_stars_1">1 ster</string> @@ -136,8 +133,6 @@ <string name="err_license">Gebruiker heeft de gebruikersvoorwaarden van Geocaching.com niet geaccepteerd.</string> <string name="err_unpublished">De cache is nog niet gepubliceerd</string> <string name="err_premium_only">Deze cache is alleen beschikbaar voor Geocaching.com premium leden.</string> - <string name="err_store">Sorry, c:geo kan de cache niet opslaan.</string> - <string name="err_drop">Sorry, c:geo kan de cache niet wissen.</string> <string name="err_detail_open">Sorry, c:geo kan de geocache details niet openen.</string> <string name="err_detail_cache">Sorry, c:geo kan de gezochte geocache niet weergeven.</string> <string name="err_detail_cache_find">Sorry, c:geo kan de geocache niet vinden.</string> @@ -149,20 +144,15 @@ <string name="err_detail_no_spoiler">c:geo Heeft geen spoiler images gevonden voor deze cache.</string> <string name="err_detail_no_map_static">c:geo Heeft geen statische kaarten gevonden voor deze cache.</string> <string name="err_detail_not_load_map_static">Sorry, c:geo kon de statische kaart niet laden.</string> - <string name="err_detail_ask_store_map_static">c:geo kon statische kaarten niet laden. Nu opslaan?</string> <string name="err_detail_still_working">Nog bezig met een andere (achtergrond)taak.</string> <string name="err_watchlist_still_managing">Bezig je watchlist te beheren.</string> <string name="err_watchlist_failed">Het veranderen van watchlist lukt niet.</string> - <string name="err_navigation_no">c:geo Kan geen ondersteunde navigatie applicatie vinden.</string> <string name="err_application_no">c:geo Kan geen geschikte applicatie vinden.</string> <string name="err_auth_initialize">Sorry, het is c:geo niet gelukt het autorisatie proces te initialiseren.</string> <string name="err_auth_process">Autorisatie proces mislukt.</string> <string name="err_cannot_log_visit">c:geo Heeft onvoldoende informatie om bezoek te loggen. Probeer het vanuit de volledige cache details.</string> <string name="err_init_cleared">Sorry, c:geo kan de inlog informatie niet wissen.</string> <string name="err_download_fail">Sorry, c:geo heeft caches niet kunnen downloaden omdat </string> - <string name="err_list_load_fail">Sorry, c:geo heeft cache lijst niet kunnen laden.</string> - <string name="err_store_failed">Sorry, c:geo kan de geocache niet opslaan.</string> - <string name="err_refresh_failed">Sorry, c:geo kan de geocache niet verversen.</string> <string name="err_dwld_details_failed">Sorry, c:geo kon de cache details niet downloaden.</string> <string name="err_load_descr_failed">Sorry, c:geo kan de omschrijving niet laden.</string> <string name="err_location_unknown">c:geo kent de locatie van de cache niet.</string> @@ -170,18 +160,12 @@ <string name="err_tb_display">Sorry, c:geo kan de gezochte trackable niet weergeven. Is het wel een trackable?</string> <string name="err_tb_details_open">Sorry, c:geo kan de trackable details niet laden.</string> - <string name="err_tb_details_download">Sorry, c:geo kon de trackable details niet downloaden omdat</string> - <string name="err_tb_forgot">Sorry, c:geo is vergeten welke trackable je wilde.</string> <string name="err_tb_forgot_saw">Sorry, c:geo is vergeten welke trackable je gezien hebt.</string> <string name="err_tb_find">Sorry, c:geo kan de trackable niet vinden</string> <string name="err_tb_find_that">Sorry, c:geo kan die trackable niet vinden.</string> <string name="err_waypoint_cache_unknown">Sorry, c:geo weet niet aan welke cache je een waypoint wil toevoegen.</string> - <string name="err_waypoint_unknown">Sorry, c:geo is vergeten welke waypoint je wil laten zien.</string> <string name="err_waypoint_add_failed">Sorry, c:geo kon de waypoint niet toevoegen.</string> - <string name="err_waypoint_load_failed">Sorry, c:geo kon de waypoint niet laden.</string> - <string name="err_waypoint_delete_failed">Sorry, c:geo kan de waypoint niet wissen.</string> - <string name="err_waypoint_open_cache_failed">c:geo kan cachedetails niet openen.</string> <string name="err_point_unknown_position">Sorry, c:geo kan niet bepalen waar je bent.</string> <string name="err_point_no_position_given_title">Info benodigd</string> <string name="err_point_no_position_given">Geef op zijn minst lengte- en breedtegraad of afstand en richting. Of vul alle 4 de velden.</string> @@ -196,15 +180,12 @@ <string name="err_log_failed_server">Sorry, c:geo kon bezoek niet loggen omdat de server niet reageert.</string> <string name="err_log_post_failed">Sorry, het is c:geo niet gelukt het log te posten.</string> - <string name="err_search_address_no_match">Sorry, c:geo heeft geen gelijkende plaats gevonden.</string> <string name="err_search_address_forgot">Sorry, c:geo is het adres dat je zoekt vergeten.</string> <string name="err_parse_lat">Sorry, c:geo kan breedtegraad niet verwerken.</string> <string name="err_parse_lon">Sorry, c:geo kan lengtegraad niet verwerken.</string> <string name="err_parse_dist">Sorry, c:geo kan afstand niet verwerken.</string> <string name="err_parse_lat_lon">Sorry, c:geo kan breedtegraad of lengtegraad niet verwerken.</string> - <string name="err_fieldnotes_export_failed">Exporteren van Field Notes niet gelukt.</string> - <string name="warn_save_nothing">Er is niets op te slaan.</string> <string name="warn_no_cache_coord">Er is geen cache met deze coördinaten.</string> <string name="warn_no_coordinates">Geen coördinaten opgegeven.</string> @@ -225,7 +206,6 @@ <string name="info_log_cleared">Log is gewist.</string> <string name="info_log_type_changed">Type log is gewijzigd!</string> - <string name="info_fieldnotes_exported_to">Field Notes geëxporteerd naar</string> <string name="info_storing_static_maps">Probeer statische kaarten op te slaan</string> <!-- location service --> @@ -310,10 +290,7 @@ <string name="caches_filter_type">type</string> <string name="caches_filter_track">met trackables</string> <string name="caches_filter_clear">maak filters leeg</string> - <string name="caches_filter_size_title">Kies grootte</string> - <string name="caches_filter_type_title">Kies type</string> <string name="caches_filter_modified">Met aangepaste coordinaten</string> - <string name="caches_exporting_fieldnote">Exporteer als Field Notes…</string> <string name="caches_removing_from_history">Verwijderen uit geschiedenis…</string> <!-- caches lists --> @@ -388,7 +365,6 @@ <string name="init_offline_wp">Statische kaarten van waipoints opslaan voor gebruik zonder verbinding</string> <string name="init_save_log_img">Sla afbeeldingen van logs op</string> <string name="init_units">Gebruik imperiale stelsel voor afstanden</string> - <string name="init_nav">Gebruik Google Navigatie</string> <string name="init_log_offline">Als er gelogd word, doe dit altijd offline (Laat het online log scherm niet zien en verzend de log niet)</string> <string name="init_livelist">Toon afstand tot cache in lijst</string> <string name="init_altitude">Hoogte correctie</string> @@ -482,7 +458,6 @@ <string name="cache_description">Omschrijving</string> <string name="cache_description_long">Lange omschrijving</string> <string name="cache_description_table_note">Omschrijving bevat een tabel-layout welke misschien op geocaching.com bekeken moet worden.</string> - <string name="cache_watchlist">Watchlist</string> <string name="cache_watchlist_on">Deze cache komt voor op je watchlist.</string> <string name="cache_watchlist_not_on">Deze cache komt niet voor op je watchlist.</string> <string name="cache_watchlist_add">Voeg aan watchlist toe</string> @@ -516,7 +491,6 @@ <string name="cache_dialog_watchlist_remove_title">Watchlist</string> <string name="cache_dialog_watchlist_remove_message">Verwijder cache van watchlist…</string> <string name="cache_menu_navigate">Navigeer</string> - <string name="cache_menu_tbt">Turn-by-turn</string> <string name="cache_menu_radar">Radar</string> <string name="cache_menu_map">Toon op kaart</string> <string name="cache_menu_map_static">Statische kaarten</string> @@ -562,7 +536,6 @@ <string name="cache_spoiler_images_loading">Spoiler afbeeldingen laden…</string> <string name="cache_log_types">Log types</string> <string name="cache_coordinates_no">Deze cache heeft geen coördinaten.</string> - <string name="cache_export_fieldnote">Exporteer als Field Notes</string> <string name="cache_clear_history">Maak geschiedenis leeg</string> <string name="cache_remove_from_history">Verwijder uit geschiedenis</string> <string name="cache_license">Licentie</string> @@ -582,7 +555,6 @@ <string name="gpx_import_loading_caches">Caches laden van .gpx bestand</string> <string name="gpx_import_loading_waypoints">Waypoints laden van .gpx bestand</string> <string name="gpx_import_store_static_maps">Opslaan statische kaarten</string> - <string name="gpx_import_storing">Opslaan caches in de database</string> <string name="gpx_import_caches_imported">Caches geïmporteerd</string> <string name="gpx_import_static_maps_skipped">Download van statische kaarten afgebroken</string> <string name="gpx_import_title_static_maps">Sla statische kaarten op</string> @@ -600,7 +572,6 @@ <string name="map_file_select_title">Selecteer mapbestand</string> <!-- import --> - <string name="import_title">Import…</string> <string name="web_import_title">Importeer van web</string> <string name="web_import_waiting">Aan het wachten voor nieuwe caches van het web…</string> <string name="web_downloading">Downloading</string> @@ -611,7 +582,6 @@ <!-- waypoint --> <string name="waypoint">Waypoint</string> - <string name="waypoint_title">Waypoint</string> <string name="waypoint_cache_coordinates">Cache coördinaten</string> <string name="waypoint_custom">Aangepast</string> <string name="waypoint_my_coordinates">Mijn coördinaten</string> @@ -625,11 +595,9 @@ <string name="waypoint_note">Notitie</string> <string name="waypoint_save">Opslaan</string> <string name="waypoint_loading">Waypoint laden…</string> - <string name="waypoint_unknown_coordinates">coördinaten niet bekend</string> <string name="waypoint_done">Klaar</string> <string name="waypoint_duplicate">Dubbel</string> <string name="waypoint_copy_of">Kopie van</string> - <string name="waypoint_menu_open_cache">Open Cache</string> <string name="search_history">Geschiedenis</string> <string name="search_history_empty">Geen eerdere bestemmingen</string> <string name="search_remove_destination">Bestemming verwijderd</string> diff --git a/main/res/values-pl/strings.xml b/main/res/values-pl/strings.xml index 3b6b308..8216660 100644 --- a/main/res/values-pl/strings.xml +++ b/main/res/values-pl/strings.xml @@ -81,9 +81,6 @@ <string name="log_post_rate">Wpisz do dziennika & oceń</string> <string name="log_post_no_rate">Wpisz do dziennika & nie oceniaj</string> <string name="log_add">Dodaj</string> - <string name="log_date">Data</string> - <string name="log_time">Godzina</string> - <string name="log_date_time">Data & godzina</string> <string name="log_rating">Ocena</string> <string name="log_no_rating">Bez oceny</string> <string name="log_stars_1">1 gwiazdka</string> @@ -121,8 +118,6 @@ <string name="err_missing_auth">Nie wpisana nazwa użytkownika i/lób hasła.</string> <string name="err_wrong">Niepoprawne dane użytkownika</string> <string name="err_license">Użytkownik nie zgodził się jeszcze z regulaminem serwisu Geocaching.com, c:geo nie jest w stanie załadować współrzędnych.</string> - <string name="err_store">Przepraszam, c:geo nie mógł zapisać skrzynki.</string> - <string name="err_drop">Przepraszam, c:geo nie mógł skasować skrzynki.</string> <string name="err_detail_open">Przepraszam, c:geo nie mógł otworzyć szczegółów skrzynki.</string> <string name="err_detail_cache">Przepraszam, c:geo nie mógł pokazać tobie skrzynki. Czy to jest naprawdę skrzynka?</string> <string name="err_detail_cache_find">Przepraszam, c:geo nie mógł znaleść skrzynki.</string> @@ -136,16 +131,12 @@ <string name="err_detail_not_load_map_static">Przepraszam, c:geo nie mógł załadować statycznej mapki.</string> <string name="err_watchlist_still_managing">Nadal pracuję nad listą obserwowanych.</string> <string name="err_watchlist_failed">c:geo nie mógł zmienić listy obserwowanych.</string> - <string name="err_navigation_no">c:geo nie znalazł żadnych wsparć do nawigacji.</string> <string name="err_application_no">c:geo nie znalazł żadnych odpowiednich aplikacji.</string> <string name="err_auth_initialize">Przepraszam, c:geo nie może zainicjować procesu autoryzacji.</string> <string name="err_auth_process">Proces autoryzacji nie udany.</string> <string name="err_cannot_log_visit">c:geo brakuje informacji aby dodać wpis wizyty. Proszę spróbuj przez szczegóły skrzynki.</string> <string name="err_init_cleared">Przepraszam, c:geo nie może skasować danych logowania.</string> <string name="err_download_fail">Przepraszam, c:geo nie może załadować skrzynki, ponieważ </string> - <string name="err_list_load_fail">Przepraszam, c:geo nie może załadować listy skrzynek.</string> - <string name="err_store_failed">Przepraszam, c:geo nie może zapisać skrzynki.</string> - <string name="err_refresh_failed">Przepraszam, c:geo nie może zaktualizować skrzynki.</string> <string name="err_dwld_details_failed">Przepraszam, c:geo nie może załadować szczegółów skrzynki.</string> <string name="err_load_descr_failed">Przepraszam, c:geo nie może załadować opisu.</string> <string name="err_location_unknown">c:geo nie zna lokalizacji skrzynki.</string> @@ -153,17 +144,12 @@ <string name="err_tb_display">"Przepraszam, c:geo nie może pokazać przedmiotów podróżnych. Czy to rzeczywiście jest przedmiot podróżny?</string> <string name="err_tb_details_open">Przepraszam, c:geo nie może otworzyć szczegółów przedmiotu podróżnego.</string> - <string name="err_tb_details_download">Przepraszam, c:geo nie może otworzyć szczegółów przedmiotu podróżnego, ponieważ</string> - <string name="err_tb_forgot">Przepraszam, c:geo zapomiał jaki przedmiot podróżny chciałeś.</string> <string name="err_tb_forgot_saw">Przepraszam, c:geo zapomiał jaki przedmiot podróżny widziałeś.</string> <string name="err_tb_find">Przepraszam, c:geo nie może znaleźć przedmiotu podróżnego.</string> <string name="err_tb_find_that">Przepraszam, c:geo nie może znaleźć tego przedmiotu podróżnego.</string> <string name="err_waypoint_cache_unknown">Przepraszam, c:geo nie wie do jakiej skrzynki chcesz dodać punkt nawigacji.</string> - <string name="err_waypoint_unknown">Przepraszam, c:geo zapomiał jaki punkt nawigacyjny chciałeś obejrzeć.</string> <string name="err_waypoint_add_failed">Przepraszam, c:geo nie może dodać punktu nawigacyjnego.</string> - <string name="err_waypoint_load_failed">Przepraszam, c:geo nie może załadować punktu nawigacyjnego.</string> - <string name="err_waypoint_delete_failed">Przepraszam, c:geo nie może skasować punktu nawigacyjnego.</string> <string name="err_point_unknown_position">Przepraszam, c:geo nie może określić twojej lokalizacji.</string> <string name="err_point_no_position_given_title">Informacje wymagane</string> <string name="err_point_no_position_given">Wypełnij co najmniej szerokość i długość geograficzną lub odległość i namiar. Można również wypełnić wszystkie cztery pola.</string> @@ -178,14 +164,11 @@ <string name="err_log_failed_server">Przepraszam, c:geo nie może wysłać wpisu ponieważ serwer nie odpowiada.</string> <string name="err_log_post_failed">Przepraszam, c:geo nie mógł dodać wpisu do dziennika.</string> - <string name="err_search_address_no_match">Przepraszam, c:geo nie znalazł pasującego miejsca.</string> <string name="err_search_address_forgot">Przepraszam, c:geo zapomiał jaki adres szukałeś.</string> <string name="err_parse_lat">Przepraszam, c:geo nie może obliczyć szerokości geograficznej.</string> <string name="err_parse_lon">Przepraszam, c:geo nie może obliczyć długości geograficznej.</string> <string name="err_parse_dist">Przepraszam, c:geo nie może obliczyć odległości.</string> - <string name="err_fieldnotes_export_failed">Eksportowanie notatek terenowych nieudane.</string> - <string name="warn_save_nothing">Nie ma nic do zapisania.</string> <string name="warn_no_cache_coord">Nie ma skrzynek z współrzędnymi GPS.</string> <string name="warn_no_coordinates">Nie podane współrzędne.</string> @@ -205,8 +188,6 @@ <string name="info_log_cleared">Wpis został skasowany.</string> <string name="info_log_type_changed">Rodzaj wpisu w dzienniku został zmieniony!</string> - <string name="info_fieldnotes_exported_to">Notatki terenowe eksportowane do</string> - <!-- location service --> <string name="loc_last">Ostatnia pozycja</string> <string name="loc_net">Sieć</string> @@ -283,9 +264,6 @@ <string name="caches_filter_type">typu</string> <string name="caches_filter_track">z przedmiotmi podróżnymi</string> <string name="caches_filter_clear">wykasój filter</string> - <string name="caches_filter_size_title">Wybierz wielkość</string> - <string name="caches_filter_type_title">Wybierz typ</string> - <string name="caches_exporting_fieldnote">Eksportuj jako notatki terenowe…</string> <string name="caches_removing_from_history">Kasuję z historii…</string> <!-- caches lists --> @@ -347,7 +325,6 @@ <string name="init_offline">Zapisuj mampki do użytku offline</string> <string name="init_save_log_img">Zapisz zdjęcia z wpisów</string> <string name="init_units">Używaj angielskich jednostek miary\n(mile)</string> - <string name="init_nav">Używaj Google Navigation</string> <string name="init_autoload">Długie opisy automatycznie ładować</string> <string name="init_log_offline">Podczas logowania, zawsze logój offline (nie pokazój ekranu logowania online, nie wysyłaj logu online)</string> <string name="init_livelist">Pokazuj na liście kierunek do skrzynek</string> @@ -427,7 +404,6 @@ <string name="cache_personal_note">osobista notatka</string> <string name="cache_description">Opis</string> <string name="cache_description_long">Długi opis</string> - <string name="cache_watchlist">Lista obserwowanych</string> <string name="cache_watchlist_on">Ta skrzynka jest na twojej liscie obserwowanych.</string> <string name="cache_watchlist_not_on">Ta skrzynka nie jest na twojej liscie obserwowanych.</string> <string name="cache_watchlist_add">Obserwuj</string> @@ -448,7 +424,6 @@ <string name="cache_dialog_watchlist_remove_title">Lista obserwowanych</string> <string name="cache_dialog_watchlist_remove_message">Usuwam skrzynkę z listy obserwowanych…</string> <string name="cache_menu_navigate">Nawigować</string> - <string name="cache_menu_tbt">Zakręt po zakręcie</string> <string name="cache_menu_radar">Radar</string> <string name="cache_menu_map">Pokaż na mapie</string> <string name="cache_menu_map_static">Statyczna mapa</string> @@ -490,7 +465,6 @@ <string name="cache_spoiler_images_loading">Ładuje zdjęcia spoiler…</string> <string name="cache_log_types">Rodzaj logu</string> <string name="cache_coordinates_no">Ta skrzynka nie ma współrzędnych GPS.</string> - <string name="cache_export_fieldnote">Eksportuj jako notatka terenowa</string> <string name="cache_clear_history">Wykasuj historię</string> <string name="cache_remove_from_history">Usuń z historii</string> @@ -511,7 +485,6 @@ <string name="map_file_select_title">Wybierz plik z mapą</string> <!-- import --> - <string name="import_title">Import…</string> <string name="web_import_title">Import z internetu</string> <string name="web_import_waiting">Czekam na nowe skrzynki z internetu…</string> <string name="web_downloading">Ściąganie</string> @@ -522,7 +495,6 @@ <!-- waypoint --> <string name="waypoint">Punkt nawigacji</string> - <string name="waypoint_title">Punkt nawigacji</string> <string name="waypoint_custom">Zdefiniowane przez użytkownika</string> <string name="waypoint_my_coordinates">Moje współrzędne</string> <string name="waypoint_bearing">Kierunek</string> @@ -535,7 +507,6 @@ <string name="waypoint_note">Notatka</string> <string name="waypoint_save">Zapisz</string> <string name="waypoint_loading">Ładuje punkt nawigacyjny…</string> - <string name="waypoint_unknown_coordinates">Współrzędne nieznane</string> <string name="search_history">Historia</string> <string name="search_history_empty">Brak poprzednich celów</string> <string name="search_remove_destination">Cel usunięty</string> diff --git a/main/res/values-pt/strings.xml b/main/res/values-pt/strings.xml index 46996af..9516927 100644 --- a/main/res/values-pt/strings.xml +++ b/main/res/values-pt/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<resources> +<resources xmlns:tools="http://schemas.android.com/tools"> <string name="app_name">c:geo</string> <string name="app_name_compass">c:geo bússola</string> @@ -88,9 +88,6 @@ <string name="log_post_no_rate">Publicar registo & Não votar</string> <string name="log_post_not_possible">A carregar página de registo…</string> <string name="log_add">Adicionar</string> - <string name="log_date">Data</string> - <string name="log_time">Hora</string> - <string name="log_date_time">Data & Hora</string> <string name="log_rating">Pontuação</string> <string name="log_no_rating">Não votar</string> <string name="log_stars_1">1 estrela</string> @@ -140,8 +137,6 @@ <string name="err_license">O utilizador não concordou com a licença de utilização de Geocaching.com, por isso c:geo não pode carregar as coordenadas da cache.</string> <string name="err_unpublished">A cache pedida não está publicada.</string> <string name="err_premium_only">Esta cache só está disponível para membros premium do Geocaching.com.</string> - <string name="err_store">O c:geo não consegue arquivar a cache.</string> - <string name="err_drop">O c:geo não consegue apagar a cache.</string> <string name="err_detail_open">O c:geo não consegue abrir os detalhes da geocache.</string> <string name="err_detail_cache">O c:geo não consegue mostrar a cache pretendida. É mesmo uma geocache?</string> <string name="err_detail_cache_find">O c:geo não encontra a geocache</string> @@ -154,20 +149,15 @@ <string name="err_detail_no_spoiler">O c:geo não encontrou images spoiler para esta cache.</string> <string name="err_detail_no_map_static">O c:geo não encontrou mapas estáticos para esta cache.</string> <string name="err_detail_not_load_map_static">O c:geo falhou o carregamento de mapas estáticos.</string> - <string name="err_detail_ask_store_map_static">O c:geo falhou o carregamento de mapas estáticos. Arquivar agora?</string> <string name="err_detail_still_working">A trabalhar noutra tarefa.</string> <string name="err_watchlist_still_managing">Ainda a gerir a sua watchlist.</string> <string name="err_watchlist_failed">A gestão da sua watchlist falhou.</string> - <string name="err_navigation_no">O c:geo não encontra nenhuma navegação suportada.</string> <string name="err_application_no">O c:geo não encontra a aplicação correcta.</string> <string name="err_auth_initialize">O c:geo falhou a iniciar o processo de autorização.</string> <string name="err_auth_process">Processo de autorização falhou.</string> <string name="err_cannot_log_visit">O c:geo não tem informação suficiente para registar a visita. Por favor, faça-o a partir dos detalhes completos da cache.</string> <string name="err_init_cleared">O c:geo não consegue limpar os dados de login.</string> <string name="err_download_fail">O c:geo falhou o download das caches porque </string> - <string name="err_list_load_fail">O c:geo falhou a carregar a lista das caches.</string> - <string name="err_store_failed">O c:geo não pode arquivar a geocache.</string> - <string name="err_refresh_failed">O c:geo não consegue actualizar a geocache.</string> <string name="err_dwld_details_failed">O c:geo falhou o download dos detalhes da cache.</string> <string name="err_load_descr_failed">O c:geo não consegue carregar a descrição.</string> <string name="err_location_unknown">O c:geo não sabe a localização da cache.</string> @@ -175,18 +165,12 @@ <string name="err_tb_display">O c:geo não consegue mostrar o trackable pretendido. É mesmo um trackable?</string> <string name="err_tb_details_open">O c:geo não consegue abrir os detalhes do trackable.</string> - <string name="err_tb_details_download">O c:geo falhou o download dos detalhes do trackable porque</string> - <string name="err_tb_forgot">O c:geo esqueceu o trackable pretendido.</string> <string name="err_tb_forgot_saw">O c:geo esqueceu o trackable que viu.</string> <string name="err_tb_find">O c:geo não encontra o trackable</string> <string name="err_tb_find_that">O c:geo não encontra esse trackable.</string> <string name="err_waypoint_cache_unknown">O c:geo não sabe a que cache quer adicionar o ponto de referência.</string> - <string name="err_waypoint_unknown">O c:geo esqueceu qual o ponto de referência que pretende visualizar.</string> <string name="err_waypoint_add_failed">O c:geo falhou o adicionamento do seu ponto de referência.</string> - <string name="err_waypoint_load_failed">O c:geo falhou o carregamento do ponto de referência.</string> - <string name="err_waypoint_delete_failed">O c:geo falhou a remoção do ponto de referência.</string> - <string name="err_waypoint_open_cache_failed">O c:geo não consegue abrir os detalhes da cache.</string> <string name="err_point_unknown_position">O c:geo não conseguiu reconhecer a sua localização.</string> <string name="err_point_no_position_given_title">Informação requerida</string> <string name="err_point_no_position_given">Preencha pelo menos a latitude, a longitude, a distância ou a direcção. Também pode preencher os quatro campos.</string> @@ -201,15 +185,12 @@ <string name="err_log_failed_server">O c:geo falhou a publicação do registo porque o servidor não responde.</string> <string name="err_log_post_failed">O c:geo falhou a publicação do registo.</string> - <string name="err_search_address_no_match">O c:geo não encontrou um local que corresponda.</string> <string name="err_search_address_forgot">O c:geo esqueceu o endereço que procura.</string> <string name="err_parse_lat">O c:geo não consegue analisar a latitue.</string> <string name="err_parse_lon">O c:geo não consegue analisar a logitude.</string> <string name="err_parse_dist">O c:geo não consegue analisar a distância.</string> <string name="err_parse_lat_lon">O c:geo não consegue analisar a latitue ou a longitude.</string> - <string name="err_fieldnotes_export_failed">A exportação das Notas de Campo falhou.</string> - <string name="warn_save_nothing">Não há nada para guardar.</string> <string name="warn_no_cache_coord">Não há cache com coordenadas.</string> <string name="warn_no_coordinates">Nenhumas coordenadas fornecidas.</string> @@ -234,7 +215,6 @@ <string name="info_log_cleared">O registo foi limpo.</string> <string name="info_log_type_changed">O tipo de registo foi alterado!</string> - <string name="info_fieldnotes_exported_to">Notas de campo exportadas para</string> <string name="info_storing_static_maps">A tentar arquivar mapas estáticos.</string> <!-- location service --> @@ -323,10 +303,7 @@ <string name="caches_filter_type">Tipo</string> <string name="caches_filter_track">Com trackables</string> <string name="caches_filter_clear">Limpar filtros</string> - <string name="caches_filter_size_title">Escolha o tamanho</string> - <string name="caches_filter_type_title">Escolha o tipo</string> <string name="caches_filter_modified">Com as coordenadas modificadas</string> - <string name="caches_exporting_fieldnote">A exportar como Notas de Campo…</string> <string name="caches_removing_from_history">A remover do histórico…</string> <!-- caches lists --> @@ -405,7 +382,6 @@ <string name="init_offline_wp">Armazenar waypoints de mapas estáticos para utilização offline</string> <string name="init_save_log_img">Guardar imagens dos registos</string> <string name="init_units">Utilizar distância nas unidades do sistema imperial</string> - <string name="init_nav">Utilizar Google Navigation</string> <string name="init_log_offline">Activar registo offline\n(Não mostrar o registo online quando fôr registar, não enviar o registo online)</string> <string name="init_livelist">Mostrar a direcção para a cache na lista</string> <string name="init_altitude">Correcção de altitude</string> @@ -429,14 +405,11 @@ <string name="init_mapsources">Fontes de mapa</string> <string name="init_mapsources_description">Aqui pode seleccionar a fonte dos seus mapas. Como alternativa ao Google Maps, vários estilos de OpenStreetMap estão disponíveis, e até ficheiros de mapas offline (veja <a href="http://code.google.com/p/mapsforge/">http://code.google.com/p/mapsforge/</a> para mais detalhes).</string> <string name="init_mapsource_select">Seleccione a fonte de mapa</string> - <string name="init_select_themefolder">…</string> <string name="init_map_directory_description">Directório com os mapas offline</string> <string name="init_gpx_exportdir">Directório para exportar GPX</string> <string name="init_gpx_importdir">Directório para importar GPX</string> <string name="init_gpx_exportdir_description">Aqui pode selecionar o directório para exportar os GPX.</string> <string name="init_gpx_importdir_description">Aqui pode selecionar o directório para importar os GPX.</string> - <string name="init_gpx_exportdir_select">Selecione directório para exportar GPX</string> - <string name="init_gpx_importdir_select">Selecione directório para importar GPX</string> <string name="init_maptrail">Mostrar rasto no mapa</string> <string name="init_share_after_export">Abrir o menu de partilha depois da exportação GPX</string> <string name="init_trackautovisit">Marcar automaticamente os trackables como \"visitados\"</string> @@ -452,7 +425,6 @@ <string name="init_dbonsdcard_title">Localização da base de dados</string> <string name="init_dbonsdcard_note">Pode armazenar a base de dados do c:geo no armazenamento externo. Se o fizer vai poupar memória interna, mas pode perder um pouco de performance e o c:geo pode não funcionar se o armazenamento externo não estiver disponível.</string> <string name="init_dbonsdcard">base de dados no armazenamento externo</string> - <string name="init_dbmove">A mover a base de dados</string> <string name="init_dbmove_dbmove">A mover a base de dados</string> <string name="init_dbmove_running">A mover a base de dados</string> <string name="init_dbmove_success">Base de dados movida com sucesso.</string> @@ -462,13 +434,6 @@ <string name="init_rendertheme_folder">Directório com os temas de mapas offline personalizados (opcional)</string> <!-- map sources --> - <string-array name="map_sources"> - <item>@string/map_source_google_map</item> - <item>@string/map_source_google_satellite</item> - <item>@string/map_source_osm_mapnik</item> - <item>@string/map_source_osm_cyclemap</item> - <item>@string/map_source_osm_offline</item> - </string-array> <string name="map_source_google_map">Google: Mapa</string> <string name="map_source_google_satellite">Google: Satélite</string> <string name="map_source_osm_mapnik">OSM: Mapnik</string> @@ -530,7 +495,6 @@ <string name="cache_description">Descrição</string> <string name="cache_description_long">Descrição longa</string> <string name="cache_description_table_note">A descrição contém a formatação da tabela que pode ser necessário para ser vista correctamente em Geocaching.com.</string> - <string name="cache_watchlist">Lista de observação</string> <string name="cache_watchlist_on">Esta cache está na sua lista de observação.</string> <string name="cache_watchlist_not_on">Esta cache não está na sua lista de observação.</string> <string name="cache_watchlist_add">Adicionar à lista de observação</string> @@ -571,7 +535,9 @@ <string name="cache_dialog_watchlist_remove_title">Lista de observação</string> <string name="cache_dialog_watchlist_remove_message">A remover cache da lista de observação…</string> <string name="cache_menu_navigate">Navegar</string> - <string name="cache_menu_tbt">Turn-by-turn</string> + <string name="cache_menu_navigation_drive">Navegar (Conduzir)</string> + <string name="cache_menu_navigation_walk">Navegar (Andar)</string> + <string name="cache_menu_maps_directions">Direcções pelo Google Maps</string> <string name="cache_menu_radar">Radar</string> <string name="cache_menu_map">Mostrar no mapa</string> <string name="cache_menu_map_static">Mapas estáticos</string> @@ -592,7 +558,6 @@ <string name="cache_menu_whereyougo">WhereYouGo</string> <string name="cache_menu_oruxmaps">OruxMaps</string> <string name="cache_menu_cachebeacon">Cache Beacon</string> - <string name="cache_menu_sygic" translatable="false">Sygic</string> <string name="cache_status">Estado</string> <string name="cache_status_offline_log">Log gravado</string> <string name="cache_status_found">Encontrada</string> @@ -623,7 +588,6 @@ <string name="cache_images_loading">A carregar as imagens…</string> <string name="cache_log_types">Tipos de log</string> <string name="cache_coordinates_no">Esta cache não tem coordenadas.</string> - <string name="cache_export_fieldnote">Exportar como Notas de Campo</string> <string name="cache_clear_history">Apagar histórico</string> <string name="cache_remove_from_history">Remover do histórico</string> <string name="cache_license">Licença</string> @@ -651,7 +615,6 @@ <string name="gpx_import_loading_caches">A carregar as caches do ficheiro .gpx</string> <string name="gpx_import_loading_waypoints">A carregar o ficheiro dos waypoints</string> <string name="gpx_import_store_static_maps">A gravar mapas estáticos</string> - <string name="gpx_import_storing">A gravar as caches na base de dados</string> <string name="gpx_import_caches_imported">caches importadas</string> <string name="gpx_import_static_maps_skipped">Download of static maps aborted</string> <string name="gpx_import_title_static_maps">Gravar mapas estáticos</string> @@ -671,10 +634,7 @@ <string name="map_file_select_title">Seleccione ficheiro de mapa</string> <!-- theme file select --> - <string name="theme_file_select_title">Selecione o ficheiro do tema de mapa personalizado</string> - <!-- import --> - <string name="import_title">Importar…</string> <string name="web_import_title">Importar da web</string> <string name="web_import_waiting">À espera de novas caches da web…</string> <string name="web_downloading">A transferir</string> @@ -685,7 +645,6 @@ <!-- waypoint --> <string name="waypoint">Ponto de referência</string> - <string name="waypoint_title">Ponto de referência</string> <string name="waypoint_cache_coordinates">Coordenadas da cache</string> <string name="waypoint_custom">Personalizado</string> <string name="waypoint_my_coordinates">Minhas coordenadas</string> @@ -699,39 +658,17 @@ <string name="waypoint_note">Nota</string> <string name="waypoint_save">Gravar</string> <string name="waypoint_loading">A carregar ponto de referência…</string> - <string name="waypoint_unknown_coordinates">Coordenadas desconhecidas</string> <string name="waypoint_done">Feito</string> <string name="waypoint_duplicate">Duplicar</string> <string name="waypoint_copy_of">Cópia de</string> - <string name="waypoint_menu_open_cache">Abrir cache</string> <string name="search_history">Histórico</string> <string name="search_history_empty">Não existem destinos recentes</string> <string name="search_remove_destination">Destino removido</string> <string name="search_clear_history">Limpar histórico</string> <string name="search_history_cleared">Histórico limpo</string> - <string-array name="waypoint_coordinate_formats"> - <item>@string/waypoint_coordinate_formats_plain</item> - <item>DDD.DDDDD°</item> - <item>DDD°MM.MMM\'</item> - <item>DDD°MM\'SS.SSS\"</item> - </string-array> <string name="waypoint_coordinate_formats_plain">Plano</string> - <!-- distance units --> - <string-array name="distance_units"> - <item>@string/unit_m</item> - <item>@string/unit_km</item> - <item>@string/unit_ft</item> - <item>@string/unit_yd</item> - <item>@string/unit_mi</item> - </string-array> - <string name="unit_m">m</string> - <string name="unit_km">km</string> - <string name="unit_ft">ft</string> - <string name="unit_yd">yd</string> - <string name="unit_mi">mi</string> - <!-- visit --> <string name="visit_tweet">Publicar esta descoberta no Twitter</string> @@ -855,7 +792,6 @@ <!-- export --> <string name="export">Exportar</string> - <string name="export_as">Exportar como…</string> <string name="export_exportedto">exportado para</string> <string name="export_failed">Exportação falhou</string> <string name="export_fieldnotes">Notas de campo</string> @@ -869,9 +805,6 @@ <string name="export_gpx_info">O ficheiro GPX vai ser exportado para %1$s com a data e a hora actual como nome de ficheiro.</string> <string name="export_gpx_to">Enviar GPX exportado para</string> - <!-- attribute unknown --> - <string name="attribute_unknown_yes">Unknown attribute present</string> - <string name="attribute_unknown_no">Unknown attribute not present</string> <!-- attributes (permissions -> allowed, not allowed) --> <string name="attribute_dogs_yes">Cães permitidos</string> <string name="attribute_dogs_no">Cães não permitidos</string> @@ -1026,11 +959,11 @@ <string name="about_auth_2">Premir o botão \"Autorizar c:geo\" dará início ao processo. Este processo irá abrir a página do Twitter no seu browser. Faça login nesta página e autorize o <b>c:geo</b> a aceder à sua conta. Se autorizar, o Twitter irá mostrar um código PIN numérico. Este PIN deverá ser copiado para o <b>c:geo</b> e sujeito a confirmação. E é tudo.</string> <!-- status --> - <string name="status_new_release">Nova versão disponível.\nClique para instalar.</string> - <string name="status_new_nightly">Nova \'nightly build\' disponível.\nClique para instalar.</string> - <string name="status_new_rc">Nova \'release candidate\' disponível .\nClique para instalar.</string> - <string name="status_geocaching_change">Alterações recentes em geocaching.com fizeram com que c:geo funcione mal.\nEstamos a trabalhar nisto, verifique de novo mais tarde.</string> - <string name="status_geocaching_livemap">Alterações recentes em geocaching.com fizeram com o mapa ao vivo não funcione bem.\nEstamos a trabalhar nisto, verifique de novo mais tarde.</string> + <string name="status_new_release" tools:ignore="UnusedResources">Nova versão disponível.\nClique para instalar.</string> + <string name="status_new_nightly" tools:ignore="UnusedResources">Nova \'nightly build\' disponível.\nClique para instalar.</string> + <string name="status_new_rc" tools:ignore="UnusedResources">Nova \'release candidate\' disponível .\nClique para instalar.</string> + <string name="status_geocaching_change" tools:ignore="UnusedResources">Alterações recentes em geocaching.com fizeram com que c:geo funcione mal.\nEstamos a trabalhar nisto, verifique de novo mais tarde.</string> + <string name="status_geocaching_livemap" tools:ignore="UnusedResources">Alterações recentes em geocaching.com fizeram com o mapa ao vivo não funcione bem.\nEstamos a trabalhar nisto, verifique de novo mais tarde.</string> <string name="clipboard_copy_ok">Copiado para a área de transferência</string> <plurals name="days_ago"> diff --git a/main/res/values-sk/strings.xml b/main/res/values-sk/strings.xml index fadf078..fe2ca66 100644 --- a/main/res/values-sk/strings.xml +++ b/main/res/values-sk/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<resources> +<resources xmlns:tools="http://schemas.android.com/tools"> <string name="app_name">c:geo</string> <string name="app_name_compass">c:geo kompas</string> @@ -87,9 +87,6 @@ <string name="log_post_no_rate">Odoslať log a nehlasovať</string> <string name="log_post_not_possible">Načítanie stránky s logmi…</string> <string name="log_add">Pridať</string> - <string name="log_date">Dátum</string> - <string name="log_time">Čas</string> - <string name="log_date_time">Dátum a čas</string> <string name="log_rating">Hlasovať</string> <string name="log_no_rating">Nehlasovať</string> <string name="log_stars_1">1 hviezdička</string> @@ -139,8 +136,6 @@ <string name="err_license">Používateľ nepotvrdil súhlas s licenčnou dohodou serveru Geocaching.com, takže c:geo nemôže načítať koordináty skrýše.</string> <string name="err_unpublished">Požadovaná skrýša nebola publikovaná</string> <string name="err_premium_only">Skrýša je dostupná iba pre platiacich používateľov Geocaching.com</string> - <string name="err_store">Prepáčte, c:geo nemôže uložiť skrýšu.</string> - <string name="err_drop">Prepáčte, c:geo nemôže zmazať skrýšu.</string> <string name="err_detail_open">Prepáčte, c:geo nedokáže načítať detaily skrýše.</string> <string name="err_detail_cache">Prepáčte, c:geo nedokáže načítať detaily skrýše. Je to naozaj skrýša?</string> <string name="err_detail_cache_find">Prepáčte, c:geo nemôže nájsť skrýšu</string> @@ -153,20 +148,15 @@ <string name="err_detail_no_spoiler">c:geo nenašla pre túto skrýšu žiaden spoilerový obrázok.</string> <string name="err_detail_no_map_static">c:geo nenašla žiadnu statickú mapu pre túto skrýšu.</string> <string name="err_detail_not_load_map_static">Prepáčte, c:geo sa nepodarilo načítať statické mapy.</string> - <string name="err_detail_ask_store_map_static">c:geo sa nepodarilo načítať statické mapy. Chcete ich uložiť teraz?</string> <string name="err_detail_still_working">Stále prebieha práca na inej úlohe.</string> <string name="err_watchlist_still_managing">Stále prebieha správa vášho zoznamu sledovaných.</string> <string name="err_watchlist_failed">Zlyhala zmena sledovaných.</string> - <string name="err_navigation_no">Prepáčte, c:geo nemôže nájsť žiadnu podporovanú navigáciu.</string> <string name="err_application_no">Prepáčte, c:geo nemôže násjť žiadnu použiteľnú aplikáciu.</string> <string name="err_auth_initialize">Prepáčte, c:geo nedokázalo zahájiť autorizáciu.</string> <string name="err_auth_process">Autorizácia zlyhala.</string> <string name="err_cannot_log_visit">c:geo nemá dostatok informácií pre zapísanie návštevy. Prosím urobte to z kompletného detailu skrýše.</string> <string name="err_init_cleared">Prepáčte, c:geo nedokázalo zmazať prihlasovacie údaje.</string> <string name="err_download_fail">Prepáčte, c:geo nemôže načítať skrýšu, pretože</string> - <string name="err_list_load_fail">c:geo nemôže načítať zoznam skrýš.</string> - <string name="err_store_failed">c:geo nemôže uložiť skrýšu.</string> - <string name="err_refresh_failed">c:geo nemôže obnoviť skrýšu.</string> <string name="err_dwld_details_failed">c:geo nemôže stiahnuť detaily skrýše.</string> <string name="err_load_descr_failed">c:geo nemôže načítať popis.</string> <string name="err_location_unknown">c:geo nepozná súradnice skrýše</string> @@ -174,18 +164,12 @@ <string name="err_tb_display">Prepáčte, c:geo nemôže zobraziť trasovateľný predmet. Je to naozaj trasovateľný?</string> <string name="err_tb_details_open">Prepáčte, c:geo nemôže otvoriť podrobnosti k trasovateľnému predmetu.</string> - <string name="err_tb_details_download">Prepáčte, c:geo nemôže stiahnuť podrobnosti k trasovateľnému predmetu, pretože</string> - <string name="err_tb_forgot">c:geo zabudlo, ktorý trasovateľný predmet ste chceli.</string> <string name="err_tb_forgot_saw">c:geo zabudlo, ktorý trasovateľný predmet ste pozerali.</string> <string name="err_tb_find">c:geo nemôže nájsť trasovateľný predmet.</string> <string name="err_tb_find_that">c:geo nemôže nájsť tento trasovateľný predmet.</string> <string name="err_waypoint_cache_unknown">c:geo nevie, ku ktorej skrýši chcete pridať bod trasy.</string> - <string name="err_waypoint_unknown">c:geo zabudlo, ktorý bod trasy chcete zobraziť.</string> <string name="err_waypoint_add_failed">c:geo nemôže pridať bod trasy.</string> - <string name="err_waypoint_load_failed">c:geo nemôže načítať bod trasy.</string> - <string name="err_waypoint_delete_failed">c:geo nemôže zmazať bod trasy.</string> - <string name="err_waypoint_open_cache_failed">c:geo nemôže otvoriť detaily skrýše.</string> <string name="err_point_unknown_position">c:geo nevie, kde ste.</string> <string name="err_point_no_position_given_title">popis je požadovaný</string> <string name="err_point_no_position_given">Vyplňte aspoň šírku alebo dĺžku alebo vzdialenosť a smer. Môžete tiež vyplniť všetky štyri polia.</string> @@ -200,15 +184,12 @@ <string name="err_log_failed_server">c:geo nemohlo odoslať log, pretože server neodpovedá.</string> <string name="err_log_post_failed">c:geo nemohlo odoslať log.</string> - <string name="err_search_address_no_match">c:geo nenašlo žiadne zodpovedajúce miesto</string> <string name="err_search_address_forgot">c:geo zabudlo adresu, ktorú sa pokúšate nájsť.</string> <string name="err_parse_lat">c:geo nemôže dopočítať šírku.</string> <string name="err_parse_lon">c:geo nemôže dopočítať dĺžku.</string> <string name="err_parse_dist">c:geo nemôže dopočítať vzdialenosť.</string> <string name="err_parse_lat_lon">c:geo nemôže zistiť šírku a dĺžku.</string> - <string name="err_fieldnotes_export_failed">Zlyhal export poznámok v poli.</string> - <string name="warn_save_nothing">Nie je čo uložiť.</string> <string name="warn_no_cache_coord">Nie je žiadna skrýša so súradnicami.</string> <string name="warn_no_coordinates">Nezískané súradnice</string> @@ -233,7 +214,6 @@ <string name="info_log_cleared">Log bol vyprázdnený.</string> <string name="info_log_type_changed">Typ logu bol zmenený!</string> - <string name="info_fieldnotes_exported_to">Poznámky exportované do</string> <string name="info_storing_static_maps">ukladanie statických máp</string> <!-- location service --> @@ -322,10 +302,7 @@ <string name="caches_filter_type">podľa typu</string> <string name="caches_filter_track">s trasovateľnými predmetmi</string> <string name="caches_filter_clear">vymazať filtre</string> - <string name="caches_filter_size_title">Výber veľkosti</string> - <string name="caches_filter_type_title">Výber typu</string> <string name="caches_filter_modified">S upravenými súradnicami</string> - <string name="caches_exporting_fieldnote">Exportovanie ako poznámky…</string> <string name="caches_removing_from_history">Odstraňovanie z histórie…</string> <!-- caches lists --> @@ -404,7 +381,6 @@ <string name="init_offline_wp">Uložiť statické mapy bodov strás pre použitie offline</string> <string name="init_save_log_img">Uložiť obrázky zo záznamov</string> <string name="init_units">Používať imperiálne jednotky vzdialenosti</string> - <string name="init_nav">Používať Navigáciu Google</string> <string name="init_log_offline">Pri zaznamenávaní vždy použiť offline režim (nezobrazovať online obrazovku počas zaznamenávania, neposielať záznam online)</string> <string name="init_livelist">Zobrazovať smer v zozname skrýš</string> <string name="init_altitude">Oprava výšky</string> @@ -428,17 +404,11 @@ <string name="init_mapsources">Mapové zdroje</string> <string name="init_mapsources_description">Tu môžete vybrať zdroje pre vaše mapy. Je to alternatíva ku Google mapám rôznych OpenStreetMap styles sú dostupné a dokonca offline mapové súbory (podrobnosti nájdete na <a href="http://code.google.com/p/mapsforge/">http://code.google.com/p/mapsforge/</a>).</string> <string name="init_mapsource_select">Vyberte zdroj máp</string> - <string name="init_select_themefolder">…</string> <string name="init_map_directory_description">Priečinok s offline mapami</string> - <string name="init_select_map_directory">…</string> - <string name="init_select_gpx_exportdir">…</string> - <string name="init_select_gpx_importdir">…</string> <string name="init_gpx_exportdir">Priečinok pre GPX Export</string> <string name="init_gpx_importdir">Priečinok pre GPX Import</string> <string name="init_gpx_exportdir_description">Tu si môžete vybrať priečinok pre GPX exporty.</string> <string name="init_gpx_importdir_description">Tu si môžete vybrať priečinok pre GPX importy.</string> - <string name="init_gpx_exportdir_select">Výber priečinka pre GPX export</string> - <string name="init_gpx_importdir_select">Výber priečinka pre GPX import</string> <string name="init_maptrail">Zobraziť stopu na mape</string> <string name="init_share_after_export">Po exporte GPX otvoriť menu pre zdieľanie</string> <string name="init_trackautovisit">Nastaviť trasovateľné predmety automaticky na „navštívené“</string> @@ -454,7 +424,6 @@ <string name="init_dbonsdcard_title">Umiestnenie databázy</string> <string name="init_dbonsdcard_note">Databázu c:geo môžete umiestniť na externé úložisko. Ak to spravíte, ušetríte vnútornú pamäť, ale môžete stratiť časť z výkonu a c:geo nebude fungovať, keď vaša SD karta nebude dostupná.</string> <string name="init_dbonsdcard">Databáza na externom úložisku</string> - <string name="init_dbmove">Presúvanie databázy</string> <string name="init_dbmove_dbmove">Presúvanie databázy</string> <string name="init_dbmove_running">Prebieha presúvanie databázy</string> <string name="init_dbmove_success">Databáza bola úspešne presunutá.</string> @@ -525,7 +494,6 @@ <string name="cache_description">Popis</string> <string name="cache_description_long">Dlhý popis</string> <string name="cache_description_table_note">Popis obsahuje formátovanie tabuľky, ktorý môže byť pre správne zobrazenie potrebné otvoriť v geocaching.com.</string> - <string name="cache_watchlist">Zoznam sledovaných</string> <string name="cache_watchlist_on">Skrýša je vo vašom zozname sledovaných.</string> <string name="cache_watchlist_not_on">Skrýša nie je vo vašom zozname sledovaných.</string> <string name="cache_watchlist_add">Pridať do zoznamu sledovaných</string> @@ -567,7 +535,6 @@ <string name="cache_dialog_watchlist_remove_title">Zoznam sledovaných</string> <string name="cache_dialog_watchlist_remove_message">Odstraňovanie skrýše zo zoznamu sledovaných…</string> <string name="cache_menu_navigate">Navigovať</string> - <string name="cache_menu_tbt">Navigácia s inštrukciami</string> <string name="cache_menu_radar">Radar</string> <string name="cache_menu_map">Mapa</string> <string name="cache_menu_map_static">Statická mapa</string> @@ -619,7 +586,6 @@ <string name="cache_images_loading">Prebieha načítanie obrázkov…</string> <string name="cache_log_types">Typy záznamov</string> <string name="cache_coordinates_no">Táto skrýša nemá žiadne súradnice.</string> - <string name="cache_export_fieldnote">Exportovať ako poznámky</string> <string name="cache_clear_history">Vymazať históriu</string> <string name="cache_remove_from_history">Odstrániť z histórie</string> <string name="cache_license">Licencia</string> @@ -647,7 +613,6 @@ <string name="gpx_import_loading_caches">Načítanie skrýš z .gpx súboru\nNačítané:</string> <string name="gpx_import_loading_waypoints">Načítanie bodov trasy z .gpx súboru\nNačítané:</string> <string name="gpx_import_store_static_maps">Ukladanie statických máp</string> - <string name="gpx_import_storing">Zapisovanie skrýš do databázy\nZapísané:</string> <string name="gpx_import_caches_imported">skrýše importované</string> <string name="gpx_import_static_maps_skipped">Preberanie statických máp zrušené</string> <string name="gpx_import_title_static_maps">Uloženie statických máp</string> @@ -667,10 +632,7 @@ <string name="map_file_select_title">Výber mapového súboru</string> <!-- theme file select --> - <string name="theme_file_select_title">Výber súboru s témou mapy</string> - <!-- import --> - <string name="import_title">Import…</string> <string name="web_import_title">Import z webu</string> <string name="web_import_waiting">Čakanie na nové skrýše z webu…</string> <string name="web_downloading">Preberanie</string> @@ -681,7 +643,6 @@ <!-- waypoint --> <string name="waypoint">Bod trasy</string> - <string name="waypoint_title">Bod trasy</string> <string name="waypoint_cache_coordinates">Súradnice skrýše</string> <string name="waypoint_custom">vlastný</string> <string name="waypoint_my_coordinates">Aktuálna poloha</string> @@ -695,11 +656,9 @@ <string name="waypoint_note">poznámka</string> <string name="waypoint_save">Uložiť</string> <string name="waypoint_loading">Načítanie bodu trasy…</string> - <string name="waypoint_unknown_coordinates">Neznáme súradnice</string> <string name="waypoint_done">Hotovo</string> <string name="waypoint_duplicate">Duplikovať</string> <string name="waypoint_copy_of">Kópia</string> - <string name="waypoint_menu_open_cache">Otvoriť skrýšu</string> <string name="search_history">História</string> <string name="search_history_empty">Bez predchádzajúcich cieľov</string> <string name="search_remove_destination">Cieľ odstránený</string> @@ -838,7 +797,6 @@ <!-- export --> <string name="export">Exportovať</string> - <string name="export_as">Exportovať ako…</string> <string name="export_exportedto">exportované do</string> <string name="export_failed">Export zlyhal</string> <string name="export_fieldnotes">Poznámky</string> @@ -1009,11 +967,11 @@ <string name="about_auth_2">Ťuknutím na tlačidlo „Zahájiť autorizáciu“ celý proces začne. Tento proces otvorí webovú stránku Twitteru, kde sa sa prihlásite a tlačidlom „Authorize app“ umožníte aplikácii <b>c:geo</b> prístup k vášmu Twitter účtu. Potom čo ťuknete na „Authorize app“, Twitter vám pridelí PIN kód. Tento kód skopírujte a vložte do aplikácie <b>c:geo</b>. A potvrďte. To je všetko.</string> <!-- status --> - <string name="status_new_release">Je dostupné nové vydanie.\nKliknite pre inštaláciu.</string> - <string name="status_new_nightly">Je dostupná nová nočná zostava.\nKliknite pre inštaláciu.</string> - <string name="status_new_rc">Je dostupná nová verzia „release candidate“.\nKliknite pre inštaláciu.</string> - <string name="status_geocaching_change">Nedávne zmeny na geocaching.com znefunkčnili c:geo.\nPracujeme na tom, skúste skontrolovať aktualizácie onedlho.</string> - <string name="status_geocaching_livemap">Nedávne zmeny na geocaching.com znefunkčnili aktívnu mapu.\nPracujeme na tom, skúste skontrolovať aktualizácie onedlho.</string> + <string name="status_new_release" tools:ignore="UnusedResources">Je dostupné nové vydanie.\nKliknite pre inštaláciu.</string> + <string name="status_new_nightly" tools:ignore="UnusedResources">Je dostupná nová nočná zostava.\nKliknite pre inštaláciu.</string> + <string name="status_new_rc" tools:ignore="UnusedResources">Je dostupná nová verzia „release candidate“.\nKliknite pre inštaláciu.</string> + <string name="status_geocaching_change" tools:ignore="UnusedResources">Nedávne zmeny na geocaching.com znefunkčnili c:geo.\nPracujeme na tom, skúste skontrolovať aktualizácie onedlho.</string> + <string name="status_geocaching_livemap" tools:ignore="UnusedResources">Nedávne zmeny na geocaching.com znefunkčnili aktívnu mapu.\nPracujeme na tom, skúste skontrolovať aktualizácie onedlho.</string> <string name="clipboard_copy_ok">Skopírované do schránky</string> <plurals name="days_ago"> diff --git a/main/res/values-sv/strings.xml b/main/res/values-sv/strings.xml index 2c4e004..72b613d 100644 --- a/main/res/values-sv/strings.xml +++ b/main/res/values-sv/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<resources> +<resources xmlns:tools="http://schemas.android.com/tools"> <string name="app_name">c:geo</string> <string name="app_name_compass">c:geo kompass</string> @@ -87,9 +87,6 @@ <string name="log_post_no_rate">Posta logg utan betyg</string> <string name="log_post_not_possible">Laddar loggningssida…</string> <string name="log_add">Lägg till</string> - <string name="log_date">Datum</string> - <string name="log_time">Tid</string> - <string name="log_date_time">Datum & tid</string> <string name="log_rating">Betyg</string> <string name="log_no_rating">Inget betyg</string> <string name="log_stars_1">1 stjärna</string> @@ -139,8 +136,6 @@ <string name="err_license">Du har inte bekräftat licensavtalet med Geocaching.com, så c:geo kan inte läsa in koordinater för cacherna.</string> <string name="err_unpublished">Den sökta cachen är opubliserad.</string> <string name="err_premium_only">Cachen är enbart för premium medlemmar på Geocaching.com.</string> - <string name="err_store">Tyvärr kan c:geo inte spara cachen.</string> - <string name="err_drop">Tyvärr kan c:geo inte ta bort cachen.</string> <string name="err_detail_open">Tyvärr kan c:geo inte visa detaljer om geocachen.</string> <string name="err_detail_cache">Tyvärr kan c:geo inte visa den geocache du önskar. Är det verkligen en geocache?</string> <string name="err_detail_cache_find">Tyvärr kan c:geo inte hitta geocache</string> @@ -153,20 +148,15 @@ <string name="err_detail_no_spoiler">c:geo hittade inga spoiler bilder för den här cachen.</string> <string name="err_detail_no_map_static">c:geo hittade inga sparade kartor för denna cache.</string> <string name="err_detail_not_load_map_static">Tyvärr misslyckades c:geo att ladda sparade kartor.</string> - <string name="err_detail_ask_store_map_static">c:geo kunde inte läsa in statiska kartor. Ladda ner nu?</string> <string name="err_detail_still_working">Arbetar fortfarande med annat.</string> <string name="err_watchlist_still_managing">Hanterar fortfarande din watchlist.</string> <string name="err_watchlist_failed">Hanteringen av din watchlist misslyckades.</string> - <string name="err_navigation_no">c:geo kan inte hitta något stöd för navigering.</string> <string name="err_application_no">c:geo kan inte hitta något lämpligt program.</string> <string name="err_auth_initialize">Tyvärr misslyckades c:geo att starta inloggningsproceduren.</string> <string name="err_auth_process">Inloggningsproceduren misslyckades.</string> <string name="err_cannot_log_visit">c:geo har inte tillräckligt med information för att logga ditt besök. Vänligen försök igen från vyn men all information om cachen.</string> <string name="err_init_cleared">Tyvärr kan c:geo inte rensa inloggningsinställningarna.</string> <string name="err_download_fail">Tyvärr misslyckades c:geo att ladda ner cacher pga</string> - <string name="err_list_load_fail">Tyvärr misslyckades c:geo att ladda listan med cacher.</string> - <string name="err_store_failed">Tyvärr kan c:geo inte spara geocachen.</string> - <string name="err_refresh_failed">Tyvärr kan c:geo inte uppdatera geocachen.</string> <string name="err_dwld_details_failed">Tyvärr misslyckades c:geo att ladda detaljer.</string> <string name="err_load_descr_failed">Tyvärr kan c:geo inte ladda beskrivningen.</string> <string name="err_location_unknown">c:geo har inte koordinaterna för cachen.</string> @@ -174,18 +164,12 @@ <string name="err_tb_display">Tyvärr kan c:geo inte visa den trackable du önskar. Är den verkligen trackable?</string> <string name="err_tb_details_open">Tyvärr kan c:geo inte öppna detaljer för trackable.</string> - <string name="err_tb_details_download">Tyvärr misslyckades c:geo att ladda ner detaljer för trackable pga</string> - <string name="err_tb_forgot">Tyvärr glömde c:geo vilken trackable önskade.</string> <string name="err_tb_forgot_saw">Tyvärr glömde c:geo vilken trackable du såg.</string> <string name="err_tb_find">Tyvärr kunde c:geo inte hitta trackable</string> <string name="err_tb_find_that">Tyvärr kan c:geo inte hitta önskad trackable.</string> <string name="err_waypoint_cache_unknown">Tyvärr vet inte c:geo till vilken cache du vill lägga till en punkt.</string> - <string name="err_waypoint_unknown">Tyvärr glömde c:geo vilken punkt du ville visa.</string> <string name="err_waypoint_add_failed">Tyvärr misslyckades c:geo att lägga till din punkt.</string> - <string name="err_waypoint_load_failed">Tyvärr misslyckades c:geo att ladda punkten.</string> - <string name="err_waypoint_delete_failed">Tyvärr kan c:geo inte ta bort punkten.</string> - <string name="err_waypoint_open_cache_failed">c:geo kan inte öppna beskrivningen av cachen.</string> <string name="err_point_unknown_position">Tyvärr kan c:geo inte bestämma din position.</string> <string name="err_point_no_position_given_title">Mer info krävs</string> <string name="err_point_no_position_given">Ange minst latitud och longitud eller avstånd och riktning. Du kan också ange alla fyra.</string> @@ -200,15 +184,12 @@ <string name="err_log_failed_server">Tyvärr misslyckades c:geo att posta loggen eftersom servern inte svarade.</string> <string name="err_log_post_failed">Tyvärr misslyckades c:geo att posta loggen.</string> - <string name="err_search_address_no_match">Tyvärr hittade c:geo ingen plats som stämde.</string> <string name="err_search_address_forgot">Tyvärr glömde c:geo adressen du sökte efter.</string> <string name="err_parse_lat">Tyvärr kan c:geo inte tolka latitud.</string> <string name="err_parse_lon">Tyvärr kan c:geo inte tolka longitud.</string> <string name="err_parse_dist">Tyvärr kan c:geo inte tolka avstånd.</string> <string name="err_parse_lat_lon">Tyvärr kan c:geo inte tolka latitud eller longitud.</string> - <string name="err_fieldnotes_export_failed">Exportering av Field Notes misslyckades.</string> - <string name="warn_save_nothing">Det finns inget att spara.</string> <string name="warn_no_cache_coord">Det finns inga koordinater för cachen.</string> <string name="warn_no_coordinates">Inga koordinater angivna.</string> @@ -232,7 +213,6 @@ <string name="info_log_cleared">Loggen har rensats.</string> <string name="info_log_type_changed">Typen av logg har ändrats!</string> - <string name="info_fieldnotes_exported_to">Field Notes har exporterats till</string> <string name="info_storing_static_maps">Försöker ladda ner statiska kartor</string> <!-- location service --> @@ -321,10 +301,7 @@ <string name="caches_filter_type">Typ</string> <string name="caches_filter_track">Med trackables</string> <string name="caches_filter_clear">Rensa filter</string> - <string name="caches_filter_size_title">Välj storlek</string> - <string name="caches_filter_type_title">Välj typ</string> <string name="caches_filter_modified">Med tillagda koordinater</string> - <string name="caches_exporting_fieldnote">Exporterar som Field Notes…</string> <string name="caches_removing_from_history">Tar bort från historik…</string> <!-- caches lists --> @@ -403,7 +380,6 @@ <string name="init_offline_wp">Spara kartor för extra punkter för användning offline</string> <string name="init_save_log_img">Spara bilder från loggar</string> <string name="init_units">Använd amerikanska enheter för avstånd</string> - <string name="init_nav">Använd Google Navigering</string> <string name="init_log_offline">Vid loggning: spara bara loggen lokalt (visa inte loggningfönster och skicka inte loggen till gc.com)</string> <string name="init_livelist">Visa riktning till cacher i listan</string> <string name="init_altitude">Höjd justering</string> @@ -427,17 +403,11 @@ <string name="init_mapsources">Kartkällor</string> <string name="init_mapsources_description">Här kan du vilken typ av kartor du vill använda. Som alternativ till Google Maps finns olika varianter av OpenStreetMap och till och med offline kartor (se <a href="http://code.google.com/p/mapsforge/">http://code.google.com/p/mapsforge/</a> för detaljer).</string> <string name="init_mapsource_select">Välj kartkälla</string> - <string name="init_select_themefolder">…</string> <string name="init_map_directory_description">Katalog med offline kartor</string> - <string name="init_select_map_directory">…</string> - <string name="init_select_gpx_exportdir">…</string> - <string name="init_select_gpx_importdir">…</string> <string name="init_gpx_exportdir">GPX-exportkatalog</string> <string name="init_gpx_importdir">GPX-importkatalog</string> <string name="init_gpx_exportdir_description">Här kan du välja katalog för GPX-exporteringar.</string> <string name="init_gpx_importdir_description">Här kan du välja katalog för GPX-importeringar.</string> - <string name="init_gpx_exportdir_select">Välj katalog för GPX-export</string> - <string name="init_gpx_importdir_select">Välj katalog för GPX-import</string> <string name="init_maptrail">Visa spår på kartan</string> <string name="init_share_after_export">Visa meny för att dela efter slutförd exportering</string> <string name="init_trackautovisit">Sätt trackable automatiskt till \"besök\" vid loggning av en cache</string> @@ -453,7 +423,6 @@ <string name="init_dbonsdcard_title">Databasplacering</string> <string name="init_dbonsdcard_note">Du kan placera c:geos databas på ditt minneskort. På detta sätt kan du spara internminne, men du kan också få något sämre prestanda och c:geo kommer inte fungera om ditt minneskort inte är tillgängligt (exempelvis när den är kopplad till en dator).</string> <string name="init_dbonsdcard">Databas på minneskort</string> - <string name="init_dbmove">Flyttar databasen</string> <string name="init_dbmove_dbmove">Flyttar databasen</string> <string name="init_dbmove_running">Flyttar databasen</string> <string name="init_dbmove_success">Databasen har ny flyttats.</string> @@ -524,7 +493,6 @@ <string name="cache_description">Beskrivning</string> <string name="cache_description_long">Lång beskrivning</string> <string name="cache_description_table_note">Varning från c:geo! Beskrivningen innehåller HTML-tabeller som eventuellt kan behöva öppnas i en webbläsare för att visas på önskat sätt.</string> - <string name="cache_watchlist">Watchlist</string> <string name="cache_watchlist_on">Den här cachen finns i din watchlist.</string> <string name="cache_watchlist_not_on">Den här cachen finns inte i din watchlist.</string> <string name="cache_watchlist_add">Lägg till i watchlist</string> @@ -565,7 +533,6 @@ <string name="cache_dialog_watchlist_remove_title">Watchlist</string> <string name="cache_dialog_watchlist_remove_message">Tar bort cachen från din watchlist…</string> <string name="cache_menu_navigate">Navigera</string> - <string name="cache_menu_tbt">Sväng-för-sväng</string> <string name="cache_menu_radar">Radar</string> <string name="cache_menu_map">Visa på karta</string> <string name="cache_menu_map_static">Sparade kartor</string> @@ -615,7 +582,6 @@ <string name="cache_images_loading">Laddar bilder…</string> <string name="cache_log_types">Loggtyper</string> <string name="cache_coordinates_no">Cachen saknar koordinater.</string> - <string name="cache_export_fieldnote">Exportera som Field Notes</string> <string name="cache_clear_history">Rensa historik</string> <string name="cache_remove_from_history">Ta bort från historik</string> <string name="cache_license">Licens</string> @@ -643,7 +609,6 @@ <string name="gpx_import_loading_caches">Läser in cacher från .gpx filen</string> <string name="gpx_import_loading_waypoints">Läser in punkter från .gpx file</string> <string name="gpx_import_store_static_maps">Sparar kartor</string> - <string name="gpx_import_storing">Skriver cacher till databasen</string> <string name="gpx_import_caches_imported">cacher importerade</string> <string name="gpx_import_static_maps_skipped">Hämtningen av kartor avbröts</string> <string name="gpx_import_title_static_maps">Sparar kartor</string> @@ -663,10 +628,7 @@ <string name="map_file_select_title">Välj kartfil</string> <!-- theme file select --> - <string name="theme_file_select_title">Välj fil med egna anpassningar för karttema</string> - <!-- import --> - <string name="import_title">Importerar…</string> <string name="web_import_title">Importerar från webben</string> <string name="web_import_waiting">Väntar på nya cacher från webben…</string> <string name="web_downloading">Laddar ner</string> @@ -677,7 +639,6 @@ <!-- waypoint --> <string name="waypoint">Punkt</string> - <string name="waypoint_title">Punkt</string> <string name="waypoint_cache_coordinates">Cache koordinater</string> <string name="waypoint_custom">Egen</string> <string name="waypoint_my_coordinates">Mina koordinater</string> @@ -691,11 +652,9 @@ <string name="waypoint_note">Kommentar</string> <string name="waypoint_save">Spara</string> <string name="waypoint_loading">Laddar punkt…</string> - <string name="waypoint_unknown_coordinates">Koordinaterna ogiltiga</string> <string name="waypoint_done">Klar</string> <string name="waypoint_duplicate">Duplicera</string> <string name="waypoint_copy_of">Kopia av</string> - <string name="waypoint_menu_open_cache">Visa cache</string> <string name="search_history">Historik</string> <string name="search_history_empty">Inga tidigare målpunkter</string> <string name="search_remove_destination">Punkten borttagen</string> @@ -826,7 +785,6 @@ <!-- export --> <string name="export">Exportera</string> - <string name="export_as">Exportera som…</string> <string name="export_exportedto">exporterat till</string> <string name="export_failed">Exporteringen misslyckades</string> <string name="export_fieldnotes">Field Notes</string> @@ -851,11 +809,11 @@ <string name="about_auth_2">Klicka på \"Påbörja koppling mot Twitter\" om du vill koppla ihop <b>c:geo</b> med Twitter. Twitters hemsida kommer att öppnas i en webbläsare. Logga in på den sidan och tillåt <b>c:geo</b> att ansluta till ditt konto. När du godkänt så kommer Twitter att visa en PIN kod. Kom ihåg denna PIN kod, stäng webbläsaren och skriv in PIN koden i <b>c:geo</b> och bekräfta.</string> <!-- status --> - <string name="status_new_release">Ny officiell version finns tillgänglig.\nKlicka för att installera.</string> - <string name="status_new_nightly">Nytt nattligt bygge finns tillgängligt.\nKlicka för att installera.</string> - <string name="status_new_rc">Ny kandidat till officiellt bygge finns tillgängligt.\nKlicka för att installera.</string> - <string name="status_geocaching_change">Ä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">Ä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_new_release" tools:ignore="UnusedResources">Ny officiell version finns tillgänglig.\nKlicka för att installera.</string> + <string name="status_new_nightly" tools:ignore="UnusedResources">Nytt nattligt bygge finns tillgängligt.\nKlicka för att installera.</string> + <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="clipboard_copy_ok">Kopierat till urklipp.</string> <plurals name="days_ago"> diff --git a/main/res/values/cache_attributes.xml b/main/res/values/cache_attributes.xml index 3277a42..815e007 100644 --- a/main/res/values/cache_attributes.xml +++ b/main/res/values/cache_attributes.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <resources> - <string-array name="attribute_ids"> + <string-array name="attribute_ids" translatable="false"> <item>dogs_yes</item> <item>dogs_no</item> <item>bicycles_yes</item> diff --git a/main/res/values/colors.xml b/main/res/values/colors.xml index 7289bc7..5a5c4ac 100644 --- a/main/res/values/colors.xml +++ b/main/res/values/colors.xml @@ -9,8 +9,6 @@ <color name="background_light_notice">#FFDFDFDF</color> <color name="background_dark_transparent">#44000000</color> <color name="background_light_transparent">#44FFFFFF</color> - <color name="owncache_background_dark">#FF222222</color> - <color name="owncache_background_light">#FFDDDDDD</color> <color name="separator_dark">#44FFFFFF</color> <color name="separator_light">#44000000</color> <color name="text_icon">#FFFFFFFF</color> diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml index 76fc524..5bec200 100644 --- a/main/res/values/strings.xml +++ b/main/res/values/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<resources> +<resources xmlns:tools="http://schemas.android.com/tools"> <string name="app_name">c:geo</string> <string name="app_name_compass">c:geo compass</string> @@ -89,9 +89,6 @@ <string name="log_post_no_rate">Submit Log & Do not Rate</string> <string name="log_post_not_possible">Loading Log Page…</string> <string name="log_add">Add</string> - <string name="log_date">Date</string> - <string name="log_time">Time</string> - <string name="log_date_time">Date & Time</string> <string name="log_rating">Rating</string> <string name="log_no_rating">No rating</string> <string name="log_stars_1">1 Star</string> @@ -141,8 +138,6 @@ <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_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_store">c:geo can\'t store the cache.</string> - <string name="err_drop">c:geo can\'t drop cache.</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> @@ -155,20 +150,15 @@ <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> - <string name="err_detail_ask_store_map_static">c:geo failed to load static maps. Store now?</string> <string name="err_detail_still_working">Still working on another task.</string> <string name="err_watchlist_still_managing">Still managing your watchlist.</string> <string name="err_watchlist_failed">Changing your watchlist failed.</string> - <string name="err_navigation_no">c:geo can\'t find any supported navigation.</string> <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_init_cleared">c:geo can\'t clear login information.</string> <string name="err_download_fail">c:geo failed to download caches.</string> - <string name="err_list_load_fail">c:geo failed to load cache list.</string> - <string name="err_store_failed">c:geo can\'t store geocache.</string> - <string name="err_refresh_failed">c:geo can\'t refresh geocache.</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> <string name="err_location_unknown">c:geo doesn\'t know location of cache.</string> @@ -176,18 +166,12 @@ <string name="err_tb_display">c:geo can\'t display 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_details_download">c:geo failed to download trackable details.</string> - <string name="err_tb_forgot">c:geo forgot which trackable you want.</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_unknown">c:geo forgot what waypoint you want to display.</string> <string name="err_waypoint_add_failed">c:geo failed to add your waypoint.</string> - <string name="err_waypoint_load_failed">c:geo failed to load waypoint.</string> - <string name="err_waypoint_delete_failed">c:geo can\'t delete waypoint.</string> - <string name="err_waypoint_open_cache_failed">c:geo can\'t open cache details.</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> @@ -202,15 +186,12 @@ <string name="err_log_failed_server">c:geo failed to post log because server is not responding.</string> <string name="err_log_post_failed">It seems that your log was not posted. Please check it on Geocaching.com.</string> - <string name="err_search_address_no_match">c:geo found no matching place.</string> <string name="err_search_address_forgot">c:geo forgot the address you tried to find.</string> <string name="err_parse_lat">c:geo can\'t parse latitude.</string> <string name="err_parse_lon">c:geo can\'t parse longitude.</string> <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="err_fieldnotes_export_failed">Export of Field Notes failed.</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_coordinates">No Coordinates given.</string> @@ -235,7 +216,6 @@ <string name="info_log_cleared">Log was cleared.</string> <string name="info_log_type_changed">Type of log has been changed!</string> - <string name="info_fieldnotes_exported_to">Field Notes exported to</string> <string name="info_storing_static_maps">Trying to store static maps</string> <!-- location service --> @@ -324,10 +304,7 @@ <string name="caches_filter_type">Type</string> <string name="caches_filter_track">With Trackables</string> <string name="caches_filter_clear">Clear filters</string> - <string name="caches_filter_size_title">Choose size</string> - <string name="caches_filter_type_title">Choose type</string> <string name="caches_filter_modified">With modified coordinates</string> - <string name="caches_exporting_fieldnote">Exporting as Field Notes…</string> <string name="caches_removing_from_history">Removing from History…</string> <!-- caches lists --> @@ -406,7 +383,6 @@ <string name="init_offline_wp">Store waypoints static maps for offline use</string> <string name="init_save_log_img">Save Images from Logs</string> <string name="init_units">Use Imperial Units instead of Metric Units</string> - <string name="init_nav">Use Google Navigation</string> <string name="init_log_offline">Enable Offline Logging\n(Don\'t show online Log screen when logging, don\'t send the Log online)</string> <string name="init_livelist">Show Direction to caches in the list</string> <string name="init_altitude">Altitude Correction</string> @@ -430,17 +406,11 @@ <string name="init_mapsources">Map Sources</string> <string name="init_mapsources_description">Here you can select the source for your maps. As an alternative to Google maps various OpenStreetMap styles are available and even offline map files (See <a href="http://code.google.com/p/mapsforge/">http://code.google.com/p/mapsforge/</a> for details).\nFurthermore selectable themes for offline maps are supported.</string> <string name="init_mapsource_select">Select Map Source</string> - <string name="init_select_themefolder">…</string> <string name="init_map_directory_description">Directory with offline maps</string> - <string name="init_select_map_directory">…</string> - <string name="init_select_gpx_exportdir">…</string> - <string name="init_select_gpx_importdir">…</string> <string name="init_gpx_exportdir">GPX Export Directory</string> <string name="init_gpx_importdir">GPX Import Directory</string> <string name="init_gpx_exportdir_description">Here you can select the directory for GPX exports.</string> <string name="init_gpx_importdir_description">Here you can select the directory for GPX imports.</string> - <string name="init_gpx_exportdir_select">Select GPX Export Directory</string> - <string name="init_gpx_importdir_select">Select GPX Import Directory</string> <string name="init_maptrail">Show trail on Map</string> <string name="init_share_after_export">Open share menu after GPX export</string> <string name="init_trackautovisit">Set trackables to \"Visited\" as a default</string> @@ -456,7 +426,6 @@ <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">Database on external storage</string> - <string name="init_dbmove">Moving Database</string> <string name="init_dbmove_dbmove">Moving Database</string> <string name="init_dbmove_running">Moving Database</string> <string name="init_dbmove_success">Successfully moved the database.</string> @@ -466,13 +435,6 @@ <string name="init_rendertheme_folder">Directory with custom offline map themes (optional)</string> <!-- map sources --> - <string-array name="map_sources"> - <item>@string/map_source_google_map</item> - <item>@string/map_source_google_satellite</item> - <item>@string/map_source_osm_mapnik</item> - <item>@string/map_source_osm_cyclemap</item> - <item>@string/map_source_osm_offline</item> - </string-array> <string name="map_source_google_map">Google: Map</string> <string name="map_source_google_satellite">Google: Satellite</string> <string name="map_source_osm_mapnik">OSM: Mapnik</string> @@ -534,7 +496,6 @@ <string name="cache_description">Description</string> <string name="cache_description_long">Long Description</string> <string name="cache_description_table_note">Description contains table formatting which may need to be viewed at geocaching.com to be seen correctly.</string> - <string name="cache_watchlist">Watchlist</string> <string name="cache_watchlist_on">This cache is on your watchlist.</string> <string name="cache_watchlist_not_on">This cache is not on your watchlist.</string> <string name="cache_watchlist_add">Add to Watchlist</string> @@ -575,7 +536,9 @@ <string name="cache_dialog_watchlist_remove_title">Watchlist</string> <string name="cache_dialog_watchlist_remove_message">Removing cache from your watchlist…</string> <string name="cache_menu_navigate">Navigate</string> - <string name="cache_menu_tbt">Turn-by-Turn</string> + <string name="cache_menu_navigation_drive">Navigation (Driving)</string> + <string name="cache_menu_navigation_walk">Navigation (Walking)</string> + <string name="cache_menu_maps_directions">Google Maps Directions</string> <string name="cache_menu_radar">Radar</string> <string name="cache_menu_map">Map</string> <string name="cache_menu_map_static">Static Maps</string> @@ -627,7 +590,6 @@ <string name="cache_images_loading">Loading images…</string> <string name="cache_log_types">Log types</string> <string name="cache_coordinates_no">This cache has no coordinates.</string> - <string name="cache_export_fieldnote">Export as Field Notes</string> <string name="cache_clear_history">Clear history</string> <string name="cache_remove_from_history">Remove from history</string> <string name="cache_license">License</string> @@ -655,7 +617,6 @@ <string name="gpx_import_loading_caches">Loading caches from .gpx file</string> <string name="gpx_import_loading_waypoints">Loading waypoints file</string> <string name="gpx_import_store_static_maps">Storing static maps</string> - <string name="gpx_import_storing">Writing caches to database</string> <string name="gpx_import_caches_imported">caches imported</string> <string name="gpx_import_static_maps_skipped">Download of static maps aborted</string> <string name="gpx_import_title_static_maps">Store static maps</string> @@ -675,10 +636,7 @@ <string name="map_file_select_title">Select map file</string> <!-- theme file select --> - <string name="theme_file_select_title">Select custom map theme file</string> - <!-- import --> - <string name="import_title">Import…</string> <string name="web_import_title">Import from web</string> <string name="web_import_waiting">Waiting for new caches from web…</string> <string name="web_downloading">Downloading</string> @@ -689,7 +647,6 @@ <!-- waypoint --> <string name="waypoint">Waypoint</string> - <string name="waypoint_title">Waypoint</string> <string name="waypoint_cache_coordinates">Cache coordinates</string> <string name="waypoint_custom">Custom</string> <string name="waypoint_my_coordinates">My coordinates</string> @@ -703,33 +660,18 @@ <string name="waypoint_note">Note</string> <string name="waypoint_save">Save</string> <string name="waypoint_loading">Loading waypoint…</string> - <string name="waypoint_unknown_coordinates">Coordinates unknown</string> <string name="waypoint_done">Done</string> <string name="waypoint_duplicate">Duplicate</string> <string name="waypoint_copy_of">Copy of</string> - <string name="waypoint_menu_open_cache">Open Cache</string> <string name="search_history">History</string> <string name="search_history_empty">No previous destinations</string> <string name="search_remove_destination">Destination removed</string> <string name="search_clear_history">Clear History</string> <string name="search_history_cleared">History cleared</string> - <string-array name="waypoint_coordinate_formats"> - <item>@string/waypoint_coordinate_formats_plain</item> - <item>DDD.DDDDD°</item> - <item>DDD°MM.MMM\'</item> - <item>DDD°MM\'SS.SSS\"</item> - </string-array> <string name="waypoint_coordinate_formats_plain">Plain</string> <!-- distance units --> - <string-array name="distance_units"> - <item>@string/unit_m</item> - <item>@string/unit_km</item> - <item>@string/unit_ft</item> - <item>@string/unit_yd</item> - <item>@string/unit_mi</item> - </string-array> <string name="unit_m">m</string> <string name="unit_km">km</string> <string name="unit_ft">ft</string> @@ -859,7 +801,6 @@ <!-- export --> <string name="export">Export</string> - <string name="export_as">Export as…</string> <string name="export_exportedto">exported to</string> <string name="export_failed">Export failed</string> <string name="export_fieldnotes">Field Notes</string> @@ -1029,145 +970,16 @@ <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> - <!-- status --> - <string name="status_new_release">New release available.\nClick to install.</string> - <string name="status_new_nightly">New nightly build available.\nClick to install.</string> - <string name="status_new_rc">New release candidate available.\nClick to install.</string> - <string name="status_geocaching_change">Recent changes on geocaching.com broke c:geo.\nWe are working on it, check again soon.</string> - <string name="status_geocaching_livemap">Recent changes on geocaching.com broke the live map feature.\nWe are working on it, check again soon.</string> + <!-- status (used via string based resource loading) --> + <string name="status_new_release" tools:ignore="UnusedResources">New release available.\nClick to install.</string> + <string name="status_new_nightly" tools:ignore="UnusedResources">New nightly build available.\nClick to install.</string> + <string name="status_new_rc" tools:ignore="UnusedResources">New release candidate available.\nClick to install.</string> + <string name="status_geocaching_change" tools:ignore="UnusedResources">Recent changes on geocaching.com broke c:geo.\nWe are working on it, check again soon.</string> + <string name="status_geocaching_livemap" tools:ignore="UnusedResources">Recent changes on geocaching.com broke the live map feature.\nWe are working on it, check again soon.</string> <string name="clipboard_copy_ok">Copied to clipboard</string> <plurals name="days_ago"> <item quantity="one">yesterday</item> <item quantity="other">%d days ago</item> </plurals> - - <!-- ====== please, do not translate (and include in translation) things below this line ====== --> - - <!-- contributors --> - <string name="contributors">\n - · <a href="http://carnero.cc/">carnero</a> as the father of c:geo\n - \n - · 0xErnie (localization DE)\n - · <a href="mailto:bazsy@freemail.hu">Balazs Szabo (Bazsy1983)</a> (loc. HU)\n - · Bananeweizen (code, loc. DE)\n - · blafoo (code, localization DE)\n - · Bonemaro (tester)\n - · BudBundi (localization DE, tester)\n - · campbeb (code)\n - · Charles (localization FR)\n - · Denny (localization DA)\n - · Eisbehr (code)\n - · F. Coello (localization ES)\n - · Filipe C. (code)\n - · <a href="http://www.hunterthornsberry.com">Hunter275</a> (tester)\n - · <a href="http://iirojappinen.com/">Iiro Jäppinen</a> (graphic)\n - · inkantis (localization PL)\n - · <a href="http://www.jaytech.cz/">Jan Žatecký</a> (graphic)\n - · <a href="http://joachim-wilke.de/">JoWi24</a> (code)\n - · <a href="http://github.com/koem">Karsten Priegnitz</a> (code, artwork computation)\n - · <a href="http://www.geocaching.com/email/?guid=d11a3e3d-7db0-4d43-87f2-7893238844a6">Lineflyer</a> (tester, support, localization DE)\n - · Ludovic Valente (localization FR)\n - · marco-jacob (code, loc. DE)\n - · MichielK (code, loc. NL)\n - · mucek4 (code, open source project leader)\n - · ncorreia (code, localization PT)\n - · Pascal (localization NL)\n - · Pavol Babinčák (code, loc. SK)\n - · Peter (localization HU)\n - · <a href="https://github.com/Portree-Kid">Portree Kid</a> (code)\n - · Rainer S. (code)\n - · Ray (code, loc. JA)\n - · <a href="http://seromenho.com/">Ricardo Seromenho</a> (localization PT)\n - · RoadRunner- (code, loc. DE)\n - · <a href="http://www.blueskysoftware.it/">RomNexus6</a> (localization IT)\n - · <a href="http://www.sammyshp.de/">SammysHP</a> (code, localization DE)\n - · <a href="http://www.rfc1149.net/sam.html">Samuel Tardieu</a> (code, localization FR)\n - · serenity (localization DE)\n - · Shan, a.k.a. ShakurNO (localization NO)\n - · Shizo87 (tester)\n - · stephanme/Geoteufel (code)\n - · thiasB (code, loc. DE EN)\n - · YraFyra (code, loc. SV)\n - · zenobios (code, loc. DE EN)\n - \n - · <a href="http://code.google.com/p/mapsforge/">Mapsforge</a> (OSM-rendering)\n - · <a href="http://thenounproject.com/">The Noun Project</a> (basis for attribute icons)\n - · <a href="http://commons.apache.org/">The Apache Commons Project</a>\n - · <a href="http://androidicons.com/">Android Icons</a> (<a href="https://creativecommons.org/licenses/by/3.0/">CC-BY 3.0</a>)\n - · <a href="http://rrze-icon-set.berlios.de/index.html">RRZE Icon set</a> (<a href="http://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA 3.0</a>)\n - </string> - - <!-- changelog --> - <string name="changelog">\n - <b>Next maintenance release</b>\n\n - <b>Bugfixing:</b>\n - · Found caches not shown correctly for basic members\n - · Some special log types not recognized\n - · Correction in directory selector\n - · Corrected detection of premium caches in nearby search\n - \n - <b>2012.12.12</b>\n\n - <b>New Features/Functions:</b>\n - · Opencaching.NL support in search function\n - <b>Bugfixing:</b>\n - · Adapting to geocaching.com changes\n\n - <b>2012.12.03</b>\n\n - <b>New Features/Functions:</b>\n - · If static maps are enabled, batch update of caches will now update caches without static maps first\n - · If a cache has a chirp attribute the navigation menu supports starting the Cache Beacon app\n - · Search bar on main screen now allows searching OC geocodes\n - · Removed Go4Cache support as this third party service is no longer available\n - · Selectable GPX import directory\n - · New log template for inserting owner name\n - · New option to remove colors from log entries\n - · Ability to delete GPX files after import\n - · Quick signature insertion\n - · Template for inserting smilies when logging a cache\n - · Option to identify as android browser. Might help in case of login problems on mobile networks\n - · Create and edit a personal note for each cache (not yet synchronized to geocaching.com)\n - · Quick change between different offline maps within live map\n - · Support of custom themes for offline maps (e.g. nightview)\n - · Sygic navigation support\n - · Filter for non premium member caches\n - · New image tab in cache details\n - \n - <b>Bugfixing:</b>\n - · Crash when modifying lists fixed\n - · Improvement for cache description translation\n - · Avoid crash when searching for an unactivated TB\n - · Improvement for enabling live mode on map\n - · Improvement for GPX export operations\n - · Readability improvement for cache description with dark text when using black theme\n - · Store for offline on live map now always available for basic members\n - · Live map now stays live after display rotation\n - · Open in browser improved to allow setting a default browser without losing the option to open coord.info URLs with c:geo\n - · Improve offline stability\n - · Static map download improvements\n - · Failure when importing previously exported GPX file fixed\n - · Opening a link from a TB description improved\n - · Last activity time on TB page corrected\n - · 4-digit favorite points shown correctly in lists\n - · File scan for offline maps improved\n - · Allow HTML in trackable description\n - · Live map filter now also working for basic members\n - · Improved stability for large GPX file import\n - \n - <a href="https://github.com/cgeo/c-geo-opensource/issues?milestone=8&state=closed">Detailed list of all changes</a>\n - \n - <b>Known Limitations/Bugs:</b>\n - · Live map:\n - Approximated coords due to limitations on the GC-website\n - Be aware: If navigation is started directly from live map it may also use the approximated coords!\n - In fast mode the cache type might be wrong in rare cases\n - Fast mode only detectes Tradi, Multi, Mystery, Event caches\n - On low zoom owned/found caches may not be hidden anymore\n - · Other:\n - Log images with huge size cause a long loading time\n - In special situations the logbook might not be shown completely after logging a cache\n - The personal note added to a cache is not synced to geocaching.com but will be overruled by personal notes on geocaching.com\n - On devices with HD display resolution OSM maps might not work. Please use Google maps in this case.\n - <b>Old releases</b>\n - · Please refer to the release notes on the <a href="http://www.cgeo.org">c:geo-website</a>.\n - \n</string> </resources> diff --git a/main/res/values/strings_not_translatable.xml b/main/res/values/strings_not_translatable.xml new file mode 100644 index 0000000..be7c1ec --- /dev/null +++ b/main/res/values/strings_not_translatable.xml @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string-array name="waypoint_coordinate_formats" translatable="false">
+ <item>@string/waypoint_coordinate_formats_plain</item>
+ <item>DDD.DDDDD°</item>
+ <item>DDD°MM.MMM\'</item>
+ <item>DDD°MM\'SS.SSS\"</item>
+ </string-array>
+
+ <!-- distance units -->
+ <string-array name="distance_units">
+ <item>@string/unit_m</item>
+ <item>@string/unit_km</item>
+ <item>@string/unit_ft</item>
+ <item>@string/unit_yd</item>
+ <item>@string/unit_mi</item>
+ </string-array>
+
+ <string name="init_select_themefolder" translatable="false">…</string>
+ <string name="init_select_map_directory" translatable="false">…</string>
+ <string name="init_select_gpx_exportdir" translatable="false">…</string>
+ <string name="init_select_gpx_importdir" translatable="false">…</string>
+
+ <!-- contributors -->
+ <string name="contributors" translatable="false">\n
+ · <a href="http://carnero.cc/">carnero</a> as the father of c:geo\n
+ \n
+ · 0xErnie (localization DE)\n
+ · <a href="mailto:bazsy@freemail.hu">Balazs Szabo (Bazsy1983)</a> (loc. HU)\n
+ · Bananeweizen (code, loc. DE)\n
+ · blafoo (code, localization DE)\n
+ · Bonemaro (tester)\n
+ · BudBundi (localization DE, tester)\n
+ · campbeb (code)\n
+ · Charles (localization FR)\n
+ · Denny (localization DA)\n
+ · Eisbehr (code)\n
+ · F. Coello (localization ES)\n
+ · Filipe C. (code)\n
+ · <a href="http://www.hunterthornsberry.com">Hunter275</a> (tester)\n
+ · <a href="http://iirojappinen.com/">Iiro Jäppinen</a> (graphic)\n
+ · inkantis (localization PL)\n
+ · <a href="http://www.jaytech.cz/">Jan Žatecký</a> (graphic)\n
+ · <a href="http://joachim-wilke.de/">JoWi24</a> (code)\n
+ · <a href="http://github.com/koem">Karsten Priegnitz</a> (code, artwork computation)\n
+ · <a href="http://www.geocaching.com/email/?guid=d11a3e3d-7db0-4d43-87f2-7893238844a6">Lineflyer</a> (tester, support, localization DE)\n
+ · Ludovic Valente (localization FR)\n
+ · marco-jacob (code, loc. DE)\n
+ · MichielK (code, loc. NL)\n
+ · mucek4 (code, open source project leader)\n
+ · ncorreia (code, localization PT)\n
+ · Pascal (localization NL)\n
+ · Pavol Babinčák (code, loc. SK)\n
+ · Peter (localization HU)\n
+ · <a href="https://github.com/Portree-Kid">Portree Kid</a> (code)\n
+ · Rainer S. (code)\n
+ · Ray (code, loc. JA)\n
+ · <a href="http://seromenho.com/">Ricardo Seromenho</a> (localization PT)\n
+ · RoadRunner- (code, loc. DE)\n
+ · <a href="http://www.blueskysoftware.it/">RomNexus6</a> (localization IT)\n
+ · <a href="http://www.sammyshp.de/">SammysHP</a> (code, localization DE)\n
+ · <a href="http://www.rfc1149.net/sam.html">Samuel Tardieu</a> (code, localization FR)\n
+ · serenity (localization DE)\n
+ · Shan, a.k.a. ShakurNO (localization NO)\n
+ · Shizo87 (tester)\n
+ · stephanme/Geoteufel (code)\n
+ · thiasB (code, loc. DE EN)\n
+ · YraFyra (code, loc. SV)\n
+ · zenobios (code, loc. DE EN)\n
+ \n
+ · <a href="http://code.google.com/p/mapsforge/">Mapsforge</a> (OSM-rendering)\n
+ · <a href="http://thenounproject.com/">The Noun Project</a> (basis for attribute icons)\n
+ · <a href="http://commons.apache.org/">The Apache Commons Project</a>\n
+ · <a href="http://androidicons.com/">Android Icons</a> (<a href="https://creativecommons.org/licenses/by/3.0/">CC-BY 3.0</a>)\n
+ · <a href="http://rrze-icon-set.berlios.de/index.html">RRZE Icon set</a> (<a href="http://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA 3.0</a>)\n
+ </string>
+
+ <!-- changelog -->
+ <string name="changelog" translatable="false">\n
+ <b>Next release</b>\n\n
+ <b>New Features/Functions:</b>\n
+ · Alphabetical sorting of OSM:Offline maps in map selection\n
+ · Color markers also in trackable logbook\n
+ · Edit cache type filter by clicking on filter bar\n
+ · Support for searching opencaching.nl caches\n
+ · Inverse sorting of cache lists (hit the same menu again)\n
+ \n
+ <b>Bugfixing:</b>\n
+ · Final flag icon lost when updating cache with self defined final\n
+ · Bad selection in directory chooser\n
+ · Scanning geocode by QR code\n
+ · Log type "Retract Listing" now parsed correctly\n
+ \n
+ <a href="https://github.com/cgeo/c-geo-opensource/issues?milestone=9&state=closed">Detailed list of all changes</a>\n
+ \n
+ <b>Known Limitations/Bugs:</b>\n
+ · Live map:\n
+ Approximated coords due to limitations on the GC-website\n
+ Be aware: If navigation is started directly from live map it may also use the approximated coords!\n
+ In fast mode the cache type might be wrong in rare cases\n
+ Fast mode only detectes Tradi, Multi, Mystery, Event caches\n
+ On low zoom owned/found caches may not be hidden anymore\n
+ · Other:\n
+ Log images with huge size cause a long loading time\n
+ In special situations the logbook might not be shown completely after logging a cache\n
+ The personal note added to a cache is not synced to geocaching.com but will be overruled by personal notes on geocaching.com\n
+ On devices with HD display resolution OSM maps might not work. Please use Google maps in this case.\n
+ <b>Old releases</b>\n
+ · Please refer to the release notes on the <a href="http://www.cgeo.org">c:geo-website</a>.\n
+ \n</string>
+
+</resources>
\ No newline at end of file diff --git a/main/src/cgeo/geocaching/AbstractPopupActivity.java b/main/src/cgeo/geocaching/AbstractPopupActivity.java index 830d61a..e3f7aeb 100644 --- a/main/src/cgeo/geocaching/AbstractPopupActivity.java +++ b/main/src/cgeo/geocaching/AbstractPopupActivity.java @@ -109,7 +109,7 @@ public abstract class AbstractPopupActivity extends AbstractActivity { } protected void init() { - cache = app.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); + cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); if (cache == null) { showToast(res.getString(R.string.err_detail_cache_find)); @@ -118,7 +118,7 @@ public abstract class AbstractPopupActivity extends AbstractActivity { return; } - geocode = cache.getGeocode().toUpperCase(); + geocode = cache.getGeocode(); } private void showInBrowser() { @@ -251,7 +251,7 @@ public abstract class AbstractPopupActivity extends AbstractActivity { final String cacheSize = cache.getSize() != CacheSize.UNKNOWN ? " (" + cache.getSize().getL10n() + ")" : ""; details.add(R.string.cache_type, cacheType + cacheSize); - details.add(R.string.cache_geocode, cache.getGeocode().toUpperCase()); + details.add(R.string.cache_geocode, cache.getGeocode()); details.addCacheState(cache); details.addDistance(cache, cacheDistance); @@ -276,7 +276,7 @@ public abstract class AbstractPopupActivity extends AbstractActivity { @Override public void onClick(View arg0) { - CacheDetailActivity.startActivity(AbstractPopupActivity.this, geocode.toUpperCase()); + CacheDetailActivity.startActivity(AbstractPopupActivity.this, geocode); finish(); } }); diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index 2dcafde..43af3ce 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -5,6 +5,7 @@ import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.activity.Progress; import cgeo.geocaching.apps.cache.GeneralAppsFactory; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; +import cgeo.geocaching.compatibility.Compatibility; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.connector.gc.GCConnector; @@ -15,6 +16,7 @@ import cgeo.geocaching.enumerations.LogType; import cgeo.geocaching.geopoint.GeopointFormatter; import cgeo.geocaching.geopoint.Units; import cgeo.geocaching.network.HtmlImage; +import cgeo.geocaching.network.Network; import cgeo.geocaching.network.Parameters; import cgeo.geocaching.ui.CacheDetailsCreator; import cgeo.geocaching.ui.DecryptTextClickListener; @@ -79,7 +81,6 @@ import android.view.View.OnLongClickListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.ViewParent; -import android.view.WindowManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; @@ -92,7 +93,6 @@ import android.widget.ScrollView; import android.widget.TextView; import android.widget.TextView.BufferType; -import java.net.URLEncoder; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -112,7 +112,6 @@ import java.util.regex.Pattern; */ public class CacheDetailActivity extends AbstractActivity { - private static final String EXTRAS_PAGE = "page"; private static final int MENU_FIELD_COPY = 1; private static final int MENU_FIELD_TRANSLATE = 2; private static final int MENU_FIELD_TRANSLATE_EN = 3; @@ -250,8 +249,8 @@ public class CacheDetailActivity extends AbstractActivity { // try to get data from URI if (geocode == null && guid == null && uri != null) { - String uriHost = uri.getHost().toLowerCase(); - String uriPath = uri.getPath().toLowerCase(); + String uriHost = uri.getHost().toLowerCase(Locale.US); + String uriPath = uri.getPath().toLowerCase(Locale.US); String uriQuery = uri.getQuery(); if (uriQuery != null) { @@ -265,11 +264,11 @@ public class CacheDetailActivity extends AbstractActivity { guid = uri.getQueryParameter("guid"); if (StringUtils.isNotBlank(geocode)) { - geocode = geocode.toUpperCase(); + geocode = geocode.toUpperCase(Locale.US); guid = null; } else if (StringUtils.isNotBlank(guid)) { geocode = null; - guid = guid.toLowerCase(); + guid = guid.toLowerCase(Locale.US); } else { showToast(res.getString(R.string.err_detail_open)); finish(); @@ -277,7 +276,7 @@ public class CacheDetailActivity extends AbstractActivity { } } else if (uriHost.contains("coord.info")) { if (uriPath != null && uriPath.startsWith("/gc")) { - geocode = uriPath.substring(1).toUpperCase(); + geocode = uriPath.substring(1).toUpperCase(Locale.US); } else { showToast(res.getString(R.string.err_detail_open)); finish(); @@ -300,7 +299,7 @@ public class CacheDetailActivity extends AbstractActivity { if (StringUtils.isNotBlank(name)) { title = name; } else if (null != geocode && StringUtils.isNotBlank(geocode)) { // can't be null, but the compiler doesn't understand StringUtils.isNotBlank() - title = geocode.toUpperCase(); + title = geocode; } progress.show(this, title, res.getString(R.string.cache_dialog_loading_details), true, loadCacheHandler.cancelMessage()); } catch (Exception e) { @@ -345,13 +344,7 @@ public class CacheDetailActivity extends AbstractActivity { }); // switch to entry page (last used or 2) - int entryPageIndex; - if (extras != null && extras.get(EXTRAS_PAGE) != null) { - entryPageIndex = extras.getInt(EXTRAS_PAGE); - } - else { - entryPageIndex = Settings.isOpenLastDetailsPage() ? Settings.getLastDetailsPage() : 1; - } + int entryPageIndex = Settings.isOpenLastDetailsPage() ? Settings.getLastDetailsPage() : 1; if (viewPagerAdapter.getCount() < entryPageIndex) { for (int i = 0; i <= entryPageIndex; i++) { // we can't switch to a page that is out of bounds, so we add null-pages @@ -470,7 +463,7 @@ public class CacheDetailActivity extends AbstractActivity { showToast(res.getString(R.string.translate_length_warning)); } menu.add(viewId, MENU_FIELD_TRANSLATE, 0, res.getString(R.string.translate_to_sys_lang, Locale.getDefault().getDisplayLanguage())); - if (Settings.isUseEnglish() && Locale.getDefault() != Locale.ENGLISH) { + if (Settings.isUseEnglish() && !Locale.getDefault().equals(Locale.ENGLISH)) { menu.add(viewId, MENU_FIELD_TRANSLATE_EN, 0, res.getString(R.string.translate_to_english)); } @@ -511,46 +504,44 @@ public class CacheDetailActivity extends AbstractActivity { } break; - case CONTEXT_MENU_WAYPOINT_EDIT: { - final cgWaypoint waypoint = cache.getWaypoint(index); - if (waypoint != null) { - EditWaypointActivity.startActivityEditWaypoint(this, waypoint.getId()); + case CONTEXT_MENU_WAYPOINT_EDIT: + final cgWaypoint waypointEdit = cache.getWaypoint(index); + if (waypointEdit != null) { + EditWaypointActivity.startActivityEditWaypoint(this, waypointEdit.getId()); refreshOnResume = true; } break; - } case CONTEXT_MENU_WAYPOINT_DUPLICATE: - if (cache.duplicateWaypoint(index)) { - app.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); + final cgWaypoint waypointDuplicate = cache.getWaypoint(index); + if (cache.duplicateWaypoint(waypointDuplicate)) { + cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); notifyDataSetChanged(); } break; case CONTEXT_MENU_WAYPOINT_DELETE: - if (cache.deleteWaypoint(index)) { - app.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); + final cgWaypoint waypointDelete = cache.getWaypoint(index); + if (cache.deleteWaypoint(waypointDelete)) { + cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); notifyDataSetChanged(); } break; - case CONTEXT_MENU_WAYPOINT_DEFAULT_NAVIGATION: { - final cgWaypoint waypoint = cache.getWaypoint(index); - if (waypoint != null) { - NavigationAppFactory.startDefaultNavigationApplication(1, this, waypoint); + case CONTEXT_MENU_WAYPOINT_DEFAULT_NAVIGATION: + final cgWaypoint waypointNavigation = cache.getWaypoint(index); + if (waypointNavigation != null) { + NavigationAppFactory.startDefaultNavigationApplication(1, this, waypointNavigation); } - } break; - case CONTEXT_MENU_WAYPOINT_NAVIGATE: { - final cgWaypoint waypoint = cache.getWaypoint(contextMenuWPIndex); - if (waypoint != null) { - NavigationAppFactory.showNavigationMenu(this, null, waypoint, null); + case CONTEXT_MENU_WAYPOINT_NAVIGATE: + final cgWaypoint waypointNav = cache.getWaypoint(contextMenuWPIndex); + if (waypointNav != null) { + NavigationAppFactory.showNavigationMenu(this, null, waypointNav, null); } - } break; - case CONTEXT_MENU_WAYPOINT_CACHES_AROUND: { - final cgWaypoint waypoint = cache.getWaypoint(index); - if (waypoint != null) { - cgeocaches.startActivityCoordinates(this, waypoint.getCoords()); + case CONTEXT_MENU_WAYPOINT_CACHES_AROUND: + final cgWaypoint waypointAround = cache.getWaypoint(index); + if (waypointAround != null) { + cgeocaches.startActivityCoordinates(this, waypointAround.getCoords()); } - } break; default: { if (imagesList != null && imagesList.onContextItemSelected(item)) { @@ -695,9 +686,9 @@ public class CacheDetailActivity extends AbstractActivity { // action bar: title and icon (default: mystery icon) if (StringUtils.isNotBlank(cache.getName())) { - setTitle(cache.getName() + " (" + cache.getGeocode().toUpperCase() + ')'); + setTitle(cache.getName() + " (" + cache.getGeocode() + ')'); } else { - setTitle(cache.getGeocode().toUpperCase()); + setTitle(cache.getGeocode()); } ((TextView) findViewById(R.id.actionbar_title)).setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(cache.getType().markerId), null, null, null); @@ -933,7 +924,7 @@ public class CacheDetailActivity extends AbstractActivity { cgeocaches.startActivityUserName(CacheDetailActivity.this, name.toString()); return; case 2: - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.geocaching.com/profile/?u=" + URLEncoder.encode(name.toString())))); + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.geocaching.com/profile/?u=" + Network.encode(name.toString())))); return; default: break; @@ -956,20 +947,13 @@ public class CacheDetailActivity extends AbstractActivity { if (imageView == null) { return; } - imagesList = new ImagesList(CacheDetailActivity.this, cache.getGeocode()); + imagesList = new ImagesList(this, cache.getGeocode()); imagesList.loadImages(imageView, cache.getImages(), ImageType.AllImages, false); } public static void startActivity(final Context context, final String geocode) { final Intent detailIntent = new Intent(context, CacheDetailActivity.class); - detailIntent.putExtra("geocode", geocode.toUpperCase()); - context.startActivity(detailIntent); - } - - public static void startActivity(final Context context, final String geocode, final int page) { - final Intent detailIntent = new Intent(context, CacheDetailActivity.class); - detailIntent.putExtra("geocode", geocode.toUpperCase()); - detailIntent.putExtra(EXTRAS_PAGE, page); + detailIntent.putExtra("geocode", geocode); context.startActivity(detailIntent); } @@ -1124,8 +1108,7 @@ public class CacheDetailActivity extends AbstractActivity { attributeBox.removeAllViews(); // maximum width for attribute icons is screen width - paddings of parents - attributeBoxMaxWidth = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)) - .getDefaultDisplay().getWidth(); + attributeBoxMaxWidth = Compatibility.getDisplayWidth(); ViewParent child = attributeBox; do { if (child instanceof View) { @@ -1378,7 +1361,7 @@ public class CacheDetailActivity extends AbstractActivity { details.add(R.string.cache_name, span); details.add(R.string.cache_type, cache.getType().getL10n()); details.addSize(cache); - details.add(R.string.cache_geocode, cache.getGeocode().toUpperCase()); + details.add(R.string.cache_geocode, cache.getGeocode()); details.addCacheState(cache); details.addDistance(cache, cacheDistanceView); @@ -1947,7 +1930,7 @@ public class CacheDetailActivity extends AbstractActivity { public void update(CharSequence editorText) { cache.setPersonalNote(editorText.toString()); setPersonalNote(personalNoteView); - app.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); + cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); } }); editor.show(); @@ -2269,23 +2252,12 @@ public class CacheDetailActivity extends AbstractActivity { } // colored marker - holder.statusMarker.setVisibility(View.VISIBLE); - if (log.type == LogType.FOUND_IT - || log.type == LogType.WEBCAM_PHOTO_TAKEN - || log.type == LogType.ATTENDED) { - holder.statusMarker.setImageResource(R.drawable.mark_green); - } else if (log.type == LogType.PUBLISH_LISTING - || log.type == LogType.ENABLE_LISTING - || log.type == LogType.OWNER_MAINTENANCE) { - holder.statusMarker.setImageResource(R.drawable.mark_green_more); - } else if (log.type == LogType.DIDNT_FIND_IT - || log.type == LogType.NEEDS_MAINTENANCE - || log.type == LogType.NEEDS_ARCHIVE) { - holder.statusMarker.setImageResource(R.drawable.mark_red); - } else if (log.type == LogType.TEMP_DISABLE_LISTING - || log.type == LogType.ARCHIVE) { - holder.statusMarker.setImageResource(R.drawable.mark_red_more); - } else { + int marker = log.type.markerId; + if (marker != 0) { + holder.statusMarker.setVisibility(View.VISIBLE); + holder.statusMarker.setImageResource(marker); + } + else { holder.statusMarker.setVisibility(View.GONE); } diff --git a/main/src/cgeo/geocaching/CachePopup.java b/main/src/cgeo/geocaching/CachePopup.java index e01e4a0..9b0d96d 100644 --- a/main/src/cgeo/geocaching/CachePopup.java +++ b/main/src/cgeo/geocaching/CachePopup.java @@ -79,7 +79,7 @@ public class CachePopup extends AbstractPopupActivity { if (StringUtils.isNotBlank(cache.getName())) { setTitle(cache.getName()); } else { - setTitle(geocode.toUpperCase()); + setTitle(geocode); } // actionbar icon @@ -89,8 +89,6 @@ public class CachePopup extends AbstractPopupActivity { addCacheDetails(); - findViewById(R.id.offline_box).setVisibility(View.VISIBLE); - // offline use final TextView offlineText = (TextView) findViewById(R.id.offline_text); final Button offlineRefresh = (Button) findViewById(R.id.offline_refresh); diff --git a/main/src/cgeo/geocaching/Destination.java b/main/src/cgeo/geocaching/Destination.java index 441e959..10d51be 100644 --- a/main/src/cgeo/geocaching/Destination.java +++ b/main/src/cgeo/geocaching/Destination.java @@ -34,7 +34,13 @@ public final class Destination implements ICoordinates { @Override public boolean equals(final Object obj) { - return obj != null && obj instanceof Destination && ((Destination) obj).coords.equals(coords); + if (this == obj) { + return true; + } + if (!(obj instanceof Destination)) { + return false; + } + return ((Destination) obj).coords.equals(coords); } public long getId() { diff --git a/main/src/cgeo/geocaching/DirectionProvider.java b/main/src/cgeo/geocaching/DirectionProvider.java index 14fd283..c1f83ac 100644 --- a/main/src/cgeo/geocaching/DirectionProvider.java +++ b/main/src/cgeo/geocaching/DirectionProvider.java @@ -14,7 +14,7 @@ public class DirectionProvider extends MemorySubject<Float> implements SensorEve private final SensorManager sensorManager; - // Previous values signalled to observers to avoid resending the same value when the + // Previous values signaled to observers to avoid resending the same value when the // device doesn't change orientation. The orientation is usually given with a 1 degree // precision by Android, so it is not uncommon to obtain exactly the same value several // times. @@ -38,14 +38,14 @@ public class DirectionProvider extends MemorySubject<Float> implements SensorEve @Override public void onAccuracyChanged(final Sensor sensor, int accuracy) { /* - * There is a bug in Android, which appearently causes this method to be called every - * time the sensor _value_ changed, even if the _accuracy_ did not change. So logging - * this event leads to the log being flooded with multiple entries _per second_, - * which I experienced when running cgeo in a building (with GPS and network being - * unreliable). - * - * See for example https://code.google.com/p/android/issues/detail?id=14792 - */ + * There is a bug in Android, which apparently causes this method to be called every + * time the sensor _value_ changed, even if the _accuracy_ did not change. So logging + * this event leads to the log being flooded with multiple entries _per second_, + * which I experienced when running cgeo in a building (with GPS and network being + * unreliable). + * + * See for example https://code.google.com/p/android/issues/detail?id=14792 + */ //Log.i(Settings.tag, "Compass' accuracy is low (" + accuracy + ")"); } diff --git a/main/src/cgeo/geocaching/EditWaypointActivity.java b/main/src/cgeo/geocaching/EditWaypointActivity.java index ef2a2cc..819cb03 100644 --- a/main/src/cgeo/geocaching/EditWaypointActivity.java +++ b/main/src/cgeo/geocaching/EditWaypointActivity.java @@ -250,7 +250,7 @@ public class EditWaypointActivity extends AbstractActivity { @Override public void run() { try { - waypoint = app.loadWaypoint(id); + waypoint = cgData.loadWaypoint(id); loadWaypointHandler.sendMessage(Message.obtain()); } catch (Exception e) { @@ -269,7 +269,7 @@ public class EditWaypointActivity extends AbstractActivity { } else if (gpTemp != null) { gp = gpTemp; } - cgCache cache = app.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS); + cgCache cache = cgData.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS); cgeocoords coordsDialog = new cgeocoords(EditWaypointActivity.this, cache, gp, app.currentGeo()); coordsDialog.setCancelable(true); coordsDialog.setOnCoordinateUpdate(new cgeocoords.CoordinateUpdate() { @@ -401,12 +401,12 @@ public class EditWaypointActivity extends AbstractActivity { waypoint.setNote(note); waypoint.setId(id); - cgCache cache = app.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS); + cgCache cache = cgData.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS); if (null != cache && cache.addOrChangeWaypoint(waypoint, true)) { - app.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); + cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); StaticMapsProvider.removeWpStaticMaps(id, geocode); if (Settings.isStoreOfflineWpMaps()) { - StaticMapsProvider.storeWaypointStaticMap(cache, EditWaypointActivity.this, waypoint, false); + StaticMapsProvider.storeWaypointStaticMap(cache, waypoint, false); } finish(); } else { diff --git a/main/src/cgeo/geocaching/ImagesActivity.java b/main/src/cgeo/geocaching/ImagesActivity.java index 0accf12..82902b5 100644 --- a/main/src/cgeo/geocaching/ImagesActivity.java +++ b/main/src/cgeo/geocaching/ImagesActivity.java @@ -62,7 +62,7 @@ public class ImagesActivity extends AbstractActivity { return; } - offline = app.isOffline(geocode, null) && (imgType == ImageType.SpoilerImages || Settings.isStoreLogImages()); + offline = cgData.isOffline(geocode, null) && (imgType == ImageType.SpoilerImages || Settings.isStoreLogImages()); } @Override @@ -86,7 +86,7 @@ public class ImagesActivity extends AbstractActivity { final Intent logImgIntent = new Intent(fromActivity, ImagesActivity.class); // if resuming our app within this activity, finish it and return to the cache activity logImgIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET) - .putExtra(EXTRAS_GEOCODE, geocode.toUpperCase()) + .putExtra(EXTRAS_GEOCODE, geocode) .putExtra(EXTRAS_TYPE, imageType); // avoid forcing the array list as parameter type diff --git a/main/src/cgeo/geocaching/LogTrackableActivity.java b/main/src/cgeo/geocaching/LogTrackableActivity.java index 4ddec72..a4677d0 100644 --- a/main/src/cgeo/geocaching/LogTrackableActivity.java +++ b/main/src/cgeo/geocaching/LogTrackableActivity.java @@ -127,12 +127,12 @@ public class LogTrackableActivity extends AbstractLoggingActivity implements Dat } } - trackable = app.getTrackableByGeocode(geocode); + trackable = cgData.loadTrackable(geocode); if (StringUtils.isNotBlank(trackable.getName())) { setTitle(res.getString(R.string.trackable_touch) + ": " + trackable.getName()); } else { - setTitle(res.getString(R.string.trackable_touch) + ": " + trackable.getGeocode().toUpperCase()); + setTitle(res.getString(R.string.trackable_touch) + ": " + trackable.getGeocode()); } if (guid == null) { @@ -357,7 +357,7 @@ public class LogTrackableActivity extends AbstractLoggingActivity implements Dat public static void startActivity(final Context context, final cgTrackable trackable) { final Intent logTouchIntent = new Intent(context, LogTrackableActivity.class); - logTouchIntent.putExtra("geocode", trackable.getGeocode().toUpperCase()); + logTouchIntent.putExtra("geocode", trackable.getGeocode()); logTouchIntent.putExtra("guid", trackable.getGuid()); logTouchIntent.putExtra("trackingcode", trackable.getTrackingcode()); context.startActivity(logTouchIntent); diff --git a/main/src/cgeo/geocaching/SearchActivity.java b/main/src/cgeo/geocaching/SearchActivity.java index 5f2bddc..65003e2 100644 --- a/main/src/cgeo/geocaching/SearchActivity.java +++ b/main/src/cgeo/geocaching/SearchActivity.java @@ -28,6 +28,8 @@ import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.EditText; +import java.util.Locale; + public class SearchActivity extends AbstractActivity { private static final String EXTRAS_KEYWORDSEARCH = "keywordsearch"; @@ -98,13 +100,18 @@ public class SearchActivity extends AbstractActivity { * @return true if a search was performed, else false */ private boolean instantSearch(final String query, final boolean keywordSearch) { + // first check if this was a scanned URL + String geocode = ConnectorFactory.getGeocodeFromURL(query); + + // otherwise see if this is a pure geocode + if (StringUtils.isEmpty(geocode)) { + geocode = StringUtils.trim(query); + } - // Check if any connector can handle the query as a geocode - final String geocode = StringUtils.trim(query); final IConnector connector = ConnectorFactory.getConnector(geocode); if (connector instanceof ISearchByGeocode) { final Intent cachesIntent = new Intent(this, CacheDetailActivity.class); - cachesIntent.putExtra("geocode", geocode.toUpperCase()); + cachesIntent.putExtra("geocode", geocode.toUpperCase(Locale.US)); startActivity(cachesIntent); return true; } @@ -113,7 +120,7 @@ public class SearchActivity extends AbstractActivity { final String trackable = BaseUtils.getMatch(query, GCConstants.PATTERN_TB_CODE, true, 0, "", false); if (StringUtils.isNotBlank(trackable)) { final Intent trackablesIntent = new Intent(this, cgeotrackable.class); - trackablesIntent.putExtra("geocode", trackable.toUpperCase()); + trackablesIntent.putExtra("geocode", trackable.toUpperCase(Locale.US)); startActivity(trackablesIntent); return true; } @@ -154,7 +161,7 @@ public class SearchActivity extends AbstractActivity { findByGeocodeFn(); } }); - addHistoryEntries(geocodeEdit, app.geocodesInCache()); + addHistoryEntries(geocodeEdit, cgData.getRecentGeocodesForSearch()); final Button displayByGeocode = (Button) findViewById(R.id.display_geocode); displayByGeocode.setOnClickListener(new findByGeocodeListener()); @@ -206,7 +213,7 @@ public class SearchActivity extends AbstractActivity { findTrackableFn(); } }); - addHistoryEntries(trackable, app.getTrackableCodes()); + addHistoryEntries(trackable, cgData.getTrackableCodes()); disableSuggestions(trackable); @@ -402,7 +409,7 @@ public class SearchActivity extends AbstractActivity { } final Intent trackablesIntent = new Intent(this, cgeotrackable.class); - trackablesIntent.putExtra("geocode", trackableText.toUpperCase()); + trackablesIntent.putExtra("geocode", trackableText.toUpperCase(Locale.US)); startActivity(trackablesIntent); } diff --git a/main/src/cgeo/geocaching/SearchResult.java b/main/src/cgeo/geocaching/SearchResult.java index e21717d..d39066d 100644 --- a/main/src/cgeo/geocaching/SearchResult.java +++ b/main/src/cgeo/geocaching/SearchResult.java @@ -40,38 +40,49 @@ public class SearchResult implements Parcelable { } }; + /** + * Build a new empty search result. + */ public SearchResult() { - this((Set<String>) null); + this(new HashSet<String>()); } - public SearchResult(SearchResult searchResult) { - if (searchResult != null) { - this.geocodes = new HashSet<String>(searchResult.geocodes); - this.error = searchResult.error; - this.url = searchResult.url; - this.viewstates = searchResult.viewstates; - this.setTotal(searchResult.getTotal()); - } else { - this.geocodes = new HashSet<String>(); - } + /** + * Copy a search result, for example to apply different filters on it. + * + * @param searchResult the original search result, which cannot be null + */ + public SearchResult(final SearchResult searchResult) { + geocodes = new HashSet<String>(searchResult.geocodes); + error = searchResult.error; + url = searchResult.url; + viewstates = searchResult.viewstates; + setTotal(searchResult.getTotal()); } - public SearchResult(final Set<String> geocodes, final int total) { - if (geocodes == null) { - this.geocodes = new HashSet<String>(); - } else { - this.geocodes = new HashSet<String>(geocodes.size()); - this.geocodes.addAll(geocodes); - } + /** + * Build a search result from an existing collection of geocodes. + * + * @param geocodes a non-null collection of geocodes + * @param total the total number of geocodes (FIXME: what is the meaning of this number wrt to geocodes.size()?) + */ + public SearchResult(final Collection<String> geocodes, final int total) { + this.geocodes = new HashSet<String>(geocodes.size()); + this.geocodes.addAll(geocodes); this.setTotal(total); } + /** + * Build a search result from an existing collection of geocodes. + * + * @param geocodes a non-null set of geocodes + */ public SearchResult(final Set<String> geocodes) { - this(geocodes, geocodes == null ? 0 : geocodes.size()); + this(geocodes, geocodes.size()); } public SearchResult(final Parcel in) { - ArrayList<String> list = new ArrayList<String>(); + final ArrayList<String> list = new ArrayList<String>(); in.readStringList(list); geocodes = new HashSet<String>(list); error = (StatusCode) in.readSerializable(); @@ -84,14 +95,24 @@ public class SearchResult implements Parcelable { setTotal(in.readInt()); } - public SearchResult(cgCache cache) { - this(); - addCache(cache); + /** + * Build a search result designating a single cache. + * + * @param cache the cache to include + */ + + public SearchResult(final cgCache cache) { + this(Collections.singletonList(cache)); } - public SearchResult(Collection<cgCache> caches) { + /** + * Build a search result from a collection of caches. + * + * @param caches the non-null collection of caches to include + */ + public SearchResult(final Collection<cgCache> caches) { this(); - for (cgCache cache : caches) { + for (final cgCache cache : caches) { addCache(cache); } } @@ -170,8 +191,7 @@ public class SearchResult implements Parcelable { SearchResult result = new SearchResult(this); result.geocodes.clear(); final ArrayList<cgCache> cachesForVote = new ArrayList<cgCache>(); - - final Set<cgCache> caches = cgeoapplication.getInstance().loadCaches(geocodes, LoadFlags.LOAD_CACHE_OR_DB); + final Set<cgCache> caches = cgData.loadCaches(geocodes, LoadFlags.LOAD_CACHE_OR_DB); for (cgCache cache : caches) { // Is there any reason to exclude the cache from the list? final boolean excludeCache = (excludeDisabled && cache.isDisabled()) || @@ -188,13 +208,13 @@ public class SearchResult implements Parcelable { public cgCache getFirstCacheFromResult(final EnumSet<LoadFlag> loadFlags) { if (geocodes != null && geocodes.size() >= 1) { - return cgeoapplication.getInstance().loadCache((String) geocodes.toArray()[0], loadFlags); + return cgData.loadCache((String) geocodes.toArray()[0], loadFlags); } return null; } public Set<cgCache> getCachesFromSearchResult(final EnumSet<LoadFlag> loadFlags) { - return cgeoapplication.getInstance().loadCaches(geocodes, loadFlags); + return cgData.loadCaches(geocodes, loadFlags); } /** Add the geocode to the search. No cache is loaded into the CacheCache */ @@ -213,11 +233,20 @@ public class SearchResult implements Parcelable { /** Add the cache geocode to the search and store the cache in the CacheCache */ public boolean addCache(final cgCache cache) { addGeocode(cache.getGeocode()); - return cgeoapplication.getInstance().saveCache(cache, EnumSet.of(SaveFlag.SAVE_CACHE)); + return cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_CACHE)); } public boolean isEmpty() { return geocodes.isEmpty(); } + public boolean hasUnsavedCaches() { + for (final String geocode : getGeocodes()) { + if (!cgData.isOffline(geocode, null)) { + return true; + } + } + return false; + } + } diff --git a/main/src/cgeo/geocaching/Settings.java b/main/src/cgeo/geocaching/Settings.java index e1ae9c0..a766470 100644 --- a/main/src/cgeo/geocaching/Settings.java +++ b/main/src/cgeo/geocaching/Settings.java @@ -75,7 +75,6 @@ public final class Settings { private static final String KEY_AUTO_VISIT_TRACKABLES = "trackautovisit"; private static final String KEY_AUTO_INSERT_SIGNATURE = "sigautoinsert"; private static final String KEY_ALTITUDE_CORRECTION = "altcorrection"; - private static final String KEY_USE_GOOGLE_NAVIGATION = "usegnav"; private static final String KEY_STORE_LOG_IMAGES = "logimages"; private static final String KEY_EXCLUDE_DISABLED = "excludedisabled"; private static final String KEY_EXCLUDE_OWN = "excludemine"; @@ -192,7 +191,6 @@ public final class Settings { e.putBoolean(KEY_AUTO_VISIT_TRACKABLES, old.getBoolean(KEY_AUTO_VISIT_TRACKABLES, false)); e.putBoolean(KEY_AUTO_INSERT_SIGNATURE, old.getBoolean(KEY_AUTO_INSERT_SIGNATURE, false)); e.putInt(KEY_ALTITUDE_CORRECTION, old.getInt(KEY_ALTITUDE_CORRECTION, 0)); - e.putBoolean(KEY_USE_GOOGLE_NAVIGATION, 0 != old.getInt(KEY_USE_GOOGLE_NAVIGATION, 1)); e.putBoolean(KEY_STORE_LOG_IMAGES, old.getBoolean(KEY_STORE_LOG_IMAGES, false)); e.putBoolean(KEY_EXCLUDE_DISABLED, 0 != old.getInt(KEY_EXCLUDE_DISABLED, 0)); e.putBoolean(KEY_EXCLUDE_OWN, 0 != old.getInt(KEY_EXCLUDE_OWN, 0)); @@ -672,20 +670,6 @@ public final class Settings { }); } - public static boolean isUseGoogleNavigation() { - return sharedPrefs.getBoolean(KEY_USE_GOOGLE_NAVIGATION, true); - } - - public static void setUseGoogleNavigation(final boolean useGoogleNavigation) { - editSharedSettings(new PrefRunnable() { - - @Override - public void edit(Editor edit) { - edit.putBoolean(KEY_USE_GOOGLE_NAVIGATION, useGoogleNavigation); - } - }); - } - public static boolean isAutoLoadDescription() { return sharedPrefs.getBoolean(KEY_LOAD_DESCRIPTION, false); } @@ -1331,7 +1315,7 @@ public final class Settings { FileUtils.listDir(result, directory, new ExtensionsBasedFileSelector(new String[] { "xml" }), null); - return result.toArray(new File[] {}); + return result.toArray(new File[result.size()]); } private static class ExtensionsBasedFileSelector extends FileSelector { diff --git a/main/src/cgeo/geocaching/SettingsActivity.java b/main/src/cgeo/geocaching/SettingsActivity.java index 823b52f..199e083 100644 --- a/main/src/cgeo/geocaching/SettingsActivity.java +++ b/main/src/cgeo/geocaching/SettingsActivity.java @@ -5,7 +5,6 @@ import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory.NavigationAppsEnum; import cgeo.geocaching.compatibility.Compatibility; import cgeo.geocaching.connector.gc.Login; -import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.enumerations.StatusCode; import cgeo.geocaching.files.SimpleDirChooser; import cgeo.geocaching.maps.MapProviderFactory; @@ -24,6 +23,7 @@ import ch.boye.httpclientandroidlib.HttpResponse; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; +import org.openintents.intents.FileManagerIntents; import android.app.ProgressDialog; import android.content.Context; @@ -495,16 +495,6 @@ public class SettingsActivity extends AbstractActivity { } }); - final CheckBox gnavButton = (CheckBox) findViewById(R.id.gnav); - gnavButton.setChecked(Settings.isUseGoogleNavigation()); - gnavButton.setOnClickListener(new View.OnClickListener() { - - @Override - public void onClick(View v) { - Settings.setUseGoogleNavigation(gnavButton.isChecked()); - } - }); - final CheckBox logOffline = (CheckBox) findViewById(R.id.log_offline); logOffline.setChecked(Settings.getLogOffline()); logOffline.setOnClickListener(new View.OnClickListener() { @@ -577,9 +567,7 @@ public class SettingsActivity extends AbstractActivity { @Override public void onClick(View v) { - Intent dirChooser = new Intent(SettingsActivity.this, SimpleDirChooser.class); - dirChooser.putExtra(SimpleDirChooser.START_DIR, Settings.getCustomRenderThemeBaseFolder()); - startActivityForResult(dirChooser, SELECT_THEMEFOLDER_REQUEST); + selectDirectory(Settings.getCustomRenderThemeBaseFolder(), SELECT_THEMEFOLDER_REQUEST); } }); @@ -591,9 +579,7 @@ public class SettingsActivity extends AbstractActivity { @Override public void onClick(View v) { - Intent dirChooser = new Intent(SettingsActivity.this, SimpleDirChooser.class); - dirChooser.putExtra(SimpleDirChooser.START_DIR, Settings.getGpxExportDir()); - startActivityForResult(dirChooser, SELECT_GPX_EXPORT_REQUEST); + selectDirectory(Settings.getGpxExportDir(), SELECT_GPX_EXPORT_REQUEST); } }); @@ -605,9 +591,7 @@ public class SettingsActivity extends AbstractActivity { @Override public void onClick(View v) { - Intent dirChooser = new Intent(SettingsActivity.this, SimpleDirChooser.class); - dirChooser.putExtra(SimpleDirChooser.START_DIR, Settings.getGpxImportDir()); - startActivityForResult(dirChooser, SELECT_GPX_IMPORT_REQUEST); + selectDirectory(Settings.getGpxImportDir(), SELECT_GPX_IMPORT_REQUEST); } }); @@ -775,7 +759,7 @@ public class SettingsActivity extends AbstractActivity { */ public void backup(View view) { // avoid overwriting an existing backup with an empty database (can happen directly after reinstalling the app) - if (app.getAllStoredCachesCount(true, CacheType.ALL) == 0) { + if (cgData.getAllCachesCount() == 0) { helpDialog(res.getString(R.string.init_backup), res.getString(R.string.init_backup_unnecessary)); return; } @@ -784,7 +768,7 @@ public class SettingsActivity extends AbstractActivity { new Thread() { @Override public void run() { - final String backupFileName = app.backupDatabase(); + final String backupFileName = cgData.backupDatabase(); runOnUiThread(new Runnable() { @Override public void run() { @@ -800,7 +784,7 @@ public class SettingsActivity extends AbstractActivity { private void refreshBackupLabel() { TextView lastBackup = (TextView) findViewById(R.id.backup_last); - File lastBackupFile = cgeoapplication.isRestoreFile(); + File lastBackupFile = cgData.getRestoreFile(); if (lastBackupFile != null) { lastBackup.setText(res.getString(R.string.init_backup_last) + " " + Formatter.formatTime(lastBackupFile.lastModified()) + ", " + Formatter.formatDate(lastBackupFile.lastModified())); } else { @@ -966,9 +950,12 @@ public class SettingsActivity extends AbstractActivity { @Override protected void onActivityResult(int requestCode, int resultCode, final Intent data) { super.onActivityResult(requestCode, resultCode, data); + if (resultCode != RESULT_OK) { + return; + } - if (requestCode == SELECT_MAPFILE_REQUEST) { - if (resultCode == RESULT_OK) { + switch (requestCode) { + case SELECT_MAPFILE_REQUEST: if (data.hasExtra("mapfile")) { final String mapFile = data.getStringExtra("mapfile"); Settings.setMapFile(mapFile); @@ -976,48 +963,72 @@ public class SettingsActivity extends AbstractActivity { showToast(res.getString(R.string.warn_invalid_mapfile)); } } - } - updateMapSourceMenu(); - initMapDirectoryEdittext(true); - } - if (requestCode == SELECT_GPX_EXPORT_REQUEST) { - checkDirectory(resultCode, data, R.id.gpx_exportdir, new RunnableWithArgument<String>() { + updateMapSourceMenu(); + initMapDirectoryEdittext(true); + break; + case SELECT_GPX_EXPORT_REQUEST: + checkDirectory(resultCode, data, R.id.gpx_exportdir, new RunnableWithArgument<String>() { - @Override - public void run(String directory) { - Settings.setGpxExportDir(directory); - } - }); - } - if (requestCode == SELECT_GPX_IMPORT_REQUEST) { - checkDirectory(resultCode, data, R.id.gpx_importdir, new RunnableWithArgument<String>() { + @Override + public void run(String directory) { + Settings.setGpxExportDir(directory); + } + }); + break; + case SELECT_GPX_IMPORT_REQUEST: + checkDirectory(resultCode, data, R.id.gpx_importdir, new RunnableWithArgument<String>() { - @Override - public void run(String directory) { - Settings.setGpxImportDir(directory); - } - }); - } - if (requestCode == SELECT_THEMEFOLDER_REQUEST) { - checkDirectory(resultCode, data, R.id.themefolder, new RunnableWithArgument<String>() { + @Override + public void run(String directory) { + Settings.setGpxImportDir(directory); + } + }); + break; + case SELECT_THEMEFOLDER_REQUEST: + checkDirectory(resultCode, data, R.id.themefolder, new RunnableWithArgument<String>() { - @Override - public void run(String directory) { - Settings.setCustomRenderThemeBaseFolder(directory); - } - }); + @Override + public void run(String directory) { + Settings.setCustomRenderThemeBaseFolder(directory); + } + }); + break; + default: + throw new IllegalArgumentException(); } } private void checkDirectory(int resultCode, Intent data, int textField, RunnableWithArgument<String> runnableSetDir) { - if (resultCode == RESULT_OK) { - if (data.hasExtra(SimpleDirChooser.EXTRA_CHOSEN_DIR)) { - final String directory = data.getStringExtra(SimpleDirChooser.EXTRA_CHOSEN_DIR); - runnableSetDir.run(directory); - EditText directoryText = (EditText) findViewById(textField); - directoryText.setText(directory); - directoryText.requestFocus(); + if (resultCode != RESULT_OK) { + return; + } + // we may come back from either our selfmade chooser or from the Open Intent manager + final String directory = data.hasExtra(SimpleDirChooser.EXTRA_CHOSEN_DIR) ? + data.getStringExtra(SimpleDirChooser.EXTRA_CHOSEN_DIR) : + new File(data.getData().getPath()).getAbsolutePath(); + if (StringUtils.isNotBlank(directory)) { + runnableSetDir.run(directory); + EditText directoryText = (EditText) findViewById(textField); + directoryText.setText(directory); + directoryText.requestFocus(); + } + } + + private void selectDirectory(String startDirectory, int directoryKind) { + Intent dirChooser; + try { + dirChooser = new Intent(FileManagerIntents.ACTION_PICK_DIRECTORY); + if (StringUtils.isNotBlank(startDirectory)) { + dirChooser.setData(Uri.parse("file://" + new File(startDirectory).getAbsolutePath())); } + dirChooser.putExtra(FileManagerIntents.EXTRA_TITLE, res.getString(R.string.simple_dir_chooser_title)); + dirChooser.putExtra(FileManagerIntents.EXTRA_BUTTON_TEXT, res.getString(android.R.string.ok)); + startActivityForResult(dirChooser, directoryKind); + } catch (android.content.ActivityNotFoundException ex) { + // OI file manager not available + dirChooser = new Intent(this, SimpleDirChooser.class); + dirChooser.putExtra(SimpleDirChooser.START_DIR, startDirectory); + startActivityForResult(dirChooser, directoryKind); } } diff --git a/main/src/cgeo/geocaching/StaticMapsActivity.java b/main/src/cgeo/geocaching/StaticMapsActivity.java index 05a18f2..82fa46d 100644 --- a/main/src/cgeo/geocaching/StaticMapsActivity.java +++ b/main/src/cgeo/geocaching/StaticMapsActivity.java @@ -183,16 +183,16 @@ public class StaticMapsActivity extends AbstractActivity { } private boolean downloadStaticMaps() { - final cgCache cache = app.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); + final cgCache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); if (waypoint_id == null) { showToast(res.getString(R.string.info_storing_static_maps)); - StaticMapsProvider.storeCacheStaticMap(cache, this, true); + StaticMapsProvider.storeCacheStaticMap(cache, true); return cache.hasStaticMap(); } final cgWaypoint waypoint = cache.getWaypointById(waypoint_id); if (waypoint != null) { showToast(res.getString(R.string.info_storing_static_maps)); - StaticMapsProvider.storeWaypointStaticMap(cache, this, waypoint, true); + StaticMapsProvider.storeWaypointStaticMap(cache, waypoint, true); return StaticMapsProvider.hasStaticMapForWaypoint(geocode, waypoint_id); } showToast(res.getString(R.string.err_detail_not_load_map_static)); diff --git a/main/src/cgeo/geocaching/StaticMapsProvider.java b/main/src/cgeo/geocaching/StaticMapsProvider.java index 87a04fa..f55d30a 100644 --- a/main/src/cgeo/geocaching/StaticMapsProvider.java +++ b/main/src/cgeo/geocaching/StaticMapsProvider.java @@ -1,5 +1,6 @@ package cgeo.geocaching; +import cgeo.geocaching.compatibility.Compatibility; import cgeo.geocaching.concurrent.BlockingThreadPool; import cgeo.geocaching.files.LocalStorage; import cgeo.geocaching.geopoint.GeopointFormatter.Format; @@ -12,10 +13,10 @@ import ch.boye.httpclientandroidlib.HttpResponse; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.Point; import android.util.DisplayMetrics; import android.view.Display; import android.view.WindowManager; @@ -80,11 +81,6 @@ public class StaticMapsProvider { } public static void downloadMaps(cgCache cache) { - final Display display = ((WindowManager) cgeoapplication.getInstance().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); - downloadMaps(cache, display); - } - - private static void downloadMaps(cgCache cache, Display display) { if (cache == null) { Log.e("downloadMaps - missing input parameter cache"); return; @@ -92,7 +88,7 @@ public class StaticMapsProvider { if ((!Settings.isStoreOfflineMaps() && !Settings.isStoreOfflineWpMaps()) || StringUtils.isBlank(cache.getGeocode())) { return; } - int edge = guessMaxDisplaySide(display); + int edge = guessMaxDisplaySide(); if (Settings.isStoreOfflineMaps() && cache.getCoords() != null) { storeCachePreviewMap(cache); @@ -109,8 +105,8 @@ public class StaticMapsProvider { } } - public static void storeWaypointStaticMap(cgCache cache, Activity activity, cgWaypoint waypoint, boolean waitForResult) { - int edge = StaticMapsProvider.guessMaxDisplaySide(activity); + public static void storeWaypointStaticMap(cgCache cache, cgWaypoint waypoint, boolean waitForResult) { + int edge = StaticMapsProvider.guessMaxDisplaySide(); storeWaypointStaticMap(cache.getGeocode(), edge, waypoint, waitForResult); } @@ -132,8 +128,8 @@ public class StaticMapsProvider { downloadMaps(geocode, wpMarkerUrl, WAYPOINT_PREFIX + waypoint.getId() + '_', wpLatlonMap, edge, null, waitForResult); } - public static void storeCacheStaticMap(cgCache cache, Activity activity, final boolean waitForResult) { - int edge = guessMaxDisplaySide(activity); + public static void storeCacheStaticMap(cgCache cache, final boolean waitForResult) { + int edge = guessMaxDisplaySide(); storeCacheStaticMap(cache, edge, waitForResult); } @@ -167,19 +163,16 @@ public class StaticMapsProvider { downloadMap(cache.getGeocode(), 15, ROADMAP, markerUrl, PREFIX_PREVIEW, "shadow:false|", latlonMap, width, height, null); } - private static int guessMaxDisplaySide(Display display) { - final int maxWidth = display.getWidth() - 25; - final int maxHeight = display.getHeight() - 25; + private static int guessMaxDisplaySide() { + Point displaySize = Compatibility.getDisplaySize(); + final int maxWidth = displaySize.x - 25; + final int maxHeight = displaySize.y - 25; if (maxWidth > maxHeight) { return maxWidth; } return maxHeight; } - private static int guessMaxDisplaySide(Activity activity) { - return guessMaxDisplaySide(((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()); - } - private static void downloadMaps(final String geocode, final String markerUrl, final String prefix, final String latlonMap, final int edge, final Parameters waypoints, boolean waitForResult) { if (waitForResult) { diff --git a/main/src/cgeo/geocaching/StoredList.java b/main/src/cgeo/geocaching/StoredList.java index cdff1cb..bb00506 100644 --- a/main/src/cgeo/geocaching/StoredList.java +++ b/main/src/cgeo/geocaching/StoredList.java @@ -50,7 +50,7 @@ public class StoredList { } public void promptForListSelection(final int titleId, final RunnableWithArgument<Integer> runAfterwards, final boolean onlyMoveTargets) { - final List<StoredList> lists = app.getLists(); + final List<StoredList> lists = cgData.getLists(); if (lists == null) { return; @@ -94,7 +94,7 @@ public class StoredList { @Override public void run(final String listName) { - final int newId = app.createList(listName); + final int newId = cgData.createList(listName); if (newId >= cgData.customListIdOffset) { activity.showToast(res.getString(R.string.list_dialog_create_ok)); @@ -137,12 +137,12 @@ public class StoredList { } public void promptForListRename(final int listId, final Runnable runAfterRename) { - final StoredList list = app.getList(listId); + final StoredList list = cgData.getList(listId); handleListNameInput(list.title, R.string.list_dialog_rename_title, R.string.list_dialog_rename, new RunnableWithArgument<String>() { @Override public void run(final String listName) { - app.renameList(listId, listName); + cgData.renameList(listId, listName); if (runAfterRename != null) { runAfterRename.run(); } diff --git a/main/src/cgeo/geocaching/VisitCacheActivity.java b/main/src/cgeo/geocaching/VisitCacheActivity.java index 443ef3a..76018c0 100644 --- a/main/src/cgeo/geocaching/VisitCacheActivity.java +++ b/main/src/cgeo/geocaching/VisitCacheActivity.java @@ -42,6 +42,7 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; +import java.util.Locale; public class VisitCacheActivity extends AbstractLoggingActivity implements DateDialog.DateDialogParent { static final String EXTRAS_FOUND = "found"; @@ -250,18 +251,17 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD } if ((StringUtils.isBlank(cacheid)) && StringUtils.isNotBlank(geocode)) { - cacheid = app.getCacheid(geocode); + cacheid = cgData.getCacheidForGeocode(geocode); } if (StringUtils.isBlank(geocode) && StringUtils.isNotBlank(cacheid)) { - geocode = app.getGeocode(cacheid); + geocode = cgData.getGeocodeForGuid(cacheid); } - - cache = cgeoapplication.getInstance().loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); + cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); if (StringUtils.isNotBlank(cache.getName())) { setTitle(res.getString(R.string.log_new_log) + ": " + cache.getName()); } else { - setTitle(res.getString(R.string.log_new_log) + ": " + cache.getGeocode().toUpperCase()); + setTitle(res.getString(R.string.log_new_log) + ": " + cache.getGeocode()); } init(); @@ -335,7 +335,7 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD } private static String ratingTextValue(final double rating) { - return String.format("%.1f", rating); + return String.format(Locale.getDefault(), "%.1f", rating); } @Override @@ -449,7 +449,7 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD possibleLogTypes = cache.getPossibleLogTypes(); - final LogEntry log = app.loadLogOffline(geocode); + final LogEntry log = cgData.loadLogOffline(geocode); if (log != null) { typeSelected = log.type; date.setTime(new Date(log.date)); @@ -575,7 +575,7 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD @Override public void onClick(View arg0) { //TODO: unify this method and the code in init() - app.clearLogOffline(geocode); + cgData.clearLogOffline(geocode); if (alreadyFound) { typeSelected = LogType.NOTE; @@ -686,11 +686,11 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD cache.setFound(true); } - app.updateCache(cache); + cgData.saveChangedCache(cache); } if (status == StatusCode.NO_ERROR) { - app.clearLogOffline(geocode); + cgData.clearLogOffline(geocode); } if (status == StatusCode.NO_ERROR && typeSelected == LogType.FOUND_IT && Settings.isUseTwitter() diff --git a/main/src/cgeo/geocaching/WaypointPopup.java b/main/src/cgeo/geocaching/WaypointPopup.java index 7fbfe10..eb0bc17 100644 --- a/main/src/cgeo/geocaching/WaypointPopup.java +++ b/main/src/cgeo/geocaching/WaypointPopup.java @@ -38,12 +38,12 @@ public class WaypointPopup extends AbstractPopupActivity { @Override protected void init() { super.init(); - waypoint = app.loadWaypoint(waypointId); + waypoint = cgData.loadWaypoint(waypointId); try { if (StringUtils.isNotBlank(waypoint.getName())) { setTitle(waypoint.getName()); } else { - setTitle(waypoint.getGeocode().toUpperCase()); + setTitle(waypoint.getGeocode()); } // actionbar icon @@ -53,7 +53,7 @@ public class WaypointPopup extends AbstractPopupActivity { details = new CacheDetailsCreator(this, (LinearLayout) findViewById(R.id.waypoint_details_list)); //Waypoint geocode - details.add(R.string.cache_geocode, waypoint.getPrefix().toUpperCase() + waypoint.getGeocode().toUpperCase().substring(2)); + details.add(R.string.cache_geocode, waypoint.getPrefix() + waypoint.getGeocode().substring(2)); // Edit Button final Button buttonEdit = (Button) findViewById(R.id.edit); diff --git a/main/src/cgeo/geocaching/activity/FilteredActivity.java b/main/src/cgeo/geocaching/activity/FilteredActivity.java new file mode 100644 index 0000000..0370d63 --- /dev/null +++ b/main/src/cgeo/geocaching/activity/FilteredActivity.java @@ -0,0 +1,11 @@ +package cgeo.geocaching.activity; + +import android.view.View; + +public interface FilteredActivity { + /** + * called from the filter bar view + */ + public void showFilterMenu(final View view); + +} diff --git a/main/src/cgeo/geocaching/apps/AbstractLocusApp.java b/main/src/cgeo/geocaching/apps/AbstractLocusApp.java index ac6fc1c..8f61e72 100644 --- a/main/src/cgeo/geocaching/apps/AbstractLocusApp.java +++ b/main/src/cgeo/geocaching/apps/AbstractLocusApp.java @@ -22,6 +22,7 @@ import android.location.Location; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; +import java.util.Locale; /** * for the Locus API: @@ -30,7 +31,7 @@ import java.util.List; */ public abstract class AbstractLocusApp extends AbstractApp { private static final String INTENT = Intent.ACTION_VIEW; - private static final SimpleDateFormat ISO8601DATE = new SimpleDateFormat("yyyy-MM-dd'T'"); + private static final SimpleDateFormat ISO8601DATE = new SimpleDateFormat("yyyy-MM-dd'T'", Locale.US); protected AbstractLocusApp() { super(getString(R.string.caches_map_locus), INTENT); @@ -47,11 +48,11 @@ public abstract class AbstractLocusApp extends AbstractApp { /** * Display a list of caches / waypoints in Locus - * + * * @param objectsToShow * which caches/waypoints to show * @param withCacheWaypoints - * wether to give waypoints of caches to Locus or not + * Whether to give waypoints of caches to Locus or not * @param activity */ protected static boolean showInLocus(final List<?> objectsToShow, final boolean withCacheWaypoints, final boolean export, @@ -85,7 +86,7 @@ public abstract class AbstractLocusApp extends AbstractApp { final ArrayList<PointsData> data = new ArrayList<PointsData>(); data.add(pd); DisplayData.sendDataCursor(activity, data, - "content://" + LocusDataStorageProvider.class.getCanonicalName().toLowerCase(), + "content://" + LocusDataStorageProvider.class.getCanonicalName().toLowerCase(Locale.US), export); } diff --git a/main/src/cgeo/geocaching/apps/cache/navi/AbstractNavigationApp.java b/main/src/cgeo/geocaching/apps/cache/navi/AbstractNavigationApp.java deleted file mode 100644 index 27cb47c..0000000 --- a/main/src/cgeo/geocaching/apps/cache/navi/AbstractNavigationApp.java +++ /dev/null @@ -1,26 +0,0 @@ -package cgeo.geocaching.apps.cache.navi; - -import cgeo.geocaching.cgWaypoint; -import cgeo.geocaching.apps.AbstractApp; -import cgeo.geocaching.geopoint.Geopoint; - -abstract class AbstractNavigationApp extends AbstractApp implements NavigationApp { - - protected AbstractNavigationApp(String name, String intent, String packageName) { - super(name, intent, packageName); - } - - protected AbstractNavigationApp(String name, String intent) { - super(name, intent); - } - - @Override - public boolean isEnabled(cgWaypoint waypoint) { - return waypoint != null; - } - - @Override - public boolean isEnabled(Geopoint geopoint) { - return geopoint != null; - } -} diff --git a/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java b/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java index f27b53c..f8521ad 100644 --- a/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java +++ b/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java @@ -5,8 +5,8 @@ import cgeo.geocaching.R; import cgeo.geocaching.StaticMapsActivity; import cgeo.geocaching.StaticMapsProvider; import cgeo.geocaching.cgCache; +import cgeo.geocaching.cgData; import cgeo.geocaching.cgWaypoint; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.apps.AbstractApp; @@ -30,11 +30,12 @@ abstract class AbstractStaticMapsApp extends AbstractApp implements CacheNavigat } protected static boolean hasStaticMap(cgWaypoint waypoint) { - if (waypoint==null) + if (waypoint==null) { return false; + } String geocode = waypoint.getGeocode(); int id = waypoint.getId(); - if (StringUtils.isNotEmpty(geocode) && cgeoapplication.getInstance().isOffline(geocode, null)) { + if (StringUtils.isNotEmpty(geocode) && cgData.isOffline(geocode, null)) { return StaticMapsProvider.hasStaticMapForWaypoint(geocode, id); } return false; diff --git a/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsDirectionApp.java b/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsDirectionApp.java new file mode 100644 index 0000000..db4fc1c --- /dev/null +++ b/main/src/cgeo/geocaching/apps/cache/navi/GoogleMapsDirectionApp.java @@ -0,0 +1,48 @@ +package cgeo.geocaching.apps.cache.navi; + +import cgeo.geocaching.IGeoData; +import cgeo.geocaching.R; +import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.geopoint.Geopoint; +import cgeo.geocaching.maps.MapProviderFactory; +import cgeo.geocaching.utils.Log; + +import android.app.Activity; +import android.content.Intent; +import android.net.Uri; + +public class GoogleMapsDirectionApp extends AbstractPointNavigationApp { + + protected GoogleMapsDirectionApp() { + super(getString(R.string.cache_menu_maps_directions), null); + } + + @Override + public boolean isInstalled() { + return MapProviderFactory.isGoogleMapsInstalled(); + } + + @Override + public void navigate(Activity activity, Geopoint coords) { + try { + IGeoData geo = cgeoapplication.getInstance().currentGeo(); + final Geopoint coordsNow = geo == null ? null : geo.getCoords(); + + if (coordsNow != null) { + activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri + .parse("http://maps.google.com/maps?f=d&saddr=" + + coordsNow.getLatitude() + "," + coordsNow.getLongitude() + "&daddr=" + + coords.getLatitude() + "," + coords.getLongitude()))); + } else { + activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri + .parse("http://maps.google.com/maps?f=d&daddr=" + + coords.getLatitude() + "," + coords.getLongitude()))); + } + + } catch (Exception e) { + Log.i("GoogleMapsDirection: application not available."); + } + + } + +} diff --git a/main/src/cgeo/geocaching/apps/cache/navi/GoogleNavigationApp.java b/main/src/cgeo/geocaching/apps/cache/navi/GoogleNavigationApp.java index 7258e11..e74eb89 100644 --- a/main/src/cgeo/geocaching/apps/cache/navi/GoogleNavigationApp.java +++ b/main/src/cgeo/geocaching/apps/cache/navi/GoogleNavigationApp.java @@ -1,10 +1,6 @@ package cgeo.geocaching.apps.cache.navi; -import cgeo.geocaching.IGeoData; import cgeo.geocaching.R; -import cgeo.geocaching.Settings; -import cgeo.geocaching.cgeoapplication; -import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.utils.Log; @@ -12,10 +8,13 @@ import android.app.Activity; import android.content.Intent; import android.net.Uri; -class GoogleNavigationApp extends AbstractPointNavigationApp { +abstract class GoogleNavigationApp extends AbstractPointNavigationApp { - GoogleNavigationApp() { - super(getString(R.string.cache_menu_tbt), null); + private final String mode; + + GoogleNavigationApp(final int nameResourceId, final String mode) { + super(getString(nameResourceId), null); + this.mode = mode; } @Override @@ -23,49 +22,27 @@ class GoogleNavigationApp extends AbstractPointNavigationApp { return true; } - private static boolean navigateToCoordinates(Activity activity, final Geopoint coords) { - IGeoData geo = cgeoapplication.getInstance().currentGeo(); - final Geopoint coordsNow = geo == null ? null : geo.getCoords(); - - // Google Navigation - if (Settings.isUseGoogleNavigation()) { - try { - activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri - .parse("google.navigation:ll=" + coords.getLatitude() + "," - + coords.getLongitude()))); - - return true; - } catch (Exception e) { - // nothing - } - } - - // Google Maps Directions + @Override + public void navigate(Activity activity, Geopoint coords) { try { - if (coordsNow != null) { - activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri - .parse("http://maps.google.com/maps?f=d&saddr=" - + coordsNow.getLatitude() + "," + coordsNow.getLongitude() + "&daddr=" - + coords.getLatitude() + "," + coords.getLongitude()))); - } else { - activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri - .parse("http://maps.google.com/maps?f=d&daddr=" - + coords.getLatitude() + "," + coords.getLongitude()))); - } + activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri + .parse("google.navigation:ll=" + coords.getLatitude() + "," + + coords.getLongitude() + mode))); - return true; } catch (Exception e) { - // nothing + Log.i("cgBase.runNavigation: No navigation application available."); } + } - Log.i("cgBase.runNavigation: No navigation application available."); - return false; + static class GoogleNavigationWalkingApp extends GoogleNavigationApp { + GoogleNavigationWalkingApp() { + super(R.string.cache_menu_navigation_walk, "&mode=w"); + } } - @Override - public void navigate(Activity activity, Geopoint coords) { - if (!navigateToCoordinates(activity, coords)) { - ActivityMixin.showToast(activity, getString(R.string.err_navigation_no)); + static class GoogleNavigationDrivingApp extends GoogleNavigationApp { + GoogleNavigationDrivingApp() { + super(R.string.cache_menu_navigation_drive, "&mode=d"); } } }
\ No newline at end of file diff --git a/main/src/cgeo/geocaching/apps/cache/navi/NavigationApp.java b/main/src/cgeo/geocaching/apps/cache/navi/NavigationApp.java deleted file mode 100644 index 52d16cf..0000000 --- a/main/src/cgeo/geocaching/apps/cache/navi/NavigationApp.java +++ /dev/null @@ -1,18 +0,0 @@ -package cgeo.geocaching.apps.cache.navi; - -import cgeo.geocaching.cgCache; -import cgeo.geocaching.cgWaypoint; -import cgeo.geocaching.apps.App; -import cgeo.geocaching.geopoint.Geopoint; - -import android.app.Activity; - -public interface NavigationApp extends App { - public boolean invoke(final Activity activity, - final cgCache cache, final cgWaypoint waypoint, - final Geopoint coords); - - boolean isEnabled(final cgWaypoint waypoint); - - boolean isEnabled(final Geopoint geopoint); -} diff --git a/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java b/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java index 57a71bb..0ff4af2 100644 --- a/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java +++ b/main/src/cgeo/geocaching/apps/cache/navi/NavigationAppFactory.java @@ -8,6 +8,8 @@ import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.apps.AbstractAppFactory; import cgeo.geocaching.apps.App; +import cgeo.geocaching.apps.cache.navi.GoogleNavigationApp.GoogleNavigationDrivingApp; +import cgeo.geocaching.apps.cache.navi.GoogleNavigationApp.GoogleNavigationWalkingApp; import cgeo.geocaching.geopoint.Geopoint; import android.app.Activity; @@ -40,7 +42,7 @@ public final class NavigationAppFactory extends AbstractAppFactory { /** Google Maps */ GOOGLE_MAPS(new GoogleMapsApp(), 6), /** Google Navigation */ - GOOGLE_NAVIGATION(new GoogleNavigationApp(), 7), + GOOGLE_NAVIGATION(new GoogleNavigationDrivingApp(), 7), /** Google Streetview */ GOOGLE_STREETVIEW(new StreetviewApp(), 8), /** The external OruxMaps app */ @@ -48,7 +50,15 @@ public final class NavigationAppFactory extends AbstractAppFactory { /** The external navigon app */ NAVIGON(new NavigonApp(), 10), /** The external Sygic app */ - SYGIC(new SygicNavigationApp(), 11); + SYGIC(new SygicNavigationApp(), 11), + /** + * Google Navigation in walking mode + */ + GOOGLE_NAVIGATION_WALK(new GoogleNavigationWalkingApp(), 12), + /** + * Google Maps Directions + */ + GOOGLE_MAPS_DIRECTIONS(new GoogleMapsDirectionApp(), 13); NavigationAppsEnum(App app, int id) { this.app = app; diff --git a/main/src/cgeo/geocaching/cgCache.java b/main/src/cgeo/geocaching/cgCache.java index 7035d65..6978bfa 100644 --- a/main/src/cgeo/geocaching/cgCache.java +++ b/main/src/cgeo/geocaching/cgCache.java @@ -38,7 +38,6 @@ import android.net.Uri; import android.os.Handler; import android.os.Message; import android.text.Html; -import android.text.Spannable; import java.util.ArrayList; import java.util.Calendar; @@ -66,7 +65,6 @@ public class cgCache implements ICache, IWaypoint { private String guid = ""; private CacheType cacheType = CacheType.UNKNOWN; private String name = ""; - private Spannable nameSp = null; private String ownerDisplayName = ""; private String ownerUserId = ""; private Date hidden = null; @@ -99,20 +97,20 @@ public class cgCache implements ICache, IWaypoint { private LazyInitializedList<String> attributes = new LazyInitializedList<String>() { @Override protected List<String> loadFromDatabase() { - return cgeoapplication.getInstance().loadAttributes(geocode); + return cgData.loadAttributes(geocode); } }; private LazyInitializedList<cgWaypoint> waypoints = new LazyInitializedList<cgWaypoint>() { @Override protected List<cgWaypoint> loadFromDatabase() { - return cgeoapplication.getInstance().loadWaypoints(geocode); + return cgData.loadWaypoints(geocode); } }; private List<cgImage> spoilers = null; private LazyInitializedList<LogEntry> logs = new LazyInitializedList<LogEntry>() { @Override protected List<LogEntry> loadFromDatabase() { - return cgeoapplication.getInstance().loadLogs(geocode); + return cgData.loadLogs(geocode); } }; private List<cgTrackable> inventory = null; @@ -227,9 +225,6 @@ public class cgCache implements ICache, IWaypoint { if (StringUtils.isBlank(name)) { name = other.name; } - if (StringUtils.isBlank(nameSp)) { - nameSp = other.nameSp; - } if (StringUtils.isBlank(ownerDisplayName)) { ownerDisplayName = other.ownerDisplayName; } @@ -294,12 +289,12 @@ public class cgCache implements ICache, IWaypoint { attributes.set(other.attributes); } if (waypoints.isEmpty()) { - waypoints.set(other.waypoints); + this.setWaypoints(other.waypoints.asList(), false); } else { ArrayList<cgWaypoint> newPoints = new ArrayList<cgWaypoint>(waypoints.asList()); - cgWaypoint.mergeWayPoints(newPoints, other.getWaypoints(), false); - waypoints.set(newPoints); + cgWaypoint.mergeWayPoints(newPoints, other.waypoints.asList(), false); + this.setWaypoints(newPoints, false); } if (spoilers == null) { spoilers = other.spoilers; @@ -376,7 +371,6 @@ public class cgCache implements ICache, IWaypoint { (direction != null ? direction.equals(other.direction) : null == other.direction) && (distance != null ? distance.equals(other.distance) : null == other.distance) && (elevation != null ? elevation.equals(other.elevation) : null == other.elevation) && - nameSp == other.nameSp && rating == other.rating && votes == other.votes && myVote == other.myVote && @@ -441,7 +435,7 @@ public class cgCache implements ICache, IWaypoint { } Intent logVisitIntent = new Intent((Activity) fromActivity, VisitCacheActivity.class); logVisitIntent.putExtra(VisitCacheActivity.EXTRAS_ID, cacheId); - logVisitIntent.putExtra(VisitCacheActivity.EXTRAS_GEOCODE, geocode.toUpperCase()); + logVisitIntent.putExtra(VisitCacheActivity.EXTRAS_GEOCODE, geocode); logVisitIntent.putExtra(VisitCacheActivity.EXTRAS_FOUND, found); ((Activity) fromActivity).startActivity(logVisitIntent); @@ -457,13 +451,12 @@ public class cgCache implements ICache, IWaypoint { if (logType == LogType.UNKNOWN) { return; } - cgeoapplication app = (cgeoapplication) fromActivity.getApplication(); - final boolean status = app.saveLogOffline(geocode, date.getTime(), logType, log); + final boolean status = cgData.saveLogOffline(geocode, date.getTime(), logType, log); Resources res = fromActivity.getResources(); if (status) { ActivityMixin.showToast(fromActivity, res.getString(R.string.info_log_saved)); - app.saveVisitDate(geocode); + cgData.saveVisitDate(geocode); logOffline = true; notifyChange(); @@ -603,7 +596,7 @@ public class cgCache implements ICache, IWaypoint { @Override public String getDescription() { if (description == null) { - description = StringUtils.defaultString(cgeoapplication.getInstance().getCacheDescription(geocode)); + description = StringUtils.defaultString(cgData.getCacheDescription(geocode)); } return description; } @@ -661,7 +654,7 @@ public class cgCache implements ICache, IWaypoint { } StringBuilder subject = new StringBuilder("Geocache "); - subject.append(geocode.toUpperCase()); + subject.append(geocode); if (StringUtils.isNotBlank(name)) { subject.append(" - ").append(name); } @@ -809,14 +802,6 @@ public class cgCache implements ICache, IWaypoint { this.detailed = detailed; } - public Spannable getNameSp() { - return nameSp; - } - - public void setNameSp(Spannable nameSp) { - this.nameSp = nameSp; - } - public void setHidden(final Date hidden) { if (hidden == null) { this.hidden = null; @@ -958,8 +943,7 @@ public class cgCache implements ICache, IWaypoint { } } } - - return saveToDatabase && cgeoapplication.getInstance().saveWaypoints(this); + return saveToDatabase && cgData.saveWaypoints(this); } /** @@ -1015,7 +999,7 @@ public class cgCache implements ICache, IWaypoint { } public void setGeocode(String geocode) { - this.geocode = geocode; + this.geocode = StringUtils.upperCase(geocode); } public void setCacheId(String cacheId) { @@ -1166,8 +1150,7 @@ public class cgCache implements ICache, IWaypoint { // when waypoint was edited, finalDefined may have changed resetFinalDefined(); } - - return saveToDatabase && cgeoapplication.getInstance().saveWaypoint(waypoint.getId(), geocode, waypoint); + return saveToDatabase && cgData.saveWaypoint(waypoint.getId(), geocode, waypoint); } public boolean hasWaypoints() { @@ -1206,38 +1189,42 @@ public class cgCache implements ICache, IWaypoint { /** * Duplicate a waypoint. - * - * @param index the waypoint to duplicate + * + * @param original + * the waypoint to duplicate * @return <code>true</code> if the waypoint was duplicated, <code>false</code> otherwise (invalid index) */ - public boolean duplicateWaypoint(final int index) { - final cgWaypoint original = getWaypoint(index); + public boolean duplicateWaypoint(final cgWaypoint original) { if (original == null) { return false; } + final int index = getWaypointIndex(original); final cgWaypoint copy = new cgWaypoint(original); copy.setUserDefined(); copy.setName(cgeoapplication.getInstance().getString(R.string.waypoint_copy_of) + " " + copy.getName()); waypoints.add(index + 1, copy); - return cgeoapplication.getInstance().saveWaypoint(-1, geocode, copy); + return cgData.saveWaypoint(-1, geocode, copy); } /** * delete a user defined waypoint * - * @param index - * of the waypoint in cache's waypoint list + * @param waypoint + * to be removed from cache * @return <code>true</code>, if the waypoint was deleted */ - public boolean deleteWaypoint(final int index) { - final cgWaypoint waypoint = getWaypoint(index); + public boolean deleteWaypoint(final cgWaypoint waypoint) { if (waypoint == null) { return false; } + if (waypoint.getId() <= 0) { + return false; + } if (waypoint.isUserDefined()) { + final int index = getWaypointIndex(waypoint); waypoints.remove(index); - cgeoapplication.getInstance().deleteWaypoint(waypoint.getId()); - cgeoapplication.getInstance().removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE)); + cgData.deleteWaypoint(waypoint.getId()); + cgData.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE)); // Check status if Final is defined if (waypoint.isFinalWithCoords()) { resetFinalDefined(); @@ -1248,22 +1235,6 @@ public class cgCache implements ICache, IWaypoint { } /** - * delete a user defined waypoint - * - * @param waypoint - * to be removed from cache - * @return <code>true</code>, if the waypoint was deleted - */ - public boolean deleteWaypoint(final cgWaypoint waypoint) { - if (waypoint.getId() <= 0) { - return false; - } - - final int index = getWaypointIndex(waypoint); - return index >= 0 && deleteWaypoint(index); - } - - /** * Find index of given <code>waypoint</code> in cache's <code>waypoints</code> list * * @param waypoint @@ -1391,8 +1362,8 @@ public class cgCache implements ICache, IWaypoint { public void drop(Handler handler) { try { - cgeoapplication.getInstance().markDropped(Collections.singletonList(this)); - cgeoapplication.getInstance().removeCache(getGeocode(), EnumSet.of(RemoveFlag.REMOVE_CACHE)); + cgData.markDropped(Collections.singletonList(this)); + cgData.removeCache(getGeocode(), EnumSet.of(RemoveFlag.REMOVE_CACHE)); handler.sendMessage(Message.obtain()); } catch (Exception e) { @@ -1443,7 +1414,7 @@ public class cgCache implements ICache, IWaypoint { } public void refresh(int newListId, CancellableHandler handler) { - cgeoapplication.getInstance().removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE)); + cgData.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE)); storeCache(null, geocode, newListId, true, handler); } @@ -1516,7 +1487,7 @@ public class cgCache implements ICache, IWaypoint { } cache.setListId(listId); - cgeoapplication.getInstance().saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); + cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); if (CancellableHandler.isCancelled(handler)) { return; @@ -1538,10 +1509,9 @@ public class cgCache implements ICache, IWaypoint { return null; } - final cgeoapplication app = cgeoapplication.getInstance(); - if (!forceReload && listId == StoredList.TEMPORARY_LIST_ID && (app.isOffline(geocode, guid) || app.isThere(geocode, guid, true, true))) { + if (!forceReload && listId == StoredList.TEMPORARY_LIST_ID && (cgData.isOffline(geocode, guid) || cgData.isThere(geocode, guid, true, true))) { final SearchResult search = new SearchResult(); - final String realGeocode = StringUtils.isNotBlank(geocode) ? geocode : app.getGeocode(guid); + final String realGeocode = StringUtils.isNotBlank(geocode) ? geocode : cgData.getGeocodeForGuid(guid); search.addGeocode(realGeocode); return search; } @@ -1613,8 +1583,7 @@ public class cgCache implements ICache, IWaypoint { * @return */ public boolean hasAttribute(CacheAttribute attribute, boolean yes) { - // lazy loading of attributes - cgCache fullCache = cgeoapplication.getInstance().loadCache(getGeocode(), EnumSet.of(LoadFlag.LOAD_ATTRIBUTES)); + cgCache fullCache = cgData.loadCache(getGeocode(), EnumSet.of(LoadFlag.LOAD_ATTRIBUTES)); if (fullCache == null) { fullCache = this; } diff --git a/main/src/cgeo/geocaching/cgData.java b/main/src/cgeo/geocaching/cgData.java index b822c2b..5d18b39 100644 --- a/main/src/cgeo/geocaching/cgData.java +++ b/main/src/cgeo/geocaching/cgData.java @@ -23,7 +23,6 @@ import android.content.ContextWrapper; import android.content.res.Resources; import android.database.Cursor; import android.database.DatabaseUtils; -import android.database.DatabaseUtils.InsertHelper; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteDoneException; @@ -48,6 +47,10 @@ import java.util.regex.Pattern; public class cgData { + private cgData() { + // utility class + } + public enum StorageLocation { HEAP, CACHE, @@ -72,8 +75,8 @@ public class cgData { * holds the column indexes of the cache table to avoid lookups */ private static int[] cacheColumnIndex; - private CacheCache cacheCache = new CacheCache(); - private SQLiteDatabase database = null; + private static CacheCache cacheCache = new CacheCache(); + private static SQLiteDatabase database = null; private static final int dbVersion = 64; public static final int customListIdOffset = 10; private static final String dbName = "data"; @@ -151,9 +154,6 @@ public class cgData { + "updated long not null, " // date of save + "attribute text " + "); "; - private final static int ATTRIBUTES_GEOCODE = 2; - private final static int ATTRIBUTES_UPDATED = 3; - private final static int ATTRIBUTES_ATTRIBUTE = 4; private static final String dbCreateWaypoints = "" + "create table " + dbTableWaypoints + " (" @@ -191,14 +191,6 @@ public class cgData { + "found integer not null default 0, " + "friend integer " + "); "; - private final static int LOGS_GEOCODE = 2; - private final static int LOGS_UPDATED = 3; - private final static int LOGS_TYPE = 4; - private final static int LOGS_AUTHOR = 5; - private final static int LOGS_LOG = 6; - private final static int LOGS_DATE = 7; - private final static int LOGS_FOUND = 8; - private final static int LOGS_FRIEND = 9; private static final String dbCreateLogCount = "" + "create table " + dbTableLogCount + " (" @@ -246,10 +238,10 @@ public class cgData { + "longitude double " + "); "; - private HashMap<String, SQLiteStatement> statements = new HashMap<String, SQLiteStatement>(); private static boolean newlyCreatedDatabase = false; + private static boolean databaseCleaned = false; - public synchronized void init() { + public synchronized static void init() { if (database != null) { return; } @@ -262,35 +254,28 @@ public class cgData { } } - public void closeDb() { + public static void closeDb() { if (database == null) { return; } cacheCache.removeAllFromCache(); - clearPreparedStatements(); + PreparedStatements.clearPreparedStatements(); database.close(); database = null; } - private void clearPreparedStatements() { - for (SQLiteStatement statement : statements.values()) { - statement.close(); - } - statements.clear(); - } - - private static File backupFile() { + private static File getBackupFile() { return new File(LocalStorage.getStorage(), "cgeo.sqlite"); } - public String backupDatabase() { + public static String backupDatabase() { if (!LocalStorage.isExternalStorageAvailable()) { Log.w("Database wasn't backed up: no external memory"); return null; } - final File target = backupFile(); + final File target = getBackupFile(); closeDb(); final boolean backupDone = LocalStorage.copy(databasePath(), target); init(); @@ -304,7 +289,7 @@ public class cgData { return target.getPath(); } - public boolean moveDatabase() { + public static boolean moveDatabase() { if (!LocalStorage.isExternalStorageAvailable()) { Log.w("Database was not moved: external memory not available"); return false; @@ -340,18 +325,18 @@ public class cgData { return databasePath(Settings.isDbOnSDCard()); } - public static File isRestoreFile() { - final File fileSourceFile = backupFile(); + public static File getRestoreFile() { + final File fileSourceFile = getBackupFile(); return fileSourceFile.exists() ? fileSourceFile : null; } - public boolean restoreDatabase() { + public static boolean restoreDatabase() { if (!LocalStorage.isExternalStorageAvailable()) { Log.w("Database wasn't restored: no external memory"); return false; } - final File sourceFile = backupFile(); + final File sourceFile = getBackupFile(); closeDb(); final boolean restoreDone = LocalStorage.copy(sourceFile, databasePath()); init(); @@ -680,7 +665,7 @@ public class cgData { final FilenameFilter filter = new FilenameFilter() { @Override public boolean accept(File dir, String filename) { - return (filename.startsWith("map_") && filename.contains("__")); + return filename.startsWith("map_") && filename.contains("__"); } }; for (File dir : geocodeDirs) { @@ -751,7 +736,7 @@ public class cgData { db.execSQL("drop table if exists " + dbTableTrackables); } - public String[] allDetailedThere() { + public static String[] getRecentGeocodesForSearch() { init(); Cursor cursor = null; @@ -795,7 +780,7 @@ public class cgData { return list.toArray(new String[list.size()]); } - public boolean isThere(String geocode, String guid, boolean detailed, boolean checkTime) { + public static boolean isThere(String geocode, String guid, boolean detailed, boolean checkTime) { init(); Cursor cursor = null; @@ -878,7 +863,7 @@ public class cgData { } /** is cache stored in one of the lists (not only temporary) */ - public boolean isOffline(String geocode, String guid) { + public static boolean isOffline(String geocode, String guid) { if (StringUtils.isBlank(geocode) && StringUtils.isBlank(guid)) { return false; } @@ -888,11 +873,11 @@ public class cgData { final SQLiteStatement listId; final String value; if (StringUtils.isNotBlank(geocode)) { - listId = getStatementListIdFromGeocode(); + listId = PreparedStatements.getListIdOfGeocode(); value = geocode; } else { - listId = getStatementListIdFromGuid(); + listId = PreparedStatements.getListIdOfGuid(); value = guid; } synchronized (listId) { @@ -908,14 +893,14 @@ public class cgData { return false; } - public String getGeocodeForGuid(String guid) { + public static String getGeocodeForGuid(String guid) { if (StringUtils.isBlank(guid)) { return null; } init(); try { - final SQLiteStatement description = getStatementGeocode(); + final SQLiteStatement description = PreparedStatements.getGeocodeOfGuid(); synchronized (description) { description.bindString(1, guid); return description.simpleQueryForString(); @@ -929,14 +914,14 @@ public class cgData { return null; } - public String getCacheidForGeocode(String geocode) { + public static String getCacheidForGeocode(String geocode) { if (StringUtils.isBlank(geocode)) { return null; } init(); try { - final SQLiteStatement description = getStatementCacheId(); + final SQLiteStatement description = PreparedStatements.getCacheIdOfGeocode(); synchronized (description) { description.bindString(1, geocode); return description.simpleQueryForString(); @@ -959,7 +944,7 @@ public class cgData { * * @return true = cache saved successfully to the CacheCache/DB */ - public boolean saveCache(cgCache cache, EnumSet<LoadFlags.SaveFlag> saveFlags) { + public static boolean saveCache(cgCache cache, EnumSet<LoadFlags.SaveFlag> saveFlags) { if (cache == null) { throw new IllegalArgumentException("cache must not be null"); } @@ -1062,7 +1047,7 @@ public class cgData { database.setTransactionSuccessful(); result = true; } catch (Exception e) { - // nothing + Log.e("SaveCache", e); } finally { database.endTransaction(); } @@ -1070,25 +1055,21 @@ public class cgData { return result; } - private void saveAttributesWithoutTransaction(final cgCache cache) { + private static void saveAttributesWithoutTransaction(final cgCache cache) { String geocode = cache.getGeocode(); database.delete(dbTableAttributes, "geocode = ?", new String[]{geocode}); - if (cache.getAttributes().isNotEmpty()) { - - InsertHelper helper = new InsertHelper(database, dbTableAttributes); - long timeStamp = System.currentTimeMillis(); - - for (String attribute : cache.getAttributes()) { - helper.prepareForInsert(); - - helper.bind(ATTRIBUTES_GEOCODE, geocode); - helper.bind(ATTRIBUTES_UPDATED, timeStamp); - helper.bind(ATTRIBUTES_ATTRIBUTE, attribute); + if (cache.getAttributes().isEmpty()) { + return; + } + SQLiteStatement statement = PreparedStatements.getInsertAttribute(); + final long timestamp = System.currentTimeMillis(); + for (String attribute : cache.getAttributes()) { + statement.bindString(1, geocode); + statement.bindLong(2, timestamp); + statement.bindString(3, attribute); - helper.execute(); - } - helper.close(); + statement.executeInsert(); } } @@ -1098,16 +1079,14 @@ public class cgData { * @param destination * a destination to save */ - public void saveSearchedDestination(final Destination destination) { + public static void saveSearchedDestination(final Destination destination) { init(); database.beginTransaction(); try { - ContentValues values = new ContentValues(); - values.put("date", destination.getDate()); - putCoords(values, destination.getCoords()); - database.insert(dbTableSearchDestionationHistory, null, values); + SQLiteStatement insertDestination = PreparedStatements.getInsertSearchDestination(destination); + insertDestination.executeInsert(); database.setTransactionSuccessful(); } catch (Exception e) { Log.e("Updating searchedDestinations db failed", e); @@ -1116,7 +1095,7 @@ public class cgData { } } - public boolean saveWaypoints(final cgCache cache) { + public static boolean saveWaypoints(final cgCache cache) { boolean result = false; init(); database.beginTransaction(); @@ -1133,7 +1112,7 @@ public class cgData { return result; } - private void saveOriginalWaypointsWithoutTransaction(final cgCache cache) { + private static void saveOriginalWaypointsWithoutTransaction(final cgCache cache) { String geocode = cache.getGeocode(); database.delete(dbTableWaypoints, "geocode = ? and type <> ? and own = 0", new String[]{geocode, "own"}); @@ -1196,7 +1175,7 @@ public class cgData { return new Geopoint(cursor.getDouble(indexLat), cursor.getDouble(indexLon)); } - public boolean saveWaypoint(int id, String geocode, cgWaypoint waypoint) { + private static boolean saveWaypointInternal(int id, String geocode, cgWaypoint waypoint) { if ((StringUtils.isBlank(geocode) && id <= 0) || waypoint == null) { return false; } @@ -1234,7 +1213,7 @@ public class cgData { return ok; } - public boolean deleteWaypoint(int id) { + public static boolean deleteWaypoint(int id) { if (id == 0) { return false; } @@ -1244,28 +1223,32 @@ public class cgData { return database.delete(dbTableWaypoints, "_id = " + id, null) > 0; } - private void saveSpoilersWithoutTransaction(final cgCache cache) { + private static void saveSpoilersWithoutTransaction(final cgCache cache) { String geocode = cache.getGeocode(); database.delete(dbTableSpoilers, "geocode = ?", new String[]{geocode}); List<cgImage> spoilers = cache.getSpoilers(); if (CollectionUtils.isNotEmpty(spoilers)) { - ContentValues values = new ContentValues(); - long timeStamp = System.currentTimeMillis(); + SQLiteStatement insertSpoiler = PreparedStatements.getInsertSpoiler(); + final long timestamp = System.currentTimeMillis(); for (cgImage spoiler : spoilers) { - values.clear(); - values.put("geocode", geocode); - values.put("updated", timeStamp); - values.put("url", spoiler.getUrl()); - values.put("title", spoiler.getTitle()); - values.put("description", spoiler.getDescription()); - - database.insert(dbTableSpoilers, null, values); + insertSpoiler.bindString(1, geocode); + insertSpoiler.bindLong(2, timestamp); + insertSpoiler.bindString(3, spoiler.getUrl()); + insertSpoiler.bindString(4, spoiler.getTitle()); + final String description = spoiler.getDescription(); + if (description != null) { + insertSpoiler.bindString(5, description); + } + else { + insertSpoiler.bindNull(5); + } + insertSpoiler.executeInsert(); } } } - private void saveLogsWithoutTransaction(final String geocode, final Iterable<LogEntry> logs) { + private static void saveLogsWithoutTransaction(final String geocode, final Iterable<LogEntry> logs) { // TODO delete logimages referring these logs database.delete(dbTableLogs, "geocode = ?", new String[]{geocode}); @@ -1273,59 +1256,51 @@ public class cgData { return; } - InsertHelper helper = new InsertHelper(database, dbTableLogs); - long timeStamp = System.currentTimeMillis(); + SQLiteStatement insertLog = PreparedStatements.getInsertLog(); + final long timestamp = System.currentTimeMillis(); for (LogEntry log : logs) { - helper.prepareForInsert(); - - helper.bind(LOGS_GEOCODE, geocode); - helper.bind(LOGS_UPDATED, timeStamp); - helper.bind(LOGS_TYPE, log.type.id); - helper.bind(LOGS_AUTHOR, log.author); - helper.bind(LOGS_LOG, log.log); - helper.bind(LOGS_DATE, log.date); - helper.bind(LOGS_FOUND, log.found); - helper.bind(LOGS_FRIEND, log.friend); - - long log_id = helper.execute(); - + insertLog.bindString(1, geocode); + insertLog.bindLong(2, timestamp); + insertLog.bindLong(3, log.type.id); + insertLog.bindString(4, log.author); + insertLog.bindString(5, log.log); + insertLog.bindLong(6, log.date); + insertLog.bindLong(7, log.found); + insertLog.bindLong(8, log.friend ? 1 : 0); + long logId = insertLog.executeInsert(); if (log.hasLogImages()) { - ContentValues values = new ContentValues(); + SQLiteStatement insertImage = PreparedStatements.getInsertLogImage(); for (cgImage img : log.getLogImages()) { - values.clear(); - values.put("log_id", log_id); - values.put("title", img.getTitle()); - values.put("url", img.getUrl()); - database.insert(dbTableLogImages, null, values); + insertImage.bindLong(1, logId); + insertImage.bindString(2, img.getTitle()); + insertImage.bindString(3, img.getUrl()); + insertImage.executeInsert(); } } } - helper.close(); } - private void saveLogCountsWithoutTransaction(final cgCache cache) { + private static void saveLogCountsWithoutTransaction(final cgCache cache) { String geocode = cache.getGeocode(); database.delete(dbTableLogCount, "geocode = ?", new String[]{geocode}); Map<LogType, Integer> logCounts = cache.getLogCounts(); if (MapUtils.isNotEmpty(logCounts)) { - ContentValues values = new ContentValues(); - Set<Entry<LogType, Integer>> logCountsItems = logCounts.entrySet(); - long timeStamp = System.currentTimeMillis(); + SQLiteStatement insertLogCounts = PreparedStatements.getInsertLogCounts(); + final long timestamp = System.currentTimeMillis(); for (Entry<LogType, Integer> pair : logCountsItems) { - values.clear(); - values.put("geocode", geocode); - values.put("updated", timeStamp); - values.put("type", pair.getKey().id); - values.put("count", pair.getValue()); + insertLogCounts.bindString(1, geocode); + insertLogCounts.bindLong(2, timestamp); + insertLogCounts.bindLong(3, pair.getKey().id); + insertLogCounts.bindLong(4, pair.getValue()); - database.insert(dbTableLogCount, null, values); + insertLogCounts.executeInsert(); } } } - public boolean saveTrackable(final cgTrackable trackable) { + public static boolean saveTrackable(final cgTrackable trackable) { init(); database.beginTransaction(); @@ -1339,7 +1314,7 @@ public class cgData { return true; } - private void saveInventoryWithoutTransaction(final String geocode, final List<cgTrackable> trackables) { + private static void saveInventoryWithoutTransaction(final String geocode, final List<cgTrackable> trackables) { if (geocode != null) { database.delete(dbTableTrackables, "geocode = ?", new String[]{geocode}); } @@ -1376,7 +1351,7 @@ public class cgData { } } - public Viewport getBounds(final Set<String> geocodes) { + public static Viewport getBounds(final Set<String> geocodes) { if (CollectionUtils.isEmpty(geocodes)) { return null; } @@ -1392,7 +1367,7 @@ public class cgData { * The Geocode GCXXXX * @return the loaded cache (if found). Can be null */ - public cgCache loadCache(final String geocode, final EnumSet<LoadFlag> loadFlags) { + public static cgCache loadCache(final String geocode, final EnumSet<LoadFlag> loadFlags) { if (StringUtils.isBlank(geocode)) { throw new IllegalArgumentException("geocode must not be empty"); } @@ -1407,7 +1382,7 @@ public class cgData { * @param geocodes * @return Set of loaded caches. Never null. */ - public Set<cgCache> loadCaches(final Set<String> geocodes, final EnumSet<LoadFlag> loadFlags) { + public static Set<cgCache> loadCaches(final Set<String> geocodes, final EnumSet<LoadFlag> loadFlags) { if (CollectionUtils.isEmpty(geocodes)) { return new HashSet<cgCache>(); } @@ -1463,7 +1438,7 @@ public class cgData { * @param loadFlags * @return Set of loaded caches. Never null. */ - private Set<cgCache> loadCachesFromGeocodes(final Set<String> geocodes, final EnumSet<LoadFlag> loadFlags) { + private static Set<cgCache> loadCachesFromGeocodes(final Set<String> geocodes, final EnumSet<LoadFlag> loadFlags) { if (CollectionUtils.isEmpty(geocodes)) { return Collections.emptySet(); } @@ -1689,7 +1664,7 @@ public class cgData { return cache; } - public List<String> loadAttributes(String geocode) { + public static List<String> loadAttributes(String geocode) { if (StringUtils.isBlank(geocode)) { return null; } @@ -1724,7 +1699,7 @@ public class cgData { return attributes; } - public cgWaypoint loadWaypoint(int id) { + public static cgWaypoint loadWaypoint(int id) { if (id == 0) { return null; } @@ -1758,7 +1733,7 @@ public class cgData { return waypoint; } - public List<cgWaypoint> loadWaypoints(final String geocode) { + public static List<cgWaypoint> loadWaypoints(final String geocode) { if (StringUtils.isBlank(geocode)) { return null; } @@ -1812,7 +1787,7 @@ public class cgData { return waypoint; } - private List<cgImage> loadSpoilers(String geocode) { + private static List<cgImage> loadSpoilers(String geocode) { if (StringUtils.isBlank(geocode)) { return null; } @@ -1857,7 +1832,7 @@ public class cgData { * * @return A list of previously entered destinations or an empty list. */ - public List<Destination> loadHistoryOfSearchedLocations() { + public static List<Destination> loadHistoryOfSearchedLocations() { init(); Cursor cursor = database.query(dbTableSearchDestionationHistory, @@ -1896,7 +1871,7 @@ public class cgData { return destinations; } - public boolean clearSearchedDestinations() { + public static boolean clearSearchedDestinations() { boolean success = true; init(); database.beginTransaction(); @@ -1914,7 +1889,7 @@ public class cgData { return success; } - public List<LogEntry> loadLogs(String geocode) { + public static List<LogEntry> loadLogs(String geocode) { List<LogEntry> logs = new ArrayList<LogEntry>(); if (StringUtils.isBlank(geocode)) { @@ -1967,7 +1942,7 @@ public class cgData { return logs; } - public Map<LogType, Integer> loadLogCounts(String geocode) { + public static Map<LogType, Integer> loadLogCounts(String geocode) { if (StringUtils.isBlank(geocode)) { return null; } @@ -2006,7 +1981,7 @@ public class cgData { return logCounts; } - private List<cgTrackable> loadInventory(String geocode) { + private static List<cgTrackable> loadInventory(String geocode) { if (StringUtils.isBlank(geocode)) { return null; } @@ -2042,7 +2017,7 @@ public class cgData { return trackables; } - public cgTrackable loadTrackable(String geocode) { + public static cgTrackable loadTrackable(String geocode) { if (StringUtils.isBlank(geocode)) { return null; } @@ -2073,7 +2048,7 @@ public class cgData { return trackable; } - private cgTrackable createTrackableFromDatabaseContent(Cursor cursor) { + private static cgTrackable createTrackableFromDatabaseContent(Cursor cursor) { cgTrackable trackable = new cgTrackable(); trackable.setGeocode(cursor.getString(cursor.getColumnIndex("tbcode"))); trackable.setGuid(cursor.getString(cursor.getColumnIndex("guid"))); @@ -2095,103 +2070,82 @@ public class cgData { } /** - * Number of caches stored. The number is shown on the starting activity of c:geo + * Number of caches stored for a given type and/or list * - * @param detailedOnly * @param cacheType * @param list * @return */ - public int getAllStoredCachesCount(final boolean detailedOnly, final CacheType cacheType, final int list) { + public static int getAllStoredCachesCount(final CacheType cacheType, final int list) { if (cacheType == null) { throw new IllegalArgumentException("cacheType must not be null"); } - init(); - - String listSql; - String listSqlW; - if (list == 0) { - listSql = " where reason >= 1"; - listSqlW = " and reason >= 1"; - } else if (list >= 1) { - listSql = " where reason = " + list; - listSqlW = " and reason = " + list; - } else { - return 0; + if (list < 0) { + throw new IllegalArgumentException("list must be >= 0"); } + init(); - int count = 0; try { - String sql; - if (!detailedOnly) { - if (cacheType == CacheType.ALL) { - sql = "select count(_id) from " + dbTableCaches + listSql; - } else { - sql = "select count(_id) from " + dbTableCaches + " where type = " + DatabaseUtils.sqlEscapeString(cacheType.id) + listSqlW; - } - } else { - if (cacheType == CacheType.ALL) { - sql = "select count(_id) from " + dbTableCaches + " where detailed = 1" + listSqlW; - } else { - sql = "select count(_id) from " + dbTableCaches + " where detailed = 1 and type = " + DatabaseUtils.sqlEscapeString(cacheType.id) + listSqlW; - } + StringBuilder sql = new StringBuilder("select count(_id) from " + dbTableCaches + " where detailed = 1"); + if (cacheType != CacheType.ALL) { + sql.append(" and type = ").append(DatabaseUtils.sqlEscapeString(cacheType.id)); + } + if (list == 0) { + sql.append(" and reason > 0"); + } else if (list >= 1) { + sql.append(" and reason = ").append(list); } - SQLiteStatement compiledStmnt = database.compileStatement(sql); - count = (int) compiledStmnt.simpleQueryForLong(); - compiledStmnt.close(); + + String key = "CountCaches_" + cacheType.id + "_" + Integer.toString(list); + + SQLiteStatement compiledStmnt = PreparedStatements.getStatement(key, sql.toString()); + return (int) compiledStmnt.simpleQueryForLong(); } catch (Exception e) { Log.e("cgData.loadAllStoredCachesCount: " + e.toString()); } - return count; + return 0; } - public int getAllHistoricCachesCount() { + public static int getAllHistoryCachesCount() { init(); - int count = 0; - try { - SQLiteStatement sqlCount = database.compileStatement("select count(_id) from " + dbTableCaches + " where visiteddate > 0"); - count = (int) sqlCount.simpleQueryForLong(); - sqlCount.close(); + return (int) PreparedStatements.getCountHistoryCaches().simpleQueryForLong(); } catch (Exception e) { Log.e("cgData.getAllHistoricCachesCount: " + e.toString()); } - return count; + return 0; } /** * Return a batch of stored geocodes. * - * @param detailedOnly * @param coords * the current coordinates to sort by distance, or null to sort by geocode * @param cacheType * @param listId - * @return + * @return a non-null set of geocodes */ - public Set<String> loadBatchOfStoredGeocodes(final boolean detailedOnly, final Geopoint coords, final CacheType cacheType, final int listId) { + private static Set<String> loadBatchOfStoredGeocodes(final Geopoint coords, final CacheType cacheType, final int listId) { if (cacheType == null) { throw new IllegalArgumentException("cacheType must not be null"); } init(); - Set<String> geocodes = new HashSet<String>(); - - StringBuilder specifySql = new StringBuilder(); + final Set<String> geocodes = new HashSet<String>(); - specifySql.append("reason "); - specifySql.append(listId != StoredList.ALL_LIST_ID ? "=" + Math.max(listId, 1) : ">= " + StoredList.STANDARD_LIST_ID); + final StringBuilder selection = new StringBuilder(); - if (detailedOnly) { - specifySql.append(" and detailed = 1 "); - } + selection.append("reason "); + selection.append(listId != StoredList.ALL_LIST_ID ? "=" + Math.max(listId, 1) : ">= " + StoredList.STANDARD_LIST_ID); + selection.append(" and detailed = 1 "); + String[] selectionArgs = null; if (cacheType != CacheType.ALL) { - specifySql.append(" and type = "); - specifySql.append(DatabaseUtils.sqlEscapeString(cacheType.id)); + selection.append(" and type = ?"); + selectionArgs = new String[] { String.valueOf(cacheType.id) }; } try { @@ -2201,8 +2155,8 @@ public class cgData { dbTableCaches, new String[]{"geocode", "(abs(latitude-" + String.format((Locale) null, "%.6f", coords.getLatitude()) + ") + abs(longitude-" + String.format((Locale) null, "%.6f", coords.getLongitude()) + ")) as dif"}, - specifySql.toString(), - null, + selection.toString(), + selectionArgs, null, null, "dif", @@ -2211,8 +2165,8 @@ public class cgData { cursor = database.query( dbTableCaches, new String[]{"geocode"}, - specifySql.toString(), - null, + selection.toString(), + selectionArgs, null, null, "geocode"); @@ -2235,48 +2189,36 @@ public class cgData { return geocodes; } - public Set<String> loadBatchOfHistoricGeocodes(final boolean detailedOnly, final CacheType cacheType) { + private static Set<String> loadBatchOfHistoricGeocodes(final boolean detailedOnly, final CacheType cacheType) { init(); - Set<String> geocodes = new HashSet<String>(); + final Set<String> geocodes = new HashSet<String>(); - StringBuilder specifySql = new StringBuilder(); - specifySql.append("visiteddate > 0"); + final StringBuilder selection = new StringBuilder("visiteddate > 0"); if (detailedOnly) { - specifySql.append(" and detailed = 1"); + selection.append(" and detailed = 1"); } + String[] selectionArgs = null; if (cacheType != CacheType.ALL) { - specifySql.append(" and type = "); - specifySql.append(DatabaseUtils.sqlEscapeString(cacheType.id)); + selection.append(" and type = ?"); + selectionArgs = new String[] { String.valueOf(cacheType.id) }; } try { - Cursor cursor = database.query( + final Cursor cursor = database.query( dbTableCaches, new String[]{"geocode"}, - specifySql.toString(), - null, + selection.toString(), + selectionArgs, null, null, "visiteddate", null); - - if (cursor != null) { - if (cursor.getCount() > 0) { - cursor.moveToFirst(); - int index = cursor.getColumnIndex("geocode"); - - do { - geocodes.add(cursor.getString(index)); - } while (cursor.moveToNext()); - } else { - cursor.close(); - return null; - } - - cursor.close(); + while (cursor.moveToNext()) { + geocodes.add(cursor.getString(0)); } + cursor.close(); } catch (Exception e) { Log.e("cgData.loadBatchOfHistoricGeocodes: " + e.toString()); } @@ -2285,12 +2227,12 @@ public class cgData { } /** Retrieve all stored caches from DB */ - public Set<String> loadCachedInViewport(final Viewport viewport, final CacheType cacheType) { + public static SearchResult loadCachedInViewport(final Viewport viewport, final CacheType cacheType) { return loadInViewport(false, viewport, cacheType); } /** Retrieve stored caches from DB with listId >= 1 */ - public Set<String> loadStoredInViewport(final Viewport viewport, final CacheType cacheType) { + public static SearchResult loadStoredInViewport(final Viewport viewport, final CacheType cacheType) { return loadInViewport(true, viewport, cacheType); } @@ -2306,7 +2248,7 @@ public class cgData { * @param cacheType * @return Set with geocodes */ - private Set<String> loadInViewport(final boolean stored, final Viewport viewport, final CacheType cacheType) { + private static SearchResult loadInViewport(final boolean stored, final Viewport viewport, final CacheType cacheType) { init(); final Set<String> geocodes = new HashSet<String>(); @@ -2317,25 +2259,26 @@ public class cgData { } // viewport limitation - final StringBuilder where = new StringBuilder(buildCoordinateWhere(dbTableCaches, viewport)); + final StringBuilder selection = new StringBuilder(buildCoordinateWhere(dbTableCaches, viewport)); // cacheType limitation + String[] selectionArgs = null; if (cacheType != CacheType.ALL) { - where.append(" and type = "); - where.append(DatabaseUtils.sqlEscapeString(cacheType.id)); + selection.append(" and type = ?"); + selectionArgs = new String[] { String.valueOf(cacheType.id) }; } // offline caches only if (stored) { - where.append(" and reason >= " + StoredList.STANDARD_LIST_ID); + selection.append(" and reason >= " + StoredList.STANDARD_LIST_ID); } try { final Cursor cursor = database.query( dbTableCaches, new String[]{"geocode"}, - where.toString(), - null, + selection.toString(), + selectionArgs, null, null, null, @@ -2353,11 +2296,11 @@ public class cgData { Log.e("cgData.loadInViewport: " + e.toString()); } - return geocodes; + return new SearchResult(geocodes); } /** delete caches from the DB store 3 days or more before */ - public void clean() { + public static void clean() { clean(false); } @@ -2367,7 +2310,11 @@ public class cgData { * @param more * true = all caches false = caches stored 3 days or more before */ - public void clean(boolean more) { + public static void clean(boolean more) { + if (databaseCleaned) { + return; + } + init(); Log.d("Database clean: started"); @@ -2420,24 +2367,20 @@ public class cgData { removeCaches(geocodes, LoadFlags.REMOVE_ALL); } - final SQLiteStatement countSql = database.compileStatement("select count(_id) from " + dbTableCaches + " where reason = 0"); - final int count = (int) countSql.simpleQueryForLong(); - countSql.close(); - Log.d("Database clean: " + count + " geocaches remaining for listId=0"); - } catch (Exception e) { Log.w("cgData.clean: " + e.toString()); } Log.d("Database clean: finished"); + databaseCleaned = true; } - public void removeAllFromCache() { + public static void removeAllFromCache() { // clean up CacheCache cacheCache.removeAllFromCache(); } - public void removeCache(final String geocode, EnumSet<LoadFlags.RemoveFlag> removeFlags) { + public static void removeCache(final String geocode, EnumSet<LoadFlags.RemoveFlag> removeFlags) { removeCaches(Collections.singleton(geocode), removeFlags); } @@ -2447,7 +2390,7 @@ public class cgData { * @param geocodes * list of geocodes to drop from cache */ - public void removeCaches(final Set<String> geocodes, EnumSet<LoadFlags.RemoveFlag> removeFlags) { + public static void removeCaches(final Set<String> geocodes, EnumSet<LoadFlags.RemoveFlag> removeFlags) { if (CollectionUtils.isEmpty(geocodes)) { return; } @@ -2494,7 +2437,7 @@ public class cgData { } } - public boolean saveLogOffline(String geocode, Date date, LogType type, String log) { + public static boolean saveLogOffline(String geocode, Date date, LogType type, String log) { if (StringUtils.isBlank(geocode)) { Log.e("cgData.saveLogOffline: cannot log a blank geocode"); return false; @@ -2521,7 +2464,7 @@ public class cgData { return id != -1; } - public LogEntry loadLogOffline(String geocode) { + public static LogEntry loadLogOffline(String geocode) { if (StringUtils.isBlank(geocode)) { return null; } @@ -2557,7 +2500,7 @@ public class cgData { return log; } - public void clearLogOffline(String geocode) { + public static void clearLogOffline(String geocode) { if (StringUtils.isBlank(geocode)) { return; } @@ -2567,35 +2510,14 @@ public class cgData { database.delete(dbTableLogsOffline, "geocode = ?", new String[]{geocode}); } - private SQLiteStatement getStatementLogCount() { - return getStatement("LogCountFromGeocode", "SELECT count(_id) FROM " + dbTableLogsOffline + " WHERE geocode = ?"); - } - - private synchronized SQLiteStatement getStatement(final String key, final String query) { - SQLiteStatement statement = statements.get(key); - if (statement == null) { - statement = database.compileStatement(query); - statements.put(key, statement); - } - return statement; - } - - private SQLiteStatement getStatementCountStandardList() { - return getStatement("CountStandardList", "SELECT count(_id) FROM " + dbTableCaches + " WHERE reason = " + StoredList.STANDARD_LIST_ID); - } - - private SQLiteStatement getStatementCountAllLists() { - return getStatement("CountAllLists", "SELECT count(_id) FROM " + dbTableCaches + " WHERE reason >= " + StoredList.STANDARD_LIST_ID); - } - - public boolean hasLogOffline(final String geocode) { + public static boolean hasLogOffline(final String geocode) { if (StringUtils.isBlank(geocode)) { return false; } init(); try { - final SQLiteStatement logCount = getStatementLogCount(); + final SQLiteStatement logCount = PreparedStatements.getLogCountOfGeocode(); synchronized (logCount) { logCount.bindString(1, geocode); return logCount.simpleQueryForLong() > 0; @@ -2607,7 +2529,7 @@ public class cgData { return false; } - public void setVisitDate(List<String> geocodes, long visitedDate) { + private static void setVisitDate(List<String> geocodes, long visitedDate) { if (geocodes.isEmpty()) { return; } @@ -2616,11 +2538,12 @@ public class cgData { database.beginTransaction(); try { - ContentValues values = new ContentValues(); - values.put("visiteddate", visitedDate); + SQLiteStatement setVisit = PreparedStatements.getUpdateVisitDate(); for (String geocode : geocodes) { - database.update(dbTableCaches, values, "geocode = ?", new String[]{geocode}); + setVisit.bindLong(1, visitedDate); + setVisit.bindString(2, geocode); + setVisit.execute(); } database.setTransactionSuccessful(); } finally { @@ -2628,11 +2551,12 @@ public class cgData { } } - public List<StoredList> getLists(Resources res) { + public static List<StoredList> getLists() { init(); + Resources res = cgeoapplication.getInstance().getResources(); List<StoredList> lists = new ArrayList<StoredList>(); - lists.add(new StoredList(StoredList.STANDARD_LIST_ID, res.getString(R.string.list_inbox), (int) getStatementCountStandardList().simpleQueryForLong())); + lists.add(new StoredList(StoredList.STANDARD_LIST_ID, res.getString(R.string.list_inbox), (int) PreparedStatements.getCountCachesOnStandardList().simpleQueryForLong())); try { String query = "SELECT l._id as _id, l.title as title, COUNT(c._id) as count" + @@ -2674,14 +2598,14 @@ public class cgData { return result; } - public StoredList getList(int id, Resources res) { + public static StoredList getList(int id) { init(); if (id >= customListIdOffset) { Cursor cursor = database.query( dbTableLists, new String[]{"_id", "title"}, - "_id = " + (id - customListIdOffset), - null, + "_id = ? ", + new String[] { String.valueOf(id - customListIdOffset) }, null, null, null); @@ -2691,18 +2615,23 @@ public class cgData { } } + Resources res = cgeoapplication.getInstance().getResources(); if (id == StoredList.ALL_LIST_ID) { - return new StoredList(StoredList.ALL_LIST_ID, res.getString(R.string.list_all_lists), (int) getStatementCountAllLists().simpleQueryForLong()); + return new StoredList(StoredList.ALL_LIST_ID, res.getString(R.string.list_all_lists), getAllCachesCount()); } // fall back to standard list in case of invalid list id if (id == StoredList.STANDARD_LIST_ID || id >= customListIdOffset) { - return new StoredList(StoredList.STANDARD_LIST_ID, res.getString(R.string.list_inbox), (int) getStatementCountStandardList().simpleQueryForLong()); + return new StoredList(StoredList.STANDARD_LIST_ID, res.getString(R.string.list_inbox), (int) PreparedStatements.getCountCachesOnStandardList().simpleQueryForLong()); } return null; } + public static int getAllCachesCount() { + return (int) PreparedStatements.getCountAllCaches().simpleQueryForLong(); + } + /** * Create a new list * @@ -2710,7 +2639,7 @@ public class cgData { * Name * @return new listId */ - public int createList(String name) { + public static int createList(String name) { int id = -1; if (StringUtils.isBlank(name)) { return id; @@ -2740,7 +2669,7 @@ public class cgData { * New name of list * @return Number of lists changed */ - public int renameList(final int listId, final String name) { + public static int renameList(final int listId, final String name) { if (StringUtils.isBlank(name) || StoredList.STANDARD_LIST_ID == listId) { return 0; } @@ -2769,23 +2698,23 @@ public class cgData { * @param listId * @return true if the list got deleted, false else */ - public boolean removeList(int listId) { - boolean status = false; + public static boolean removeList(int listId) { if (listId < customListIdOffset) { - return status; + return false; } init(); + boolean status = false; database.beginTransaction(); try { int cnt = database.delete(dbTableLists, "_id = " + (listId - customListIdOffset), null); if (cnt > 0) { // move caches from deleted list to standard list - ContentValues values = new ContentValues(); - values.put("reason", StoredList.STANDARD_LIST_ID); - database.update(dbTableCaches, values, "reason = " + listId, null); + SQLiteStatement moveToStandard = PreparedStatements.getMoveToStandardList(); + moveToStandard.bindLong(1, listId); + moveToStandard.execute(); status = true; } @@ -2798,7 +2727,7 @@ public class cgData { return status; } - public void moveToList(final List<cgCache> caches, final int listId) { + public static void moveToList(final List<cgCache> caches, final int listId) { if (listId == StoredList.ALL_LIST_ID) { return; } @@ -2807,13 +2736,14 @@ public class cgData { } init(); - final ContentValues values = new ContentValues(); - values.put("reason", listId); + SQLiteStatement move = PreparedStatements.getMoveToList(); database.beginTransaction(); try { for (cgCache cache : caches) { - database.update(dbTableCaches, values, "geocode = ?", new String[]{cache.getGeocode()}); + move.bindLong(1, listId); + move.bindString(2, cache.getGeocode()); + move.execute(); cache.setListId(listId); } database.setTransactionSuccessful(); @@ -2822,61 +2752,39 @@ public class cgData { } } - public synchronized boolean status() { + public static boolean isInitialized() { return database != null; - } - public boolean removeSearchedDestination(Destination destination) { - boolean success = true; + public static boolean removeSearchedDestination(Destination destination) { if (destination == null) { - success = false; - } else { - init(); - - database.beginTransaction(); - try { - database.delete(dbTableSearchDestionationHistory, "_id = " + destination.getId(), null); - database.setTransactionSuccessful(); - } catch (Exception e) { - Log.e("Unable to remove searched destination", e); - success = false; - } finally { - database.endTransaction(); - } + return false; } + init(); - return success; - } - - private SQLiteStatement getStatementDescription() { - return getStatement("descriptionFromGeocode", "SELECT description FROM " + dbTableCaches + " WHERE geocode = ?"); - } - - private SQLiteStatement getStatementListIdFromGeocode() { - return getStatement("listFromGeocode", "SELECT reason FROM " + dbTableCaches + " WHERE geocode = ?"); - } - - private SQLiteStatement getStatementListIdFromGuid() { - return getStatement("listFromGeocode", "SELECT reason FROM " + dbTableCaches + " WHERE guid = ?"); - } - - private SQLiteStatement getStatementCacheId() { - return getStatement("cacheIdFromGeocode", "SELECT cacheid FROM " + dbTableCaches + " WHERE geocode = ?"); - } + boolean result = false; + database.beginTransaction(); + try { + database.delete(dbTableSearchDestionationHistory, "_id = " + destination.getId(), null); + database.setTransactionSuccessful(); + result = true; + } catch (Exception e) { + Log.e("Unable to remove searched destination", e); + } finally { + database.endTransaction(); + } - private SQLiteStatement getStatementGeocode() { - return getStatement("geocodeFromGuid", "SELECT geocode FROM " + dbTableCaches + " WHERE guid = ?"); + return result; } - public String getCacheDescription(String geocode) { + public static String getCacheDescription(String geocode) { if (StringUtils.isBlank(geocode)) { return null; } init(); try { - final SQLiteStatement description = getStatementDescription(); + final SQLiteStatement description = PreparedStatements.getDescriptionOfGeocode(); synchronized (description) { description.bindString(1, geocode); return description.simpleQueryForString(); @@ -2933,7 +2841,7 @@ public class cgData { * @return */ - public Set<cgWaypoint> loadWaypoints(final Viewport viewport, boolean excludeMine, boolean excludeDisabled, CacheType type) { + public static Set<cgWaypoint> loadWaypoints(final Viewport viewport, boolean excludeMine, boolean excludeDisabled, CacheType type) { final StringBuilder where = new StringBuilder(buildCoordinateWhere(dbTableWaypoints, viewport)); if (excludeMine) { where.append(" and ").append(dbTableCaches).append(".own == 0 and ").append(dbTableCaches).append(".found == 0"); @@ -2942,7 +2850,7 @@ public class cgData { where.append(" and ").append(dbTableCaches).append(".disabled == 0"); } if (type != CacheType.ALL) { - where.append(" and ").append(dbTableCaches).append(".type == '").append(type.id).append("'"); + where.append(" and ").append(dbTableCaches).append(".type == '").append(type.id).append('\''); } init(); @@ -2968,7 +2876,7 @@ public class cgData { } } - public String[] getTrackableCodes() { + public static String[] getTrackableCodes() { init(); final Cursor cursor = database.query( @@ -2997,4 +2905,154 @@ public class cgData { return list.toArray(new String[list.size()]); } + public static boolean saveChangedCache(cgCache cache) { + return cgData.saveCache(cache, cache.getStorageLocation().contains(StorageLocation.DATABASE) ? LoadFlags.SAVE_ALL : EnumSet.of(SaveFlag.SAVE_CACHE)); + } + + private static class PreparedStatements { + + private static HashMap<String, SQLiteStatement> statements = new HashMap<String, SQLiteStatement>(); + + private PreparedStatements() { + // utility class + } + + public static SQLiteStatement getMoveToStandardList() { + return getStatement("MoveToStandardList", "UPDATE " + dbTableCaches + " SET reason = " + StoredList.STANDARD_LIST_ID + " WHERE reason = ?"); + } + + public static SQLiteStatement getMoveToList() { + return getStatement("MoveToList", "UPDATE " + dbTableCaches + " SET reason = ? WHERE geocode = ?"); + } + + public static SQLiteStatement getUpdateVisitDate() { + return getStatement("UpdateVisitDate", "UPDATE " + dbTableCaches + " SET visiteddate = ? WHERE geocode = ?"); + } + + public static SQLiteStatement getInsertLogImage() { + return getStatement("InsertLogImage", "INSERT INTO " + dbTableLogImages + " (log_id, title, url) VALUES (?, ?, ?)"); + } + + public static SQLiteStatement getInsertLogCounts() { + return getStatement("InsertLogCounts", "INSERT INTO " + dbTableLogCount + " (geocode, updated, type, count) VALUES (?, ?, ?, ?)"); + } + + public static SQLiteStatement getInsertSpoiler() { + return getStatement("InsertSpoiler", "INSERT INTO " + dbTableSpoilers + " (geocode, updated, url, title, description) VALUES (?, ?, ?, ?, ?)"); + } + + public static SQLiteStatement getInsertSearchDestination(Destination destination) { + final SQLiteStatement statement = getStatement("InsertSearch", "INSERT INTO " + dbTableSearchDestionationHistory + " (date, latitude, longitude) VALUES (?, ?, ?)"); + statement.bindLong(1, destination.getDate()); + final Geopoint coords = destination.getCoords(); + statement.bindDouble(2, coords.getLatitude()); + statement.bindDouble(3, coords.getLongitude()); + return statement; + } + + private static void clearPreparedStatements() { + for (SQLiteStatement statement : statements.values()) { + statement.close(); + } + statements.clear(); + } + + private static synchronized SQLiteStatement getStatement(final String key, final String query) { + SQLiteStatement statement = statements.get(key); + if (statement == null) { + Log.i("Compiling " + key); + statement = database.compileStatement(query); + statements.put(key, statement); + } + return statement; + } + + public static SQLiteStatement getCountHistoryCaches() { + return getStatement("HistoryCount", "select count(_id) from " + dbTableCaches + " where visiteddate > 0"); + } + + private static SQLiteStatement getLogCountOfGeocode() { + return getStatement("LogCountFromGeocode", "SELECT count(_id) FROM " + cgData.dbTableLogsOffline + " WHERE geocode = ?"); + } + + private static SQLiteStatement getCountCachesOnStandardList() { + return getStatement("CountStandardList", "SELECT count(_id) FROM " + dbTableCaches + " WHERE reason = " + StoredList.STANDARD_LIST_ID); + } + + private static SQLiteStatement getCountAllCaches() { + return getStatement("CountAllLists", "SELECT count(_id) FROM " + dbTableCaches + " WHERE reason >= " + StoredList.STANDARD_LIST_ID); + } + + private static SQLiteStatement getInsertLog() { + return getStatement("InsertLog", "INSERT INTO " + dbTableLogs + " (geocode, updated, type, author, log, date, found, friend) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); + } + + private static SQLiteStatement getInsertAttribute() { + return getStatement("InsertAttribute", "INSERT INTO " + dbTableAttributes + " (geocode, updated, attribute) VALUES (?, ?, ?)"); + } + + private static SQLiteStatement getDescriptionOfGeocode() { + return getStatement("descriptionFromGeocode", "SELECT description FROM " + dbTableCaches + " WHERE geocode = ?"); + } + + private static SQLiteStatement getListIdOfGeocode() { + return getStatement("listFromGeocode", "SELECT reason FROM " + dbTableCaches + " WHERE geocode = ?"); + } + + private static SQLiteStatement getListIdOfGuid() { + return getStatement("listFromGeocode", "SELECT reason FROM " + dbTableCaches + " WHERE guid = ?"); + } + + private static SQLiteStatement getCacheIdOfGeocode() { + return getStatement("cacheIdFromGeocode", "SELECT cacheid FROM " + dbTableCaches + " WHERE geocode = ?"); + } + + private static SQLiteStatement getGeocodeOfGuid() { + return getStatement("geocodeFromGuid", "SELECT geocode FROM " + dbTableCaches + " WHERE guid = ?"); + } + + } + + public static void saveVisitDate(final String geocode) { + setVisitDate(Collections.singletonList(geocode), System.currentTimeMillis()); + } + + public static void markDropped(List<cgCache> caches) { + moveToList(caches, StoredList.TEMPORARY_LIST_ID); + } + + public static Viewport getBounds(String geocode) { + if (geocode == null) { + return null; + } + + return cgData.getBounds(Collections.singleton(geocode)); + } + + public static void clearVisitDate(List<cgCache> caches) { + ArrayList<String> geocodes = new ArrayList<String>(caches.size()); + for (cgCache cache : caches) { + geocodes.add(cache.getGeocode()); + } + setVisitDate(geocodes, 0); + } + + public static SearchResult getBatchOfStoredCaches(Geopoint coords, CacheType cacheType, int listId) { + final Set<String> geocodes = cgData.loadBatchOfStoredGeocodes(coords, cacheType, listId); + return new SearchResult(geocodes, cgData.getAllStoredCachesCount(cacheType, listId)); + } + + public static SearchResult getHistoryOfCaches(boolean detailedOnly, CacheType cacheType) { + final Set<String> geocodes = cgData.loadBatchOfHistoricGeocodes(detailedOnly, cacheType); + return new SearchResult(geocodes, cgData.getAllHistoryCachesCount()); + } + + public static boolean saveWaypoint(int id, String geocode, cgWaypoint waypoint) { + if (cgData.saveWaypointInternal(id, geocode, waypoint)) { + cgData.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE)); + return true; + } + return false; + } + } diff --git a/main/src/cgeo/geocaching/cgTrackable.java b/main/src/cgeo/geocaching/cgTrackable.java index 7ed3424..b03a783 100644 --- a/main/src/cgeo/geocaching/cgTrackable.java +++ b/main/src/cgeo/geocaching/cgTrackable.java @@ -38,8 +38,8 @@ public class cgTrackable implements ILogable { private String trackingcode = null; public String getUrl() { - if (StringUtils.startsWithIgnoreCase(geocode, "GK")) { - String hex = geocode.substring(3); + if (StringUtils.startsWithIgnoreCase(getGeocode(), "GK")) { + String hex = getGeocode().substring(3); try { int id = Integer.parseInt(hex, 16); return "http://geokrety.org/konkret.php?id=" + id; @@ -48,7 +48,7 @@ public class cgTrackable implements ILogable { return null; } } - return "http://www.geocaching.com//track/details.aspx?tracker=" + geocode.toUpperCase(); + return "http://www.geocaching.com//track/details.aspx?tracker=" + geocode; } public String getGuid() { @@ -65,7 +65,7 @@ public class cgTrackable implements ILogable { } public void setGeocode(String geocode) { - this.geocode = geocode; + this.geocode = StringUtils.upperCase(geocode); } public String getIconUrl() { @@ -208,7 +208,7 @@ public class cgTrackable implements ILogable { } public boolean isLoggable() { - return !StringUtils.startsWithIgnoreCase(geocode, "GK"); + return !StringUtils.startsWithIgnoreCase(getGeocode(), "GK"); } public String getTrackingcode() { diff --git a/main/src/cgeo/geocaching/cgWaypoint.java b/main/src/cgeo/geocaching/cgWaypoint.java index 0e21c08..32cc526 100644 --- a/main/src/cgeo/geocaching/cgWaypoint.java +++ b/main/src/cgeo/geocaching/cgWaypoint.java @@ -156,7 +156,7 @@ public class cgWaypoint implements IWaypoint, Comparable<cgWaypoint> { } public String getUrl() { - return "http://www.geocaching.com//seek/cache_details.aspx?wp=" + geocode.toUpperCase(); + return "http://www.geocaching.com//seek/cache_details.aspx?wp=" + geocode; } @Override @@ -174,7 +174,7 @@ public class cgWaypoint implements IWaypoint, Comparable<cgWaypoint> { } public void setGeocode(String geocode) { - this.geocode = geocode; + this.geocode = StringUtils.upperCase(geocode); } @Override diff --git a/main/src/cgeo/geocaching/cgeo.java b/main/src/cgeo/geocaching/cgeo.java index c80ec6f..c5a7e5b 100644 --- a/main/src/cgeo/geocaching/cgeo.java +++ b/main/src/cgeo/geocaching/cgeo.java @@ -415,7 +415,7 @@ public class cgeo extends AbstractActivity { // context menu for offline button if (v.getId() == R.id.search_offline) { menu.setHeaderTitle(res.getString(R.string.list_title)); - for (final StoredList list : app.getLists()) { + for (final StoredList list : cgData.getLists()) { menu.add(Menu.NONE, MENU_OPEN_LIST + list.id, Menu.NONE, list.getTitleAndCount()); } return; @@ -572,7 +572,7 @@ public class cgeo extends AbstractActivity { } private void checkRestore() { - if (!cgData.isNewlyCreatedDatebase() || null == cgData.isRestoreFile()) { + if (!cgData.isNewlyCreatedDatebase() || null == cgData.getRestoreFile()) { return; } new AlertDialog.Builder(this) @@ -759,7 +759,7 @@ public class cgeo extends AbstractActivity { } int checks = 0; - while (!app.storageStatus()) { + while (!cgData.isInitialized()) { try { wait(500); checks++; @@ -772,7 +772,7 @@ public class cgeo extends AbstractActivity { } } - countBubbleCnt = app.getAllStoredCachesCount(true, CacheType.ALL); + countBubbleCnt = cgData.getAllCachesCount(); countBubbleHandler.sendEmptyMessage(0); } @@ -797,7 +797,7 @@ public class cgeo extends AbstractActivity { } cleanupRunning = true; - app.cleanDatabase(more); + cgData.clean(more); cleanupRunning = false; if (version > 0) { diff --git a/main/src/cgeo/geocaching/cgeoapplication.java b/main/src/cgeo/geocaching/cgeoapplication.java index 9e221cd..1371a00 100644 --- a/main/src/cgeo/geocaching/cgeoapplication.java +++ b/main/src/cgeo/geocaching/cgeoapplication.java @@ -1,21 +1,10 @@ package cgeo.geocaching; -import cgeo.geocaching.cgData.StorageLocation; import cgeo.geocaching.activity.ActivityMixin; -import cgeo.geocaching.enumerations.CacheType; -import cgeo.geocaching.enumerations.LoadFlags; -import cgeo.geocaching.enumerations.LoadFlags.LoadFlag; -import cgeo.geocaching.enumerations.LoadFlags.RemoveFlag; -import cgeo.geocaching.enumerations.LoadFlags.SaveFlag; -import cgeo.geocaching.enumerations.LogType; -import cgeo.geocaching.geopoint.Geopoint; -import cgeo.geocaching.geopoint.Viewport; import cgeo.geocaching.network.StatusUpdater; import cgeo.geocaching.utils.IObserver; import cgeo.geocaching.utils.Log; -import org.apache.commons.lang3.StringUtils; - import android.app.Activity; import android.app.Application; import android.app.ProgressDialog; @@ -23,27 +12,17 @@ import android.content.res.Resources; import android.os.Handler; import android.os.Message; -import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.EnumSet; -import java.util.List; -import java.util.Map; -import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; public class cgeoapplication extends Application { - final private cgData storage = new cgData(); private volatile GeoDataProvider geo; private volatile DirectionProvider dir; public boolean firstRun = true; // c:geo is just launched public boolean showLoginToast = true; //login toast shown just once. - private boolean databaseCleaned = false; // database was cleaned private boolean liveMapHintShown = false; // livemap hint has been shown final private StatusUpdater statusUpdater = new StatusUpdater(); - private static cgeoapplication instance = null; + private static cgeoapplication instance; public cgeoapplication() { instance = this; @@ -61,29 +40,21 @@ public class cgeoapplication extends Application { @Override public void onLowMemory() { Log.i("Cleaning applications cache."); - removeAllFromCache(); - } - - public void removeAllFromCache() { - storage.removeAllFromCache(); + cgData.removeAllFromCache(); } @Override public void onTerminate() { Log.d("Terminating c:geo…"); - storage.clean(); - storage.closeDb(); + cgData.clean(); + cgData.closeDb(); super.onTerminate(); } - public String backupDatabase() { - return storage.backupDatabase(); - } - /** - * Move the database to/from external storage in a new thread, + * Move the database to/from external cgdata in a new thread, * showing a progress window * * @param fromActivity @@ -105,18 +76,13 @@ public class cgeoapplication extends Application { @Override public void run() { - atomic.set(storage.moveDatabase()); + atomic.set(cgData.moveDatabase()); handler.sendMessage(handler.obtainMessage()); } }; moveThread.start(); } - - public static File isRestoreFile() { - return cgData.isRestoreFile(); - } - /** * restore the database in a new thread, showing a progress window * @@ -140,7 +106,7 @@ public class cgeoapplication extends Application { @Override public void run() { - atomic.set(storage.restoreDatabase()); + atomic.set(cgData.restoreDatabase()); handler.sendMessage(handler.obtainMessage()); } }; @@ -203,280 +169,6 @@ public class cgeoapplication extends Application { return statusUpdater; } - public boolean storageStatus() { - return storage.status(); - } - - public void cleanDatabase(boolean more) { - if (databaseCleaned) { - return; - } - - storage.clean(more); - databaseCleaned = true; - } - - /** {@link cgData#isThere(String, String, boolean, boolean)} */ - public boolean isThere(String geocode, String guid, boolean detailed, boolean checkTime) { - return storage.isThere(geocode, guid, detailed, checkTime); - } - - /** {@link cgData#isOffline(String, String)} */ - public boolean isOffline(String geocode, String guid) { - return storage.isOffline(geocode, guid); - } - - /** {@link cgData#getGeocodeForGuid(String)} */ - public String getGeocode(String guid) { - return storage.getGeocodeForGuid(guid); - } - - /** {@link cgData#getCacheidForGeocode(String)} */ - public String getCacheid(String geocode) { - return storage.getCacheidForGeocode(geocode); - } - - public boolean hasUnsavedCaches(final SearchResult search) { - if (search == null) { - return false; - } - - for (final String geocode : search.getGeocodes()) { - if (!isOffline(geocode, null)) { - return true; - } - } - return false; - } - - public cgTrackable getTrackableByGeocode(String geocode) { - if (StringUtils.isBlank(geocode)) { - return null; - } - - return storage.loadTrackable(geocode); - } - - /** {@link cgData#allDetailedThere()} */ - public String[] geocodesInCache() { - return storage.allDetailedThere(); - } - - public Viewport getBounds(String geocode) { - if (geocode == null) { - return null; - } - - return getBounds(Collections.singleton(geocode)); - } - - /** {@link cgData#getBounds(Set)} */ - public Viewport getBounds(final Set<String> geocodes) { - return storage.getBounds(geocodes); - } - - /** {@link cgData#loadBatchOfStoredGeocodes(boolean, Geopoint, CacheType, int)} */ - public SearchResult getBatchOfStoredCaches(final boolean detailedOnly, final Geopoint coords, final CacheType cacheType, final int listId) { - final Set<String> geocodes = storage.loadBatchOfStoredGeocodes(detailedOnly, coords, cacheType, listId); - return new SearchResult(geocodes, getAllStoredCachesCount(true, cacheType, listId)); - } - - /** {@link cgData#loadHistoryOfSearchedLocations()} */ - public List<Destination> getHistoryOfSearchedLocations() { - return storage.loadHistoryOfSearchedLocations(); - } - - public SearchResult getHistoryOfCaches(final boolean detailedOnly, final CacheType cacheType) { - final Set<String> geocodes = storage.loadBatchOfHistoricGeocodes(detailedOnly, cacheType); - return new SearchResult(geocodes, getAllHistoricCachesCount()); - } - - /** {@link cgData#loadCachedInViewport(Viewport, CacheType)} */ - public SearchResult getCachedInViewport(final Viewport viewport, final CacheType cacheType) { - final Set<String> geocodes = storage.loadCachedInViewport(viewport, cacheType); - return new SearchResult(geocodes); - } - - /** {@link cgData#loadStoredInViewport(Viewport, CacheType)} */ - public SearchResult getStoredInViewport(final Viewport viewport, final CacheType cacheType) { - final Set<String> geocodes = storage.loadStoredInViewport(viewport, cacheType); - return new SearchResult(geocodes); - } - - /** {@link cgData#getAllStoredCachesCount(boolean, CacheType, int)} */ - public int getAllStoredCachesCount(final boolean detailedOnly, final CacheType cacheType) { - return storage.getAllStoredCachesCount(detailedOnly, cacheType, 0); - } - - /** {@link cgData#getAllStoredCachesCount(boolean, CacheType, int)} */ - public int getAllStoredCachesCount(final boolean detailedOnly, final CacheType cacheType, final Integer list) { - return storage.getAllStoredCachesCount(detailedOnly, cacheType, list); - } - - /** {@link cgData#getAllHistoricCachesCount()} */ - public int getAllHistoricCachesCount() { - return storage.getAllHistoricCachesCount(); - } - - /** {@link cgData#moveToList(List, int)} */ - public void markStored(List<cgCache> caches, int listId) { - storage.moveToList(caches, listId); - } - - /** {@link cgData#moveToList(List, int)} */ - public void markDropped(List<cgCache> caches) { - storage.moveToList(caches, StoredList.TEMPORARY_LIST_ID); - } - - /** {@link cgData#clearSearchedDestinations()} */ - public boolean clearSearchedDestinations() { - return storage.clearSearchedDestinations(); - } - - /** {@link cgData#saveSearchedDestination(Destination)} */ - public void saveSearchedDestination(Destination destination) { - storage.saveSearchedDestination(destination); - } - - /** {@link cgData#saveWaypoints(cgCache)} */ - public boolean saveWaypoints(final cgCache cache) { - return storage.saveWaypoints(cache); - } - - public boolean saveWaypoint(int id, String geocode, cgWaypoint waypoint) { - if (storage.saveWaypoint(id, geocode, waypoint)) { - this.removeCache(geocode, EnumSet.of(RemoveFlag.REMOVE_CACHE)); - return true; - } - return false; - } - - /** {@link cgData#deleteWaypoint(int)} */ - public boolean deleteWaypoint(int id) { - return storage.deleteWaypoint(id); - } - - public boolean saveTrackable(cgTrackable trackable) { - return storage.saveTrackable(trackable); - } - - /** {@link cgData#loadLogCounts(String)} */ - public Map<LogType, Integer> loadLogCounts(String geocode) { - return storage.loadLogCounts(geocode); - } - - /** {@link cgData#loadWaypoint(int)} */ - public cgWaypoint loadWaypoint(int id) { - return storage.loadWaypoint(id); - } - - /** {@link cgData#saveLogOffline(String, Date, LogType, String)} */ - public boolean saveLogOffline(String geocode, Date date, LogType logtype, String log) { - return storage.saveLogOffline(geocode, date, logtype, log); - } - - /** {@link cgData#loadLogOffline(String)} */ - public LogEntry loadLogOffline(String geocode) { - return storage.loadLogOffline(geocode); - } - - /** {@link cgData#clearLogOffline(String)} */ - public void clearLogOffline(String geocode) { - storage.clearLogOffline(geocode); - } - - /** {@link cgData#setVisitDate(List, long)} */ - public void saveVisitDate(String geocode) { - storage.setVisitDate(Collections.singletonList(geocode), System.currentTimeMillis()); - } - - /** {@link cgData#setVisitDate(List, long)} */ - public void clearVisitDate(List<cgCache> caches) { - ArrayList<String> geocodes = new ArrayList<String>(caches.size()); - for (cgCache cache : caches) { - geocodes.add(cache.getGeocode()); - } - storage.setVisitDate(geocodes, 0); - } - - /** {@link cgData#getLists(Resources)} */ - public List<StoredList> getLists() { - return storage.getLists(getResources()); - } - - /** {@link cgData#getList(int, Resources)} */ - public StoredList getList(int id) { - return storage.getList(id, getResources()); - } - - /** {@link cgData#createList(String)} */ - public int createList(String title) { - return storage.createList(title); - } - - /** {@link cgData#renameList(int, String)} */ - public int renameList(final int listId, final String title) { - return storage.renameList(listId, title); - } - - /** {@link cgData#removeList(int)} */ - public boolean removeList(int id) { - return storage.removeList(id); - } - - /** {@link cgData#removeSearchedDestination(Destination)} */ - public boolean removeSearchedDestinations(Destination destination) { - return storage.removeSearchedDestination(destination); - } - - /** {@link cgData#moveToList(List, int)} */ - public void moveToList(List<cgCache> caches, int listId) { - storage.moveToList(caches, listId); - } - - /** {@link cgData#getCacheDescription(String)} */ - public String getCacheDescription(String geocode) { - return storage.getCacheDescription(geocode); - } - - /** {@link cgData#loadCaches} */ - public cgCache loadCache(final String geocode, final EnumSet<LoadFlag> loadFlags) { - return storage.loadCache(geocode, loadFlags); - } - - /** {@link cgData#loadCaches} */ - public Set<cgCache> loadCaches(final Set<String> geocodes, final EnumSet<LoadFlag> loadFlags) { - return storage.loadCaches(geocodes, loadFlags); - } - - /** - * Update a cache in the DB or in the CacheCace depending on it's storage location - * - * {@link cgData#saveCache} - */ - public boolean updateCache(cgCache cache) { - return saveCache(cache, cache.getStorageLocation().contains(StorageLocation.DATABASE) ? LoadFlags.SAVE_ALL : EnumSet.of(SaveFlag.SAVE_CACHE)); - } - - /** {@link cgData#saveCache} */ - public boolean saveCache(cgCache cache, EnumSet<LoadFlags.SaveFlag> saveFlags) { - return storage.saveCache(cache, saveFlags); - } - - /** {@link cgData#removeCache} */ - public void removeCache(String geocode, EnumSet<LoadFlags.RemoveFlag> removeFlags) { - storage.removeCache(geocode, removeFlags); - } - - /** {@link cgData#removeCaches} */ - public void removeCaches(final Set<String> geocodes, EnumSet<LoadFlags.RemoveFlag> removeFlags) { - storage.removeCaches(geocodes, removeFlags); - } - - public Set<cgWaypoint> getWaypointsInViewport(final Viewport viewport, boolean excludeMine, boolean excludeDisabled, CacheType type) { - return storage.loadWaypoints(viewport, excludeMine, excludeDisabled, type); - } - public boolean isLiveMapHintShown() { return liveMapHintShown; } @@ -485,20 +177,4 @@ public class cgeoapplication extends Application { liveMapHintShown = true; } - public String[] getTrackableCodes() { - return storage.getTrackableCodes(); - } - - public List<LogEntry> loadLogs(final String geocode) { - return storage.loadLogs(geocode); - } - - public List<String> loadAttributes(final String geocode) { - return storage.loadAttributes(geocode); - } - - public List<cgWaypoint> loadWaypoints(final String geocode) { - return storage.loadWaypoints(geocode); - } - } diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/cgeocaches.java index 57fdb9c..0a3177b 100644 --- a/main/src/cgeo/geocaching/cgeocaches.java +++ b/main/src/cgeo/geocaching/cgeocaches.java @@ -3,6 +3,7 @@ package cgeo.geocaching; import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.activity.AbstractListActivity; import cgeo.geocaching.activity.ActivityMixin; +import cgeo.geocaching.activity.FilteredActivity; import cgeo.geocaching.activity.Progress; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; import cgeo.geocaching.apps.cachelist.CacheListAppFactory; @@ -28,6 +29,7 @@ import cgeo.geocaching.sorting.EventDateComparator; import cgeo.geocaching.sorting.VisitComparator; import cgeo.geocaching.ui.CacheListAdapter; import cgeo.geocaching.ui.LoggingUI; +import cgeo.geocaching.ui.WeakReferenceHandler; import cgeo.geocaching.utils.GeoDirHandler; import cgeo.geocaching.utils.Log; import cgeo.geocaching.utils.RunnableWithArgument; @@ -64,7 +66,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -public class cgeocaches extends AbstractListActivity { +public class cgeocaches extends AbstractListActivity implements FilteredActivity { private static final String EXTRAS_USERNAME = "username"; private static final String EXTRAS_ADDRESS = "address"; @@ -156,57 +158,42 @@ public class cgeocaches extends AbstractListActivity { */ private MenuItem navigationMenu; - private Handler loadCachesHandler = new Handler() { - - @Override - public void handleMessage(Message msg) { - try { - setAdapter(); - - updateTitle(); - - setDateComparatorForEventList(); + public void handleCachesLoaded() { + try { + setAdapter(); - showFooterMoreCaches(); + updateTitle(); - if (search != null && search.getError() == StatusCode.UNAPPROVED_LICENSE) { - AlertDialog.Builder dialog = new AlertDialog.Builder(cgeocaches.this); - dialog.setTitle(res.getString(R.string.license)); - dialog.setMessage(res.getString(R.string.err_license)); - dialog.setCancelable(true); - dialog.setNegativeButton(res.getString(R.string.license_dismiss), new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int id) { - Cookies.clearCookies(); - dialog.cancel(); - } - }); - dialog.setPositiveButton(res.getString(R.string.license_show), new DialogInterface.OnClickListener() { + setDateComparatorForEventList(); - @Override - public void onClick(DialogInterface dialog, int id) { - Cookies.clearCookies(); - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.geocaching.com/software/agreement.aspx?ID=0"))); - } - }); + showFooterMoreCaches(); - AlertDialog alert = dialog.create(); - alert.show(); - } else if (search != null && search.getError() != null) { - showToast(res.getString(R.string.err_download_fail) + ' ' + search.getError().getErrorString(res) + '.'); + if (search != null && search.getError() == StatusCode.UNAPPROVED_LICENSE) { + AlertDialog.Builder dialog = new AlertDialog.Builder(this); + dialog.setTitle(res.getString(R.string.license)); + dialog.setMessage(res.getString(R.string.err_license)); + dialog.setCancelable(true); + dialog.setNegativeButton(res.getString(R.string.license_dismiss), new DialogInterface.OnClickListener() { - hideLoading(); - showProgress(false); + @Override + public void onClick(DialogInterface dialog, int id) { + Cookies.clearCookies(); + dialog.cancel(); + } + }); + dialog.setPositiveButton(res.getString(R.string.license_show), new DialogInterface.OnClickListener() { - finish(); - return; - } + @Override + public void onClick(DialogInterface dialog, int id) { + Cookies.clearCookies(); + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.geocaching.com/software/agreement.aspx?ID=0"))); + } + }); - setAdapterCurrentCoordinates(false); - } catch (Exception e) { - showToast(res.getString(R.string.err_detail_cache_find_any)); - Log.e("cgeocaches.loadCachesHandler: " + e.toString()); + AlertDialog alert = dialog.create(); + alert.show(); + } else if (search != null && search.getError() != null) { + showToast(res.getString(R.string.err_download_fail) + ' ' + search.getError().getErrorString(res) + '.'); hideLoading(); showProgress(false); @@ -215,18 +202,48 @@ public class cgeocaches extends AbstractListActivity { return; } - try { - hideLoading(); - showProgress(false); - } catch (Exception e2) { - Log.e("cgeocaches.loadCachesHandler.2: " + e2.toString()); - } + setAdapterCurrentCoordinates(false); + } catch (Exception e) { + showToast(res.getString(R.string.err_detail_cache_find_any)); + Log.e("cgeocaches.loadCachesHandler: " + e.toString()); - if (adapter != null) { - adapter.setSelectMode(false); + hideLoading(); + showProgress(false); + + finish(); + return; + } + + try { + hideLoading(); + showProgress(false); + } catch (Exception e2) { + Log.e("cgeocaches.loadCachesHandler.2: " + e2.toString()); + } + + if (adapter != null) { + adapter.setSelectMode(false); + } + } + + private Handler loadCachesHandler = new LoadCachesHandler(this); + + private static class LoadCachesHandler extends WeakReferenceHandler<cgeocaches> { + + protected LoadCachesHandler(cgeocaches activity) { + super(activity); + } + + @Override + public void handleMessage(Message msg) { + final cgeocaches activity = getActivity(); + if (activity == null) { + return; } + activity.handleCachesLoaded(); } - }; + } + private Handler loadNextPageHandler = new Handler() { @Override @@ -479,7 +496,7 @@ public class cgeocaches extends AbstractListActivity { listId = StoredList.STANDARD_LIST_ID; title = res.getString(R.string.stored_caches_button); } else { - final StoredList list = app.getList(listId); + final StoredList list = cgData.getList(listId); // list.id may be different if listId was not valid listId = list.id; title = list.title; @@ -642,7 +659,7 @@ public class cgeocaches extends AbstractListActivity { // refresh standard list if it has changed (new caches downloaded) if (type == CacheListType.OFFLINE && listId >= StoredList.STANDARD_LIST_ID && search != null) { - SearchResult newSearch = cgeoapplication.getInstance().getBatchOfStoredCaches(true, coords, Settings.getCacheType(), listId); + SearchResult newSearch = cgData.getBatchOfStoredCaches(coords, Settings.getCacheType(), listId); if (newSearch != null && newSearch.getTotal() != search.getTotal()) { refreshCurrentList(); } @@ -784,7 +801,7 @@ public class cgeocaches extends AbstractListActivity { item.setVisible(isNonDefaultList); } - final boolean multipleLists = app.getLists().size() >= 2; + final boolean multipleLists = cgData.getLists().size() >= 2; item = menu.findItem(MENU_SWITCH_LIST); if (item != null) { item.setVisible(multipleLists); @@ -864,20 +881,7 @@ public class cgeocaches extends AbstractListActivity { invalidateOptionsMenuCompatible(); return false; case MENU_FILTER: - new FilterUserInterface(this).selectFilter(new RunnableWithArgument<IFilter>() { - @Override - public void run(IFilter selectedFilter) { - if (selectedFilter != null) { - setFilter(selectedFilter); - } - else { - // clear filter - if (adapter != null) { - setFilter(null); - } - } - } - }); + showFilterMenu(null); return true; case MENU_SORT: new ComparatorUserInterface(this).selectComparator(adapter.getCacheComparator(), new RunnableWithArgument<CacheComparator>() { @@ -906,6 +910,27 @@ public class cgeocaches extends AbstractListActivity { return CacheListAppFactory.onMenuItemSelected(item, cacheList, this, search); } + /** + * called from the filter bar view + */ + @Override + public void showFilterMenu(final View view) { + new FilterUserInterface(this).selectFilter(new RunnableWithArgument<IFilter>() { + @Override + public void run(IFilter selectedFilter) { + if (selectedFilter != null) { + setFilter(selectedFilter); + } + else { + // clear filter + if (adapter != null) { + setFilter(null); + } + } + } + }); + } + private void setComparator(final CacheComparator comparator) { if (adapter != null) { adapter.setComparator(comparator); @@ -944,7 +969,7 @@ public class cgeocaches extends AbstractListActivity { } if (cache.isOffline()) { menu.add(0, MENU_DROP_CACHE, 0, res.getString(R.string.cache_offline_drop)); - final List<StoredList> cacheLists = app.getLists(); + final List<StoredList> cacheLists = cgData.getLists(); if (cacheLists.size() > 1) { menu.add(0, MENU_MOVE_TO_LIST, 0, res.getString(R.string.cache_menu_move_list)); } @@ -960,7 +985,7 @@ public class cgeocaches extends AbstractListActivity { @Override public void run(Integer newListId) { - app.moveToList(adapter.getCheckedOrAllCaches(), newListId); + cgData.moveToList(adapter.getCheckedOrAllCaches(), newListId); adapter.setSelectMode(false); refreshCurrentList(); @@ -1003,7 +1028,7 @@ public class cgeocaches extends AbstractListActivity { break; case MENU_CACHE_DETAILS: final Intent cachesIntent = new Intent(this, CacheDetailActivity.class); - cachesIntent.putExtra("geocode", cache.getGeocode().toUpperCase()); + cachesIntent.putExtra("geocode", cache.getGeocode()); cachesIntent.putExtra("name", cache.getName()); startActivity(cachesIntent); break; @@ -1021,7 +1046,7 @@ public class cgeocaches extends AbstractListActivity { @Override public void run(Integer newListId) { - app.moveToList(Collections.singletonList(cache), newListId); + cgData.moveToList(Collections.singletonList(cache), newListId); adapter.setSelectMode(false); refreshCurrentList(); } @@ -1283,7 +1308,7 @@ public class cgeocaches extends AbstractListActivity { @Override public void run() { - search = cgeoapplication.getInstance().getBatchOfStoredCaches(true, coords, Settings.getCacheType(), listId); + search = cgData.getBatchOfStoredCaches(coords, Settings.getCacheType(), listId); replaceCacheListFromSearch(); loadCachesHandler.sendMessage(Message.obtain()); } @@ -1292,7 +1317,7 @@ public class cgeocaches extends AbstractListActivity { private class LoadByHistoryThread extends Thread { @Override public void run() { - search = cgeoapplication.getInstance().getHistoryOfCaches(true, coords != null ? Settings.getCacheType() : CacheType.ALL); + search = cgData.getHistoryOfCaches(true, coords != null ? Settings.getCacheType() : CacheType.ALL); replaceCacheListFromSearch(); loadCachesHandler.sendMessage(Message.obtain()); } @@ -1581,7 +1606,7 @@ public class cgeocaches extends AbstractListActivity { @Override public void run() { removeGeoAndDir(); - app.markDropped(selected); + cgData.markDropped(selected); handler.sendEmptyMessage(MSG_DONE); startGeoAndDir(); @@ -1600,7 +1625,7 @@ public class cgeocaches extends AbstractListActivity { @Override public void run() { - app.clearVisitDate(selected); + cgData.clearVisitDate(selected); handler.sendEmptyMessage(MSG_DONE); } } @@ -1650,7 +1675,7 @@ public class cgeocaches extends AbstractListActivity { return; } - StoredList list = app.getList(id); + StoredList list = cgData.getList(id); if (list == null) { return; } @@ -1693,7 +1718,7 @@ public class cgeocaches extends AbstractListActivity { @Override public void run() { final List<cgCache> caches = adapter.getCheckedCaches(); - app.moveToList(caches, listId); + cgData.moveToList(caches, listId); handler.sendEmptyMessage(listId); } } @@ -1725,7 +1750,7 @@ public class cgeocaches extends AbstractListActivity { } private void removeListInternal() { - if (app.removeList(listId)) { + if (cgData.removeList(listId)) { showToast(res.getString(R.string.list_dialog_remove_ok)); switchListById(StoredList.STANDARD_LIST_ID); } else { diff --git a/main/src/cgeo/geocaching/cgeonavigate.java b/main/src/cgeo/geocaching/cgeonavigate.java index 64b7cd8..3c6bf73 100644 --- a/main/src/cgeo/geocaching/cgeonavigate.java +++ b/main/src/cgeo/geocaching/cgeonavigate.java @@ -61,8 +61,7 @@ public class cgeonavigate extends AbstractActivity { // get parameters Bundle extras = getIntent().getExtras(); if (extras != null) { - final String geocode = extras.getString(EXTRAS_GEOCODE); - title = geocode; + title = extras.getString(EXTRAS_GEOCODE); final String name = extras.getString(EXTRAS_NAME); dstCoords = (Geopoint) extras.getParcelable(EXTRAS_COORDS); info = extras.getString(EXTRAS_CACHE_INFO); @@ -293,7 +292,7 @@ public class cgeonavigate extends AbstractActivity { final Intent navigateIntent = new Intent(context, cgeonavigate.class); navigateIntent.putExtra(EXTRAS_COORDS, coords); - navigateIntent.putExtra(EXTRAS_GEOCODE, geocode.toUpperCase()); + navigateIntent.putExtra(EXTRAS_GEOCODE, geocode); if (null != displayedName) { navigateIntent.putExtra(EXTRAS_NAME, displayedName); } diff --git a/main/src/cgeo/geocaching/cgeopoint.java b/main/src/cgeo/geocaching/cgeopoint.java index 025b96a..0e0d98b 100644 --- a/main/src/cgeo/geocaching/cgeopoint.java +++ b/main/src/cgeo/geocaching/cgeopoint.java @@ -207,7 +207,7 @@ public class cgeopoint extends AbstractActivity { private List<Destination> getHistoryOfSearchedLocations() { if (historyOfSearchedLocations == null) { // Load from database - historyOfSearchedLocations = app.getHistoryOfSearchedLocations(); + historyOfSearchedLocations = cgData.loadHistoryOfSearchedLocations(); } return historyOfSearchedLocations; @@ -393,7 +393,7 @@ public class cgeopoint extends AbstractActivity { getHistoryOfSearchedLocations().add(0, loc); // Save location - app.saveSearchedDestination(loc); + cgData.saveSearchedDestination(loc); // Ensure to remove the footer historyListView.removeFooterView(getEmptyHistoryFooter()); @@ -405,7 +405,7 @@ public class cgeopoint extends AbstractActivity { getHistoryOfSearchedLocations().remove(destination); // Save - app.removeSearchedDestinations(destination); + cgData.removeSearchedDestination(destination); if (getHistoryOfSearchedLocations().isEmpty()) { if (historyListView.getFooterViewsCount() == 0) { @@ -424,7 +424,7 @@ public class cgeopoint extends AbstractActivity { getHistoryOfSearchedLocations().clear(); // Save - app.clearSearchedDestinations(); + cgData.clearSearchedDestinations(); if (historyListView.getFooterViewsCount() == 0) { historyListView.addFooterView(getEmptyHistoryFooter()); diff --git a/main/src/cgeo/geocaching/cgeotrackable.java b/main/src/cgeo/geocaching/cgeotrackable.java index 93b410a..3c9e554 100644 --- a/main/src/cgeo/geocaching/cgeotrackable.java +++ b/main/src/cgeo/geocaching/cgeotrackable.java @@ -5,6 +5,7 @@ import cgeo.geocaching.connector.gc.GCParser; import cgeo.geocaching.enumerations.LogType; import cgeo.geocaching.geopoint.Units; import cgeo.geocaching.network.HtmlImage; +import cgeo.geocaching.network.Network; import cgeo.geocaching.ui.CacheDetailsCreator; import cgeo.geocaching.ui.Formatter; import cgeo.geocaching.utils.BaseUtils; @@ -32,9 +33,9 @@ import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; -import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; +import java.util.Locale; public class cgeotrackable extends AbstractActivity { private static final int MENU_LOG_TOUCH = 1; @@ -68,12 +69,12 @@ public class cgeotrackable extends AbstractActivity { try { inflater = getLayoutInflater(); - geocode = trackable.getGeocode().toUpperCase(); + geocode = trackable.getGeocode(); if (StringUtils.isNotBlank(trackable.getName())) { setTitle(Html.fromHtml(trackable.getName()).toString()); } else { - setTitle(trackable.getName().toUpperCase()); + setTitle(trackable.getName()); } findViewById(R.id.details_list_box).setVisibility(View.VISIBLE); @@ -99,7 +100,7 @@ public class cgeotrackable extends AbstractActivity { details.add(R.string.trackable_type, tbType); // trackable geocode - details.add(R.string.trackable_code, trackable.getGeocode().toUpperCase()); + details.add(R.string.trackable_code, trackable.getGeocode()); // trackable owner TextView owner = details.add(R.string.trackable_owner, res.getString(R.string.trackable_unknown)); @@ -274,33 +275,33 @@ public class cgeotrackable extends AbstractActivity { // try to get data from URI if (geocode == null && guid == null && id == null && uri != null) { - String uriHost = uri.getHost().toLowerCase(); + String uriHost = uri.getHost().toLowerCase(Locale.US); if (uriHost.contains("geocaching.com")) { geocode = uri.getQueryParameter("tracker"); guid = uri.getQueryParameter("guid"); id = uri.getQueryParameter("id"); if (StringUtils.isNotBlank(geocode)) { - geocode = geocode.toUpperCase(); + geocode = geocode.toUpperCase(Locale.US); guid = null; id = null; } else if (StringUtils.isNotBlank(guid)) { geocode = null; - guid = guid.toLowerCase(); + guid = guid.toLowerCase(Locale.US); id = null; } else if (StringUtils.isNotBlank(id)) { geocode = null; guid = null; - id = id.toLowerCase(); + id = id.toLowerCase(Locale.US); } else { showToast(res.getString(R.string.err_tb_details_open)); finish(); return; } } else if (uriHost.contains("coord.info")) { - String uriPath = uri.getPath().toLowerCase(); + String uriPath = uri.getPath().toLowerCase(Locale.US); if (uriPath != null && uriPath.startsWith("/tb")) { - geocode = uriPath.substring(1).toUpperCase(); + geocode = uriPath.substring(1).toUpperCase(Locale.US); guid = null; id = null; } else { @@ -322,7 +323,7 @@ public class cgeotrackable extends AbstractActivity { if (StringUtils.isNotBlank(name)) { message = Html.fromHtml(name).toString(); } else if (StringUtils.isNotBlank(geocode)) { - message = geocode.toUpperCase(); + message = geocode; } else { message = res.getString(R.string.trackable); } @@ -367,7 +368,7 @@ public class cgeotrackable extends AbstractActivity { cgeocaches.startActivityUserName(this, contextMenuUser); return true; case 3: - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.geocaching.com/profile/?u=" + URLEncoder.encode(contextMenuUser)))); + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.geocaching.com/profile/?u=" + Network.encode(contextMenuUser)))); return true; default: return false; @@ -416,8 +417,7 @@ public class cgeotrackable extends AbstractActivity { @Override public void run() { - // for non TB trackables, we should just use what we have in the database - trackable = cgeoapplication.getInstance().getTrackableByGeocode(geocode); + trackable = cgData.loadTrackable(geocode); if ((trackable == null || trackable.isLoggable()) && !StringUtils.startsWithIgnoreCase(geocode, "GK")) { trackable = GCParser.searchTrackable(geocode, guid, id); @@ -470,6 +470,17 @@ public class cgeotrackable extends AbstractActivity { logView.setText(logText); } + ImageView statusMarker = (ImageView) rowView.findViewById(R.id.log_mark); + // colored marker + int marker = log.type.markerId; + if (marker != 0) { + statusMarker.setVisibility(View.VISIBLE); + statusMarker.setImageResource(marker); + } + else { + statusMarker.setVisibility(View.GONE); + } + // add LogImages LinearLayout logLayout = (LinearLayout) rowView.findViewById(R.id.log_layout); diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel11Dummy.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel11Emulation.java index 9c2bb8c..6a23ed5 100644 --- a/main/src/cgeo/geocaching/compatibility/AndroidLevel11Dummy.java +++ b/main/src/cgeo/geocaching/compatibility/AndroidLevel11Emulation.java @@ -3,9 +3,9 @@ package cgeo.geocaching.compatibility; import android.app.Activity; /** - * dummy class which has no functionality in the level 11 API + * implement level 11 API using older methods */ -public class AndroidLevel11Dummy implements AndroidLevel11Interface { +public class AndroidLevel11Emulation implements AndroidLevel11Interface { @Override public void invalidateOptionsMenu(final Activity activity) { diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel13.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel13.java new file mode 100644 index 0000000..4eac205 --- /dev/null +++ b/main/src/cgeo/geocaching/compatibility/AndroidLevel13.java @@ -0,0 +1,31 @@ +package cgeo.geocaching.compatibility; + +import cgeo.geocaching.cgeoapplication; + +import android.annotation.TargetApi; +import android.content.Context; +import android.graphics.Point; +import android.view.WindowManager; + +@TargetApi(value = 13) +public class AndroidLevel13 implements AndroidLevel13Interface { + + @Override + public int getDisplayWidth() { + return getDisplaySize().x; + } + + @Override + public Point getDisplaySize() { + Point dimensions = new Point(); + ((WindowManager) cgeoapplication.getInstance().getSystemService(Context.WINDOW_SERVICE)) + .getDefaultDisplay().getSize(dimensions); + return dimensions; + } + + @Override + public int getDisplayHeight() { + return getDisplaySize().y; + } + +} diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel13Emulation.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel13Emulation.java new file mode 100644 index 0000000..2257d83 --- /dev/null +++ b/main/src/cgeo/geocaching/compatibility/AndroidLevel13Emulation.java @@ -0,0 +1,33 @@ +package cgeo.geocaching.compatibility; + +import cgeo.geocaching.cgeoapplication; + +import android.content.Context; +import android.graphics.Point; +import android.view.Display; +import android.view.WindowManager; + +@SuppressWarnings("deprecation") +public class AndroidLevel13Emulation implements AndroidLevel13Interface { + + @Override + public int getDisplayWidth() { + return getDisplay().getWidth(); + } + + @Override + public int getDisplayHeight() { + return getDisplay().getHeight(); + } + + @Override + public Point getDisplaySize() { + final Display display = getDisplay(); + return new Point(display.getWidth(), display.getHeight()); + } + + private static Display getDisplay() { + return ((WindowManager) cgeoapplication.getInstance().getSystemService(Context.WINDOW_SERVICE)) + .getDefaultDisplay(); + } +} diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel13Interface.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel13Interface.java new file mode 100644 index 0000000..f4e1975 --- /dev/null +++ b/main/src/cgeo/geocaching/compatibility/AndroidLevel13Interface.java @@ -0,0 +1,11 @@ +package cgeo.geocaching.compatibility; + +import android.graphics.Point; + +public interface AndroidLevel13Interface { + int getDisplayWidth(); + + int getDisplayHeight(); + + Point getDisplaySize(); +} diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel8.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel8.java index ea5a795..a388adb 100644 --- a/main/src/cgeo/geocaching/compatibility/AndroidLevel8.java +++ b/main/src/cgeo/geocaching/compatibility/AndroidLevel8.java @@ -6,6 +6,7 @@ import android.annotation.TargetApi; import android.app.Activity; import android.app.backup.BackupManager; import android.view.Display; +import android.view.Surface; @TargetApi(8) public class AndroidLevel8 implements AndroidLevel8Interface { @@ -21,4 +22,23 @@ public class AndroidLevel8 implements AndroidLevel8Interface { Log.i("Requesting settings backup with settings manager"); BackupManager.dataChanged(name); } + + @Override + public int getRotationOffset(final Activity activity) { + try { + final int rotation = getRotation(activity); + if (rotation == Surface.ROTATION_90) { + return 90; + } else if (rotation == Surface.ROTATION_180) { + return 180; + } else if (rotation == Surface.ROTATION_270) { + return 270; + } + } catch (final Exception e) { + // This should never happen: IllegalArgumentException, IllegalAccessException or InvocationTargetException + Log.e("Cannot call getRotation()", e); + } + + return 0; + } } diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel8Dummy.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel8Dummy.java deleted file mode 100644 index d0ab911..0000000 --- a/main/src/cgeo/geocaching/compatibility/AndroidLevel8Dummy.java +++ /dev/null @@ -1,16 +0,0 @@ -package cgeo.geocaching.compatibility; - -import android.app.Activity; - -public class AndroidLevel8Dummy implements AndroidLevel8Interface { - - @Override - public int getRotation(final Activity activity) { - return 0; - } - - @Override - public void dataChanged(final String name) { - // do nothing - } -} diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel8Emulation.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel8Emulation.java new file mode 100644 index 0000000..197993d --- /dev/null +++ b/main/src/cgeo/geocaching/compatibility/AndroidLevel8Emulation.java @@ -0,0 +1,30 @@ +package cgeo.geocaching.compatibility; + +import android.annotation.TargetApi; +import android.app.Activity; +import android.content.res.Configuration; +import android.view.Display; + +@TargetApi(value = 7) +public class AndroidLevel8Emulation implements AndroidLevel8Interface { + + @Override + public int getRotation(final Activity activity) { + return 0; + } + + @Override + public void dataChanged(final String name) { + // do nothing + } + + @Override + public int getRotationOffset(Activity activity) { + final Display display = activity.getWindowManager().getDefaultDisplay(); + final int rotation = display.getOrientation(); + if (rotation == Configuration.ORIENTATION_LANDSCAPE) { + return 90; + } + return 0; + } +} diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel8Interface.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel8Interface.java index b1c4f81..761c23a 100644 --- a/main/src/cgeo/geocaching/compatibility/AndroidLevel8Interface.java +++ b/main/src/cgeo/geocaching/compatibility/AndroidLevel8Interface.java @@ -6,4 +6,5 @@ public interface AndroidLevel8Interface { public int getRotation(final Activity activity); public void dataChanged(final String name); + public int getRotationOffset(final Activity activity); }
\ No newline at end of file diff --git a/main/src/cgeo/geocaching/compatibility/Compatibility.java b/main/src/cgeo/geocaching/compatibility/Compatibility.java index 0821655..05a3331 100644 --- a/main/src/cgeo/geocaching/compatibility/Compatibility.java +++ b/main/src/cgeo/geocaching/compatibility/Compatibility.java @@ -8,11 +8,9 @@ import org.apache.commons.lang3.reflect.MethodUtils; import android.app.Activity; import android.content.Intent; -import android.content.res.Configuration; +import android.graphics.Point; import android.os.Build; import android.text.InputType; -import android.view.Display; -import android.view.Surface; import android.widget.EditText; public final class Compatibility { @@ -23,19 +21,26 @@ public final class Compatibility { private final static AndroidLevel8Interface level8; private final static AndroidLevel11Interface level11; + private final static AndroidLevel13Interface level13; static { if (isLevel8) { level8 = new AndroidLevel8(); } else { - level8 = new AndroidLevel8Dummy(); + level8 = new AndroidLevel8Emulation(); } if (sdkVersion >= 11) { level11 = new AndroidLevel11(); } else { - level11 = new AndroidLevel11Dummy(); + level11 = new AndroidLevel11Emulation(); + } + if (sdkVersion >= 13) { + level13 = new AndroidLevel13(); + } + else { + level13 = new AndroidLevel13Emulation(); } } @@ -47,29 +52,7 @@ public final class Compatibility { * @return the adjusted direction, in the [0, 360[ range */ public static float getDirectionNow(final float directionNowPre, final Activity activity) { - float offset = 0; - if (isLevel8) { - try { - final int rotation = level8.getRotation(activity); - if (rotation == Surface.ROTATION_90) { - offset = 90; - } else if (rotation == Surface.ROTATION_180) { - offset = 180; - } else if (rotation == Surface.ROTATION_270) { - offset = 270; - } - } catch (final Exception e) { - // This should never happen: IllegalArgumentException, IllegalAccessException or InvocationTargetException - Log.e("Cannot call getRotation()", e); - } - } else { - final Display display = activity.getWindowManager().getDefaultDisplay(); - final int rotation = display.getOrientation(); - if (rotation == Configuration.ORIENTATION_LANDSCAPE) { - offset = 90; - } - } - return AngleUtils.normalize(directionNowPre + offset); + return AngleUtils.normalize(directionNowPre + level8.getRotationOffset(activity)); } public static void dataChanged(final String name) { @@ -113,4 +96,16 @@ public final class Compatibility { level11.invalidateOptionsMenu(activity); } + public static int getDisplayWidth() { + return level13.getDisplayWidth(); + } + + public static int getDisplayHeight() { + return level13.getDisplayHeight(); + } + + public static Point getDisplaySize() { + return level13.getDisplaySize(); + } + } diff --git a/main/src/cgeo/geocaching/connector/AbstractConnector.java b/main/src/cgeo/geocaching/connector/AbstractConnector.java index aa75f3b..112d6cf 100644 --- a/main/src/cgeo/geocaching/connector/AbstractConnector.java +++ b/main/src/cgeo/geocaching/connector/AbstractConnector.java @@ -4,6 +4,8 @@ import cgeo.geocaching.SearchResult; import cgeo.geocaching.cgCache; import cgeo.geocaching.geopoint.Viewport; +import org.apache.commons.lang3.StringUtils; + public abstract class AbstractConnector implements IConnector { @Override @@ -65,4 +67,18 @@ public abstract class AbstractConnector implements IConnector { public String[] getTokens() { return null; } + + @Override + public String getGeocodeFromUrl(final String url) { + final String urlPrefix = getCacheUrlPrefix(); + if (StringUtils.startsWith(url, urlPrefix)) { + String geocode = url.substring(urlPrefix.length()); + if (canHandle(geocode)) { + return geocode; + } + } + return null; + } + + abstract protected String getCacheUrlPrefix(); } diff --git a/main/src/cgeo/geocaching/connector/ConnectorFactory.java b/main/src/cgeo/geocaching/connector/ConnectorFactory.java index b9b8263..bc4dcc0 100644 --- a/main/src/cgeo/geocaching/connector/ConnectorFactory.java +++ b/main/src/cgeo/geocaching/connector/ConnectorFactory.java @@ -81,4 +81,14 @@ public final class ConnectorFactory { return GCConnector.getInstance().searchByViewport(viewport, tokens); } + public static String getGeocodeFromURL(final String url) { + for (IConnector connector : connectors) { + String geocode = connector.getGeocodeFromUrl(url); + if (StringUtils.isNotBlank(geocode)) { + return geocode; + } + } + return null; + } + } diff --git a/main/src/cgeo/geocaching/connector/GeocachingAustraliaConnector.java b/main/src/cgeo/geocaching/connector/GeocachingAustraliaConnector.java index 771f5d2..30d1a4b 100644 --- a/main/src/cgeo/geocaching/connector/GeocachingAustraliaConnector.java +++ b/main/src/cgeo/geocaching/connector/GeocachingAustraliaConnector.java @@ -13,7 +13,7 @@ public class GeocachingAustraliaConnector extends AbstractConnector { @Override public String getCacheUrl(final cgCache cache) { - return "http://" + getHost() + "/cache/" + cache.getGeocode(); + return getCacheUrlPrefix() + cache.getGeocode(); } @Override @@ -25,4 +25,9 @@ public class GeocachingAustraliaConnector extends AbstractConnector { public boolean canHandle(final String geocode) { return (StringUtils.startsWithIgnoreCase(geocode, "GA") || StringUtils.startsWithIgnoreCase(geocode, "TP")) && isNumericId(geocode.substring(2)); } + + @Override + protected String getCacheUrlPrefix() { + return "http://" + getHost() + "/cache/"; + } } diff --git a/main/src/cgeo/geocaching/connector/GeopeitusConnector.java b/main/src/cgeo/geocaching/connector/GeopeitusConnector.java index fa19d80..6ef91db 100644 --- a/main/src/cgeo/geocaching/connector/GeopeitusConnector.java +++ b/main/src/cgeo/geocaching/connector/GeopeitusConnector.java @@ -13,7 +13,7 @@ public class GeopeitusConnector extends AbstractConnector { @Override public String getCacheUrl(final cgCache cache) { - return "http://" + getHost() + "/aare/" + StringUtils.stripStart(cache.getGeocode().substring(2), "0"); + return getCacheUrlPrefix() + StringUtils.stripStart(cache.getGeocode().substring(2), "0"); } @Override @@ -25,4 +25,9 @@ public class GeopeitusConnector extends AbstractConnector { public boolean canHandle(String geocode) { return StringUtils.startsWith(geocode, "GE") && isNumericId(geocode.substring(2)); } + + @Override + protected String getCacheUrlPrefix() { + return "http://" + getHost() + "/aare/"; + } } diff --git a/main/src/cgeo/geocaching/connector/IConnector.java b/main/src/cgeo/geocaching/connector/IConnector.java index 9111955..d6ac2ff 100644 --- a/main/src/cgeo/geocaching/connector/IConnector.java +++ b/main/src/cgeo/geocaching/connector/IConnector.java @@ -37,7 +37,7 @@ public interface IConnector { /** * enable/disable favorite points controls in cache details - * + * * @return */ public boolean supportsFavoritePoints(); @@ -104,4 +104,12 @@ public interface IConnector { */ public String[] getTokens(); + /** + * extract a geocode from the given URL, if this connector can handle that URL somehow + * + * @param url + * @return + */ + public String getGeocodeFromUrl(final String url); + } diff --git a/main/src/cgeo/geocaching/connector/UnknownConnector.java b/main/src/cgeo/geocaching/connector/UnknownConnector.java index 5e8d3f3..991d31c 100644 --- a/main/src/cgeo/geocaching/connector/UnknownConnector.java +++ b/main/src/cgeo/geocaching/connector/UnknownConnector.java @@ -25,4 +25,9 @@ public class UnknownConnector extends AbstractConnector { public boolean canHandle(final String geocode) { return StringUtils.isNotBlank(geocode); } + + @Override + protected String getCacheUrlPrefix() { + return null; + } } diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java index 5607d97..8a8c686 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java @@ -3,7 +3,7 @@ package cgeo.geocaching.connector.gc; import cgeo.geocaching.R; import cgeo.geocaching.SearchResult; import cgeo.geocaching.cgCache; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.cgData; import cgeo.geocaching.connector.AbstractConnector; import cgeo.geocaching.connector.capability.ISearchByCenter; import cgeo.geocaching.connector.capability.ISearchByGeocode; @@ -20,6 +20,7 @@ import java.util.regex.Pattern; public class GCConnector extends AbstractConnector implements ISearchByGeocode, ISearchByCenter { + private static final String HTTP_COORD_INFO = "http://coord.info/"; private static GCConnector instance; private static final Pattern gpxZipFilePattern = Pattern.compile("\\d{7,}(_.+)?\\.zip", Pattern.CASE_INSENSITIVE); @@ -82,11 +83,10 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, if (StringUtils.isEmpty(page)) { final SearchResult search = new SearchResult(); - if (cgeoapplication.getInstance().isThere(geocode, guid, true, false)) { + if (cgData.isThere(geocode, guid, true, false)) { if (StringUtils.isBlank(geocode) && StringUtils.isNotBlank(guid)) { Log.i("Loading old cache from cache."); - - search.addGeocode(cgeoapplication.getInstance().getGeocode(guid)); + search.addGeocode(cgData.getGeocodeForGuid(guid)); } else { search.addGeocode(geocode); } @@ -128,7 +128,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, public static boolean addToWatchlist(cgCache cache) { final boolean added = GCParser.addToWatchlist(cache); if (added) { - cgeoapplication.getInstance().updateCache(cache); + cgData.saveChangedCache(cache); } return added; } @@ -136,7 +136,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, public static boolean removeFromWatchlist(cgCache cache) { final boolean removed = GCParser.removeFromWatchlist(cache); if (removed) { - cgeoapplication.getInstance().updateCache(cache); + cgData.saveChangedCache(cache); } return removed; } @@ -144,7 +144,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, public static boolean addToFavorites(cgCache cache) { final boolean added = GCParser.addToFavorites(cache); if (added) { - cgeoapplication.getInstance().updateCache(cache); + cgData.saveChangedCache(cache); } return added; } @@ -152,7 +152,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, public static boolean removeFromFavorites(cgCache cache) { final boolean removed = GCParser.removeFromFavorites(cache); if (removed) { - cgeoapplication.getInstance().updateCache(cache); + cgData.saveChangedCache(cache); } return removed; } @@ -168,4 +168,8 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, return true; } + @Override + protected String getCacheUrlPrefix() { + return HTTP_COORD_INFO; + } } diff --git a/main/src/cgeo/geocaching/connector/gc/GCConstants.java b/main/src/cgeo/geocaching/connector/gc/GCConstants.java index 393eb7e..a821a8e 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConstants.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConstants.java @@ -1,5 +1,6 @@ package cgeo.geocaching.connector.gc; +import java.util.Locale; import java.util.regex.Pattern; /** @@ -49,7 +50,7 @@ public final class GCConstants { public final static Pattern PATTERN_FAVORITE = Pattern.compile("<div id=\"pnlFavoriteCache\">"); // without 'class="hideMe"' inside the tag ! public final static Pattern PATTERN_FAVORITECOUNT = Pattern.compile("<a id=\"uxFavContainerLink\"[^>]+>[^<]*<div[^<]*<span class=\"favorite-value\">\\D*([0-9]+?)</span>"); public final static Pattern PATTERN_COUNTLOGS = Pattern.compile("<span id=\"ctl00_ContentBody_lblFindCounts\"><p(.+?)</p></span>"); - public final static Pattern PATTERN_LOGBOOK = Pattern.compile("initalLogs = (\\{.+\\});"); + public final static Pattern PATTERN_LOGBOOK = Pattern.compile("initalLogs = (\\{.+\\});"); // The "inital" typo really comes from gc.com site /** Two groups ! */ public final static Pattern PATTERN_COUNTLOG = Pattern.compile("<img src=\"/images/logtypes/([0-9]+)\\.png\"[^>]+> (\\d*[,.]?\\d+)"); public static final Pattern PATTERN_PREMIUMMEMBERS = Pattern.compile("<p class=\"Warning NoBottomSpacing\">This is a Premium Member Only cache.</p>"); @@ -103,7 +104,7 @@ public final class GCConstants { public final static Pattern PATTERN_TRACKABLE_ICON = Pattern.compile("<img id=\"ctl00_ContentBody_BugTypeImage\" class=\"TravelBugHeaderIcon\" src=\"([^\"]+)\"[^>]*>"); public final static Pattern PATTERN_TRACKABLE_TYPE = Pattern.compile("<img id=\"ctl00_ContentBody_BugTypeImage\" class=\"TravelBugHeaderIcon\" src=\"[^\"]+\" alt=\"([^\"]+)\"[^>]*>"); public final static Pattern PATTERN_TRACKABLE_DISTANCE = Pattern.compile("<h4[^>]*\\W*Tracking History \\(([0-9.,]+(km|mi))[^\\)]*\\)"); - public final static Pattern PATTERN_TRACKABLE_LOG = Pattern.compile("<tr class=\"Data BorderTop .+?src=\"/images/logtypes/([^.]+)\\.png[^>]+> ([^<]+)</td>.+?guid.+?>([^<]+)</a>.+?(?:guid=([^\"]+)\">(<span[^>]+>)?([^<]+)</.+?)?<td colspan=\"4\">(.+?)(?:<ul.+?ul>)?\\s*</td>\\s*</tr>"); + public final static Pattern PATTERN_TRACKABLE_LOG = Pattern.compile("<tr class=\"Data BorderTop .+?src=\"/images/logtypes/([^.]+)\\.png[^>]+> ([^<]+)</td>.+?guid.+?>([^<]+)</a>.+?(?:guid=([^\"]+)\">(<span[^>]+>)?([^<]+)</.+?)?<td colspan=\"4\">\\s*<div>(.*?)</div>\\s*(?:<ul.+?ul>)?\\s*</td>\\s*</tr>"); public final static Pattern PATTERN_TRACKABLE_LOG_IMAGES = Pattern.compile("<li><a href=\"([^\"]+)\".+?LogImgTitle.+?>([^<]+)</"); /** @@ -187,7 +188,7 @@ public final class GCConstants { public static long gccodeToGCId(final String gccode) { long gcid = 0; long base = GC_BASE31; - String geocodeWO = gccode.substring(2).toUpperCase(); + String geocodeWO = gccode.substring(2).toUpperCase(Locale.US); if ((geocodeWO.length() < 4) || (geocodeWO.length() == 4 && SEQUENCE_GCID.indexOf(geocodeWO.charAt(0)) < 16)) { base = GC_BASE16; diff --git a/main/src/cgeo/geocaching/connector/gc/GCMap.java b/main/src/cgeo/geocaching/connector/gc/GCMap.java index 681a1d7..97e7426 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCMap.java +++ b/main/src/cgeo/geocaching/connector/gc/GCMap.java @@ -3,6 +3,7 @@ package cgeo.geocaching.connector.gc; import cgeo.geocaching.SearchResult; import cgeo.geocaching.Settings; import cgeo.geocaching.cgCache; +import cgeo.geocaching.cgData; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.enumerations.CacheSize; import cgeo.geocaching.enumerations.CacheType; @@ -166,6 +167,8 @@ public class GCMap { // iterate over the data and construct all caches in this tile Map<String, List<UTFGridPosition>> positions = new HashMap<String, List<UTFGridPosition>>(); // JSON id as key + Map<String, List<UTFGridPosition>> singlePositions = new HashMap<String, List<UTFGridPosition>>(); // JSON id as key + for (int i = 1; i < keys.length(); i++) { // index 0 is empty String key = keys.getString(i); if (StringUtils.isNotBlank(key)) { @@ -177,12 +180,20 @@ public class GCMap { nameCache.put(id, cacheInfo.getString("n")); List<UTFGridPosition> listOfPositions = positions.get(id); + List<UTFGridPosition> singleListOfPositions = singlePositions.get(id); + if (listOfPositions == null) { listOfPositions = new ArrayList<UTFGridPosition>(); positions.put(id, listOfPositions); + singleListOfPositions = new ArrayList<UTFGridPosition>(); + singlePositions.put(id, singleListOfPositions); } listOfPositions.add(pos); + if (dataForKey.length() == 1) { + singleListOfPositions.add(pos); + } + } } } @@ -198,12 +209,16 @@ public class GCMap { cache.setName(nameCache.get(id)); cache.setZoomlevel(tile.getZoomlevel()); cache.setCoords(tile.getCoord(xy)); - if (strategy.flags.contains(StrategyFlag.PARSE_TILES) && positions.size() < 64 && bitmap != null) { - // don't parse if there are too many caches. The decoding would return too much wrong results - IconDecoder.parseMapPNG(cache, bitmap, xy, tile.getZoomlevel()); + if (strategy.flags.contains(StrategyFlag.PARSE_TILES) && bitmap != null) { + for (UTFGridPosition singlePos : singlePositions.get(id)) { + if (IconDecoder.parseMapPNG(cache, bitmap, singlePos, tile.getZoomlevel())) { + break; // cache parsed + } + } } else { cache.setType(CacheType.UNKNOWN); } + boolean exclude = false; if (Settings.isExcludeMyCaches() && (cache.isFound() || cache.isOwn())) { // workaround for BM exclude = true; @@ -341,7 +356,7 @@ public class GCMap { if (search != null && !search.isEmpty()) { final Set<String> geocodes = search.getGeocodes(); if (Settings.isPremiumMember()) { - lastSearchViewport = cgeoapplication.getInstance().getBounds(geocodes); + lastSearchViewport = cgData.getBounds(geocodes); } else { lastSearchViewport = new Viewport(center, center); } diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java index 895a9c8..40d5a81 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCParser.java +++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java @@ -6,6 +6,7 @@ import cgeo.geocaching.SearchResult; import cgeo.geocaching.Settings; import cgeo.geocaching.TrackableLog; import cgeo.geocaching.cgCache; +import cgeo.geocaching.cgData; import cgeo.geocaching.cgImage; import cgeo.geocaching.cgTrackable; import cgeo.geocaching.cgWaypoint; @@ -43,12 +44,7 @@ import org.json.JSONObject; import android.net.Uri; import android.text.Html; -import android.text.Spannable; -import android.text.Spanned; -import android.text.style.ForegroundColorSpan; -import android.text.style.StrikethroughSpan; -import java.net.URLDecoder; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -165,21 +161,25 @@ public abstract class GCParser { String inventoryPre = null; - cache.setGeocode(BaseUtils.getMatch(row, GCConstants.PATTERN_SEARCH_GEOCODE, true, 1, cache.getGeocode(), true).toUpperCase()); + cache.setGeocode(BaseUtils.getMatch(row, GCConstants.PATTERN_SEARCH_GEOCODE, true, 1, cache.getGeocode(), true)); // cache type cache.setType(CacheType.getByPattern(BaseUtils.getMatch(row, GCConstants.PATTERN_SEARCH_TYPE, true, 1, null, true))); // cache direction - image if (Settings.getLoadDirImg()) { - cache.setDirectionImg(URLDecoder.decode(BaseUtils.getMatch(row, GCConstants.PATTERN_SEARCH_DIRECTION, true, 1, cache.getDirectionImg(), true))); + cache.setDirectionImg(Network.decode(BaseUtils.getMatch(row, GCConstants.PATTERN_SEARCH_DIRECTION, true, 1, cache.getDirectionImg(), true))); } // cache inventory final Matcher matcherTbs = GCConstants.PATTERN_SEARCH_TRACKABLES.matcher(row); while (matcherTbs.find()) { if (matcherTbs.groupCount() > 0) { - cache.setInventoryItems(Integer.parseInt(matcherTbs.group(1))); + try { + cache.setInventoryItems(Integer.parseInt(matcherTbs.group(1))); + } catch (NumberFormatException e) { + Log.e("Error parsing trackables count", e); + } inventoryPre = matcherTbs.group(2); } } @@ -222,16 +222,6 @@ public abstract class GCParser { Log.w("GCParser.parseSearch: Failed to parse favourite count"); } - if (cache.getNameSp() == null) { - cache.setNameSp((new Spannable.Factory()).newSpannable(cache.getName())); - if (cache.isDisabled() || cache.isArchived()) { // strike - cache.getNameSp().setSpan(new StrikethroughSpan(), 0, cache.getNameSp().toString().length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - } - if (cache.isArchived()) { - cache.getNameSp().setSpan(new ForegroundColorSpan(cgeoapplication.getInstance().getResources().getColor(R.color.archived_cache_color)), 0, cache.getNameSp().toString().length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - } - } - searchResult.addCache(cache); } @@ -326,7 +316,7 @@ public abstract class GCParser { // save full detailed caches CancellableHandler.sendLoadProgressDetail(handler, R.string.cache_dialog_loading_details_status_cache); - cgeoapplication.getInstance().saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); + cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); // update progress message so user knows we're still working. This is more of a place holder than // actual indication of what the program is doing @@ -383,7 +373,7 @@ public abstract class GCParser { cache.setName(cacheName); // owner real name - cache.setOwnerUserId(URLDecoder.decode(BaseUtils.getMatch(page, GCConstants.PATTERN_OWNER_USERID, true, cache.getOwnerUserId()))); + cache.setOwnerUserId(Network.decode(BaseUtils.getMatch(page, GCConstants.PATTERN_OWNER_USERID, true, cache.getOwnerUserId()))); cache.setOwn(StringUtils.equalsIgnoreCase(cache.getOwnerUserId(), Settings.getUsername())); @@ -401,13 +391,21 @@ public abstract class GCParser { // cache terrain String result = BaseUtils.getMatch(tableInside, GCConstants.PATTERN_TERRAIN, true, null); if (result != null) { - cache.setTerrain(Float.parseFloat(StringUtils.replaceChars(result, '_', '.'))); + try { + cache.setTerrain(Float.parseFloat(StringUtils.replaceChars(result, '_', '.'))); + } catch (NumberFormatException e) { + Log.e("Error parsing terrain value", e); + } } // cache difficulty result = BaseUtils.getMatch(tableInside, GCConstants.PATTERN_DIFFICULTY, true, null); if (result != null) { - cache.setDifficulty(Float.parseFloat(StringUtils.replaceChars(result, '_', '.'))); + try { + cache.setDifficulty(Float.parseFloat(StringUtils.replaceChars(result, '_', '.'))); + } catch (NumberFormatException e) { + Log.e("Error parsing difficulty value", e); + } } // owner @@ -432,10 +430,14 @@ public abstract class GCParser { } // favourite - cache.setFavoritePoints(Integer.parseInt(BaseUtils.getMatch(tableInside, GCConstants.PATTERN_FAVORITECOUNT, true, "0"))); + try { + cache.setFavoritePoints(Integer.parseInt(BaseUtils.getMatch(tableInside, GCConstants.PATTERN_FAVORITECOUNT, true, "0"))); + } catch (NumberFormatException e) { + Log.e("Error parsing favourite count", e); + } // cache size - cache.setSize(CacheSize.getById(BaseUtils.getMatch(tableInside, GCConstants.PATTERN_SIZE, true, CacheSize.NOT_CHOSEN.id).toLowerCase())); + cache.setSize(CacheSize.getById(BaseUtils.getMatch(tableInside, GCConstants.PATTERN_SIZE, true, CacheSize.NOT_CHOSEN.id))); } // cache found @@ -503,7 +505,7 @@ public abstract class GCParser { while (matcherAttributesInside.find()) { if (matcherAttributesInside.groupCount() > 1 && !matcherAttributesInside.group(2).equalsIgnoreCase("blank")) { // by default, use the tooltip of the attribute - String attribute = matcherAttributesInside.group(2).toLowerCase(); + String attribute = matcherAttributesInside.group(2).toLowerCase(Locale.US); // if the image name can be recognized, use the image name as attribute String imageName = matcherAttributesInside.group(1).trim(); @@ -511,7 +513,7 @@ public abstract class GCParser { int start = imageName.lastIndexOf('/'); int end = imageName.lastIndexOf('.'); if (start >= 0 && end >= 0) { - attribute = imageName.substring(start + 1, end).replace('-', '_').toLowerCase(); + attribute = imageName.substring(start + 1, end).replace('-', '_').toLowerCase(Locale.US); } } attributes.add(attribute); @@ -1052,7 +1054,7 @@ public abstract class GCParser { Log.i("Log successfully posted to cache #" + cacheid); if (geocode != null) { - cgeoapplication.getInstance().saveVisitDate(geocode); + cgData.saveVisitDate(geocode); } Login.getLoginStatus(page); @@ -1267,7 +1269,7 @@ public abstract class GCParser { final cgTrackable trackable = new cgTrackable(); // trackable geocode - trackable.setGeocode(BaseUtils.getMatch(page, GCConstants.PATTERN_TRACKABLE_GEOCODE, true, trackable.getGeocode()).toUpperCase()); + trackable.setGeocode(BaseUtils.getMatch(page, GCConstants.PATTERN_TRACKABLE_GEOCODE, true, trackable.getGeocode())); // trackable id trackable.setGuid(BaseUtils.getMatch(page, GCConstants.PATTERN_TRACKABLE_GUID, true, trackable.getGuid())); @@ -1421,7 +1423,7 @@ public abstract class GCParser { } if (cgeoapplication.getInstance() != null) { - cgeoapplication.getInstance().saveTrackable(trackable); + cgData.saveTrackable(trackable); } return trackable; @@ -1560,10 +1562,13 @@ public abstract class GCParser { final Matcher typeMatcher = GCConstants.PATTERN_TYPE2.matcher(typesText); while (typeMatcher.find()) { if (typeMatcher.groupCount() > 1) { - final int type = Integer.parseInt(typeMatcher.group(2)); - - if (type > 0) { - types.add(LogType.getById(type)); + try { + int type = Integer.parseInt(typeMatcher.group(2)); + if (type > 0) { + types.add(LogType.getById(type)); + } + } catch (NumberFormatException e) { + Log.e("Error parsing log types", e); } } } diff --git a/main/src/cgeo/geocaching/connector/gc/IconDecoder.java b/main/src/cgeo/geocaching/connector/gc/IconDecoder.java index 74e78cc..554760c 100644 --- a/main/src/cgeo/geocaching/connector/gc/IconDecoder.java +++ b/main/src/cgeo/geocaching/connector/gc/IconDecoder.java @@ -11,106 +11,193 @@ import android.graphics.Bitmap; */ public abstract class IconDecoder { - public static void parseMapPNG(final cgCache cache, Bitmap bitmap, UTFGridPosition xy, int zoomlevel) { + public static boolean parseMapPNG(final cgCache cache, Bitmap bitmap, UTFGridPosition xy, int zoomlevel) { if (zoomlevel >= 14) { - parseMapPNG14(cache, bitmap, xy); - } else { - parseMapPNG13(cache, bitmap, xy); + return parseMapPNG14(cache, bitmap, xy); } + if (zoomlevel <= 11) { + return parseMapPNG11(cache, bitmap, xy); + } + return parseMapPNG13(cache, bitmap, xy); } - private static final int[] OFFSET_X = new int[] { 0, -1, -1, 0, 1, 1, 1, 0, -1, -2, -2, -2, -2, -1, 0, 1, 2, 2, 2, 2, 2, 1, 0, -1, -2 }; - private static final int[] OFFSET_Y = new int[] { 0, 0, 1, 1, 1, 0, -1, -1, -1, -1, 0, 1, 2, 2, 2, 2, 2, 1, 0, -1, -2, -2, -2, -2, -2 }; + public static int CT_TRADITIONAL = 0; + public static int CT_MULTI = 1; + public static int CT_MYSTERY = 2; + public static int CT_EVENT = 3; + public static int CT_VIRTUAL = 4; + public static int CT_FOUND = 5; + public static int CT_OWN = 6; + public static int CT_MEGAEVENT = 7; + public static int CT_CITO = 8; + public static int CT_WEBCAM = 9; + public static int CT_WHEREIGO = 10; + public static int CT_EARTH = 11; + public static int CT_LETTERBOX = 12; /** - * The icon decoder walks a spiral around the center pixel position of the cache - * and searches for characteristic colors. + * The icon decoder over all 16 pixels of image . It should not be invoked on any part of image that might overlay + * with other caches. + * Is uses decision tree to determine right type. * * @param cache * @param bitmap * @param xy + * @return true if parsing was successful */ - private static void parseMapPNG13(final cgCache cache, Bitmap bitmap, UTFGridPosition xy) { - final int xCenter = xy.getX() * 4 + 2; - final int yCenter = xy.getY() * 4 + 2; + private static boolean parseMapPNG13(final cgCache cache, Bitmap bitmap, UTFGridPosition xy) { + final int topX = xy.getX() * 4; + final int topY = xy.getY() * 4; final int bitmapWidth = bitmap.getWidth(); final int bitmapHeight = bitmap.getHeight(); - int countMulti = 0; - int countFound = 0; + int[] pngType = new int[7]; - for (int i = 0; i < OFFSET_X.length; i++) { + if ((topX < 0) || (topY < 0) || (topX + 4 > bitmapWidth) || (topY + 4 > bitmapHeight)) { + return false; //out of image position + } - // assert that we are still in the tile - final int x = xCenter + OFFSET_X[i]; - if (x < 0 || x >= bitmapWidth) { - continue; - } + for (int x = topX; x < topX + 4; x++) { + for (int y = topY; y < topY + 4; y++) { + int color = bitmap.getPixel(x, y); - final int y = yCenter + OFFSET_Y[i]; - if (y < 0 || y >= bitmapHeight) { - continue; - } + if ((color & 0xFFFFFF) == 0x5f5f5f) { + continue; //Border in every icon is the same and therefore no use to us + } + if ((color >>> 24) != 255) { + continue; //transparent pixels (or semi_transparent) are only shadows of border + } - int color = bitmap.getPixel(x, y) & 0x00FFFFFF; + int red = (color & 0xFF0000) >> 16; + int green = (color & 0xFF00) >> 8; + int blue = color & 0xFF; - // transparent pixels are not interesting - if (color == 0) { - continue; + int type = getCacheTypeFromPixel13(red, green, blue); + pngType[type]++; } + } - int red = (color & 0xFF0000) >> 16; - int green = (color & 0xFF00) >> 8; - int blue = color & 0xFF; + int type = -1; + int count = 0; - // these are quite sure, so one pixel is enough for matching - if (green > 0x80 && green > red && green > blue) { - cache.setType(CacheType.TRADITIONAL); - return; - } - if (blue > 0x80 && blue > red && blue > green) { - cache.setType(CacheType.MYSTERY); - return; - } - if (red > 0x90 && blue < 0x10 && green < 0x10) { - cache.setType(CacheType.EVENT); - return; + for (int x = 0; x < 7; x++) + { + if (pngType[x] > count) { + count = pngType[x]; + type = x; } + } - // next two are hard to distinguish, therefore we sample all pixels of the spiral - if (red > 0xFA && green > 0xD0) { - countMulti++; + if (count > 1) { // 2 pixels need to detect same type and we say good to go + switch (type) { + case 0: + cache.setType(CacheType.TRADITIONAL); + return true; + case 1: + cache.setType(CacheType.MULTI); + return true; + case 2: + cache.setType(CacheType.MYSTERY); //mystery, whereigo, groundspeak HQ and mystery is most common + return true; + case 3: + cache.setType(CacheType.EVENT); //event, cito, mega-event and event is most common + return true; + case 4: + cache.setType(CacheType.EARTH); //It's an image of ghost (webcam, earth, virtual) and earth in most common + return true; + case 5: + cache.setFound(true); + return true; + case 6: + cache.setOwn(true); + return true; } - if (red < 0xF3 && red > 0xa0 && green > 0x20 && blue < 0x80) { - countFound++; + } + return false; + } + + /** + * The icon decoder over all 16 pixels of image . It should not be invoked on any part of image that might overlay + * with other caches. + * Is uses decision tree to determine right type. + * + * @param cache + * @param bitmap + * @param xy + * @return true if parsing was successful + */ + private static boolean parseMapPNG11(final cgCache cache, Bitmap bitmap, UTFGridPosition xy) { + final int topX = xy.getX() * 4; + final int topY = xy.getY() * 4; + final int bitmapWidth = bitmap.getWidth(); + final int bitmapHeight = bitmap.getHeight(); + + int[] pngType = new int[5]; + + if ((topX < 0) || (topY < 0) || (topX + 4 > bitmapWidth) || (topY + 4 > bitmapHeight)) { + return false; //out of image position + } + + for (int x = topX; x < topX + 4; x++) { + for (int y = topY; y < topY + 4; y++) { + int color = bitmap.getPixel(x, y); + + + if ((color >>> 24) != 255) { + continue; //transparent pixels (or semi_transparent) are only shadows of border + } + + int r = (color & 0xFF0000) >> 16; + int g = (color & 0xFF00) >> 8; + int b = color & 0xFF; + + //Duplicate colors does not add any value + if (((r == 52) && (g == 52) && (b == 52)) || + ((r == 69) && (g == 69) && (b == 69)) || + ((r == 90) && (g == 90) && (b == 90)) || + ((r == 233) && (g == 233) && (b == 234)) || + ((r == 255) && (g == 255) && (b == 255))) { + continue; + } + + int type = getCacheTypeFromPixel11(r, g, b); + pngType[type]++; } } - // now check whether we are sure about found/multi - if (countFound > countMulti && countFound >= 2) { - cache.setFound(true); + int type = -1; + int count = 0; + + for (int x = 0; x < 5; x++) + { + if (pngType[x] > count) { + count = pngType[x]; + type = x; + } } - if (countMulti > countFound && countMulti >= 5) { - cache.setType(CacheType.MULTI); + + if (count > 1) { // 2 pixels need to detect same type and we say good to go + switch (type) { + case 0: + cache.setType(CacheType.TRADITIONAL); + return true; + case 1: + cache.setType(CacheType.MULTI); + return true; + case 2: + cache.setType(CacheType.MYSTERY); //mystery, whereigo, groundspeak HQ and mystery is most common + return true; + case 3: + cache.setType(CacheType.EVENT); //event, cito, mega-event and event is most common + return true; + case 4: + cache.setType(CacheType.EARTH); //webcam, earth, virtual and earth in most common + return true; + } } + return false; } - // Pixel colors in tile - private final static int COLOR_BORDER_GRAY = 0x5F5F5F; - private final static int COLOR_TRADITIONAL = 0x316013; - private final static int COLOR_MYSTERY = 0x243C97; - private final static int COLOR_MULTI = 0xFFDE19; - private final static int COLOR_FOUND = 0xFBEA5D; - - // Offset inside cache icon - private final static int POSX_TRADI = 7; - private final static int POSY_TRADI = -12; - private final static int POSX_MULTI = 5; // for orange 8 - private final static int POSY_MULTI = -9; // for orange 10 - private final static int POSX_MYSTERY = 5; - private final static int POSY_MYSTERY = -13; - private final static int POSX_FOUND = 10; - private final static int POSY_FOUND = -8; /** * For level 14 find the borders of the icons and then use a single pixel and color to match. @@ -119,44 +206,377 @@ public abstract class IconDecoder { * @param bitmap * @param xy */ - private static void parseMapPNG14(cgCache cache, Bitmap bitmap, UTFGridPosition xy) { - int x = xy.getX() * 4 + 2; - int y = xy.getY() * 4 + 2; + private static boolean parseMapPNG14(cgCache cache, Bitmap bitmap, UTFGridPosition xy) { + final int topX = xy.getX() * 4; + final int topY = xy.getY() * 4; + final int bitmapWidth = bitmap.getWidth(); + final int bitmapHeight = bitmap.getHeight(); + + int[] pngType = new int[13]; + + if ((topX < 0) || (topY < 0) || (topX + 4 > bitmapWidth) || (topY + 4 > bitmapHeight)) { + return false; //out of image position + } + + for (int x = topX; x < topX + 4; x++) { + for (int y = topY; y < topY + 4; y++) { + int color = bitmap.getPixel(x, y); + + if ((color & 0xFFFFFF) == 0x5f5f5f) { + continue; //Border in every icon is the same and therefore no use to us + } + if ((color >>> 24) != 255) { + continue; //transparent pixels (or semi_transparent) are only shadows of border + } + + int r = (color & 0xFF0000) >> 16; + int g = (color & 0xFF00) >> 8; + int b = color & 0xFF; + + //Duplicate colors does not add any value + if (((r == 216) && (g == 216) && (b == 216)) || + ((r == 23) && (g == 23) && (b == 23)) || + ((r == 240) && (g == 240) && (b == 240)) || + ((r == 44) && (g == 44) && (b == 44)) || + ((r == 228) && (g == 228) && (b == 228)) || + ((r == 225) && (g == 225) && (b == 225)) || + ((r == 199) && (g == 199) && (b == 199)) || + ((r == 161) && (g == 161) && (b == 161)) || + ((r == 8) && (g == 8) && (b == 8)) || + ((r == 200) && (g == 200) && (b == 200)) || + ((r == 255) && (g == 255) && (b == 255)) || + ((r == 250) && (g == 250) && (b == 250)) || + ((r == 95) && (g == 95) && (b == 95)) || + ((r == 236) && (g == 236) && (b == 236)) || + ((r == 215) && (g == 215) && (b == 215)) || + ((r == 232) && (g == 232) && (b == 232)) || + ((r == 217) && (g == 217) && (b == 217)) || + ((r == 0) && (g == 0) && (b == 0)) || + ((r == 167) && (g == 167) && (b == 167)) || + ((r == 247) && (g == 247) && (b == 247)) || + ((r == 144) && (g == 144) && (b == 144)) || + ((r == 231) && (g == 231) && (b == 231)) || + ((r == 248) && (g == 248) && (b == 248))) { + continue; + } - // search for left border - int countX = 0; - while ((bitmap.getPixel(x, y) & 0x00FFFFFF) != COLOR_BORDER_GRAY) { - if (--x < 0 || ++countX > 20) { - return; + int type = getCacheTypeFromPixel14(r, g, b); + pngType[type]++; } } - // search for bottom border - int countY = 0; - while ((bitmap.getPixel(x, y) & 0x00FFFFFF) != 0x000000) { - if (++y >= Tile.TILE_SIZE || ++countY > 20) { - return; + + int type = -1; + int count = 0; + + for (int x = 0; x < 7; x++) + { + if (pngType[x] > count) { + count = pngType[x]; + type = x; + } + } + /* + * public static int CT_MEGAEVENT = 7; + * public static int CT_CITO = 8; + * public static int CT_WEBCAM = 9; + * public static int CT_WHEREIGO = 10; + * public static int CT_EARTH = 11; + * public static int CT_LETTERBOX = 12; + */ + if (count > 1) { // 2 pixels need to detect same type and we say good to go + switch (type) { + case 0: + cache.setType(CacheType.TRADITIONAL); + return true; + case 1: + cache.setType(CacheType.MULTI); + return true; + case 2: + cache.setType(CacheType.MYSTERY); + return true; + case 3: + cache.setType(CacheType.EVENT); + return true; + case 4: + cache.setType(CacheType.VIRTUAL); + return true; + case 5: + cache.setFound(true); + return true; + case 6: + cache.setOwn(true); + return true; + case 7: + cache.setType(CacheType.MEGA_EVENT); + return true; + case 8: + cache.setType(CacheType.CITO); + return true; + case 9: + cache.setType(CacheType.WEBCAM); + return true; + case 10: + cache.setType(CacheType.WHERIGO); + return true; + case 11: + cache.setType(CacheType.EARTH); + return true; + case 12: + cache.setType(CacheType.LETTERBOX); + return true; + } + } + return false; + + } + + /** + * This method returns detected type from specific pixel from geocaching.com live map. + * It was constructed based on classification tree made by Orange (http://orange.biolab.si/) + * Input file was made from every non-transparent pixel of every possible "middle" cache icon from GC map + * + * @param r + * Red component of pixel (from 0 - 255) + * @param g + * Green component of pixel (from 0 - 255) + * @param b + * Blue component of pixel (from 0 - 255) + * @return Value from 0 to 6 representing detected type or state of the cache. + */ + private static int getCacheTypeFromPixel13(int r, int g, int b) { + if (g < 110) { + if (r > 87) { + return ((g > 73) && (b < 63)) ? CT_FOUND : CT_EVENT; + } + return CT_MYSTERY; + } + if (b > 137) { + if ((r < 184) && (g > 190)) { + return CT_TRADITIONAL; + } + if ((r < 184) && (g < 191) && (r < 136)) { + return CT_MYSTERY; } + return CT_VIRTUAL; } + if (r < 158) { + return ((r > 129) && (r < 153)) ? CT_FOUND : CT_TRADITIONAL; + } + if (b > 33) { + if (b > 57) { + if (b > 100) { + return (r > 229) ? CT_MULTI : CT_EVENT; + } + return ((r > 254) && (g < 236)) ? CT_MULTI : CT_FOUND; + } + if ((g > 173) && ((g < 224))) { + return ((r < 243) && (r > 223)) ? CT_FOUND : CT_OWN; + } + return CT_FOUND; + } + return CT_MULTI; + } - try { - if ((bitmap.getPixel(x + POSX_TRADI, y + POSY_TRADI) & 0x00FFFFFF) == COLOR_TRADITIONAL) { - cache.setType(CacheType.TRADITIONAL); - return; + /** + * This method returns detected type from specific pixel from geocaching.com live map level 14 or higher. + * It was constructed based on classification tree made by Orange (http://orange.biolab.si/) + * Input file was made from every non-transparent pixel of every possible "full" cache icon from GC map + * + * @param r + * Red component of pixel (from 0 - 255) + * @param g + * Green component of pixel (from 0 - 255) + * @param b + * Blue component of pixel (from 0 - 255) + * @return Value from 0 to 6 representing detected type or state of the cache. + */ + private static int getCacheTypeFromPixel14(int r, int g, int b) { + if (b < 140) { + if (r > 155) { + if (g < 159) { + if (r < 173) { + return (r > 161) ? CT_MEGAEVENT : CT_OWN; + } + if (r < 206) { + if (b > 49) { + return (b > 83) ? CT_EVENT : CT_FOUND; + } + return (b < 31) ? CT_EARTH : CT_FOUND; + } + return (r < 221) ? CT_FOUND : CT_MULTI; + } + if (r > 210) { + if (g < 188) { + return CT_FOUND; + } + if (r < 246) { + return CT_OWN; + } + if (r < 254) { + return CT_FOUND; + } + if (r < 255) { + return CT_EVENT; + } + if (g < 208) { + return CT_EARTH; + } + if (g > 225) { + return CT_EARTH; + } + return (b < 36) ? CT_MULTI : CT_OWN; + } + return (b < 66) ? CT_OWN : CT_EARTH; + } + if (r < 63) { + if (b > 26) { + if (b < 29) { + return CT_WEBCAM; + } + if (g > 102) { + return CT_CITO; + } + return (r < 26) ? CT_CITO : CT_WEBCAM; + } + if (g < 38) { + return CT_WEBCAM; + } + return (r < 41) ? CT_EARTH : CT_TRADITIONAL; + } + if (b < 119) { + if (g < 81) { + return CT_WEBCAM; + } + if (b < 90) { + return CT_OWN; + } + return (r < 104) ? CT_WEBCAM : CT_OWN; + } + if (r < 132) { + return (b < 124) ? CT_MULTI : CT_WHEREIGO; + } + if (g > 164) { + return CT_TRADITIONAL; + } + if (b < 134) { + return CT_OWN; + } + return (b > 137) ? CT_OWN : CT_WHEREIGO; + } + if (b < 245) { + if (r < 180) { + if (b < 218) { + if (g < 71) { + return CT_MYSTERY; + } + if (r < 96) { + return CT_WHEREIGO; + } + if (b > 165) { + return CT_WHEREIGO; + } + if (r < 153) { + return CT_WHEREIGO; + } + if (r < 160) { + return CT_WEBCAM; + } + return (r < 162) ? CT_WHEREIGO : CT_WEBCAM; + } + return (r < 158) ? CT_MEGAEVENT : CT_EARTH; } - if ((bitmap.getPixel(x + POSX_MYSTERY, y + POSY_MYSTERY) & 0x00FFFFFF) == COLOR_MYSTERY) { - cache.setType(CacheType.MYSTERY); - return; + if (g > 232) { + if (g > 247) { + return CT_CITO; + } + if (r < 237) { + return CT_OWN; + } + if (g < 238) { + return CT_OWN; + } + if (r > 243) { + return CT_WEBCAM; + } + return (g > 238) ? CT_OWN : CT_WEBCAM; } - if ((bitmap.getPixel(x + POSX_MULTI, y + POSY_MULTI) & 0x00FFFFFF) == COLOR_MULTI) { - cache.setType(CacheType.MULTI); - return; + if (r < 228) { + if (b > 238) { + return CT_MYSTERY; + } + if (r < 193) { + if (r < 184) { + return CT_OWN; + } + if (g < 186) { + return CT_WHEREIGO; + } + return (r > 189) ? CT_WHEREIGO : CT_OWN; + } + if (g < 223) { + if (r > 216) { + return CT_OWN; + } + if (g > 217) { + return CT_WHEREIGO; + } + if (b > 211) { + return CT_WEBCAM; + } + if (b < 196) { + return CT_WEBCAM; + } + if (r > 210) { + return CT_OWN; + } + return (g > 206) ? CT_WHEREIGO : CT_OWN; + } + if (g < 224) { + return CT_OWN; + } + return (r < 226) ? CT_WHEREIGO : CT_OWN; } - if ((bitmap.getPixel(x + POSX_FOUND, y + POSY_FOUND) & 0x00FFFFFF) == COLOR_FOUND) { - cache.setFound(true); + return (b < 216) ? CT_FOUND : CT_OWN; + } + if (r < 238) { + if (r > 141) { + return (r > 185) ? CT_LETTERBOX : CT_CITO; } - } catch (IllegalArgumentException e) { - // intentionally left blank + return (r < 41) ? CT_EARTH : CT_LETTERBOX; } + return (r < 243) ? CT_WHEREIGO : CT_OWN; + } + /** + * This method returns detected type from specific pixel from geocaching.com live map level 11 or lower. + * It was constructed based on classification tree made by Orange (http://orange.biolab.si/) + * Input file was made from every non-transparent pixel of every possible "full" cache icon from GC map + * + * @param r + * Red component of pixel (from 0 - 255) + * @param g + * Green component of pixel (from 0 - 255) + * @param b + * Blue component of pixel (from 0 - 255) + * @return Value from 0 to 4 representing detected type or state of the cache. + */ + private static int getCacheTypeFromPixel11(int r, int g, int b) { + if (b < 139) { + if (g > 104) { + if (r < 173) { + return CT_TRADITIONAL; + } + return (r > 225) ? CT_MULTI : CT_EVENT; + } + if (b < 25) { + return CT_EVENT; + } + return (r < 87) ? CT_MYSTERY : CT_EVENT; + } + if (r > 140) { + return (r < 197) ? CT_TRADITIONAL : CT_VIRTUAL; + } + return CT_MYSTERY; } + } diff --git a/main/src/cgeo/geocaching/connector/gc/Tile.java b/main/src/cgeo/geocaching/connector/gc/Tile.java index 5404446..73ded4d 100644 --- a/main/src/cgeo/geocaching/connector/gc/Tile.java +++ b/main/src/cgeo/geocaching/connector/gc/Tile.java @@ -17,6 +17,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; +import java.util.Locale; import java.util.Set; /** @@ -99,7 +100,7 @@ public class Tile { /** * Calculate latitude/longitude for a given x/y position in this tile. - * + * * @see <a * href="http://developers.cloudmade.com/projects/tiles/examples/convert-coordinates-to-tile-numbers">Cloudmade</a> */ @@ -115,7 +116,7 @@ public class Tile { @Override public String toString() { - return String.format("(%d/%d), zoom=%d", tileX, tileY, zoomlevel); + return String.format(Locale.US, "(%d/%d), zoom=%d", tileX, tileY, zoomlevel); } /** diff --git a/main/src/cgeo/geocaching/connector/oc/OCConnector.java b/main/src/cgeo/geocaching/connector/oc/OCConnector.java index 34bf019..c098d12 100644 --- a/main/src/cgeo/geocaching/connector/oc/OCConnector.java +++ b/main/src/cgeo/geocaching/connector/oc/OCConnector.java @@ -33,7 +33,7 @@ public class OCConnector extends AbstractConnector { @Override public String getCacheUrl(cgCache cache) { - return "http://" + host + "/viewcache.php?wp=" + cache.getGeocode(); + return getCacheUrlPrefix() + cache.getGeocode(); } @Override @@ -45,4 +45,10 @@ public class OCConnector extends AbstractConnector { public boolean isZippedGPXFile(String fileName) { return gpxZipFilePattern.matcher(fileName).matches(); } + + @Override + protected String getCacheUrlPrefix() { + return "http://" + host + "/viewcache.php?wp="; + } + } diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java index 87cc3a1..b135877 100644 --- a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java +++ b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java @@ -2,8 +2,8 @@ package cgeo.geocaching.connector.oc; import cgeo.geocaching.LogEntry; import cgeo.geocaching.cgCache; +import cgeo.geocaching.cgData; import cgeo.geocaching.cgImage; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.enumerations.CacheSize; @@ -171,9 +171,8 @@ final public class OkapiClient { cache.setUpdated(System.currentTimeMillis()); cache.setDetailedUpdate(cache.getUpdated()); cache.setDetailed(true); - // save full detailed caches - cgeoapplication.getInstance().saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); + cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); } catch (JSONException e) { Log.e("OkapiClient.parseCache", e); } diff --git a/main/src/cgeo/geocaching/connector/ox/OXConnector.java b/main/src/cgeo/geocaching/connector/ox/OXConnector.java index 38bb496..98b1656 100644 --- a/main/src/cgeo/geocaching/connector/ox/OXConnector.java +++ b/main/src/cgeo/geocaching/connector/ox/OXConnector.java @@ -27,7 +27,7 @@ public class OXConnector extends AbstractConnector implements ISearchByCenter, I @Override public String getCacheUrl(cgCache cache) { - return "http://www.opencaching.com/#!geocache/" + cache.getGeocode(); + return getCacheUrlPrefix() + cache.getGeocode(); } @Override @@ -64,4 +64,9 @@ public class OXConnector extends AbstractConnector implements ISearchByCenter, I } return new SearchResult(caches); } + + @Override + protected String getCacheUrlPrefix() { + return "http://www.opencaching.com/#!geocache/"; + } } diff --git a/main/src/cgeo/geocaching/enumerations/CacheAttribute.java b/main/src/cgeo/geocaching/enumerations/CacheAttribute.java index a31b0cc..e29e176 100644 --- a/main/src/cgeo/geocaching/enumerations/CacheAttribute.java +++ b/main/src/cgeo/geocaching/enumerations/CacheAttribute.java @@ -110,15 +110,6 @@ public enum CacheAttribute { FIND_BY_GCRAWNAME = Collections.unmodifiableMap(mapGcRawNames); } - public static CacheAttribute getById(final int id) { - for (CacheAttribute attr : values()) { - if (attr.id == id) { - return attr; - } - } - return UNKNOWN; - } - public static CacheAttribute getByGcRawName(final String gcRawName) { final CacheAttribute result = gcRawName != null ? FIND_BY_GCRAWNAME.get(gcRawName) : null; if (result == null) { diff --git a/main/src/cgeo/geocaching/enumerations/CacheSize.java b/main/src/cgeo/geocaching/enumerations/CacheSize.java index 155c9a5..a686dd6 100644 --- a/main/src/cgeo/geocaching/enumerations/CacheSize.java +++ b/main/src/cgeo/geocaching/enumerations/CacheSize.java @@ -5,6 +5,7 @@ import cgeo.geocaching.cgeoapplication; import java.util.Collections; import java.util.HashMap; +import java.util.Locale; import java.util.Map; /** @@ -34,7 +35,7 @@ public enum CacheSize { static { final HashMap<String, CacheSize> mapping = new HashMap<String, CacheSize>(); for (CacheSize cs : values()) { - mapping.put(cs.id.toLowerCase(), cs); + mapping.put(cs.id.toLowerCase(Locale.US), cs); } // add medium as additional string for Regular mapping.put("medium", CacheSize.REGULAR); @@ -51,7 +52,7 @@ public enum CacheSize { return result; } // only if String was not found, normalize it - final CacheSize resultNormalized = CacheSize.FIND_BY_ID.get(id.toLowerCase().trim()); + final CacheSize resultNormalized = CacheSize.FIND_BY_ID.get(id.toLowerCase(Locale.US).trim()); if (resultNormalized != null) { return resultNormalized; } diff --git a/main/src/cgeo/geocaching/enumerations/CacheType.java b/main/src/cgeo/geocaching/enumerations/CacheType.java index 730c989..251790f 100644 --- a/main/src/cgeo/geocaching/enumerations/CacheType.java +++ b/main/src/cgeo/geocaching/enumerations/CacheType.java @@ -5,6 +5,7 @@ import cgeo.geocaching.cgeoapplication; import java.util.Collections; import java.util.HashMap; +import java.util.Locale; import java.util.Map; /** @@ -59,14 +60,14 @@ public enum CacheType { final HashMap<String, CacheType> mappingPattern = new HashMap<String, CacheType>(); for (CacheType ct : values()) { mappingId.put(ct.id, ct); - mappingPattern.put(ct.pattern.toLowerCase(), ct); + mappingPattern.put(ct.pattern.toLowerCase(Locale.US), ct); } FIND_BY_ID = Collections.unmodifiableMap(mappingId); FIND_BY_PATTERN = Collections.unmodifiableMap(mappingPattern); } public static CacheType getById(final String id) { - final CacheType result = (id != null) ? CacheType.FIND_BY_ID.get(id.toLowerCase().trim()) : null; + final CacheType result = (id != null) ? CacheType.FIND_BY_ID.get(id.toLowerCase(Locale.US).trim()) : null; if (result == null) { return UNKNOWN; } @@ -74,7 +75,7 @@ public enum CacheType { } public static CacheType getByPattern(final String pattern) { - final CacheType result = (pattern != null) ? CacheType.FIND_BY_PATTERN.get(pattern.toLowerCase().trim()) : null; + final CacheType result = (pattern != null) ? CacheType.FIND_BY_PATTERN.get(pattern.toLowerCase(Locale.US).trim()) : null; if (result == null) { return UNKNOWN; } diff --git a/main/src/cgeo/geocaching/enumerations/LogType.java b/main/src/cgeo/geocaching/enumerations/LogType.java index 332ef03..9c9fd84 100644 --- a/main/src/cgeo/geocaching/enumerations/LogType.java +++ b/main/src/cgeo/geocaching/enumerations/LogType.java @@ -5,6 +5,7 @@ import cgeo.geocaching.cgeoapplication; import java.util.Collections; import java.util.HashMap; +import java.util.Locale; import java.util.Map; @@ -14,43 +15,49 @@ import java.util.Map; */ public enum LogType { - FOUND_IT(2, "2", "found it", R.string.log_found), - DIDNT_FIND_IT(3, "3", "didn't find it", R.string.log_dnf), + FOUND_IT(2, "2", "found it", R.string.log_found, R.drawable.mark_green), + DIDNT_FIND_IT(3, "3", "didn't find it", R.string.log_dnf, R.drawable.mark_red), NOTE(4, "4", "write note", R.string.log_note), - PUBLISH_LISTING(1003, "24", "publish listing", R.string.log_published), - ENABLE_LISTING(23, "23", "enable listing", R.string.log_enabled), - ARCHIVE(5, "5", "archive", R.string.log_archived), - UNARCHIVE(12, "12", "unarchive", R.string.log_unarchived), - TEMP_DISABLE_LISTING(22, "22", "temporarily disable listing", R.string.log_disabled), - NEEDS_ARCHIVE(7, "7", "needs archived", R.string.log_needs_archived), + PUBLISH_LISTING(1003, "24", "publish listing", R.string.log_published, R.drawable.mark_green_more), + ENABLE_LISTING(23, "23", "enable listing", R.string.log_enabled, R.drawable.mark_green_more), + ARCHIVE(5, "5", "archive", R.string.log_archived, R.drawable.mark_red_more), + UNARCHIVE(12, "12", "unarchive", R.string.log_unarchived, R.drawable.mark_green_more), + TEMP_DISABLE_LISTING(22, "22", "temporarily disable listing", R.string.log_disabled, R.drawable.mark_red_more), + NEEDS_ARCHIVE(7, "7", "needs archived", R.string.log_needs_archived, R.drawable.mark_red), WILL_ATTEND(9, "9", "will attend", R.string.log_attend), - ATTENDED(10, "10", "attended", R.string.log_attended), - RETRIEVED_IT(13, "13", "retrieved it", R.string.log_retrieved), + ATTENDED(10, "10", "attended", R.string.log_attended, R.drawable.mark_green), + RETRIEVED_IT(13, "13", "retrieved it", R.string.log_retrieved, R.drawable.mark_green), PLACED_IT(14, "14", "placed it", R.string.log_placed), - GRABBED_IT(19, "19", "grabbed it", R.string.log_grabbed), - NEEDS_MAINTENANCE(45, "45", "needs maintenance", R.string.log_maintenance_needed), - OWNER_MAINTENANCE(46, "46", "owner maintenance", R.string.log_maintained), + GRABBED_IT(19, "19", "grabbed it", R.string.log_grabbed, R.drawable.mark_green), + NEEDS_MAINTENANCE(45, "45", "needs maintenance", R.string.log_maintenance_needed, R.drawable.mark_red), + OWNER_MAINTENANCE(46, "46", "owner maintenance", R.string.log_maintained, R.drawable.mark_green_more), UPDATE_COORDINATES(47, "47", "update coordinates", R.string.log_update), - DISCOVERED_IT(48, "48", "discovered it", R.string.log_discovered), + DISCOVERED_IT(48, "48", "discovered it", R.string.log_discovered, R.drawable.mark_green), POST_REVIEWER_NOTE(18, "68", "post reviewer note", R.string.log_reviewer), - VISIT(1001, "75", "visit", R.string.log_tb_visit), - WEBCAM_PHOTO_TAKEN(11, "11", "webcam photo taken", R.string.log_webcam), + VISIT(1001, "75", "visit", R.string.log_tb_visit, R.drawable.mark_green), + WEBCAM_PHOTO_TAKEN(11, "11", "webcam photo taken", R.string.log_webcam, R.drawable.mark_green), ANNOUNCEMENT(74, "74", "announcement", R.string.log_announcement), MOVE_COLLECTION(69, "69", "unused_collection", R.string.log_movecollection), MOVE_INVENTORY(70, "70", "unused_inventory", R.string.log_moveinventory), RETRACT(25, "25", "retract listing", R.string.log_retractlisting), - UNKNOWN(0, "unknown", "", R.string.err_unknown); // LogType not init. yet + UNKNOWN(0, "unknown", "", R.string.err_unknown, R.drawable.mark_red); // LogType not init. yet public final int id; public final String iconName; public final String type; private final int stringId; + public final int markerId; - private LogType(int id, String iconName, String type, int stringId) { + private LogType(int id, String iconName, String type, int stringId, int markerId) { this.id = id; this.iconName = iconName; this.type = type; this.stringId = stringId; + this.markerId = markerId; + } + + private LogType(int id, String iconName, String type, int stringId) { + this(id, iconName, type, stringId, R.drawable.mark_gray); } private final static Map<String, LogType> FIND_BY_ICONNAME; @@ -76,7 +83,7 @@ public enum LogType { } public static LogType getByIconName(final String imageType) { - final LogType result = imageType != null ? LogType.FIND_BY_ICONNAME.get(imageType.toLowerCase().trim()) : null; + final LogType result = imageType != null ? LogType.FIND_BY_ICONNAME.get(imageType.toLowerCase(Locale.US).trim()) : null; if (result == null) { return UNKNOWN; } @@ -84,7 +91,7 @@ public enum LogType { } public static LogType getByType(final String type) { - final LogType result = type != null ? LogType.FIND_BY_TYPE.get(type.toLowerCase().trim()) : null; + final LogType result = type != null ? LogType.FIND_BY_TYPE.get(type.toLowerCase(Locale.US).trim()) : null; if (result == null) { return UNKNOWN; } diff --git a/main/src/cgeo/geocaching/export/FieldnoteExport.java b/main/src/cgeo/geocaching/export/FieldnoteExport.java index 11214db..cbb4762 100644 --- a/main/src/cgeo/geocaching/export/FieldnoteExport.java +++ b/main/src/cgeo/geocaching/export/FieldnoteExport.java @@ -3,7 +3,7 @@ package cgeo.geocaching.export; import cgeo.geocaching.LogEntry; import cgeo.geocaching.R; import cgeo.geocaching.cgCache; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.cgData; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.activity.Progress; import cgeo.geocaching.connector.gc.Login; @@ -31,6 +31,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Locale; +import java.util.TimeZone; /** * Exports offline-logs in the Groundspeak Field Note format.<br> @@ -42,6 +43,9 @@ import java.util.Locale; class FieldnoteExport extends AbstractExport { private static final File exportLocation = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/field-notes"); private static final SimpleDateFormat fieldNoteDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US); + static { + fieldNoteDateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); + } protected FieldnoteExport() { super(getString(R.string.export_fieldnotes)); @@ -135,13 +139,11 @@ class FieldnoteExport extends AbstractExport { @Override protected Boolean doInBackground(Void... params) { final StringBuilder fieldNoteBuffer = new StringBuilder(); - final cgeoapplication app = cgeoapplication.getInstance(); - try { int i = 0; for (cgCache cache : caches) { if (cache.isLogOffline()) { - appendFieldNote(fieldNoteBuffer, cache, app.loadLogOffline(cache.getGeocode())); + appendFieldNote(fieldNoteBuffer, cache, cgData.loadLogOffline(cache.getGeocode())); publishProgress(++i); } } diff --git a/main/src/cgeo/geocaching/export/GpxExport.java b/main/src/cgeo/geocaching/export/GpxExport.java index 7573db9..b1834b9 100644 --- a/main/src/cgeo/geocaching/export/GpxExport.java +++ b/main/src/cgeo/geocaching/export/GpxExport.java @@ -4,8 +4,8 @@ import cgeo.geocaching.LogEntry; import cgeo.geocaching.R; import cgeo.geocaching.Settings; import cgeo.geocaching.cgCache; +import cgeo.geocaching.cgData; import cgeo.geocaching.cgWaypoint; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.activity.Progress; import cgeo.geocaching.enumerations.CacheAttribute; @@ -143,8 +143,7 @@ class GpxExport extends AbstractExport { gpx.write("<gpx version=\"1.0\" creator=\"c:geo - http://www.cgeo.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://www.topografix.com/GPX/1/0\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd http://www.groundspeak.com/cache/1/0/1 http://www.groundspeak.com/cache/1/0/1/cache.xsd\">"); for (int i = 0; i < caches.size(); i++) { - // reload the cache. otherwise logs, attributes and other detailed information is not available - final cgCache cache = cgeoapplication.getInstance().loadCache(caches.get(i).getGeocode(), LoadFlags.LOAD_ALL_DB_ONLY); + final cgCache cache = cgData.loadCache(caches.get(i).getGeocode(), LoadFlags.LOAD_ALL_DB_ONLY); gpx.write("<wpt "); gpx.write("lat=\""); diff --git a/main/src/cgeo/geocaching/files/GPXImporter.java b/main/src/cgeo/geocaching/files/GPXImporter.java index fb78360..d8d0c24 100644 --- a/main/src/cgeo/geocaching/files/GPXImporter.java +++ b/main/src/cgeo/geocaching/files/GPXImporter.java @@ -5,7 +5,7 @@ import cgeo.geocaching.SearchResult; import cgeo.geocaching.Settings;
import cgeo.geocaching.StaticMapsProvider;
import cgeo.geocaching.cgCache;
-import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.cgData;
import cgeo.geocaching.activity.IAbstractActivity;
import cgeo.geocaching.activity.Progress;
import cgeo.geocaching.enumerations.LoadFlags;
@@ -171,10 +171,9 @@ public class GPXImporter { protected abstract Collection<cgCache> doImport() throws IOException, ParserException;
private boolean importStaticMaps(final SearchResult importedCaches) {
- final cgeoapplication app = cgeoapplication.getInstance();
int storedCacheMaps = 0;
for (String geocode : importedCaches.getGeocodes()) {
- cgCache cache = app.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS);
+ cgCache cache = cgData.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS);
Log.d("GPXImporter.ImportThread.importStaticMaps start downloadMaps for cache " + geocode);
StaticMapsProvider.downloadMaps(cache);
storedCacheMaps++;
diff --git a/main/src/cgeo/geocaching/files/GPXParser.java b/main/src/cgeo/geocaching/files/GPXParser.java index b9d3f53..2443b90 100644 --- a/main/src/cgeo/geocaching/files/GPXParser.java +++ b/main/src/cgeo/geocaching/files/GPXParser.java @@ -4,6 +4,7 @@ import cgeo.geocaching.LogEntry; import cgeo.geocaching.R; import cgeo.geocaching.StoredList; import cgeo.geocaching.cgCache; +import cgeo.geocaching.cgData; import cgeo.geocaching.cgTrackable; import cgeo.geocaching.cgWaypoint; import cgeo.geocaching.cgeoapplication; @@ -287,7 +288,7 @@ public abstract class GPXParser extends FileParser { // take the name as code, if nothing else is available if (StringUtils.isBlank(cache.getGeocode())) { if (StringUtils.isNotBlank(name)) { - cache.setGeocode(name.trim().toUpperCase()); + cache.setGeocode(name.trim()); } } @@ -311,8 +312,8 @@ public abstract class GPXParser extends FileParser { // finally store the cache in the database result.add(geocode); - cgeoapplication.getInstance().saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); - cgeoapplication.getInstance().removeAllFromCache(); + cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); + cgData.removeAllFromCache(); showProgressMessage(progressHandler, progressStream.getProgress()); } else if (StringUtils.isNotBlank(cache.getName()) && StringUtils.containsIgnoreCase(type, "waypoint")) { @@ -326,10 +327,9 @@ public abstract class GPXParser extends FileParser { fixCache(cache); if (cache.getName().length() > 2) { - final String cacheGeocodeForWaypoint = "GC" + cache.getName().substring(2).toUpperCase(); - + final String cacheGeocodeForWaypoint = "GC" + cache.getName().substring(2).toUpperCase(Locale.US); // lookup cache for waypoint in already parsed caches - final cgCache cacheForWaypoint = cgeoapplication.getInstance().loadCache(cacheGeocodeForWaypoint, LoadFlags.LOAD_CACHE_OR_DB); + final cgCache cacheForWaypoint = cgData.loadCache(cacheGeocodeForWaypoint, LoadFlags.LOAD_CACHE_OR_DB); if (cacheForWaypoint != null) { final cgWaypoint waypoint = new cgWaypoint(cache.getShortdesc(), convertWaypointSym2Type(sym), false); waypoint.setId(-1); @@ -347,7 +347,7 @@ public abstract class GPXParser extends FileParser { newPoints.add(waypoint); cgWaypoint.mergeWayPoints(newPoints, mergedWayPoints, true); cacheForWaypoint.setWaypoints(newPoints, false); - cgeoapplication.getInstance().saveCache(cacheForWaypoint, EnumSet.of(SaveFlag.SAVE_DB)); + cgData.saveCache(cacheForWaypoint, EnumSet.of(SaveFlag.SAVE_DB)); showProgressMessage(progressHandler, progressStream.getProgress()); } } @@ -410,7 +410,7 @@ public abstract class GPXParser extends FileParser { public void end(String body) { final String[] content = body.split("\\|"); if (content.length > 0) { - type = content[0].toLowerCase().trim(); + type = content[0].toLowerCase(Locale.US).trim(); } } }); @@ -420,7 +420,7 @@ public abstract class GPXParser extends FileParser { @Override public void end(final String body) { - sym = body.toLowerCase(); + sym = body.toLowerCase(Locale.US); if (sym.contains("geocache") && sym.contains("found")) { cache.setFound(true); } @@ -526,7 +526,7 @@ public abstract class GPXParser extends FileParser { @Override public void end(String body) { - cache.setType(CacheType.getByPattern(validate(body.toLowerCase()))); + cache.setType(CacheType.getByPattern(validate(body))); } }); @@ -535,7 +535,7 @@ public abstract class GPXParser extends FileParser { @Override public void end(String body) { - cache.setSize(CacheSize.getById(validate(body.toLowerCase()))); + cache.setSize(CacheSize.getById(validate(body))); } }); @@ -665,7 +665,7 @@ public abstract class GPXParser extends FileParser { try { if (attrs.getIndex("ref") > -1) { - trackable.setGeocode(attrs.getValue("ref").toUpperCase()); + trackable.setGeocode(attrs.getValue("ref")); } } catch (Exception e) { // nothing @@ -745,7 +745,7 @@ public abstract class GPXParser extends FileParser { @Override public void end(String body) { - final String logType = validate(body).toLowerCase(); + final String logType = validate(body); log.type = LogType.getByType(logType); } }); @@ -772,7 +772,7 @@ public abstract class GPXParser extends FileParser { try { progressStream = new ProgressInputStream(stream); Xml.parse(progressStream, Xml.Encoding.UTF_8, root.getContentHandler()); - return cgeoapplication.getInstance().loadCaches(result, EnumSet.of(LoadFlag.LOAD_DB_MINIMAL)); + return cgData.loadCaches(result, EnumSet.of(LoadFlag.LOAD_DB_MINIMAL)); } catch (SAXException e) { Log.e("Cannot parse .gpx file as GPX " + version + ": could not parse XML - " + e.toString()); throw new ParserException("Cannot parse .gpx file as GPX " + version + ": could not parse XML", e); @@ -806,13 +806,17 @@ public abstract class GPXParser extends FileParser { static WaypointType convertWaypointSym2Type(final String sym) { if ("parking area".equalsIgnoreCase(sym)) { return WaypointType.PARKING; - } else if ("stages of a multicache".equalsIgnoreCase(sym)) { + } + if ("stages of a multicache".equalsIgnoreCase(sym)) { return WaypointType.STAGE; - } else if ("question to answer".equalsIgnoreCase(sym)) { + } + if ("question to answer".equalsIgnoreCase(sym)) { return WaypointType.PUZZLE; - } else if ("trailhead".equalsIgnoreCase(sym)) { + } + if ("trailhead".equalsIgnoreCase(sym)) { return WaypointType.TRAILHEAD; - } else if ("final location".equalsIgnoreCase(sym)) { + } + if ("final location".equalsIgnoreCase(sym)) { return WaypointType.FINAL; } // this is not fully correct, but lets also look for localized waypoint types diff --git a/main/src/cgeo/geocaching/files/LocParser.java b/main/src/cgeo/geocaching/files/LocParser.java index b17b203..982ef4c 100644 --- a/main/src/cgeo/geocaching/files/LocParser.java +++ b/main/src/cgeo/geocaching/files/LocParser.java @@ -2,7 +2,7 @@ package cgeo.geocaching.files; import cgeo.geocaching.SearchResult; import cgeo.geocaching.cgCache; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.cgData; import cgeo.geocaching.enumerations.CacheSize; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.enumerations.LoadFlags; @@ -65,7 +65,7 @@ public final class LocParser extends FileParser { contained.add(geocode); } } - Set<cgCache> caches = cgeoapplication.getInstance().loadCaches(contained, LoadFlags.LOAD_CACHE_OR_DB); + Set<cgCache> caches = cgData.loadCaches(contained, LoadFlags.LOAD_CACHE_OR_DB); for (cgCache cache : caches) { cgCache coord = cidCoords.get(cache.getGeocode()); copyCoordToCache(coord, cache); @@ -77,7 +77,7 @@ public final class LocParser extends FileParser { cache.setDifficulty(coord.getDifficulty()); cache.setTerrain(coord.getTerrain()); cache.setSize(coord.getSize()); - cache.setGeocode(coord.getGeocode().toUpperCase()); + cache.setGeocode(coord.getGeocode()); cache.setReliableLatLon(true); if (StringUtils.isBlank(cache.getName())) { cache.setName(coord.getName()); @@ -149,8 +149,7 @@ public final class LocParser extends FileParser { final cgCache cache = new cgCache(); final Matcher matcherGeocode = patternGeocode.matcher(pointString); if (matcherGeocode.find()) { - final String geocode = matcherGeocode.group(1).trim().toUpperCase(); - cache.setGeocode(geocode.toUpperCase()); + cache.setGeocode(matcherGeocode.group(1).trim()); } final Matcher matcherName = patternName.matcher(pointString); diff --git a/main/src/cgeo/geocaching/files/ParserException.java b/main/src/cgeo/geocaching/files/ParserException.java index 5aa152c..c0076cc 100644 --- a/main/src/cgeo/geocaching/files/ParserException.java +++ b/main/src/cgeo/geocaching/files/ParserException.java @@ -13,10 +13,6 @@ public class ParserException extends Exception { super(detailMessage); } - public ParserException(Throwable throwable) { - super(throwable); - } - public ParserException(String detailMessage, Throwable throwable) { super(detailMessage, throwable); } diff --git a/main/src/cgeo/geocaching/files/SimpleDirChooser.java b/main/src/cgeo/geocaching/files/SimpleDirChooser.java index 346780d..9e99aec 100644 --- a/main/src/cgeo/geocaching/files/SimpleDirChooser.java +++ b/main/src/cgeo/geocaching/files/SimpleDirChooser.java @@ -18,7 +18,6 @@ import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; -import android.widget.ListView; import android.widget.TextView; import java.io.File; @@ -43,7 +42,10 @@ public class SimpleDirChooser extends ListActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Bundle extras = getIntent().getExtras(); - String startDir = extras.getString(START_DIR); + String startDir = ""; + if (extras != null) { + startDir = extras.getString(START_DIR); + } if (StringUtils.isBlank(startDir)) { startDir = Environment.getExternalStorageDirectory().getPath(); } else { @@ -101,11 +103,6 @@ public class SimpleDirChooser extends ListActivity { this.setListAdapter(adapter); } - @Override - protected void onListItemClick(ListView l, View v, int position, long id) { - super.onListItemClick(l, v, position, id); - } - public class FileArrayAdapter extends ArrayAdapter<Option> { private Context content; @@ -200,7 +197,7 @@ public class SimpleDirChooser extends ListActivity { } } - public class Option implements Comparable<Option> { + public static class Option implements Comparable<Option> { private final String name; private final String path; private boolean checked = false; diff --git a/main/src/cgeo/geocaching/filter/AttributeFilter.java b/main/src/cgeo/geocaching/filter/AttributeFilter.java index 2565178..837e9d1 100644 --- a/main/src/cgeo/geocaching/filter/AttributeFilter.java +++ b/main/src/cgeo/geocaching/filter/AttributeFilter.java @@ -2,6 +2,7 @@ package cgeo.geocaching.filter; import cgeo.geocaching.R; import cgeo.geocaching.cgCache; +import cgeo.geocaching.cgData; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.enumerations.LoadFlags.LoadFlag; @@ -34,7 +35,7 @@ class AttributeFilter extends AbstractFilter { @Override public boolean accepts(final cgCache cache) { - cgCache fullCache = cgeoapplication.getInstance().loadCache(cache.getGeocode(), EnumSet.of(LoadFlag.LOAD_ATTRIBUTES)); + cgCache fullCache = cgData.loadCache(cache.getGeocode(), EnumSet.of(LoadFlag.LOAD_ATTRIBUTES)); if (fullCache == null) { fullCache = cache; } diff --git a/main/src/cgeo/geocaching/filter/FilterUserInterface.java b/main/src/cgeo/geocaching/filter/FilterUserInterface.java index 230bc91..e2472fd 100644 --- a/main/src/cgeo/geocaching/filter/FilterUserInterface.java +++ b/main/src/cgeo/geocaching/filter/FilterUserInterface.java @@ -73,7 +73,7 @@ public final class FilterUserInterface { public void selectFilter(final RunnableWithArgument<IFilter> runAfterwards) { final AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle(R.string.caches_filter); + builder.setTitle(R.string.caches_filter_title); final ArrayAdapter<FactoryEntry> adapter = new ArrayAdapter<FactoryEntry>(activity, android.R.layout.select_dialog_item, registry); diff --git a/main/src/cgeo/geocaching/geopoint/DistanceParser.java b/main/src/cgeo/geocaching/geopoint/DistanceParser.java index 5f02895..61d1ecd 100644 --- a/main/src/cgeo/geocaching/geopoint/DistanceParser.java +++ b/main/src/cgeo/geocaching/geopoint/DistanceParser.java @@ -1,5 +1,6 @@ package cgeo.geocaching.geopoint; +import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -26,7 +27,7 @@ public final class DistanceParser { } final float value = Float.parseFloat(matcher.group(1).replace(',', '.')); - final String unit = matcher.group(2).toLowerCase(); + final String unit = matcher.group(2).toLowerCase(Locale.US); if (unit.equals("m") || (unit.length() == 0 && metricUnit)) { return value / 1000; diff --git a/main/src/cgeo/geocaching/geopoint/GeopointFormatter.java b/main/src/cgeo/geocaching/geopoint/GeopointFormatter.java index c706e77..892335c 100644 --- a/main/src/cgeo/geocaching/geopoint/GeopointFormatter.java +++ b/main/src/cgeo/geocaching/geopoint/GeopointFormatter.java @@ -61,13 +61,13 @@ public class GeopointFormatter switch (format) { case LAT_LON_DECDEGREE: - return String.format("%.6f %.6f", latSigned, lonSigned); + return String.format(Locale.getDefault(), "%.6f %.6f", latSigned, lonSigned); case LAT_LON_DECDEGREE_COMMA: return String.format((Locale) null, "%.6f,%.6f", latSigned, lonSigned); case LAT_LON_DECMINUTE: - return String.format("%c %02d° %06.3f · %c %03d° %06.3f", + return String.format(Locale.getDefault(), "%c %02d° %06.3f · %c %03d° %06.3f", gp.getLatDir(), gp.getLatDeg(), gp.getLatMinRaw(), gp.getLonDir(), gp.getLonDeg(), gp.getLonMinRaw()); case LAT_LON_DECMINUTE_RAW: @@ -75,7 +75,7 @@ public class GeopointFormatter gp.getLatDir(), gp.getLatDeg(), gp.getLatMinRaw(), gp.getLonDir(), gp.getLonDeg(), gp.getLonMinRaw()); case LAT_LON_DECSECOND: - return String.format("%c %02d° %02d' %06.3f\" · %c %03d° %02d' %06.3f\"", + return String.format(Locale.getDefault(), "%c %02d° %02d' %06.3f\" · %c %03d° %02d' %06.3f\"", gp.getLatDir(), gp.getLatDeg(), gp.getLatMin(), gp.getLatSecRaw(), gp.getLonDir(), gp.getLonDeg(), gp.getLonMin(), gp.getLonSecRaw()); @@ -83,19 +83,19 @@ public class GeopointFormatter return String.format((Locale) null, "%.6f", latSigned); case LAT_DECMINUTE: - return String.format("%c %02d° %06.3f", gp.getLatDir(), gp.getLatDeg(), gp.getLatMinRaw()); + return String.format(Locale.getDefault(), "%c %02d° %06.3f", gp.getLatDir(), gp.getLatDeg(), gp.getLatMinRaw()); case LAT_DECMINUTE_RAW: - return String.format("%c %02d %06.3f", gp.getLatDir(), gp.getLatDeg(), gp.getLatMinRaw()); + return String.format(Locale.getDefault(), "%c %02d %06.3f", gp.getLatDir(), gp.getLatDeg(), gp.getLatMinRaw()); case LON_DECDEGREE_RAW: return String.format((Locale) null, "%.6f", lonSigned); case LON_DECMINUTE: - return String.format("%c %03d° %06.3f", gp.getLonDir(), gp.getLonDeg(), gp.getLonMinRaw()); + return String.format(Locale.getDefault(), "%c %03d° %06.3f", gp.getLonDir(), gp.getLonDeg(), gp.getLonMinRaw()); case LON_DECMINUTE_RAW: - return String.format("%c %03d %06.3f", gp.getLonDir(), gp.getLonDeg(), gp.getLonMinRaw()); + return String.format(Locale.getDefault(), "%c %03d %06.3f", gp.getLonDir(), gp.getLonDeg(), gp.getLonMinRaw()); } // Keep the compiler happy even though it cannot happen diff --git a/main/src/cgeo/geocaching/geopoint/Viewport.java b/main/src/cgeo/geocaching/geopoint/Viewport.java index 97ee21d..4aca538 100644 --- a/main/src/cgeo/geocaching/geopoint/Viewport.java +++ b/main/src/cgeo/geocaching/geopoint/Viewport.java @@ -164,7 +164,10 @@ public class Viewport { @Override public boolean equals(final Object other) { - if (other == null || !(other instanceof Viewport)) { + if (this == other) { + return true; + } + if (!(other instanceof Viewport)) { return false; } final Viewport vp = (Viewport) other; diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java index 6856a63..8156309 100644 --- a/main/src/cgeo/geocaching/maps/CGeoMap.java +++ b/main/src/cgeo/geocaching/maps/CGeoMap.java @@ -9,6 +9,7 @@ import cgeo.geocaching.SearchResult; import cgeo.geocaching.Settings; import cgeo.geocaching.StoredList; import cgeo.geocaching.cgCache; +import cgeo.geocaching.cgData; import cgeo.geocaching.cgWaypoint; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.cgeocaches; @@ -368,7 +369,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto activity = this.getActivity(); app = (cgeoapplication) activity.getApplication(); - int countBubbleCnt = app.getAllStoredCachesCount(true, CacheType.ALL); + int countBubbleCnt = cgData.getAllCachesCount(); caches = new LeastRecentlyUsedSet<cgCache>(MAX_CACHES + countBubbleCnt); final MapProvider mapProvider = Settings.getMapProvider(); @@ -494,7 +495,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto if (!CollectionUtils.isEmpty(dirtyCaches)) { for (String geocode : dirtyCaches) { - cgCache cache = app.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS); + cgCache cache = cgData.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS); // remove to update the cache caches.remove(cache); caches.add(cache); @@ -594,7 +595,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto } final Set<String> geocodesInViewport = getGeocodesForCachesInViewport(); - menu.findItem(MENU_STORE_CACHES).setEnabled(!isLoading() && CollectionUtils.isNotEmpty(geocodesInViewport) && app.hasUnsavedCaches(new SearchResult(geocodesInViewport))); + menu.findItem(MENU_STORE_CACHES).setEnabled(!isLoading() && CollectionUtils.isNotEmpty(geocodesInViewport) && new SearchResult(geocodesInViewport).hasUnsavedCaches()); item = menu.findItem(MENU_CIRCLE_MODE); // show circles if (overlayCaches != null && overlayCaches.getCircles()) { @@ -640,7 +641,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto final List<String> geocodes = new ArrayList<String>(); for (final String geocode : geocodesInViewport) { - if (!app.isOffline(geocode, null)) { + if (!cgData.isOffline(geocode, null)) { geocodes.add(geocode); } } @@ -766,7 +767,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto builder.setTitle(R.string.map_theme_select); - builder.setSingleChoiceItems(names.toArray(new String[] {}), selectedItem, + builder.setSingleChoiceItems(names.toArray(new String[names.size()]), selectedItem, new DialogInterface.OnClickListener() { @Override @@ -790,7 +791,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto } /** - * @return a Set of geocodes corresponding to the caches that are shown on screen. + * @return a non-null Set of geocodes corresponding to the caches that are shown on screen. */ private Set<String> getGeocodesForCachesInViewport() { final Set<String> geocodes = new HashSet<String>(); @@ -1121,7 +1122,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto if (isLiveEnabled) { searchResult = new SearchResult(); } else { - searchResult = new SearchResult(app.getStoredInViewport(viewport, Settings.getCacheType())); + searchResult = new SearchResult(cgData.loadStoredInViewport(viewport, Settings.getCacheType())); } } else { // map started from another activity @@ -1132,7 +1133,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto } // live mode search result if (isLiveEnabled) { - SearchResult liveResult = new SearchResult(app.getCachedInViewport(viewport, Settings.getCacheType())); + SearchResult liveResult = new SearchResult(cgData.loadCachedInViewport(viewport, Settings.getCacheType())); searchResult.addGeocodes(liveResult.getGeocodes()); } @@ -1160,7 +1161,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto if (isLiveEnabled || mapMode == MapMode.COORDS) { //All visible waypoints CacheType type = Settings.getCacheType(); - Set<cgWaypoint> waypointsInViewport = app.getWaypointsInViewport(viewport, Settings.isExcludeMyCaches(), Settings.isExcludeDisabledCaches(), type); + Set<cgWaypoint> waypointsInViewport = cgData.loadWaypoints(viewport, Settings.isExcludeMyCaches(), Settings.isExcludeDisabledCaches(), type); waypoints.addAll(waypointsInViewport); } else @@ -1394,7 +1395,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto break; } - if (!app.isOffline(geocode, null)) { + if (!cgData.isOffline(geocode, null)) { if ((System.currentTimeMillis() - last) < 1500) { try { int delay = 1000 + (int) (Math.random() * 1000.0) - (int) (System.currentTimeMillis() - last); @@ -1484,9 +1485,9 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto Viewport viewport = null; if (geocodeCenter != null) { - viewport = app.getBounds(geocodeCenter); + viewport = cgData.getBounds(geocodeCenter); } else if (searchCenter != null) { - viewport = app.getBounds(searchCenter.getGeocodes()); + viewport = cgData.getBounds(searchCenter.getGeocodes()); } if (viewport == null) { diff --git a/main/src/cgeo/geocaching/maps/CachesOverlay.java b/main/src/cgeo/geocaching/maps/CachesOverlay.java index b656900..e7c3903 100644 --- a/main/src/cgeo/geocaching/maps/CachesOverlay.java +++ b/main/src/cgeo/geocaching/maps/CachesOverlay.java @@ -6,7 +6,7 @@ import cgeo.geocaching.R; import cgeo.geocaching.Settings; import cgeo.geocaching.WaypointPopup; import cgeo.geocaching.cgCache; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.cgData; import cgeo.geocaching.activity.Progress; import cgeo.geocaching.connector.gc.GCMap; import cgeo.geocaching.enumerations.CacheType; @@ -228,7 +228,7 @@ public class CachesOverlay extends AbstractItemizedOverlay { final IWaypoint coordinate = item.getCoord(); if (StringUtils.isNotBlank(coordinate.getCoordType()) && coordinate.getCoordType().equalsIgnoreCase("cache") && StringUtils.isNotBlank(coordinate.getGeocode())) { - cgCache cache = cgeoapplication.getInstance().loadCache(coordinate.getGeocode(), LoadFlags.LOAD_CACHE_OR_DB); + cgCache cache = cgData.loadCache(coordinate.getGeocode(), LoadFlags.LOAD_CACHE_OR_DB); RequestDetailsThread requestDetailsThread = new RequestDetailsThread(cache); if (!requestDetailsThread.requestRequired()) { // don't show popup if we have enough details diff --git a/main/src/cgeo/geocaching/maps/MapProviderFactory.java b/main/src/cgeo/geocaching/maps/MapProviderFactory.java index cb1f87f..483189f 100644 --- a/main/src/cgeo/geocaching/maps/MapProviderFactory.java +++ b/main/src/cgeo/geocaching/maps/MapProviderFactory.java @@ -23,7 +23,7 @@ public class MapProviderFactory { MapsforgeMapProvider.getInstance(); } - private static boolean isGoogleMapsInstalled() { + public static boolean isGoogleMapsInstalled() { boolean googleMaps = true; try { Class.forName("com.google.android.maps.MapActivity"); diff --git a/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java b/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java index 0377fe9..5649d19 100644 --- a/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java +++ b/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java @@ -1,5 +1,6 @@ package cgeo.geocaching.maps.google; +import cgeo.geocaching.activity.FilteredActivity; import cgeo.geocaching.maps.AbstractMap; import cgeo.geocaching.maps.CGeoMap; import cgeo.geocaching.maps.interfaces.MapActivityImpl; @@ -12,7 +13,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; -public class GoogleMapActivity extends MapActivity implements MapActivityImpl { +public class GoogleMapActivity extends MapActivity implements MapActivityImpl, FilteredActivity { private AbstractMap mapBase; @@ -127,4 +128,8 @@ public class GoogleMapActivity extends MapActivity implements MapActivityImpl { mapBase.goManual(view); } + @Override + public void showFilterMenu(View view) { + // do nothing, the filter bar only shows the global filter + } } diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapActivity.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapActivity.java index 6cb2539..f850402 100644 --- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapActivity.java +++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapActivity.java @@ -1,5 +1,6 @@ package cgeo.geocaching.maps.mapsforge; +import cgeo.geocaching.activity.FilteredActivity; import cgeo.geocaching.maps.AbstractMap; import cgeo.geocaching.maps.CGeoMap; import cgeo.geocaching.maps.interfaces.MapActivityImpl; @@ -12,7 +13,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; -public class MapsforgeMapActivity extends MapActivity implements MapActivityImpl { +public class MapsforgeMapActivity extends MapActivity implements MapActivityImpl, FilteredActivity { private AbstractMap mapBase; @@ -121,4 +122,9 @@ public class MapsforgeMapActivity extends MapActivity implements MapActivityImpl public void goManual(View view) { mapBase.goManual(view); } + + @Override + public void showFilterMenu(View view) { + // do nothing, the filter bar only shows the global filter + } } diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java index 299bf30..8eef130 100644 --- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java +++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapProvider.java @@ -65,6 +65,7 @@ public final class MapsforgeMapProvider extends AbstractMapProvider { } } } + Collections.sort(mapFileList, String.CASE_INSENSITIVE_ORDER); return mapFileList; } catch (Exception e) { Log.e("Settings.getOfflineMaps: " + e); diff --git a/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapActivity024.java b/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapActivity024.java index d45db9a..ed8a7bc 100644 --- a/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapActivity024.java +++ b/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapActivity024.java @@ -1,5 +1,6 @@ package cgeo.geocaching.maps.mapsforge.v024; +import cgeo.geocaching.activity.FilteredActivity; import cgeo.geocaching.maps.AbstractMap; import cgeo.geocaching.maps.CGeoMap; import cgeo.geocaching.maps.interfaces.MapActivityImpl; @@ -12,7 +13,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; -public class MapsforgeMapActivity024 extends MapActivity implements MapActivityImpl { +public class MapsforgeMapActivity024 extends MapActivity implements MapActivityImpl, FilteredActivity { private AbstractMap mapBase; @@ -121,4 +122,9 @@ public class MapsforgeMapActivity024 extends MapActivity implements MapActivityI public void goManual(View view) { mapBase.goManual(view); } + + @Override + public void showFilterMenu(View view) { + // do nothing, the filter bar only shows the global filter + } } diff --git a/main/src/cgeo/geocaching/network/HtmlImage.java b/main/src/cgeo/geocaching/network/HtmlImage.java index d47afb9..e25eec5 100644 --- a/main/src/cgeo/geocaching/network/HtmlImage.java +++ b/main/src/cgeo/geocaching/network/HtmlImage.java @@ -3,6 +3,7 @@ package cgeo.geocaching.network; import cgeo.geocaching.R; import cgeo.geocaching.StoredList; import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.compatibility.Compatibility; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.files.LocalStorage; import cgeo.geocaching.utils.ImageHelper; @@ -12,15 +13,13 @@ import ch.boye.httpclientandroidlib.HttpResponse; import org.apache.commons.lang3.StringUtils; -import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.Point; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.text.Html; -import android.view.Display; -import android.view.WindowManager; import java.io.File; import java.io.FileInputStream; @@ -66,9 +65,9 @@ public class HtmlImage implements Html.ImageGetter { bfOptions = new BitmapFactory.Options(); bfOptions.inTempStorage = new byte[16 * 1024]; - final Display display = ((WindowManager) cgeoapplication.getInstance().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); - this.maxWidth = display.getWidth() - 25; - this.maxHeight = display.getHeight() - 25; + Point displaySize = Compatibility.getDisplaySize(); + this.maxWidth = displaySize.x - 25; + this.maxHeight = displaySize.y - 25; this.resources = cgeoapplication.getInstance().getResources(); } diff --git a/main/src/cgeo/geocaching/network/Network.java b/main/src/cgeo/geocaching/network/Network.java index 72b325e..2b81b9e 100644 --- a/main/src/cgeo/geocaching/network/Network.java +++ b/main/src/cgeo/geocaching/network/Network.java @@ -34,6 +34,7 @@ import ch.boye.httpclientandroidlib.params.HttpParams; import ch.boye.httpclientandroidlib.protocol.HttpContext; import ch.boye.httpclientandroidlib.util.EntityUtils; +import org.apache.commons.lang3.CharEncoding; import org.apache.commons.lang3.StringUtils; import org.json.JSONException; import org.json.JSONObject; @@ -43,11 +44,13 @@ import android.net.Uri; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; import java.net.URLEncoder; public abstract class Network { private static final int NB_DOWNLOAD_RETRIES = 4; + /** User agent id */ private final static String PC_USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1"; /** Native user agent, taken from a Android 2.2 Nexus **/ @@ -397,7 +400,25 @@ public abstract class Network { } public static String rfc3986URLEncode(String text) { - return StringUtils.replace(URLEncoder.encode(text).replace("+", "%20"), "%7E", "~"); + return StringUtils.replace(Network.encode(text).replace("+", "%20"), "%7E", "~"); + } + + public static String decode(final String text) { + try { + return URLDecoder.decode(text, CharEncoding.UTF_8); + } catch (UnsupportedEncodingException e) { + Log.e("Network.decode", e); + } + return null; + } + + public static String encode(final String text) { + try { + return URLEncoder.encode(text, CharEncoding.UTF_8); + } catch (UnsupportedEncodingException e) { + Log.e("Network.encode", e); + } + return null; } } diff --git a/main/src/cgeo/geocaching/network/StatusUpdater.java b/main/src/cgeo/geocaching/network/StatusUpdater.java index 8c3b9dc..1953e1d 100644 --- a/main/src/cgeo/geocaching/network/StatusUpdater.java +++ b/main/src/cgeo/geocaching/network/StatusUpdater.java @@ -31,7 +31,7 @@ public class StatusUpdater extends MemorySubject<StatusUpdater.Status> implement private void requestUpdate() { final JSONObject response = Network.requestJSON("http://status.cgeo.org/api/status.json", - new Parameters("version_code", "" + Version.getVersionCode(cgeoapplication.getInstance()), + new Parameters("version_code", String.valueOf(Version.getVersionCode(cgeoapplication.getInstance())), "version_name", Version.getVersionName(cgeoapplication.getInstance()), "locale", Locale.getDefault().toString())); if (response != null) { diff --git a/main/src/cgeo/geocaching/sorting/DistanceComparator.java b/main/src/cgeo/geocaching/sorting/DistanceComparator.java index d601433..781359a 100644 --- a/main/src/cgeo/geocaching/sorting/DistanceComparator.java +++ b/main/src/cgeo/geocaching/sorting/DistanceComparator.java @@ -11,8 +11,22 @@ import java.util.List; */ public class DistanceComparator extends AbstractCacheComparator { + final private Geopoint coords; + final private List<cgCache> list; + private boolean cachedDistances; + public DistanceComparator(final Geopoint coords, List<cgCache> list) { - // calculate all distances to avoid duplicate calculations during sorting + this.coords = coords; + this.list = list; + } + + /** + * calculate all distances only once to avoid costly re-calculation of the same distance during sorting + */ + private void calculateAllDistances() { + if (cachedDistances) { + return; + } for (cgCache cache : list) { if (cache.getCoords() != null) { cache.setDistance(coords.distanceTo(cache.getCoords())); @@ -21,6 +35,7 @@ public class DistanceComparator extends AbstractCacheComparator { cache.setDistance(null); } } + cachedDistances = true; } @Override @@ -30,6 +45,7 @@ public class DistanceComparator extends AbstractCacheComparator { @Override protected int compareCaches(final cgCache cache1, final cgCache cache2) { + calculateAllDistances(); if (cache1.getCoords() == null && cache2.getCoords() == null) { return 0; } diff --git a/main/src/cgeo/geocaching/sorting/FindsComparator.java b/main/src/cgeo/geocaching/sorting/FindsComparator.java index 6407b11..47e3844 100644 --- a/main/src/cgeo/geocaching/sorting/FindsComparator.java +++ b/main/src/cgeo/geocaching/sorting/FindsComparator.java @@ -1,13 +1,11 @@ package cgeo.geocaching.sorting; import cgeo.geocaching.cgCache; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.cgData; import cgeo.geocaching.enumerations.LogType; public class FindsComparator extends AbstractCacheComparator { - private final cgeoapplication app = cgeoapplication.getInstance(); - @Override protected boolean canCompare(cgCache cache1, cgCache cache2) { return cache1.getLogCounts() != null && cache2.getLogCounts() != null; @@ -20,9 +18,9 @@ public class FindsComparator extends AbstractCacheComparator { return finds2 - finds1; } - private int getFindsCount(cgCache cache) { + private static int getFindsCount(cgCache cache) { if (cache.getLogCounts().isEmpty()) { - cache.setLogCounts(app.loadLogCounts(cache.getGeocode())); + cache.setLogCounts(cgData.loadLogCounts(cache.getGeocode())); } Integer logged = cache.getLogCounts().get(LogType.FOUND_IT); if (logged != null) { diff --git a/main/src/cgeo/geocaching/sorting/InverseComparator.java b/main/src/cgeo/geocaching/sorting/InverseComparator.java new file mode 100644 index 0000000..d2fa085 --- /dev/null +++ b/main/src/cgeo/geocaching/sorting/InverseComparator.java @@ -0,0 +1,22 @@ +package cgeo.geocaching.sorting; + +import cgeo.geocaching.cgCache; + +/** + * comparator which inverses the sort order of the given other comparator + * + */ +public class InverseComparator implements CacheComparator { + + private final CacheComparator originalComparator; + + public InverseComparator(CacheComparator comparator) { + this.originalComparator = comparator; + } + + @Override + public int compare(cgCache lhs, cgCache rhs) { + return originalComparator.compare(rhs, lhs); + } + +} diff --git a/main/src/cgeo/geocaching/twitter/Twitter.java b/main/src/cgeo/geocaching/twitter/Twitter.java index c630cec..c86c633 100644 --- a/main/src/cgeo/geocaching/twitter/Twitter.java +++ b/main/src/cgeo/geocaching/twitter/Twitter.java @@ -2,6 +2,7 @@ package cgeo.geocaching.twitter; import cgeo.geocaching.Settings; import cgeo.geocaching.cgCache; +import cgeo.geocaching.cgData; import cgeo.geocaching.cgTrackable; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.enumerations.LoadFlags; @@ -55,7 +56,7 @@ public final class Twitter { } public static void postTweetCache(String geocode) { - final cgCache cache = cgeoapplication.getInstance().loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); + final cgCache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); String status; final String url = cache.getUrl(); if (url.length() >= 100) { @@ -76,7 +77,7 @@ public final class Twitter { } public static void postTweetTrackable(String geocode) { - final cgTrackable trackable = cgeoapplication.getInstance().getTrackableByGeocode(geocode); + final cgTrackable trackable = cgData.loadTrackable(geocode); String name = trackable.getName(); if (name.length() > 82) { name = name.substring(0, 81) + '…'; diff --git a/main/src/cgeo/geocaching/ui/CacheListAdapter.java b/main/src/cgeo/geocaching/ui/CacheListAdapter.java index 65d3fbc..efc95b8 100644 --- a/main/src/cgeo/geocaching/ui/CacheListAdapter.java +++ b/main/src/cgeo/geocaching/ui/CacheListAdapter.java @@ -12,6 +12,7 @@ import cgeo.geocaching.filter.IFilter; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.sorting.CacheComparator; import cgeo.geocaching.sorting.DistanceComparator; +import cgeo.geocaching.sorting.InverseComparator; import cgeo.geocaching.sorting.VisitComparator; import cgeo.geocaching.utils.AngleUtils; import cgeo.geocaching.utils.Log; @@ -43,6 +44,7 @@ import android.widget.TextView; import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -64,6 +66,7 @@ public class CacheListAdapter extends ArrayAdapter<cgCache> { final private Resources res; /** Resulting list of caches */ final private List<cgCache> list; + private boolean inverseSort = false; private static final int SWIPE_MIN_DISTANCE = 60; private static final int SWIPE_MAX_OFF_PATH = 100; @@ -149,6 +152,14 @@ public class CacheListAdapter extends ArrayAdapter<cgCache> { * @param comparator */ public void setComparator(final CacheComparator comparator) { + // selecting the same sorting twice will toggle the order + if (cacheComparator != null && comparator != null && cacheComparator.getClass().equals(comparator.getClass())) { + inverseSort = !inverseSort; + } + else { + // always reset the inversion for a new sorting criteria + inverseSort = false; + } cacheComparator = comparator; forceSort(); } @@ -257,7 +268,7 @@ public class CacheListAdapter extends ArrayAdapter<cgCache> { updateSortByDistance(); } else { - Collections.sort(list, cacheComparator); + Collections.sort(list, getPotentialInversion(cacheComparator)); } notifyDataSetChanged(); @@ -292,7 +303,7 @@ public class CacheListAdapter extends ArrayAdapter<cgCache> { return; } final ArrayList<cgCache> oldList = new ArrayList<cgCache>(list); - Collections.sort(list, new DistanceComparator(coords, list)); + Collections.sort(list, getPotentialInversion(new DistanceComparator(coords, list))); // avoid an update if the list has not changed due to location update if (list.equals(oldList)) { @@ -302,6 +313,13 @@ public class CacheListAdapter extends ArrayAdapter<cgCache> { lastSort = System.currentTimeMillis(); } + private Comparator<? super cgCache> getPotentialInversion(final CacheComparator comparator) { + if (inverseSort) { + return new InverseComparator(comparator); + } + return comparator; + } + private boolean isSortedByDistance() { return cacheComparator == null || cacheComparator instanceof DistanceComparator; } @@ -390,17 +408,24 @@ public class CacheListAdapter extends ArrayAdapter<cgCache> { holder.logStatusMark.setVisibility(View.GONE); } - if (cache.getNameSp() == null) { - cache.setNameSp((new Spannable.Factory()).newSpannable(cache.getName())); - if (cache.isDisabled() || cache.isArchived()) { // strike - cache.getNameSp().setSpan(new StrikethroughSpan(), 0, cache.getNameSp().toString().length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - } - if (cache.isArchived()) { - cache.getNameSp().setSpan(new ForegroundColorSpan(res.getColor(R.color.archived_cache_color)), 0, cache.getNameSp().toString().length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + Spannable spannable = null; + if (cache.isDisabled() || cache.isArchived()) { // strike + spannable = Spannable.Factory.getInstance().newSpannable(cache.getName()); + spannable.setSpan(new StrikethroughSpan(), 0, spannable.toString().length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } + if (cache.isArchived()) { // red color + if (spannable == null) { + spannable = Spannable.Factory.getInstance().newSpannable(cache.getName()); } + spannable.setSpan(new ForegroundColorSpan(res.getColor(R.color.archived_cache_color)), 0, spannable.toString().length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } - holder.text.setText(cache.getNameSp(), TextView.BufferType.SPANNABLE); + if (spannable != null) { + holder.text.setText(spannable, TextView.BufferType.SPANNABLE); + } + else { + holder.text.setText(cache.getName()); + } holder.text.setCompoundDrawablesWithIntrinsicBounds(getCacheIcon(cache), null, null, null); if (cache.getInventoryItems() > 0) { diff --git a/main/src/cgeo/geocaching/ui/EditorDialog.java b/main/src/cgeo/geocaching/ui/EditorDialog.java index 50b3e27..6dcf546 100644 --- a/main/src/cgeo/geocaching/ui/EditorDialog.java +++ b/main/src/cgeo/geocaching/ui/EditorDialog.java @@ -53,7 +53,7 @@ public class EditorDialog extends Dialog { @Override public void show() { super.show(); - getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); + getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); } } diff --git a/main/src/cgeo/geocaching/ui/ImagesList.java b/main/src/cgeo/geocaching/ui/ImagesList.java index 3d6f95c..91b4fde 100644 --- a/main/src/cgeo/geocaching/ui/ImagesList.java +++ b/main/src/cgeo/geocaching/ui/ImagesList.java @@ -179,10 +179,6 @@ public class ImagesList { bitmaps.clear(); } - public cgImage getImage(int id) { - return images.get(id); - } - public void onCreateContextMenu(ContextMenu menu, View v) { final Resources res = activity.getResources(); menu.setHeaderTitle(res.getString(R.string.cache_image)); diff --git a/main/src/cgeo/geocaching/ui/LoggingUI.java b/main/src/cgeo/geocaching/ui/LoggingUI.java index 0e048c3..c5d9bf6 100644 --- a/main/src/cgeo/geocaching/ui/LoggingUI.java +++ b/main/src/cgeo/geocaching/ui/LoggingUI.java @@ -4,7 +4,7 @@ import cgeo.geocaching.LogEntry; import cgeo.geocaching.R; import cgeo.geocaching.Settings; import cgeo.geocaching.cgCache; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.cgData; import cgeo.geocaching.activity.IAbstractActivity; import cgeo.geocaching.enumerations.LogType; @@ -94,7 +94,7 @@ public class LoggingUI extends AbstractUIFactory { } private static void showOfflineMenu(final cgCache cache, final Activity activity) { - final LogEntry currentLog = cgeoapplication.getInstance().loadLogOffline(cache.getGeocode()); + final LogEntry currentLog = cgData.loadLogOffline(cache.getGeocode()); final LogType currentLogType = currentLog == null ? null : currentLog.type; final List<LogType> logTypes = cache.getPossibleLogTypes(); @@ -123,7 +123,7 @@ public class LoggingUI extends AbstractUIFactory { break; case CLEAR_LOG: - cgeoapplication.getInstance().clearLogOffline(cache.getGeocode()); + cgData.clearLogOffline(cache.getGeocode()); } } else { cache.logOffline(activity, logTypeEntry.logType); diff --git a/main/src/cgeo/geocaching/ui/WeakReferenceHandler.java b/main/src/cgeo/geocaching/ui/WeakReferenceHandler.java new file mode 100644 index 0000000..4724466 --- /dev/null +++ b/main/src/cgeo/geocaching/ui/WeakReferenceHandler.java @@ -0,0 +1,27 @@ +package cgeo.geocaching.ui; + +import android.app.Activity; +import android.os.Handler; + +import java.lang.ref.WeakReference; + +/** + * Standard handler implementation which uses a weak reference to its activity. This avoids that activities stay in + * memory due to references from the handler to the activity (see Android Lint warning "HandlerLeak") + * + * Create static private subclasses of this handler class in your activity. + * + * @param <ActivityType> + */ +public abstract class WeakReferenceHandler<ActivityType extends Activity> extends Handler { + + private final WeakReference<ActivityType> activityRef; + + protected WeakReferenceHandler(final ActivityType activity) { + this.activityRef = new WeakReference<ActivityType>(activity); + } + + protected ActivityType getActivity() { + return activityRef.get(); + } +} diff --git a/main/src/cgeo/geocaching/utils/AngleUtils.java b/main/src/cgeo/geocaching/utils/AngleUtils.java index e2b4a66..6e59a91 100644 --- a/main/src/cgeo/geocaching/utils/AngleUtils.java +++ b/main/src/cgeo/geocaching/utils/AngleUtils.java @@ -8,9 +8,11 @@ public class AngleUtils { /** * Return the angle to turn of to go from an angle to the other - * - * @param from the origin angle in degrees - * @param to the target angle in degreees + * + * @param from + * the origin angle in degrees + * @param to + * the target angle in degrees * @return a value in degrees, in the [-180, 180[ range */ public static float difference(final float from, final float to) { diff --git a/main/src/cgeo/geocaching/utils/ImageHelper.java b/main/src/cgeo/geocaching/utils/ImageHelper.java index 4c18b06..98cad64 100644 --- a/main/src/cgeo/geocaching/utils/ImageHelper.java +++ b/main/src/cgeo/geocaching/utils/ImageHelper.java @@ -1,13 +1,12 @@ package cgeo.geocaching.utils; import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.compatibility.Compatibility; -import android.content.Context; import android.graphics.Bitmap; +import android.graphics.Point; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; -import android.view.Display; -import android.view.WindowManager; public class ImageHelper { @@ -24,9 +23,9 @@ public class ImageHelper { */ public static BitmapDrawable scaleBitmapToFitDisplay(final Bitmap image) { final cgeoapplication app = cgeoapplication.getInstance(); - final Display display = ((WindowManager) app.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); - final int maxWidth = display.getWidth() - 25; - final int maxHeight = display.getHeight() - 25; + Point displaySize = Compatibility.getDisplaySize(); + final int maxWidth = displaySize.x - 25; + final int maxHeight = displaySize.y - 25; Bitmap result = image; int width = image.getWidth(); diff --git a/main/src/cgeo/geocaching/utils/TranslationUtils.java b/main/src/cgeo/geocaching/utils/TranslationUtils.java index a29c5a7..4d318f0 100644 --- a/main/src/cgeo/geocaching/utils/TranslationUtils.java +++ b/main/src/cgeo/geocaching/utils/TranslationUtils.java @@ -1,12 +1,11 @@ package cgeo.geocaching.utils; import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.network.Network; import android.content.Intent; import android.net.Uri; -import java.net.URLEncoder; - /** * Utilities used for translating */ @@ -30,7 +29,7 @@ public final class TranslationUtils { * @return URI ready to be parsed */ private static String buildTranslationURI(final String toLang, final String text) { - String content = URLEncoder.encode(text); + String content = Network.encode(text); // the app works better without the "+", the website works better with "+", therefore assume using the app if installed if (ProcessUtils.isInstalled(TRANSLATION_APP)) { content = content.replace("+", "%20"); diff --git a/main/src/org/openintents/intents/FileManagerIntents.java b/main/src/org/openintents/intents/FileManagerIntents.java new file mode 100644 index 0000000..8ff10c8 --- /dev/null +++ b/main/src/org/openintents/intents/FileManagerIntents.java @@ -0,0 +1,127 @@ +/*
+ * Copyright (C) 2008 OpenIntents.org
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.openintents.intents;
+
+/**
+ * Provides OpenIntents actions, extras, and categories used by providers.
+ * <p>These specifiers extend the standard Android specifiers.</p>
+ */
+public final class FileManagerIntents {
+
+ /**
+ * Activity Action: Pick a file through the file manager, or let user
+ * specify a custom file name.
+ * Data is the current file name or file name suggestion.
+ * Returns a new file name as file URI in data.
+ *
+ * <p>Constant Value: "org.openintents.action.PICK_FILE"</p>
+ */
+ public static final String ACTION_PICK_FILE = "org.openintents.action.PICK_FILE";
+
+ /**
+ * Activity Action: Pick a directory through the file manager, or let user
+ * specify a custom file name.
+ * Data is the current directory name or directory name suggestion.
+ * Returns a new directory name as file URI in data.
+ *
+ * <p>Constant Value: "org.openintents.action.PICK_DIRECTORY"</p>
+ */
+ public static final String ACTION_PICK_DIRECTORY = "org.openintents.action.PICK_DIRECTORY";
+
+ /**
+ * Activity Action: Move, copy or delete after select entries.
+ * Data is the current directory name or directory name suggestion.
+ *
+ * <p>Constant Value: "org.openintents.action.MULTI_SELECT"</p>
+ */
+ public static final String ACTION_MULTI_SELECT = "org.openintents.action.MULTI_SELECT";
+
+ public static final String ACTION_SEARCH_STARTED = "org.openintents.action.SEARCH_STARTED";
+
+ public static final String ACTION_SEARCH_FINISHED = "org.openintens.action.SEARCH_FINISHED";
+
+ /**
+ * The title to display.
+ *
+ * <p>This is shown in the title bar of the file manager.</p>
+ *
+ * <p>Constant Value: "org.openintents.extra.TITLE"</p>
+ */
+ public static final String EXTRA_TITLE = "org.openintents.extra.TITLE";
+
+ /**
+ * The text on the button to display.
+ *
+ * <p>Depending on the use, it makes sense to set this to "Open" or "Save".</p>
+ *
+ * <p>Constant Value: "org.openintents.extra.BUTTON_TEXT"</p>
+ */
+ public static final String EXTRA_BUTTON_TEXT = "org.openintents.extra.BUTTON_TEXT";
+
+ /**
+ * Flag indicating to show only writeable files and folders.
+ *
+ * <p>Constant Value: "org.openintents.extra.WRITEABLE_ONLY"</p>
+ */
+ public static final String EXTRA_WRITEABLE_ONLY = "org.openintents.extra.WRITEABLE_ONLY";
+
+ /**
+ * The path to prioritize in search. Usually denotes the path the user was on when the search was initiated.
+ *
+ * <p>Constant Value: "org.openintents.extra.SEARCH_INIT_PATH"</p>
+ */
+ public static final String EXTRA_SEARCH_INIT_PATH = "org.openintents.extra.SEARCH_INIT_PATH";
+
+ /**
+ * The search query as sent to SearchService.
+ *
+ * <p>Constant Value: "org.openintents.extra.SEARCH_QUERY"</p>
+ */
+ public static final String EXTRA_SEARCH_QUERY = "org.openintents.extra.SEARCH_QUERY";
+
+ /**
+ * <p>Constant Value: "org.openintents.extra.DIR_PATH"</p>
+ */
+ public static final String EXTRA_DIR_PATH = "org.openintents.extra.DIR_PATH";
+
+ /**
+ * Extension by which to filter.
+ *
+ * <p>Constant Value: "org.openintents.extra.FILTER_FILETYPE"</p>
+ */
+ public static final String EXTRA_FILTER_FILETYPE = "org.openintents.extra.FILTER_FILETYPE";
+
+ /**
+ * Mimetype by which to filter.
+ *
+ * <p>Constant Value: "org.openintents.extra.FILTER_MIMETYPE"</p>
+ */
+ public static final String EXTRA_FILTER_MIMETYPE = "org.openintents.extra.FILTER_MIMETYPE";
+
+ /**
+ * Only show directories.
+ *
+ * <p>Constant Value: "org.openintents.extra.DIRECTORIES_ONLY"</p>
+ */
+ public static final String EXTRA_DIRECTORIES_ONLY = "org.openintents.extra.DIRECTORIES_ONLY";
+
+ public static final String EXTRA_DIALOG_FILE_HOLDER = "org.openintents.extra.DIALOG_FILE";
+
+ public static final String EXTRA_IS_GET_CONTENT_INITIATED = "org.openintents.extra.ENABLE_ACTIONS";
+
+ public static final String EXTRA_FILENAME = "org.openintents.extra.FILENAME";
+}
diff --git a/main/templates/mapsapikey.xml b/main/templates/mapsapikey.xml index 5514121..3655b5e 100644 --- a/main/templates/mapsapikey.xml +++ b/main/templates/mapsapikey.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <resources> - <string name="maps_api_key">@maps.api.key@</string> + <string name="maps_api_key" translatable="false">@maps.api.key@</string> </resources> diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml index 62813a2..64d30cd 100644 --- a/tests/AndroidManifest.xml +++ b/tests/AndroidManifest.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="cgeo.geocaching.test" - android:versionCode="1" - android:versionName="1.0" - name="c:geo Tests"> - <uses-sdk android:minSdkVersion="4" /> + package="cgeo.geocaching.test" + android:versionCode="1" + android:versionName="1.0" > + + <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="13"/> <instrumentation android:targetPackage="cgeo.geocaching" android:name="android.test.InstrumentationTestRunner" /> - <application android:icon="@drawable/icon" android:label="@string/app_name"> + <application android:icon="@drawable/icon" android:label="@string/app_name" android:allowBackup="false"> <uses-library android:name="android.test.runner" /> </application> diff --git a/tests/build.xml b/tests/build.xml index b5596c3..2afa27b 100644 --- a/tests/build.xml +++ b/tests/build.xml @@ -45,6 +45,26 @@ unless="sdk.dir"
/>
+ <target name="run-acceptance-tests" depends="clean, debug, install" >
+
+ <property name="log.file" value="acceptance_tests_standard_out.txt" />
+ <!-- because we don't have control over the 'test' target (to check for passes an fails) this prints to standard out
+ we capture standard out into a file and query this to see if we have any test failures, using this to pass/fail our task -->
+ <record name="${log.file}" action="start" />
+ <antcall target="test" />
+ <record name="${log.file}" action="stop" />
+
+ <loadfile property="tests.output" srcFile="${log.file}" />
+
+ <echo>Checking for failures</echo>
+ <fail message="Acceptance tests FAILED!!!" >
+ <condition>
+ <contains string="${tests.output}" substring="FAILURES" />
+ </condition>
+ </fail>
+
+ <echo>Acceptance tests passed!</echo>
+ </target>
<!-- extension targets. Uncomment the ones where you want to do custom work
in between standard targets -->
@@ -79,7 +99,7 @@ In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
in order to avoid having your file be overridden by tools such as "android update project"
-->
- <!-- version-tag: 1 -->
+ <!-- version-tag: custom -->
<import file="${sdk.dir}/tools/ant/build.xml" />
</project>
diff --git a/tests/libs/robotium-solo-3.6.jar b/tests/libs/robotium-solo-3.6.jar Binary files differnew file mode 100644 index 0000000..4280906 --- /dev/null +++ b/tests/libs/robotium-solo-3.6.jar diff --git a/tests/res/raw/map1.png b/tests/res/raw/map1.png Binary files differnew file mode 100644 index 0000000..e97be77 --- /dev/null +++ b/tests/res/raw/map1.png diff --git a/tests/res/raw/map11.png b/tests/res/raw/map11.png Binary files differnew file mode 100644 index 0000000..414da1d --- /dev/null +++ b/tests/res/raw/map11.png diff --git a/tests/res/raw/map2.png b/tests/res/raw/map2.png Binary files differnew file mode 100644 index 0000000..3f9d88e --- /dev/null +++ b/tests/res/raw/map2.png diff --git a/tests/res/raw/map3.png b/tests/res/raw/map3.png Binary files differnew file mode 100644 index 0000000..212627c --- /dev/null +++ b/tests/res/raw/map3.png diff --git a/tests/res/raw/map4.png b/tests/res/raw/map4.png Binary files differnew file mode 100644 index 0000000..51364a8 --- /dev/null +++ b/tests/res/raw/map4.png diff --git a/tests/res/raw/map5.png b/tests/res/raw/map5.png Binary files differnew file mode 100644 index 0000000..219e2c6 --- /dev/null +++ b/tests/res/raw/map5.png diff --git a/tests/res/raw/trackable_tbxatg.htm b/tests/res/raw/trackable_tbxatg.htm index 2f9139a..532cb4c 100644 --- a/tests/res/raw/trackable_tbxatg.htm +++ b/tests/res/raw/trackable_tbxatg.htm @@ -463,7 +463,7 @@ Sys.WebForms.PageRequestManager._initialize('ctl00$uxMainScriptManager', 'aspnet </tr><tr id="ctl00_ContentBody_trLogIt">
<td>
<img src="/images/icons/16/write_log.png" width="16" height="16" alt="notebook"
- title="Found it? Log it!" /> <a id="ctl00_ContentBody_LogLink" title="Found it? Log it!" href="log.aspx?wid=a80354bc-752e-44df-8732-159e5bbebd65">Found it? Log it!</a></td>
+ title="Found it? Log it!" /><a id="ctl00_ContentBody_LogLink" title="Found it? Log it!" href="log.aspx?wid=a80354bc-752e-44df-8732-159e5bbebd65">Found it? Log it!</a></td>
</tr><tr id="ctl00_ContentBody_trWatchIt">
<td>
<img src="/images/icons/16/watch.png" width="16" height="16" alt="alert"
diff --git a/tests/src/cgeo/geocaching/CacheTest.java b/tests/src/cgeo/geocaching/CacheTest.java index e1d6efb..905cab0 100644 --- a/tests/src/cgeo/geocaching/CacheTest.java +++ b/tests/src/cgeo/geocaching/CacheTest.java @@ -41,4 +41,10 @@ public class CacheTest extends AndroidTestCase { // different objects with same geocode shall be equal assertTrue(one.equals(two)); } + + public static void testGeocodeUppercase() { + cgCache cache = new cgCache(); + cache.setGeocode("gc1234"); + assertEquals("GC1234", cache.getGeocode()); + } } diff --git a/tests/src/cgeo/geocaching/SettingsTest.java b/tests/src/cgeo/geocaching/SettingsTest.java index 0d395f4..f113180 100644 --- a/tests/src/cgeo/geocaching/SettingsTest.java +++ b/tests/src/cgeo/geocaching/SettingsTest.java @@ -30,6 +30,6 @@ public class SettingsTest extends ActivityInstrumentationTestCase2<cgeo> { } public static void testSettings() { - assertEquals(Settings.getMemberStatus(), GCConstants.MEMBER_STATUS_PM); + assertEquals(GCConstants.MEMBER_STATUS_PM, Settings.getMemberStatus()); } } diff --git a/tests/src/cgeo/geocaching/TrackableTest.java b/tests/src/cgeo/geocaching/TrackableTest.java new file mode 100644 index 0000000..b52139a --- /dev/null +++ b/tests/src/cgeo/geocaching/TrackableTest.java @@ -0,0 +1,18 @@ +package cgeo.geocaching; + +import android.test.AndroidTestCase; + +public class TrackableTest extends AndroidTestCase { + + public static void testGetGeocode() { + cgTrackable trackable = new cgTrackable(); + trackable.setGeocode("tb1234"); + assertEquals("TB1234", trackable.getGeocode()); + } + + public static void testSetLogsNull() { + cgTrackable trackable = new cgTrackable(); + trackable.setLogs(null); + assertNotNull("Trackable logs must not be null!", trackable.getLogs()); + } +} diff --git a/tests/src/cgeo/geocaching/cgDataTest.java b/tests/src/cgeo/geocaching/cgDataTest.java index 3cee32f..f4b71f3 100644 --- a/tests/src/cgeo/geocaching/cgDataTest.java +++ b/tests/src/cgeo/geocaching/cgDataTest.java @@ -18,7 +18,6 @@ public class cgDataTest extends CGeoTestCase { public static void testStoredLists() { - cgeoapplication app = cgeoapplication.getInstance(); int listId1 = StoredList.STANDARD_LIST_ID; int listId2 = StoredList.STANDARD_LIST_ID; @@ -32,11 +31,11 @@ public class cgDataTest extends CGeoTestCase { try { // create lists - listId1 = app.createList("cgData Test"); + listId1 = cgData.createList("cgData Test"); assertTrue(listId1 > StoredList.STANDARD_LIST_ID); - listId2 = app.createList("cgDataTest"); + listId2 = cgData.createList("cgDataTest"); assertTrue(listId2 > StoredList.STANDARD_LIST_ID); - assertTrue(app.getLists().size() >= 2); + assertTrue(cgData.getLists().size() >= 2); cache1.setDetailed(true); cache1.setListId(listId1); @@ -44,33 +43,33 @@ public class cgDataTest extends CGeoTestCase { cache2.setListId(listId1); // save caches to DB (cache1=listId1, cache2=listId1) - app.saveCache(cache1, LoadFlags.SAVE_ALL); - app.saveCache(cache2, LoadFlags.SAVE_ALL); - assertTrue(app.getAllStoredCachesCount(false, CacheType.ALL) >= 2); + cgData.saveCache(cache1, LoadFlags.SAVE_ALL); + cgData.saveCache(cache2, LoadFlags.SAVE_ALL); + assertTrue(cgData.getAllCachesCount() >= 2); // rename list (cache1=listId1, cache2=listId1) - assertEquals(1, app.renameList(listId1, "cgData Test (renamed)")); + assertEquals(1, cgData.renameList(listId1, "cgData Test (renamed)")); // get list - StoredList list1 = app.getList(listId1); + StoredList list1 = cgData.getList(listId1); assertEquals("cgData Test (renamed)", list1.title); // move to list (cache1=listId2, cache2=listId2) - app.moveToList(Collections.singletonList(cache1), listId2); - assertEquals(1, app.getAllStoredCachesCount(false, CacheType.ALL, listId2)); + cgData.moveToList(Collections.singletonList(cache1), listId2); + assertEquals(1, cgData.getAllStoredCachesCount(CacheType.ALL, listId2)); // remove list (cache1=listId2, cache2=listId2) - assertTrue(app.removeList(listId1)); + assertTrue(cgData.removeList(listId1)); // mark dropped (cache1=1, cache2=0) - app.markDropped(Collections.singletonList(cache2)); + cgData.markDropped(Collections.singletonList(cache2)); // mark stored (cache1=1, cache2=listId2) - app.markStored(Collections.singletonList(cache2), listId2); - assertEquals(2, app.getAllStoredCachesCount(false, CacheType.ALL, listId2)); + cgData.moveToList(Collections.singletonList(cache2), listId2); + assertEquals(2, cgData.getAllStoredCachesCount(CacheType.ALL, listId2)); // drop stored (cache1=0, cache2=0) - app.removeList(listId2); + cgData.removeList(listId2); } finally { @@ -78,33 +77,30 @@ public class cgDataTest extends CGeoTestCase { Set<String> geocodes = new HashSet<String>(); geocodes.add(cache1.getGeocode()); geocodes.add(cache2.getGeocode()); - app.removeCaches(geocodes, LoadFlags.REMOVE_ALL); + cgData.removeCaches(geocodes, LoadFlags.REMOVE_ALL); // remove list - app.removeList(listId1); - app.removeList(listId2); + cgData.removeList(listId1); + cgData.removeList(listId2); } } // Check that queries don't throw an exception (see issue #1429). public static void testLoadWaypoints() { final Viewport viewport = new Viewport(new Geopoint(-1, -2), new Geopoint(3, 4)); - final cgeoapplication app = cgeoapplication.getInstance(); - app.getWaypointsInViewport(viewport, false, false, CacheType.ALL); - app.getWaypointsInViewport(viewport, false, true, CacheType.ALL); - app.getWaypointsInViewport(viewport, true, false, CacheType.ALL); - app.getWaypointsInViewport(viewport, true, true, CacheType.ALL); - app.getWaypointsInViewport(viewport, false, false, CacheType.TRADITIONAL); - app.getWaypointsInViewport(viewport, false, true, CacheType.TRADITIONAL); - app.getWaypointsInViewport(viewport, true, false, CacheType.TRADITIONAL); - app.getWaypointsInViewport(viewport, true, true, CacheType.TRADITIONAL); + cgData.loadWaypoints(viewport, false, false, CacheType.ALL); + cgData.loadWaypoints(viewport, false, true, CacheType.ALL); + cgData.loadWaypoints(viewport, true, false, CacheType.ALL); + cgData.loadWaypoints(viewport, true, true, CacheType.ALL); + cgData.loadWaypoints(viewport, false, false, CacheType.TRADITIONAL); + cgData.loadWaypoints(viewport, false, true, CacheType.TRADITIONAL); + cgData.loadWaypoints(viewport, true, false, CacheType.TRADITIONAL); + cgData.loadWaypoints(viewport, true, true, CacheType.TRADITIONAL); } // Check that saving a cache and trackable without logs works (see #2199) public static void testSaveWithoutLogs() { - cgeoapplication app = cgeoapplication.getInstance(); - final String GEOCODE_CACHE = "TEST"; // create cache and trackable @@ -118,21 +114,19 @@ public class cgDataTest extends CGeoTestCase { cache.setInventory(inventory); try { - app.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); - final cgCache loadedCache = app.loadCache(GEOCODE_CACHE, LoadFlags.LOAD_ALL_DB_ONLY); + cgData.saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); + final cgCache loadedCache = cgData.loadCache(GEOCODE_CACHE, LoadFlags.LOAD_ALL_DB_ONLY); assertNotNull("Cache was not saved!", loadedCache); assertEquals(1, loadedCache.getInventory().size()); } finally { - app.removeCache(GEOCODE_CACHE, LoadFlags.REMOVE_ALL); + cgData.removeCache(GEOCODE_CACHE, LoadFlags.REMOVE_ALL); } } // Loading logs for an empty geocode should return an empty list, not null! public static void testLoadLogsFromEmptyGeocode() { - cgeoapplication app = cgeoapplication.getInstance(); - - List<LogEntry> logs = app.loadLogs(""); + List<LogEntry> logs = cgData.loadLogs(""); assertNotNull("Logs must not be null", logs); assertEquals("Logs from empty geocode must be empty", 0, logs.size()); diff --git a/tests/src/cgeo/geocaching/cgWaypointTest.java b/tests/src/cgeo/geocaching/cgWaypointTest.java index 324d562..6665c51 100644 --- a/tests/src/cgeo/geocaching/cgWaypointTest.java +++ b/tests/src/cgeo/geocaching/cgWaypointTest.java @@ -33,4 +33,9 @@ public class cgWaypointTest extends AndroidTestCase { assertTrue(parking.compareTo(trailhead) < 0); } + public static void testGeocode() { + cgWaypoint waypoint = new cgWaypoint("Test waypoint", WaypointType.PARKING, false); + waypoint.setGeocode("p1"); + assertEquals("P1", waypoint.getGeocode()); + } } diff --git a/tests/src/cgeo/geocaching/cgeoApplicationTest.java b/tests/src/cgeo/geocaching/cgeoApplicationTest.java index f7d3158..5e23d98 100644 --- a/tests/src/cgeo/geocaching/cgeoApplicationTest.java +++ b/tests/src/cgeo/geocaching/cgeoApplicationTest.java @@ -109,7 +109,7 @@ public class cgeoApplicationTest extends CGeoTestCase { if (Settings.isPremiumMember() || search.getError() == null) { assertEquals(1, search.getGeocodes().size()); assertTrue(search.getGeocodes().contains(geocode)); - return cgeoapplication.getInstance().loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); + return cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); } assertEquals(0, search.getGeocodes().size()); return null; @@ -263,10 +263,12 @@ public class cgeoApplicationTest extends CGeoTestCase { // backup user settings final boolean excludeMine = Settings.isExcludeMyCaches(); final Strategy strategy = Settings.getLiveMapStrategy(); + final CacheType cacheType = Settings.getCacheType(); try { // set up settings required for test Settings.setExcludeMine(false); + Settings.setCacheType(CacheType.ALL); final GC2CJPF mockedCache = new GC2CJPF(); deleteCacheFromDB(mockedCache.getGeocode()); @@ -279,8 +281,7 @@ public class cgeoApplicationTest extends CGeoTestCase { SearchResult search = ConnectorFactory.searchByViewport(viewport, tokens); assertNotNull(search); assertTrue(search.getGeocodes().contains(mockedCache.getGeocode())); - - cgCache parsedCache = cgeoapplication.getInstance().loadCache(mockedCache.getGeocode(), LoadFlags.LOAD_CACHE_OR_DB); + cgCache parsedCache = cgData.loadCache(mockedCache.getGeocode(), LoadFlags.LOAD_CACHE_OR_DB); assertEquals(Settings.isPremiumMember(), mockedCache.getCoords().equals(parsedCache.getCoords())); assertEquals(Settings.isPremiumMember(), parsedCache.isReliableLatLon()); @@ -292,8 +293,7 @@ public class cgeoApplicationTest extends CGeoTestCase { search = ConnectorFactory.searchByViewport(viewport, tokens); assertNotNull(search); assertTrue(search.getGeocodes().contains(mockedCache.getGeocode())); - - parsedCache = cgeoapplication.getInstance().loadCache(mockedCache.getGeocode(), LoadFlags.LOAD_CACHE_OR_DB); + parsedCache = cgData.loadCache(mockedCache.getGeocode(), LoadFlags.LOAD_CACHE_OR_DB); assertEquals(Settings.isPremiumMember(), mockedCache.getCoords().equals(parsedCache.getCoords())); assertEquals(Settings.isPremiumMember(), parsedCache.isReliableLatLon()); @@ -302,6 +302,7 @@ public class cgeoApplicationTest extends CGeoTestCase { // restore user settings Settings.setExcludeMine(excludeMine); Settings.setLiveMapStrategy(strategy); + Settings.setCacheType(cacheType); } } @@ -316,6 +317,7 @@ public class cgeoApplicationTest extends CGeoTestCase { Strategy strategy = Settings.getLiveMapStrategy(); Strategy testStrategy = Strategy.FAST; // FASTEST, FAST or DETAILED for tests Settings.setLiveMapStrategy(testStrategy); + final CacheType cacheType = Settings.getCacheType(); try { @@ -325,6 +327,7 @@ public class cgeoApplicationTest extends CGeoTestCase { MockedCache cache = new GC2CJPF(); deleteCacheFromDBAndLogout(cache.getGeocode()); Tile.Cache.removeFromTileCache(cache); + Settings.setCacheType(CacheType.ALL); Viewport viewport = new Viewport(cache, 0.003, 0.003); SearchResult search = ConnectorFactory.searchByViewport(viewport, tokens); @@ -332,7 +335,7 @@ public class cgeoApplicationTest extends CGeoTestCase { assertNotNull(search); assertTrue(search.getGeocodes().contains(cache.getGeocode())); // coords differ - cgCache cacheFromViewport = cgeoapplication.getInstance().loadCache(cache.getGeocode(), LoadFlags.LOAD_CACHE_OR_DB); + cgCache cacheFromViewport = cgData.loadCache(cache.getGeocode(), LoadFlags.LOAD_CACHE_OR_DB); Log.d("cgeoApplicationTest.testSearchByViewportNotLoggedIn: Coords expected = " + cache.getCoords()); Log.d("cgeoApplicationTest.testSearchByViewportNotLoggedIn: Coords actual = " + cacheFromViewport.getCoords()); assertFalse(cache.getCoords().isEqualTo(cacheFromViewport.getCoords(), 1e-3)); @@ -356,6 +359,7 @@ public class cgeoApplicationTest extends CGeoTestCase { Settings.setMemberStatus(memberStatus); Login.login(); Settings.setLiveMapStrategy(strategy); + Settings.setCacheType(cacheType); } } @@ -390,7 +394,7 @@ public class cgeoApplicationTest extends CGeoTestCase { /** Remove cache from DB and cache to ensure that the cache is not loaded from the database */ private static void deleteCacheFromDB(String geocode) { - cgeoapplication.getInstance().removeCache(geocode, LoadFlags.REMOVE_ALL); + cgData.removeCache(geocode, LoadFlags.REMOVE_ALL); } /** Remove cache from DB and cache to ensure that the cache is not loaded from the database */ diff --git a/tests/src/cgeo/geocaching/compatibility/CompatibilityTest.java b/tests/src/cgeo/geocaching/compatibility/CompatibilityTest.java index 03034f8..35baa8c 100644 --- a/tests/src/cgeo/geocaching/compatibility/CompatibilityTest.java +++ b/tests/src/cgeo/geocaching/compatibility/CompatibilityTest.java @@ -11,7 +11,7 @@ public class CompatibilityTest extends ActivityInstrumentationTestCase2<cgeo> { private cgeo activity; public CompatibilityTest() { - super(cgeo.class); + super("cgeo.geocaching", cgeo.class); } @Override diff --git a/tests/src/cgeo/geocaching/connector/ConnectorFactoryTest.java b/tests/src/cgeo/geocaching/connector/ConnectorFactoryTest.java index 2bbe0d0..e8abb91 100644 --- a/tests/src/cgeo/geocaching/connector/ConnectorFactoryTest.java +++ b/tests/src/cgeo/geocaching/connector/ConnectorFactoryTest.java @@ -59,4 +59,10 @@ public class ConnectorFactoryTest extends AbstractResourceInstrumentationTestCas assertTrue(ConnectorFactory.getConnector(" OZ 12345 ") instanceof UnknownConnector); } + public static void testGetGeocodeFromUrl() { + assertEquals("GC34PLO", ConnectorFactory.getGeocodeFromURL("http://coord.info/GC34PLO")); + assertEquals("OX1234", ConnectorFactory.getGeocodeFromURL("http://www.opencaching.com/#!geocache/OX1234")); + // make sure that a mixture of different connector and geocode is recognized as invalid + assertNull(ConnectorFactory.getGeocodeFromURL("http://www.opencaching.com/#!geocache/" + "GC12345")); + } } diff --git a/tests/src/cgeo/geocaching/connector/gc/GCConnectorTest.java b/tests/src/cgeo/geocaching/connector/gc/GCConnectorTest.java index ca1c058..ec5ebe2 100644 --- a/tests/src/cgeo/geocaching/connector/gc/GCConnectorTest.java +++ b/tests/src/cgeo/geocaching/connector/gc/GCConnectorTest.java @@ -3,6 +3,7 @@ package cgeo.geocaching.connector.gc; import cgeo.geocaching.SearchResult; import cgeo.geocaching.Settings; import cgeo.geocaching.connector.ConnectorFactory; +import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.Viewport; import cgeo.geocaching.test.AbstractResourceInstrumentationTestCase; @@ -12,9 +13,11 @@ public class GCConnectorTest extends AbstractResourceInstrumentationTestCase { public static void testGetViewport() { // backup user settings final boolean excludeMine = Settings.isExcludeMyCaches(); + final CacheType cacheType = Settings.getCacheType(); try { // set up settings required for test Settings.setExcludeMine(false); + Settings.setCacheType(CacheType.ALL); Login.login(); String[] tokens = Login.getMapTokens(); @@ -37,6 +40,7 @@ public class GCConnectorTest extends AbstractResourceInstrumentationTestCase { } finally { // restore user settings Settings.setExcludeMine(excludeMine); + Settings.setCacheType(cacheType); } } @@ -72,5 +76,10 @@ public class GCConnectorTest extends AbstractResourceInstrumentationTestCase { assertEquals(x, tile.getX()); assertEquals(y, tile.getY()); } + + public static void testGetGeocodeFromUrl() { + assertNull(GCConnector.getInstance().getGeocodeFromUrl("some string")); + assertEquals("GC12ABC", GCConnector.getInstance().getGeocodeFromUrl("http://coord.info/GC12ABC")); + } } diff --git a/tests/src/cgeo/geocaching/connector/gc/IconDecoderTest.java b/tests/src/cgeo/geocaching/connector/gc/IconDecoderTest.java index 3fa17f8..46e64ef 100644 --- a/tests/src/cgeo/geocaching/connector/gc/IconDecoderTest.java +++ b/tests/src/cgeo/geocaching/connector/gc/IconDecoderTest.java @@ -15,10 +15,10 @@ public class IconDecoderTest extends AbstractResourceInstrumentationTestCase { final Bitmap bitmap = getBitmap(R.raw.tile14); Log.d("Bitmap=" + bitmap.getWidth() + "x" + bitmap.getHeight()); - assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 97, 136, 14).getType()); - assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 226, 104, 14).getType()); - assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 54, 97, 14).getType()); - assertTrue(parseMapPNG(bitmap, 119, 108, 14).isFound()); + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 88, 124, 14).getType()); + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 228, 104, 14).getType()); + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 52, 92, 14).getType()); + assertTrue(parseMapPNG(bitmap, 108, 112, 14).isFound()); } private Bitmap getBitmap(int resourceId) { @@ -73,9 +73,314 @@ public class IconDecoderTest extends AbstractResourceInstrumentationTestCase { tradi = parseMapPNG(bitmap, 117, 225, 12).getType() == CacheType.TRADITIONAL ? tradi + 1 : tradi; tradi = parseMapPNG(bitmap, 90, 107, 12).getType() == CacheType.TRADITIONAL ? tradi + 1 : tradi; + int found = 0; + found = parseMapPNG(bitmap, 150, 124, 12).isFound() ? found + 1 : found; + found = parseMapPNG(bitmap, 176, 82, 12).isFound() ? found + 1 : found; + found = parseMapPNG(bitmap, 240, 140, 12).isFound() ? found + 1 : found; + found = parseMapPNG(bitmap, 211, 127, 12).isFound() ? found + 1 : found; + assertEquals(7, multi); assertEquals(7, mystery); assertEquals(7, tradi); + assertEquals(4, found); + } + + public void testParseExtraMap1() { + final Bitmap bitmap = getBitmap(R.raw.map1); + assertTrue(parseMapPNG(bitmap, 128, 168, 12).isFound()); // GC3AT8B + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 172, 164, 12).getType()); // GC39EXB + assertTrue(parseMapPNG(bitmap, 164, 156, 12).isFound()); // GC30M7M + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 204, 72, 12).getType()); // GC3AN5Z + assertTrue(parseMapPNG(bitmap, 188, 92, 12).isFound()); // GC37T3R + assertTrue(parseMapPNG(bitmap, 164, 132, 12).isFound()); // GC34JME + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 176, 148, 12).getType()); // GC37TCY + assertEquals(CacheType.EARTH, parseMapPNG(bitmap, 180, 136, 12).getType()); // GC3947Z + assertTrue(parseMapPNG(bitmap, 164, 100, 12).isFound()); // GC2ZY3X + assertTrue(parseMapPNG(bitmap, 52, 104, 12).isFound()); // GC29RCW + assertTrue(parseMapPNG(bitmap, 168, 88, 12).isFound()); // GC264JZ + assertTrue(parseMapPNG(bitmap, 168, 140, 12).isFound()); // GC37RRV + } + + public void testParseExtraMap2() { + final Bitmap bitmap = getBitmap(R.raw.map2); + + assertTrue(parseMapPNG(bitmap, 132, 136, 12).isFound()); // GC3JDBW + assertTrue(parseMapPNG(bitmap, 68, 24, 12).isFound()); // GC2T0AH + assertTrue(parseMapPNG(bitmap, 176, 232, 12).isOwn()); // GC2RPBX + assertTrue(parseMapPNG(bitmap, 148, 60, 12).isFound()); // GC31FY6 + assertTrue(parseMapPNG(bitmap, 216, 20, 12).isFound()); // GC2KP3M + assertTrue(parseMapPNG(bitmap, 212, 184, 12).isOwn()); // GC30W3K + assertTrue(parseMapPNG(bitmap, 148, 72, 12).isOwn()); // GC2RPAZ + assertTrue(parseMapPNG(bitmap, 216, 48, 12).isOwn()); // GC2RP8W + assertTrue(parseMapPNG(bitmap, 212, 60, 12).isFound()); // GC3CC97 + assertTrue(parseMapPNG(bitmap, 148, 100, 12).isOwn()); // GC2RPAT + assertTrue(parseMapPNG(bitmap, 104, 136, 12).isFound()); // GC3AE31 + assertTrue(parseMapPNG(bitmap, 52, 96, 12).isOwn()); // GC2RPCH + assertTrue(parseMapPNG(bitmap, 172, 156, 12).isOwn()); // GC2RQ07 + assertTrue(parseMapPNG(bitmap, 116, 56, 12).isFound()); // GC3AYR2 + assertTrue(parseMapPNG(bitmap, 208, 68, 12).isOwn()); // GC2RP93 + assertTrue(parseMapPNG(bitmap, 200, 52, 12).isOwn()); // GC2RPAA + assertTrue(parseMapPNG(bitmap, 208, 44, 12).isFound()); // GC3HE15 + assertTrue(parseMapPNG(bitmap, 112, 76, 12).isOwn()); // GC2RPBE + assertTrue(parseMapPNG(bitmap, 232, 192, 12).isOwn()); // GC2E1KF + assertTrue(parseMapPNG(bitmap, 184, 76, 12).isFound()); // GC2NK5R + assertTrue(parseMapPNG(bitmap, 132, 148, 12).isOwn()); // GC2RPBC + } + + public void testParseExtraMap3() { + final Bitmap bitmap = getBitmap(R.raw.map3); + + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 44, 0, 12).getType()); // GC1THF5 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 176, 100, 12).getType()); // GC29EGE + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 212, 128, 12).getType()); // GC1VR64 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 220, 56, 12).getType()); // GC1M13A + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 120, 80, 12).getType()); // GC1ZA2Z + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 148, 56, 12).getType()); // GC1MRD8 + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 252, 8, 12).getType()); // GC3AGEX + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 76, 108, 12).getType()); // GC2C5RB + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 228, 188, 12).getType()); // GC33TWE + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 232, 128, 12).getType()); // GC38QDJ + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 228, 160, 12).getType()); // GC2G8M1 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 184, 64, 12).getType()); // GC2FYH4 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 60, 132, 12).getType()); // GC299CV + assertEquals(CacheType.EVENT, parseMapPNG(bitmap, 244, 124, 12).getType()); // GC3E5FW + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 200, 160, 12).getType()); // GC29NR9 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 216, 116, 12).getType()); // GC17P5R + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 144, 92, 12).getType()); // GC1WYN3 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 80, 4, 12).getType()); // GC2Z90W + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 216, 148, 12).getType()); // GC29M3P + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 176, 148, 12).getType()); // GC2HJ88 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 68, 72, 12).getType()); // GC1VRB4 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 232, 100, 12).getType()); // GC29EG4 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 220, 68, 12).getType()); // GC2YXH8 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 248, 156, 12).getType()); // GC1F277 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 208, 80, 12).getType()); // GC2NV6T + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 60, 92, 12).getType()); // GC2Y2YY + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 188, 168, 12).getType()); // GC26RT7 + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 224, 124, 12).getType()); // GC1ZBPC + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 144, 80, 12).getType()); // GC29NQJ + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 192, 124, 12).getType()); // GC1QRAP + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 104, 116, 12).getType()); // GC29NR1 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 240, 44, 12).getType()); // GC35KYR + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 168, 0, 12).getType()); // GC1VR78 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 200, 84, 12).getType()); // GC2YR8Z + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 52, 160, 12).getType()); // GC1MTD8 + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 236, 156, 12).getType()); // GCYW8A } + + public void testParseExtraMap4() { + final Bitmap bitmap = getBitmap(R.raw.map4); + + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 124, 84, 12).getType()); // GC2M3CD + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 92, 140, 12).getType()); // GC1W2A2 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 156, 108, 12).getType()); // GC3FR70 + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 44, 72, 12).getType()); // GC10W91 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 104, 36, 12).getType()); // GCRC1W + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 88, 36, 12).getType()); // GC30PQF + assertTrue(parseMapPNG(bitmap, 116, 36, 12).isFound()); // GC17VWA + assertEquals(CacheType.EARTH, parseMapPNG(bitmap, 28, 56, 12).getType()); // GC1E6A6 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 96, 72, 12).getType()); // GCMVAC + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 140, 48, 12).getType()); // GCZPE4 + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 88, 84, 12).getType()); // GC16G8B + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 116, 48, 12).getType()); // GCZPEB + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 148, 8, 12).getType()); // GC19QQ4 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 68, 124, 12).getType()); // GCXJGD + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 88, 156, 12).getType()); // GC1VNAE + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 24, 24, 12).getType()); // GC1AY4H + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 180, 60, 12).getType()); // GC3K4HB + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 56, 104, 12).getType()); // GC2M4EH + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 12, 132, 12).getType()); // GC2B92G + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 240, 180, 12).getType()); // GC2YJ88 + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 220, 140, 12).getType()); // GC2AWBC + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 124, 44, 12).getType()); // GC16V66 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 116, 104, 12).getType()); // GC2MN5V + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 212, 4, 12).getType()); // GC3BF7V + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 168, 40, 12).getType()); // GC1PB21 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 252, 56, 12).getType()); // GC22VTB + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 108, 64, 12).getType()); // GCVE3B + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 20, 140, 12).getType()); // GC1R041 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 124, 244, 12).getType()); // GC3DWEA + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 240, 136, 12).getType()); // GC249ZE + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 124, 56, 12).getType()); // GC1X0XJ + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 56, 16, 12).getType()); // GC2ZVGB + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 164, 164, 12).getType()); // GC3D65W + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 240, 128, 12).getType()); // GC33KV9 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 220, 244, 12).getType()); // GC21VT0 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 84, 24, 12).getType()); // GC1949K + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 104, 88, 12).getType()); // GC1FKZY + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 56, 248, 12).getType()); // GC2Y5Z4 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 72, 32, 12).getType()); // GC395J6 + assertTrue(parseMapPNG(bitmap, 180, 4, 12).isFound()); // GC21MFG + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 96, 100, 12).getType()); // GC1W45E + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 144, 160, 12).getType()); // GC37BA1 + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 12, 4, 12).getType()); // GC1K8KR + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 172, 92, 12).getType()); // GC3EZZ4 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 188, 132, 12).getType()); // GC26T9J + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 68, 192, 12).getType()); // GC1ZAMG + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 176, 180, 12).getType()); // GC21EZE + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 172, 76, 12).getType()); // GC1G5PT + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 208, 112, 12).getType()); // GC132VV + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 156, 40, 12).getType()); // GC264J4 + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 252, 140, 12).getType()); // GC2JBNE + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 112, 76, 12).getType()); // GC16VKJ + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 16, 156, 12).getType()); // GC2ADX3 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 68, 48, 12).getType()); // GC2AZT1 + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 176, 252, 12).getType()); // GC3DWNM + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 4, 156, 12).getType()); // GC30VHE + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 156, 120, 12).getType()); // GC1T9WM + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 40, 48, 12).getType()); // GC30MTZ + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 180, 232, 12).getType()); // GC2XVQA + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 72, 92, 12).getType()); // GC1VVA9 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 0, 132, 12).getType()); // GC1XNN4 + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 92, 192, 12).getType()); // GC11D9P + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 52, 84, 12).getType()); // GC2M693 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 176, 196, 12).getType()); // GCZHVE + assertTrue(parseMapPNG(bitmap, 140, 108, 12).isFound()); // GC1Q5PW + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 108, 148, 12).getType()); // GC2ZR0C + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 168, 8, 12).getType()); // GCYWQH + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 196, 92, 12).getType()); // GC39VXN + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 148, 136, 12).getType()); // GC2MM6C + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 168, 28, 12).getType()); // GC2H1TG + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 240, 52, 12).getType()); // GC2QTXT + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 152, 148, 12).getType()); // GC3E7QD + assertTrue(parseMapPNG(bitmap, 160, 60, 12).isFound()); // GC2J3G9 + assertTrue(parseMapPNG(bitmap, 160, 100, 12).isFound()); // GC2327G + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 136, 32, 12).getType()); // GC2JVEH + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 208, 164, 12).getType()); // GC1NN15 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 84, 244, 12).getType()); // GC3E5JP + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 172, 16, 12).getType()); // GC1Z581 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 104, 20, 12).getType()); // GC2MENX + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 144, 60, 12).getType()); // GC1V3MG + assertTrue(parseMapPNG(bitmap, 228, 56, 12).isFound()); // GC36WZN + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 144, 212, 12).getType()); // GCR9GB + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 180, 68, 12).getType()); // GC3JZ1K + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 228, 104, 12).getType()); // GCQ95T + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 84, 220, 12).getType()); // GCWTVM + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 200, 228, 12).getType()); // GC3CC1A + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 204, 56, 12).getType()); // GC1K0WX + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 244, 208, 12).getType()); // GC1JVXG + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 84, 128, 12).getType()); // GC2XQ6C + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 248, 164, 12).getType()); // GC3B1JK + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 232, 84, 12).getType()); // GC3AT8J + assertTrue(parseMapPNG(bitmap, 160, 88, 12).isFound()); // GC2MB4P + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 132, 20, 12).getType()); // GC2NW3F + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 56, 132, 12).getType()); // GC22ERA + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 28, 32, 12).getType()); // GC2EFFK + } + + public void testParseExtraMap5() { + final Bitmap bitmap = getBitmap(R.raw.map5); + + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 60, 32, 12).getType()); // GC31DNK + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 200, 120, 12).getType()); // GCP89K + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 144, 152, 12).getType()); // GC22AR8 + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 164, 92, 12).getType()); // GC1MFB7 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 16, 212, 12).getType()); // GC12F2K + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 188, 12, 12).getType()); // GC24J14 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 36, 72, 12).getType()); // GC2J8MY + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 152, 140, 12).getType()); // GC1H9WQ + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 44, 40, 12).getType()); // GC31DNZ + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 8, 152, 12).getType()); // GC34YFB + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 200, 216, 12).getType()); // GC30MK5 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 84, 20, 12).getType()); // GC304YY + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 192, 236, 12).getType()); // GC1D6AC + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 220, 48, 12).getType()); // GC1HQ8Y + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 136, 176, 12).getType()); // GC310B7 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 132, 232, 12).getType()); // GC12CR5 + assertTrue(parseMapPNG(bitmap, 240, 40, 12).isFound()); // GC24GW1 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 140, 116, 12).getType()); // GC2YYE7 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 124, 144, 12).getType()); // GC111RZ + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 48, 128, 12).getType()); // GC13A7V + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 136, 92, 12).getType()); // GC2BKW9 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 200, 184, 12).getType()); // GC30X0C + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 156, 200, 12).getType()); // GC17V4A + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 160, 120, 12).getType()); // GC2ZBWW + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 196, 36, 12).getType()); // GC14X25 + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 192, 100, 12).getType()); // GC1HXAX + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 108, 168, 12).getType()); // GC3C043 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 232, 28, 12).getType()); // GC1TEAR + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 200, 204, 12).getType()); // GC3AKFV + assertTrue(parseMapPNG(bitmap, 228, 28, 12).isFound()); // GC2NMPR + //assertEquals(CacheType.VIRTUAL, parseMapPNG(bitmap, 232, 252, 12).getType()); // GC1AH0N - False detection + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 220, 188, 12).getType()); // GC1ZXDK + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 168, 212, 12).getType()); // GC3A919 + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 152, 176, 12).getType()); // GC196WN + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 144, 180, 12).getType()); // GC12RE5 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 176, 116, 12).getType()); // GC1DY2M + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 44, 212, 12).getType()); // GC3MRNT + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 220, 36, 12).getType()); // GC3CWZD + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 48, 160, 12).getType()); // GC1A8E3 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 8, 252, 12).getType()); // GC10W6W + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 60, 92, 12).getType()); // GC2D9DD + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 96, 164, 12).getType()); // GC1Z4QX + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 220, 252, 12).getType()); // GCNEGK + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 32, 188, 12).getType()); // GC10916 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 204, 224, 12).getType()); // GC1CA2Y + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 120, 236, 12).getType()); // GC11B3J + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 248, 24, 12).getType()); // GCKX8C + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 128, 152, 12).getType()); // GC2V6AA + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 196, 48, 12).getType()); // GC2YG95 + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 48, 64, 12).getType()); // GCHGR8 + assertEquals(CacheType.EVENT, parseMapPNG(bitmap, 188, 96, 12).getType()); // GC3KBPK + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 208, 140, 12).getType()); // GC1C9B0 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 164, 100, 12).getType()); // GC29JGA + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 156, 28, 12).getType()); // GCN690 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 232, 20, 12).getType()); // GC18Z53 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 220, 152, 12).getType()); // GC18RB6 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 200, 248, 12).getType()); // GC2378H + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 248, 244, 12).getType()); // GCV8QA + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 12, 232, 12).getType()); // GC2MXDG + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 48, 248, 12).getType()); // GCTHJR + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 216, 200, 12).getType()); // GC1EPM5 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 232, 60, 12).getType()); // GC2N0PB + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 88, 56, 12).getType()); // GC1ZWNX + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 248, 56, 12).getType()); // GC1N11P + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 100, 180, 12).getType()); // GCM6AE + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 220, 124, 12).getType()); // GC2A1RQ + assertTrue(parseMapPNG(bitmap, 212, 4, 12).isFound()); // GC1TVKE + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 28, 212, 12).getType()); // GC2A1RR + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 128, 84, 12).getType()); // GC16AWC + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 220, 16, 12).getType()); // GC282V9 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 112, 240, 12).getType()); // GC18VT5 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 80, 248, 12).getType()); // GC10YEK + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 224, 228, 12).getType()); // GC1EA70 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 232, 244, 12).getType()); // GC14PNY + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 108, 32, 12).getType()); // GC2MMPN + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 144, 188, 12).getType()); // GC1CCF4 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 228, 208, 12).getType()); // GCV8C2 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 104, 252, 12).getType()); // GCTRPF + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 176, 92, 12).getType()); // GCRF8G + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 120, 140, 12).getType()); // GC210B9 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 204, 240, 12).getType()); // GC16NTW + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 192, 224, 12).getType()); // GC2PTVN + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 76, 116, 12).getType()); // GC1RPG0 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 144, 200, 12).getType()); // GC1FZ4T + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 172, 36, 12).getType()); // GC1ZYG8 + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 248, 196, 12).getType()); // GC17FJQ + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 88, 140, 12).getType()); // GC1KWK0 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 168, 196, 12).getType()); // GC17MNG + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 20, 252, 12).getType()); // GC13M6V + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 120, 172, 12).getType()); // GC3B30A + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 104, 92, 12).getType()); // GC2GY9D + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 128, 120, 12).getType()); // GC2Y90M + assertTrue(parseMapPNG(bitmap, 204, 40, 12).isFound()); // GC1BZ6P + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 56, 76, 12).getType()); // GC10K7X + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 196, 108, 12).getType()); // GC1F0R5 + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 120, 196, 12).getType()); // GC1KQQW + } + + public void testParseExtraMap11() { + final Bitmap bitmap = getBitmap(R.raw.map11); + assertEquals(CacheType.EVENT, parseMapPNG(bitmap, 132, 16, 11).getType()); + assertEquals(CacheType.MULTI, parseMapPNG(bitmap, 104, 48, 11).getType()); + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 128, 124, 11).getType()); + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 228, 8, 11).getType()); + assertEquals(CacheType.TRADITIONAL, parseMapPNG(bitmap, 160, 156, 11).getType()); + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 208, 176, 11).getType()); + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 252, 24, 11).getType()); + assertEquals(CacheType.MYSTERY, parseMapPNG(bitmap, 216, 96, 11).getType()); + assertEquals(CacheType.EARTH, parseMapPNG(bitmap, 24, 212, 11).getType()); + } + } diff --git a/tests/src/cgeo/geocaching/connector/gc/TrackablesTest.java b/tests/src/cgeo/geocaching/connector/gc/TrackablesTest.java index 319a3b2..357c0cc 100644 --- a/tests/src/cgeo/geocaching/connector/gc/TrackablesTest.java +++ b/tests/src/cgeo/geocaching/connector/gc/TrackablesTest.java @@ -2,6 +2,7 @@ package cgeo.geocaching.connector.gc; import cgeo.geocaching.LogEntry; import cgeo.geocaching.TrackableLog; +import cgeo.geocaching.cgImage; import cgeo.geocaching.cgTrackable; import cgeo.geocaching.test.AbstractResourceInstrumentationTestCase; import cgeo.geocaching.test.R; @@ -44,15 +45,29 @@ public class TrackablesTest extends AbstractResourceInstrumentationTestCase { assertEquals("TBXATG", trackable.getGeocode()); List<LogEntry> log = trackable.getLogs(); - // second log entry has several images; just check first two - assertEquals("http://img.geocaching.com/track/log/large/f2e24c50-394c-4d74-8fb4-87298d8bff1d.jpg", log.get(4).getLogImages().get(0).getUrl()); - assertEquals("7b Welcome to Geowoodstock", log.get(4).getLogImages().get(0).getTitle()); - assertEquals("http://img.geocaching.com/track/log/large/b57c29c3-134e-4202-a2a1-69ce8920b055.jpg", log.get(4).getLogImages().get(1).getUrl()); - assertEquals("8 Crater Lake Natl Park Oregon", log.get(4).getLogImages().get(1).getTitle()); + assertNotNull(log); + assertEquals(10, log.size()); + // log entry 4 has several images; just check first two + + final List<cgImage> log4Images = log.get(4).getLogImages(); + assertNotNull(log4Images); + assertEquals(5, log4Images.size()); + assertEquals("http://img.geocaching.com/track/log/large/f2e24c50-394c-4d74-8fb4-87298d8bff1d.jpg", log4Images.get(0).getUrl()); + assertEquals("7b Welcome to Geowoodstock", log4Images.get(0).getTitle()); + assertEquals("http://img.geocaching.com/track/log/large/b57c29c3-134e-4202-a2a1-69ce8920b055.jpg", log4Images.get(1).getUrl()); + assertEquals("8 Crater Lake Natl Park Oregon", log4Images.get(1).getTitle()); // third log entry has one image - assertEquals("http://img.geocaching.com/track/log/large/0096b42d-4d10-45fa-9be2-2d08c0d5cc61.jpg", log.get(5).getLogImages().get(0).getUrl()); - assertEquals("Traverski's GC Univ coin on tour", log.get(5).getLogImages().get(0).getTitle()); + final List<cgImage> log5Images = log.get(5).getLogImages(); + assertNotNull(log5Images); + assertEquals(1, log5Images.size()); + assertEquals("http://img.geocaching.com/track/log/large/0096b42d-4d10-45fa-9be2-2d08c0d5cc61.jpg", log5Images.get(0).getUrl()); + assertEquals("Traverski's GC Univ coin on tour", log5Images.get(0).getTitle()); + + for (LogEntry entry : log) { + assertFalse(entry.log.startsWith("<div>")); + } + assertEquals("traveling", log.get(0).log); } public void testParseTrackableWithoutReleaseDate() { diff --git a/tests/src/cgeo/geocaching/connector/opencaching/OkapiClientTest.java b/tests/src/cgeo/geocaching/connector/opencaching/OkapiClientTest.java index 5576028..0519b58 100644 --- a/tests/src/cgeo/geocaching/connector/opencaching/OkapiClientTest.java +++ b/tests/src/cgeo/geocaching/connector/opencaching/OkapiClientTest.java @@ -2,7 +2,7 @@ package cgeo.geocaching.connector.opencaching; import cgeo.CGeoTestCase; import cgeo.geocaching.cgCache; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.cgData; import cgeo.geocaching.connector.oc.OkapiClient; import cgeo.geocaching.enumerations.LoadFlags; @@ -15,9 +15,8 @@ public class OkapiClientTest extends CGeoTestCase { assertEquals(geoCode, cache.getGeocode()); assertEquals("Oshkosh Municipal Tank", cache.getName()); assertTrue(cache.isDetailed()); - // cache should be stored to DB (to listID 0) when loaded above - cache = cgeoapplication.getInstance().loadCache(geoCode, LoadFlags.LOAD_ALL_DB_ONLY); + cache = cgData.loadCache(geoCode, LoadFlags.LOAD_ALL_DB_ONLY); assertNotNull(cache); assertEquals(geoCode, cache.getGeocode()); assertEquals("Oshkosh Municipal Tank", cache.getName()); diff --git a/tests/src/cgeo/geocaching/enumerations/CacheSizeTest.java b/tests/src/cgeo/geocaching/enumerations/CacheSizeTest.java index c872c9d..9c3063d 100644 --- a/tests/src/cgeo/geocaching/enumerations/CacheSizeTest.java +++ b/tests/src/cgeo/geocaching/enumerations/CacheSizeTest.java @@ -2,6 +2,8 @@ package cgeo.geocaching.enumerations; import android.test.AndroidTestCase; +import java.util.Locale; + public class CacheSizeTest extends AndroidTestCase { public static void testOrder() { @@ -15,13 +17,14 @@ public class CacheSizeTest extends AndroidTestCase { assertEquals(CacheSize.UNKNOWN, CacheSize.getById(null)); assertEquals(CacheSize.UNKNOWN, CacheSize.getById("random garbage")); assertEquals(CacheSize.LARGE, CacheSize.getById("large")); + assertEquals(CacheSize.LARGE, CacheSize.getById("LARGE")); } public static void testGetByIdComplete() { for (CacheSize size : CacheSize.values()) { assertEquals(size, CacheSize.getById(size.id)); - assertEquals(size, CacheSize.getById(size.id.toLowerCase())); - assertEquals(size, CacheSize.getById(size.id.toUpperCase())); + assertEquals(size, CacheSize.getById(size.id.toLowerCase(Locale.US))); + assertEquals(size, CacheSize.getById(size.id.toUpperCase(Locale.US))); } } } diff --git a/tests/src/cgeo/geocaching/enumerations/CacheTypeTest.java b/tests/src/cgeo/geocaching/enumerations/CacheTypeTest.java index dd35669..21e97c0 100644 --- a/tests/src/cgeo/geocaching/enumerations/CacheTypeTest.java +++ b/tests/src/cgeo/geocaching/enumerations/CacheTypeTest.java @@ -2,6 +2,8 @@ package cgeo.geocaching.enumerations; import android.test.AndroidTestCase; +import java.util.Locale; + public class CacheTypeTest extends AndroidTestCase { public static void testGetById() { @@ -21,16 +23,16 @@ public class CacheTypeTest extends AndroidTestCase { public static void testGetByIdComplete() { for (CacheType type : CacheType.values()) { assertEquals(type, CacheType.getById(type.id)); - assertEquals(type, CacheType.getById(type.id.toLowerCase())); - assertEquals(type, CacheType.getById(type.id.toUpperCase())); + assertEquals(type, CacheType.getById(type.id.toLowerCase(Locale.US))); + assertEquals(type, CacheType.getById(type.id.toUpperCase(Locale.US))); } } public static void testGetByPatternComplete() { for (CacheType type : CacheType.values()) { assertEquals(type, CacheType.getByPattern(type.pattern)); - assertEquals(type, CacheType.getByPattern(type.pattern.toLowerCase())); - assertEquals(type, CacheType.getByPattern(type.pattern.toUpperCase())); + assertEquals(type, CacheType.getByPattern(type.pattern.toLowerCase(Locale.US))); + assertEquals(type, CacheType.getByPattern(type.pattern.toUpperCase(Locale.US))); } } } diff --git a/tests/src/cgeo/geocaching/enumerations/LogTypeTest.java b/tests/src/cgeo/geocaching/enumerations/LogTypeTest.java index 44f464e..81ca33b 100644 --- a/tests/src/cgeo/geocaching/enumerations/LogTypeTest.java +++ b/tests/src/cgeo/geocaching/enumerations/LogTypeTest.java @@ -19,7 +19,8 @@ public class LogTypeTest extends AndroidTestCase { public static void testGetByType() { assertEquals(LogType.UNKNOWN, LogType.getByIconName("")); assertEquals(LogType.UNKNOWN, LogType.getByIconName(null)); - assertEquals(LogType.GRABBED_IT, LogType.getByType("grabbed IT ")); + assertEquals(LogType.GRABBED_IT, LogType.getByType("grabbed it")); + assertEquals(LogType.GRABBED_IT, LogType.getByType(" gRAbbed IT ")); } } diff --git a/tests/src/cgeo/geocaching/export/ExportTest.java b/tests/src/cgeo/geocaching/export/ExportTest.java index 5d3d137..cdd64b2 100644 --- a/tests/src/cgeo/geocaching/export/ExportTest.java +++ b/tests/src/cgeo/geocaching/export/ExportTest.java @@ -13,7 +13,7 @@ public class ExportTest extends CGeoTestCase { final LogEntry log = new LogEntry(1353244820000L, LogType.FOUND_IT, "Hidden in a tree"); final StringBuilder logStr = new StringBuilder(); FieldnoteExport.appendFieldNote(logStr, cache, log); - assertEquals("GCX1234,2012-11-18T14:20:20Z,Found it,\"Hidden in a tree\"\n", logStr.toString()); + assertEquals("Non matching export " + logStr.toString(), "GCX1234,2012-11-18T13:20:20Z,Found it,\"Hidden in a tree\"\n", logStr.toString()); } } diff --git a/tests/src/cgeo/geocaching/files/GPXImporterTest.java b/tests/src/cgeo/geocaching/files/GPXImporterTest.java index da99c11..8c05ee0 100644 --- a/tests/src/cgeo/geocaching/files/GPXImporterTest.java +++ b/tests/src/cgeo/geocaching/files/GPXImporterTest.java @@ -3,7 +3,7 @@ package cgeo.geocaching.files; import cgeo.geocaching.SearchResult; import cgeo.geocaching.Settings; import cgeo.geocaching.cgCache; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.cgData; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.enumerations.LoadFlags; import cgeo.geocaching.test.AbstractResourceInstrumentationTestCase; @@ -71,8 +71,7 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase { assertEquals(GPXImporter.IMPORT_STEP_FINISHED, iMsg.next().what); SearchResult search = (SearchResult) importStepHandler.messages.get(3).obj; assertEquals(Collections.singletonList(geocode), new ArrayList<String>(search.getGeocodes())); - - cgCache cache = cgeoapplication.getInstance().loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); + cgCache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); assertCacheProperties(cache); assertTrue(cache.getWaypoints().isEmpty()); @@ -99,8 +98,7 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase { assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_READ_WPT_FILE, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED); SearchResult search = (SearchResult) importStepHandler.messages.get(4).obj; assertEquals(Collections.singletonList("GC31J2H"), new ArrayList<String>(search.getGeocodes())); - - cgCache cache = cgeoapplication.getInstance().loadCache("GC31J2H", LoadFlags.LOAD_CACHE_OR_DB); + cgCache cache = cgData.loadCache("GC31J2H", LoadFlags.LOAD_CACHE_OR_DB); assertCacheProperties(cache); assertEquals(2, cache.getWaypoints().size()); } @@ -113,8 +111,7 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase { runImportThread(importThread); assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED); - - final cgCache cache = cgeoapplication.getInstance().loadCache("AID1", LoadFlags.LOAD_CACHE_OR_DB); + final cgCache cache = cgData.loadCache("AID1", LoadFlags.LOAD_CACHE_OR_DB); assertCacheProperties(cache); assertEquals("First Aid Station #1", cache.getName()); } @@ -136,8 +133,7 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase { assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED); SearchResult search = (SearchResult) importStepHandler.messages.get(3).obj; assertEquals(Collections.singletonList("OC5952"), new ArrayList<String>(search.getGeocodes())); - - cgCache cache = cgeoapplication.getInstance().loadCache("OC5952", LoadFlags.LOAD_CACHE_OR_DB); + cgCache cache = cgData.loadCache("OC5952", LoadFlags.LOAD_CACHE_OR_DB); assertCacheProperties(cache); } @@ -179,8 +175,7 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase { assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED); SearchResult search = (SearchResult) importStepHandler.messages.get(3).obj; assertEquals(Collections.singletonList(geocode), new ArrayList<String>(search.getGeocodes())); - - cgCache cache = cgeoapplication.getInstance().loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); + cgCache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); assertCacheProperties(cache); assertTrue(cache.getWaypoints().isEmpty()); @@ -198,8 +193,7 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase { assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_READ_WPT_FILE, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED); SearchResult search = (SearchResult) importStepHandler.messages.get(4).obj; assertEquals(Collections.singletonList(geocode), new ArrayList<String>(search.getGeocodes())); - - cgCache cache = cgeoapplication.getInstance().loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); + cgCache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); assertCacheProperties(cache); assertEquals(1, cache.getWaypoints().size()); // this is the original pocket query result without test waypoint } @@ -225,8 +219,7 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase { assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_READ_WPT_FILE, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED); SearchResult search = (SearchResult) importStepHandler.messages.get(4).obj; assertEquals(Collections.singletonList(geocode), new ArrayList<String>(search.getGeocodes())); - - cgCache cache = cgeoapplication.getInstance().loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); + cgCache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); assertCacheProperties(cache); assertEquals(1, cache.getWaypoints().size()); // this is the original pocket query result without test waypoint } @@ -266,10 +259,9 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase { tempDir = new File(System.getProperty("java.io.tmpdir"), "cgeogpxesTest"); tempDir.mkdir(); - // workaround to get storage initialized - cgeoapplication.getInstance().getAllHistoricCachesCount(); - listId = cgeoapplication.getInstance().createList("cgeogpxesTest"); + cgData.getAllHistoryCachesCount(); + listId = cgData.createList("cgeogpxesTest"); importCacheStaticMaps = Settings.isStoreOfflineMaps(); Settings.setStoreOfflineMaps(true); @@ -279,11 +271,11 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase { @Override protected void tearDown() throws Exception { - SearchResult search = cgeoapplication.getInstance().getBatchOfStoredCaches(false, null, CacheType.ALL, listId); + SearchResult search = cgData.getBatchOfStoredCaches(null, CacheType.ALL, listId); List<cgCache> cachesInList = new ArrayList<cgCache>(); cachesInList.addAll(search.getCachesFromSearchResult(LoadFlags.LOAD_CACHE_OR_DB)); - cgeoapplication.getInstance().markDropped(cachesInList); - cgeoapplication.getInstance().removeList(listId); + cgData.markDropped(cachesInList); + cgData.removeList(listId); deleteDirectory(tempDir); Settings.setStoreOfflineMaps(importCacheStaticMaps); Settings.setStoreOfflineWpMaps(importWpStaticMaps); diff --git a/tests/src/cgeo/geocaching/files/GPXParserTest.java b/tests/src/cgeo/geocaching/files/GPXParserTest.java index 6c3c237..f6e6e66 100644 --- a/tests/src/cgeo/geocaching/files/GPXParserTest.java +++ b/tests/src/cgeo/geocaching/files/GPXParserTest.java @@ -4,8 +4,8 @@ import cgeo.geocaching.LogEntry; import cgeo.geocaching.SearchResult; import cgeo.geocaching.StoredList; import cgeo.geocaching.cgCache; +import cgeo.geocaching.cgData; import cgeo.geocaching.cgWaypoint; -import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.enumerations.CacheSize; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.enumerations.LoadFlags; @@ -24,10 +24,11 @@ import java.util.Collection; import java.util.EnumSet; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Set; public class GPXParserTest extends AbstractResourceInstrumentationTestCase { - private static final SimpleDateFormat LOG_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); // 2010-04-20T07:00:00Z + private static final SimpleDateFormat LOG_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US); // 2010-04-20T07:00:00Z private int listId; public void testGPXVersion100() throws Exception { @@ -212,7 +213,7 @@ public class GPXParserTest extends AbstractResourceInstrumentationTestCase { } } // reload caches, because the parser only returns the minimum version of each cache - return new ArrayList<cgCache>(cgeoapplication.getInstance().loadCaches(result, LoadFlags.LOAD_ALL_DB_ONLY)); + return new ArrayList<cgCache>(cgData.loadCaches(result, LoadFlags.LOAD_ALL_DB_ONLY)); } public static void testParseDateWithFractionalSeconds() { @@ -265,10 +266,9 @@ public class GPXParserTest extends AbstractResourceInstrumentationTestCase { removeCacheCompletely(geocode); final List<cgCache> caches = readGPX10(R.raw.lazy); assertEquals(1, caches.size()); - cgeoapplication.getInstance().removeAllFromCache(); - + cgData.removeAllFromCache(); // load only the minimum cache, it has several members missing - final cgCache minimalCache = cgeoapplication.getInstance().loadCache(geocode, EnumSet.of(LoadFlag.LOAD_DB_MINIMAL)); + final cgCache minimalCache = cgData.loadCache(geocode, EnumSet.of(LoadFlag.LOAD_DB_MINIMAL)); // now check that we load lazy members on demand assertFalse(minimalCache.getAttributes().isEmpty()); @@ -297,17 +297,17 @@ public class GPXParserTest extends AbstractResourceInstrumentationTestCase { @Override protected void setUp() throws Exception { super.setUp(); - listId = cgeoapplication.getInstance().createList("Temporary unit testing"); + listId = cgData.createList("Temporary unit testing"); assertTrue(listId != StoredList.TEMPORARY_LIST_ID); assertTrue(listId != StoredList.STANDARD_LIST_ID); } @Override protected void tearDown() throws Exception { - SearchResult search = cgeoapplication.getInstance().getBatchOfStoredCaches(false, null, CacheType.ALL, listId); + SearchResult search = cgData.getBatchOfStoredCaches(null, CacheType.ALL, listId); assertNotNull(search); - cgeoapplication.getInstance().removeCaches(search.getGeocodes(), LoadFlags.REMOVE_ALL); - cgeoapplication.getInstance().removeList(listId); + cgData.removeCaches(search.getGeocodes(), LoadFlags.REMOVE_ALL); + cgData.removeList(listId); super.tearDown(); } } diff --git a/tests/src/cgeo/geocaching/files/SimpleDirChooserUITest.java b/tests/src/cgeo/geocaching/files/SimpleDirChooserUITest.java new file mode 100644 index 0000000..80a2451 --- /dev/null +++ b/tests/src/cgeo/geocaching/files/SimpleDirChooserUITest.java @@ -0,0 +1,64 @@ +package cgeo.geocaching.files; + +import com.jayway.android.robotium.solo.Solo; + +import android.annotation.TargetApi; +import android.os.Build; +import android.test.ActivityInstrumentationTestCase2; +import android.widget.CheckBox; + +import java.util.ArrayList; + +@TargetApi(Build.VERSION_CODES.FROYO) +public class SimpleDirChooserUITest extends ActivityInstrumentationTestCase2<SimpleDirChooser> { + + private Solo solo; + + public SimpleDirChooserUITest() { + super(SimpleDirChooser.class); + } + + @Override + public void setUp() throws Exception { + solo = new Solo(getInstrumentation(), getActivity()); + } + + public void testSingleSelection() throws InterruptedException { + assertChecked("Newly opened activity", 0); + solo.scrollToBottom(); + final int lastIndex = solo.getCurrentCheckBoxes().size() - 1; + + solo.clickOnCheckBox(lastIndex); + assertTrue(solo.getCurrentCheckBoxes().get(lastIndex).isChecked()); + assertFalse(solo.getCurrentCheckBoxes().get(0).isChecked()); + assertChecked("Clicked last checkbox", 1); + + solo.scrollUp(); + Thread.sleep(20); + solo.scrollToBottom(); + Thread.sleep(20); + assertChecked("Refreshing last checkbox", 1); + + solo.scrollToTop(); + solo.clickOnCheckBox(0); + assertChecked("Clicked first checkbox", 1); + assertTrue(solo.getCurrentCheckBoxes().get(0).isChecked()); + solo.clickOnCheckBox(1); + assertChecked("Clicked second checkbox", 1); + assertTrue(solo.getCurrentCheckBoxes().get(1).isChecked()); + } + + private void assertChecked(String message, int expectedChecked) { + int checked = 0; + final ArrayList<CheckBox> boxes = solo.getCurrentCheckBoxes(); + assertNotNull("Could not get checkboxes", boxes); + assertTrue("There are no checkboxes", boxes.size() > 1); + for (CheckBox checkBox : boxes) { + if (checkBox.isChecked()) { + checked++; + } + } + assertEquals(message, expectedChecked, checked); + } + +} diff --git a/tests/src/cgeo/geocaching/test/AbstractResourceInstrumentationTestCase.java b/tests/src/cgeo/geocaching/test/AbstractResourceInstrumentationTestCase.java index 0d3d53b..cd8b5e7 100644 --- a/tests/src/cgeo/geocaching/test/AbstractResourceInstrumentationTestCase.java +++ b/tests/src/cgeo/geocaching/test/AbstractResourceInstrumentationTestCase.java @@ -1,6 +1,6 @@ package cgeo.geocaching.test; -import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.cgData; import cgeo.geocaching.enumerations.LoadFlags; import cgeo.geocaching.enumerations.LoadFlags.RemoveFlag; @@ -18,7 +18,7 @@ public abstract class AbstractResourceInstrumentationTestCase extends Instrument protected static void removeCacheCompletely(final String geocode) { final EnumSet<RemoveFlag> flags = EnumSet.copyOf(LoadFlags.REMOVE_ALL); flags.add(RemoveFlag.REMOVE_OWN_WAYPOINTS_ONLY_FOR_TESTING); - cgeoapplication.getInstance().removeCache(geocode, flags); + cgData.removeCache(geocode, flags); } protected InputStream getResourceStream(int resourceId) { |
