feat: add delete all button for downloads

This commit is contained in:
Vedant.R.J.Chourey 2024-01-22 17:25:13 +05:30 committed by Bnyro
parent 8451c19959
commit 02d30f1f17
4 changed files with 41 additions and 5 deletions

View File

@ -136,7 +136,7 @@ class DownloadsAdapter(
.show()
}
private fun deleteDownload(position: Int) {
fun deleteDownload(position: Int) {
val download = downloads[position].download
val items = downloads[position].downloadItems

View File

@ -1,6 +1,7 @@
package com.github.libretube.ui.fragments
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.content.ServiceConnection
@ -9,15 +10,14 @@ import android.os.IBinder
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.core.view.isGone
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.R
import com.github.libretube.constants.IntentData
import com.github.libretube.databinding.FragmentDownloadsBinding
import com.github.libretube.db.DatabaseHolder.Database
import com.github.libretube.db.obj.DownloadWithItems
@ -28,10 +28,10 @@ import com.github.libretube.helpers.DownloadHelper
import com.github.libretube.obj.DownloadStatus
import com.github.libretube.receivers.DownloadReceiver
import com.github.libretube.services.DownloadService
import com.github.libretube.services.OfflinePlayerService
import com.github.libretube.ui.adapters.DownloadsAdapter
import com.github.libretube.ui.base.DynamicLayoutManagerFragment
import com.github.libretube.ui.viewholders.DownloadsViewHolder
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import kotlin.io.path.fileSize
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
@ -83,6 +83,7 @@ class DownloadsFragment : DynamicLayoutManagerFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.deleteAll.isInvisible = true
val dbDownloads = runBlocking(Dispatchers.IO) {
Database.downloadDao().getAll()
@ -93,7 +94,6 @@ class DownloadsFragment : DynamicLayoutManagerFragment() {
binding.downloadsEmpty.isGone = true
binding.downloads.isVisible = true
val adapter = DownloadsAdapter(requireContext(), downloads) {
var isDownloading = false
val ids = it.downloadItems
@ -155,11 +155,33 @@ class DownloadsFragment : DynamicLayoutManagerFragment() {
}
)
if (dbDownloads.isNotEmpty()){
binding.deleteAll.isVisible = true
binding.deleteAll.setOnClickListener{
showDeleteAllDialog(binding.root.context, adapter)
}
}
binding.shuffleBackground.setOnClickListener {
BackgroundHelper.playOnBackgroundOffline(requireContext(), null)
}
}
private fun showDeleteAllDialog(context: Context, adapter: DownloadsAdapter) {
MaterialAlertDialogBuilder(context)
.setTitle(R.string.delete_all)
.setMessage(R.string.irreversible)
.setPositiveButton(R.string.okay) { _, _ ->
for (downloadIndex in downloads.size - 1 downTo 0) {
adapter.deleteDownload(downloadIndex)
}
}
.setNegativeButton(R.string.cancel, null)
.show()
}
override fun onStart() {
if (DownloadService.IS_DOWNLOAD_RUNNING) {
val intent = Intent(requireContext(), DownloadService::class.java)
@ -168,6 +190,7 @@ class DownloadsFragment : DynamicLayoutManagerFragment() {
super.onStart()
}
override fun onResume() {
super.onResume()
val filter = IntentFilter()

View File

@ -34,6 +34,18 @@
android:layout_height="wrap_content"
android:visibility="gone" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/delete_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_marginBottom="80dp"
android:layout_marginEnd="18dp"
android:contentDescription="@string/shuffle"
android:src="@drawable/ic_delete"
android:tooltipText="@string/delete"
tools:targetApi="o" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/shuffle_background"
android:layout_width="wrap_content"

View File

@ -286,6 +286,7 @@
<string name="device_info">Device Info</string>
<string name="audio_video_summary">Quality and format</string>
<string name="delete">Delete from downloads</string>
<string name="delete_all">All downloads will be deleted!</string>
<string name="renamePlaylist">Rename playlist</string>
<string name="wifi">Wi-Fi</string>
<string name="mobile_data">Mobile data</string>