Skip to content

Synchronisation Health Connect - #20

Closed
Kaz229 wants to merge 1 commit into
macros-openfoodfactsfrom
health-connect
Closed

Kaz229 wants to merge 1 commit into
macros-openfoodfactsfrom
health-connect

Conversation

@Kaz229

@Kaz229 Kaz229 commented Nov 1, 2026

Copy link
Copy Markdown
Owner

Ferme #17.

PR empilée sur #14 : la base est macros-openfoodfacts, car l'export des macros en dépend. À fusionner après #14.

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, pas par une table de correspondance : 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 : ma convention « séance à 18 h » faisait donc é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

avant après
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 permet de remplacer le addListener du scan par un await().

Vérifié sur émulateur

  • 14 tests de mapping verts (43 sur le projet)
  • 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

Hors périmètre

L'écriture du poids vers Health Connect suppose de l'historiser, ce qui relève de #7.

🤖 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 deleted the branch macros-openfoodfacts November 1, 2026 16:03
@Kaz229 Kaz229 closed this Nov 1, 2026
@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