[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.os.Bundle
import android.view.View import android.view.View
import androidx.fragment.app.Fragment 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.navigation.fragment.findNavController
import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
@@ -56,6 +57,27 @@ class OnboardingFragment : Fragment(R.layout.fragment_onboarding) {
private var _binding: FragmentOnboardingBinding? = null private var _binding: FragmentOnboardingBinding? = null
private val binding get() = _binding!! 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?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
_binding = FragmentOnboardingBinding.bind(view) _binding = FragmentOnboardingBinding.bind(view)
@@ -66,14 +88,31 @@ class OnboardingFragment : Fragment(R.layout.fragment_onboarding) {
loadDefaultPreferences() 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 { binding.btnForward.setOnClickListener {
moveForward() binding.viewpager2.setCurrentItem(binding.viewpager2.currentItem + 1, true)
} }
binding.btnBackward.setOnClickListener { binding.btnBackward.setOnClickListener {
moveBackward() binding.viewpager2.setCurrentItem(binding.viewpager2.currentItem - 1, true)
} }
if (!Preferences.getBoolean(view.context, Preferences.PREFERENCE_TOS_READ)) { if (!Preferences.getBoolean(view.context, Preferences.PREFERENCE_TOS_READ)) {
@@ -86,37 +125,10 @@ class OnboardingFragment : Fragment(R.layout.fragment_onboarding) {
_binding = null _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() { fun refreshButtonState() {
binding.btnBackward.isEnabled = lastPosition != 0 binding.btnBackward.isEnabled = lastPosition != 0
binding.btnForward.isEnabled = lastPosition != 5 binding.btnForward.isEnabled = lastPosition != 5
if (lastPosition == 5) { if (lastPosition == 5) {
binding.btnForward.text = getString(R.string.action_finish) binding.btnForward.text = getString(R.string.action_finish)
binding.btnForward.isEnabled = true binding.btnForward.isEnabled = true
@@ -165,23 +177,4 @@ class OnboardingFragment : Fragment(R.layout.fragment_onboarding) {
save(PREFERENCE_UPDATES_EXTENDED, false) save(PREFERENCE_UPDATES_EXTENDED, false)
save(PREFERENCE_UPDATES_CHECK, true) 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
}
}
} }