a8f91ee6ea
- :core:model model/Cards.kt per SPEC §14.2.4 "Changes in v0.35"; ContractTest covers the card wire values. - :domain matchCardPurchase (§14.5.8), passing match_card_purchase.json (17 cases) in VectorTest. - :data Room version 2 (card_connections, card_purchases, card_sync_state, MIGRATION_1_2 with its test, 2.json exported); DTOs for E-36 to E-44 round-tripping K1's examples; the card cycle (E-44 push of pending link changes, E-40 pull) after each household cycle and after refresh; CardRepositoryImpl with CP-9 prefill, CP-10 matches, offline-first link/unlink/ignore; a local expense delete unlinks. - :core:fakes FakeCardRepository and fakes/cards scenarios for every state of S-23 to S-27. - :feature:cards S-23 (sheet and "Välj en annan utgift"), S-24, S-25 (Custom Tab, E-38 every 2 s while resumed, return link), S-26 (disconnect dialog), S-27, CardArt with the SJ Prio picture and the drawn fallback; 135 goldens and state-holder tests. - :feature:expense S-7 cardPurchaseId prefill and link on save, S-8 "Från kortköp" line; :feature:account S-5 "Från kortköp"; :feature:settings S-13 "Anslut kort". - :core:design KvittDestination.Cards with credit_card and nav_cards (four destinations, D-172); the bar's labels shrink to fit at large font scales. :app routes, kvitt://cards/connected, bindings. - docs/ux/strings.csv: the card keys of §13.3 plus K2's additions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TQd3pEP9UeN2uifbHknQ7B
95 lines
6.0 KiB
TOML
95 lines
6.0 KiB
TOML
# Kvitt version catalog: the latest stable releases on Google Maven / Maven Central (no drift on 2026-10-18).
|
|
# Drift: python3 tools/dependency-report/latest.py
|
|
[versions]
|
|
minSdk = "36"
|
|
compileSdk = "37"
|
|
targetSdk = "37"
|
|
agp = "9.4.1"
|
|
kotlin = "2.4.21"
|
|
ksp = "2.3.12"
|
|
composeBom = "2026.09.00"
|
|
material3 = "1.4.0"
|
|
activityCompose = "1.13.0"
|
|
coreKtx = "1.19.1"
|
|
lifecycle = "2.11.0"
|
|
datastore = "1.2.1"
|
|
sqlite = "2.7.1"
|
|
navigationCompose = "2.10.2"
|
|
hilt = "2.60.1"
|
|
androidxHilt = "1.4.0"
|
|
room3 = "3.0.3"
|
|
ktor = "3.6.0"
|
|
work = "2.12.0"
|
|
kotlinxSerialization = "1.11.0"
|
|
kotlinxCoroutines = "1.11.0"
|
|
kotlinxDatetime = "0.8.0"
|
|
coil = "3.6.3"
|
|
# Custom Tabs for the bank's BankID page (D-173, S-25): the latest stable on Google Maven on 2026-10-24.
|
|
browser = "1.10.0"
|
|
junit = "4.13.2"
|
|
robolectric = "4.17"
|
|
roborazzi = "1.76.0"
|
|
# Firebase BoM 35.0.2 (firebase-messaging 26.0.0) and the Google services plugin 4.5.0, the latest stable per
|
|
# firebase.google.com/support/release-notes/android on 2026-10-18
|
|
firebaseBom = "35.0.2"
|
|
googleServices = "4.5.0"
|
|
|
|
[libraries]
|
|
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "coreKtx" }
|
|
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "activityCompose" }
|
|
androidx-lifecycle-runtime-compose = { module = "androidx.lifecycle:lifecycle-runtime-compose", version.ref = "lifecycle" }
|
|
androidx-lifecycle-process = { module = "androidx.lifecycle:lifecycle-process", version.ref = "lifecycle" }
|
|
androidx-datastore-preferences = { module = "androidx.datastore:datastore-preferences", version.ref = "datastore" }
|
|
androidx-sqlite-bundled = { module = "androidx.sqlite:sqlite-bundled", version.ref = "sqlite" }
|
|
androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigationCompose" }
|
|
androidx-compose-bom = { module = "androidx.compose:compose-bom", version.ref = "composeBom" }
|
|
androidx-compose-ui = { module = "androidx.compose.ui:ui" }
|
|
androidx-compose-ui-graphics = { module = "androidx.compose.ui:ui-graphics" }
|
|
androidx-compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" }
|
|
androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" }
|
|
androidx-compose-ui-test-junit4 = { module = "androidx.compose.ui:ui-test-junit4" }
|
|
androidx-compose-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest" }
|
|
androidx-compose-material3 = { module = "androidx.compose.material3:material3", version.ref = "material3" }
|
|
androidx-room3-runtime = { module = "androidx.room3:room3-runtime", version.ref = "room3" }
|
|
androidx-room3-compiler = { module = "androidx.room3:room3-compiler", version.ref = "room3" }
|
|
androidx-browser = { module = "androidx.browser:browser", version.ref = "browser" }
|
|
androidx-work-runtime-ktx = { module = "androidx.work:work-runtime-ktx", version.ref = "work" }
|
|
androidx-work-testing = { module = "androidx.work:work-testing", version.ref = "work" }
|
|
hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "hilt" }
|
|
hilt-compiler = { module = "com.google.dagger:hilt-compiler", version.ref = "hilt" }
|
|
androidx-hilt-lifecycle-viewmodel-compose = { module = "androidx.hilt:hilt-lifecycle-viewmodel-compose", version.ref = "androidxHilt" }
|
|
ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" }
|
|
ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor" }
|
|
ktor-client-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" }
|
|
ktor-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" }
|
|
ktor-client-mock = { module = "io.ktor:ktor-client-mock", version.ref = "ktor" }
|
|
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerialization" }
|
|
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinxCoroutines" }
|
|
kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinxCoroutines" }
|
|
kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinxDatetime" }
|
|
coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" }
|
|
coil = { module = "io.coil-kt.coil3:coil", version.ref = "coil" }
|
|
coil-network-ktor3 = { module = "io.coil-kt.coil3:coil-network-ktor3", version.ref = "coil" }
|
|
firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref = "firebaseBom" }
|
|
firebase-messaging = { module = "com.google.firebase:firebase-messaging" }
|
|
junit = { module = "junit:junit", version.ref = "junit" }
|
|
robolectric = { module = "org.robolectric:robolectric", version.ref = "robolectric" }
|
|
roborazzi = { module = "io.github.takahirom.roborazzi:roborazzi", version.ref = "roborazzi" }
|
|
# Gradle plugins as libraries, for the convention plugins in build-logic
|
|
android-gradle-plugin = { module = "com.android.tools.build:gradle", version.ref = "agp" }
|
|
kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
|
|
compose-compiler-gradle-plugin = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" }
|
|
roborazzi-gradle-plugin = { module = "io.github.takahirom.roborazzi:roborazzi-gradle-plugin", version.ref = "roborazzi" }
|
|
|
|
[plugins]
|
|
android-application = { id = "com.android.application", version.ref = "agp" }
|
|
android-library = { id = "com.android.library", version.ref = "agp" }
|
|
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
|
|
kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
|
|
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
|
|
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
|
|
hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
|
|
room3 = { id = "androidx.room3", version.ref = "room3" }
|
|
google-services = { id = "com.google.gms.google-services", version.ref = "googleServices" }
|
|
roborazzi = { id = "io.github.takahirom.roborazzi", version.ref = "roborazzi" }
|