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 fabb01926cf74f2272ea27e58388e73845bd028f..dfcdc6cf762f7a9356062328e91460053c01e926 100644 --- a/app/src/main/java/foundation/e/apps/data/DownloadManager.kt +++ b/app/src/main/java/foundation/e/apps/data/DownloadManager.kt @@ -173,8 +173,16 @@ class DownloadManager @Inject constructor( } } - fun isDownloadSuccessful(downloadId: Long): Boolean { - return getDownloadStatus(downloadId) == DownloadManager.STATUS_SUCCESSFUL + /** + * 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 + return Pair(isSuccessFul, downloadStatus) } fun hasDownloadFailed(downloadId: Long): Boolean { 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 a9e28c0d62e5d6181e74925cd875f12143e8e34c..8744d01df3964066fe9d3557946072bec0a69f44 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(999) - .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/install/download/DownloadManagerUtils.kt b/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt index 1438ad18f5a4e1b96ea9ed0cf0e961102c46a357..a5b51209c17eeae8f87ac9be588cd561374a4c81 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,18 @@ 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 download status code is unknown (-1), consider installation is failed. + if (isDownloadSuccessful.second == -1) { + handleDownloadFailed(fusedDownload, downloadId) + } + + return isDownloadSuccessful.first && areAllFilesDownloaded( + numberOfDownloadedItems, fusedDownload + ) && checkCleanApkSignatureOK(fusedDownload) + + } private fun areAllFilesDownloaded( numberOfDownloadedItems: Int, 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 f9c0c72ce71792d10f4b75db6dfc60ae15409121..40572c6a3897711eab25dd8bc860bcf81d06727d 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 0c69177bff8f393764f2fb1fb583c132f04872db..1c111d5e427d87e478f393d39ff15e736adae8f9 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 2dbbfe71a4d3626cc7b18bfaca274aee2066f728..faa4373125fdf76ee3d6641c3329111c5339ad88 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) + } } } }