feat(android): a shield instead of a padlock, and the launch screen matches

The padlock was drawn in thin blue strokes on slate: at 36 px the outline muddied and the shackle vanished. A filled white shield with a punched keyhole keeps its silhouette at every size, and says protection more plainly.

The keyhole is CUT OUT rather than painted, through an even-odd fill on a single path - painting it meant keeping two files agreeing on one colour, and any drift would have read as a smudge. The launch layer is the exception: it sits flat on the system background, where a cut-out would be a hole, so there the keyhole is painted and stays entirely inside the white shield.

The launch background takes the top of the app gradient instead of slate, so the launch screen dissolves into the first screen rather than cutting against it. No gradient inside the vectors: the aapt this chain uses does not know inline gradients.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
r-zakarya
2026-08-17 00:02:27 +01:00
parent 8c1cabb5bd
commit ec8b5b3410
12 changed files with 78 additions and 74 deletions
@@ -2,26 +2,25 @@
<!-- Icone de l'ecran de demarrage.
Sur Android 12+, le systeme l'affiche via windowSplashScreenAnimatedIcon
dans un disque de 288 unites dont il ne garantit que les 192 centrales :
le dessin ci-dessous occupe 101..187, bien a l'interieur.
C'est le meme cadenas que l'icone du lanceur, a l'echelle. -->
le dessin occupe 103..186, bien a l'interieur.
Meme bouclier que l'icone du lanceur, a l'echelle.
ICI LA SERRURE EST PEINTE, pas evidee : la couche de demarrage est posee
a plat sur le fond du systeme, et un evidement y ferait un trou. Elle est
entierement contenue dans le bouclier blanc, donc sa couleur n'a qu'a
trancher sur du blanc - elle ne depend d'aucun autre fichier. -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="288dp"
android:height="288dp"
android:viewportWidth="288"
android:viewportHeight="288">
<path
android:strokeColor="#3B82F6"
android:strokeWidth="11"
android:strokeLineCap="round"
android:fillColor="#00000000"
android:pathData="M124,139 L124,121 A20,20 0 0 1 164,121 L164,139" />
android:fillColor="#FFFFFF"
android:pathData="M144,96.3 L185.4,110.7 L185.4,144.9 C185.4,169.2 167.4,184.5 144,191.7 C120.6,184.5 102.6,169.2 102.6,144.9 L102.6,110.7 Z" />
<path
android:fillColor="#3B82F6"
android:pathData="M112,135 L176,135 A8,8 0 0 1 184,143 L184,179 A8,8 0 0 1 176,187 L112,187 A8,8 0 0 1 104,179 L104,143 A8,8 0 0 1 112,135 Z" />
android:fillColor="#1B3563"
android:pathData="M144,134.1 m-12.6,0 a12.6,12.6 0 1,0 25.2,0 a12.6,12.6 0 1,0 -25.2,0 Z" />
<path
android:fillColor="#0F172A"
android:pathData="M144,151 m-8,0 a8,8 0 1,0 16,0 a8,8 0 1,0 -16,0 Z" />
<path
android:fillColor="#0F172A"
android:pathData="M140.4,159 L151.6,159 L149,174 L143,174 Z" />
android:fillColor="#1B3563"
android:pathData="M138.6,144 L149.4,144 L152.3,170.1 L135.7,170.1 Z" />
</vector>