# Vérification de Robot Face 1.2.0 Date : 8 novembre 2026 ## Nouveautés livrées 64 comportements procéduraux (26 conservés, 38 ajoutés) et 15 humeurs (9 conservées, 6 ajoutées). Nouveaux gestes : signes de tête, inclinaisons, recherches, trajectoires circulaires/en huit, reconnaissance, doute, idée soudaine, timidité, affection, rires, danse, bonds, fierté, concentration, soupirs, bouderie, larme, réconfort et étirements. Les durées, directions, trajectoires et amplitudes varient. Les yeux et la bouche adoptent des couleurs progressives selon l’humeur ou un cycle multicolore lent. Le mode fixe conserve exactement les deux couleurs choisies. L’intensité et la vitesse sont réglables. Le mode nuit ralentit et atténue les variations ; le fond reste celui choisi. Aucun stroboscope ni variation brusque de luminosité ajouté. Les détails vectoriels comprennent des yeux en cœur, étoiles, sourires courbés, joues rosées, larmes et sourcils. Une option désactive les détails additionnels. L’humeur peut être automatique ou fixe ; sa fréquence est indépendante de celle des gestes. La sélection pénalise aussi les familles de gestes récentes. ## Fichiers modifiés Nouveaux fichiers moteur : ExtraExpressions.kt, BehaviorCatalog.kt, ColorAnimator.kt, ExpressivenessTest.kt. Fichiers étendus : RobotConfig.kt, Expressions.kt, AnimationEngine.kt, RobotFaceView.kt, ConfigCodec.kt, SettingsPage.kt, RobotApp.kt, DiagnosticLabels.kt, RuntimeTest.kt, RoutineTest.kt, SettingsRepository.kt et app/build.gradle.kts. README, architecture et recette S23 mis à jour. La page de téléchargement et la configuration MIME nginx accueillent le nouvel APK. Aucune nouvelle dépendance et aucune permission sensible ajoutée. Les formes utilisent les objets Path/Paint/RectF réutilisés et le même moteur dans l’aperçu, le plein écran et DreamService. Aucun GIF, vidéo, SDK réseau, service permanent ou nouveau récepteur en arrière-plan. ## Compilation et signature Application fr.factit.robotface, versionCode 3, versionName 1.2.0. Même certificat de livraison que 1.1, installation par-dessus réussie sur l’émulateur, sans désinstallation. Préférences et profils JSON compatibles ; nouvelles propriétés facultatives ajoutées au schéma existant. Commande : ./gradlew :engine:test :app:assembleDebug :app:assembleDebugAndroidTest :app:lintDebug --no-daemon --console=plain Build réussi. Lint : 0 erreur, 9 avertissements non bloquants hérités ou liés au style/outillage. Signature vérifiée avec apksigner. Alignement contrôlé avec zipalign -c -P 16 -v 4. Aucun secret, keystore, local.properties, SDK ou état personnel dans l’archive des sources. ## Tests JVM 25 tests réussis : 17 tests existants et 8 nouveaux tests d’expressivité. - Catalogue : 64 identifiants et séquences distincts, 15 humeurs ; durées et paramètres bornés sur toutes les combinaisons testées - Simulation de six heures : 3 117 comportements sélectionnés, les 64 variantes rencontrées, aucune répétition immédiate, historique borné - Chaque humeur fixe conserve une sélection compatible - Mode automatique : les 15 humeurs rencontrées sur une heure simulée, mémoire bornée - Couleurs fixes exactes et indépendantes pour yeux/bouche - Couleurs d’humeur distinctes, opaques, progression bornée entre images - Cycle multicolore et ralentissement nocturne - Désactivation des détails, changement d’humeur et rejet des réactions inconnues - Politique Qi/USB/dock, horaires, batterie pleine, maintien, thermique, durée et routine conservée ## Tests Android 17 tests instrumentés réussis sur émulateur Android 17 / API 37. - Sept nouvelles expressions forcées sur la vue réellement animée : cœurs, étoiles, danse, larmes, timidité, rire et suivi en huit ; Canvas capturé et contenu vectoriel vérifié - Import/export de toutes les nouvelles préférences et lecture d’un profil ancien sans les nouvelles propriétés - Refus des imports trop grands, futurs ou mal typés ; persistance DataStore et profils ; non-régression des modifications rapprochées - Rendu portrait/paysage/carré, réglages extrêmes, rotation 0/90/180/270 sans remplacement du moteur - Frames réelles, pause en arrière-plan et arrêt des callbacks visibles - Détection Android réelle des sources et batterie pleine, avec données simulées par le banc d’essai - Entrée de lancement réelle → visage sur Qi, fermeture à la déconnexion, USB → réglages, accès aux réglages sur Qi - Remplacement d’une ancienne session manuelle et refus de la routine désactivée - Affichage animé au-dessus d’un verrouillage par PIN temporaire sur l’émulateur : appareil toujours verrouillé pendant le visage et après sa fermeture ; PIN ensuite retiré - Protection BIND_DREAM_SERVICE et absence de permissions Internet, superposition, wakelock et réglages sécurisés Le test de refus de routine a révélé une course existante dans la persistance : une émission retardée de DataStore pouvait remplacer une modification plus récente. Le dépôt initialise désormais sa configuration depuis le disque une seule fois, conserve les modifications en mémoire comme référence, écrit la valeur en attente et utilise une comparaison atomique pour ne pas effacer une modification arrivée pendant une écriture. flush vide les écritures en attente. Un nouveau test effectue 24 modifications rapprochées, vérifie la dernière valeur et la relit avec un nouveau dépôt. Le test de refus attend aussi le cycle réel de l’activité plutôt qu’un délai fixe, sans relâcher le filtre applicatif. ## Limites Les captures et tests proviennent d’un émulateur, pas d’un Galaxy S23 physique. Les six heures sont simulées pour le moteur ; ce n’est pas un test physique de six heures de batterie ou d’écran. La recharge Qi réelle, la consommation, la température et les autorisations Samsung Modes et routines restent à vérifier sur le téléphone selon TEST-S23.md. Les rapports 1.0 et 1.1 sont conservés dans les sources. Les contrôles réels antérieurs de DreamService restent documentés ; ils ne sont pas présentés comme de nouvelles mesures physiques pour 1.2.