Some checks failed
release / build-release (push) Failing after 36m56s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
4.4 KiB
4.4 KiB
FitnessDroid — plan
Mål
En modern Android-app (Android 12+) som pratar med gym-API:t
(https://gymapi.brasse-pc.eu/graphql) och på sikt kan allt som webbens
gym-del i brasse-pc.eu-v2 kan: pass, loggning av lyft, statistik, PB,
mallar, grunddata och profil.
Stack
| Del | Val |
|---|---|
| Språk/UI | Kotlin + Jetpack Compose + Material 3 (dynamiska färger) |
| minSdk / target | 31 (Android 12) / 35 |
| Nätverk | OkHttp + kotlinx.serialization, handskrivna GraphQL-queries (samma strängar som webbens gymTrackerApi.js) |
| Auth | JWT + refresh-token-rotation + sessions-id, lagras i DataStore, auto-refresh 2 min före utgång |
| Bygge | Gradle 8.9 wrapper, AGP 8.7.3, Kotlin 2.0.21, JDK 17 |
| Signering | signing/ (gitignorerad) lokalt, Actions-secrets (KEYSTORE_B64, KEYSTORE_PASSWORD) i CI — samma signatur överallt |
Leverans
- VS Code-task
build→ signerad APK ibuild/FitnessDroid.apk - CI (Gitea Actions på Pi5/arm64) → rullande
latest-release medFitnessDroid.apkpå släppsidan vid varje push tillmain. arm64-knep: statiskt byggd aapt2 viaandroid.aapt2FromMavenOverride. - versionCode = CI-byggnummer (
GITHUB_RUN_NUMBER) så uppdateringar alltid räknas uppåt.
Milstolpar
- Grund + login (klar 2026-07-23) Projektskelett som kompilerar, inloggning mot API:t med sessions- återställning vid appstart, hemskärm som visar profilen.
- Aktivt pass (klar 2026-07-24) — passläge med en övning i taget
(svep), ±steppers och ett-trycks setloggning med förifyllda värden,
vilotimer (helskärm/banner + larm/vibration/visuell/inget — inställbart),
offline-först via Room + synk-kö med statusindikatorer, övningsväljare
med muskelfilter, bottenrad-navigation med start-FAB och minispelare.
API-tillägg:
MuscleGroup.iconKey,ExerciseType.defaultRestSeconds. Polering 2026-07-24/25: rätta/ta bort loggade set, passdetaljvy i historiken, övningshistorik i passläget (tidigare pass + tyngsta 3 mån), avsluta-överblick med redigerbar start/varaktighet (date/time-pickers, hopfällt bakom "Ändra tid"), kcal-summering med "Hur räknas detta?" (MET × kroppsvikt × timmar, även i historiken) och 🏆-markering av nya personbästa per rep-antal (PB-cache i Room). - Statistik + robust inloggning (klar 2026-07-25, version 0.3.0) — statistikfliken med periodväljare (vecka/månad/halvår/år/totalt), KPI-kort med delta mot förra perioden, scrollbar volymtrend, kroppskarta (fram/bak, volymvärme per muskelgrupp), höjdpunkter och PB-lista per övning. Tyst återinloggning: uppgifterna sparas AES-krypterat via Android Keystore och appen loggar in igen automatiskt när servern avvisat sessionen (aktiveras vid inloggning; toggle i inställningarna). Utökade inställningar: viktsteg (1,25/2,5/5 kg), API-url, auto-återinloggning, egna stångvikter. Dessutom: in-app-uppdatering (CI publicerar version.json; hemskärmskort laddar ner, sha256-verifierar och installerar), skivkalkylator (tryck på vikten i aktiva setet; stång 20/0/egna, skivor i standardfärger), passlängd i historiken, och kroppsviktspårning: API-modellen BodyMeasurement (uuid, datum, vikt + muskel/fett/vatten-% för framtiden), uppdatera/rätta/ta bort mätningar från profilen med datumväljare, viktgraf i statistiken med glidande medelvärde och linjär trendlinje. Profilens bodyWeightKg speglar alltid senaste mätningen.
- Passhistorik — lista, visa, redigera och ta bort tidigare pass.
- Logga lyft (snabbloggning) + PB — enkel lyftlogg och PB-matrisen.
- Statistik — perioder (vecka/månad/halvår/år), KPI-kort, trenddiagram, muskelfördelning, aktivitets-heatmap.
- Mallar — skapa/redigera mallar, starta pass från mall med auto-progression, spara pass som mall.
- Grunddata + profil — CRUD för muskelgrupper/muskler/övningar, kroppsvikt.
Roadmap / möjliga utbyggnader (ej beslutade)
- Offlineläge: logga pass utan nät, synka när nätet är tillbaka
- Notis med pågående pass + vilotimer (foreground service)
- Wear OS-följeslagare / komplikationer
- Widget med veckans volym/streak
- CSV-import som i webben
- R8/minify för mindre APK (nu ~43 MB p.g.a. icons-extended)
Öppna frågor
- Ska appen på sikt gå över till Apollo Kotlin med schemagenererade typer?
- Behövs stöd för flera konton/servrar?