Autofocus biometric button when biometric unlock is enabled
Details
When biometric is enabled, focus the biometric button instead of the
password box on both the main unlock view and the sensitive data overlay.
This lets users press Enter/Space to trigger biometric without having
to click the button manually. Falls back to password box focus when
biometric is not available. Uses PropertyChanged to handle the async
biometric availability check — switches focus to biometric button
as soon as availability is confirmed.
Fix ObjC block bridging crash in Touch ID evaluation
Details
The block struct had Flags = 1 << 25 (BLOCK_HAS_COPY_DISPOSE) but the
descriptor only contained Reserved and Size — no copy/dispose function
pointers. When the ObjC runtime copied the block for async dispatch, it
read garbage memory as the copy helper, corrupting the block and causing
a NullReferenceException when the callback tried to read the Context
GCHandle.
Fixed by:
- Using _NSConcreteGlobalBlock with BLOCK_IS_GLOBAL flag (no copy/dispose)
- Pinning the invoker delegate as a static field (prevents GC collection)
- Making the invoker null-safe with try/catch for native callback safety
- Returning a cleanup Action from EvaluatePolicy so the caller frees
resources after gate.Wait() instead of a racy 2-second Task.Delay
Fix biometric validation overlay to use verify-only check
Details
The validation overlay was calling AuthenticateAsync (Touch ID + keychain
read + password validation) when it only needs to verify Touch ID works.
Since the app is already unlocked at this point, there's no need to
retrieve the password from the keychain.
Added VerifyBiometricAsync to IBiometricService — prompts biometric only
with no keychain access. Moved EvaluateBiometricPolicyAsync out of the
DEBUG preprocessor block into the shared section so it's available in
both build configurations. Added logging to trace the verification flow.
Replace biometric validation logout with frosted lock overlay
Details
Instead of closing the main window and showing the unlock screen when
validating biometric enrollment, the app now displays a frosted glass
overlay at ZIndex 2000 on top of the existing UI. The user sees a
verification prompt: succeed with biometric and it stays enabled, or
enter the master password and biometric gets disabled. The main window
stays open throughout — no shutdown, no window recreation.
Add Exit button to unlock screen
Details
Place Exit and Unlock buttons side by side on the lock screen so users
can quit the app without needing to unlock first. Exit uses the
secondary surface style, Unlock retains the primary accent style.
Get notified about new releases