Add OSM search provider (#611)
* add openstreetmaps module in data * fix injection * retrofit2 implementation * tokenization * partial rewrite of OpeningTime.fromOverpassElement * finish rewrite of OpeningTime.fromOverpassElement * fix merge x) * configurable search radius * add settings section and disable setting explicit timeout values for http-client to alleviate issues during debugging * settings screen localization * enable radius slider only when locations are enabled * fix dayRange parsing, add barebones UI * add files to git * add location listener in SearchableItemVM that gets activated by LocationItem * add heading listener * Calculations, UI additions * rename settings to LocationsSettings * use android location library for bearing calculations * location fix * rotation fix, demo UI * working buttons for launching map and website (if available) * finish botched UI * improve overpass query by utilizing regex for fuzzy search results * add link to documentation for further reference * localization comments * remove wikipedia minification setting * schema version, default radius 1.5km * move osm-specific opening-time parsing to OsmLocation * refactor with callbackFlow * remember flow and set minimum distance update to 1m * refactor for replacementIcon, add imperial unit option * 'open until' UI fix * implement serializers * catch errors in deserializer * hacky live sorting by distance * give max priority to bestmatch determined by SearchVM * add yards as additional step to metersToLocalizzedString * move http-client from serializers of osmlocation to companion object for cache updating * add setting for custom URL * round yards to int * add botched map preview * unbotch map tiles, draw user location in map (proof of concept) * - create MapTiles Composable - add border around map - add indicators for location and userlocation, when on map * fix default imperial units setting * fix tint color * add OSM attribution string * display loading animation when tiles can't be shown yet * create compose preview of maptiles * UI work * being glad that API's just return null instead of throwing information * tryStartActivity * aniimate card row placement * Text alignment, padding * Rotation -PI/PI wrap fix * fix direction arrow rotation when screen is upside down * more icons * icons, settings, localization - consider other tags than "amenity" when determining location category - add many more location categories with corresponding icons - add settings to disable map theming and hide search results with LocationCategory.OTHER - add default localizations for settings * catch errors when deserializing location category * move location and heading functions to Context.kt in extensions * fix hideUncategorized criterion * add pre-sorting by distance for location results in SearchVM by injecting Context into search() * specify receiver parameters in ktx.Context lambdas * move pose logic and context dependency to new module devicepose with DevicePoseProvider * git, add the frickin' module * search overpass for nodes and ways include category for parcel_locker already start searching for queries extending length 2 * make openingTimes immutable * OsmRepository changes - include telephone number - don't try to repeatedly update cache if there is no value to be updated to - deduplicate results with same label by category and distance (100m) - include fixmeurl to point to openstreetmaps.org/fixthemap * ask for center in overpass API to compute center coordinates of ways * search for brand * add chemist location category * restaurant / fastfood icon shenanigans * actually add the icons :| * add leisure tag for leisure:fitness_centre * return to 'open until'/'opens in'/'open next' * adding missing UI features - bug report dialog - call button if phone number exists - grid item popup * refactor to handle 24/7 locations more comfortably * hide hours in 'opens_in' when they are zero * show maptiles such that user is always in view * drawing adjustments * cache previous zoom level to speed up tile coordinate calculations * using remember * using MutableIntState * fix logic that determines whether tiles are loading * fix for numTiles == 9 * one plus one is two plus one makes three quick maths * animate user location indicator, remember calculations * fix off by one when determining next opening hour * second attempt to fix upside down arrow rotation (probably fine now) * logging * reconsider declination, inject samplingPeriod * undoing the merge undo * move localization string to i18n * revert reordering by distance * refactor .distanceTo * make Location abstract class to override compareTo with cached distance to correct sort order in search results * when it is if when you could use when * replace Pair with dataclass * condition check order * not creating objects with undefined locations, removing suspend from getCategory() * inject permissionsmanager as constructor parameter * Store OSM settings in decentralized datastore * Update searchable content in database on launch * Refactor, add mechanism to load updated searchable data lazily * Cache all OSM data in launcher database * Add pin to favorites button to location results * Add sealed class UpdateResult that is returned by awaiting updatedSelf of DeferredSearchable - update on success - set flag on temporarily unavailable (TODO add some UI indication) - delete and invalidate VM on permanently unavailable (Display some message window to user?) * Move sorting of Locations from OsmRepository to SearchVM using cached location in DevicePoseProvider, if available * make use of cached location in code * make use of DevicePoseProvider in WeatherRepository * inject via koin * increase getLocation().timeout() to 10 minutes since we are asking for locations only every hour, so 10 minutes seem reasonable (?) * poll new location every time * add icon for cached results where results are temporarily unavailable * Refactor DeferredSearchable to UpdatableSearchable that receives a closure to retrieve an updated self. - moved timestamp (formerly `updatedAt`) to UpdatableSearchable - moved logic whether to update searchable to `requestUpdatedSearchable` in SearchableItemVM, which gets triggered every time the details of the item are shown - keep track in SearchableVM whether we should retry updating, possibly bypassing a timestamp value that is not old enough - show toast upon permanently unavailable - animate "cached_searchable" icon - make "cached_searchable" icon clickable to show toast explaining the situation * logging on PermanentlyUnavailable * refactor OsmRepository.update() * MapTheming adjustments. There is now darkmode, hooray! * remove outdated comment * code tidying * remove unnecessary LaunchedEffect * make outdated badge only clickable when actually outdated * deserialize opening schedule * set deserialized props to null if strings are blank * also consider contact:* tagging scheme for website & phone * tweaks * git add Result.kt * don't search for locations if network is not allowed * merge fixes * Move location search settings to preferences module * Change wording and order of location search preferences * Limit location search results * Order location search results by distance * Use a sequence * Android Studio's suggestion wasn't as fleshed out as one would hope * Add proguard rules * Rename TileMapRepository to MapTileLoader --------- Co-authored-by: MM20 <15646950+MM2-0@users.noreply.github.com>
This commit is contained in:
@@ -193,6 +193,7 @@
|
||||
<string name="easter_egg_text">Tja, da sind Sie. Herzlichen Glückwunsch. War es das wert\?</string>
|
||||
<string name="missing_permission_calendar_widget">Kalender-Berechtigung gewähren, um Ihre nächsten Termine hier anzuzeigen.</string>
|
||||
<string name="missing_permission_calendar_search">Kalender-Berechtigung gewähren, um Termine zu durchsuchen.</string>
|
||||
<string name="missing_permission_location_search">Standortzugriff gewähren, um Orte zu finden.</string>
|
||||
<string name="missing_permission_contact_search">Kontakt-Berechtigung gewähren, um Kontakte zu durchsuchen.</string>
|
||||
<string name="missing_permission_files_search">Speicher-Berechtigung gewähren, um Fotos, Medien und Dokumente auf diesem Gerät zu durchsuchen.</string>
|
||||
<string name="close">Schließen</string>
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="en">
|
||||
<string name="location_open">Open</string>
|
||||
<string name="location_closed">Closed</string>
|
||||
<!-- Shown when a location search result is open until TIMESTAMP (hours:minutes) of the same day -->
|
||||
<string name="location_open_until">Open until %1$s</string>
|
||||
<!-- Shown when a location search result opens in TIMESPAN on the same day -->
|
||||
<string name="location_open_next">Opens in %1$s</string>
|
||||
<!-- Shown when a location search result opens next DAY-OF-WEEK -->
|
||||
<string name="location_open_next_day">Opens next %1$s</string>
|
||||
<!-- Name of the app -->
|
||||
<!-- Share something. Can be anything, an app, a website, a file, … -->
|
||||
<string name="menu_share">Share</string>
|
||||
@@ -20,6 +28,8 @@
|
||||
<!-- Open a file in the corresponding app -->
|
||||
<string name="menu_open_file">Open</string>
|
||||
<string name="menu_hide">Hide</string>
|
||||
<string name="menu_map">Map</string>
|
||||
<string name="menu_website">Website</string>
|
||||
<string name="menu_unhide">Don\'t hide</string>
|
||||
<!-- Shown in a snackbar after an item has been hidden. %1$s: label of the item -->
|
||||
<string name="msg_item_hidden">%1$s has been hidden.</string>
|
||||
@@ -413,6 +423,8 @@
|
||||
<string name="missing_permission_calendar_widget">Grant calendar permission to display upcoming appointments and events here.</string>
|
||||
<!-- Missing calendar permission, used in calendar search results -->
|
||||
<string name="missing_permission_calendar_search">Grant calendar permission to search your calendar.</string>
|
||||
<!-- Missing location permission, used in location search results -->
|
||||
<string name="missing_permission_location_search">Grant location permission to search nearby locations.</string>
|
||||
<!-- Missing files permission, used in files search results -->
|
||||
<string name="missing_permission_files_search">Grant storage permission to search photos, media and document on this device.</string>
|
||||
<!-- Missing files permission, used in contact search results -->
|
||||
@@ -640,7 +652,11 @@
|
||||
<string name="preference_search_wikipedia">Wikipedia</string>
|
||||
<string name="preference_search_wikipedia_summary">Search the free encyclopedia</string>
|
||||
<string name="preference_search_websites">Websites</string>
|
||||
<string name="preference_search_locations">Places</string>
|
||||
<string name="preference_search_locations_radius">Search radius</string>
|
||||
<string name="preference_search_websites_summary">Show a preview of a website if the search query is a URL</string>
|
||||
<string name="preference_search_locations_summary">Search the local area for shops and other places</string>
|
||||
<string name="preference_search_locations_show_position_on_map_summary">Show your own location in the map</string>
|
||||
<string name="preference_search_websearch">Web search</string>
|
||||
<string name="preference_search_websearch_summary">Show shortcuts to different search engines</string>
|
||||
<string name="preference_search_localfiles">Local files</string>
|
||||
@@ -857,6 +873,23 @@
|
||||
<!-- %1$s: app name -->
|
||||
<string name="shortcut_unavailable_description">This shortcut is unavailable because %1$s isn\'t the default launcher</string>
|
||||
<string name="preference_plugin_enable">Enable plugin</string>
|
||||
<string name="length_unit">Unit of length</string>
|
||||
<string name="imperial">Imperial</string>
|
||||
<string name="metric">Metric</string>
|
||||
<string name="preference_search_location_custom_overpass_url">Overpass URL</string>
|
||||
<string name="overpass_url">https://overpass-api.de</string>
|
||||
<string name="preference_search_locations_hide_uncategorized">Hide uncategorized locations</string>
|
||||
<string name="preference_search_locations_hide_uncategorized_summary">Show only results with well defined categories, like cafés or restaurants</string>
|
||||
<string name="preference_search_locations_show_map">Map</string>
|
||||
<string name="preference_search_locations_show_map_summary">Show a map preview for places</string>
|
||||
<string name="preference_search_locations_theme_map">Map theming</string>
|
||||
<string name="preference_search_locations_theme_map_summary">Apply the color scheme of the launcher to the map</string>
|
||||
<string name="preference_search_locations_show_position_on_map">Show location</string>
|
||||
<string name="preference_search_location_custom_tile_server_url">Tileserver URL</string>
|
||||
<string name="menu_dial">Dial</string>
|
||||
<string name="menu_bugreport">Bug Report</string>
|
||||
<string name="alert_bugreport">You have reached the bug-report dialog. In case the location result contains incorrect data, please double check with the provider and tap the link below if the issue is theirs. If this is not the case, please raise an issue on GitHub with the location that you were looking up!</string>
|
||||
<string name="location_open_24_7">Open 24/7</string>
|
||||
<string name="plugin_state_error">This plugin isn\'t working correctly</string>
|
||||
<string name="plugin_state_setup_required">You need to setup this plugin first</string>
|
||||
<string name="plugin_action_setup">Set up</string>
|
||||
@@ -865,4 +898,7 @@
|
||||
<string name="plugin_badge_official">Official</string>
|
||||
<string name="plugin_weather_provider_enable">Set as weather provider</string>
|
||||
<string name="plugin_weather_provider_enabled">Currently set as weather provider</string>
|
||||
<!-- the request to update the location item failed due to internet connectivity issues (keep it short, it is displayed as a toast) -->
|
||||
<string name="cached_searchable">This value is possibly outdated because of connectivity issues.</string>
|
||||
<string name="unavailable_searchable">This item does not exist anymore.</string>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user