Loading app/src/main/java/foundation/e/apps/api/DownloadManager.kt +6 −2 Original line number Diff line number Diff line Loading @@ -139,7 +139,11 @@ class DownloadManager @Inject constructor( } } fun getDownloadStatus(downloadId: Long): Int { fun isDownloadSuccessful(downloadId: Long): Boolean { return getDownloadStatus(downloadId) == DownloadManager.STATUS_SUCCESSFUL } private fun getDownloadStatus(downloadId: Long): Int { try { downloadManager.query(downloadManagerQuery.setFilterById(downloadId)) .use { cursor -> Loading @@ -151,7 +155,7 @@ class DownloadManager @Inject constructor( } } } catch (e: Exception) { e.printStackTrace() Timber.e(e) } return DownloadManager.STATUS_FAILED } Loading app/src/main/java/foundation/e/apps/api/cleanapk/ApkSignatureManager.kt +2 −1 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import org.bouncycastle.openpgp.PGPUtil import org.bouncycastle.openpgp.jcajce.JcaPGPObjectFactory import org.bouncycastle.openpgp.operator.bc.BcPGPContentVerifierBuilderProvider import org.bouncycastle.openpgp.operator.jcajce.JcaKeyFingerprintCalculator import timber.log.Timber import java.io.BufferedInputStream import java.io.FileInputStream import java.io.InputStream Loading @@ -42,7 +43,7 @@ object ApkSignatureManager { context.assets.open("f-droid.org-signing-key.gpg") ) } catch (e: Exception) { e.printStackTrace() Timber.e(e) } return false } Loading app/src/main/java/foundation/e/apps/manager/download/DownloadManagerUtils.kt +10 −5 Original line number Diff line number Diff line Loading @@ -34,7 +34,6 @@ import kotlinx.coroutines.sync.withLock import timber.log.Timber import javax.inject.Inject import javax.inject.Singleton import android.app.DownloadManager as androidDownloadManager @Singleton class DownloadManagerUtils @Inject constructor( Loading Loading @@ -79,10 +78,16 @@ class DownloadManagerUtils @Inject constructor( numberOfDownloadedItems: Int, fusedDownload: FusedDownload, downloadId: Long ) = downloadManager.getDownloadStatus(downloadId) == androidDownloadManager.STATUS_SUCCESSFUL && numberOfDownloadedItems == fusedDownload.downloadIdMap.size && checkCleanApkSignatureOK( ) = downloadManager.isDownloadSuccessful(downloadId) && areAllFilesDownloaded( numberOfDownloadedItems, fusedDownload ) ) && checkCleanApkSignatureOK(fusedDownload) private fun areAllFilesDownloaded( numberOfDownloadedItems: Int, fusedDownload: FusedDownload ) = numberOfDownloadedItems == fusedDownload.downloadIdMap.size private suspend fun updateDownloadIdMap( fusedDownload: FusedDownload, Loading app/src/main/java/foundation/e/apps/manager/fused/FusedManagerRepository.kt +1 −2 Original line number Diff line number Diff line Loading @@ -11,7 +11,6 @@ import foundation.e.apps.manager.database.fusedDownload.FusedDownload import foundation.e.apps.manager.download.data.DownloadProgress import foundation.e.apps.manager.workmanager.InstallWorkManager import foundation.e.apps.utils.enums.Status import foundation.e.apps.utils.modules.CommonUtilsFunctions import kotlinx.coroutines.flow.Flow import javax.inject.Inject import javax.inject.Singleton Loading @@ -36,7 +35,7 @@ class FusedManagerRepository @Inject constructor( } suspend fun addDownload(fusedDownload: FusedDownload) { if (CommonUtilsFunctions.checkWorkIsAlreadyAvailable(InstallWorkManager.context, fusedDownload.id)) { if (InstallWorkManager.checkWorkIsAlreadyAvailable(fusedDownload.id)) { return } Loading app/src/main/java/foundation/e/apps/manager/workmanager/InstallWorkManager.kt +15 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ import androidx.work.ExistingWorkPolicy import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkManager import foundation.e.apps.manager.database.fusedDownload.FusedDownload import java.lang.Exception object InstallWorkManager { const val INSTALL_WORK_NAME = "APP_LOUNGE_INSTALL_APP" Loading @@ -27,4 +28,18 @@ object InstallWorkManager { fun cancelWork(tag: String) { WorkManager.getInstance(context).cancelAllWorkByTag(tag) } fun checkWorkIsAlreadyAvailable(tag: String): Boolean { val works = WorkManager.getInstance(context).getWorkInfosByTag(tag) try { works.get().forEach { if (it.tags.contains(tag) && !it.state.isFinished) { return true } } } catch (e: Exception) { e.printStackTrace() } return false } } Loading
app/src/main/java/foundation/e/apps/api/DownloadManager.kt +6 −2 Original line number Diff line number Diff line Loading @@ -139,7 +139,11 @@ class DownloadManager @Inject constructor( } } fun getDownloadStatus(downloadId: Long): Int { fun isDownloadSuccessful(downloadId: Long): Boolean { return getDownloadStatus(downloadId) == DownloadManager.STATUS_SUCCESSFUL } private fun getDownloadStatus(downloadId: Long): Int { try { downloadManager.query(downloadManagerQuery.setFilterById(downloadId)) .use { cursor -> Loading @@ -151,7 +155,7 @@ class DownloadManager @Inject constructor( } } } catch (e: Exception) { e.printStackTrace() Timber.e(e) } return DownloadManager.STATUS_FAILED } Loading
app/src/main/java/foundation/e/apps/api/cleanapk/ApkSignatureManager.kt +2 −1 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import org.bouncycastle.openpgp.PGPUtil import org.bouncycastle.openpgp.jcajce.JcaPGPObjectFactory import org.bouncycastle.openpgp.operator.bc.BcPGPContentVerifierBuilderProvider import org.bouncycastle.openpgp.operator.jcajce.JcaKeyFingerprintCalculator import timber.log.Timber import java.io.BufferedInputStream import java.io.FileInputStream import java.io.InputStream Loading @@ -42,7 +43,7 @@ object ApkSignatureManager { context.assets.open("f-droid.org-signing-key.gpg") ) } catch (e: Exception) { e.printStackTrace() Timber.e(e) } return false } Loading
app/src/main/java/foundation/e/apps/manager/download/DownloadManagerUtils.kt +10 −5 Original line number Diff line number Diff line Loading @@ -34,7 +34,6 @@ import kotlinx.coroutines.sync.withLock import timber.log.Timber import javax.inject.Inject import javax.inject.Singleton import android.app.DownloadManager as androidDownloadManager @Singleton class DownloadManagerUtils @Inject constructor( Loading Loading @@ -79,10 +78,16 @@ class DownloadManagerUtils @Inject constructor( numberOfDownloadedItems: Int, fusedDownload: FusedDownload, downloadId: Long ) = downloadManager.getDownloadStatus(downloadId) == androidDownloadManager.STATUS_SUCCESSFUL && numberOfDownloadedItems == fusedDownload.downloadIdMap.size && checkCleanApkSignatureOK( ) = downloadManager.isDownloadSuccessful(downloadId) && areAllFilesDownloaded( numberOfDownloadedItems, fusedDownload ) ) && checkCleanApkSignatureOK(fusedDownload) private fun areAllFilesDownloaded( numberOfDownloadedItems: Int, fusedDownload: FusedDownload ) = numberOfDownloadedItems == fusedDownload.downloadIdMap.size private suspend fun updateDownloadIdMap( fusedDownload: FusedDownload, Loading
app/src/main/java/foundation/e/apps/manager/fused/FusedManagerRepository.kt +1 −2 Original line number Diff line number Diff line Loading @@ -11,7 +11,6 @@ import foundation.e.apps.manager.database.fusedDownload.FusedDownload import foundation.e.apps.manager.download.data.DownloadProgress import foundation.e.apps.manager.workmanager.InstallWorkManager import foundation.e.apps.utils.enums.Status import foundation.e.apps.utils.modules.CommonUtilsFunctions import kotlinx.coroutines.flow.Flow import javax.inject.Inject import javax.inject.Singleton Loading @@ -36,7 +35,7 @@ class FusedManagerRepository @Inject constructor( } suspend fun addDownload(fusedDownload: FusedDownload) { if (CommonUtilsFunctions.checkWorkIsAlreadyAvailable(InstallWorkManager.context, fusedDownload.id)) { if (InstallWorkManager.checkWorkIsAlreadyAvailable(fusedDownload.id)) { return } Loading
app/src/main/java/foundation/e/apps/manager/workmanager/InstallWorkManager.kt +15 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ import androidx.work.ExistingWorkPolicy import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkManager import foundation.e.apps.manager.database.fusedDownload.FusedDownload import java.lang.Exception object InstallWorkManager { const val INSTALL_WORK_NAME = "APP_LOUNGE_INSTALL_APP" Loading @@ -27,4 +28,18 @@ object InstallWorkManager { fun cancelWork(tag: String) { WorkManager.getInstance(context).cancelAllWorkByTag(tag) } fun checkWorkIsAlreadyAvailable(tag: String): Boolean { val works = WorkManager.getInstance(context).getWorkInfosByTag(tag) try { works.get().forEach { if (it.tags.contains(tag) && !it.state.isFinished) { return true } } } catch (e: Exception) { e.printStackTrace() } return false } }