From 861ce3928a2fddf84d1d3fe592349797169ed9f0 Mon Sep 17 00:00:00 2001 From: Fahim Masud Choudhury Date: Fri, 16 May 2025 11:51:25 +0600 Subject: [PATCH 1/2] refactor: improve UX for unavailable CleanAPK app Improved exception handling so that correct message is displayed if a CleanAPK app is not available. Improved code readability. --- .../ui/application/ApplicationViewModel.kt | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/ui/application/ApplicationViewModel.kt b/app/src/main/java/foundation/e/apps/ui/application/ApplicationViewModel.kt index 4bcdbc11b..2e0684cd5 100644 --- a/app/src/main/java/foundation/e/apps/ui/application/ApplicationViewModel.kt +++ b/app/src/main/java/foundation/e/apps/ui/application/ApplicationViewModel.kt @@ -48,6 +48,7 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch +import timber.log.Timber import javax.inject.Inject @HiltViewModel @@ -77,7 +78,7 @@ class ApplicationViewModel @Inject constructor( ) { if (params.isFdroidDeepLink) { - getCleanapkAppDetails(params.packageName) + getCleanApkAppDetails(params.packageName) return } @@ -183,18 +184,23 @@ class ApplicationViewModel @Inject constructor( * Dedicated method to get app details from cleanapk using package name. * Issue: https://gitlab.e.foundation/e/backlog/-/issues/5509 */ - fun getCleanapkAppDetails(packageName: String) { + private fun getCleanApkAppDetails(packageName: String) { viewModelScope.launch { try { - applicationRepository.getApplicationDetails(listOf(packageName), Source.OPEN_SOURCE).run { - if (this.first[0].package_name.isBlank()) { - _errorMessageLiveData.postValue(R.string.app_not_found) - } else { - applicationLiveData.postValue(Pair(this.first[0], this.second)) - updateShareVisibilityState(first[0].shareUri.toString()) - } + val (apps, status) = applicationRepository.getApplicationDetails( + listOf(packageName), Source.OPEN_SOURCE + ) + + if (apps.isEmpty() || apps.first().package_name.isBlank()) { + _errorMessageLiveData.postValue(R.string.app_not_found) + return@launch } + + val app = apps.first() + applicationLiveData.postValue(Pair(app, status)) + updateShareVisibilityState(app.shareUri.toString()) } catch (e: Exception) { + Timber.w(e) _errorMessageLiveData.postValue(R.string.unknown_error) } } -- GitLab From 9ffee034d34b36885dfb5967c2fa44087233fbb8 Mon Sep 17 00:00:00 2001 From: Fahim Masud Choudhury Date: Fri, 16 May 2025 12:23:32 +0600 Subject: [PATCH 2/2] refactor: improve code readability --- .../foundation/e/apps/ui/application/ApplicationViewModel.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/ui/application/ApplicationViewModel.kt b/app/src/main/java/foundation/e/apps/ui/application/ApplicationViewModel.kt index 2e0684cd5..07090c95c 100644 --- a/app/src/main/java/foundation/e/apps/ui/application/ApplicationViewModel.kt +++ b/app/src/main/java/foundation/e/apps/ui/application/ApplicationViewModel.kt @@ -191,12 +191,12 @@ class ApplicationViewModel @Inject constructor( listOf(packageName), Source.OPEN_SOURCE ) - if (apps.isEmpty() || apps.first().package_name.isBlank()) { + val app = apps.firstOrNull() + if (app == null || app.package_name.isBlank()) { _errorMessageLiveData.postValue(R.string.app_not_found) return@launch } - val app = apps.first() applicationLiveData.postValue(Pair(app, status)) updateShareVisibilityState(app.shareUri.toString()) } catch (e: Exception) { -- GitLab