Skip to content

Synchronisation Health Connect - #22

Merged
Kaz229 merged 1 commit into
mainfrom
health-connect
Nov 1, 2026
Merged

Kaz229 merged 1 commit into
mainfrom
health-connect

Conversation

@Kaz229

@Kaz229 Kaz229 commented Nov 1, 2026

Copy link
Copy Markdown
Owner

Ferme #17. Remplace #20, fermée automatiquement quand la branche de base macros-openfoodfacts a été supprimée à la fusion de #14. Contenu identique.

Ce que ça fait

  • Écrit les séances, les calories brûlées et le journal alimentaire avec ses macros
  • Lit le poids, proposé et non appliqué d'office
  • Écran dédié dans le profil : disponibilité, autorisations, synchro manuelle, date de dernière réussite
  • Rien ne part sans action explicite ; l'app reste entière si Health Connect est absent ou refusé

L'idempotence passe par clientRecordId : relancer la synchro met à jour l'existant au lieu de dupliquer.

Un bug que seul le test sur appareil a révélé

Health Connect refuse tout enregistrement dans le futur. FitTrack ne retient que le jour d'une séance : la convention « séance à 18 h » faisait échouer toute synchronisation lancée avant 18 h. Les créneaux sont désormais reculés juste ce qu'il faut. Couvert par 4 tests.

Montée du build, imposée par le SDK

AGP 8.7.3 → 8.13.2 · compileSdk 35 → 36 · Gradle 8.11.1 → 8.13 · CameraX 1.4.1 → 1.6.2

Health Connect masquait aussi le vrai artefact guava, ce qui cassait l'aperçu caméra : concurrent-futures-ktx le rétablit et remplace le addListener du scan par un await().

Vérifié sur émulateur

  • 2 séances et 2 repas envoyés, visibles dans Health Connect avec les bons types
  • 3 synchronisations → 2 entrées : pas de doublon
  • Créneaux enchaînés 14h24 → 15h39 → 16h14, sans chevauchement

🤖 Generated with Claude Code

Les données restaient enfermées dans l'app. Elles sont maintenant partagées
avec le magasin de santé d'Android, si l'utilisateur l'active.

- Écriture des séances (`ExerciseSessionRecord`), des calories brûlées
  (`ActiveCaloriesBurnedRecord`) et du journal alimentaire avec ses macros
  (`NutritionRecord`) ; lecture du poids, proposée et non appliquée d'office.
- Idempotence par `clientRecordId` plutôt que par une table de
  correspondance : relancer la synchronisation met à jour l'existant au
  lieu de dupliquer, et corriger une séance corrige l'enregistrement.
- Écran dédié dans le profil : disponibilité, autorisations, synchronisation
  manuelle, date de dernière réussite. Rien ne part sans action explicite, et
  l'app reste entière si Health Connect est absent ou refusé.

FitTrack ne retient que le jour d'une séance, jamais son heure, alors que
Health Connect exige un créneau. Les séances d'une même journée sont donc
posées à la suite en fin d'après-midi, et les repas à l'heure habituelle de
leur catégorie. Health Connect refusant tout enregistrement à venir, un
créneau qui déborderait est reculé juste ce qu'il faut : sans cela, une
synchronisation lancée avant 18 h échouait systématiquement — constaté sur
l'émulateur, corrigé, et couvert par quatre tests.

Le build devait monter pour accueillir le SDK : AGP 8.7.3 → 8.13.2,
compileSdk 35 → 36, Gradle 8.11.1 → 8.13, CameraX 1.4.1 → 1.6.2.
`concurrent-futures-ktx` rétablit au passage le vrai artefact guava, que
Health Connect masquait, et remplace le `addListener` de l'aperçu caméra
par un `await()`.

Vérifié sur émulateur : autorisations accordées, deux séances et deux repas
envoyés, puis trois synchronisations successives qui laissent exactement deux
entrées dans Health Connect, enchaînées sans chevauchement.
@Kaz229
Kaz229 merged commit b8794ba into main Nov 1, 2026
2 checks passed
@Kaz229
Kaz229 deleted the health-connect branch November 1, 2026 16:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant