Skip to content

chore: solder deux écarts avant d'attaquer Android Auto - #35

Merged
InstaZDLL merged 1 commit into
mainfrom
chore/soldes-avant-android-auto
Aug 23, 2026
Merged

chore: solder deux écarts avant d'attaquer Android Auto#35
InstaZDLL merged 1 commit into
mainfrom
chore/soldes-avant-android-auto

Conversation

@InstaZDLL

@InstaZDLL InstaZDLL commented Aug 23, 2026

Copy link
Copy Markdown
Owner

Trois points traînaient au tableau de bord avant Android Auto. Deux sont corrigés, le troisième est écarté après examen — et c'est le plus intéressant des trois.

Le client d'images n'avait aucun plafond d'appel

WaveFlowApp.newImageLoader construisait son OkHttpClient à la main, sans callTimeout, là où celui de l'API en porte un de 30 s. Or les délais par défaut d'OkHttp portent sur chaque étape prise à part — connexion, lecture, écriture — et aucun ne borne l'appel entier. Une pochette qui n'arrive jamais retenait donc son fil de bout en bout.

ServerHttp.imageClient(auth) le construit désormais, avec la même constante que defaultClient(). Le plafond se décide à un seul endroit, et le test le vérifie en comparant les deux valeurs plutôt qu'en figeant un nombre.

Découvert en instruisant un retour CodeRabbit sur la #34 — celui que j'avais écarté, à raison, mais qui a mis le doigt sur cet écart de configuration.

Un texte faux depuis la #17

L'écran du compte annonçait « La lecture à distance arrive dans une prochaine version ». Elle est là depuis sept PR.

Écarté : le catch (Throwable) de CoilBitmapLoader

Le tableau de bord le donnait « à uniformiser », dernier écart depuis que le dépôt a tranché pour Exception en #33. L'examen dit de ne pas y toucher.

Ce catch n'avale pas l'erreur : il la transmet par future.setException. Et la portée des pochettes (artworkScope) a bien un SupervisorJob, mais pas de CoroutineExceptionHandler. Le restreindre à Exception ferait donc remonter un OutOfMemoryError de décodage jusqu'au gestionnaire global — c'est-à-dire planter le service de lecture, au lieu de perdre une vignette et de le signaler proprement à Media3.

Le décodage d'images est précisément le lieu où cette erreur survient. Le Throwable y est justifié, et la ligne sort du tableau de bord plutôt que d'y rester en attente.

Validation

Retrait du .callTimeout(CALL_TIMEOUT) de imageClient → seul le nouveau test tombe :

le client des pochettes borne l'appel entier FAILED
  java.lang.AssertionError: le plafond doit être posé

Suite complète : 276 tests, 0 échec (275 + 1). ktlintCheck detekt lintDebug verts, aux deux avertissements laissés visibles en #33 près.

Ce qui reste après cette PR

Android Auto, seul point du tableau de bord. Le BitmapLoader est posé depuis la #26 et PlaybackService est un MediaSessionService correctement déclaré, mais l'essentiel reste : passer à MediaLibraryService, implémenter l'arbre de navigation (onGetLibraryRoot / onGetChildren), et déclarer l'application au manifeste — rien n'y figure aujourd'hui pour Auto.

https://claude.ai/code/session_01CHnmk73TFtaDDJWoCsLHUD

Summary by CodeRabbit

  • Nouvelles fonctionnalités

    • Les images du serveur utilisent désormais l’authentification de la session active.
    • La lecture des pistes du serveur est présentée comme identique à celle des pistes locales.
  • Corrections

    • Amélioration de la fiabilité des connexions lors du chargement des images, avec un délai d’attente cohérent.

Le client d'images de Coil n'avait aucun plafond d'appel, là où celui de l'API
en porte un de 30 s. Les délais par défaut d'OkHttp portent sur chaque étape
prise à part ; aucun ne borne l'appel entier, donc une pochette qui n'arrive
jamais retenait son fil de bout en bout. `ServerHttp.imageClient` le construit
désormais, avec la même constante que `defaultClient` : le plafond se décide à
un seul endroit.

L'écran du compte annonçait encore « La lecture à distance arrive dans une
prochaine version ». C'est faux depuis la #17.

Écarté après examen, contrairement à ce que le tableau de bord prévoyait : le
`catch (Throwable)` de `CoilBitmapLoader`. Il n'avale pas l'erreur, il la
transmet par le futur, et la portée des pochettes n'a pas de
`CoroutineExceptionHandler` — le restreindre à `Exception` ferait donc remonter
un `OutOfMemoryError` de décodage jusqu'au gestionnaire global, c'est-à-dire
planter le service de lecture au lieu de perdre une vignette. Le décodage
d'images est précisément le lieu de cette erreur-là.

Retrait du plafond → seul le nouveau test tombe, sur « le plafond doit être
posé ».

Claude-Session: https://claude.ai/code/session_01CHnmk73TFtaDDJWoCsLHUD
@github-actions github-actions Bot added scope: data Persistence, scanning, repositories scope: ui Views, components, theming, assets scope: tests Unit and UI tests type: chore Maintenance / tooling size: s 10-50 lines labels Aug 23, 2026
@coderabbitai

coderabbitai Bot commented Aug 23, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 01eea114-194f-42f6-9fa6-29e470092468

📥 Commits

Reviewing files that changed from the base of the PR and between c335d50 and bd703be.

📒 Files selected for processing (4)
  • app/src/main/java/app/waveflow/WaveFlowApp.kt
  • app/src/main/java/app/waveflow/data/remote/ServerHttp.kt
  • app/src/main/java/app/waveflow/ui/server/ServerScreen.kt
  • app/src/test/java/app/waveflow/data/remote/ServerImageAuthInterceptorTest.kt

Limit details: You’ve used the included review currently available. Your 90 included PR review attempts over the past 7 days set your current allowance at 1 review per hour.


📝 Walkthrough

Walkthrough

Le client HTTP des images est centralisé dans ServerHttp avec l’authentification de session et le délai commun. WaveFlowApp utilise ce client. Un test vérifie le délai. Le message de ServerScreen décrit la lecture des pistes du serveur.

Changes

Client HTTP et lecture serveur

Layer / File(s) Summary
Client HTTP dédié aux images
app/src/main/java/app/waveflow/data/remote/ServerHttp.kt
ServerHttp expose imageClient avec l’intercepteur d’authentification fourni et le délai CALL_TIMEOUT.
Intégration du chargeur d’images et validation
app/src/main/java/app/waveflow/WaveFlowApp.kt, app/src/test/java/app/waveflow/data/remote/ServerImageAuthInterceptorTest.kt
newImageLoader utilise ServerHttp.imageClient. Le test vérifie que le callTimeout est positif et identique à celui du client par défaut.
Message de lecture du serveur
app/src/main/java/app/waveflow/ui/server/ServerScreen.kt
Le compte connecté indique que les pistes du serveur peuvent être lues comme celles de l’appareil.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to bd703

This PR adds a bounded timeout for image requests and corrects outdated account-screen text; no actionable merge-blocking risk remains after normal checks and review.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive Le titre indique deux corrections, mais ne précise pas le client d’images ni le texte corrigé et reste trop vague pour identifier le changement principal. Remplacer le titre par un résumé précis, par exemple : « fix(images): centraliser le callTimeout de Coil et corriger le texte du compte ».
✅ Passed checks (4 passed)
Check name Status Explanation
Description check ✅ Passed La description explique les deux corrections, justifie le maintien de catch (Throwable) et fournit des résultats de validation reproductibles.
Docstring Coverage ✅ Passed Docstring check was indeterminate for this PR — some files could not be analyzed in time. Not blocking.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/soldes-avant-android-auto

Warning

Your free Security trial is over. An organization admin can activate billing to continue.

Usage-based review receipt

Note

This review was completed with usage-based billing: files reviewed beyond your plan's included limits are billed at $0.25/file. Track spend and usage in your billing settings.


Comment @coderabbitai help to get the list of available commands.

@InstaZDLL
InstaZDLL merged commit 314e903 into main Aug 23, 2026
4 checks passed
@InstaZDLL
InstaZDLL deleted the chore/soldes-avant-android-auto branch August 23, 2026 21:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

scope: data Persistence, scanning, repositories scope: tests Unit and UI tests scope: ui Views, components, theming, assets size: s 10-50 lines type: chore Maintenance / tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant