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 @@
+