[LeakCanary] OnboardingFragment: Rework viewpager2 adapter

Also re-arrange code a bit for better readbility

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-09-11 23:26:05 +05:30
parent b4e34acf31
commit 90752a814b

View File

@@ -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
}
}
}