Add biometric lock and rate limit handling

Biometric lock: opt-in Face ID/Touch ID/fingerprint app lock with toggle
in ProfileScreen. Locks on background, requires auth on foreground return.
Platform implementations: BiometricPrompt (Android), LAContext (iOS).

Rate limit: 429 responses parsed with Retry-After header, user-friendly
error messages in all 10 locales, retry plugin respects 429.
ErrorMessageParser updated for both iOS Swift and KMM.
This commit is contained in:
Trey T
2026-03-26 14:37:04 -05:00
parent 334767cee7
commit 0d80df07f6
31 changed files with 871 additions and 7 deletions

View File

@@ -654,6 +654,8 @@
<string name="error_network">Network error. Please check your connection.</string>
<string name="error_timeout">Request timed out. Please try again.</string>
<string name="error_server">Server error. Please try again later.</string>
<string name="error_rate_limit">Too many requests. Please try again later.</string>
<string name="error_rate_limit_with_delay">Too many requests. Please try again in %1$d seconds.</string>
<string name="error_unauthorized">Session expired. Please log in again.</string>
<string name="error_not_found">Not found</string>
<string name="error_invalid_input">Please check your input</string>
@@ -810,4 +812,15 @@
<string name="onboarding_subscription_start_trial">Start 7-Day Free Trial</string>
<string name="onboarding_subscription_continue_free">Continue with Free</string>
<string name="onboarding_subscription_trial_terms">7-day free trial, then %1$s. Cancel anytime.</string>
<!-- Biometric Lock -->
<string name="biometric_lock_title">App Locked</string>
<string name="biometric_lock_description">Authenticate to unlock honeyDue</string>
<string name="biometric_lock_setting_title">Biometric Lock</string>
<string name="biometric_lock_setting_subtitle">Require authentication when opening the app</string>
<string name="biometric_prompt_title">Unlock honeyDue</string>
<string name="biometric_prompt_subtitle">Verify your identity to continue</string>
<string name="biometric_unlock_button">Unlock with Biometrics</string>
<string name="biometric_auth_failed">Authentication failed</string>
<string name="biometric_not_available">Biometric authentication is not available on this device</string>
</resources>