From aa0e3968915f7b9c3adc6109e08f02a0f372bf9a Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 22 Jun 2023 19:07:35 +0530 Subject: [PATCH] Migrate AccountActivity to fragment Signed-off-by: Aayush Gupta --- app/src/main/AndroidManifest.xml | 1 - .../java/com/aurora/store/MainActivity.kt | 6 +- ...{AccountActivity.kt => AccountFragment.kt} | 135 ++++++++---------- ...ivity_account.xml => fragment_account.xml} | 3 +- ...ivity_account.xml => fragment_account.xml} | 3 +- .../main/res/navigation/mobile_navigation.xml | 5 + 6 files changed, 75 insertions(+), 78 deletions(-) rename app/src/main/java/com/aurora/store/view/ui/account/{AccountActivity.kt => AccountFragment.kt} (64%) rename app/src/main/res/layout-land/{activity_account.xml => fragment_account.xml} (99%) rename app/src/main/res/layout/{activity_account.xml => fragment_account.xml} (99%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e64a2510f..28fd8af03 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -153,7 +153,6 @@ - diff --git a/app/src/main/java/com/aurora/store/MainActivity.kt b/app/src/main/java/com/aurora/store/MainActivity.kt index 3e76c667b..3072045d0 100644 --- a/app/src/main/java/com/aurora/store/MainActivity.kt +++ b/app/src/main/java/com/aurora/store/MainActivity.kt @@ -53,9 +53,8 @@ import com.aurora.store.databinding.ActivityMainBinding import com.aurora.store.util.CertUtil.isFDroidApp import com.aurora.store.util.Log import com.aurora.store.util.Preferences -import com.aurora.store.view.ui.account.AccountActivity +import com.aurora.store.view.ui.account.AccountFragment import com.aurora.store.view.ui.commons.BaseActivity -import com.aurora.store.view.ui.commons.BlacklistFragment import com.aurora.store.view.ui.downloads.DownloadActivity import com.aurora.store.view.ui.preferences.SettingsActivity import com.aurora.store.view.ui.search.SearchSuggestionActivity @@ -260,7 +259,8 @@ class MainActivity : BaseActivity() { B.drawerLayout.close() } R.id.menu_account_manager -> { - open(AccountActivity::class.java) + navController.navigate(R.id.accountFragment) + B.drawerLayout.close() } R.id.menu_settings -> { open(SettingsActivity::class.java) diff --git a/app/src/main/java/com/aurora/store/view/ui/account/AccountActivity.kt b/app/src/main/java/com/aurora/store/view/ui/account/AccountFragment.kt similarity index 64% rename from app/src/main/java/com/aurora/store/view/ui/account/AccountActivity.kt rename to app/src/main/java/com/aurora/store/view/ui/account/AccountFragment.kt index c8158a62d..f23f28cfb 100644 --- a/app/src/main/java/com/aurora/store/view/ui/account/AccountActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/account/AccountFragment.kt @@ -19,11 +19,14 @@ 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.navigation.fragment.findNavController import com.aurora.extensions.browse import com.aurora.extensions.getEmptyActivityAnimation import com.aurora.extensions.load @@ -33,9 +36,7 @@ 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.ActivityAccountBinding -import com.aurora.store.util.Preferences -import com.aurora.store.view.ui.commons.BaseActivity +import com.aurora.store.databinding.FragmentAccountBinding import com.aurora.store.viewmodel.auth.AuthViewModel import com.bumptech.glide.load.resource.bitmap.RoundedCorners import nl.komponents.kovenant.task @@ -44,51 +45,65 @@ import nl.komponents.kovenant.ui.successUi import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe -class AccountActivity : BaseActivity() { +class AccountFragment : Fragment(R.layout.fragment_account) { + + private var _binding: FragmentAccountBinding? = null + private val binding: FragmentAccountBinding + get() = _binding!! private lateinit var VM: AuthViewModel - private lateinit var B: ActivityAccountBinding private lateinit var authData: AuthData private lateinit var accountProvider: AccountProvider private val URL_TOS = "https://play.google.com/about/play-terms/" private val URL_LICENSE = "https://gitlab.com/AuroraOSS/AuroraStore/blob/master/LICENSE" - private val URL_DISCLAIMER = "https://gitlab.com/AuroraOSS/AuroraStore/blob/master/DISCLAIMER.md" + 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 { - B.btnGoogle.updateProgress(true) + binding.btnGoogle.updateProgress(true) } } - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) - EventBus.getDefault().register(this); + EventBus.getDefault().register(this) - B = ActivityAccountBinding.inflate(layoutInflater) + _binding = FragmentAccountBinding.bind(view) VM = ViewModelProvider(this)[AuthViewModel::class.java] - setContentView(B.root) + authData = AuthProvider.with(view.context).getAuthData() + accountProvider = AccountProvider.with(view.context) - authData = AuthProvider.with(this).getAuthData() - accountProvider = AccountProvider.with(this) + // Toolbar + binding.layoutToolbarAction.txtTitle.text = getString(R.string.title_account_manager) + binding.layoutToolbarAction.imgActionPrimary.setOnClickListener { + findNavController().navigateUp() + } + + // Chips + view.context.apply { + binding.chipDisclaimer.setOnClickListener { browse(URL_DISCLAIMER) } + binding.chipLicense.setOnClickListener { browse(URL_LICENSE) } + binding.chipTos.setOnClickListener { browse(URL_TOS) } + } - attachToolbar() - attachChips() attachActions() updateContents() - VM.liveData.observe(this) { + VM.liveData.observe(viewLifecycleOwner) { when (it) { AuthState.Fetching -> { updateStatus(getString(R.string.requesting_new_session)) } + AuthState.Valid -> { } @@ -120,9 +135,10 @@ class AccountActivity : BaseActivity() { } } - override fun onDestroy() { + override fun onDestroyView() { + super.onDestroyView() + _binding = null EventBus.getDefault().unregister(this) - super.onDestroy() } @Subscribe() @@ -136,6 +152,7 @@ class AccountActivity : BaseActivity() { updateStatus(getString(R.string.session_login_failed_google)) } } + else -> { } @@ -144,10 +161,10 @@ class AccountActivity : BaseActivity() { private fun updateContents() { if (accountProvider.isSignedIn()) { - B.viewFlipper.displayedChild = 1 + binding.viewFlipper.displayedChild = 1 updateStatus(getString(R.string.session_good)) } else { - B.viewFlipper.displayedChild = 0 + binding.viewFlipper.displayedChild = 0 updateStatus(getString(R.string.session_enjoy)) } @@ -155,8 +172,8 @@ class AccountActivity : BaseActivity() { } private fun updateStatus(string: String?) { - runOnUiThread { - B.txtStatus.apply { + activity?.runOnUiThread { + binding.txtStatus.apply { text = string } } @@ -164,51 +181,37 @@ class AccountActivity : BaseActivity() { private fun updateActionLayout(isVisible: Boolean) { if (isVisible) { - B.layoutAction.visibility = View.VISIBLE + binding.layoutAction.visibility = View.VISIBLE } else { - B.layoutAction.visibility = View.INVISIBLE + binding.layoutAction.visibility = View.INVISIBLE } } - private fun attachToolbar() { - B.layoutToolbarAction.txtTitle.text = getString(R.string.title_account_manager) - B.layoutToolbarAction.imgActionPrimary.setOnClickListener { - finishAfterTransition() - } - } - - private fun attachChips() { - B.chipDisclaimer.setOnClickListener { browse(URL_DISCLAIMER) } - B.chipLicense.setOnClickListener { browse(URL_LICENSE) } - B.chipTos.setOnClickListener { browse(URL_TOS) } - } - - private fun attachActions() { - B.btnAnonymous.updateProgress(false) - B.btnGoogle.updateProgress(false) + binding.btnAnonymous.updateProgress(false) + binding.btnGoogle.updateProgress(false) - B.btnAnonymous.addOnClickListener { + binding.btnAnonymous.addOnClickListener { if (VM.liveData.value != AuthState.Fetching) { - B.btnAnonymous.updateProgress(true) + binding.btnAnonymous.updateProgress(true) VM.buildAnonymousAuthData() } } - B.btnGoogle.addOnClickListener { + binding.btnGoogle.addOnClickListener { if (VM.liveData.value != AuthState.Fetching) { - B.btnGoogle.updateProgress(true) - val intent = Intent(this, GoogleActivity::class.java) - startForResult.launch(intent, getEmptyActivityAnimation()) + binding.btnGoogle.updateProgress(true) + val intent = Intent(requireContext(), GoogleActivity::class.java) + startForResult.launch(intent, requireContext().getEmptyActivityAnimation()) } } - B.btnLogout.addOnClickListener { + binding.btnLogout.addOnClickListener { task { - AccountProvider.with(this).logout() + AccountProvider.with(it.context).logout() } successUi { - B.btnAnonymous.updateProgress(false) - B.btnGoogle.updateProgress(false) + binding.btnAnonymous.updateProgress(false) + binding.btnGoogle.updateProgress(false) updateContents() } failUi { @@ -217,55 +220,43 @@ class AccountActivity : BaseActivity() { } private fun resetActions() { - B.btnGoogle.apply { + binding.btnGoogle.apply { updateProgress(false) isEnabled = true } - B.btnAnonymous.apply { + binding.btnAnonymous.apply { updateProgress(false) isEnabled = true } } private fun updateUserProfile() { - authData = AuthProvider.with(this).getAuthData() + authData = AuthProvider.with(requireContext()).getAuthData() if (accountProvider.isSignedIn()) { authData.userProfile?.let { - B.imgAvatar.load(it.artwork.url) { + binding.imgAvatar.load(it.artwork.url) { placeholder(R.drawable.bg_placeholder) transform(RoundedCorners(32)) } - B.txtName.text = if (authData.isAnonymous) + binding.txtName.text = if (authData.isAnonymous) "Anonymous" else it.name - B.txtEmail.text = if (authData.isAnonymous) + binding.txtEmail.text = if (authData.isAnonymous) "anonymous@gmail.com" else it.email } } else { - B.imgAvatar.load(R.mipmap.ic_launcher) { + binding.imgAvatar.load(R.mipmap.ic_launcher) { transform(RoundedCorners(32)) } - B.txtName.text = getString(R.string.app_name) - B.txtEmail.text = getString(R.string.account_logged_out) + binding.txtName.text = getString(R.string.app_name) + binding.txtEmail.text = getString(R.string.account_logged_out) } } - - override fun onConnected() { - hideNetworkConnectivitySheet() - } - - override fun onDisconnected() { - showNetworkConnectivitySheet() - } - - override fun onReconnected() { - - } } diff --git a/app/src/main/res/layout-land/activity_account.xml b/app/src/main/res/layout-land/fragment_account.xml similarity index 99% rename from app/src/main/res/layout-land/activity_account.xml rename to app/src/main/res/layout-land/fragment_account.xml index 2d70c15cc..6226f5683 100644 --- a/app/src/main/res/layout-land/activity_account.xml +++ b/app/src/main/res/layout-land/fragment_account.xml @@ -24,7 +24,8 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical"> + android:orientation="vertical" + tools:context=".view.ui.account.AccountFragment"> + android:weightSum="2" + tools:context=".view.ui.account.AccountFragment"> + \ No newline at end of file