Merge pull request #5531 from thevedantchourey/thevedantchourey-enhanced-code-for-Button-to-delete-all-downloaded-videos-at-once-5526

feat: button to delete all downloads
This commit is contained in:
Bnyro 2024-01-22 19:34:48 +01:00 committed by GitHub
commit 9803a045f9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
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>