From 90752a814bd308b0dbc676cd06a686e64ddb6d86 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Mon, 11 Sep 2023 23:26:05 +0530 Subject: [PATCH] [LeakCanary] OnboardingFragment: Rework viewpager2 adapter Also re-arrange code a bit for better readbility Signed-off-by: Aayush Gupta --- .../view/ui/onboarding/OnboardingFragment.kt | 95 +++++++++---------- 1 file changed, 44 insertions(+), 51 deletions(-) diff --git a/app/src/main/java/com/aurora/store/view/ui/onboarding/OnboardingFragment.kt b/app/src/main/java/com/aurora/store/view/ui/onboarding/OnboardingFragment.kt index ae9408016..0bbfffb95 100644 --- a/app/src/main/java/com/aurora/store/view/ui/onboarding/OnboardingFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/onboarding/OnboardingFragment.kt @@ -22,7 +22,8 @@ package com.aurora.store.view.ui.onboarding import android.os.Bundle import android.view.View import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentActivity +import androidx.fragment.app.FragmentManager +import androidx.lifecycle.Lifecycle import androidx.navigation.fragment.findNavController import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback @@ -56,6 +57,27 @@ class OnboardingFragment : Fragment(R.layout.fragment_onboarding) { private var _binding: FragmentOnboardingBinding? = null private val binding get() = _binding!! + private var lastPosition = 0 + + internal class PagerAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle) : + FragmentStateAdapter(fragmentManager, lifecycle) { + override fun createFragment(position: Int): Fragment { + when (position) { + 0 -> return WelcomeFragment() + 1 -> return InstallerFragment() + 2 -> return ThemeFragment() + 3 -> return AccentFragment() + 4 -> return AppLinksFragment() + 5 -> return PermissionsFragment() + } + return Fragment() + } + + override fun getItemCount(): Int { + return 6 + } + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = FragmentOnboardingBinding.bind(view) @@ -66,14 +88,31 @@ class OnboardingFragment : Fragment(R.layout.fragment_onboarding) { loadDefaultPreferences() } - attachViewPager() + // ViewPager2 + binding.viewpager2.apply { + adapter = PagerAdapter(childFragmentManager, viewLifecycleOwner.lifecycle) + isUserInputEnabled = false + setCurrentItem(0, true) + registerOnPageChangeCallback(object : OnPageChangeCallback() { + override fun onPageSelected(position: Int) { + activity?.runOnUiThread { + lastPosition = position + refreshButtonState() + } + } + }) + } + + TabLayoutMediator(binding.tabLayout, binding.viewpager2, true) { tab, position -> + tab.text = (position + 1).toString() + }.attach() binding.btnForward.setOnClickListener { - moveForward() + binding.viewpager2.setCurrentItem(binding.viewpager2.currentItem + 1, true) } binding.btnBackward.setOnClickListener { - moveBackward() + binding.viewpager2.setCurrentItem(binding.viewpager2.currentItem - 1, true) } if (!Preferences.getBoolean(view.context, Preferences.PREFERENCE_TOS_READ)) { @@ -86,37 +125,10 @@ class OnboardingFragment : Fragment(R.layout.fragment_onboarding) { _binding = null } - private fun attachViewPager() { - binding.viewpager2.adapter = PagerAdapter(requireActivity()) - binding.viewpager2.isUserInputEnabled = false - binding.viewpager2.setCurrentItem(0, true) - binding.viewpager2.registerOnPageChangeCallback(object : OnPageChangeCallback() { - override fun onPageSelected(position: Int) { - activity?.runOnUiThread { - lastPosition = position - refreshButtonState() - } - } - }) - - TabLayoutMediator(binding.tabLayout, binding.viewpager2, true) { tab, position -> - tab.text = (position + 1).toString() - }.attach() - } - - private fun moveForward() { - binding.viewpager2.setCurrentItem(binding.viewpager2.currentItem + 1, true) - } - - private fun moveBackward() { - binding.viewpager2.setCurrentItem(binding.viewpager2.currentItem - 1, true) - } - - var lastPosition = 0 - fun refreshButtonState() { binding.btnBackward.isEnabled = lastPosition != 0 binding.btnForward.isEnabled = lastPosition != 5 + if (lastPosition == 5) { binding.btnForward.text = getString(R.string.action_finish) binding.btnForward.isEnabled = true @@ -165,23 +177,4 @@ class OnboardingFragment : Fragment(R.layout.fragment_onboarding) { save(PREFERENCE_UPDATES_EXTENDED, false) save(PREFERENCE_UPDATES_CHECK, true) } - - internal class PagerAdapter(fragmentActivity: FragmentActivity) : - FragmentStateAdapter(fragmentActivity) { - override fun createFragment(position: Int): Fragment { - when (position) { - 0 -> return WelcomeFragment() - 1 -> return InstallerFragment() - 2 -> return ThemeFragment() - 3 -> return AccentFragment() - 4 -> return AppLinksFragment() - 5 -> return PermissionsFragment() - } - return Fragment() - } - - override fun getItemCount(): Int { - return 6 - } - } }