fix(android): un coffre vide n'est pas un coffre ferme

"Coffre ouvert" se lisait sur le nombre d'entrees. Or un coffre vide en
compte zero, exactement comme un coffre ferme - et le coffre d'essai
l'est. Le garde de DoSync restait donc vrai apres l'ouverture, rearmait
la reprise, et l'on tournait en rond : le journal repetait "Vault opened
from cache", l'interface clignotait et ne repondait plus.

Le meme idiome se trouvait a deux autres endroits. Le second compte :
OnIdleTimer se coupait de lui-meme sur un coffre vide, qui restait donc
ouvert indefiniment - et vide aujourd'hui ne veut pas dire vide dans dix
minutes.

FPlain, le clair en main, est le seul signal qui ne mente pas.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
r-zakarya
2026-08-28 16:12:20 +01:00
parent af28788a0a
commit 9b26a1dbd0
+15 -3
View File
@@ -2274,7 +2274,13 @@ begin
// //
// Un appareil SANS cache n'est pas concerne : c'est le premier // Un appareil SANS cache n'est pas concerne : c'est le premier
// telechargement, et il n'y a rien a ouvrir. // telechargement, et il n'y a rien a ouvrir.
if HasVault and (not FVaultUnreadable) and (FVault.Count = 0) then //
// "COFFRE OUVERT" SE LIT SUR FPlain, PAS SUR LE NOMBRE D'ENTREES. Un coffre
// vide en compte zero, exactement comme un coffre ferme : le garde restait
// donc vrai apres l'ouverture, rearmait la reprise, et l'on tournait en rond
// - le journal repetait "Vault opened from cache" et l'interface clignotait
// sans plus repondre. Le clair en main est le seul signal qui ne ment pas.
if HasVault and (not FVaultUnreadable) and (FPlain = '') then
begin begin
if VaultNeedsPin and (FPin = '') then if VaultNeedsPin and (FPin = '') then
begin begin
@@ -2320,7 +2326,9 @@ begin
// remplace etait bloque par la meme condition. Quand plus rien ne peut // remplace etait bloque par la meme condition. Quand plus rien ne peut
// authentifier, ce verrou ne protege personne - le contenu viendra du // authentifier, ce verrou ne protege personne - le contenu viendra du
// serveur, et c'est le mot de passe de sync qui le garde. // serveur, et c'est le mot de passe de sync qui le garde.
if VaultNeedsAuth and (FVault.Count = 0) and BiometricAvailable then // FPlain et non le nombre d'entrees : un coffre vide en compte zero comme un
// coffre ferme, et l'on redemanderait l'empreinte a un coffre deja ouvert.
if VaultNeedsAuth and (FPlain = '') and BiometricAvailable then
begin begin
Status('Authenticating...'); Status('Authenticating...');
AuthenticateThen('Unlock the vault', AuthenticateThen('Unlock the vault',
@@ -2690,7 +2698,11 @@ end;
procedure TForm8.OnIdleTimer(Sender: TObject); procedure TForm8.OnIdleTimer(Sender: TObject);
begin begin
// Rien d'ouvert : rien a verrouiller. // Rien d'ouvert : rien a verrouiller.
if FVault.Count = 0 then //
// SUR FPlain, PAS SUR LE NOMBRE D'ENTREES. Un coffre vide en compte zero, et
// le minuteur se coupait donc de lui-meme : le coffre restait ouvert
// indefiniment. Vide aujourd'hui ne veut pas dire vide dans dix minutes.
if FPlain = '' then
begin begin
FIdleTimer.Enabled := False; FIdleTimer.Enabled := False;
Exit; Exit;