Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 32 additions & 12 deletions app/src/main/java/com/guyiome/androidmocap/ui/LoadingScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
Expand All @@ -30,30 +32,47 @@ import com.guyiome.androidmocap.R
* progression réelle exploitable (un seul appel bloquant, `FaceLandmarkerHelper.setup()`, domine le
* temps total), une barre déterminée inventerait une précision qui n'existe pas.
*
* Réutilise l'illustration de l'icône de lancement ([R.drawable.ic_launcher_foreground_source],
* déjà versionnée pour générer l'icône adaptative) comme logo -- pas de doublon d'asset à
* maintenir, cohérent avec ce que l'utilisateur voit déjà sur son écran d'accueil. Toujours un
* placeholder (en attente d'un logo dessiné par un.e artiste) -- crédit en bas à gauche par
* discrétion/honnêteté envers l'auteurice de l'image actuelle, sans revendiquer un logo final.
* Réutilise l'illustration de l'icône de lancement ([R.drawable.ic_launcher_foreground], déjà
* versionnée pour l'icône adaptative) comme logo -- pas de doublon d'asset à maintenir, cohérent
* avec ce que l'utilisateur voit déjà sur son écran d'accueil. Depuis le 28 août 2026, ce n'est
* plus un placeholder mais le logo définitif, par @clem_dreaw (voir mipmap-anydpi-v26/
* ic_launcher.xml pour le détail du choix de cadrage et de format) -- le crédit en bas à gauche
* reste, désormais comme attribution d'artiste et non plus comme réserve sur un placeholder.
*
* Contrairement aux placeholders précédents (sujet détouré sur fond transparent), cette
* illustration est plein cadre : affichée telle quelle, elle formerait un carré à bords nets
* tranchant sur le fond sombre. D'où le [clip] en coins arrondis, qui rappelle la forme sous
* laquelle l'utilisateur vient de voir cette même image sur son écran d'accueil. Le fond
* rose/magenta de l'illustration, que le masque du launcher supprime sur l'icône, est en revanche
* bien visible ici : aucun masque n'est appliqué, c'est le seul endroit de l'app où l'artwork
* s'affiche dans son cadrage complet.
*/
@Composable
fun LoadingScreen() {
Box(
modifier = Modifier
.fillMaxSize()
// Même couleur que le fond de l'icône adaptative (ic_launcher_background.xml) --
// continuité visuelle avec l'icône affichée juste avant que cet écran apparaisse.
// Même valeur que ic_launcher_background.xml, mais la justification d'origine
// ("continuité visuelle avec l'icône") ne tient plus depuis le logo plein cadre du
// 28 août 2026 : cette couche de fond de l'icône est désormais intégralement
// recouverte par l'artwork, donc jamais visible sur l'écran d'accueil. Ce gris-bleu
// sombre reste néanmoins le bon choix ici -- il laisse ressortir le logo et sa
// dominante rose sans jurer avec, là où un noir pur durcirait le contraste.
.background(Color(0xFF1B1F27)),
) {
Column(
modifier = Modifier.align(Alignment.Center),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Image(
painter = painterResource(R.drawable.ic_launcher_foreground_source),
painter = painterResource(R.drawable.ic_launcher_foreground),
// Décoratif -- le message texte juste en dessous porte déjà l'information d'état.
contentDescription = null,
modifier = Modifier.size(140.dp),
// 20.dp sur 140.dp : même proportion de rayon que le squircle appliqué par les
// launchers à l'icône, pour que les deux se répondent (voir kdoc de tête).
modifier = Modifier
.size(140.dp)
.clip(RoundedCornerShape(20.dp)),
)
Spacer(Modifier.height(24.dp))
Text(
Expand All @@ -75,9 +94,10 @@ fun LoadingScreen() {
)
}

// Crédit du placeholder actuel -- discret, coin bas-gauche, jamais confondu
// avec le contenu central (message/progression). Pas un habillage permanent : à retirer
// quand un vrai logo d'artiste remplace ce placeholder.
// Attribution de l'artiste -- discrète, coin bas-gauche, jamais confondue avec le contenu
// central (message/progression). Contrairement à la version placeholder de cette ligne,
// elle a désormais vocation à rester : c'est le crédit du logo définitif, pas une réserve
// temporaire.
Text(
stringResource(R.string.loading_logo_credit),
color = Color.White.copy(alpha = 0.4f),
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
18 changes: 0 additions & 18 deletions app/src/main/res/drawable/ic_launcher_foreground.xml

This file was deleted.

28 changes: 28 additions & 0 deletions app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Logo par @clem_dreaw (28 août 2026), premier vrai logo d'artiste du projet : il remplace la
succession de placeholders précédents (visage mi-mesh, puis chiot husky par Nyacchii) et clôt
le point 62 du brouillon todo. Le personnage porte le mesh de tracking cyan sur une moitié de
visage, soit exactement le sujet de l'app.

Contrairement aux placeholders, cette illustration est PLEIN CADRE (fond peint intégré, opaque
jusqu'aux bords à un fondu de 1 à 2 % près) et non un sujet détouré sur fond transparent. D'où
la disparition du wrapper drawable/ic_launcher_foreground.xml et de son inset de 12 % : sur une
image plein cadre, un inset produirait un rectangle d'artwork flottant au milieu d'une bordure
sombre. Le bitmap est donc référencé directement, et c'est le masque du launcher (cercle,
squircle…) qui recadre, comme pour toute icône illustrative.

Conséquence assumée du masquage, vérifiée en composant les variantes avant de trancher : le
masque ne laisse voir que les 72 dp centraux sur 108, soit environ deux tiers du canevas. Le
fond rose/magenta de l'illustration, cantonné aux coins extrêmes, ne survit à aucun cadrage
possible ici. C'est le cadrage complet du visage qui a été retenu (tête entière, silhouette de
la chevelure lisible en petit) plutôt qu'un recadrage plus serré sur les yeux. Le fond rose
reste visible, lui, sur l'écran de chargement (LoadingScreen.kt), qui n'applique aucun masque.

WebP (qualité 92) plutôt que PNG, premier asset de ce format dans le dépôt : sur une
illustration peinte, le PNG pèse 544 Ko contre 112 Ko ici, à rendu indiscernable (comparaison
à 2x sur les lignes fines du mesh cyan, l'élément le plus exposé au ringing ; écart moyen de
2,7/255 sur les pixels opaques, aucun écart sur le canal alpha). 768 px couvre les deux usages
avec de la marge : 432 px pour la couche d'icône en xxxhdpi, 560 px pour l'écran de chargement.
Les références @drawable/... étant indépendantes de l'extension, ce changement de format
n'impacte aucun appelant.
-->
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
Expand Down
4 changes: 3 additions & 1 deletion app/src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@
<string name="camera_permission_rationale">La caméra frontale est nécessaire pour la capture faciale.</string>
<string name="action_grant_camera_permission">Autoriser la caméra</string>
<string name="loading_message">Chargement…</string>
<string name="loading_logo_credit">Logo par Nyacchii (Placeholder)</string>
<!-- Volontairement non traduit (identique à la version anglaise) : c'est une attribution
d'artiste avec son pseudonyme, pas une phrase à localiser. -->
<string name="loading_logo_credit">Logo by @clem_dreaw</string>

<!-- Écran Connexion -->
<string name="connection_title">Connexion</string>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
<string name="camera_permission_rationale">The front camera is required for facial capture.</string>
<string name="action_grant_camera_permission">Allow camera access</string>
<string name="loading_message">Loading…</string>
<string name="loading_logo_credit">Logo by Nyacchii (Placeholder)</string>
<string name="loading_logo_credit">Logo by @clem_dreaw</string>

<!-- Connection screen -->
<string name="connection_title">Connection</string>
Expand Down
Loading