Commit Graph

6 Commits

Author SHA1 Message Date
Jean-Luc Makiola
4fe8cd12cb feat: M3 Expressive theme with dynamic color + fallback scheme from slate seed
CalendulaSeed (0xFF5C6B7A) anchors the design palette. Theme picks
Dynamic Color on API 31+ when enabled (default true) and falls back
to a hand-tuned Light/Dark scheme otherwise. CalendulaTypography is
the M3 Expressive default for V1 - custom type scale lands in a
later UI-design iteration.

ColorSchemeTest pins the seed value (3 unit tests, all pass).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-08 15:39:28 +02:00
Jean-Luc Makiola
e4f445ac75 fix(build): bump compileSdk 36 -> 37 for Material 3 Expressive alpha
Material 3 Expressive 1.5.0-alpha21 transitively requires
material-ripple-android:1.12.0-alpha03, which mandates compileSdk >= 37
via its AAR metadata. The Android SDK platform 37.0 was installed
locally (already available as a preview).

targetSdk stays at 36 - we compile against API 37 only for the new
material-ripple constants, not to opt into runtime behavior changes.
targetSdk will follow when API 37 reaches stable.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-08 15:34:36 +02:00
Jean-Luc Makiola
defc7795ad feat: adaptive launcher icon - '1' on slate squircle (kalendae)
Static stylized '1' on a slate (0xFF5C6B7A) background. The numeral
references kalendae, the Latin word for 'first day of the month' that is
the etymological root of both 'Calendar' and 'Calendula'. Adaptive icon
spec: foreground vector path, monochrome variant for themed icons (API
33+), no PNG fallback needed (minSdk 29 > 26).

Visual refinement is expected during the UI design iteration; this is
the foundational shape and meaning.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-08 15:28:27 +02:00
Jean-Luc Makiola
b20da4d4c6 feat: add android manifest, strings (DE+EN), colors, base theme
READ_CALENDAR permission declared. Strings split into English master
(values/) and German (values-de/) with the Loading/Failure/Success
generic state strings used across screens. Backup rules let DataStore
back up by default with no file-based content. Theme stub delegates
real theming to Compose; the Activity-level XML theme only sets
transparent system bars and dark-mode hint.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-08 15:23:52 +02:00
Jean-Luc Makiola
8312bc6e0c chore(gradle): fix code-review findings on app module setup
- Restore 4-space indent on kotlin-compose plugin alias (regression from
  the previous cleanup commit)
- Fix invalid ProGuard rule: HiltAndroidApp is an annotation type, not
  a class - use '-keep @dagger.hilt.android.HiltAndroidApp class *' to
  actually retain the @HiltAndroidApp-annotated Application
- Remove vectorDrawables.useSupportLibrary - dead config since minSdk 29
  (native VectorDrawable support since API 21)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-08 15:22:07 +02:00
Jean-Luc Makiola
a9c141f146 chore: configure :app module gradle build
Compose with Material 3 Expressive (1.5.0-alpha21 explicit override of
BOM stable), Hilt 2.59.2 + KSP 2.3.9, DataStore. Single-module project.
JVM 17 + Kotlin 2.3.21. JUnit Jupiter 6.1.0 unified (jupiter + platform).
testOptions opts into JUnit Platform so JUnit5/6 tests get discovered.

Note: kotlin-android plugin removed — AGP 9.0+ provides built-in Kotlin
support and the plugin now hard-errors when applied alongside AGP 9.x.
kotlin-compose plugin retained (separate Compose compiler plugin).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-08 15:16:36 +02:00