Skip to content

Commit

Permalink
Renamed a few classes, functions. Removed unneeded code.
Browse files Browse the repository at this point in the history
  • Loading branch information
anikiki committed Jan 30, 2025
1 parent a25facd commit e220d48
Show file tree
Hide file tree
Showing 8 changed files with 51 additions and 40 deletions.
15 changes: 11 additions & 4 deletions app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -800,16 +800,22 @@ class BrowserTabFragment :

private lateinit var privacyProtectionsPopup: PrivacyProtectionsPopup

private fun showNewTrackersBlockingAnimation(logos: List<TrackerLogo>) {
experimentTrackersAnimationHelper.startTrackersCircleAnimation(
private fun showExperimentTrackersBurstAnimation(logos: List<TrackerLogo>) {
experimentTrackersAnimationHelper.startTrackersBurstAnimation(
context = requireContext(),
trackersCircleAnimationView = binding.newTrackersBlockingAnimationView,
trackersBurstAnimationView = binding.trackersBurstAnimationView,
omnibarShieldAnimationView = omnibar.shieldIcon,
omnibarPosition = omnibar.omnibarPosition,
logos = logos,
)
}

private fun showExperimentShieldPopAnimation() {
experimentTrackersAnimationHelper.startShieldPopAnimation(
omnibarShieldAnimationView = omnibar.shieldIcon,
)
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Timber.d("onCreate called for tabId=$tabId")
Expand Down Expand Up @@ -1802,7 +1808,8 @@ class BrowserTabFragment :
binding.autoCompleteSuggestionsList.gone()
browserActivity?.openExistingTab(it.tabId)
}
is Command.StartTrackersLogosAnimation -> showNewTrackersBlockingAnimation(it.logos)
is Command.StartExperimentTrackersBurstAnimation -> showExperimentTrackersBurstAnimation(it.logos)
is Command.StartExperimentShieldPopAnimation -> showExperimentShieldPopAnimation()
else -> {
// NO OP
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1858,7 +1858,6 @@ class BrowserTabViewModel @Inject constructor(
val privacyProtection: PrivacyShield = withContext(dispatchers.io()) {
site?.privacyProtection() ?: PrivacyShield.UNKNOWN
}
// TODO ANA: Send command to add / remove sliding view if protected / unprotected

Timber.i("Shield: privacyProtection $privacyProtection")
withContext(dispatchers.main()) {
Expand Down Expand Up @@ -3732,16 +3731,22 @@ class BrowserTabViewModel @Inject constructor(
}

fun onAnimationFinished(logos: List<TrackerLogo>) {
if (logos.isEmpty()) {
return
}

if (appPersonalityFeature.self().isEnabled() && appPersonalityFeature.trackersBlockedAnimation().isEnabled()) {
command.value = Command.StartTrackersLogosAnimation(logos)
if (logos.size > 2) {
if (logos.size > TRACKER_LOGO_ANIMATION_THRESHOLD) {
command.value = Command.StartExperimentTrackersBurstAnimation(logos)
viewModelScope.launch {
pixel.fire(
AppPixelName.TRACKERS_BURST_ANIMATION_SHOWN,
mapOf(TRACKERS_ANIMATION_SHOWN_DURING_ONBOARDING to "${userStageStore.getUserAppStage() != AppStage.ESTABLISHED}"),
)
privacyDashboardExternalPixelParams.setPixelParams(AFTER_BURST_ANIMATION, "true")
}
} else {
command.value = Command.StartExperimentShieldPopAnimation
}
}
}
Expand All @@ -3766,6 +3771,8 @@ class BrowserTabViewModel @Inject constructor(
private const val HTTP_STATUS_CODE_CLIENT_ERROR_PREFIX = 4 // 4xx, client error status code prefix
private const val HTTP_STATUS_CODE_SERVER_ERROR_PREFIX = 5 // 5xx, server error status code prefix

private const val TRACKER_LOGO_ANIMATION_THRESHOLD = 2

// https://www.iso.org/iso-3166-country-codes.html
private val PRINT_LETTER_FORMAT_COUNTRIES_ISO3166_2 = setOf(
Locale.US.country,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,13 @@ import com.duckduckgo.app.browser.omnibar.model.OmnibarPosition

interface ExperimentTrackersAnimationHelper {

fun startTrackersCircleAnimation(
fun startShieldPopAnimation(
omnibarShieldAnimationView: LottieAnimationView,
)

fun startTrackersBurstAnimation(
context: Context,
trackersCircleAnimationView: LottieAnimationView,
trackersBurstAnimationView: LottieAnimationView,
omnibarShieldAnimationView: LottieAnimationView,
omnibarPosition: OmnibarPosition,
logos: List<TrackerLogo>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,50 +37,47 @@ import javax.inject.Inject
@ContributesBinding(FragmentScope::class)
class LottieExperimentTrackersAnimationHelper @Inject constructor() : ExperimentTrackersAnimationHelper {

private lateinit var trackersCircleAnimationView: LottieAnimationView
private lateinit var trackersBurstAnimationView: LottieAnimationView
private lateinit var omnibarShieldAnimationView: LottieAnimationView
private lateinit var resources: Resources

override fun startTrackersCircleAnimation(
override fun startShieldPopAnimation(
omnibarShieldAnimationView: LottieAnimationView,
) {
this.omnibarShieldAnimationView = omnibarShieldAnimationView

omnibarShieldAnimationView.setAnimation(R.raw.protected_shield_experiment)
omnibarShieldAnimationView.setMaxProgress(1f)
omnibarShieldAnimationView.playAnimation()
}

override fun startTrackersBurstAnimation(
context: Context,
trackersCircleAnimationView: LottieAnimationView,
trackersBurstAnimationView: LottieAnimationView,
omnibarShieldAnimationView: LottieAnimationView,
omnibarPosition: OmnibarPosition,
logos: List<TrackerLogo>,
) {
this.trackersCircleAnimationView = trackersCircleAnimationView
this.trackersBurstAnimationView = trackersBurstAnimationView
this.omnibarShieldAnimationView = omnibarShieldAnimationView
this.resources = context.resources

if (logos.isEmpty()) {
return
}

if (logos.size <= 2) {
// TODO ANA: We need to show the protected shield based on flags.
omnibarShieldAnimationView.setAnimation(R.raw.protected_shield_experiment)
omnibarShieldAnimationView.setMaxProgress(1f)
omnibarShieldAnimationView.playAnimation()
return
}

val negativeMarginPx = (-72).toPx()
val gravity = if (omnibarPosition == OmnibarPosition.BOTTOM) Gravity.BOTTOM else Gravity.NO_GRAVITY
val layoutParams = trackersCircleAnimationView.layoutParams as CoordinatorLayout.LayoutParams
val layoutParams = trackersBurstAnimationView.layoutParams as CoordinatorLayout.LayoutParams
layoutParams.gravity = gravity
layoutParams.marginStart = negativeMarginPx
if (gravity == Gravity.BOTTOM) {
trackersCircleAnimationView.scaleY = -1f
trackersBurstAnimationView.scaleY = -1f
} else {
layoutParams.topMargin = negativeMarginPx
trackersCircleAnimationView.scaleY = 1f
trackersBurstAnimationView.scaleY = 1f
}
trackersCircleAnimationView.setLayoutParams(layoutParams)
trackersBurstAnimationView.setLayoutParams(layoutParams)

// TODO ANA: We need to show the protected shield based on flags.
omnibarShieldAnimationView.setAnimation(R.raw.protected_shield_experiment)

with(trackersCircleAnimationView) {
with(trackersBurstAnimationView) {
this.setCacheComposition(false)
this.setAnimation(R.raw.shieldburst)
this.maintainOriginalImageBounds = true
Expand All @@ -91,13 +88,13 @@ class LottieExperimentTrackersAnimationHelper @Inject constructor() : Experiment
this.addAnimatorListener(
object : AnimatorListener {
override fun onAnimationStart(animation: Animator) {
this@LottieExperimentTrackersAnimationHelper.trackersCircleAnimationView.show()
this@LottieExperimentTrackersAnimationHelper.trackersBurstAnimationView.show()
this@LottieExperimentTrackersAnimationHelper.omnibarShieldAnimationView.setMaxProgress(1f)
this@LottieExperimentTrackersAnimationHelper.omnibarShieldAnimationView.playAnimation()
}

override fun onAnimationEnd(animation: Animator) {
this@LottieExperimentTrackersAnimationHelper.trackersCircleAnimationView.gone()
this@LottieExperimentTrackersAnimationHelper.trackersBurstAnimationView.gone()
}

override fun onAnimationCancel(animation: Animator) {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,5 +243,6 @@ sealed class Command {
class SetOnboardingDialogBackground(@DrawableRes val backgroundRes: Int) : Command()
data class LaunchFireDialogFromOnboardingDialog(val onboardingCta: OnboardingDaxDialogCta) : Command()
data class SwitchToTab(val tabId: String) : Command()
data class StartTrackersLogosAnimation(val logos: List<TrackerLogo>) : Command()
data class StartExperimentTrackersBurstAnimation(val logos: List<TrackerLogo>) : Command()
data object StartExperimentShieldPopAnimation : Command()
}
Original file line number Diff line number Diff line change
Expand Up @@ -186,9 +186,6 @@ class OmnibarLayout @JvmOverloads constructor(
internal val trackersAnimation: LottieAnimationView by lazy { findViewById(R.id.trackersAnimation) }
internal val duckPlayerIcon: ImageView by lazy { findViewById(R.id.duckPlayerIcon) }

// internal val trackersBlockedAnimation: DaxTextView by lazy { findViewById(R.id.trackersBlockedTextView) }
// internal val trackersBlockedCountAnimation: DaxTextView by lazy { findViewById(R.id.trackersBlockedCountView) }

init {
val attr =
context.theme.obtainStyledAttributes(attrs, R.styleable.LegacyOmnibarView, defStyle, 0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@ import com.duckduckgo.common.ui.view.text.DaxTextView
/** Public interface for the Browser URL Bar Privacy and Trackers animations */
interface BrowserTrackersAnimatorHelper {

// TODO ANA: Add the new animation.

/**
* This method takes [entities] to create an animation in [trackersAnimationView].
* Then it plays both animations, [shieldAnimationView] and [trackersAnimationView], at the same time.
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/layout/fragment_browser_tab.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
android:layout_height="match_parent">

<com.airbnb.lottie.LottieAnimationView
android:id="@+id/newTrackersBlockingAnimationView"
android:id="@+id/trackersBurstAnimationView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:elevation="2dp"
Expand Down

0 comments on commit e220d48

Please sign in to comment.