feat(android): a settings screen, and the unlock code can finally be removed

Three things of different natures lived in collapsible panels on the home
screen - repository credentials, the unlock code, the log - on the one screen
where one mostly wants to open one's vault. They move to a settings sheet,
reachable from the list too.

A sheet, not a fourth view of the rail: each view costs its transform rules
and a place in back-key navigation, and settings is not somewhere one moves
about - it is a parenthesis one opens and closes.

The unlock code can now be REMOVED. It could not before: clearing the field
meant "nothing typed", not "drop the protection", so one could set a code and
never get out. It requires an open vault, and that is the proof being asked
for - the cache only let itself be read under the right code. Without that,
anyone holding the unlocked phone could lift the protection without knowing
it.

The refusal that guards every other path stays: it is what stopped a sync
from silently undoing a code. Removing is the one deliberate way out, and it
says so at the call site.

The old fields stay in the document as the source Delphi knows; the sheet is
only a view of them. Emptying them would lose the configuration at the first
sync.
This commit is contained in:
r-zakarya
2026-08-22 15:34:40 +01:00
parent 4ae845bc13
commit 73e3faa24c
4 changed files with 245 additions and 13 deletions
+23 -3
View File
@@ -120,12 +120,32 @@ prouve rien.
côte à côte**. Ils demandent deux gestes différents ; les confondre dirait
« quelque chose ne va pas » sans dire quoi.
### F. Pièces jointes
### F. Réglages
1. Roue dentée dans la liste, ou *Settings* sur l'accueil → l'écran s'ouvre.
2. Les trois champs du dépôt doivent porter **les valeurs en place**, pas du
vide : ils ne sont qu'une vue des champs que Delphi connaît déjà.
3. Modifier l'URL, revenir par la flèche, *Sync* → la nouvelle valeur sert.
C'est la contre-épreuve du report à la fermeture : un réglage modifié puis
refermé **sans quitter le champ** doit compter.
4. Touche **retour** dans les réglages → elle referme **sans** verrouiller ni
revenir à la liste.
5. **Poser un code** depuis les réglages : taper, *Set this code*, puis ouvrir
le coffre → *« Unlock code changed »*. Le sceau se pose toujours à
l'ouverture, et nulle part ailleurs.
6. **Retirer le code** : *Remove the unlock code*, deux appuis → *« Unlock code
removed »*. Fermer l'application, rouvrir → **le code n'est plus demandé**.
7. Contre-épreuve du retrait : verrouiller, puis essayer de retirer le code
sans avoir ouvert le coffre → refus *« Open the vault first »*. C'est ce qui
empêche quelqu'un tenant le téléphone déverrouillé de lever la protection
sans la connaître.
### G. 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.
### G. Code de déverrouillage
### H. 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
@@ -135,7 +155,7 @@ prouve rien.
4. Contre-épreuve : taper n'importe quoi dans le champ du code puis *Sync* →
le code **ne doit pas changer**.
### H. Empaquetage
### I. Empaquetage
1. `build-apk.ps1 -Release -Keystore ... -Alias ...` → la sortie doit afficher
`Signer #1 certificate DN: CN=R Zakarya`. Si elle affiche `CN=Android