Skip to content

Splash Android fiable + identité de la fenêtre desktop (icône/épinglage) - #30

Merged
SKOHscripts merged 1 commit into
mainfrom
fix/android-splash-and-desktop-identity
Jul 23, 2026
Merged

Splash Android fiable + identité de la fenêtre desktop (icône/épinglage)#30
SKOHscripts merged 1 commit into
mainfrom
fix/android-splash-and-desktop-identity

Conversation

@SKOHscripts

@SKOHscripts SKOHscripts commented Jul 23, 2026

Copy link
Copy Markdown
Owner

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() et kairos_boot.prepare() s'exécutaient de façon synchrone sur le thread principal dans onCreate. Ce même thread aurait dû dessiner et animer le splash (système, puis — après la PR précédente — retenu via ViewTreeObserver.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 — FrameLayout empilant la WebView et un overlay (fond kairos_bg + logo animé, réutilisant l'AnimatedVectorDrawable déjà créé pour l'ancien splash, juste rejoué explicitement via Animatable.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 la WM_CLASS et 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 .desktop XDG 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) et docs/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)
  • Patron 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)
  • Vérification que les PNG (static/icon-192.png/icon-512.png) existent bien à l'emplacement que BASE_DIR résout en usage réel
  • Android : nécessite un vrai cd android && ./gradlew assembleDebug sur é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
  • Desktop : l'affichage réel de l'icône Kairos sur la fenêtre et l'épinglage nécessitent un poste Linux réel avec un navigateur Chromium installé — non exécutable dans le sandbox de développement

🤖 Generated with Claude Code


Generated by Claude Code

…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
@SKOHscripts
SKOHscripts marked this pull request as ready for review July 23, 2026 11:51
@SKOHscripts
SKOHscripts merged commit b108bc3 into main Jul 23, 2026
5 checks passed
@SKOHscripts
SKOHscripts deleted the fix/android-splash-and-desktop-identity branch July 23, 2026 11:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants