diff --git a/jslib b/jslib index da132217da..da6fde4b15 160000 --- a/jslib +++ b/jslib @@ -1 +1 @@ -Subproject commit da132217da553365538bbb66a21c40d3966610c1 +Subproject commit da6fde4b151e7d154c7eb16d8f81926ad2f3ca22 diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json index 044301571f..79ca58563e 100644 --- a/src/_locales/en/messages.json +++ b/src/_locales/en/messages.json @@ -776,6 +776,9 @@ "disableAutoTotpCopyDesc": { "message": "If your login has an authenticator key attached to it, the TOTP verification code is automatically copied to your clipboard whenever you auto-fill the login." }, + "disableAutoBiometricsPrompt": { + "message": "Do not prompt for biometrics on launch" + }, "premiumRequired": { "message": "Premium Required" }, diff --git a/src/popup/accounts/lock.component.ts b/src/popup/accounts/lock.component.ts index 466fc77150..a193cff9bc 100644 --- a/src/popup/accounts/lock.component.ts +++ b/src/popup/accounts/lock.component.ts @@ -1,6 +1,8 @@ import { Component } from '@angular/core'; import { Router } from '@angular/router'; +import { ConstantsService } from 'jslib-common/services/constants.service'; + import { ApiService } from 'jslib-common/abstractions/api.service'; import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { EnvironmentService } from 'jslib-common/abstractions/environment.service'; @@ -20,6 +22,8 @@ import Swal from 'sweetalert2'; templateUrl: 'lock.component.html', }) export class LockComponent extends BaseLockComponent { + private isInitialLockScreen: boolean; + constructor(router: Router, i18nService: I18nService, platformUtilsService: PlatformUtilsService, messagingService: MessagingService, userService: UserService, cryptoService: CryptoService, @@ -29,12 +33,21 @@ export class LockComponent extends BaseLockComponent { super(router, i18nService, platformUtilsService, messagingService, userService, cryptoService, storageService, vaultTimeoutService, environmentService, stateService, apiService); this.successRoute = '/tabs/current'; + this.isInitialLockScreen = (window as any).previousPopupUrl == null; } async ngOnInit() { await super.ngOnInit(); - window.setTimeout(() => { + const disableAutoBiometricsPrompt = await this.storageService.get( + ConstantsService.disableAutoBiometricsPromptKey) ?? true; + + window.setTimeout(async () => { document.getElementById(this.pinLock ? 'pin' : 'masterPassword').focus(); + if (this.biometricLock && !disableAutoBiometricsPrompt && this.isInitialLockScreen) { + if (await this.vaultTimeoutService.isLocked()) { + await this.unlockBiometric(); + } + } }, 100); } diff --git a/src/popup/settings/settings.component.html b/src/popup/settings/settings.component.html index fbdfe5dc18..262b4f1a48 100644 --- a/src/popup/settings/settings.component.html +++ b/src/popup/settings/settings.component.html @@ -44,6 +44,10 @@ +
+ + +
{{'lockNow' | i18n}}
diff --git a/src/popup/settings/settings.component.ts b/src/popup/settings/settings.component.ts index 83d3841aef..89c3c415d5 100644 --- a/src/popup/settings/settings.component.ts +++ b/src/popup/settings/settings.component.ts @@ -56,6 +56,7 @@ export class SettingsComponent implements OnInit { pin: boolean = null; supportsBiometric: boolean; biometric: boolean = false; + disableAutoBiometricsPrompt = true; previousVaultTimeout: number = null; vaultTimeout: FormControl = new FormControl(null); @@ -115,6 +116,8 @@ export class SettingsComponent implements OnInit { this.supportsBiometric = await this.platformUtilsService.supportsBiometric(); this.biometric = await this.vaultTimeoutService.isBiometricLockSet(); + this.disableAutoBiometricsPrompt = await this.storageService.get( + ConstantsService.disableAutoBiometricsPromptKey) ?? true; } async saveVaultTimeout(newValue: number) { @@ -250,6 +253,10 @@ export class SettingsComponent implements OnInit { } } + async updateAutoBiometricsPrompt() { + await this.storageService.save(ConstantsService.disableAutoBiometricsPromptKey, this.disableAutoBiometricsPrompt); + } + async lock() { await this.vaultTimeoutService.lock(true); }