From 00d5b582cc5614c8ca7c19ae26f64261be6765e4 Mon Sep 17 00:00:00 2001 From: r-zakarya <82443831+r-zakarya@users.noreply.github.com> Date: Fri, 21 Aug 2026 23:40:35 +0100 Subject: [PATCH] feat(android): delete moves into the entry's menu It was a full-width red button at the foot of every detail, permanently in view for a gesture one makes three times a year. It now lives behind the three dots in the header: open, then confirm - two deliberate gestures, and nothing lingering in sight the rest of the time. A single item in a menu is not an oversight. The action has no way back, and an action with no way back should not sit where a stray tap reaches it. A cross in the corner would be worse still: that corner means "close" everywhere else. The plan records what the server code says about the trash: receiving a tombstone runs DELETE FROM vault_entries, a hard delete. A deletion from the phone removes the row on both sides and bypasses the desktop's trash. The only net is the desktop's backups, and there is no trash to show here - the phone never receives its contents. --- android-client/PLAN.md | 18 +++++-- android-client/web/app.html | 99 +++++++++++++++++++++++++++---------- 2 files changed, 87 insertions(+), 30 deletions(-) diff --git a/android-client/PLAN.md b/android-client/PLAN.md index 4c57c79..60a8e84 100644 --- a/android-client/PLAN.md +++ b/android-client/PLAN.md @@ -776,10 +776,20 @@ téléphone qu'on voudra ensuite ouvrir sur le poste demandera un import. **Sans retour depuis le téléphone**, et c'est délibéré : la corbeille du poste est un drapeau `deleted` qui ne voyage pas dans la synchronisation, donc - une suppression qui s'y arrêterait ne se propagerait nulle part. D'où le - bouton en bas d'écran, en deux temps, qui se désarme seul au bout de quatre - secondes — un bouton armé indéfiniment se fait toucher par mégarde bien plus - tard. + une suppression qui s'y arrêterait ne se propagerait nulle part. + + **Et elle ne va pas non plus dans la corbeille du poste** — vérifié dans le + code serveur : recevoir une pierre tombale déclenche + `DELETE FROM vault_entries`, un effacement dur. Supprimer depuis le téléphone + retire donc la ligne des deux côtés, en contournant la corbeille. **Le seul + filet est la sauvegarde du poste.** Il n'y a rien à afficher comme corbeille + ici : le téléphone n'en reçoit jamais le contenu. + + L'action vit dans le **menu de l'entrée** (les trois points, en tête de + détail), et non plus en bouton pleine largeur au bas de chaque écran : rouge + et présent en permanence pour un geste qu'on fait trois fois par an. Deux + gestes délibérés — ouvrir, puis confirmer — et rien qui traîne sous les yeux + le reste du temps. 4. **Réconcilier avec la synchronisation** — fait le 2026-08-21. Jusqu'ici les deux situations ne se rencontraient pas : un coffre local diff --git a/android-client/web/app.html b/android-client/web/app.html index b9fd75d..5d6ef63 100644 --- a/android-client/web/app.html +++ b/android-client/web/app.html @@ -201,6 +201,20 @@ padding: 10px 10px 12px 14px; margin-bottom: 8px; } .field .cap { color: var(--muted); font-size: 12px; margin-bottom: 4px; } + /* LE MENU DE L'ENTREE. Il ne contient qu'une action, et c'est voulu : elle + est sans retour, et une action sans retour ne doit pas etre a portee d'un + appui distrait. Deux gestes deliberes - ouvrir, puis confirmer - valent + mieux qu'un bouton rouge en permanence sous les yeux. */ + .menu { position: absolute; right: 12px; top: 58px; z-index: 60; + background: var(--bg-top); border-radius: var(--radius-s); + border: 1px solid rgba(255,255,255,.14); + box-shadow: 0 8px 24px rgba(0,0,0,.35); + min-width: 190px; overflow: hidden; } + .menu button { display: block; width: 100%; text-align: left; border: 0; + background: none; color: var(--text); font: inherit; + padding: 14px 16px; } + .menu button:active { background: rgba(255,255,255,.10); } + .menu button.danger { color: #ffb4b4; } .field .line { display: flex; align-items: center; gap: 8px; } .field .val { flex: 1; min-width: 0; word-break: break-all; @@ -396,8 +410,10 @@