Splash Android fiable + identité de la fenêtre desktop (icône/épinglage) - #30
Merged
Merged
Conversation
…esktop Android : le splash restait invisible (écran blanc pendant tout le chargement) car Python.start()/kairos_boot.prepare() s'exécutaient de façon synchrone sur le thread principal dans onCreate — ce même thread qui aurait dû dessiner et animer le splash (système ou, avant ce correctif, retenu via OnPreDrawListener) en était empêché tant que ce bloc s'exécutait. Remplace le splash système par un overlay applicatif (FrameLayout WebView + logo animé, réutilisant l'AnimatedVectorDrawable déjà créé) et déplace Python/uvicorn sur un thread dédié (kairos-init) : l'overlay se dessine et s'anime immédiatement, indépendamment de la durée du démarrage Python. L'overlay se masque en fondu à onPageFinished (+ filet de sécurité à 30s). Desktop : la fenêtre d'application (--app=, PR précédente) portait l'identité visuelle de Chrome/Chromium, pas de Kairos — impossible à épingler comme une vraie app séparée. Ajoute --class=Kairos à l'argv Chromium et, sur Linux et uniquement depuis l'exécutable figé, installe/réinstalle (idempotent) un fichier .desktop XDG assorti (StartupWMClass=Kairos, icône copiée depuis les PNG déjà embarqués) dans les emplacements utilisateur — aucun privilège root, aucune étape d'installation séparée à maintenir. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012rz3jgonqVHP4fzQsJh8oP
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Deux correctifs indépendants issus d'un retour utilisateur sur la release précédente.
1. Splash Android invisible (écran blanc pendant le chargement)
Diagnostic :
Python.start()etkairos_boot.prepare()s'exécutaient de façon synchrone sur le thread principal dansonCreate. Ce même thread aurait dû dessiner et animer le splash (système, puis — après la PR précédente — retenu viaViewTreeObserver.OnPreDrawListener) : tant que ce bloc bloquant s'exécutait (plusieurs secondes au premier lancement, extraction du paquet Python embarqué comprise), rien ne pouvait se dessiner à l'écran, splash retenu ou non.Fix : abandonne le splash système au profit d'un overlay applicatif qu'on maîtrise de bout en bout —
FrameLayoutempilant laWebViewet un overlay (fondkairos_bg+ logo animé, réutilisant l'AnimatedVectorDrawabledéjà créé pour l'ancien splash, juste rejoué explicitement viaAnimatable.start()). Python/uvicorn démarrent désormais sur un thread dédié (kairos-init), jamais le thread principal. L'overlay se masque en fondu àonPageFinished, avec un filet de sécurité à 30s si la page n'arrive jamais.Bénéfice secondaire : cette approche fonctionne identiquement de l'API 24 à 35 (le splash système ne couvrait que l'API 31+).
2. Fenêtre desktop identifiée comme Chrome, pas comme Kairos
Problème :
--app=URL(fenêtre d'application Chromium) hérite de laWM_CLASSet de l'icône du navigateur — impossible d'épingler Kairos comme une vraie application à part (Linux notamment).Fix : ajoute
--class=Kairosà l'argv Chromium, et installe (Linux, exécutable figé uniquement, jamais en dev/venv) un fichier.desktopXDG assorti (StartupWMClass=Kairos, icône copiée depuis les PNG déjà embarqués vers~/.local/share/icons/hicolor/...) dans les emplacements utilisateur — aucun privilège root, réécrit à chaque lancement (idempotent, s'auto-répare si l'exécutable est déplacé).Documentation mise à jour dans
docs/ANDROID_PACKAGING.md(avec le piège des deux tentatives précédentes tracé explicitement) etdocs/spec/packaging-lancement.md.Test plan
pytest(suite complète, 440 tests) — vert, avec 6 nouveaux tests dédiés (_desktop_entry_content,install_linux_desktop_entry— no-op hors Linux/hors-frozen, écriture réelle mockée, résilience aux erreurs d'écriture ; argv--class=Kairos)ImageView+AnimatedVectorDrawable.start()vérifié contre plusieurs exemples publics avant implémentation (déjà pris en défaut une fois sur une API Android plus niche dans une PR précédente de ce même chantier — vérification systématique cette fois)static/icon-192.png/icon-512.png) existent bien à l'emplacement queBASE_DIRrésout en usage réelcd android && ./gradlew assembleDebugsur émulateur/appareil pour confirmer que l'overlay s'affiche et s'anime pendant tout le chargement — non exécutable dans le sandbox de développement🤖 Generated with Claude Code
Generated by Claude Code