From 48599dae53a0e6b637e577e88c500dbc943b5b1a Mon Sep 17 00:00:00 2001 From: Noelia Alcala Date: Mon, 3 Feb 2025 16:17:07 +0000 Subject: [PATCH] Fire Button Highlight bug (#5582) Task/Issue URL: https://app.asana.com/0/1201807753394693/1209307760721992 ### Description Remove highlight on fire button after Fire dialog is dismissed ### Steps to test this PR - [ ] Fresh install - [ ] Go to browser - [ ] Go to a trackers website (e.g. bbc.co.uk) - [ ] Tap on Got it! button - [ ] Check Fire button is highlighted - [ ] Tap on Skip - [ ] Check Fire button highlight is removed ### No UI changes --- .../app/browser/BrowserTabViewModel.kt | 15 ++----- .../browser/omnibar/OmnibarLayoutViewModel.kt | 42 ++++++------------- .../omnibar/OmnibarLayoutViewModelTest.kt | 23 ++++++++++ 3 files changed, 38 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt index aedee88b5ff9..47b307c8327f 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt @@ -2727,6 +2727,9 @@ class BrowserTabViewModel @Inject constructor( viewModelScope.launch { ctaViewModel.onUserDismissedCta(it) } + if (cta is OnboardingDaxDialogCta.DaxTrackersBlockedCta && currentBrowserViewState().showPrivacyShield.isHighlighted()) { + browserViewState.value = currentBrowserViewState().copy(showPrivacyShield = HighlightableButton.Visible(highlighted = false)) + } } } @@ -3539,9 +3542,6 @@ class BrowserTabViewModel @Inject constructor( is OnboardingDaxDialogCta.DaxNoTrackersCta, is OnboardingDaxDialogCta.DaxMainNetworkCta, -> { - if (currentBrowserViewState().showPrivacyShield.isHighlighted()) { - browserViewState.value = currentBrowserViewState().copy(showPrivacyShield = HighlightableButton.Visible(highlighted = false)) - } viewModelScope.launch { val cta = withContext(dispatchers.io()) { ctaViewModel.getFireDialogCta() } ctaViewState.value = currentCtaViewState().copy(cta = cta) @@ -3579,10 +3579,6 @@ class BrowserTabViewModel @Inject constructor( } private fun onDismissOnboardingDaxDialog(cta: OnboardingDaxDialogCta) { - if (cta is OnboardingDaxDialogCta.DaxTrackersBlockedCta) { - browserViewState.value = currentBrowserViewState().copy(showPrivacyShield = HighlightableButton.Visible(highlighted = false)) - } - onUserDismissedCta(cta) command.value = HideOnboardingDaxDialog(cta) } @@ -3593,11 +3589,6 @@ class BrowserTabViewModel @Inject constructor( onUserDismissedCta(cta) command.value = HideOnboardingDaxDialog(cta as OnboardingDaxDialogCta) } - if (currentBrowserViewState().fireButton.isHighlighted()) { - viewModelScope.launch { - ctaViewModel.dismissPulseAnimation() - } - } } fun onPrivacyShieldSelected() { diff --git a/app/src/main/java/com/duckduckgo/app/browser/omnibar/OmnibarLayoutViewModel.kt b/app/src/main/java/com/duckduckgo/app/browser/omnibar/OmnibarLayoutViewModel.kt index 4e7c7f5ea05f..98e197e31c78 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/omnibar/OmnibarLayoutViewModel.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/omnibar/OmnibarLayoutViewModel.kt @@ -451,36 +451,18 @@ class OmnibarLayoutViewModel @Inject constructor( } fun onHighlightItem(decoration: OmnibarLayout.Decoration.HighlightOmnibarItem) { - if (decoration.privacyShield) { - _viewState.update { - it.copy( - highlightPrivacyShield = HighlightableButton.Visible( - enabled = true, - highlighted = true, - ), - highlightFireButton = HighlightableButton.Visible( - enabled = true, - highlighted = false, - ), - scrollingEnabled = false, - ) - } - } - - if (decoration.fireButton) { - _viewState.update { - it.copy( - highlightPrivacyShield = HighlightableButton.Visible( - enabled = true, - highlighted = false, - ), - highlightFireButton = HighlightableButton.Visible( - enabled = true, - highlighted = true, - ), - scrollingEnabled = false, - ) - } + _viewState.update { + it.copy( + highlightPrivacyShield = HighlightableButton.Visible( + enabled = true, + highlighted = decoration.privacyShield, + ), + highlightFireButton = HighlightableButton.Visible( + enabled = true, + highlighted = decoration.fireButton, + ), + scrollingEnabled = false, + ) } } diff --git a/app/src/test/java/com/duckduckgo/app/browser/omnibar/OmnibarLayoutViewModelTest.kt b/app/src/test/java/com/duckduckgo/app/browser/omnibar/OmnibarLayoutViewModelTest.kt index 9bfc352d5e1c..76fb2a59bdaf 100644 --- a/app/src/test/java/com/duckduckgo/app/browser/omnibar/OmnibarLayoutViewModelTest.kt +++ b/app/src/test/java/com/duckduckgo/app/browser/omnibar/OmnibarLayoutViewModelTest.kt @@ -602,6 +602,29 @@ class OmnibarLayoutViewModelTest { } } + @Test + fun whenFireButtonItemHighlightedRemovedThenViewStateCorrect() = runTest { + testee.onHighlightItem(Decoration.HighlightOmnibarItem(fireButton = false, privacyShield = false)) + testee.viewState.test { + val viewState = awaitItem() + assertTrue( + viewState.highlightPrivacyShield == HighlightableButton.Visible( + enabled = true, + highlighted = false, + ), + ) + + assertTrue( + viewState.highlightFireButton == HighlightableButton.Visible( + enabled = true, + highlighted = false, + ), + ) + + assertFalse(viewState.scrollingEnabled) + } + } + @Test fun whenFireIconPressedAndFireIconHighlightedThenViewStateCorrectAndPixelSent() = runTest { val animationPlaying = true