diff --git a/app/src/main/java/com/aurora/store/view/ui/account/AccountFragment.kt b/app/src/main/java/com/aurora/store/view/ui/account/AccountFragment.kt index f75995c1b..88a737544 100644 --- a/app/src/main/java/com/aurora/store/view/ui/account/AccountFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/account/AccountFragment.kt @@ -19,21 +19,16 @@ package com.aurora.store.view.ui.account -import android.app.Activity.RESULT_CANCELED -import android.content.Intent import android.os.Bundle import android.view.View -import androidx.activity.result.contract.ActivityResultContracts import androidx.fragment.app.Fragment -import androidx.lifecycle.ViewModelProvider +import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import com.aurora.extensions.browse -import com.aurora.extensions.getEmptyActivityAnimation import com.aurora.extensions.load import com.aurora.gplayapi.data.models.AuthData import com.aurora.store.R 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.AuthProvider 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.ui.failUi import nl.komponents.kovenant.ui.successUi -import org.greenrobot.eventbus.EventBus -import org.greenrobot.eventbus.Subscribe class AccountFragment : Fragment(R.layout.fragment_account) { @@ -51,7 +44,7 @@ class AccountFragment : Fragment(R.layout.fragment_account) { private val binding: FragmentAccountBinding get() = _binding!! - private lateinit var VM: AuthViewModel + private val viewModel: AuthViewModel by activityViewModels() private lateinit var authData: AuthData private lateinit var accountProvider: AccountProvider @@ -61,22 +54,9 @@ class AccountFragment : Fragment(R.layout.fragment_account) { private val URL_DISCLAIMER = "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?) { super.onViewCreated(view, savedInstanceState) - - EventBus.getDefault().register(this) - _binding = FragmentAccountBinding.bind(view) - VM = ViewModelProvider(this)[AuthViewModel::class.java] authData = AuthProvider.with(view.context).getAuthData() accountProvider = AccountProvider.with(view.context) @@ -98,7 +78,7 @@ class AccountFragment : Fragment(R.layout.fragment_account) { updateContents() - VM.liveData.observe(viewLifecycleOwner) { + viewModel.liveData.observe(viewLifecycleOwner) { when (it) { AuthState.Fetching -> { updateStatus(getString(R.string.requesting_new_session)) @@ -138,25 +118,6 @@ class AccountFragment : Fragment(R.layout.fragment_account) { override fun onDestroyView() { super.onDestroyView() _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() { @@ -192,17 +153,20 @@ class AccountFragment : Fragment(R.layout.fragment_account) { binding.btnGoogle.updateProgress(false) binding.btnAnonymous.addOnClickListener { - if (VM.liveData.value != AuthState.Fetching) { + if (viewModel.liveData.value != AuthState.Fetching) { binding.btnAnonymous.updateProgress(true) - VM.buildAnonymousAuthData() + viewModel.buildAnonymousAuthData() } } binding.btnGoogle.addOnClickListener { - if (VM.liveData.value != AuthState.Fetching) { + if (viewModel.liveData.value != AuthState.Fetching) { binding.btnGoogle.updateProgress(true) - val intent = Intent(requireContext(), GoogleFragment::class.java) - startForResult.launch(intent, requireContext().getEmptyActivityAnimation()) + findNavController().navigate( + AccountFragmentDirections.actionAccountFragmentToGoogleFragment( + R.id.accountFragment + ) + ) } } diff --git a/app/src/main/java/com/aurora/store/view/ui/account/GoogleFragment.kt b/app/src/main/java/com/aurora/store/view/ui/account/GoogleFragment.kt index 337205f78..36d482410 100644 --- a/app/src/main/java/com/aurora/store/view/ui/account/GoogleFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/account/GoogleFragment.kt @@ -30,6 +30,7 @@ import android.widget.Toast import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController +import androidx.navigation.fragment.navArgs import com.aurora.Constants import com.aurora.store.R 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 nl.komponents.kovenant.task import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode class GoogleFragment : Fragment(R.layout.fragment_google) { + private val args: GoogleFragmentArgs by navArgs() private val viewModel: AuthViewModel by activityViewModels() 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?) { task { 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_AAS_PLAIN, aasToken) EventBus.getDefault().post(BusEvent.GoogleAAS(true, email, aasToken)) - viewModel.buildGoogleAuthData(email, aasToken) } else { Preferences.putString(requireContext(), Constants.ACCOUNT_EMAIL_PLAIN, "") Preferences.putString(requireContext(), Constants.ACCOUNT_AAS_PLAIN, "") @@ -118,9 +154,6 @@ class GoogleFragment : Fragment(R.layout.fragment_google) { ).show() EventBus.getDefault().post(BusEvent.GoogleAAS(false)) } - findNavController().navigate( - GoogleFragmentDirections.actionGoogleFragmentToSplashFragment() - ) } fail { Toast.makeText( requireContext(), @@ -128,9 +161,6 @@ class GoogleFragment : Fragment(R.layout.fragment_google) { Toast.LENGTH_LONG ).show() EventBus.getDefault().post(BusEvent.GoogleAAS(false)) - findNavController().navigate( - GoogleFragmentDirections.actionGoogleFragmentToSplashFragment() - ) } } } diff --git a/app/src/main/java/com/aurora/store/view/ui/splash/SplashFragment.kt b/app/src/main/java/com/aurora/store/view/ui/splash/SplashFragment.kt index fec153e9e..82ec9edc6 100644 --- a/app/src/main/java/com/aurora/store/view/ui/splash/SplashFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/splash/SplashFragment.kt @@ -115,25 +115,6 @@ class SplashFragment : Fragment(R.layout.fragment_splash) { override fun onDestroyView() { super.onDestroyView() _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?) { @@ -170,7 +151,11 @@ class SplashFragment : Fragment(R.layout.fragment_splash) { binding.btnGoogle.addOnClickListener { if (viewModel.liveData.value != AuthState.Fetching) { binding.btnGoogle.updateProgress(true) - findNavController().navigate(R.id.googleFragment) + findNavController().navigate( + SplashFragmentDirections.actionSplashFragmentToGoogleFragment( + R.id.splashFragment + ) + ) } } } diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index a605c288d..115b164cb 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -69,7 +69,11 @@ android:id="@+id/accountFragment" android:name="com.aurora.store.view.ui.account.AccountFragment" android:label="@string/title_account_manager" - tools:layout="@layout/fragment_account" /> + tools:layout="@layout/fragment_account" > + + + + +