Skip to content

Commit cd46796

Browse files
authored
Onboarding Experiment BB: Fix skip onboarding crash (#6573)
Task/Issue URL: https://app.asana.com/1/137249556945/project/414730916066338/task/1211043239331636 ### Description Fixed memory leaks in the BbWelcomePage by properly canceling animations when the view is destroyed. Added references to ViewPropertyAnimator and ValueAnimator instances and ensured they are canceled in onDestroyView(). ### Steps to test this PR Apply patch ``` Index: app/src/main/java/com/duckduckgo/app/onboardingdesignexperiment/OnboardingDesignExperimentManager.kt IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/app/src/main/java/com/duckduckgo/app/onboardingdesignexperiment/OnboardingDesignExperimentManager.kt b/app/src/main/java/com/duckduckgo/app/onboardingdesignexperiment/OnboardingDesignExperimentManager.kt --- a/app/src/main/java/com/duckduckgo/app/onboardingdesignexperiment/OnboardingDesignExperimentManager.kt (revision 8406810) +++ b/app/src/main/java/com/duckduckgo/app/onboardingdesignexperiment/OnboardingDesignExperimentManager.kt (date 1755086579929) @@ -32,6 +32,8 @@ import com.duckduckgo.common.utils.device.DeviceInfo.FormFactor.TABLET import com.duckduckgo.di.scopes.AppScope import com.duckduckgo.feature.toggles.api.MetricsPixel +import com.duckduckgo.feature.toggles.api.Toggle +import com.duckduckgo.feature.toggles.api.Toggle.State.Cohort import com.duckduckgo.privacy.config.api.PrivacyConfigCallbackPlugin import com.squareup.anvil.annotations.ContributesBinding import com.squareup.anvil.annotations.ContributesMultibinding @@ -126,6 +128,13 @@ * Eligibility is determined by the device's Android version, form factor, and whether the user is a returning user. */ override suspend fun enroll() { + onboardingDesignExperimentToggles.onboardingDesignExperimentAug25().setRawStoredState( + Toggle.State( + remoteEnableState = true, + enable = true, + cohorts = listOf(Cohort(name = BB.cohortName, weight = 1)), + ) + ) withContext(dispatcherProvider.io()) { if (isEligibleForEnrolment()) { onboardingDesignExperimentToggles.onboardingDesignExperimentAug25().enroll() ``` _Animation Cleanup_ - [x] Clear data - [x] Delete DuckDuckGo folder from device `Download` folder - [x] Launch app on good connection - [x] Press skip onboarding before all animations can complete - [x] Verify no crashes and browser screen launches ### UI changes N/A
1 parent 5f751f5 commit cd46796

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

app/src/main/java/com/duckduckgo/app/onboarding/ui/page/BbWelcomePage.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import android.graphics.Color
2828
import android.os.Bundle
2929
import android.view.View
3030
import android.view.ViewGroup.MarginLayoutParams
31+
import android.view.ViewPropertyAnimator
3132
import android.view.WindowManager
3233
import android.view.animation.DecelerateInterpolator
3334
import android.view.animation.PathInterpolator
@@ -90,6 +91,8 @@ class BbWelcomePage : OnboardingPageFragment(R.layout.content_onboarding_welcome
9091
}
9192

9293
private var welcomeAnimation: ViewPropertyAnimatorCompat? = null
94+
private var welcomeTitleAnimator: ViewPropertyAnimator? = null
95+
private var daxDialogAnimator: ValueAnimator? = null
9396
private var daxDialogAnimationStarted = false
9497
private var backgroundSceneManager: BbOnboardingBackgroundSceneManager? = null
9598

@@ -173,6 +176,8 @@ class BbWelcomePage : OnboardingPageFragment(R.layout.content_onboarding_welcome
173176
override fun onDestroyView() {
174177
super.onDestroyView()
175178
welcomeAnimation?.cancel()
179+
welcomeTitleAnimator?.cancel()
180+
daxDialogAnimator?.cancel()
176181
}
177182

178183
override fun onActivityResult(
@@ -496,7 +501,7 @@ class BbWelcomePage : OnboardingPageFragment(R.layout.content_onboarding_welcome
496501
applyTo(binding.longDescriptionContainer)
497502
}
498503

499-
ValueAnimator.ofFloat(0f, 1f)
504+
daxDialogAnimator = ValueAnimator.ofFloat(0f, 1f)
500505
.apply {
501506
duration = transitionDuration.inWholeMilliseconds
502507
startDelay = transitionDelay.inWholeMilliseconds
@@ -528,10 +533,11 @@ class BbWelcomePage : OnboardingPageFragment(R.layout.content_onboarding_welcome
528533
height = calculateCurrentValue(initialHeight, targetHeight, progress)
529534
}
530535
}
536+
}.also {
537+
it.start()
531538
}
532-
.start()
533539

534-
binding.welcomeTitle.animate()
540+
welcomeTitleAnimator = binding.welcomeTitle.animate()
535541
.translationX(-resources.displayMetrics.widthPixels.toFloat())
536542
.setDuration(transitionDuration.inWholeMilliseconds)
537543
.setStartDelay(transitionDelay.inWholeMilliseconds)

0 commit comments

Comments
 (0)