Migrate AccountActivity to fragment

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-06-22 19:07:35 +05:30
parent 1de9d204fb
commit aa0e396891
6 changed files with 75 additions and 78 deletions

View File

@@ -153,7 +153,6 @@
<activity android:name=".view.ui.details.DetailsReviewActivity" /> <activity android:name=".view.ui.details.DetailsReviewActivity" />
<activity android:name=".view.ui.downloads.DownloadActivity" /> <activity android:name=".view.ui.downloads.DownloadActivity" />
<activity android:name=".view.ui.account.GoogleActivity" /> <activity android:name=".view.ui.account.GoogleActivity" />
<activity android:name=".view.ui.account.AccountActivity" />
<activity android:name=".view.ui.details.DetailsExodusActivity" /> <activity android:name=".view.ui.details.DetailsExodusActivity" />
<activity android:name=".view.ui.details.DevAppsActivity" /> <activity android:name=".view.ui.details.DevAppsActivity" />
<activity android:name=".view.ui.preferences.SettingsActivity" /> <activity android:name=".view.ui.preferences.SettingsActivity" />

View File

@@ -53,9 +53,8 @@ import com.aurora.store.databinding.ActivityMainBinding
import com.aurora.store.util.CertUtil.isFDroidApp import com.aurora.store.util.CertUtil.isFDroidApp
import com.aurora.store.util.Log import com.aurora.store.util.Log
import com.aurora.store.util.Preferences 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.BaseActivity
import com.aurora.store.view.ui.commons.BlacklistFragment
import com.aurora.store.view.ui.downloads.DownloadActivity import com.aurora.store.view.ui.downloads.DownloadActivity
import com.aurora.store.view.ui.preferences.SettingsActivity import com.aurora.store.view.ui.preferences.SettingsActivity
import com.aurora.store.view.ui.search.SearchSuggestionActivity import com.aurora.store.view.ui.search.SearchSuggestionActivity
@@ -260,7 +259,8 @@ class MainActivity : BaseActivity() {
B.drawerLayout.close() B.drawerLayout.close()
} }
R.id.menu_account_manager -> { R.id.menu_account_manager -> {
open(AccountActivity::class.java) navController.navigate(R.id.accountFragment)
B.drawerLayout.close()
} }
R.id.menu_settings -> { R.id.menu_settings -> {
open(SettingsActivity::class.java) open(SettingsActivity::class.java)

View File

@@ -19,11 +19,14 @@
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.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.activity.result.contract.ActivityResultContracts
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import com.aurora.extensions.browse import com.aurora.extensions.browse
import com.aurora.extensions.getEmptyActivityAnimation import com.aurora.extensions.getEmptyActivityAnimation
import com.aurora.extensions.load 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.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.ActivityAccountBinding import com.aurora.store.databinding.FragmentAccountBinding
import com.aurora.store.util.Preferences
import com.aurora.store.view.ui.commons.BaseActivity
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 nl.komponents.kovenant.task import nl.komponents.kovenant.task
@@ -44,51 +45,65 @@ import nl.komponents.kovenant.ui.successUi
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe 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 VM: AuthViewModel
private lateinit var B: ActivityAccountBinding
private lateinit var authData: AuthData private lateinit var authData: AuthData
private lateinit var accountProvider: AccountProvider private lateinit var accountProvider: AccountProvider
private val URL_TOS = "https://play.google.com/about/play-terms/" 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_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 = private val startForResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == RESULT_CANCELED) { if (it.resultCode == RESULT_CANCELED) {
resetActions() resetActions()
} else { } else {
B.btnGoogle.updateProgress(true) binding.btnGoogle.updateProgress(true)
} }
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) 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] 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() // Toolbar
accountProvider = AccountProvider.with(this) 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() attachActions()
updateContents() updateContents()
VM.liveData.observe(this) { VM.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))
} }
AuthState.Valid -> { AuthState.Valid -> {
} }
@@ -120,9 +135,10 @@ class AccountActivity : BaseActivity() {
} }
} }
override fun onDestroy() { override fun onDestroyView() {
super.onDestroyView()
_binding = null
EventBus.getDefault().unregister(this) EventBus.getDefault().unregister(this)
super.onDestroy()
} }
@Subscribe() @Subscribe()
@@ -136,6 +152,7 @@ class AccountActivity : BaseActivity() {
updateStatus(getString(R.string.session_login_failed_google)) updateStatus(getString(R.string.session_login_failed_google))
} }
} }
else -> { else -> {
} }
@@ -144,10 +161,10 @@ class AccountActivity : BaseActivity() {
private fun updateContents() { private fun updateContents() {
if (accountProvider.isSignedIn()) { if (accountProvider.isSignedIn()) {
B.viewFlipper.displayedChild = 1 binding.viewFlipper.displayedChild = 1
updateStatus(getString(R.string.session_good)) updateStatus(getString(R.string.session_good))
} else { } else {
B.viewFlipper.displayedChild = 0 binding.viewFlipper.displayedChild = 0
updateStatus(getString(R.string.session_enjoy)) updateStatus(getString(R.string.session_enjoy))
} }
@@ -155,8 +172,8 @@ class AccountActivity : BaseActivity() {
} }
private fun updateStatus(string: String?) { private fun updateStatus(string: String?) {
runOnUiThread { activity?.runOnUiThread {
B.txtStatus.apply { binding.txtStatus.apply {
text = string text = string
} }
} }
@@ -164,51 +181,37 @@ class AccountActivity : BaseActivity() {
private fun updateActionLayout(isVisible: Boolean) { private fun updateActionLayout(isVisible: Boolean) {
if (isVisible) { if (isVisible) {
B.layoutAction.visibility = View.VISIBLE binding.layoutAction.visibility = View.VISIBLE
} else { } 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() { private fun attachActions() {
B.btnAnonymous.updateProgress(false) binding.btnAnonymous.updateProgress(false)
B.btnGoogle.updateProgress(false) binding.btnGoogle.updateProgress(false)
B.btnAnonymous.addOnClickListener { binding.btnAnonymous.addOnClickListener {
if (VM.liveData.value != AuthState.Fetching) { if (VM.liveData.value != AuthState.Fetching) {
B.btnAnonymous.updateProgress(true) binding.btnAnonymous.updateProgress(true)
VM.buildAnonymousAuthData() VM.buildAnonymousAuthData()
} }
} }
B.btnGoogle.addOnClickListener { binding.btnGoogle.addOnClickListener {
if (VM.liveData.value != AuthState.Fetching) { if (VM.liveData.value != AuthState.Fetching) {
B.btnGoogle.updateProgress(true) binding.btnGoogle.updateProgress(true)
val intent = Intent(this, GoogleActivity::class.java) val intent = Intent(requireContext(), GoogleActivity::class.java)
startForResult.launch(intent, getEmptyActivityAnimation()) startForResult.launch(intent, requireContext().getEmptyActivityAnimation())
} }
} }
B.btnLogout.addOnClickListener { binding.btnLogout.addOnClickListener {
task { task {
AccountProvider.with(this).logout() AccountProvider.with(it.context).logout()
} successUi { } successUi {
B.btnAnonymous.updateProgress(false) binding.btnAnonymous.updateProgress(false)
B.btnGoogle.updateProgress(false) binding.btnGoogle.updateProgress(false)
updateContents() updateContents()
} failUi { } failUi {
@@ -217,55 +220,43 @@ class AccountActivity : BaseActivity() {
} }
private fun resetActions() { private fun resetActions() {
B.btnGoogle.apply { binding.btnGoogle.apply {
updateProgress(false) updateProgress(false)
isEnabled = true isEnabled = true
} }
B.btnAnonymous.apply { binding.btnAnonymous.apply {
updateProgress(false) updateProgress(false)
isEnabled = true isEnabled = true
} }
} }
private fun updateUserProfile() { private fun updateUserProfile() {
authData = AuthProvider.with(this).getAuthData() authData = AuthProvider.with(requireContext()).getAuthData()
if (accountProvider.isSignedIn()) { if (accountProvider.isSignedIn()) {
authData.userProfile?.let { authData.userProfile?.let {
B.imgAvatar.load(it.artwork.url) { binding.imgAvatar.load(it.artwork.url) {
placeholder(R.drawable.bg_placeholder) placeholder(R.drawable.bg_placeholder)
transform(RoundedCorners(32)) transform(RoundedCorners(32))
} }
B.txtName.text = if (authData.isAnonymous) binding.txtName.text = if (authData.isAnonymous)
"Anonymous" "Anonymous"
else else
it.name it.name
B.txtEmail.text = if (authData.isAnonymous) binding.txtEmail.text = if (authData.isAnonymous)
"anonymous@gmail.com" "anonymous@gmail.com"
else else
it.email it.email
} }
} else { } else {
B.imgAvatar.load(R.mipmap.ic_launcher) { binding.imgAvatar.load(R.mipmap.ic_launcher) {
transform(RoundedCorners(32)) transform(RoundedCorners(32))
} }
B.txtName.text = getString(R.string.app_name) binding.txtName.text = getString(R.string.app_name)
B.txtEmail.text = getString(R.string.account_logged_out) binding.txtEmail.text = getString(R.string.account_logged_out)
} }
} }
override fun onConnected() {
hideNetworkConnectivitySheet()
}
override fun onDisconnected() {
showNetworkConnectivitySheet()
}
override fun onReconnected() {
}
} }

View File

@@ -24,7 +24,8 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical"
tools:context=".view.ui.account.AccountFragment">
<include <include
android:id="@+id/layout_toolbar_action" android:id="@+id/layout_toolbar_action"

View File

@@ -25,7 +25,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical" android:orientation="vertical"
android:weightSum="2"> android:weightSum="2"
tools:context=".view.ui.account.AccountFragment">
<include <include
android:id="@+id/layout_toolbar_action" android:id="@+id/layout_toolbar_action"

View File

@@ -65,4 +65,9 @@
android:name="com.aurora.store.view.ui.commons.BlacklistFragment" android:name="com.aurora.store.view.ui.commons.BlacklistFragment"
android:label="@string/title_blacklist_manager" android:label="@string/title_blacklist_manager"
tools:layout="@layout/activity_generic_recycler" /> tools:layout="@layout/activity_generic_recycler" />
<fragment
android:id="@+id/accountFragment"
android:name="com.aurora.store.view.ui.account.AccountFragment"
android:label="@string/title_account_manager"
tools:layout="@layout/fragment_account" />
</navigation> </navigation>