Migrate OnboardingActivity to fragment

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-07-06 15:12:19 +05:30
parent cd5e49d1d2
commit 544ee8eb54
5 changed files with 71 additions and 71 deletions

View File

@@ -74,7 +74,8 @@
android:dataExtractionRules="@xml/backup_rules" android:dataExtractionRules="@xml/backup_rules"
tools:targetApi="m"> tools:targetApi="m">
<activity android:name=".view.ui.onboarding.OnboardingActivity" <activity
android:name=".MainActivity"
android:exported="true"> android:exported="true">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
@@ -82,11 +83,6 @@
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" /> <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter> </intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:exported="true">
<nav-graph android:value="@navigation/mobile_navigation" /> <nav-graph android:value="@navigation/mobile_navigation" />
</activity> </activity>

View File

@@ -19,20 +19,18 @@
package com.aurora.store.view.ui.onboarding package com.aurora.store.view.ui.onboarding
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.View
import androidx.activity.addCallback import androidx.activity.addCallback
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
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
import com.aurora.Constants
import com.aurora.extensions.isSAndAbove import com.aurora.extensions.isSAndAbove
import com.aurora.extensions.open
import com.aurora.store.MainActivity
import com.aurora.store.R import com.aurora.store.R
import com.aurora.store.data.work.UpdateWorker import com.aurora.store.data.work.UpdateWorker
import com.aurora.store.databinding.ActivityOnboardingBinding import com.aurora.store.databinding.FragmentOnboardingBinding
import com.aurora.store.util.Preferences import com.aurora.store.util.Preferences
import com.aurora.store.util.Preferences.PREFERENCE_AUTO_DELETE import com.aurora.store.util.Preferences.PREFERENCE_AUTO_DELETE
import com.aurora.store.util.Preferences.PREFERENCE_DEFAULT import com.aurora.store.util.Preferences.PREFERENCE_DEFAULT
@@ -52,115 +50,94 @@ import com.aurora.store.util.Preferences.PREFERENCE_THEME_TYPE
import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_CHECK import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_CHECK
import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_EXTENDED import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_EXTENDED
import com.aurora.store.util.save import com.aurora.store.util.save
import com.aurora.store.view.ui.commons.BaseActivity
import com.google.android.material.tabs.TabLayoutMediator import com.google.android.material.tabs.TabLayoutMediator
class OnboardingActivity : BaseActivity() { class OnboardingFragment : Fragment(R.layout.fragment_onboarding) {
lateinit var B: ActivityOnboardingBinding private var _binding: FragmentOnboardingBinding? = null
private val binding: FragmentOnboardingBinding
get() = _binding!!
override fun onConnected() {} override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentOnboardingBinding.bind(view)
override fun onDisconnected() {} val isDefaultPrefLoaded = Preferences.getBoolean(requireContext(), PREFERENCE_DEFAULT)
override fun onReconnected() {}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val isIntroDone = Preferences.getBoolean(this, PREFERENCE_INTRO)
if (isIntroDone) {
runOnUiThread { open(MainActivity::class.java, true) }
return
}
val isDefaultPrefLoaded = Preferences.getBoolean(this, PREFERENCE_DEFAULT)
if (!isDefaultPrefLoaded) { if (!isDefaultPrefLoaded) {
save(PREFERENCE_DEFAULT, true) save(PREFERENCE_DEFAULT, true)
loadDefaultPreferences() loadDefaultPreferences()
} }
B = ActivityOnboardingBinding.inflate(layoutInflater)
setContentView(B.root)
attachViewPager() attachViewPager()
B.btnForward.setOnClickListener { binding.btnForward.setOnClickListener {
moveForward() moveForward()
} }
B.btnBackward.setOnClickListener { binding.btnBackward.setOnClickListener {
moveBackward() moveBackward()
} }
if (!Preferences.getBoolean(this, Preferences.PREFERENCE_TOS_READ)) { activity?.onBackPressedDispatcher?.addCallback(this) {
askToReadTOS() if (binding.viewpager2.currentItem == 0) {
} activity?.finish()
onNewIntent(intent)
onBackPressedDispatcher.addCallback(this) {
if (B.viewpager2.currentItem == 0) {
finish()
} else { } else {
B.viewpager2.currentItem = B.viewpager2.currentItem - 1 binding.viewpager2.currentItem = binding.viewpager2.currentItem - 1
} }
} }
} }
override fun onNewIntent(intent: Intent?) { override fun onDestroyView() {
super.onNewIntent(intent) super.onDestroyView()
intent?.let { _binding = null
val pos = intent.getIntExtra(Constants.INT_EXTRA, 0)
B.viewpager2.setCurrentItem(pos, false)
}
} }
private fun attachViewPager() { private fun attachViewPager() {
B.viewpager2.adapter = PagerAdapter(this) binding.viewpager2.adapter = PagerAdapter(requireActivity())
B.viewpager2.isUserInputEnabled = false binding.viewpager2.isUserInputEnabled = false
B.viewpager2.setCurrentItem(0, true) binding.viewpager2.setCurrentItem(0, true)
B.viewpager2.registerOnPageChangeCallback(object : OnPageChangeCallback() { binding.viewpager2.registerOnPageChangeCallback(object : OnPageChangeCallback() {
override fun onPageSelected(position: Int) { override fun onPageSelected(position: Int) {
runOnUiThread { activity?.runOnUiThread {
lastPosition = position lastPosition = position
refreshButtonState() refreshButtonState()
} }
} }
}) })
TabLayoutMediator(B.tabLayout, B.viewpager2, true) { tab, position -> TabLayoutMediator(binding.tabLayout, binding.viewpager2, true) { tab, position ->
tab.text = (position + 1).toString() tab.text = (position + 1).toString()
}.attach() }.attach()
} }
private fun moveForward() { private fun moveForward() {
B.viewpager2.setCurrentItem(B.viewpager2.currentItem + 1, true) binding.viewpager2.setCurrentItem(binding.viewpager2.currentItem + 1, true)
} }
private fun moveBackward() { private fun moveBackward() {
B.viewpager2.setCurrentItem(B.viewpager2.currentItem - 1, true) binding.viewpager2.setCurrentItem(binding.viewpager2.currentItem - 1, true)
} }
var lastPosition = 0 var lastPosition = 0
fun refreshButtonState() { fun refreshButtonState() {
B.btnBackward.isEnabled = lastPosition != 0 binding.btnBackward.isEnabled = lastPosition != 0
B.btnForward.isEnabled = lastPosition != 4 binding.btnForward.isEnabled = lastPosition != 4
if (lastPosition == 4) { if (lastPosition == 4) {
B.btnForward.text = getString(R.string.action_finish) binding.btnForward.text = getString(R.string.action_finish)
B.btnForward.isEnabled = true binding.btnForward.isEnabled = true
B.btnForward.setOnClickListener { binding.btnForward.setOnClickListener {
save(PREFERENCE_INTRO, true) save(PREFERENCE_INTRO, true)
UpdateWorker.scheduleAutomatedCheck(this) UpdateWorker.scheduleAutomatedCheck(requireContext())
open(MainActivity::class.java, true) findNavController().navigate(
OnboardingFragmentDirections.actionOnboardingFragmentToSplashFragment()
)
} }
} else { } else {
B.btnForward.text = getString(R.string.action_next) binding.btnForward.text = getString(R.string.action_next)
B.btnForward.setOnClickListener { binding.btnForward.setOnClickListener {
B.viewpager2.setCurrentItem( binding.viewpager2.setCurrentItem(
B.viewpager2.currentItem + 1, true binding.viewpager2.currentItem + 1, true
) )
} }
} }

View File

@@ -31,6 +31,8 @@ import com.aurora.store.R
import com.aurora.store.data.AuthState import com.aurora.store.data.AuthState
import com.aurora.store.data.event.BusEvent import com.aurora.store.data.event.BusEvent
import com.aurora.store.databinding.FragmentSplashBinding import com.aurora.store.databinding.FragmentSplashBinding
import com.aurora.store.util.Preferences
import com.aurora.store.util.Preferences.PREFERENCE_INTRO
import com.aurora.store.viewmodel.auth.AuthViewModel import com.aurora.store.viewmodel.auth.AuthViewModel
import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
@@ -55,6 +57,12 @@ class SplashFragment : Fragment(R.layout.fragment_splash) {
// Toolbar // Toolbar
binding.layoutToolbarAction.toolbar.elevation = 0f binding.layoutToolbarAction.toolbar.elevation = 0f
if (!Preferences.getBoolean(requireContext(), PREFERENCE_INTRO)) {
findNavController().navigate(
SplashFragmentDirections.actionSplashFragmentToOnboardingFragment()
)
}
attachActions() attachActions()
//Initial status //Initial status

View File

@@ -19,9 +19,11 @@
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container" android:id="@+id/container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
tools:context=".view.ui.onboarding.OnboardingFragment">
<RelativeLayout <RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@@ -240,6 +240,12 @@
app:launchSingleTop="true" app:launchSingleTop="true"
app:popUpTo="@id/mobile_navigation" app:popUpTo="@id/mobile_navigation"
app:popUpToInclusive="true" /> app:popUpToInclusive="true" />
<action
android:id="@+id/action_splashFragment_to_onboardingFragment"
app:destination="@id/onboardingFragment"
app:launchSingleTop="true"
app:popUpTo="@id/mobile_navigation"
app:popUpToInclusive="true" />
</fragment> </fragment>
<fragment <fragment
android:id="@+id/googleFragment" android:id="@+id/googleFragment"
@@ -251,6 +257,17 @@
app:popUpTo="@id/splashFragment" app:popUpTo="@id/splashFragment"
app:popUpToInclusive="true" /> app:popUpToInclusive="true" />
</fragment> </fragment>
<fragment
android:id="@+id/onboardingFragment"
android:name="com.aurora.store.view.ui.onboarding.OnboardingFragment"
tools:layout="@layout/fragment_onboarding" >
<action
android:id="@+id/action_onboardingFragment_to_splashFragment"
app:destination="@id/splashFragment"
app:launchSingleTop="true"
app:popUpTo="@id/mobile_navigation"
app:popUpToInclusive="true" />
</fragment>
<action <action
android:id="@+id/action_global_appDetailsFragment" android:id="@+id/action_global_appDetailsFragment"
app:destination="@id/appDetailsFragment" /> app:destination="@id/appDetailsFragment" />