144 Commits

Author SHA1 Message Date
Christoph
cba387c832
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>
2024-03-26 19:06:19 +01:00
MM20
f2cb92dd2b
Remove Microsoft integration for good
Close #583
2023-12-23 17:00:33 +01:00
MM20
801caf9dd6
Plugins: bringup 2023-11-05 19:02:59 +01:00
MM20
e3005cf051
Move database module from :core to :data 2023-10-28 14:20:36 +02:00
MM20
2d5a0bf5a7
Modernize gradle scripts, migrate to TOML version catalog 2023-10-05 21:54:19 +02:00
MM20
6946175c29
Add emoji4j library 2023-08-26 23:23:21 +02:00
MM20
19c627e01a
Update Jetpack Compose 2023-08-26 17:46:21 +02:00
MM20
411628c607
Update libraries 2023-08-21 19:49:55 +02:00
MM20
039f49749f
Revert "Revert "Update Jetpack Compose""
This reverts commit 64c623c89967c1488ce2fb838fee4d87f1a0ed47.
2023-08-11 12:12:25 +02:00
MM20
64c623c899
Revert "Update Jetpack Compose"
This reverts commit 6d78e6c5984c7c4c78f4c74a72d1193031693d27.

https://issuetracker.google.com/issues/295214723
2023-08-11 11:48:22 +02:00
MM20
6d78e6c598
Update Jetpack Compose 2023-08-09 20:27:15 +02:00
MM20
8bca768197
Upgrade to Gradle 8 2023-08-06 16:28:57 +02:00
MM20
dee923233d
Update Kotlin and Compose 2023-08-06 14:54:03 +02:00
MM20
5556455832
Update Jetpack Compose, bump target SDK to 34 2023-06-22 16:19:09 +02:00
MM20
3c3fec4754
Update Jetpack Compose 2023-06-19 21:09:29 +02:00
MM20
65d15a950b
Update Jetpack Compose 2023-05-26 20:48:42 +02:00
MM20
5623b42542
Bump Kotlin to 1.8.21 and Compose compiler to 1.4.7
Close #396
2023-05-17 23:34:04 +02:00
MM20
864383ab2c
Update Jetpack Compose and Accompanist 2023-05-11 19:41:09 +02:00
MM20
2d184728db
Add plugin modules 2023-05-08 00:50:03 +02:00
MM20
617ac0f25f
Notes widget: add markdown support 2023-04-25 19:30:03 +02:00
MM20
d1482ad112
Get rid of LiveData 2023-04-20 21:50:03 +02:00
MM20
65426a8d9e
Update Jetpack Compose 2023-04-20 20:17:37 +02:00
MM20
e0515b4432
Update Gson 2023-04-17 18:03:27 +02:00
MM20
7bb16753e0
Rewrite color picker 2023-04-17 15:44:20 +02:00
MM20
64e7528cb0
Update and cleanup dependencies 2023-04-17 13:51:36 +02:00
MM20
ed70097c38
Refactor favorites and searchable database 2023-04-10 22:44:05 +02:00
MM20
3cda75bc77
Refactor widgets 2023-04-10 01:15:27 +02:00
MM20
057f0ff8fd
Update Jetpack Compose 2023-04-05 22:36:29 +02:00
MM20
6353b38a70
Update Accompanist 2023-04-04 19:44:28 +02:00
MM20
32bee8684e
Update Jetpack Compose and Accompanist 2023-04-02 18:40:26 +02:00
MM20
fc7fcd7553
Upgrade Jetpack Compose 2023-03-13 14:21:27 +01:00
MM20
57369f2736
Update Jetpack Compose 2023-03-01 21:26:23 +01:00
MM20
7168169e35
Restructure / cleanup / improve icon pack handling 2023-02-27 22:36:46 +01:00
MM20
5c690f7bc8
Migrate music widget from livedata to flow 2023-02-13 13:35:47 +01:00
MM20
e36f95f5ae
Revert "Remove compose material (2) library"
This reverts commit 91bb5a2096f30b144f7a0224519c9ce98572c4e1.
2023-02-08 20:51:35 +01:00
MM20
91bb5a2096
Remove compose material (2) library 2023-02-08 20:49:14 +01:00
MM20
3f2a7358c8
Update Kotlin, Jetpack Compose and Accompanist 2023-02-08 20:45:09 +01:00
MM20
6d0abb928e
Update Kotlin to 1.8.0 2023-01-23 20:18:28 +01:00
MM20
86b99ca1ef
Replace google-api-client-android with google-api-client 2023-01-19 17:02:06 +01:00
MM20
c12c07fa45
Gestures 2023-01-17 18:55:30 +01:00
MM20
50ee56ddf0
Update dependencies 2023-01-12 17:01:57 +01:00
MM20
ce3635070c
meh 2023-01-11 17:55:20 +01:00
MM20
a0db9c3371
Update libraries 2023-01-11 17:51:34 +01:00
MM20
3f8880a90a
Reorganize and group modules 2022-12-13 17:37:26 +01:00
MM20
f5068e6ef2
Update dependencies 2022-11-14 20:37:12 +01:00
MM20
f862a578a1
Add search quick actions 2022-11-03 20:01:24 +01:00
MM20
5163189789
typo 2022-10-25 19:27:07 +02:00
MM20
27a3de1ae2
Update Accompanist 2022-10-25 16:17:39 +02:00
MM20
ffd6f6e9d7
Update Jetpack Compose 2022-10-25 16:16:57 +02:00
MM20
fcd3e3c3ac
Update Kotlin and Jetpack Compose 2022-10-16 14:20:57 +02:00