From ee598288d4648426e0aeaa95c42efca05d3e1291 Mon Sep 17 00:00:00 2001 From: Jason Ng Date: Wed, 16 Jul 2025 09:58:07 -0400 Subject: [PATCH] [PM-23722] Add missing account security badge (#15603) * add account security nudge logic to settings v2 and badge check in nudges service --- .../tools/popup/settings/settings-v2.component.html | 11 ++++++++++- .../src/tools/popup/settings/settings-v2.component.ts | 6 ++++++ .../account-security-nudge.service.ts | 2 -- .../angular/src/vault/services/nudges.service.spec.ts | 11 ++++++++++- libs/angular/src/vault/services/nudges.service.ts | 1 + 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/apps/browser/src/tools/popup/settings/settings-v2.component.html b/apps/browser/src/tools/popup/settings/settings-v2.component.html index 0b2e84712a4..3f8bdb1cf2f 100644 --- a/apps/browser/src/tools/popup/settings/settings-v2.component.html +++ b/apps/browser/src/tools/popup/settings/settings-v2.component.html @@ -10,7 +10,16 @@ - {{ "accountSecurity" | i18n }} +
+

{{ "accountSecurity" | i18n }}

+ 1 +
diff --git a/apps/browser/src/tools/popup/settings/settings-v2.component.ts b/apps/browser/src/tools/popup/settings/settings-v2.component.ts index a0383b99390..7d3b9c776fc 100644 --- a/apps/browser/src/tools/popup/settings/settings-v2.component.ts +++ b/apps/browser/src/tools/popup/settings/settings-v2.component.ts @@ -50,6 +50,12 @@ export class SettingsV2Component implements OnInit { shareReplay({ bufferSize: 1, refCount: true }), ); + protected showAcctSecurityNudge$: Observable = this.authenticatedAccount$.pipe( + switchMap((account) => + this.nudgesService.showNudgeBadge$(NudgeType.AccountSecurity, account.id), + ), + ); + showDownloadBitwardenNudge$: Observable = this.authenticatedAccount$.pipe( switchMap((account) => this.nudgesService.showNudgeBadge$(NudgeType.DownloadBitwarden, account.id), diff --git a/libs/angular/src/vault/services/custom-nudges-services/account-security-nudge.service.ts b/libs/angular/src/vault/services/custom-nudges-services/account-security-nudge.service.ts index 99d7f3934ff..a64a4aa975c 100644 --- a/libs/angular/src/vault/services/custom-nudges-services/account-security-nudge.service.ts +++ b/libs/angular/src/vault/services/custom-nudges-services/account-security-nudge.service.ts @@ -9,7 +9,6 @@ import { PinServiceAbstraction } from "@bitwarden/auth/common"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/key-management/vault-timeout"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { UserId } from "@bitwarden/common/types/guid"; import { BiometricStateService } from "@bitwarden/key-management"; @@ -24,7 +23,6 @@ export class AccountSecurityNudgeService extends DefaultSingleNudgeService { private vaultProfileService = inject(VaultProfileService); private logService = inject(LogService); private pinService = inject(PinServiceAbstraction); - private vaultTimeoutSettingsService = inject(VaultTimeoutSettingsService); private biometricStateService = inject(BiometricStateService); private policyService = inject(PolicyService); private organizationService = inject(OrganizationService); diff --git a/libs/angular/src/vault/services/nudges.service.spec.ts b/libs/angular/src/vault/services/nudges.service.spec.ts index bf84674c669..a72ea2f581c 100644 --- a/libs/angular/src/vault/services/nudges.service.spec.ts +++ b/libs/angular/src/vault/services/nudges.service.spec.ts @@ -23,6 +23,7 @@ import { HasItemsNudgeService, EmptyVaultNudgeService, NewAccountNudgeService, + AccountSecurityNudgeService, VaultSettingsImportNudgeService, } from "./custom-nudges-services"; import { DefaultSingleNudgeService } from "./default-single-nudge.service"; @@ -37,7 +38,11 @@ describe("Vault Nudges Service", () => { getFeatureFlag: jest.fn().mockReturnValue(true), }; - const nudgeServices = [EmptyVaultNudgeService, NewAccountNudgeService]; + const nudgeServices = [ + EmptyVaultNudgeService, + NewAccountNudgeService, + AccountSecurityNudgeService, + ]; beforeEach(async () => { fakeStateProvider = new FakeStateProvider(mockAccountServiceWith("user-id" as UserId)); @@ -68,6 +73,10 @@ describe("Vault Nudges Service", () => { provide: EmptyVaultNudgeService, useValue: mock(), }, + { + provide: AccountSecurityNudgeService, + useValue: mock(), + }, { provide: VaultSettingsImportNudgeService, useValue: mock(), diff --git a/libs/angular/src/vault/services/nudges.service.ts b/libs/angular/src/vault/services/nudges.service.ts index 6cb7ae4abf1..584aacd9837 100644 --- a/libs/angular/src/vault/services/nudges.service.ts +++ b/libs/angular/src/vault/services/nudges.service.ts @@ -160,6 +160,7 @@ export class NudgesService { hasActiveBadges$(userId: UserId): Observable { // Add more nudge types here if they have the settings badge feature const nudgeTypes = [ + NudgeType.AccountSecurity, NudgeType.EmptyVaultNudge, NudgeType.DownloadBitwarden, NudgeType.AutofillNudge,