diff --git a/app/src/main/java/com/aurora/store/data/room/download/DownloadDao.kt b/app/src/main/java/com/aurora/store/data/room/download/DownloadDao.kt index 9901494ba..9b721a7b3 100644 --- a/app/src/main/java/com/aurora/store/data/room/download/DownloadDao.kt +++ b/app/src/main/java/com/aurora/store/data/room/download/DownloadDao.kt @@ -24,4 +24,7 @@ interface DownloadDao { @Query("DELETE FROM download WHERE packageName = :packageName") suspend fun delete(packageName: String) + + @Query("DELETE FROM download") + suspend fun deleteAll() } diff --git a/app/src/main/java/com/aurora/store/util/DownloadWorkerUtil.kt b/app/src/main/java/com/aurora/store/util/DownloadWorkerUtil.kt index 72ee93287..0007aff88 100644 --- a/app/src/main/java/com/aurora/store/util/DownloadWorkerUtil.kt +++ b/app/src/main/java/com/aurora/store/util/DownloadWorkerUtil.kt @@ -15,6 +15,7 @@ import com.aurora.store.data.room.download.DownloadDao import com.aurora.store.data.work.DownloadWorker import com.google.gson.Gson import dagger.hilt.android.qualifiers.ApplicationContext +import java.io.File import javax.inject.Inject import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.GlobalScope @@ -94,6 +95,12 @@ class DownloadWorkerUtil @Inject constructor( .deleteRecursively() } + suspend fun clearAllDownloads() { + Log.i(TAG, "Clearing all downloads!") + downloadDao.deleteAll() + File(PathUtil.getDownloadDirectory(context), "Downloads").deleteRecursively() + } + suspend fun clearFinishedDownloads() { downloadsList.value.filter { it.isFinished }.forEach { clearDownload(it.packageName, it.versionCode) diff --git a/app/src/main/java/com/aurora/store/util/PathUtil.kt b/app/src/main/java/com/aurora/store/util/PathUtil.kt index de7f8dc55..b1584d474 100644 --- a/app/src/main/java/com/aurora/store/util/PathUtil.kt +++ b/app/src/main/java/com/aurora/store/util/PathUtil.kt @@ -34,7 +34,7 @@ object PathUtil { private const val libraries = "libraries" - private fun getDownloadDirectory(context: Context): String { + fun getDownloadDirectory(context: Context): String { return if (context.isExternalStorageEnable()) { getExternalPath(context) } else { diff --git a/app/src/main/java/com/aurora/store/view/ui/downloads/DownloadFragment.kt b/app/src/main/java/com/aurora/store/view/ui/downloads/DownloadFragment.kt index 93e23c7c7..386b72935 100644 --- a/app/src/main/java/com/aurora/store/view/ui/downloads/DownloadFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/downloads/DownloadFragment.kt @@ -67,6 +67,11 @@ class DownloadFragment : BaseFragment(R.layout.fragment_download) { setNavigationOnClickListener { findNavController().navigateUp() } setOnMenuItemClickListener { when (it.itemId) { + R.id.action_force_clear_all -> { + viewLifecycleOwner.lifecycleScope.launch(NonCancellable) { + downloadWorkerUtil.clearAllDownloads() + } + } R.id.action_cancel_all -> { viewLifecycleOwner.lifecycleScope.launch(NonCancellable) { downloadWorkerUtil.cancelAll() diff --git a/app/src/main/res/menu/menu_download_main.xml b/app/src/main/res/menu/menu_download_main.xml index aa0a9ccbd..dd592c783 100644 --- a/app/src/main/res/menu/menu_download_main.xml +++ b/app/src/main/res/menu/menu_download_main.xml @@ -24,4 +24,7 @@ +