feat(android): an entry can get its icon, through the same relay as the desktop
Fetching https://<site>/favicon.ico directly would resolve a DNS name - and open a connection - to EVERY domain kept in the vault. The list of sites where someone holds an account is precisely what this vault protects; handing it to the network for a sixteen-pixel drawing would be a poor trade. The relay sees only that someone is interested in one domain, which is why the call is asked for entry by entry and never happens on its own. Two tries: the full host, then the second-level domain - chat.qwen.ai has no icon at the relay, qwen.ai does. The type comes from the first bytes, never from the extension: the relay answers PNG under a .ico address. A dedicated patch rather than PatchEntryField, because icon_custom is a NUMBER in the snapshot and writing it as a string would give "0" - which the desktop reads with GetValue<Boolean> and would choke on. It is set to zero: the icon comes from an automatic lookup, not from a choice, and that flag is what stops the desktop from ever replacing a chosen icon during a refresh. Base64 without line breaks. Delphi's encoder wraps at 76 characters by default, a wrapped data: URI does not display, and that trap has already been paid once on the containers.
This commit is contained in:
+17
-3
@@ -140,12 +140,26 @@ prouve rien.
|
||||
empêche quelqu'un tenant le téléphone déverrouillé de lever la protection
|
||||
sans la connaître.
|
||||
|
||||
### G. Pièces jointes
|
||||
### G. Icônes
|
||||
|
||||
1. Ouvrir une entrée dont le *Site* est une adresse — `git.ai-agents4you.com`.
|
||||
2. Trois points → **Fetch icon** → l'icône doit apparaître dans la liste.
|
||||
3. Une entrée dont le site n'est **pas** une adresse (*Gitea*, ou vide) →
|
||||
refus *« no web address to look up »*. Sans point dans le nom, il n'y a
|
||||
rien à demander au relais.
|
||||
4. Un domaine à trois niveaux (`chat.qwen.ai`) doit retomber sur le second
|
||||
niveau : c'est le deuxième essai.
|
||||
5. **Remove icon** → l'entrée reprend son initiale.
|
||||
6. Synchroniser depuis le poste : l'icône doit y arriver, et le poste ne doit
|
||||
**pas** la traiter comme une icône choisie — c'est le rôle du drapeau de
|
||||
provenance, mis à zéro par une recherche automatique.
|
||||
|
||||
### H. Pièces jointes
|
||||
|
||||
1. Ligne *Attachment* → flèche de téléchargement → le fichier apparaît dans
|
||||
*Téléchargements* sous son nom, accents et arabe compris.
|
||||
|
||||
### H. Code de déverrouillage
|
||||
### I. Code de déverrouillage
|
||||
|
||||
1. Poser un code, ouvrir le coffre, fermer, rouvrir → il est demandé.
|
||||
2. Code faux → *« Wrong unlock code »*, et **Open vault reste offert** (le
|
||||
@@ -155,7 +169,7 @@ prouve rien.
|
||||
4. Contre-épreuve : taper n'importe quoi dans le champ du code puis *Sync* →
|
||||
le code **ne doit pas changer**.
|
||||
|
||||
### I. Empaquetage
|
||||
### J. Empaquetage
|
||||
|
||||
1. `build-apk.ps1 -Release -Keystore ... -Alias ...` → la sortie doit afficher
|
||||
`Signer #1 certificate DN: CN=R Zakarya`. Si elle affiche `CN=Android
|
||||
|
||||
Reference in New Issue
Block a user