Commit Graph

47 Commits

Author SHA1 Message Date
db3416ccee CI: bygg på valfri arkitektur — brasse-linux01 primär, Pi5 fallback
Some checks failed
release / build-release (push) Has been cancelled
- aapt2-hantering villkorad på uname -m (arm64 = statisk binär, x86_64 =
  Googles ur build-tools), AAPT2_BIN via GITHUB_ENV
- gradle-strypningen (workers=2 + nice) bara på arm64 — Pi5:n orkar inte
  längre APK-bygget med alla tjänster igång (två OOM-krascher 2026-08-23/24)
- Release-uppladdningen provar gitea-d (Pi:ns dockernät) och faller tillbaka
  på publika API-URL:en så steget funkar från båda noderna

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-24 10:22:06 +02:00
cf91020aae Behörigheter: snabblänk till appinställningarna + robustare GPS-flöde
Some checks failed
release / build-release (push) Failing after 1h10m44s
- 'Öppna appinställningarna'-knapp när plats- eller BT-behörighet saknas
  (spårning, vågparning, vägning) — systemets platslista visar bara appar
  som frågat, så det här är snabbaste vägen att slå på/av manuellt
- 'Försök igen'-knapp som ställer behörighetsfrågan på nytt
- POST_NOTIFICATIONS begärs bara på Android 13+ (fanns inte på 12)
- Typladdningen i spårskärmen kan inte längre hänga i evig spinner —
  felmeddelande + försök igen vid nätfel. Version 0.7.1.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-24 08:27:36 +02:00
444028c91e Etapp 3: GPS-livespårning av aktiviteter
All checks were successful
release / build-release (push) Successful in 10m8s
- TrackingService: foreground-service (location) med GPS-rutt, distans
  (brusfiltrerad), höjdmeter (glidande medel + tröskel), tid och live-kcal
  (ActivityKcal — Kotlin-port av serverns beräkning med tempokurvor)
- Spårningsskärm: osmdroid/OSM-livekarta med rutt-polyline för
  distansaktiviteter; stor timer för tidsbaserade (rörelsespårning av,
  RPE-slider i sammanfattningen); statistikrad tid/distans/fart/höjd/kcal/GPS
- Sammanfattning vid stopp: spara som source=tracked med encoded polyline,
  aktivitetsgissning på tempo+höjd
- Starta aktivitet-knapp (GPS/timer per typ) + pågår-kort på hemskärmen
- osmdroid 6.1.20; permissions för plats/foreground-service/notiser; v0.7.0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-23 23:18:21 +02:00
bbf38036a1 CI: kör om APK-bygget (208/209 föll på övergående TLS-timeout mot github.com)
All checks were successful
release / build-release (push) Successful in 6m53s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQdYdg
2026-08-23 23:06:24 +02:00
387cfc5d6c CI: kör om APK-bygget (208 gick omkull i uppstartsstormen efter omstarten)
Some checks failed
release / build-release (push) Failing after 10s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-23 22:56:10 +02:00
6b5ed804e3 Hemskärm: uppdatera kcal-mätaren när skärmen visas igen
Some checks failed
release / build-release (push) Failing after 1m42s
ViewModellen överlever i navigationsstacken, så nyloggade aktiviteter/pass
syntes inte förrän appen startades om. Nu hämtas dailySummary om varje gång
hemskärmen kommer tillbaka i fokus. Version 0.6.1.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-23 22:47:55 +02:00
6499f5ef9d CI: kör om APK-bygget efter Pi5-omstart (205/206 dog i överbelastningen)
All checks were successful
release / build-release (push) Successful in 6m25s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-23 21:30:46 +02:00
dc2c3d177f CI: kör om APK-bygget (Pi5 var överbelastad under bygge 205)
Some checks failed
release / build-release (push) Failing after 49m22s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-23 20:36:57 +02:00
b8bdeddf4c Etapp 2: aktiviteter — bibliotek, manuell loggning, kcal via dailySummary
Some checks failed
release / build-release (push) Failing after 1h2m7s
- GymApi: activityTypes/activities/add/update/delete + dailySummary
- Aktivitetsskärm (Hem → Aktiviteter ❤️): logga med typväljare grupperad per
  kategori, datum/tid-pickers, varaktighet, distans+höjdmeter för
  distansbaserade, RPE-slider (talk test) för tidsbaserade; historik med
  tempo och kcal; rätta/ta bort
- Kcal-mätaren använder serverns dailySummary (gym + aktiviteter + BMR) med
  fallback till lokal beräkning mot äldre server
- Version 0.6.0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-23 19:29:43 +02:00
06b2f0ec86 Etapp 1: kroppsdata synkas mot servern + BMR + dagens kcal-mätare på Hem
All checks were successful
release / build-release (push) Successful in 5m54s
- Profile/myProfile med heightCm/birthYear/sex (fallback mot äldre server),
  updateProfile-mutation i GymApi
- Kroppsdata sparas lokalt och synkas: serverns värden vinner, lokala pushas
  upp om servern är tom (migrerar vågens lokala data)
- Mifflin–St Jeor-BMR (data/Bmr.kt)
- Hemskärm: Dagens kalorier-kort — aktivt loggat (dagens pass), telefonen
  (platshållare för etapp 5) och passivt (BMR-andel av dygnet, tickar per
  minut). Uppmaning om kroppsdata saknas.
- Version 0.5.0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-23 17:20:39 +02:00
9784b749aa doc: plan för aktiviteter, kcal-mätare & mål (godkänd; speglas i brasse-pc.eu-v2)
All checks were successful
release / build-release (push) Successful in 6m21s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-23 17:02:37 +02:00
051e5463a9 Väg-skärm: tydlig varning (errorContainer) när kroppsdata saknas + doc-rättelse
All checks were successful
release / build-release (push) Successful in 5m45s
Första testets uteblivna sammansättning berodde på att kroppsdatan inte var
ifylld — varningen var för diskret. Nu röd/tydlig med hänvisning till
Profil → Kroppsdata. Doc-noten rättad så orsaken inte påstås vara ramtiming
(merge-logiken finns kvar som robusthet).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-23 16:08:56 +02:00
5222fcf383 doc: väg-flödet verifierat mot Biltema-vågen; VTrump V300B-detaljer från GATT-dump
Some checks failed
release / build-release (push) Has been cancelled
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-23 16:07:39 +02:00
6fe1a32687 Väg-flöde: vänta in och merga sammansättningsramen (muskler/fett/vatten)
All checks were successful
release / build-release (push) Successful in 5m38s
Exingtech Y1/VScale skickar vikten först och kroppssammansättningen i en
senare ram — tidigare låste skärmen resultatet och kopplade ner vid första
publicerade mätningen, så bara vikten registrerades. Nu mergas ramarna
(ScaleMeasurement.mergeWith) och anslutningen hålls öppen tills en ram med
sammansättning kommit, max 20 s. UI visar 'väntar på muskler/fett/vatten'
under tiden och en förklaring om sammansättningen uteblir (kroppsdata saknas
/ vägde med strumpor).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-23 15:40:59 +02:00
2834c15d63 Väg-skärm: behåll mätresultatet vid sparfel (visa fel separat)
All checks were successful
release / build-release (push) Successful in 12m26s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-23 11:22:32 +02:00
a73172bfc3 doc: openScale milstolpe 1-4 klara + README (våg, GPL) + version 0.4.0
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-23 11:21:29 +02:00
f4612e05f0 BT-våg: anslut/väg dig-flöde + kroppsdata i profilen + Om appen
- ScaleManager: brygga app ↔ openScale-lagret (facades, factory, skanner,
  anslutning + händelseflöde)
- Inställningar → Bluetooth-våg: skanna BLE, visa vågar med drivrutinsstöd
  först, spara/ta bort vald våg (runtime-permissions för BLUETOOTH_SCAN/CONNECT)
- Profil: Väg dig-knapp (när våg finns sparad) → väg-skärm med livestatus,
  resultat (vikt + muskel/fett/vatten/ben/bukfett) och spara som kroppsmätning
- Profil: kroppsdata-dialog (längd/födelseår/kön) — skickas till impedansvågar
  som räknar sammansättning ombord (t.ex. Exingtech Y1)
- Om appen under Profil: version, GPL-3.0, attribution openScale + Blessed-Kotlin
- buildConfig på för versionsvisning

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-23 11:19:52 +02:00
261755794b openScale-port: GPL-3.0-relicens + BT-vågsdrivrutiner (grund + Exingtech Y1/VScale)
- LICENSE → GPL-3.0 (krav för att bädda in openScales kod)
- Vendrat com.health.openscale.core.bluetooth: ScaleDeviceHandler,
  Gatt/Broadcast/Spp-adaptrar, ScaleFactory (utan Hilt), ScaleCommunicator,
  BleScanner, ConverterUtils, ScaleMeasurement/ScaleUser — copyright-headers kvar
- ExingtechY1Handler: Biltema 84-1002 (PT-727), annonserar som "VScale"
- Shims för openScales interna beroenden: facades (DataStore-backade),
  slimmade enums/User/MeasurementWithValues, LogManager → logcat
- blessed-kotlin 3.0.12 via JitPack; Kotlin 2.0.21→2.2.0, KSP2, Room 2.7.2
- BLE-permissions (BLUETOOTH_SCAN neverForLocation + CONNECT) i manifestet
- Svenska strängresurser för drivrutinernas meddelanden

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-23 11:11:38 +02:00
efebcb111f doc: lägg till API-ändring (spara längd + ålder/kön) i openScale-planen
Some checks failed
release / build-release (push) Failing after 3h0m33s
Längd på servern -> korrektare BIA (impedansvågar) och BMR-baserad
energiförbrukning. Egen milstolpe + backend/app/webb-detaljer.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-26 11:35:56 +02:00
a99c11524b doc: plan för openScale BT-vågsintegration (GPL-relicens, alla drivrutiner)
All checks were successful
release / build-release (push) Successful in 6m30s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-26 11:24:19 +02:00
b33a849f23 Statistik: kroppssammansättnings-graf med %/kg-växel + omräknad vikt
All checks were successful
release / build-release (push) Successful in 5m24s
Ny sammansättningskort i statistiken: senaste muskel/fett/vatten i % med
omräkning till faktisk vikt (vikt × % / 100), plus flerlinjes-graf över
tid som växlar mellan procent och kg. Version 0.3.2.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-26 00:10:04 +02:00
7c21428a28 Kroppssammansättning: muskel/fett/vatten-% i vikt-dialogen + historiken
All checks were successful
release / build-release (push) Successful in 5m21s
Valfria fält vid ny mätning och rättning; visas i historiklistan.
Tomt fält vid rättning rensar värdet på servern (-1-konventionen).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-25 18:30:00 +02:00
7a4995823e doc: milstolpe 3 komplett i planen
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
2026-07-25 18:20:35 +02:00
143abee871 Kroppsvikt: datumväljare i dialogen, statistiken laddar om, graf-fix samma dag
All checks were successful
release / build-release (push) Successful in 5m15s
- Vikt-dialogen har datumknapp (kalender) för både ny mätning och rättning —
  mätningar kan flyttas till rätt dag (skickas som 12:00 UTC så datumet
  inte glider över tidszoner)
- Statistikfliken hämtar om mätningarna varje gång den öppnas
- Grafen sprider mätningar inom samma dygn på index istället för att
  kollapsa till en punkt

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-25 18:14:14 +02:00
e2ffb4f011 Helnamn i hälsningen, flera egna stänger, kroppsvikt med historik och graf
All checks were successful
release / build-release (push) Successful in 5m16s
- Hälsningen använder profilens displayName (cachas lokalt)
- Skivkalkylatorn: obegränsat antal egna stänger med exakt vikt (13,7 kg
  funkar) — läggs till/tas bort i inställningarna, visas som chips
- Profil: uppdatera kroppsvikten direkt i appen (decimalinmatning);
  vikthistorik med uuid-baserad rättning och borttagning per mätning
  (addBodyMeasurement med fallback till updateBodyWeight mot äldre API)
- Statistik: kroppsviktsgraf med råpunkter, glidande medelvärde (mjuk
  linje) och streckad linjär trendlinje
- API:t har redan fälten muskel/fett/vatten-% för framtida kroppsanalys

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-25 17:51:38 +02:00
d577a92eec Skivkalkylator: tryck på vikten i aktiva setet
All checks were successful
release / build-release (push) Successful in 5m35s
- Ark med skivorna per sida i standardfärger (25 röd, 20 blå, 15 gul,
  10 grön, 5 vit, 2,5 svart, 1,25 grå), störst innerst mot låskragen
- Stångval: 20 kg / utan stång / egen vikt (sätts i inställningarna,
  standard 15 kg)
- Textsammanfattning ('Per sida: 20 + 10 + 2,5 kg') och tydlig hint om
  vikten inte går att lägga exakt med standardskivor

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-25 17:06:10 +02:00
bb3502ed26 Passhistoriken visar passlängden i både listan och detaljvyn
All checks were successful
release / build-release (push) Successful in 5m43s
Manuell tidsrättning (durationSecondsOverride) vinner, annars
slut − start. Format: '47 min' eller '1h 12m'.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-25 17:00:23 +02:00
34c2a6c4da Statistik: scrollbar trendgraf med läsbara etiketter + Totalt-period; auth-luckor
All checks were successful
release / build-release (push) Successful in 7m34s
- Trendstaplarna i en horisontellt scrollbar rad (38dp per stapel) med
  volymsiffra ovanför och hel etikett under — startar på senaste perioden.
  Fixar etikettröran på månad/halvår
- Ny period 'Totalt' (period=all, stöds redan av API:t; delta saknas per design)
- Tyst återinloggning provas nu även när tokens saknas helt och när JWT:n
  hunnit gå ut vid nätfel under appstart
- Inställningstext: förtydligar att auto-återinloggning aktiveras vid
  nästa inloggning (uppgifter sparas bara vid login)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-25 16:42:45 +02:00
df4d122562 In-app-uppdatering: koll mot version.json, nedladdning och installation
All checks were successful
release / build-release (push) Successful in 5m26s
- CI publicerar version.json (versionCode/versionName ur APK:n, sha256,
  apkUrl) som release-asset
- Appen jämför versionCode vid start; banner på hemskärmen med
  nedladdningsprogress; sha256-verifiering; Androids installationsdialog
  via FileProvider (samma signatur -> uppdaterar rakt över)
- REQUEST_INSTALL_PACKAGES + FileProvider i manifestet

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-25 13:08:07 +02:00
7a04893294 M3: statistik, kroppskarta, PB-lista, tyst återinloggning, fler inställningar
Some checks failed
release / build-release (push) Has been cancelled
- Statistikfliken: periodväljare (vecka/månad/halvår/år), KPI-kort med
  delta mot förra perioden, volymtrend, kroppskarta fram/bak med värme
  per muskelgrupp (Canvas), höjdpunkter och PB per övning/rep-antal
- Tyst återinloggning: uppgifter sparas AES/GCM-krypterat via Android
  Keystore; när refresh avvisas provas nytt login innan utloggning —
  'utloggad utan att appen märker det' försvinner. Manuell utloggning
  rensar uppgifterna; toggle i inställningarna (på som standard)
- Inställningar: viktsteg för steppers (1,25/2,5/5 kg), API-url,
  auto-återinloggning
- Version 0.3.0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-25 13:03:24 +02:00
31d05039f0 Avsluta-överblicken: skriv ut kg i set-raderna (60kg×6)
All checks were successful
release / build-release (push) Successful in 4m53s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-25 12:35:43 +02:00
0812759719 doc: polerings-rundan för milstolpe 2 i planen
All checks were successful
release / build-release (push) Successful in 4m41s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-25 12:03:16 +02:00
493baee88d Avsluta-överblicken: övningslista med loggade set och PB-markering
All checks were successful
release / build-release (push) Successful in 4m52s
Varje övning listas med sina set (vikt×reps m.m.) och set som slår
cachade personbästat för samma rep-antal märks med trofé — även mot
tidigare set i samma pass. Personbästa cachas från API:t vid refresh
(cached_pb, Room v4).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-25 11:57:25 +02:00
27331b20a7 Avsluta-dialogen: tidsredigeringen hopfälld bakom 'Ändra tid'
All checks were successful
release / build-release (push) Successful in 4m46s
Standardvyn visar bara en rad: start → slut (varaktighet). Knappen
fäller ut start/varaktighet/slut-kontrollerna vid behov.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-25 11:14:42 +02:00
983886e8f1 Avsluta-dialogen: varaktighet och sluttid som pickers istället för steppers
Some checks failed
release / build-release (push) Has been cancelled
±-knapparna fick inte plats på smala skärmar (Oukitel WP9) och var
klyddiga. Nu: två breda knappar — Varaktighet ('hur länge gymmade du?')
och Slut (klockslag, rullar över till nästa dag om det är före starten).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-25 11:13:10 +02:00
8928a4edb4 Avsluta-dialogen: redigerbar start (datum + klockslag) och varaktighet
All checks were successful
release / build-release (push) Successful in 4m58s
- Startdatum/-tid väljs med date-/timepicker; varaktigheten med steppers,
  och den beräknade sluttiden visas — täcker både 'startade passet mitt i
  träningen' och 'glömde avsluta till dagen efter'
- Förifylld varaktighet ankras i senast loggade setet istället för 'nu',
  så ett bortglömt pass inte föreslår 14 timmar
- Rättad start synkas som updateGymSession(date) före completeGymSession
- Room v3-migration för editedStartEpochMs

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-25 10:49:53 +02:00
214e12d2e2 Avsluta-överblick med redigerbar passtid + kcal-summering med uträkning
All checks were successful
release / build-release (push) Successful in 5m37s
- Avsluta-dialogen visar övningar/set/reps/volym, passtiden går att justera
  (±1/±5 min, skickas som durationSecondsOverride — för alla gånger man
  glömt avsluta) och en kcal-uppskattning som räknas om live med tiden
- 'Hur räknas detta?' visar MET-formeln (MET × kroppsvikt × timmar) med
  siffrorna per övning; kroppsvikten cachas från profilen
- Passdetaljen i historiken: summeringskort (tid, set, volym, kcal) +
  samma förklaringsdialog med serverns faktiska fördelning, och kcal
  per övning på varje övningskort
- Room v2-migration för durationSecondsOverride

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-25 10:13:10 +02:00
68dd0135ab Passdetaljer i historiken + övningshistorik med tyngsta lyft (3 mån)
All checks were successful
release / build-release (push) Successful in 4m48s
- Tryck på ett pass i historiken -> detaljvy med övningar och alla set
- Historik-ikon på övningssidan i passläget -> ark med två flikar:
  tidigare pass med övningen (set för set) och tyngsta viktade seten
  senaste tre månaderna (uppvärmningsset exkluderade)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-24 21:44:49 +02:00
0f62741043 Rätta loggade set: tryck på ett klart set för att ändra eller ta bort
All checks were successful
release / build-release (push) Successful in 4m46s
Samma steppers som vid loggning. Ändring på osynkat set bärs av den
väntande add-opsen; synkat set får en update-op. Borttagning: lokalt
direkt, remove-op mot servern när setet redan var synkat.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-24 18:39:29 +02:00
93a1aa249a Robust referensdata-hämtning + auto-retry i övningsväljaren
All checks were successful
release / build-release (push) Successful in 4m46s
Om servern saknar de nya fälten (iconKey/defaultRestSeconds) faller
queries tillbaka på den äldre formen istället för att lämna cachen tom.
Varje cachesektion hämtas oberoende. Väljaren triggar en ny hämtning när
cachen är tom och har en Uppdatera-knapp i tomläget.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-24 18:21:24 +02:00
2c17873ca4 doc: milstolpe 2 klar i planen
All checks were successful
release / build-release (push) Successful in 8m50s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-24 13:31:47 +02:00
984e2374f8 M2: passläge, offline-först med synk-kö, vilotimer med inställningar
Some checks failed
release / build-release (push) Has been cancelled
- Room-cache: övningar/muskelgrupper/favoritkort + lokal-först-pass
- SyncEngine: FIFO-op-kö mot API:t, retry med backoff, synk-status per set
  (moln-ikon) + global räknare; nätfel loggar inte ut användaren
- Passläge: en övning i taget (svep), ±steppers, RPE, förifyllda värden
  från förra passet, logga set med ett tryck
- Vilotimer: helskärm eller banner (inställning), larm/vibration/visuell/
  inget vid utgång, ±15s, per-övnings vilotid via API:ts defaultRestSeconds
- Övningsväljare: sök + muskelgrupp/muskel-chips med ikoner (API:ts iconKey
  med namnheuristik som fallback), favoriter först, KG/REPS/TID/M-brickor
- Navigation: bottenrad + start-FAB + minispelare, hemskärm med favoritpass
- Inställningsskärm under Profil; historik-lista; version 0.2.0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-24 13:29:17 +02:00
53d17d467f doc: designförslag för milstolpe 2 (passpilot-konceptet)
All checks were successful
release / build-release (push) Successful in 4m31s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-24 12:03:43 +02:00
73c53e554d CI: pipefail-säkra licenssteget och gör SDK-setup pratigare
All checks were successful
release / build-release (push) Successful in 9m23s
yes | sdkmanager --licenses föll alltid med exit 141 (SIGPIPE) eftersom
jobbet kör med pipefail. Progress-markörer så att framtida fel pekar på
rätt delsteg.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
latest
2026-07-23 13:16:00 +02:00
8269e82b97 Trigga CI-bygge
Some checks failed
release / build-release (push) Failing after 52s
2026-07-23 13:13:03 +02:00
e8dc569da2 Trigga CI-bygge
Some checks failed
release / build-release (push) Failing after 6s
2026-07-23 13:09:32 +02:00
777f627888 Grund: Compose-app med login mot gym-API:t, VS Code-task och CI-release
Some checks failed
release / build-release (push) Failing after 1m42s
- Kotlin + Jetpack Compose + Material 3, minSdk 31 (Android 12)
- GraphQL-klient (OkHttp) med login/refresh/validate/logout som webben
- Tokenlagring i DataStore, auto-refresh av JWT
- Signering via gitignorerad signing/ lokalt och Actions-secrets i CI
- VS Code build-task -> build/FitnessDroid.apk
- Gitea Actions: bygger APK på Pi5 (arm64, aapt2-override) och publicerar
  rullande latest-release

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
2026-07-23 11:59:21 +02:00