[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:
@@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user