From 1254b2d46559b5496b332ca39c270a38192e6368 Mon Sep 17 00:00:00 2001 From: dev-12 Date: Thu, 13 Nov 2025 12:15:41 +0530 Subject: [PATCH] Avoid retrieving the purchase status of paid apps while in anonymous mode. - It causes ui to flicker when prices are loaded on every view of app. - Anonymous users are not allowed to purchase apps anyway. --- .../e/apps/data/playstore/PlayStoreRepository.kt | 9 ++++----- .../java/foundation/e/apps/ui/AppInfoFetchViewModel.kt | 2 ++ .../e/apps/ui/application/ApplicationFragment.kt | 10 +++++++++- .../ui/applicationlist/ApplicationListRVAdapter.kt | 6 ++++++ 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepository.kt b/app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepository.kt index 2e0f40848..69986c036 100644 --- a/app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepository.kt +++ b/app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepository.kt @@ -159,8 +159,7 @@ class PlayStoreRepository @Inject constructor( withContext(Dispatchers.IO) { var appDetails: List = getAppDetailsHelper().getAppByPackageName(packageNames) - if (!isEmulator() && appDetails.any { it.versionCode == 0L } - && authenticatorRepository.getGPlayAuthOrThrow().isAnonymous) { + if (!isEmulator() && appDetails.any { it.versionCode == 0L } && isAnonymousUser()) { // Google Play returns limited result ( i.e. version code being 0) with a stale token, // so we need to refresh authentication to get a new token. Timber.i("Version code is 0.") @@ -182,9 +181,7 @@ class PlayStoreRepository @Inject constructor( withContext(Dispatchers.IO) { var appDetails: GplayApp = getAppDetailsHelper().getAppByPackageName(packageName) - if (!isEmulator() && appDetails.versionCode == 0L - && authenticatorRepository.getGPlayAuthOrThrow().isAnonymous - ) { + if (!isEmulator() && appDetails.versionCode == 0L && isAnonymousUser()) { // Google Play returns limited result ( i.e. version code being 0) with a stale token, // so we need to refresh authentication to get a new token. Timber.i("Version code is 0 for ${appDetails.packageName}.") @@ -281,6 +278,8 @@ class PlayStoreRepository @Inject constructor( buildList { addAll(purchaseHelper.purchase(idOrPackageName, version, offer)) } } + fun isAnonymousUser() = authenticatorRepository.getGPlayAuthOrThrow().isAnonymous + suspend fun getOnDemandModule( packageName: String, moduleName: String, diff --git a/app/src/main/java/foundation/e/apps/ui/AppInfoFetchViewModel.kt b/app/src/main/java/foundation/e/apps/ui/AppInfoFetchViewModel.kt index 1630c4d67..168bb76e0 100644 --- a/app/src/main/java/foundation/e/apps/ui/AppInfoFetchViewModel.kt +++ b/app/src/main/java/foundation/e/apps/ui/AppInfoFetchViewModel.kt @@ -27,6 +27,8 @@ class AppInfoFetchViewModel @Inject constructor( emit(authorName) } + fun isAnonymousUser() = gPlayRepository.isAnonymousUser() + fun isAppPurchased(app: Application): LiveData { return liveData { try { diff --git a/app/src/main/java/foundation/e/apps/ui/application/ApplicationFragment.kt b/app/src/main/java/foundation/e/apps/ui/application/ApplicationFragment.kt index c9baec7e2..c12a8cc58 100644 --- a/app/src/main/java/foundation/e/apps/ui/application/ApplicationFragment.kt +++ b/app/src/main/java/foundation/e/apps/ui/application/ApplicationFragment.kt @@ -86,7 +86,6 @@ import timber.log.Timber import java.util.Locale import javax.inject.Inject - @AndroidEntryPoint class ApplicationFragment : TimeoutFragment(R.layout.fragment_application) { @@ -228,6 +227,15 @@ class ApplicationFragment : TimeoutFragment(R.layout.fragment_application) { progressBarInstall.visibility = View.VISIBLE } + if (appInfoFetchViewModel.isAnonymousUser() && !application.isFree) { + handleInstallStatus(Status.UNAVAILABLE, binding.root, application) + binding.downloadInclude.apply { + progressBarInstall.visibility = View.GONE + installButton.text = application.price + } + return + } + if (!isFreeOrAlreadyPurchased(application)) { appInfoFetchViewModel.isAppPurchased(application).observe(viewLifecycleOwner) { binding.downloadInclude.progressBarInstall.visibility = View.GONE diff --git a/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListRVAdapter.kt b/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListRVAdapter.kt index 31994463b..4dee4b59c 100644 --- a/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListRVAdapter.kt +++ b/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListRVAdapter.kt @@ -441,6 +441,12 @@ class ApplicationListRVAdapter( materialButton.disableInstallButton() materialButton.text = "" applicationListItemBinding.progressBarInstall.visibility = View.VISIBLE + if (appInfoFetchViewModel.isAnonymousUser()) { + materialButton.enableInstallButton() + applicationListItemBinding.progressBarInstall.visibility = View.GONE + materialButton.text = searchApp.price + return + } holder.isPurchasedLiveData = appInfoFetchViewModel.isAppPurchased(searchApp) if (lifecycleOwner == null) { return -- GitLab