2023-10-05 21:51:48 +02:00
|
|
|
[versions]
|
|
|
|
|
minSdk = "26"
|
|
|
|
|
compileSdk = "34"
|
|
|
|
|
targetSdk = "34"
|
|
|
|
|
|
2024-02-20 22:11:05 +01:00
|
|
|
pluginSdk = "1.0.0"
|
2024-02-06 00:25:16 +01:00
|
|
|
|
2023-10-05 21:51:48 +02:00
|
|
|
gradle = "8.1.2"
|
2024-02-02 22:26:02 +01:00
|
|
|
android-gradle-plugin = "8.2.2"
|
2023-10-05 21:51:48 +02:00
|
|
|
protobuf-gradle-plugin = "0.9.4"
|
|
|
|
|
ksp-gradle-plugin = "1.9.0-1.0.13"
|
|
|
|
|
|
2024-02-03 22:47:05 +01:00
|
|
|
kotlin = "1.9.22"
|
2023-10-05 21:51:48 +02:00
|
|
|
kotlinx-coroutines = "1.7.3"
|
|
|
|
|
kotlinx-immutable = "0.3.5"
|
2024-02-20 21:35:44 +01:00
|
|
|
kotlinx-serialization = "1.6.2"
|
2023-10-05 21:51:48 +02:00
|
|
|
|
|
|
|
|
jetbrains-markdown = "0.4.1"
|
|
|
|
|
|
2024-02-20 21:35:44 +01:00
|
|
|
androidx-compose = "1.7.0-alpha02"
|
|
|
|
|
androidx-compose-material3 = "1.2.0"
|
2024-02-03 22:47:05 +01:00
|
|
|
androidx-compose-compiler = "1.5.8"
|
|
|
|
|
androidx-lifecycle = "2.7.0"
|
2023-10-06 12:46:16 +02:00
|
|
|
androidx-core = "1.12.0"
|
2023-10-05 21:51:48 +02:00
|
|
|
androidx-appcompat = "1.7.0-alpha03"
|
2024-02-03 22:47:05 +01:00
|
|
|
androidx-activity = "1.8.2"
|
|
|
|
|
androidx-work = "2.9.0"
|
|
|
|
|
androidx-browser = "1.7.0"
|
2023-10-05 21:51:48 +02:00
|
|
|
androidx-palette = "1.0.0"
|
2024-02-03 22:47:05 +01:00
|
|
|
androidx-media2 = "1.3.0"
|
|
|
|
|
androidx-room = "2.6.1"
|
2023-10-05 21:51:48 +02:00
|
|
|
|
2023-10-06 12:46:16 +02:00
|
|
|
accompanist = "0.33.2-alpha"
|
2023-10-05 21:51:48 +02:00
|
|
|
coil = "2.3.0"
|
|
|
|
|
koin = "3.2.0"
|
|
|
|
|
protobuf = "3.14.0"
|
|
|
|
|
retrofit = "2.9.0"
|
2024-02-20 21:35:44 +01:00
|
|
|
junit = "4.13.2"
|
2023-11-05 19:01:57 +01:00
|
|
|
junitVersion = "1.1.5"
|
|
|
|
|
espressoCore = "3.5.1"
|
2023-10-05 21:51:48 +02:00
|
|
|
|
|
|
|
|
[libraries]
|
|
|
|
|
gradle = { group = "com.android.tools.build", name = "gradle", version.ref = "android-gradle-plugin" }
|
|
|
|
|
|
|
|
|
|
kotlin-stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib", version.ref = "kotlin" }
|
|
|
|
|
kotlin-gradle = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" }
|
|
|
|
|
kotlinx-coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" }
|
|
|
|
|
kotlinx-coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "kotlinx-coroutines" }
|
|
|
|
|
kotlinx-collections-immutable = { group = "org.jetbrains.kotlinx", name = "kotlinx-collections-immutable", version.ref = "kotlinx-immutable" }
|
|
|
|
|
kotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinx-serialization" }
|
|
|
|
|
|
|
|
|
|
markdown = { group = "org.jetbrains", name = "markdown", version.ref = "jetbrains-markdown" }
|
|
|
|
|
|
|
|
|
|
androidx-compose-runtime = { group = "androidx.compose.runtime", name = "runtime", version.ref = "androidx-compose" }
|
|
|
|
|
androidx-compose-foundation = { group = "androidx.compose.foundation", name = "foundation", version.ref = "androidx-compose" }
|
|
|
|
|
androidx-compose-foundationlayout = { group = "androidx.compose.foundation", name = "foundation-layout", version.ref = "androidx-compose" }
|
|
|
|
|
androidx-compose-ui = { group = "androidx.compose.ui", name = "ui", version.ref = "androidx-compose" }
|
|
|
|
|
androidx-compose-uitooling = { group = "androidx.compose.ui", name = "ui-tooling", version.ref = "androidx-compose" }
|
|
|
|
|
androidx-compose-material = { group = "androidx.compose.material", name = "material", version.ref = "androidx-compose" }
|
|
|
|
|
androidx-compose-materialicons = { group = "androidx.compose.material", name = "material-icons-extended", version.ref = "androidx-compose" }
|
|
|
|
|
androidx-compose-animation = { group = "androidx.compose.animation", name = "animation", version.ref = "androidx-compose" }
|
|
|
|
|
androidx-compose-animationgraphics = { group = "androidx.compose.animation", name = "animation-graphics", version.ref = "androidx-compose" }
|
|
|
|
|
androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "androidx-compose-material3" }
|
|
|
|
|
|
|
|
|
|
androidx-lifecycle-viewmodel = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-ktx", version.ref = "androidx-lifecycle" }
|
|
|
|
|
androidx-lifecycle-common = { group = "androidx.lifecycle", name = "lifecycle-common-java8", version.ref = "androidx-lifecycle" }
|
|
|
|
|
androidx-lifecycle-runtime = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "androidx-lifecycle" }
|
|
|
|
|
androidx-lifecycle-viewmodelcompose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" }
|
|
|
|
|
androidx-lifecycle-runtimecompose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "androidx-lifecycle" }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "androidx-activity" }
|
|
|
|
|
androidx-activitycompose = { group = "androidx.activity", name = "activity-compose", version.ref = "androidx-activity" }
|
|
|
|
|
|
|
|
|
|
androidx-room = { group = "androidx.room", name = "room-ktx", version.ref = "androidx-room" }
|
|
|
|
|
androidx-roomruntime = { group = "androidx.room", name = "room-runtime", version.ref = "androidx-room" }
|
|
|
|
|
androidx-roomcompiler = { group = "androidx.room", name = "room-compiler", version.ref = "androidx-room" }
|
|
|
|
|
|
|
|
|
|
androidx-core = { group = "androidx.core", name = "core-ktx", version.ref = "androidx-core" }
|
|
|
|
|
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "androidx-appcompat" }
|
|
|
|
|
androidx-work = { group = "androidx.work", name = "work-runtime-ktx", version.ref = "androidx-work" }
|
|
|
|
|
androidx-browser = { group = "androidx.browser", name = "browser", version.ref = "androidx-browser" }
|
|
|
|
|
androidx-palette = { group = "androidx.palette", name = "palette", version.ref = "androidx-palette" }
|
|
|
|
|
androidx-media2 = { group = "androidx.media2", name = "media2-session", version.ref = "androidx-media2" }
|
|
|
|
|
|
|
|
|
|
accompanist-systemuicontroller = { group = "com.google.accompanist", name = "accompanist-systemuicontroller", version.ref = "accompanist" }
|
|
|
|
|
accompanist-pager = { group = "com.google.accompanist", name = "accompanist-pager", version.ref = "accompanist" }
|
|
|
|
|
accompanist-pagerindicators = { group = "com.google.accompanist", name = "accompanist-pager-indicators", version.ref = "accompanist" }
|
|
|
|
|
accompanist-flowlayout = { group = "com.google.accompanist", name = "accompanist-flowlayout", version.ref = "accompanist" }
|
|
|
|
|
accompanist-navigationanimation = { group = "com.google.accompanist", name = "accompanist-navigation-animation", version.ref = "accompanist" }
|
|
|
|
|
|
2024-02-20 21:35:44 +01:00
|
|
|
androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version = "2.1.4" }
|
2023-10-05 21:51:48 +02:00
|
|
|
androidx-transition = { group = "androidx.transition", name = "transition", version = "1.4.1" }
|
2024-02-20 21:35:44 +01:00
|
|
|
androidx-exifinterface = { group = "androidx.exifinterface", name = "exifinterface", version = "1.3.7" }
|
2024-02-20 22:36:45 +01:00
|
|
|
androidx-securitycrypto = { group = "androidx.security", name = "security-crypto", version = "1.1.0-alpha03" }
|
2023-10-05 21:51:48 +02:00
|
|
|
androidx-datastore = { group = "androidx.datastore", name = "datastore", version = "1.0.0" }
|
|
|
|
|
|
2024-02-20 21:35:44 +01:00
|
|
|
androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version = "2.7.7" }
|
|
|
|
|
materialcomponents-core = { group = "com.google.android.material", name = "material", version = "1.11.0" }
|
|
|
|
|
okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version = "4.12.0" }
|
2023-10-05 21:51:48 +02:00
|
|
|
|
|
|
|
|
retrofit-core = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit" }
|
|
|
|
|
retrofit-gson = { group = "com.squareup.retrofit2", name = "converter-gson", version.ref = "retrofit" }
|
|
|
|
|
|
|
|
|
|
coil-core = { group = "io.coil-kt", name = "coil", version.ref = "coil" }
|
|
|
|
|
coil-svg = { group = "io.coil-kt", name = "coil-svg", version.ref = "coil" }
|
|
|
|
|
coil-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil" }
|
|
|
|
|
|
|
|
|
|
leakcanary = { group = "com.squareup.leakcanary", name = "leakcanary", version = "2.10" }
|
|
|
|
|
suncalc = { group = "org.shredzone.commons", name = "commons-suncalc", version = "3.7" }
|
|
|
|
|
jsoup = { group = "org.jsoup", name = "jsoup", version = "1.15.4" }
|
|
|
|
|
commons-text = { group = "org.apache.commons", name = "commons-text", version = "1.10.0" }
|
|
|
|
|
|
|
|
|
|
# 4.4.2 is the last GPL compatible version, don't update to 5.x
|
|
|
|
|
mathparser = { group = "org.mariuszgromada.math", name = "MathParser.org-mXparser", version = "4.4.2" }
|
|
|
|
|
|
|
|
|
|
google-auth = { group = "com.google.auth", name = "google-auth-library-oauth2-http", version = "1.14.0" }
|
|
|
|
|
google-apiclient = { group = "com.google.api-client", name = "google-api-client", version = "2.1.2" }
|
|
|
|
|
google-drive = { group = "com.google.apis", name = "google-api-services-drive", version = "v3-rev20221219-2.0.0" }
|
|
|
|
|
google-oauth2 = { group = "com.google.apis", name = "google-api-services-oauth2", version = "v2-rev20200213-2.0.0" }
|
|
|
|
|
|
|
|
|
|
protobuf-protoc = { group = "com.google.protobuf", name = "protoc", version.ref = "protobuf" }
|
|
|
|
|
protobuf-javalite = { group = "com.google.protobuf", name = "protobuf-javalite", version.ref = "protobuf" }
|
|
|
|
|
|
|
|
|
|
koin-android = { group = "io.insert-koin", name = "koin-android", version.ref = "koin" }
|
|
|
|
|
koin-androidxcompose = { group = "io.insert-koin", name = "koin-androidx-compose", version.ref = "koin" }
|
|
|
|
|
|
|
|
|
|
tinypinyin = { group = "com.github.promeg", name = "tinypinyin", version = "2.0.2" }
|
|
|
|
|
emoji4j = { group = "com.sigpwned", name = "emoji4j-core", version = "15.0.1" }
|
|
|
|
|
|
|
|
|
|
junit = { group = "junit", name = "junit", version.ref = "junit" }
|
2023-11-05 19:01:57 +01:00
|
|
|
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
|
|
|
|
|
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
|
2023-10-05 21:51:48 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[bundles]
|
2023-12-07 22:44:41 +01:00
|
|
|
kotlin = ["kotlin-stdlib", "kotlinx-coroutines-core", "kotlinx-coroutines-android", "kotlinx-collections-immutable", "kotlinx-serialization-json"]
|
2023-10-05 21:51:48 +02:00
|
|
|
androidx-lifecycle = ["androidx-lifecycle-viewmodel", "androidx-lifecycle-common", "androidx-lifecycle-runtime", "androidx-lifecycle-viewmodelcompose", "androidx-lifecycle-runtimecompose"]
|
|
|
|
|
retrofit = ["retrofit-core", "retrofit-gson"]
|
|
|
|
|
tests = ["junit"]
|
|
|
|
|
|
|
|
|
|
[plugins]
|
|
|
|
|
android-application = { id = "com.android.application", version.ref = "android-gradle-plugin" }
|
|
|
|
|
android-library = { id = "com.android.library", version.ref = "android-gradle-plugin" }
|
|
|
|
|
protobuf = { id = "com.google.protobuf", version.ref = "protobuf-gradle-plugin" }
|
|
|
|
|
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp-gradle-plugin" }
|
|
|
|
|
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
|
2024-02-04 02:28:00 +01:00
|
|
|
kotlin-plugin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
|
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
|
|
|
dokka = { id = "org.jetbrains.dokka", version = "1.9.10" }
|