Use eventbus to navigate from GoogleFragment

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-07-06 18:58:05 +05:30
parent 6ab3e4b40d
commit 4f6a838411
4 changed files with 68 additions and 75 deletions

View File

@@ -19,21 +19,16 @@
package com.aurora.store.view.ui.account package com.aurora.store.view.ui.account
import android.app.Activity.RESULT_CANCELED
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.activity.result.contract.ActivityResultContracts
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import com.aurora.extensions.browse import com.aurora.extensions.browse
import com.aurora.extensions.getEmptyActivityAnimation
import com.aurora.extensions.load import com.aurora.extensions.load
import com.aurora.gplayapi.data.models.AuthData import com.aurora.gplayapi.data.models.AuthData
import com.aurora.store.R 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.providers.AccountProvider import com.aurora.store.data.providers.AccountProvider
import com.aurora.store.data.providers.AuthProvider import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.databinding.FragmentAccountBinding import com.aurora.store.databinding.FragmentAccountBinding
@@ -42,8 +37,6 @@ import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import nl.komponents.kovenant.task import nl.komponents.kovenant.task
import nl.komponents.kovenant.ui.failUi import nl.komponents.kovenant.ui.failUi
import nl.komponents.kovenant.ui.successUi import nl.komponents.kovenant.ui.successUi
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
class AccountFragment : Fragment(R.layout.fragment_account) { class AccountFragment : Fragment(R.layout.fragment_account) {
@@ -51,7 +44,7 @@ class AccountFragment : Fragment(R.layout.fragment_account) {
private val binding: FragmentAccountBinding private val binding: FragmentAccountBinding
get() = _binding!! get() = _binding!!
private lateinit var VM: AuthViewModel private val viewModel: AuthViewModel by activityViewModels()
private lateinit var authData: AuthData private lateinit var authData: AuthData
private lateinit var accountProvider: AccountProvider private lateinit var accountProvider: AccountProvider
@@ -61,22 +54,9 @@ class AccountFragment : Fragment(R.layout.fragment_account) {
private val URL_DISCLAIMER = private val URL_DISCLAIMER =
"https://gitlab.com/AuroraOSS/AuroraStore/blob/master/DISCLAIMER.md" "https://gitlab.com/AuroraOSS/AuroraStore/blob/master/DISCLAIMER.md"
private val startForResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == RESULT_CANCELED) {
resetActions()
} else {
binding.btnGoogle.updateProgress(true)
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
EventBus.getDefault().register(this)
_binding = FragmentAccountBinding.bind(view) _binding = FragmentAccountBinding.bind(view)
VM = ViewModelProvider(this)[AuthViewModel::class.java]
authData = AuthProvider.with(view.context).getAuthData() authData = AuthProvider.with(view.context).getAuthData()
accountProvider = AccountProvider.with(view.context) accountProvider = AccountProvider.with(view.context)
@@ -98,7 +78,7 @@ class AccountFragment : Fragment(R.layout.fragment_account) {
updateContents() updateContents()
VM.liveData.observe(viewLifecycleOwner) { viewModel.liveData.observe(viewLifecycleOwner) {
when (it) { when (it) {
AuthState.Fetching -> { AuthState.Fetching -> {
updateStatus(getString(R.string.requesting_new_session)) updateStatus(getString(R.string.requesting_new_session))
@@ -138,25 +118,6 @@ class AccountFragment : Fragment(R.layout.fragment_account) {
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
_binding = null _binding = null
EventBus.getDefault().unregister(this)
}
@Subscribe()
fun onEventReceived(event: BusEvent) {
when (event) {
is BusEvent.GoogleAAS -> {
if (event.success) {
updateStatus(getString(R.string.session_verifying_google))
VM.buildGoogleAuthData(event.email, event.aasToken)
} else {
updateStatus(getString(R.string.session_login_failed_google))
}
}
else -> {
}
}
} }
private fun updateContents() { private fun updateContents() {
@@ -192,17 +153,20 @@ class AccountFragment : Fragment(R.layout.fragment_account) {
binding.btnGoogle.updateProgress(false) binding.btnGoogle.updateProgress(false)
binding.btnAnonymous.addOnClickListener { binding.btnAnonymous.addOnClickListener {
if (VM.liveData.value != AuthState.Fetching) { if (viewModel.liveData.value != AuthState.Fetching) {
binding.btnAnonymous.updateProgress(true) binding.btnAnonymous.updateProgress(true)
VM.buildAnonymousAuthData() viewModel.buildAnonymousAuthData()
} }
} }
binding.btnGoogle.addOnClickListener { binding.btnGoogle.addOnClickListener {
if (VM.liveData.value != AuthState.Fetching) { if (viewModel.liveData.value != AuthState.Fetching) {
binding.btnGoogle.updateProgress(true) binding.btnGoogle.updateProgress(true)
val intent = Intent(requireContext(), GoogleFragment::class.java) findNavController().navigate(
startForResult.launch(intent, requireContext().getEmptyActivityAnimation()) AccountFragmentDirections.actionAccountFragmentToGoogleFragment(
R.id.accountFragment
)
)
} }
} }

View File

@@ -30,6 +30,7 @@ import android.widget.Toast
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.aurora.Constants import com.aurora.Constants
import com.aurora.store.R import com.aurora.store.R
import com.aurora.store.data.event.BusEvent import com.aurora.store.data.event.BusEvent
@@ -40,9 +41,12 @@ import com.aurora.store.util.Preferences
import com.aurora.store.viewmodel.auth.AuthViewModel import com.aurora.store.viewmodel.auth.AuthViewModel
import nl.komponents.kovenant.task import nl.komponents.kovenant.task
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
class GoogleFragment : Fragment(R.layout.fragment_google) { class GoogleFragment : Fragment(R.layout.fragment_google) {
private val args: GoogleFragmentArgs by navArgs()
private val viewModel: AuthViewModel by activityViewModels() private val viewModel: AuthViewModel by activityViewModels()
companion object { companion object {
@@ -94,6 +98,39 @@ class GoogleFragment : Fragment(R.layout.fragment_google) {
} }
} }
override fun onStart() {
super.onStart()
EventBus.getDefault().register(this)
}
override fun onStop() {
super.onStop()
EventBus.getDefault().unregister(this)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onEventReceived(event: BusEvent) {
when (event) {
is BusEvent.GoogleAAS -> {
if (event.success) viewModel.buildGoogleAuthData(event.email, event.aasToken)
when (args.destination) {
R.id.splashFragment -> {
findNavController().navigate(
GoogleFragmentDirections.actionGoogleFragmentToSplashFragment()
)
}
R.id.accountFragment -> {
findNavController().navigate(
GoogleFragmentDirections.actionGoogleFragmentToAccountFragment()
)
}
}
}
else -> {}
}
}
private fun buildAuthData(email: String, oauthToken: String?) { private fun buildAuthData(email: String, oauthToken: String?) {
task { task {
AC2DMTask().getAC2DMResponse(email, oauthToken) AC2DMTask().getAC2DMResponse(email, oauthToken)
@@ -104,7 +141,6 @@ class GoogleFragment : Fragment(R.layout.fragment_google) {
Preferences.putString(requireContext(), Constants.ACCOUNT_EMAIL_PLAIN, email) Preferences.putString(requireContext(), Constants.ACCOUNT_EMAIL_PLAIN, email)
Preferences.putString(requireContext(), Constants.ACCOUNT_AAS_PLAIN, aasToken) Preferences.putString(requireContext(), Constants.ACCOUNT_AAS_PLAIN, aasToken)
EventBus.getDefault().post(BusEvent.GoogleAAS(true, email, aasToken)) EventBus.getDefault().post(BusEvent.GoogleAAS(true, email, aasToken))
viewModel.buildGoogleAuthData(email, aasToken)
} else { } else {
Preferences.putString(requireContext(), Constants.ACCOUNT_EMAIL_PLAIN, "") Preferences.putString(requireContext(), Constants.ACCOUNT_EMAIL_PLAIN, "")
Preferences.putString(requireContext(), Constants.ACCOUNT_AAS_PLAIN, "") Preferences.putString(requireContext(), Constants.ACCOUNT_AAS_PLAIN, "")
@@ -118,9 +154,6 @@ class GoogleFragment : Fragment(R.layout.fragment_google) {
).show() ).show()
EventBus.getDefault().post(BusEvent.GoogleAAS(false)) EventBus.getDefault().post(BusEvent.GoogleAAS(false))
} }
findNavController().navigate(
GoogleFragmentDirections.actionGoogleFragmentToSplashFragment()
)
} fail { } fail {
Toast.makeText( Toast.makeText(
requireContext(), requireContext(),
@@ -128,9 +161,6 @@ class GoogleFragment : Fragment(R.layout.fragment_google) {
Toast.LENGTH_LONG Toast.LENGTH_LONG
).show() ).show()
EventBus.getDefault().post(BusEvent.GoogleAAS(false)) EventBus.getDefault().post(BusEvent.GoogleAAS(false))
findNavController().navigate(
GoogleFragmentDirections.actionGoogleFragmentToSplashFragment()
)
} }
} }
} }

View File

@@ -115,25 +115,6 @@ class SplashFragment : Fragment(R.layout.fragment_splash) {
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
_binding = null _binding = null
EventBus.getDefault().unregister(this)
}
@Subscribe()
fun onEventReceived(event: BusEvent) {
when (event) {
is BusEvent.GoogleAAS -> {
if (event.success) {
updateStatus(getString(R.string.session_verifying_google))
viewModel.buildGoogleAuthData(event.email, event.aasToken)
} else {
updateStatus(getString(R.string.session_login_failed_google))
}
}
else -> {
}
}
} }
private fun updateStatus(string: String?) { private fun updateStatus(string: String?) {
@@ -170,7 +151,11 @@ class SplashFragment : Fragment(R.layout.fragment_splash) {
binding.btnGoogle.addOnClickListener { binding.btnGoogle.addOnClickListener {
if (viewModel.liveData.value != AuthState.Fetching) { if (viewModel.liveData.value != AuthState.Fetching) {
binding.btnGoogle.updateProgress(true) binding.btnGoogle.updateProgress(true)
findNavController().navigate(R.id.googleFragment) findNavController().navigate(
SplashFragmentDirections.actionSplashFragmentToGoogleFragment(
R.id.splashFragment
)
)
} }
} }
} }

View File

@@ -69,7 +69,11 @@
android:id="@+id/accountFragment" android:id="@+id/accountFragment"
android:name="com.aurora.store.view.ui.account.AccountFragment" android:name="com.aurora.store.view.ui.account.AccountFragment"
android:label="@string/title_account_manager" android:label="@string/title_account_manager"
tools:layout="@layout/fragment_account" /> tools:layout="@layout/fragment_account" >
<action
android:id="@+id/action_accountFragment_to_googleFragment"
app:destination="@id/googleFragment" />
</fragment>
<fragment <fragment
android:id="@+id/settingsFragment" android:id="@+id/settingsFragment"
android:name="com.aurora.store.view.ui.preferences.SettingsFragment" android:name="com.aurora.store.view.ui.preferences.SettingsFragment"
@@ -246,6 +250,9 @@
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_googleFragment"
app:destination="@id/googleFragment" />
</fragment> </fragment>
<fragment <fragment
android:id="@+id/googleFragment" android:id="@+id/googleFragment"
@@ -256,6 +263,13 @@
app:destination="@id/splashFragment" app:destination="@id/splashFragment"
app:popUpTo="@id/splashFragment" app:popUpTo="@id/splashFragment"
app:popUpToInclusive="true" /> app:popUpToInclusive="true" />
<action
android:id="@+id/action_googleFragment_to_accountFragment"
app:destination="@id/accountFragment"
app:popUpTo="@id/accountFragment"
app:popUpToInclusive="true" />
<argument android:name="destination"
app:argType="integer" />
</fragment> </fragment>
<fragment <fragment
android:id="@+id/onboardingFragment" android:id="@+id/onboardingFragment"