• v1.3.4 Stable

    Siphonight released this 2026-09-06 12:38:57 +02:00 | 50 commits to main since this release

    Corrigé

    • L'écran Doses faisait crasher l'app (remontée) : MissingFormatArgumentException: Format specifier '%3$d' — la string hrt_duration a TROIS placeholders
      (%1$d mois, %2$d jours, %3$d total) mais l'appel transmettait 2 arguments.
      Crash dès le premier affichage de l'écran Doses avec une donnée antérieure à
      aujourd'hui. Le bug est né en v1.3.1 (string + appel dans le même commit,
      jamais testés ensemble) et a survécu aux releases v1.3.1→v1.3.3. Fix : passer
      totalDays en 3ᵉ argument (cf §14 #47).
    • L'export des logs de diagnostic faisait crasher l'app (remontée répétée ;
      les « fixes » IO de v1.3.2 et v1.3.3 étaient corrects mais à côté du vrai
      problème) : le nom de fichier était construit via
      LocalDate.now().format(ofPattern("yyyyMMdd-HHmm")) — un LocalDate n'a pas
      de champ horaire → UnsupportedTemporalTypeException: Unsupported field: HourOfDay, levée SYNCHRONEMENT dans le onClick (thread UI) au tap sur
      « Exporter », avant même l'ouverture du gestionnaire de fichiers. L'export
      JSON fonctionnait car son pattern yyyyMMdd est valide pour un LocalDate.
      FIX : utilitaire ExportFileNames (pur, testé) — diagnosticLogFileName()
      utilise un LocalDateTime ; backupFileName() reste sur LocalDate.
      Cf §14 #48.
    • Lint StringFormatMatches (détecté en implantant le lint — nouveau filet
      de la v1.3.4) : la notification de rappel passait un Double à une %s.
      Fix : dose.toString() (comportement d'affichage inchangé, #49).

    Ajouté

    • Lint en filet bloquant : ./gradlew lint est désormais vert (it aurait
      attrapé dès v1.3.1 les deux crashs ci-dessus via StringFormatMatches).
      Les deux checks Compose 1.12+ théoriques (NonObservableLocale,
      LocalContextGetResourceValueCall) sont rétrogradés en warning via
      app/lint.xml (staleness de config, refonte i18n plus tard, cf §19/§20).
    • Recette reproductible : test manuel sur émulateur (documentée §16.ter) :
      émulateur + image ATD ou google_apis, seed de la DB du debug avec un backup
      JSON via le nouveau script scripts/seed-emulator.py (générique, sans
      aucune donnée embarquée), installation du APK release par-dessus (données
      conservées, même signature), pilotage par uiautomator dump + input tap,
      crashs via adb logcat -b crash. C'est cette recette qui a reproduit et
      confirmé les deux crashs ci-dessus ainsi que LEUR correction (flux SAF
      complet : picker → SAVE → fichier écrit → message de confirmation, sur
      l'APK release données réelles).
    • 3 nouveaux tests (ExportFileNamesTest, 90 au total / 72 sans les
      données locales) : épinglent le format des noms de fichiers d'export —
      auraient attrapé le bug #48 le jour même.
    Downloads