diff --git a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt index 8dd60383121d..04d4fab99455 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt @@ -3174,8 +3174,10 @@ class BrowserTabFragment : daxBubbleCta.hideDaxBubbleCta(binding) hideDaxBubbleCta() if (onboardingDesignExperimentManager.isBuckEnrolledAndEnabled()) { - if (daxBubbleCta is DaxBubbleCta.DaxEndCta) { - hideBuckEndAnimation() + when (daxBubbleCta) { + is DaxBubbleCta.DaxIntroSearchOptionsCta -> hideBuckMagnifyingGlassAnimation() + is DaxBubbleCta.DaxEndCta -> hideBuckEndAnimation() + else -> Unit } } renderer.showNewTab() @@ -4520,12 +4522,15 @@ class BrowserTabFragment : } if (onboardingDesignExperimentManager.isBuckEnrolledAndEnabled()) { - if (configuration is DaxIntroVisitSiteOptionsCta && context?.resources?.getBoolean(R.bool.show_wing_animation) == true) { - lifecycleScope.launch { - with(newBrowserTab.wingAnimation) { - delay(2.5.seconds) - show() - playAnimation() + if (configuration is DaxIntroVisitSiteOptionsCta) { + hideBuckMagnifyingGlassAnimation() + if (context?.resources?.getBoolean(R.bool.show_wing_animation) == true) { + lifecycleScope.launch { + with(newBrowserTab.wingAnimation) { + delay(2.5.seconds) + show() + playAnimation() + } } } } @@ -4736,6 +4741,10 @@ class BrowserTabFragment : } } + private fun hideBuckMagnifyingGlassAnimation() { + newBrowserTab.buckMagnifyingGlassAnimation.isGone = true + } + private fun hideBuckEndAnimation() { newBrowserTab.buckEndAnimation.isGone = true val backgroundColor = requireActivity().getColorFromAttr(attrColor = CommonR.attr.daxColorBackground) diff --git a/app/src/main/java/com/duckduckgo/app/cta/ui/Cta.kt b/app/src/main/java/com/duckduckgo/app/cta/ui/Cta.kt index d7593d1f9403..37315c2712bf 100644 --- a/app/src/main/java/com/duckduckgo/app/cta/ui/Cta.kt +++ b/app/src/main/java/com/duckduckgo/app/cta/ui/Cta.kt @@ -912,11 +912,14 @@ sealed class OnboardingDaxDialogCta( optionsViews.forEachIndexed { index, buttonView -> options[index].setOptionView(buttonView) - buttonView.animate().alpha(MAX_ALPHA).duration = DAX_DIALOG_APPEARANCE_ANIMATION - buttonView.setOnClickListener { - onSuggestedOptionClicked?.invoke(options[index], index) - wingAnimation.gone() - } + buttonView.animate().alpha(MAX_ALPHA) + .setDuration(DAX_DIALOG_APPEARANCE_ANIMATION) + .withEndAction { + buttonView.setOnClickListener { + onSuggestedOptionClicked?.invoke(options[index], index) + wingAnimation.gone() + } + } } showAndPlayWingAnimation() @@ -1004,10 +1007,13 @@ sealed class OnboardingDaxDialogCta( optionsViews.forEachIndexed { index, buttonView -> options[index].setOptionView(buttonView) - buttonView.animate().alpha(MAX_ALPHA).duration = DAX_DIALOG_APPEARANCE_ANIMATION - buttonView.setOnClickListener { - onSuggestedOptionClicked?.invoke(options[index], index) - } + buttonView.animate().alpha(MAX_ALPHA) + .setDuration(DAX_DIALOG_APPEARANCE_ANIMATION) + .withEndAction { + buttonView.setOnClickListener { + onSuggestedOptionClicked?.invoke(options[index], index) + } + } } } @@ -1144,6 +1150,8 @@ sealed class DaxBubbleCta( ) : Cta, ViewCta, DaxCta { var isModifiedControlOnboardingExperimentEnabled: Boolean? = null + private var buckAnimators: List = emptyList() + private var bbAnimators: List = emptyList() protected var ctaView: View? = null @@ -1326,13 +1334,13 @@ sealed class DaxBubbleCta( val afterAnimation = { daxBubbleDialogTitle.finishAnimation() dialogTextCta.finishAnimation() - placeholder?.let { placeholderImageView.fadeIn() } - primaryCta.fadeIn() - secondaryCta.fadeIn() + placeholder?.let { bbAnimators += placeholderImageView.fadeIn() } + bbAnimators += primaryCta.fadeIn() + bbAnimators += secondaryCta.fadeIn() options?.let { optionsViews.forEachIndexed { index, buttonView -> if (it.size > index) { - buttonView.fadeIn() + bbAnimators += buttonView.fadeIn() } } } @@ -1357,9 +1365,9 @@ sealed class DaxBubbleCta( } } - root.fadeIn().setStartDelay(500).withEndAction { + bbAnimators += root.fadeIn().setStartDelay(500).withEndAction { if (configuration is DaxEndCta) { - headerImage.fadeIn().withEndAction { + bbAnimators += headerImage.fadeIn().withEndAction { runTypingAnimations() } } else { @@ -1455,13 +1463,13 @@ sealed class DaxBubbleCta( val afterAnimation = { dialogTextCta.finishAnimation() - placeholder?.let { placeholderImageView.fadeIn() } - primaryCta.fadeIn() - secondaryCta.fadeIn() + placeholder?.let { buckAnimators += placeholderImageView.fadeIn() } + buckAnimators += primaryCta.fadeIn() + buckAnimators += secondaryCta.fadeIn() options?.let { optionsViews.forEachIndexed { index, buttonView -> if (it.size > index) { - buttonView.fadeIn() + buckAnimators += buttonView.fadeIn() } } } @@ -1472,8 +1480,8 @@ sealed class DaxBubbleCta( with(buckOnboardingDialogView) { animateEntrance( onAnimationEnd = { - daxDialogDismissButton.fadeIn() - daxBubbleDialogTitle.fadeIn() + buckAnimators += daxDialogDismissButton.fadeIn() + buckAnimators += daxBubbleDialogTitle.fadeIn() .withEndAction { dialogTextCta.startTypingAnimation(daxText, true) { afterAnimation() @@ -1508,17 +1516,33 @@ sealed class DaxBubbleCta( private fun clearBubbleBuckDialog(binding: IncludeOnboardingBubbleBuckDialogBinding) { binding.apply { + buckAnimators.forEach { it.cancel() } + buckAnimators = emptyList() + daxBubbleDialogTitle.text = "" + dialogTextCta.cancelAnimation() + dialogTextCta.text = "" this.daxDialogDismissButton.alpha = 0f this.primaryCta.gone() + this.primaryCta.alpha = 0f this.secondaryCta.gone() + this.secondaryCta.alpha = 0f + this.daxDialogOption1.alpha = 0f this.daxDialogOption1.gone() + this.daxDialogOption2.alpha = 0f this.daxDialogOption2.gone() + this.daxDialogOption3.alpha = 0f this.daxDialogOption3.gone() } } private fun clearBubbleBBDialog(binding: IncludeOnboardingBubbleBbDialogBinding) { binding.apply { + bbAnimators.forEach { it.cancel() } + bbAnimators = emptyList() + daxBubbleDialogTitle.cancelAnimation() + daxBubbleDialogTitle.text = "" + dialogTextCta.cancelAnimation() + dialogTextCta.text = "" primaryCta.alpha = 0f primaryCta.gone() secondaryCta.alpha = 0f diff --git a/app/src/main/java/com/duckduckgo/app/onboarding/ui/page/BbWelcomePage.kt b/app/src/main/java/com/duckduckgo/app/onboarding/ui/page/BbWelcomePage.kt index f2f760cf6152..4946ff1094dd 100644 --- a/app/src/main/java/com/duckduckgo/app/onboarding/ui/page/BbWelcomePage.kt +++ b/app/src/main/java/com/duckduckgo/app/onboarding/ui/page/BbWelcomePage.kt @@ -273,6 +273,7 @@ class BbWelcomePage : OnboardingPageFragment(R.layout.content_onboarding_welcome } val titleText = getString(R.string.highlightsPreOnboardingDaxDialog1TitleBb) + binding.daxDialogCta.initial.dialogTitleInvisible.text = titleText afterTypingAnimation = { binding.daxDialogCta.initial.dialogTitle.finishAnimation()