FOXA-2239 : la colonne survit à une rafale de D-pad dans Découvrir #1015

Merged
foXaCe merged 1 commit from passe-20261018-190000-colonnerafale into main 2026-10-18 17:44:25 +02:00
Owner

Résumé

FOXA-2239 — dans Découvrir, une rafale de D-pad haut/bas ne change plus de colonne.

  • 9735a8171 FOXA-2239 : la colonne survit a une rafale de D-pad dans Decouvrir

Pourquoi

Le défilement rapide vertical relève la colonne au départ du geste, en cherchant la carte
focalisée dans les items visibles :

fastScrollStartColumn = gridState.layoutInfo.visibleItemsInfo
    .firstOrNull { it.index == focusedItemIndex }
    ?.column

Pendant une rafale, cette carte est déjà sortie de l'écran : la recherche rend null, et le
repli prend « la dernière carte visible » — donc une autre colonne. Mesuré sur la box le
2026-09-26 : 8 appuis en rafale depuis la colonne 4 ou 5 finissaient en colonne 1 (7 fois sur 8),
et 8 haut ne ramenaient jamais la carte de départ.

Ce qui change

La colonne se déduit de l'index et du nombre de colonnes (index = ligne × colonnes + colonne) ;
le nombre de colonnes se lit sur les débuts de ligne visibles — l'écart entre deux index de
colonne 0 vaut exactement ce nombre. Et si la fonction ne sait pas, on garde la colonne
précédente au lieu de l'écraser par un null.

Les deux fonctions pures vivent dans ui/screens/search/ColonnesDeLaGrille.kt : les ajouter à
l'écran faisait passer le fichier au-dessus du plafond TooManyFunctions de detekt — et le plafond a
raison, un fichier qui porte l'écran et sa géométrie cesse d'être lisible.

Ce qui a été mesuré

5 tests :

ce qui est mesuré comment
une carte visible donne sa colonne index 8 dans une grille de 5 → colonne 3
une carte sortie de l'écran garde sa colonne index 22, cinq colonnes → 22 % 5 = 2
le nombre de colonnes se lit sur les débuts de ligne grille de 5 → 5 ; grille de 3 → 3
sans début de ligne, on ne devine pas une ligne partielle visible → null
un index négatif ne désigne aucune colonne -1 → null
./gradlew :app:testFullDebugUnitTest -Pnuvio.android.distribution=full --tests '*LaColonneSurvitALaRafaleTest*'
BUILD SUCCESSFUL — 5 tests, 0 échec

Suite complète rejouée : verte en 8m17s. detekt : vert.

⚠ Le banc mesure le calcul de la colonne, pas le geste : la preuve « 8 appuis en rafale ≡ 8
appuis lents » demande la box et la sonde uiautomator du rapport de FOXA-2237.

Porte jouée par la forge : « Porte / porte* » est le seul contexte qu'exige la protection de main.

Scope boundaries

Les autres grilles qui partagent dpadVerticalFastScroll (FolderDetailScreen, l'accueil via
ModernHomeRowsList) ne sont pas touchées : leurs sites de relevé sont différents, et le ticket
demande la même vérification après celle-ci. Un seul correctif à la fois.

## Résumé FOXA-2239 — dans Découvrir, une rafale de D-pad haut/bas ne change plus de colonne. - 9735a8171 FOXA-2239 : la colonne survit a une rafale de D-pad dans Decouvrir ## Pourquoi Le défilement rapide vertical relève la colonne **au départ du geste**, en cherchant la carte focalisée dans les items **visibles** : ```kotlin fastScrollStartColumn = gridState.layoutInfo.visibleItemsInfo .firstOrNull { it.index == focusedItemIndex } ?.column ``` Pendant une rafale, cette carte est **déjà sortie de l'écran** : la recherche rend `null`, et le repli prend « la dernière carte visible » — donc une autre colonne. Mesuré sur la box le 2026-09-26 : 8 appuis en rafale depuis la colonne 4 ou 5 finissaient en **colonne 1** (7 fois sur 8), et 8 haut ne ramenaient jamais la carte de départ. ## Ce qui change La colonne se **déduit** de l'index et du nombre de colonnes (`index = ligne × colonnes + colonne`) ; le nombre de colonnes se lit sur les **débuts de ligne visibles** — l'écart entre deux index de colonne 0 vaut exactement ce nombre. Et si la fonction ne sait pas, on **garde** la colonne précédente au lieu de l'écraser par un `null`. Les deux fonctions pures vivent dans `ui/screens/search/ColonnesDeLaGrille.kt` : les ajouter à l'écran faisait passer le fichier au-dessus du plafond `TooManyFunctions` de detekt — et le plafond a raison, un fichier qui porte l'écran **et** sa géométrie cesse d'être lisible. ## Ce qui a été mesuré 5 tests : | ce qui est mesuré | comment | |---|---| | une carte visible donne sa colonne | index 8 dans une grille de 5 → colonne 3 | | une carte sortie de l'écran garde sa colonne | index 22, cinq colonnes → 22 % 5 = 2 | | le nombre de colonnes se lit sur les débuts de ligne | grille de 5 → 5 ; grille de 3 → 3 | | sans début de ligne, on ne devine pas | une ligne partielle visible → `null` | | un index négatif ne désigne aucune colonne | `-1` → `null` | ``` ./gradlew :app:testFullDebugUnitTest -Pnuvio.android.distribution=full --tests '*LaColonneSurvitALaRafaleTest*' BUILD SUCCESSFUL — 5 tests, 0 échec ``` Suite complète rejouée : **verte en 8m17s**. detekt : **vert**. ⚠ Le banc mesure le **calcul** de la colonne, pas le geste : la preuve « 8 appuis en rafale ≡ 8 appuis lents » demande la box et la sonde `uiautomator` du rapport de `FOXA-2237`. Porte jouée par la forge : « Porte / porte* » est le seul contexte qu'exige la protection de `main`. ## Scope boundaries Les autres grilles qui partagent `dpadVerticalFastScroll` (`FolderDetailScreen`, l'accueil via `ModernHomeRowsList`) ne sont pas touchées : leurs sites de relevé sont différents, et le ticket demande la même vérification **après** celle-ci. Un seul correctif à la fois.
FOXA-2239 : la colonne survit a une rafale de D-pad dans Decouvrir
All checks were successful
PR Template Check / validate_pr_body (pull_request) Successful in 1s
Porte / porte (pull_request) Successful in 13m34s
9735a81711
Le defilement rapide vertical releve la colonne au DEPART du geste, en cherchant la carte focalisee
dans les items VISIBLES. Pendant une rafale, cette carte est deja sortie de l'ecran : la recherche
rendait null, et le repli prenait « la derniere carte visible » — donc une autre colonne. Mesure sur
la box : 8 appuis en rafale depuis la colonne 4 ou 5 finissaient en colonne 1 (7 fois sur 8).

La colonne se deduit maintenant de l'index et du nombre de colonnes (index = ligne x colonnes +
colonne), et le nombre de colonnes se lit sur les debuts de ligne visibles. Si elle ne sait pas, on
GARDE la colonne precedente au lieu de l'ecraser par un null.

Les deux fonctions pures vivent dans ColonnesDeLaGrille.kt : les ajouter a l'ecran faisait passer le
fichier au-dessus du plafond TooManyFunctions de detekt, et le plafond a raison.

5 tests : carte visible, carte sortie de l'ecran, nombre de colonnes lu sur les debuts de ligne, et
les deux cas ou l'on ne devine pas.
foXaCe scheduled this pull request to auto merge when all checks succeed 2026-10-18 17:28:28 +02:00
foXaCe merged commit 03366323d5 into main 2026-10-18 17:44:25 +02:00
foXaCe deleted branch passe-20261018-190000-colonnerafale 2026-10-18 17:44:25 +02:00
Sign in to join this conversation.
No reviewers
No labels
montee-majeure
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
foXaCe/NuvioTV!1015
No description provided.