From 1442b301306ca9f8e6cdde82b10f37ba1f130250 Mon Sep 17 00:00:00 2001 From: Hasib Prince Date: Sat, 6 Jan 2024 07:23:10 +0600 Subject: [PATCH 1/4] fixed: nullpointerException from sentry --- .../java/foundation/e/apps/ui/MainActivityViewModel.kt | 6 +++++- .../e/apps/ui/applicationlist/ApplicationListRVAdapter.kt | 8 +++----- .../main/java/foundation/e/apps/ui/home/HomeFragment.kt | 5 +++-- .../foundation/e/apps/ui/home/model/HomeChildRVAdapter.kt | 8 +++----- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt b/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt index ff5070959..cdac20a9f 100644 --- a/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt +++ b/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt @@ -299,7 +299,11 @@ class MainActivityViewModel @Inject constructor( } fun getLaunchIntentForPackageName(packageName: String): Intent? { - return appLoungePackageManager.getLaunchIntent(packageName) + return try { + appLoungePackageManager.getLaunchIntent(packageName) + } catch (e: Exception) { + null + } } fun launchPwa(application: Application) { 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 f9c0c72ce..40572c6a3 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 @@ -519,11 +519,9 @@ class ApplicationListRVAdapter( if (searchApp.is_pwa) { mainActivityViewModel.launchPwa(searchApp) } else { - context.startActivity( - mainActivityViewModel.getLaunchIntentForPackageName( - searchApp.package_name - ) - ) + mainActivityViewModel.getLaunchIntentForPackageName(searchApp.package_name)?.let { + context.startActivity(it) + } } } } diff --git a/app/src/main/java/foundation/e/apps/ui/home/HomeFragment.kt b/app/src/main/java/foundation/e/apps/ui/home/HomeFragment.kt index 0c69177bf..1c111d5e4 100644 --- a/app/src/main/java/foundation/e/apps/ui/home/HomeFragment.kt +++ b/app/src/main/java/foundation/e/apps/ui/home/HomeFragment.kt @@ -204,8 +204,9 @@ class HomeFragment : TimeoutFragment(R.layout.fragment_home), ApplicationInstall viewHolder?.let { parentViewHolder -> val childRV = (parentViewHolder as HomeParentRVAdapter.ViewHolder).binding.childRV - val adapter = childRV.adapter as HomeChildRVAdapter - findDownloadingItemsToShowProgress(adapter, downloadProgress, childRV) + (childRV.adapter as HomeChildRVAdapter?)?.let { + findDownloadingItemsToShowProgress(it, downloadProgress, childRV) + } } } } diff --git a/app/src/main/java/foundation/e/apps/ui/home/model/HomeChildRVAdapter.kt b/app/src/main/java/foundation/e/apps/ui/home/model/HomeChildRVAdapter.kt index 2dbbfe71a..faa437312 100644 --- a/app/src/main/java/foundation/e/apps/ui/home/model/HomeChildRVAdapter.kt +++ b/app/src/main/java/foundation/e/apps/ui/home/model/HomeChildRVAdapter.kt @@ -237,11 +237,9 @@ class HomeChildRVAdapter( if (homeApp.is_pwa) { mainActivityViewModel.launchPwa(homeApp) } else { - context.startActivity( - mainActivityViewModel.getLaunchIntentForPackageName( - homeApp.package_name - ) - ) + mainActivityViewModel.getLaunchIntentForPackageName(homeApp.package_name)?.let { + context.startActivity(it) + } } } } -- GitLab From ee6a8faf4475ec87f50a9417d41152e13a7d1319 Mon Sep 17 00:00:00 2001 From: Hasib Prince Date: Wed, 10 Jan 2024 22:50:37 +0600 Subject: [PATCH 2/4] handled unknown download status --- .../java/foundation/e/apps/data/DownloadManager.kt | 9 ++++++--- .../e/apps/data/cleanapk/RetrofitModule.kt | 2 +- .../apps/install/download/DownloadManagerUtils.kt | 14 +++++++++++--- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/data/DownloadManager.kt b/app/src/main/java/foundation/e/apps/data/DownloadManager.kt index fabb01926..637420c24 100644 --- a/app/src/main/java/foundation/e/apps/data/DownloadManager.kt +++ b/app/src/main/java/foundation/e/apps/data/DownloadManager.kt @@ -173,12 +173,15 @@ class DownloadManager @Inject constructor( } } - fun isDownloadSuccessful(downloadId: Long): Boolean { - return getDownloadStatus(downloadId) == DownloadManager.STATUS_SUCCESSFUL + fun isDownloadSuccessful(downloadId: Long): Pair { + val downloadStatus = getDownloadStatus(downloadId) + val isSuccessFul = downloadStatus == DownloadManager.STATUS_SUCCESSFUL + return Pair(isSuccessFul, downloadStatus) } fun hasDownloadFailed(downloadId: Long): Boolean { - return getDownloadStatus(downloadId) == DownloadManager.STATUS_FAILED + val downloadStatus = getDownloadStatus(downloadId) + return downloadStatus == DownloadManager.STATUS_FAILED } fun getSizeRequired(downloadId: Long): Long { diff --git a/app/src/main/java/foundation/e/apps/data/cleanapk/RetrofitModule.kt b/app/src/main/java/foundation/e/apps/data/cleanapk/RetrofitModule.kt index a9e28c0d6..1b52b263c 100644 --- a/app/src/main/java/foundation/e/apps/data/cleanapk/RetrofitModule.kt +++ b/app/src/main/java/foundation/e/apps/data/cleanapk/RetrofitModule.kt @@ -185,7 +185,7 @@ object RetrofitModule { ): Response { Timber.e("buildErrorResponse: ${e.localizedMessage}") return Response.Builder() - .code(999) + .code(403) .message(e.localizedMessage ?: "Unknown error") .request(chain.request()) .protocol(Protocol.HTTP_1_1) diff --git a/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt b/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt index 1438ad18f..d3f1dee3e 100644 --- a/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt +++ b/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt @@ -106,9 +106,17 @@ class DownloadManagerUtils @Inject constructor( numberOfDownloadedItems: Int, fusedDownload: FusedDownload, downloadId: Long - ) = downloadManager.isDownloadSuccessful(downloadId) && areAllFilesDownloaded( - numberOfDownloadedItems, fusedDownload - ) && checkCleanApkSignatureOK(fusedDownload) + ): Boolean { + val isDownloadSuccessful = downloadManager.isDownloadSuccessful(downloadId) + if (isDownloadSuccessful.second == -1) { + handleDownloadFailed(fusedDownload, downloadId) + } + + return isDownloadSuccessful.first && areAllFilesDownloaded( + numberOfDownloadedItems, fusedDownload + ) && checkCleanApkSignatureOK(fusedDownload) + + } private fun areAllFilesDownloaded( numberOfDownloadedItems: Int, -- GitLab From cd029e4f68aa0407dceef96cb83b4b01157f9d59 Mon Sep 17 00:00:00 2001 From: Hasib Prince Date: Thu, 11 Jan 2024 14:43:53 +0600 Subject: [PATCH 3/4] removed redundant exception handling --- .../e/apps/data/cleanapk/RetrofitModule.kt | 23 ++----------------- .../e/apps/ui/MainActivityViewModel.kt | 6 +---- 2 files changed, 3 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/data/cleanapk/RetrofitModule.kt b/app/src/main/java/foundation/e/apps/data/cleanapk/RetrofitModule.kt index 1b52b263c..8744d01df 100644 --- a/app/src/main/java/foundation/e/apps/data/cleanapk/RetrofitModule.kt +++ b/app/src/main/java/foundation/e/apps/data/cleanapk/RetrofitModule.kt @@ -169,28 +169,9 @@ object RetrofitModule { "User-Agent", "Dalvik/2.1.0 (Linux; U; Android ${Build.VERSION.RELEASE};)" ).header("Accept-Language", Locale.getDefault().language) - try { - return@Interceptor chain.proceed(builder.build()) - } catch (e: ConnectException) { - return@Interceptor buildErrorResponse(e, chain) - } catch (e: Exception) { - return@Interceptor buildErrorResponse(e, chain) - } - } - } - private fun buildErrorResponse( - e: Exception, - chain: Interceptor.Chain - ): Response { - Timber.e("buildErrorResponse: ${e.localizedMessage}") - return Response.Builder() - .code(403) - .message(e.localizedMessage ?: "Unknown error") - .request(chain.request()) - .protocol(Protocol.HTTP_1_1) - .body("{}".toResponseBody("application/json; charset=utf-8".toMediaTypeOrNull())) - .build() + return@Interceptor chain.proceed(builder.build()) + } } @Singleton diff --git a/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt b/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt index cdac20a9f..ff5070959 100644 --- a/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt +++ b/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt @@ -299,11 +299,7 @@ class MainActivityViewModel @Inject constructor( } fun getLaunchIntentForPackageName(packageName: String): Intent? { - return try { - appLoungePackageManager.getLaunchIntent(packageName) - } catch (e: Exception) { - null - } + return appLoungePackageManager.getLaunchIntent(packageName) } fun launchPwa(application: Application) { -- GitLab From fba5f984358eb486fb53c583cf754bec4c9a606b Mon Sep 17 00:00:00 2001 From: Hasib Prince Date: Thu, 11 Jan 2024 15:08:36 +0600 Subject: [PATCH 4/4] documentation is added --- .../main/java/foundation/e/apps/data/DownloadManager.kt | 9 +++++++-- .../e/apps/install/download/DownloadManagerUtils.kt | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/data/DownloadManager.kt b/app/src/main/java/foundation/e/apps/data/DownloadManager.kt index 637420c24..dfcdc6cf7 100644 --- a/app/src/main/java/foundation/e/apps/data/DownloadManager.kt +++ b/app/src/main/java/foundation/e/apps/data/DownloadManager.kt @@ -173,6 +173,12 @@ class DownloadManager @Inject constructor( } } + /** + * Checks download is successful or not. + * @param downloadId is the id of a particular download request + * @return Pair, Where first represents success/failure, + * second represents status. + */ fun isDownloadSuccessful(downloadId: Long): Pair { val downloadStatus = getDownloadStatus(downloadId) val isSuccessFul = downloadStatus == DownloadManager.STATUS_SUCCESSFUL @@ -180,8 +186,7 @@ class DownloadManager @Inject constructor( } fun hasDownloadFailed(downloadId: Long): Boolean { - val downloadStatus = getDownloadStatus(downloadId) - return downloadStatus == DownloadManager.STATUS_FAILED + return getDownloadStatus(downloadId) == DownloadManager.STATUS_FAILED } fun getSizeRequired(downloadId: Long): Long { diff --git a/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt b/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt index d3f1dee3e..a5b51209c 100644 --- a/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt +++ b/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt @@ -108,6 +108,7 @@ class DownloadManagerUtils @Inject constructor( downloadId: Long ): Boolean { val isDownloadSuccessful = downloadManager.isDownloadSuccessful(downloadId) + // if download status code is unknown (-1), consider installation is failed. if (isDownloadSuccessful.second == -1) { handleDownloadFailed(fusedDownload, downloadId) } -- GitLab