83 Commits

Author SHA1 Message Date
MM20
f97fb0a88d
Calendar widget: separate running tasks from running events 2025-04-30 19:29:03 +02:00
MM20
5e59bf171a
Add Breezy Weather integration 2025-04-28 20:58:59 +02:00
MM20
7132e69ec8
Add tasks.org integration 2025-04-26 13:29:58 +02:00
MM20
2d40459237
Remove unused resources and libraries 2025-04-20 18:30:56 +02:00
MM20
b12ce46509
Migrate Owncloud login UI to compose 2025-04-20 17:45:00 +02:00
MM20
27503d34f2
Add white background to nextcloud badge icon 2025-04-20 13:42:06 +02:00
MM20
34180ae6b4
Add more opening hour tests 2025-04-18 23:54:12 +02:00
MM20
02cec92d72
Implement contact plugins 2025-04-06 12:53:38 +02:00
MM20
cab93f87aa
Restructure contacts search for plugins 2025-04-05 17:18:22 +02:00
MM20
04dd12ee96
Contact stuff 2025-04-04 18:16:16 +02:00
MM20
7ec315dfc7
Remove firstName and lastName from contact interface,
move some implementations from AndroidContact to Contact interface
2025-04-04 00:25:17 +02:00
MM20
45a19ce95e
Remove Google integration 2025-02-09 12:54:20 +01:00
Christoph
8c4bfb7dc9
SearchVM, SearchService: improve search UX by reducing flickering (#1117)
* Fix: don't treat PH OpeningHours with specified time as `everyDay`

* Use SnapshotStateList in SearchVM and don't clear search-results if
there are no new search results from SearchableRepositories

* Rename parameter

* mergeStateLists: refactor as extension method, add apps to SearchResults by default

---------

Co-authored-by: MM20 <15646950+MM2-0@users.noreply.github.com>
2024-12-05 18:44:34 +01:00
MM20
06c7331584
Move Tag and tag serialization classes to core:base 2024-10-26 19:41:54 +02:00
Christoph
16637265fb
Migrate osm opening hours parsing to external library (#900)
* Fix: don't treat PH OpeningHours with specified time as `everyDay`

* migrate to osm-opening-hours, add tests for openinghours parsing

* Style nit

* implement 'PH,Su off'

* implement SpecificWeekdays

* decrypt source code (a little)

* fix constructor call in OpeningHoursTest.kt

* lint

* fix negative durations, add test for LastNth + test to combine everything implemented

* add copyright note for osm-opening-hours

* remove unused library
2024-10-20 11:47:16 +02:00
MM20
774777f79c
Change search result order for all other categories 2024-10-13 20:32:15 +02:00
MM20
bf6e963545
Improve app result ranking 2024-10-12 22:16:10 +02:00
MM20
318c26a439
Mask private profile apps while private space is locked 2024-08-13 15:19:24 +02:00
MM20
7479c7f401
Add calendar plugins 2024-08-04 17:40:46 +02:00
MM20
88876141ff
Rewrite plugin file serialization 2024-07-26 18:05:58 +02:00
MM20
cdf824ac2e
Make File path property optional 2024-07-26 17:33:20 +02:00
MM20
89cd56aafe
Merge branch 'main' of github.com:MM2-0/Kvaesitso 2024-07-19 23:14:22 +02:00
MM2-0
61a9e018d5
Merge pull request #957 from CepGamer/cepgamer/filterRefactor
Calculate values for filter categories from the list of values.
2024-07-19 23:09:41 +02:00
MM20
c3bafb7fb9
Always show all profiles 2024-07-19 23:02:12 +02:00
MM20
3993f9505c
Add private space support 2024-07-19 17:13:06 +02:00
Sergei Bolotov
e37d266b06 Calculate values for filter categories from the list of values. 2024-07-18 22:45:37 -07:00
MM20
52150c5257
Compile SDK 35 2024-07-18 18:46:12 +02:00
MM20
c7804296d7
Refactor search 2024-07-17 23:27:00 +02:00
MM20
5a28eb584e
React to changing profile availability 2024-07-07 14:29:42 +02:00
MM20
3331ea024b
Revert "Reuse collator instance"
This reverts commit 90de026e49a02ee42d6d406a19e3807e6786c951.

Close #915, Close #907
2024-07-03 22:41:50 +02:00
MM20
a7437b6a43
Add address formatter license note 2024-06-30 20:16:59 +02:00
MM20
304ca12e65
Further search result design adjustments 2024-06-29 21:57:31 +02:00
MM20
84582ebbaf
Redesign contact results 2024-06-23 22:31:11 +02:00
MM20
edcf5a70bb
Restructure integration settings screen 2024-06-14 22:47:23 +02:00
MM20
5d411d0f0c
Rename candle location icon to place of worship 2024-06-14 15:54:10 +02:00
MM20
f6dfddedb2
Remove unused resources 2024-06-14 15:23:37 +02:00
Christoph
65a9c8c1fe
Add support for location plugins (#772)
* Cherry pick location refactor

* Refactor :data:openstreetmaps to :data:locations

* contract, plugin sdk

* Implement serialization, module tweaks

* Include check for out-of-date departures in SearchableItemVM.requestUpdatedSearchable()

* settings for location plugins

* Try not to be too lazy

* more fiddling with the plugin SDK

* add departures in MapView with mock data for debug builds

* change icons

* add boats

* animate departure lazycolumn

* Add MarqueeText for text overflow handling

* Define height for Departures in case there is no map to display

* Don't inclure railway / highway tags for OSM since there will be location plugins for that

* sort by time

* - Apply pre-merge changes to LocationSettings
- Add banner warning about slowed down location search for large search radii

* ditch `showLocationOnMap`

* LocationItem: make `showOpeningSchedule` toggleable

* LocationItem: make Navigation AssistChip work for people that don't have google maps installed

* LocationItem: resolve TODOs

* MapTiles: ditch unused code, animate userIndicator

* Reintroduce departure list

* Add LineColor

* Add osm tag `stars` as `userRating` https://taginfo.openstreetmap.org/keys/stars#overview

* typealias -> import

* Don't add Navigation Chip when there is no way to resolve navigation intents

* Add settings migration

* Set plugin SDK version to 1.2.0-SNAPSHOT

* Deduplicate shared plugin classes, use kotlinx.serialization

* Fix imports

* Use ZonedDateTime for depature times

* Add more line types

* Rewrite location serialization

* Replace street/houseNumber with address

* Add attribution field

* Add plugin config

* Reject location search requests without lat lon parameters

* Add default values to plugin location class

* Don't crash if column value is null

* Add docs comments to LocationCategory values

* Refactor OpeningSchedule as polymorphic

* remove dead corpse *ahem* code

* Split LocationCategory into category and icon

(Also update to Kotlin 2.0, please don't do this at home)

* Add more location icons

* Fix (?) location deserializer

* Add more location icons

* More icons

* Meh

* Add Pub

* Disable Github Maven repo if credentials are missing

* Add location search specific settings to plugin details screen

* Add language parameter

* Unbreak the build

* Refactor plugin SDK (with breaking changes)

* Set plugin SDK version to 2.0.0-SNAPSHOT

* Document SDK breaking changes

* Implement LocationProvider.getQuery

* Add a typesafe cursor API

* Oops I did it again

next time maybe check if the code is actually compiling before pushing

* Add missing return statement

* Fix list serialization

* Departure time UI adjustment

* Use typesafe cursor for weather plugins

* Add userRatingCount and emailAddress fields

* grrr

* Rename and extend LineTypes

* Add default lineType to Departure to fix serialization errors

* Fix refreshing stored plugin locations

* Adapt line name column width to available departures

* Fix plugin settings screen category overlap

* add LocationItem.GenericTransit

* Fix crash during deserialization of locations

* Update SDK docs

* Replace plugin "official" mark with "verified developer" mark

before anyone gets sued

* show 'now' when departure is in less than one minute

* Add typesafe Bundle API

* Implement plugin API changes

* Plugin SDK: Fix refresh result not being returned

* Update docs

* apply alpha to departures that have departured

* better (maybe): reduce saturation instead of alpha

* Add default values for Attribution

* Display attribution

* Rearrange location result layout

* Reduce searchable update interval to 1 minute

* Pass last update time to refresh function

* Change refresh path and ensure that timestamp is only update when the item was updated

* categorize osm location

* Update docs

* Optimize location search

- run providers in parallel
- flatten code

* add experimental address parsing for OSM

* add poi_category_townhall

* Fix popup closing when favorites items are updated

* Revert "Fix popup closing when favorites items are updated"

This reverts commit fc517fd066c7f8109b6d6df2d4f536af66398207.

* Fork AndroidAddressFormatter to `:libs:address-formatter`

* migrate `:libs:address-formatter` dependencies to version catalog and update them

* also consider addr:{suburb,hamlet} for `Address.city` if city tag is missing

* Move poi strings back to strings.xml

* Update Jetpack Compose

* Move address-formatter back to its original package, add license and readme

* Move address-formatter back to its original package

---------

Co-authored-by: MM20 <15646950+MM2-0@users.noreply.github.com>
2024-06-14 11:57:03 +02:00
MM20
6b36fe1963
Fix background blur on Pixel 8
(and other devices (?))

Close #590
2024-05-23 00:41:43 +02:00
MM20
c35f0b3694
Undo location category spelling changes
Close #798
2024-05-17 21:43:29 +02:00
MM20
f68f0175a6
Fix OpeningSchedule.isOpen
Fix #838
2024-05-17 18:18:33 +02:00
MM20
44e40cde1d
Adjust OpeningSchedule test values 2024-05-17 15:58:32 +02:00
MM20
2319e47184
Add unit tests for OpeningSchedule.isOpen
Issue #838
2024-05-17 15:39:34 +02:00
MM20
f7f0e54f2e
Fix calendar widget animation 2024-05-16 23:22:10 +02:00
MM20
90de026e49
Reuse collator instance 2024-05-11 13:18:03 +02:00
MM20
f6028a3f39
Finalize location item UI 2024-05-06 23:35:31 +02:00
MM20
a29475b485
Add hidden item badges (but don't enable them) 2024-05-03 23:50:34 +02:00
MM20
1d6688831c
Add managed location to weather plugin API 2024-05-03 13:02:17 +02:00
MM20
ee83b87f39
Reset search filters when query is cleared 2024-04-21 20:30:55 +02:00
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
6c4e068fac
Fix plugin sdk visibility modifiers 2024-02-04 21:49:30 +01:00