From baa954eb20ddd454814dc93f598dd6296535d484 Mon Sep 17 00:00:00 2001 From: Rahul Patel Date: Sat, 14 Dec 2024 13:13:33 +0530 Subject: [PATCH] Do not show account selection dialog, if there is only 1 account --- app/src/main/AndroidManifest.xml | 2 ++ .../store/view/ui/splash/SplashFragment.kt | 25 ++++++++++++++----- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e4a34b0fa..e0f150b58 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,8 @@ + + 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 fbc7a0979..0ed6598f1 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 @@ -29,14 +29,15 @@ import android.os.Looper import android.util.Base64 import android.util.Log import android.view.View -import androidx.core.view.isVisible import androidx.activity.result.contract.ActivityResultContracts import androidx.core.os.bundleOf +import androidx.core.view.isVisible import androidx.fragment.app.activityViewModels import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import com.aurora.extensions.hide import com.aurora.extensions.isMAndAbove +import com.aurora.extensions.runOnUiThread import com.aurora.extensions.show import com.aurora.gplayapi.helpers.AuthHelper import com.aurora.store.R @@ -69,7 +70,7 @@ class SplashFragment : BaseFragment() { if (!accountName.isNullOrBlank()) { requestAuthTokenForGoogle(accountName) } else { - findNavController().navigate(R.id.googleFragment) + runOnUiThread { resetActions() } } } @@ -204,6 +205,14 @@ class SplashFragment : BaseFragment() { if (viewModel.authState.value != AuthState.Fetching) { binding.btnGoogle.updateProgress(true) if (isMAndAbove && PackageUtil.hasSupportedMicroG(requireContext())) { + val accounts = fetchGoogleAccounts() + + // Do not show selection dialog if there is only one account available + if (accounts.isNotEmpty() && accounts.size == 1) { + requestAuthTokenForGoogle(accounts.first().name) + return@addOnClickListener + } + Log.i(TAG, "Found supported microG, trying to request credentials") val accountIntent = AccountManager.newChooseAccountIntent( null, @@ -218,7 +227,6 @@ class SplashFragment : BaseFragment() { } else { findNavController().navigate(R.id.googleFragment) } - } } } @@ -236,7 +244,8 @@ class SplashFragment : BaseFragment() { } private fun navigateToDefaultTab() { - val defaultDestination = Preferences.getInteger(requireContext(), PREFERENCE_DEFAULT_SELECTED_TAB) + val defaultDestination = + Preferences.getInteger(requireContext(), PREFERENCE_DEFAULT_SELECTED_TAB) val directions = when (requireArguments().getInt("destinationId", defaultDestination)) { R.id.updatesFragment -> { @@ -264,6 +273,11 @@ class SplashFragment : BaseFragment() { } } + private fun fetchGoogleAccounts(): Array { + val accountManager = AccountManager.get(requireContext()) + return accountManager.getAccountsByType(GOOGLE_ACCOUNT_TYPE) + } + private fun requestAuthTokenForGoogle(accountName: String) { try { AccountManager.get(requireContext()) @@ -278,7 +292,7 @@ class SplashFragment : BaseFragment() { { viewModel.buildGoogleAuthData( accountName, - it.result.getString(AccountManager.KEY_AUTHTOKEN)!!, + it.result.getString(AccountManager.KEY_AUTHTOKEN) ?: "", AuthHelper.Token.AUTH ) }, @@ -286,7 +300,6 @@ class SplashFragment : BaseFragment() { ) } catch (exception: Exception) { Log.e(TAG, "Failed to get authToken for Google login") - findNavController().navigate(R.id.googleFragment) } } }