diff --git a/app/src/main/java/foundation/e/apps/application/ApplicationFragment.kt b/app/src/main/java/foundation/e/apps/application/ApplicationFragment.kt index d4c67552c60677538840c456976657f4678b316a..555a107c5f38747480aa483193bcbf6b0489180f 100644 --- a/app/src/main/java/foundation/e/apps/application/ApplicationFragment.kt +++ b/app/src/main/java/foundation/e/apps/application/ApplicationFragment.kt @@ -381,7 +381,7 @@ class ApplicationFragment : TimeoutFragment(R.layout.fragment_application) { appSize ) Status.UNAVAILABLE -> handleUnavaiable(installButton, fusedApp, downloadPB, appSize) - Status.QUEUED, Status.AWAITING -> handleQueued( + Status.QUEUED, Status.AWAITING, Status.DOWNLOADED -> handleQueued( installButton, fusedApp, downloadPB, diff --git a/app/src/main/java/foundation/e/apps/applicationlist/model/ApplicationListRVAdapter.kt b/app/src/main/java/foundation/e/apps/applicationlist/model/ApplicationListRVAdapter.kt index da23c7326d8fbc78a4441da2ae26c40f0a143b6f..737341f4e31974087674c03fdd89341708f6874a 100644 --- a/app/src/main/java/foundation/e/apps/applicationlist/model/ApplicationListRVAdapter.kt +++ b/app/src/main/java/foundation/e/apps/applicationlist/model/ApplicationListRVAdapter.kt @@ -219,7 +219,7 @@ class ApplicationListRVAdapter( Status.UNAVAILABLE -> { handleUnavailable(view, searchApp, holder) } - Status.QUEUED, Status.AWAITING, Status.DOWNLOADING -> { + Status.QUEUED, Status.AWAITING, Status.DOWNLOADING, Status.DOWNLOADED -> { handleDownloading(view, searchApp) } Status.INSTALLING, Status.UNINSTALLING -> { diff --git a/app/src/main/java/foundation/e/apps/home/model/HomeChildRVAdapter.kt b/app/src/main/java/foundation/e/apps/home/model/HomeChildRVAdapter.kt index d9b7aa5d77cd44798c8302d401982d1fd6419891..a7de334ff816d8ab0b49d346d63b29d1e422bf0b 100644 --- a/app/src/main/java/foundation/e/apps/home/model/HomeChildRVAdapter.kt +++ b/app/src/main/java/foundation/e/apps/home/model/HomeChildRVAdapter.kt @@ -110,7 +110,7 @@ class HomeChildRVAdapter( Status.UNAVAILABLE -> { handleUnavailable(homeApp, holder, view) } - Status.QUEUED, Status.AWAITING, Status.DOWNLOADING -> { + Status.QUEUED, Status.AWAITING, Status.DOWNLOADING, Status.DOWNLOADED -> { handleQueued(view, homeApp) } Status.INSTALLING, Status.UNINSTALLING -> { diff --git a/app/src/main/java/foundation/e/apps/manager/fused/FusedManagerImpl.kt b/app/src/main/java/foundation/e/apps/manager/fused/FusedManagerImpl.kt index 64e62cc7d2473357b14b4e669d83aa08df2d5cac..cc4780ba8ad8d6aebcd2bbd0899b64b378fa63b1 100644 --- a/app/src/main/java/foundation/e/apps/manager/fused/FusedManagerImpl.kt +++ b/app/src/main/java/foundation/e/apps/manager/fused/FusedManagerImpl.kt @@ -37,7 +37,6 @@ import foundation.e.apps.utils.enums.Status import foundation.e.apps.utils.enums.Type import foundation.e.apps.utils.modules.PWAManagerModule import kotlinx.coroutines.DelicateCoroutinesApi -import kotlinx.coroutines.delay import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import timber.log.Timber @@ -92,18 +91,14 @@ class FusedManagerImpl @Inject constructor( suspend fun updateDownloadStatus(fusedDownload: FusedDownload, status: Status) { if (status == Status.INSTALLED) { fusedDownload.status = status - databaseRepository.updateDownload(fusedDownload) DownloadManagerBR.downloadedList.clear() - delay(100) flushOldDownload(fusedDownload.packageName) databaseRepository.deleteDownload(fusedDownload) } else if (status == Status.INSTALLING) { fusedDownload.downloadIdMap.all { true } fusedDownload.status = status databaseRepository.updateDownload(fusedDownload) - delay(100) installApp(fusedDownload) - delay(100) } } @@ -141,7 +136,6 @@ class FusedManagerImpl @Inject constructor( Timber.d("Unsupported application type!") fusedDownload.status = Status.INSTALLATION_ISSUE databaseRepository.updateDownload(fusedDownload) - delay(100) } } } @@ -157,7 +151,6 @@ class FusedManagerImpl @Inject constructor( // Reset the status before deleting download updateDownloadStatus(fusedDownload, fusedDownload.orgStatus) - delay(100) databaseRepository.deleteDownload(fusedDownload) flushOldDownload(fusedDownload.packageName) @@ -199,7 +192,6 @@ class FusedManagerImpl @Inject constructor( fusedDownload.status = Status.DOWNLOADING databaseRepository.updateDownload(fusedDownload) DownloadProgressLD.setDownloadId(-1) - delay(100) fusedDownload.downloadURLList.forEach { count += 1 val packagePath: File = if (fusedDownload.files.isNotEmpty()) { diff --git a/app/src/main/java/foundation/e/apps/manager/pkg/InstallerService.kt b/app/src/main/java/foundation/e/apps/manager/pkg/InstallerService.kt index 23a5e2f741db6456c43b85f0dfc74ac6bc097692..8871caf04c08ed71c1f78e5e81fc74fdd934d758 100644 --- a/app/src/main/java/foundation/e/apps/manager/pkg/InstallerService.kt +++ b/app/src/main/java/foundation/e/apps/manager/pkg/InstallerService.kt @@ -56,8 +56,17 @@ class InstallerService : Service() { @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int { val status = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -69) - val packageName = intent.getStringExtra(PackageInstaller.EXTRA_PACKAGE_NAME) + var packageName = intent.getStringExtra(PackageInstaller.EXTRA_PACKAGE_NAME) val extra = intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE) + + /** + There is some error case where package name from PackageInstaller remains + empty (example: INSTALL_PARSE_FAILED_NOT_APK). + the packageName from PkgManagerModule will be used in this error case. + */ + val packageNamePackageManagerModule = intent.getStringExtra(PkgManagerModule.PACKAGE_NAME) + + packageName = packageName ?: packageNamePackageManagerModule postStatus(status, packageName, extra) stopSelf() return START_NOT_STICKY diff --git a/app/src/main/java/foundation/e/apps/manager/pkg/PkgManagerModule.kt b/app/src/main/java/foundation/e/apps/manager/pkg/PkgManagerModule.kt index c501109e0819bb8924973c7d80ad6341f884e5c3..a743d7496c2f17bf15659c8bb194e336e1a49874 100644 --- a/app/src/main/java/foundation/e/apps/manager/pkg/PkgManagerModule.kt +++ b/app/src/main/java/foundation/e/apps/manager/pkg/PkgManagerModule.kt @@ -48,6 +48,7 @@ class PkgManagerModule @Inject constructor( ) { companion object { const val ERROR_PACKAGE_INSTALL = "ERROR_PACKAGE_INSTALL" + const val PACKAGE_NAME = "packageName" private const val TAG = "PkgManagerModule" } private val packageManager = context.packageManager @@ -159,6 +160,8 @@ class PkgManagerModule @Inject constructor( } val callBackIntent = Intent(context, InstallerService::class.java) + callBackIntent.putExtra(PACKAGE_NAME, packageName) + val flags = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE else PendingIntent.FLAG_UPDATE_CURRENT