makiolaj
b792ddc2f0
style: fix launcher icon scaling and centering, update AGP
CI / ci (push) Successful in 9m58s
2026-06-08 20:30:40 +02:00
makiolaj
440fa57161
fix(debug): use prefixed composite keys in LazyColumn
...
CI / ci (push) Successful in 9m35s
Cal.id and Event.instanceId share a numeric range, and the LazyColumn
keys both sections — colliding values (e.g. cal-id=4 + event-instance-id=4)
crashed with "Key '4' was already used". Additionally, Instances._ID is
inherited from the parent Event, so recurring events produce multiple
rows with the same instanceId; the start instant disambiguates them.
2026-06-08 20:19:58 +02:00
makiolaj
2a2b919041
docs: record v0.2.0 data-layer + permission flow in CHANGELOG, planning
CI / ci (push) Successful in 9m53s
Build and Release to F-Droid / ci (push) Successful in 5m58s
Build and Release to F-Droid / build-and-deploy (push) Successful in 8m7s
2026-06-08 17:58:02 +02:00
makiolaj
3ced240e23
test: instrumented repository smoke against real CalendarContract
2026-06-08 17:57:12 +02:00
makiolaj
035ac9b003
test: replace placeholder smoke with permission-rationale assert
2026-06-08 17:56:03 +02:00
makiolaj
c03389abe0
ui: replace placeholder with RootScreen routing permission ↔ debug
2026-06-08 17:55:34 +02:00
makiolaj
98f8433156
ui: add DebugScreen showing calendars + next 50 instances
2026-06-08 17:54:23 +02:00
makiolaj
8fbbab30e2
ui: add DebugViewModel combining calendars + next 30d instances
2026-06-08 17:52:50 +02:00
makiolaj
ef0a4b0568
ui: add PermissionScreen with rationale and denied recovery
2026-06-08 17:50:33 +02:00
makiolaj
43f12812b6
ui: add PermissionViewModel with three-state machine
2026-06-08 17:49:39 +02:00
makiolaj
2400d5482c
i18n: add permission + debug screen strings (en, de)
2026-06-08 17:49:06 +02:00
makiolaj
4d54501ed4
di: wire CalendarRepository, DataSource, DataStore, IoDispatcher
2026-06-08 17:48:34 +02:00
makiolaj
748df761bf
data: add CalendarPrefs (hidden calendar ids in DataStore)
2026-06-08 17:47:55 +02:00
makiolaj
d13f2f07a5
data: add CalendarRepository + Impl with SharedFlow re-emit on data-source ticks
2026-06-08 17:47:13 +02:00
makiolaj
7abb2e6ab4
data: add CalendarDataSource seam returning domain lists (not Cursors)
...
Deviation from Plan 02: changing from Cursor-returning interface to
domain-returning interface so the repository unit tests can use a simple
fake without constructing ContentObserver/Handler/Looper on the JVM
(which would either crash or no-op via the mockable.jar stubs).
2026-06-08 17:44:19 +02:00
makiolaj
fb003d8806
data: add ColumnReader.toEventDetailCore() and toAttendee() mappers
2026-06-08 17:42:42 +02:00
makiolaj
40b531fa52
data: add ColumnReader.toEventInstance() with defensive validation (§8)
2026-06-08 17:41:29 +02:00
makiolaj
0e4c47febe
data: add ColumnReader abstraction + Cursor.toCalendarSource mapper
...
Deviation from Plan 02: the JVM mockable-android.jar stubs every Cursor
method even with isReturnDefaultValues=true (returns null/0 regardless of
the underlying MatrixCursor backing). Introduce an internal ColumnReader
interface so mappers stay pure-Kotlin and JVM-testable via MapColumnReader,
while production reads through CursorColumnReader.
2026-06-08 17:40:37 +02:00
makiolaj
fb723fba68
data: add CalendarContract column projections + indices
Build and Release to F-Droid / ci (push) Has been cancelled
Build and Release to F-Droid / build-and-deploy (push) Has been cancelled
2026-06-08 17:37:23 +02:00
makiolaj
af75965a31
domain: add pure-Kotlin models (CalendarSource, EventInstance, EventDetail, …)
2026-06-08 17:36:39 +02:00
makiolaj
1b456d2133
data: add TimeBridge helpers for epoch-millis ↔ kotlin.time.Instant
2026-06-08 17:35:49 +02:00
makiolaj
a826e82bdc
build: add kotlinx-datetime, coroutines, turbine, hilt-nav-compose, lifecycle-compose
2026-06-08 17:32:45 +02:00
makiolaj
ed680b4482
docs: add Plan 02 - Data Layer & Permission Flow implementation plan
...
21 bite-sized tasks covering domain models, CalendarContract data layer
(Cursor mappers with §8 defensive validation, ContentObserver-backed
SharedFlow repository), DataStore-persisted hidden-calendar set, Hilt
wiring, READ_CALENDAR permission flow (rationale + denied recovery), and
a wegwerfbarer Debug screen that visually validates data is flowing.
Out of scope: Month/Week/Day views (Plans 03-05), Event Detail Sheet
(Plan 06), Filter/Settings (Plan 07).
2026-06-08 17:30:41 +02:00