widget ouverture sous-tache #29

Closed
opened 2026-03-30 23:31:56 +00:00 by maximus · 0 comments
Owner

Contexte

L'ouverture des sous-tâches dans le widget Android est lente (1-3s). Le délai vient du boot headless JS (incompressible) + 3 lectures AsyncStorage. L'utilisateur appuie une deuxième fois pensant que ça n'a pas fonctionné, ce qui replie la liste.

Cause racine

  1. Boot du runtime headless JS (~1-2s) — incompressible
  2. 3 lectures AsyncStorage en parallèle (widget:tasks, widget:isDark, widget:expandedTaskIds)
  3. 1 écriture AsyncStorage pour sauvegarder l'état expanded

Approche retenue : Consolidation AsyncStorage + debounce (Option A)

Fusionner les 3 clés widget en une seule widget:state. Ajouter un debounce temporel sur TOGGLE_EXPAND pour éviter le double-tap.

Travail à faire

  • Consolider widget:tasks, widget:isDark, widget:expandedTaskIds en une seule clé widget:state
  • Migrer la lecture/écriture dans widgetSync.ts et widgetTaskHandler.ts
  • Ajouter un debounce sur TOGGLE_EXPAND (ignorer si même taskId < 2s)
  • Gérer la migration depuis les anciennes clés

Fichiers concernés

  • src/widgets/widgetTaskHandler.ts — handler clicks, debounce, lecture consolidée
  • src/services/widgetSync.ts — écriture données widget (une seule clé)
  • src/widgets/TaskListWidget.tsx — pas de changement

Critères d'acceptation

  • L'expansion des sous-tâches fonctionne sans régression
  • Un double-tap rapide ne replie pas les sous-tâches
  • Les données widget existantes sont migrées vers la nouvelle structure
  • Latence réduite (~200ms de gain sur les I/O)

Complexité estimée

Medium

## Contexte L'ouverture des sous-tâches dans le widget Android est lente (1-3s). Le délai vient du boot headless JS (incompressible) + 3 lectures AsyncStorage. L'utilisateur appuie une deuxième fois pensant que ça n'a pas fonctionné, ce qui replie la liste. ## Cause racine 1. Boot du runtime headless JS (~1-2s) — incompressible 2. 3 lectures AsyncStorage en parallèle (`widget:tasks`, `widget:isDark`, `widget:expandedTaskIds`) 3. 1 écriture AsyncStorage pour sauvegarder l'état expanded ## Approche retenue : Consolidation AsyncStorage + debounce (Option A) Fusionner les 3 clés widget en une seule `widget:state`. Ajouter un debounce temporel sur TOGGLE_EXPAND pour éviter le double-tap. ## Travail à faire - [ ] Consolider `widget:tasks`, `widget:isDark`, `widget:expandedTaskIds` en une seule clé `widget:state` - [ ] Migrer la lecture/écriture dans `widgetSync.ts` et `widgetTaskHandler.ts` - [ ] Ajouter un debounce sur `TOGGLE_EXPAND` (ignorer si même taskId < 2s) - [ ] Gérer la migration depuis les anciennes clés ## Fichiers concernés - `src/widgets/widgetTaskHandler.ts` — handler clicks, debounce, lecture consolidée - `src/services/widgetSync.ts` — écriture données widget (une seule clé) - `src/widgets/TaskListWidget.tsx` — pas de changement ## Critères d'acceptation - [ ] L'expansion des sous-tâches fonctionne sans régression - [ ] Un double-tap rapide ne replie pas les sous-tâches - [ ] Les données widget existantes sont migrées vers la nouvelle structure - [ ] Latence réduite (~200ms de gain sur les I/O) ## Complexité estimée Medium
maximus added the
source:human
status:ready
type:bug
labels 2026-03-30 23:43:07 +00:00
maximus added the
status:review
label 2026-03-30 23:45:24 +00:00
maximus added
status:approved
and removed
status:review
labels 2026-03-30 23:46:46 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: maximus/simpl-liste#29
No description provided.