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 <noreply@anthropic.com>
This commit is contained in:
r-zakarya
2026-08-15 19:45:25 +01:00
parent ceaba331d8
commit 8dedcaecab
+13 -4
View File
@@ -87,6 +87,11 @@ type
// economiser un telechargement pour se retrouver sans donnees. // economiser un telechargement pour se retrouver sans donnees.
FETag: string; FETag: string;
FBusy: Boolean; 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 // 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 // rafraichissement de fond silencieux : sans lui, chaque modification
// faite sur le poste ferait apparaitre une invite au lancement. // faite sur le poste ferait apparaitre une invite au lancement.
@@ -613,10 +618,11 @@ begin
FLayList.Visible := False; FLayList.Visible := False;
FLayUnlock.Visible := True; FLayUnlock.Visible := True;
// Le bouton d'ouverture n'a de sens que si un coffre local existe ; sinon // Le bouton d'ouverture n'a de sens que si un coffre local existe ET qu'il
// seul le telechargement peut en produire un. // s'est deja laisse ouvrir ; sinon seul le telechargement peut en produire
FBtnOpen.Visible := HasVault; // un utilisable.
if HasVault then FBtnOpen.Visible := HasVault and not FVaultUnreadable;
if HasVault and not FVaultUnreadable then
begin begin
if VaultNeedsAuth then if VaultNeedsAuth then
Status('Vault on this device - protected') Status('Vault on this device - protected')
@@ -902,6 +908,7 @@ begin
FVault.LoadFromJson(APlainJson); FVault.LoadFromJson(APlainJson);
Log(' ' + FVault.LiveCount.ToString + ' entries, ' + Log(' ' + FVault.LiveCount.ToString + ' entries, ' +
FVault.TrashCount.ToString + ' in trash'); FVault.TrashCount.ToString + ' in trash');
FVaultUnreadable := False;
RebuildIcons; RebuildIcons;
PopulateFolders; PopulateFolders;
Touch; Touch;
@@ -975,6 +982,7 @@ begin
begin begin
// ShowUnlock AVANT le message : il repositionne le statut selon ce que // ShowUnlock AVANT le message : il repositionne le statut selon ce que
// l'appareil detient, et ecraserait donc l'explication. // l'appareil detient, et ecraserait donc l'explication.
FVaultUnreadable := True;
ShowUnlock; ShowUnlock;
Log('Local vault unreadable: ' + LastStoreError); Log('Local vault unreadable: ' + LastStoreError);
Status('Local vault unreadable - see log'); Status('Local vault unreadable - see log');
@@ -1027,6 +1035,7 @@ begin
// quelques centaines de kilo-octets, et un telechargement le // quelques centaines de kilo-octets, et un telechargement le
// remplace de toute facon. Desormais RIEN ne detruit le cache : // remplace de toute facon. Desormais RIEN ne detruit le cache :
// seule une ecriture reussie le remplace. // seule une ecriture reussie le remplace.
FVaultUnreadable := True;
Log('No usable protection on this device - vault kept but unreadable'); Log('No usable protection on this device - vault kept but unreadable');
Log(' ' + LastBiometricError); Log(' ' + LastBiometricError);
ShowUnlock; ShowUnlock;