diff --git a/changelog.d/6680.misc b/changelog.d/6680.misc new file mode 100644 index 0000000000..f42160fbba --- /dev/null +++ b/changelog.d/6680.misc @@ -0,0 +1 @@ +[FTUE] Memory leak on FtueAuthSplashCarouselFragment diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthSplashCarouselFragment.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthSplashCarouselFragment.kt index 6ad5df3fef..0333f6047b 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthSplashCarouselFragment.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthSplashCarouselFragment.kt @@ -52,6 +52,8 @@ class FtueAuthSplashCarouselFragment @Inject constructor( private val buildMeta: BuildMeta, ) : AbstractFtueAuthFragment() { + private var tabLayoutMediator: TabLayoutMediator? = null + override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentFtueSplashCarouselBinding { return FragmentFtueSplashCarouselBinding.inflate(inflater, container, false) } @@ -61,10 +63,19 @@ class FtueAuthSplashCarouselFragment @Inject constructor( setupViews() } + override fun onDestroyView() { + tabLayoutMediator?.detach() + tabLayoutMediator = null + views.splashCarousel.adapter = null + super.onDestroyView() + } + private fun setupViews() { val carouselAdapter = carouselController.adapter views.splashCarousel.adapter = carouselAdapter - TabLayoutMediator(views.carouselIndicator, views.splashCarousel) { _, _ -> }.attach() + tabLayoutMediator = TabLayoutMediator(views.carouselIndicator, views.splashCarousel) { _, _ -> } + .also { it.attach() } + carouselController.setData(carouselStateFactory.create()) val isAlreadyHaveAccountEnabled = vectorFeatures.isOnboardingAlreadyHaveAccountSplashEnabled()