From 33c081d1321b99bf2fa97a0a2e88cbcccf8b5050 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Denis=20=C3=87erri?=
<64997243+deniscerri@users.noreply.github.com>
Date: Sat, 11 Mar 2023 15:07:06 +0100
Subject: [PATCH] added download type toggle in download multiple card
---
.idea/assetWizardSettings.xml | 4 +-
.../1.json | 12 +-
.../ConfigureMultipleDownloadsAdapter.kt | 3 +-
.../ytdlnis/adapter/HistoryAdapter.kt | 3 +-
.../ytdlnis/database/models/DownloadItem.kt | 1 +
.../repository/CommandTemplateRepository.kt | 4 +
.../viewmodel/CommandTemplateViewModel.kt | 4 +
.../database/viewmodel/DownloadViewModel.kt | 44 +++++-
.../ytdlnis/receiver/ShareActivity.kt | 18 ++-
.../com/deniscerri/ytdlnis/ui/HomeFragment.kt | 6 +-
.../ui/downloadcard/DownloadAudioFragment.kt | 18 ++-
.../downloadcard/DownloadCommandFragment.kt | 41 ++---
.../DownloadMultipleBottomSheetDialog.kt | 85 ++++++++++-
.../ui/downloadcard/DownloadVideoFragment.kt | 15 +-
.../deniscerri/ytdlnis/work/DownloadWorker.kt | 4 +-
.../res/drawable/baseline_audio_file_24.xml | 5 +
.../baseline_insert_drive_file_24.xml | 5 +
.../res/drawable/baseline_video_file_24.xml | 5 +
app/src/main/res/layout/download_card.xml | 2 +
.../main/res/layout/download_type_sheet.xml | 92 +++++++++++
app/src/main/res/layout/history_card.xml | 143 +++++++++---------
.../history_item_details_bottom_sheet.xml | 13 +-
.../main/res/menu/download_multiple_menu.xml | 6 +-
app/src/main/res/values/arrays.xml | 6 +-
24 files changed, 384 insertions(+), 155 deletions(-)
create mode 100644 app/src/main/res/drawable/baseline_audio_file_24.xml
create mode 100644 app/src/main/res/drawable/baseline_insert_drive_file_24.xml
create mode 100644 app/src/main/res/drawable/baseline_video_file_24.xml
create mode 100644 app/src/main/res/layout/download_type_sheet.xml
diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml
index cce47b52..86615f01 100644
--- a/.idea/assetWizardSettings.xml
+++ b/.idea/assetWizardSettings.xml
@@ -320,7 +320,7 @@
@@ -330,7 +330,7 @@
diff --git a/app/schemas/com.deniscerri.ytdlnis.database.DBManager/1.json b/app/schemas/com.deniscerri.ytdlnis.database.DBManager/1.json
index 86981c48..4802bbce 100644
--- a/app/schemas/com.deniscerri.ytdlnis.database.DBManager/1.json
+++ b/app/schemas/com.deniscerri.ytdlnis.database.DBManager/1.json
@@ -2,7 +2,7 @@
"formatVersion": 1,
"database": {
"version": 1,
- "identityHash": "6d6dea309a9207aaaedcc2a745ae2a2a",
+ "identityHash": "f602a089dee877374642352ffd4fa6bb",
"entities": [
{
"tableName": "results",
@@ -160,7 +160,7 @@
},
{
"tableName": "downloads",
- "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `url` TEXT NOT NULL, `title` TEXT NOT NULL, `author` TEXT NOT NULL, `thumb` TEXT NOT NULL, `duration` TEXT NOT NULL, `type` TEXT NOT NULL, `format` TEXT NOT NULL, `downloadPath` TEXT NOT NULL, `website` TEXT NOT NULL, `downloadSize` TEXT NOT NULL, `playlistTitle` TEXT NOT NULL, `audioPreferences` TEXT NOT NULL, `videoPreferences` TEXT NOT NULL, `customFileNameTemplate` TEXT NOT NULL, `SaveThumb` INTEGER NOT NULL, `status` TEXT NOT NULL DEFAULT 'Queued', `downloadStartTime` INTEGER NOT NULL DEFAULT 0)",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `url` TEXT NOT NULL, `title` TEXT NOT NULL, `author` TEXT NOT NULL, `thumb` TEXT NOT NULL, `duration` TEXT NOT NULL, `type` TEXT NOT NULL, `format` TEXT NOT NULL, `allFormats` TEXT NOT NULL, `downloadPath` TEXT NOT NULL, `website` TEXT NOT NULL, `downloadSize` TEXT NOT NULL, `playlistTitle` TEXT NOT NULL, `audioPreferences` TEXT NOT NULL, `videoPreferences` TEXT NOT NULL, `customFileNameTemplate` TEXT NOT NULL, `SaveThumb` INTEGER NOT NULL, `status` TEXT NOT NULL DEFAULT 'Queued', `downloadStartTime` INTEGER NOT NULL DEFAULT 0)",
"fields": [
{
"fieldPath": "id",
@@ -210,6 +210,12 @@
"affinity": "TEXT",
"notNull": true
},
+ {
+ "fieldPath": "allFormats",
+ "columnName": "allFormats",
+ "affinity": "TEXT",
+ "notNull": true
+ },
{
"fieldPath": "downloadPath",
"columnName": "downloadPath",
@@ -370,7 +376,7 @@
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
- "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '6d6dea309a9207aaaedcc2a745ae2a2a')"
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'f602a089dee877374642352ffd4fa6bb')"
]
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/ConfigureMultipleDownloadsAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/adapter/ConfigureMultipleDownloadsAdapter.kt
index 70c81d6c..6e507a33 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/ConfigureMultipleDownloadsAdapter.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/adapter/ConfigureMultipleDownloadsAdapter.kt
@@ -80,6 +80,7 @@ class ConfigureMultipleDownloadsAdapter(onItemClickListener: OnItemClickListener
val formatNote = card.findViewById(R.id.format_note)
if (item.format.format_note.isNotEmpty()){
formatNote.text = item.format.format_note.uppercase(Locale.getDefault())
+ formatNote.visibility = View.VISIBLE
}else{
formatNote.visibility = View.GONE
}
@@ -119,7 +120,7 @@ class ConfigureMultipleDownloadsAdapter(onItemClickListener: OnItemClickListener
btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_video)
}
else -> {
- btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_baseline_keyboard_arrow_right_24)
+ btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_terminal)
}
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/HistoryAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/adapter/HistoryAdapter.kt
index 58a3bef7..3c141bfb 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/HistoryAdapter.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/adapter/HistoryAdapter.kt
@@ -112,8 +112,7 @@ class HistoryAdapter(onItemClickListener: OnItemClickListener, activity: Activit
datetime.text = relativeTime
// BUTTON ----------------------------------
- val buttonLayout = card.findViewById(R.id.downloads_download_button_layout)
- val btn = buttonLayout.findViewById(R.id.downloads_download_button_type)
+ val btn = card.findViewById(R.id.downloads_download_button_type)
var filePresent = true
//IS IN THE FILE SYSTEM?
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItem.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItem.kt
index bf2416a2..d8e4d3fb 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItem.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItem.kt
@@ -16,6 +16,7 @@ data class DownloadItem(
val duration: String,
var type: DownloadViewModel.Type,
var format: Format,
+ val allFormats: ArrayList,
var downloadPath: String,
val website: String,
val downloadSize: String,
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/CommandTemplateRepository.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/CommandTemplateRepository.kt
index d873c68f..e53bfbd3 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/CommandTemplateRepository.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/CommandTemplateRepository.kt
@@ -13,6 +13,10 @@ class CommandTemplateRepository(private val commandDao: CommandTemplateDao) {
return commandDao.getAllTemplates();
}
+ fun getTotalNumber() : Int {
+ return commandDao.getTotalNumber()
+ }
+
fun getItem(id: Long) : CommandTemplate {
return commandDao.getTemplate(id)
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/CommandTemplateViewModel.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/CommandTemplateViewModel.kt
index 325a7c95..e2176126 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/CommandTemplateViewModel.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/CommandTemplateViewModel.kt
@@ -38,6 +38,10 @@ class CommandTemplateViewModel(private val application: Application) : AndroidVi
return repository.getAll()
}
+ fun getTotalNumber(): Int {
+ return repository.getTotalNumber()
+ }
+
fun insert(item: CommandTemplate) = viewModelScope.launch(Dispatchers.IO) {
repository.insert(item)
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt
index dfe61888..0450839a 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt
@@ -21,6 +21,7 @@ import com.deniscerri.ytdlnis.work.DownloadWorker
import com.google.gson.Gson
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
import java.util.concurrent.TimeUnit
class DownloadViewModel(application: Application) : AndroidViewModel(application) {
@@ -55,7 +56,7 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application
erroredDownloads = repository.erroredDownloads
val videoFormat = getApplication().resources.getStringArray(R.array.video_formats)
- val videoContainer = sharedPreferences.getString("video_format", "Default")
+ val videoContainer = sharedPreferences.getString("video_format", getApplication().resources.getString(R.string.defaultValue))
bestVideoFormat = Format(
videoFormat[videoFormat.lastIndex],
videoContainer!!,
@@ -113,12 +114,22 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application
resultItem.thumb,
resultItem.duration,
type,
- getFormat(resultItem, type),
+ getFormat(resultItem.formats, type),
+ resultItem.formats,
downloadPath!!, resultItem.website, "", resultItem.playlistTitle, audioPreferences, videoPreferences,customFileNameTemplate!!, saveThumb, DownloadRepository.Status.Processing.toString(), 0
)
}
+ fun switchDownloadType(list: List, type: Type) : List{
+ list.forEach {
+ val format = getFormat(it.allFormats, type)
+ it.format = format
+ it.type = type
+ }
+ return list
+ }
+
fun createDownloadItemFromHistory(historyItem: HistoryItem) : DownloadItem {
val embedSubs = sharedPreferences.getBoolean("embed_subtitles", false)
val addChapters = sharedPreferences.getBoolean("add_chapters", false)
@@ -143,30 +154,51 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application
historyItem.duration,
historyItem.type,
historyItem.format,
+ ArrayList(),
downloadPath!!, historyItem.website, "", "", audioPreferences, videoPreferences,customFileNameTemplate!!, saveThumb, DownloadRepository.Status.Processing.toString(), 0
)
}
- private fun getFormat(resultItem: ResultItem?, type: Type) : Format {
+ private fun getFormat(formats: List, type: Type) : Format {
when(type) {
Type.audio -> {
return try {
- resultItem!!.formats.last { it.format_note.contains("audio", ignoreCase = true) }
+ formats.last { it.format_note.contains("audio", ignoreCase = true) }
}catch (e: Exception){
bestAudioFormat
}
}
Type.video -> {
return try {
- resultItem!!.formats.last { !it.format_note.contains("audio", ignoreCase = true) }
+ val qualityPreference = sharedPreferences.getString("video_quality", getApplication().resources.getString(R.string.best_quality))
+ if (qualityPreference == getApplication().resources.getString(R.string.worst_quality)){
+ formats.first { !it.format_note.contains("audio", ignoreCase = true) }
+ }
+ if (qualityPreference == getApplication().resources.getString(R.string.best_quality)){
+ formats.last { !it.format_note.contains("audio", ignoreCase = true) }
+ }
+ try{
+ formats.last { format -> format.format_note.contains(qualityPreference!!.substring(0, qualityPreference.length -1)) }
+ }catch (e: Exception){
+ formats.last { !it.format_note.contains("audio", ignoreCase = true) }
+ }
}catch (e: Exception){
bestVideoFormat
}
}
else -> {
- return Format()
+ val c = commandTemplateDao.getFirst()
+ return Format(
+ c.title,
+ "",
+ "",
+ "",
+ "",
+ 0,
+ c.content
+ )
}
}
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/receiver/ShareActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/receiver/ShareActivity.kt
index 2b5358be..7227292e 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/receiver/ShareActivity.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/receiver/ShareActivity.kt
@@ -132,8 +132,10 @@ class ShareActivity : AppCompatActivity() {
val bottomSheet = DownloadBottomSheetDialog(it, DownloadViewModel.Type.valueOf(sharedPreferences.getString("preferred_download_type", "video")!!))
bottomSheet.show(supportFragmentManager, "downloadSingleSheet")
}else{
- val downloadItem = downloadViewModel.createDownloadItemFromResult(it, DownloadViewModel.Type.valueOf(sharedPreferences.getString("preferred_download_type", "video")!!))
- downloadViewModel.queueDownloads(listOf(downloadItem))
+ lifecycleScope.launch(Dispatchers.IO){
+ val downloadItem = downloadViewModel.createDownloadItemFromResult(it, DownloadViewModel.Type.valueOf(sharedPreferences.getString("preferred_download_type", "video")!!))
+ downloadViewModel.queueDownloads(listOf(downloadItem))
+ }
this.finish()
}
}
@@ -145,12 +147,14 @@ class ShareActivity : AppCompatActivity() {
}else{
lifecycleScope.launch(Dispatchers.IO){
val downloadItems = mutableListOf()
- it.forEach { res ->
- val i = downloadViewModel.createDownloadItemFromResult(res!!, DownloadViewModel.Type.valueOf(sharedPreferences.getString("preferred_download_type", "video")!!))
- i.format = downloadViewModel.getLatestCommandTemplateAsFormat()
- downloadItems.add(i)
+ lifecycleScope.launch(Dispatchers.IO){
+ it.forEach { res ->
+ val i = downloadViewModel.createDownloadItemFromResult(res!!, DownloadViewModel.Type.valueOf(sharedPreferences.getString("preferred_download_type", "video")!!))
+ i.format = downloadViewModel.getLatestCommandTemplateAsFormat()
+ downloadItems.add(i)
+ }
+ downloadViewModel.queueDownloads(downloadItems)
}
- downloadViewModel.queueDownloads(downloadItems)
}
this.finish()
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt
index 35a4427c..9a356030 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt
@@ -328,8 +328,10 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
if (sharedPreferences!!.getBoolean("download_card", true)) {
showSingleDownloadSheet(item!!, type!!)
} else {
- val downloadItem = downloadViewModel.createDownloadItemFromResult(item!!, type!!)
- downloadViewModel.queueDownloads(listOf(downloadItem))
+ lifecycleScope.launch(Dispatchers.IO){
+ val downloadItem = downloadViewModel.createDownloadItemFromResult(item!!, type!!)
+ downloadViewModel.queueDownloads(listOf(downloadItem))
+ }
}
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadAudioFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadAudioFragment.kt
index a14f4dc0..6078fc88 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadAudioFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadAudioFragment.kt
@@ -32,7 +32,9 @@ import com.deniscerri.ytdlnis.util.UiUtil
import com.google.android.material.chip.Chip
import com.google.android.material.textfield.TextInputLayout
import com.google.gson.Gson
+import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
class DownloadAudioFragment(private var resultItem: ResultItem, private var currentDownloadItem: DownloadItem?) : Fragment() {
@@ -57,14 +59,6 @@ class DownloadAudioFragment(private var resultItem: ResultItem, private var curr
fragmentView = inflater.inflate(R.layout.fragment_download_audio, container, false)
activity = getActivity()
downloadViewModel = ViewModelProvider(this)[DownloadViewModel::class.java]
-
- downloadItem = if (currentDownloadItem != null && currentDownloadItem!!.type == Type.audio){
- val string = Gson().toJson(currentDownloadItem, DownloadItem::class.java)
- Gson().fromJson(string, DownloadItem::class.java)
- }else{
- downloadViewModel.createDownloadItemFromResult(resultItem, Type.audio)
- }
-
fileUtil = FileUtil()
uiUtil = UiUtil(fileUtil)
return fragmentView
@@ -73,6 +67,14 @@ class DownloadAudioFragment(private var resultItem: ResultItem, private var curr
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
lifecycleScope.launch {
+ downloadItem = withContext(Dispatchers.IO) {
+ if (currentDownloadItem != null && currentDownloadItem!!.type == Type.audio){
+ val string = Gson().toJson(currentDownloadItem, DownloadItem::class.java)
+ Gson().fromJson(string, DownloadItem::class.java)
+ }else{
+ downloadViewModel.createDownloadItemFromResult(resultItem, Type.audio)
+ }
+ }
val sharedPreferences =
requireContext().getSharedPreferences("root_preferences", Activity.MODE_PRIVATE)
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadCommandFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadCommandFragment.kt
index 8b3deb8f..b02cd4e5 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadCommandFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadCommandFragment.kt
@@ -58,14 +58,6 @@ class DownloadCommandFragment(private val resultItem: ResultItem, private var cu
activity = getActivity()
downloadViewModel = ViewModelProvider(this)[DownloadViewModel::class.java]
commandTemplateViewModel = ViewModelProvider(this)[CommandTemplateViewModel::class.java]
-
- downloadItem = if (currentDownloadItem != null && currentDownloadItem!!.type == DownloadViewModel.Type.command){
- val string = Gson().toJson(currentDownloadItem, DownloadItem::class.java)
- Gson().fromJson(string, DownloadItem::class.java)
- }else{
- downloadViewModel.createDownloadItemFromResult(resultItem, DownloadViewModel.Type.command)
- }
-
fileUtil = FileUtil()
uiUtil = UiUtil(fileUtil)
return fragmentView
@@ -75,25 +67,34 @@ class DownloadCommandFragment(private val resultItem: ResultItem, private var cu
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
lifecycleScope.launch {
+ downloadItem = withContext(Dispatchers.IO){
+ if (currentDownloadItem != null && currentDownloadItem!!.type == DownloadViewModel.Type.command){
+ val string = Gson().toJson(currentDownloadItem, DownloadItem::class.java)
+ Gson().fromJson(string, DownloadItem::class.java)
+ }else{
+ downloadViewModel.createDownloadItemFromResult(resultItem, DownloadViewModel.Type.command)
+ }
+ }
+
val sharedPreferences = requireContext().getSharedPreferences("root_preferences", Activity.MODE_PRIVATE)
try {
val templates : MutableList = withContext(Dispatchers.IO){
commandTemplateViewModel.getAll().toMutableList()
}
- val id = sharedPreferences.getLong("commandTemplate", templates[0].id)
- val chosenCommand = templates.find { it.id == id }
- downloadItem.format = Format(
- chosenCommand!!.title,
- "",
- "",
- "",
- "",
- 0,
- chosenCommand.content
- )
+// val id = sharedPreferences.getLong("commandTemplate", templates[0].id)
+// val chosenCommand = templates.find { it.id == id }
+// downloadItem.format = Format(
+// chosenCommand!!.title,
+// "",
+// "",
+// "",
+// "",
+// 0,
+// chosenCommand.content
+// )
val chosenCommandView = view.findViewById(R.id.content)
- chosenCommandView.editText!!.setText(chosenCommand.content)
+ chosenCommandView.editText!!.setText(downloadItem.format.format_note)
chosenCommandView.endIconDrawable = AppCompatResources.getDrawable(requireContext(), R.drawable.ic_delete_all)
chosenCommandView.editText!!.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt
index 57bb1463..76606695 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt
@@ -8,25 +8,29 @@ import android.content.Intent
import android.os.Bundle
import android.util.DisplayMetrics
import android.util.Log
-import android.view.LayoutInflater
-import android.view.MenuItem
-import android.view.View
+import android.view.*
import android.widget.Button
+import android.widget.LinearLayout
+import android.widget.TextView
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
+import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.adapter.ConfigureMultipleDownloadsAdapter
+import com.deniscerri.ytdlnis.database.models.CommandTemplate
import com.deniscerri.ytdlnis.database.models.DownloadItem
+import com.deniscerri.ytdlnis.database.viewmodel.CommandTemplateViewModel
import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
import com.deniscerri.ytdlnis.database.viewmodel.ResultViewModel
import com.deniscerri.ytdlnis.receiver.ShareActivity
import com.deniscerri.ytdlnis.util.FileUtil
import com.google.android.material.bottomappbar.BottomAppBar
import com.google.android.material.bottomsheet.BottomSheetBehavior
+import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.google.android.material.button.MaterialButton
import com.google.android.material.datepicker.CalendarConstraints
@@ -39,9 +43,10 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.util.*
-class DownloadMultipleBottomSheetDialog(private val items: MutableList) : BottomSheetDialogFragment(), ConfigureMultipleDownloadsAdapter.OnItemClickListener, View.OnClickListener,
+class DownloadMultipleBottomSheetDialog(private var items: MutableList) : BottomSheetDialogFragment(), ConfigureMultipleDownloadsAdapter.OnItemClickListener, View.OnClickListener,
ConfigureDownloadBottomSheetDialog.OnDownloadItemUpdateListener {
private lateinit var downloadViewModel: DownloadViewModel
+ private lateinit var commandTemplateViewModel: CommandTemplateViewModel
private lateinit var resultViewModel: ResultViewModel
private lateinit var listAdapter : ConfigureMultipleDownloadsAdapter
private lateinit var recyclerView: RecyclerView
@@ -53,6 +58,7 @@ class DownloadMultipleBottomSheetDialog(private val items: MutableList(R.id.bottomAppBar)
+ val preferredDownloadType = bottomAppBar.menu.findItem(R.id.preferred_download_type)
+ when(items.first().type){
+ DownloadViewModel.Type.audio -> {
+ preferredDownloadType.setIcon(R.drawable.baseline_audio_file_24)
+ }
+ DownloadViewModel.Type.video -> {
+ preferredDownloadType.setIcon(R.drawable.baseline_video_file_24)
+
+ }
+ DownloadViewModel.Type.command -> {
+ preferredDownloadType.setIcon(R.drawable.baseline_insert_drive_file_24)
+ }
+ }
+
bottomAppBar!!.setOnMenuItemClickListener { m: MenuItem ->
val itemId = m.itemId
if (itemId == R.id.folder) {
@@ -144,7 +164,61 @@ class DownloadMultipleBottomSheetDialog(private val items: MutableList(R.id.audio)
+ val video = bottomSheet.findViewById(R.id.video)
+ val command = bottomSheet.findViewById(R.id.command)
+
+
+ withContext(Dispatchers.IO){
+ val nr = commandTemplateViewModel.getTotalNumber()
+ if(nr == 0){
+ command!!.visibility = View.GONE
+ }else{
+ command!!.visibility = View.VISIBLE
+ }
+ }
+
+ audio!!.setOnClickListener {
+ items = downloadViewModel.switchDownloadType(items, DownloadViewModel.Type.audio).toMutableList()
+ listAdapter.submitList(items.toList())
+ listAdapter.notifyDataSetChanged()
+ preferredDownloadType.setIcon(R.drawable.baseline_audio_file_24)
+ bottomSheet.cancel()
+ }
+
+ video!!.setOnClickListener {
+ items = downloadViewModel.switchDownloadType(items, DownloadViewModel.Type.video).toMutableList()
+ listAdapter.submitList(items.toList())
+ listAdapter.notifyDataSetChanged()
+ preferredDownloadType.setIcon(R.drawable.baseline_video_file_24)
+ bottomSheet.cancel()
+ }
+
+ command!!.setOnClickListener {
+ lifecycleScope.launch {
+ items = withContext(Dispatchers.IO){
+ downloadViewModel.switchDownloadType(items, DownloadViewModel.Type.command).toMutableList()
+ }
+ listAdapter.submitList(items.toList())
+ listAdapter.notifyDataSetChanged()
+ preferredDownloadType.setIcon(R.drawable.baseline_insert_drive_file_24)
+ bottomSheet.cancel()
+ }
+ }
+
+ bottomSheet.show()
+ bottomSheet.window!!.setLayout(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT
+ )
+ }
}
true
@@ -197,7 +271,6 @@ class DownloadMultipleBottomSheetDialog(private val items: MutableList
+
+
diff --git a/app/src/main/res/drawable/baseline_insert_drive_file_24.xml b/app/src/main/res/drawable/baseline_insert_drive_file_24.xml
new file mode 100644
index 00000000..7b6a50fc
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_insert_drive_file_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/baseline_video_file_24.xml b/app/src/main/res/drawable/baseline_video_file_24.xml
new file mode 100644
index 00000000..2904fb5a
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_video_file_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/layout/download_card.xml b/app/src/main/res/layout/download_card.xml
index 67d7380f..4458c202 100644
--- a/app/src/main/res/layout/download_card.xml
+++ b/app/src/main/res/layout/download_card.xml
@@ -48,6 +48,7 @@
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
+ android:scrollbars="none"
android:paddingTop="10dp"
android:paddingEnd="10dp"
android:shadowColor="@color/black"
@@ -65,6 +66,7 @@
android:ellipsize="end"
android:gravity="bottom"
android:maxLines="1"
+ android:scrollbars="none"
android:paddingEnd="10dp"
android:paddingBottom="5dp"
android:shadowColor="@color/black"
diff --git a/app/src/main/res/layout/download_type_sheet.xml b/app/src/main/res/layout/download_type_sheet.xml
new file mode 100644
index 00000000..aec21095
--- /dev/null
+++ b/app/src/main/res/layout/download_type_sheet.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/history_card.xml b/app/src/main/res/layout/history_card.xml
index 0547d5b4..fe32e84c 100644
--- a/app/src/main/res/layout/history_card.xml
+++ b/app/src/main/res/layout/history_card.xml
@@ -1,5 +1,5 @@
-
+ app:layout_constraintTop_toTopOf="parent">
-
+ android:layout_height="match_parent">
-
+
-
-
+
-
+
+ app:cornerRadius="10dp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.2" />
+
+
-
diff --git a/app/src/main/res/layout/history_item_details_bottom_sheet.xml b/app/src/main/res/layout/history_item_details_bottom_sheet.xml
index 88d4ae0a..048cb6aa 100644
--- a/app/src/main/res/layout/history_item_details_bottom_sheet.xml
+++ b/app/src/main/res/layout/history_item_details_bottom_sheet.xml
@@ -75,7 +75,7 @@
android:layout_marginStart="20dp"
android:layout_height="wrap_content">
-
-
+
diff --git a/app/src/main/res/menu/download_multiple_menu.xml b/app/src/main/res/menu/download_multiple_menu.xml
index e51d5ef7..f7f5993b 100644
--- a/app/src/main/res/menu/download_multiple_menu.xml
+++ b/app/src/main/res/menu/download_multiple_menu.xml
@@ -10,9 +10,9 @@
app:showAsAction="collapseActionView|ifRoom"/>
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 4903f8be..87d4dd74 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -18,14 +18,14 @@
- - Worst Quality
+ - @string/worst_quality
- 360p
- 480p
- 720p
- 1080p
- 1440p
- 2160p
- - Best Quality
+ - @string/best_quality
@@ -88,4 +88,6 @@
- video
- command
+ Worst Quality
+ Best Quality
\ No newline at end of file