From 8dedcaecabb7e1005c566b9129b0f711bdfbbf6b Mon Sep 17 00:00:00 2001 From: r-zakarya <82443831+r-zakarya@users.noreply.github.com> Date: Sat, 15 Aug 2026 19:45:25 +0100 Subject: [PATCH] fix(android): stop offering an open that cannot succeed With the screen lock gone the cache stays sealed under a key the device can no longer use - correct, and final. But the app kept showing Open vault, which can only fail, and called the other button Sync when what is needed is a full replacement. A session flag remembers that the cache refused to open. The file is still not touched; only the offer changes - Open vault disappears, the remaining button reads Download vault, and the status says why. Co-Authored-By: Claude Opus 5 --- mainApk.pas | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/mainApk.pas b/mainApk.pas index 539a82c..df68014 100644 --- a/mainApk.pas +++ b/mainApk.pas @@ -87,6 +87,11 @@ type // economiser un telechargement pour se retrouver sans donnees. FETag: string; FBusy: Boolean; + /// Le cache local a refuse de s'ouvrir pendant cette session. Il existe + /// toujours - on ne detruit rien - mais l'interface cesse de proposer une + /// ouverture qui ne peut pas aboutir, et nomme le telechargement pour ce + /// qu'il est : un remplacement. + FVaultUnreadable: Boolean; // Mot de passe de sync tel qu'il a ete range avec le coffre. Il rend le // rafraichissement de fond silencieux : sans lui, chaque modification // faite sur le poste ferait apparaitre une invite au lancement. @@ -613,10 +618,11 @@ begin FLayList.Visible := False; FLayUnlock.Visible := True; - // Le bouton d'ouverture n'a de sens que si un coffre local existe ; sinon - // seul le telechargement peut en produire un. - FBtnOpen.Visible := HasVault; - if HasVault then + // Le bouton d'ouverture n'a de sens que si un coffre local existe ET qu'il + // s'est deja laisse ouvrir ; sinon seul le telechargement peut en produire + // un utilisable. + FBtnOpen.Visible := HasVault and not FVaultUnreadable; + if HasVault and not FVaultUnreadable then begin if VaultNeedsAuth then Status('Vault on this device - protected') @@ -902,6 +908,7 @@ begin FVault.LoadFromJson(APlainJson); Log(' ' + FVault.LiveCount.ToString + ' entries, ' + FVault.TrashCount.ToString + ' in trash'); + FVaultUnreadable := False; RebuildIcons; PopulateFolders; Touch; @@ -975,6 +982,7 @@ begin begin // ShowUnlock AVANT le message : il repositionne le statut selon ce que // l'appareil detient, et ecraserait donc l'explication. + FVaultUnreadable := True; ShowUnlock; Log('Local vault unreadable: ' + LastStoreError); Status('Local vault unreadable - see log'); @@ -1027,6 +1035,7 @@ begin // quelques centaines de kilo-octets, et un telechargement le // remplace de toute facon. Desormais RIEN ne detruit le cache : // seule une ecriture reussie le remplace. + FVaultUnreadable := True; Log('No usable protection on this device - vault kept but unreadable'); Log(' ' + LastBiometricError); ShowUnlock;