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() .show()
} }
private fun deleteDownload(position: Int) { fun deleteDownload(position: Int) {
val download = downloads[position].download val download = downloads[position].download
val items = downloads[position].downloadItems val items = downloads[position].downloadItems

View File

@ -1,6 +1,7 @@
package com.github.libretube.ui.fragments package com.github.libretube.ui.fragments
import android.content.ComponentName import android.content.ComponentName
import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.content.ServiceConnection import android.content.ServiceConnection
@ -9,15 +10,14 @@ import android.os.IBinder
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.core.view.isGone import androidx.core.view.isGone
import androidx.core.view.isInvisible
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.constants.IntentData
import com.github.libretube.databinding.FragmentDownloadsBinding import com.github.libretube.databinding.FragmentDownloadsBinding
import com.github.libretube.db.DatabaseHolder.Database import com.github.libretube.db.DatabaseHolder.Database
import com.github.libretube.db.obj.DownloadWithItems 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.obj.DownloadStatus
import com.github.libretube.receivers.DownloadReceiver import com.github.libretube.receivers.DownloadReceiver
import com.github.libretube.services.DownloadService import com.github.libretube.services.DownloadService
import com.github.libretube.services.OfflinePlayerService
import com.github.libretube.ui.adapters.DownloadsAdapter import com.github.libretube.ui.adapters.DownloadsAdapter
import com.github.libretube.ui.base.DynamicLayoutManagerFragment import com.github.libretube.ui.base.DynamicLayoutManagerFragment
import com.github.libretube.ui.viewholders.DownloadsViewHolder import com.github.libretube.ui.viewholders.DownloadsViewHolder
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import kotlin.io.path.fileSize import kotlin.io.path.fileSize
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
@ -83,6 +83,7 @@ class DownloadsFragment : DynamicLayoutManagerFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
binding.deleteAll.isInvisible = true
val dbDownloads = runBlocking(Dispatchers.IO) { val dbDownloads = runBlocking(Dispatchers.IO) {
Database.downloadDao().getAll() Database.downloadDao().getAll()
@ -93,7 +94,6 @@ class DownloadsFragment : DynamicLayoutManagerFragment() {
binding.downloadsEmpty.isGone = true binding.downloadsEmpty.isGone = true
binding.downloads.isVisible = true binding.downloads.isVisible = true
val adapter = DownloadsAdapter(requireContext(), downloads) { val adapter = DownloadsAdapter(requireContext(), downloads) {
var isDownloading = false var isDownloading = false
val ids = it.downloadItems 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 { binding.shuffleBackground.setOnClickListener {
BackgroundHelper.playOnBackgroundOffline(requireContext(), null) 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() { override fun onStart() {
if (DownloadService.IS_DOWNLOAD_RUNNING) { if (DownloadService.IS_DOWNLOAD_RUNNING) {
val intent = Intent(requireContext(), DownloadService::class.java) val intent = Intent(requireContext(), DownloadService::class.java)
@ -168,6 +190,7 @@ class DownloadsFragment : DynamicLayoutManagerFragment() {
super.onStart() super.onStart()
} }
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
val filter = IntentFilter() val filter = IntentFilter()

View File

@ -34,6 +34,18 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="gone" /> 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 <com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/shuffle_background" android:id="@+id/shuffle_background"
android:layout_width="wrap_content" android:layout_width="wrap_content"

View File

@ -286,6 +286,7 @@
<string name="device_info">Device Info</string> <string name="device_info">Device Info</string>
<string name="audio_video_summary">Quality and format</string> <string name="audio_video_summary">Quality and format</string>
<string name="delete">Delete from downloads</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="renamePlaylist">Rename playlist</string>
<string name="wifi">Wi-Fi</string> <string name="wifi">Wi-Fi</string>
<string name="mobile_data">Mobile data</string> <string name="mobile_data">Mobile data</string>