Commit Graph

39 Commits

Author SHA1 Message Date
5f1d1eae4f Etapp 5: stegsynk via Health Connect
All checks were successful
release / build-release (push) Successful in 4m30s
- StepsSync: läser dagens + gårdagens stegsumma (StepsRecord.COUNT_TOTAL)
  och upsertar till gym-API:t; synkas automatiskt (max var 10:e min) när
  hemskärmen visas
- Inställningar → Stegsynk: status, aktivera-flöde (HC-permission),
  Play-länk om Health Connect saknas, manuell synk
- Kcal-mätarens telefonrad visar nu riktiga steg + kcal (serverns
  beräkning med dubbelräkningsskydd); stegmål får riktig data
- connect-client 1.1.0-alpha07 (nyare kräver AGP 8.9/compileSdk 36 —
  toolchain-bump tas separat); HC-manifest (READ_STEPS, rationale-intents)
- Version 0.10.0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-26 12:10:30 +02:00
49da9190b6 Etapp 4: mål & progress-mätare på hemskärmen
All checks were successful
release / build-release (push) Successful in 6m52s
- Målkort på Hem: alla mål med progress-bars (aktuellt/mål), tryck →
  målskärmen med sätt/uppdatera/ta bort (metrik × period × värde)
- Metriker: aktiva kalorier, gympass, aktiviteter, distans km, steg
  (stegdata kommer i etapp 5); perioder: dag/vecka/månad
- GymApi: goalsWithProgress (lokala periodstarter som instants) + setGoal
- Version 0.9.0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-26 11:56:05 +02:00
53e4f14b67 Rörelsevakt: accelerometern fryser spåret när man står stilla
All checks were successful
release / build-release (push) Successful in 4m19s
GPS-drift vid stillastående gav fejkspår/-distans/-höjdmeter (och 2 km/h
snittfart från en soffa). Nu mäter accelerometern vibrationsmönstret
(glidande 4 s-fönster av |accel|−g): under tröskeln = stilla → kartpositionen
uppdateras men spårpunkter, distans och höjdmeter fryses. GPS-rutan visar
'stilla'. Övergångar loggas i tekniska loggen med uppmätt nivå.

Inställningar → GPS-spårning: av/på-switch + känslighet (0,35 m/s² standard,
justerbar 0,10–1,50). Version 0.8.4.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-26 08:01:38 +02:00
33a8e71ed1 GPS-filter mot jitter: fartgrind (Doppler), stillastående-filter, baslinje-reset
All checks were successful
release / build-release (push) Successful in 4m19s
Användarens idé i sensorriktig variant: GPS:ens egen Doppler-fartmätning
(stabilare än positionerna) används som referens —
- Fartgrind: positionshopp som kräver > faktor × Doppler-fart förkastas
  (t.ex. 100 m-hopp vid gångfart). Efter 4 förkastade i rad sätts ny
  baslinje (tunnel/underfart) utan att distans räknas.
- Stillastående-filter: vandring < max(2 m, halva noggrannheten) räknas
  varken som distans eller spårpunkt — ingen fejkdistans när man står still.
- Allt loggas i tekniska loggen (hopp, tillåten fart, förkastanden).
Justerbart i Inställningar → GPS-spårning: noggrannhetsgräns (35 m),
fartfaktor (2,0×), fartgolv (12 km/h). Version 0.8.3.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-26 07:25:35 +02:00
edbd16464d Spårning: fixa fasbytet (stale state) + loggvisaren till inställningarna
All checks were successful
release / build-release (push) Successful in 4m12s
- onLocationChanged skrev tillbaka ett gammalt state-snapshot och nollade
  SEARCHING→ACTIVE-övergången — klockan stod kvar på 00:00 trots fix
  (syntes som dubbla 'aktiverad'-rader i loggen). Nu utgår slutskrivningen
  från aktuellt state.
- Teknisk spårningslogg är nu en switch under Inställningar → Felsökning,
  av som standard. Version 0.8.2.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-25 09:44:54 +02:00
dcb91f587d GPS: lyssna på alla platsproviders (gps/fused/network) + kartmarkör
All checks were successful
release / build-release (push) Successful in 4m13s
Fälttest visade noll callbacks från råa GPS_PROVIDER på wheatek WP19 —
telefonen levererar via fused/network. Nu:
- Lyssning på gps + fused + network (FUSED_PROVIDER finns fr.o.m. API 31);
  loggen visar vilka providers som finns/är på och varje fix per provider
- Kartan centreras direkt på senast kända position (lastKnownLocation) och
  visar en positionsmarkör — ingen blå 0°,0°-ocean längre
- Spårpunkter filtreras på noggrannhet (≤35 m) istället för provider;
  positionen på kartan uppdateras oavsett kvalitet
Version 0.8.1

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-25 09:25:41 +02:00
2f6c55e967 Etapp 3-feedback: GPS-väntfas, offline-kö för aktiviteter, teknisk logg
All checks were successful
release / build-release (push) Successful in 4m10s
1. Start väntar på GPS-fix: klockan startar vid första fixen eller via
   'Starta ändå'-knappen (fasen SEARCHING_GPS → ACTIVE); tid utan fix
   räknas inte längre
2. Offline-sparning: aktiviteter (spårade + manuellt loggade) köas i Room
   (pending_activity, migration v5) och synkas av samma FIFO-kö som passen
   (OpKind.ADD_ACTIVITY); 'väntar på synk'-sektion i aktivitetslistan
3. Teknisk logg (TrackLog): ringbuffert med GPS-fixar (accepterade/förkastade
   + noggrannhet), fasbyten och sparningar — expanderbar på spårskärmen med
   'Dela loggen'-knapp för enkel fältfelsökning

Version 0.8.0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-25 08:55:34 +02:00
80a758a097 Fix: platsbehörigheterna försvann på Android 12+ (blessed-kotlins maxSdkVersion=30)
All checks were successful
release / build-release (push) Successful in 4m9s
blessed-kotlin deklarerar ACCESS_FINE/COARSE_LOCATION med maxSdkVersion=30
och manifest-mergern ärvde in begränsningen — behörigheten fanns då inte
alls på Android 12+: ingen dialog och inget alternativ i appinställningarna.
tools:remove="android:maxSdkVersion" på våra deklarationer löser det.
Version 0.7.2.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-25 06:54:39 +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
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
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
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
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
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
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
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
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
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