From 2fd96cf3b2031623b8a1d403bef1ff18f5e655f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20=C3=87erri?= <64997243+deniscerri@users.noreply.github.com> Date: Tue, 7 Feb 2023 17:33:40 +0100 Subject: [PATCH] more stuff lol --- app/src/main/AndroidManifest.xml | 5 + .../ytdlnis/adapter/ActiveDownloadAdapter.kt | 11 +- .../ConfigureMultipleDownloadsAdapter.kt | 7 +- .../ytdlnis/adapter/HistoryAdapter.kt | 11 +- .../deniscerri/ytdlnis/adapter/HomeAdapter.kt | 7 +- .../ytdlnis/adapter/QueuedDownloadAdapter.kt | 11 +- .../deniscerri/ytdlnis/database/Converters.kt | 12 +++ .../ytdlnis/database/models/DownloadItem.kt | 5 +- .../ytdlnis/database/models/HistoryItem.kt | 3 +- .../database/viewmodel/DownloadViewModel.kt | 24 ++--- .../database/viewmodel/HistoryViewModel.kt | 35 +++--- .../ytdlnis/receiver/ShareActivity.kt | 100 ++++++++++++++++++ .../com/deniscerri/ytdlnis/ui/HomeFragment.kt | 30 +++--- .../ConfigureDownloadBottomSheetDialog.kt | 65 ++++++------ .../ui/downloadcard/DownloadAudioFragment.kt | 50 +++++---- .../downloadcard/DownloadBottomSheetDialog.kt | 80 +++++++------- .../downloadcard/DownloadCommandFragment.kt | 5 +- .../downloadcard/DownloadFragmentAdapter.kt | 11 +- .../DownloadMultipleBottomSheetDialog.kt | 7 +- .../ui/downloadcard/DownloadVideoFragment.kt | 55 +++++----- .../deniscerri/ytdlnis/work/DownloadWorker.kt | 10 +- .../main/res/layout/download_bottom_sheet.xml | 31 ++++-- 22 files changed, 363 insertions(+), 212 deletions(-) create mode 100644 app/src/main/java/com/deniscerri/ytdlnis/receiver/ShareActivity.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 69b80b47..8e435fba 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -32,6 +32,10 @@ + + + @@ -42,6 +46,7 @@ + (R.id.downloads_download_button_type) when(item.type) { - "audio" -> { + DownloadViewModel.Type.audio -> { btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_music) } - "video" -> { + DownloadViewModel.Type.video -> { btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_video) } - "command" -> { + DownloadViewModel.Type.command -> { btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_baseline_keyboard_arrow_right_24) } } 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 fb6045ec..f93c9a07 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/HistoryAdapter.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/adapter/HistoryAdapter.kt @@ -21,6 +21,7 @@ import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import com.deniscerri.ytdlnis.R import com.deniscerri.ytdlnis.database.models.HistoryItem +import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel import com.google.android.material.button.MaterialButton import com.google.android.material.card.MaterialCardView import com.squareup.picasso.Picasso @@ -121,12 +122,10 @@ class HistoryAdapter(onItemClickListener: OnItemClickListener, activity: Activit }) thumbnail.alpha = 0.7f } - if (item.type.isNotEmpty()) { - if (item.type == "audio") { - if (filePresent) btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_music_downloaded) else btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_music) - } else { - if (filePresent) btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_video_downloaded) else btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_video) - } + if (item.type == DownloadViewModel.Type.audio) { + if (filePresent) btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_music_downloaded) else btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_music) + } else { + if (filePresent) btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_video_downloaded) else btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_video) } if (btn.hasOnClickListeners()) btn.setOnClickListener(null) if (checkedItems.contains(item.id)) { diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/HomeAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/adapter/HomeAdapter.kt index 47ddf347..efe070a5 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/HomeAdapter.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/adapter/HomeAdapter.kt @@ -16,6 +16,7 @@ import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import com.deniscerri.ytdlnis.R import com.deniscerri.ytdlnis.database.models.ResultItem +import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel import com.google.android.material.button.MaterialButton import com.google.android.material.card.MaterialCardView import com.google.android.material.progressindicator.LinearProgressIndicator @@ -84,11 +85,11 @@ class HomeAdapter(onItemClickListener: OnItemClickListener, activity: Activity) val musicBtn = buttonLayout.findViewById(R.id.download_music) musicBtn.tag = "$videoURL##audio" musicBtn.setTag(R.id.cancelDownload, "false") - musicBtn.setOnClickListener { onItemClickListener.onButtonClick(videoURL, "audio") } + musicBtn.setOnClickListener { onItemClickListener.onButtonClick(videoURL, DownloadViewModel.Type.audio) } val videoBtn = buttonLayout.findViewById(R.id.download_video) videoBtn.tag = "$videoURL##video" videoBtn.setTag(R.id.cancelDownload, "false") - videoBtn.setOnClickListener { onItemClickListener.onButtonClick(videoURL, "video") } + videoBtn.setOnClickListener { onItemClickListener.onButtonClick(videoURL, DownloadViewModel.Type.video) } // PROGRESS BAR ---------------------------------------------------- @@ -159,7 +160,7 @@ class HomeAdapter(onItemClickListener: OnItemClickListener, activity: Activity) } interface OnItemClickListener { - fun onButtonClick(videoURL: String, type: String?) + fun onButtonClick(videoURL: String, type: DownloadViewModel.Type?) fun onCardClick(videoURL: String, add: Boolean) } diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/QueuedDownloadAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/adapter/QueuedDownloadAdapter.kt index 270e542a..a2264328 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/QueuedDownloadAdapter.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/adapter/QueuedDownloadAdapter.kt @@ -20,6 +20,7 @@ import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import com.deniscerri.ytdlnis.R import com.deniscerri.ytdlnis.database.models.HistoryItem +import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel import com.google.android.material.button.MaterialButton import com.google.android.material.card.MaterialCardView import com.squareup.picasso.Picasso @@ -120,12 +121,10 @@ class QueuedDownloadAdapter(onItemClickListener: OnItemClickListener, activity: }) thumbnail.alpha = 0.7f } - if (item.type.isNotEmpty()) { - if (item.type == "audio") { - if (filePresent) btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_music_downloaded) else btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_music) - } else { - if (filePresent) btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_video_downloaded) else btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_video) - } + if (item.type == DownloadViewModel.Type.audio) { + if (filePresent) btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_music_downloaded) else btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_music) + } else { + if (filePresent) btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_video_downloaded) else btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_video) } if (btn.hasOnClickListeners()) btn.setOnClickListener(null) if (checkedItems.contains(item.id)) { diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/Converters.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/Converters.kt index 850a1698..2c464728 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/Converters.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/Converters.kt @@ -2,6 +2,7 @@ package com.deniscerri.ytdlnis.database import androidx.room.TypeConverter import com.deniscerri.ytdlnis.database.models.Format +import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel import com.google.gson.Gson import com.google.gson.reflect.TypeToken import java.lang.reflect.Type @@ -26,4 +27,15 @@ class Converters { @TypeConverter fun stringToFormat(string: String): Format = Gson().fromJson(string, Format::class.java) + + @TypeConverter + fun typeToString(type: DownloadViewModel.Type) : String = type.toString() + @TypeConverter + fun stringToType(string: String) : DownloadViewModel.Type { + return when(string){ + "audio" -> DownloadViewModel.Type.audio + "video" -> DownloadViewModel.Type.video + else -> DownloadViewModel.Type.command + } + } } \ No newline at end of file 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 60554571..bb505639 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 @@ -3,6 +3,7 @@ package com.deniscerri.ytdlnis.database.models import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.PrimaryKey +import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel @Entity(tableName = "downloads") data class DownloadItem( @@ -13,10 +14,10 @@ data class DownloadItem( var author: String, val thumb: String, val duration: String, - var type: String, + var type: DownloadViewModel.Type, var format: Format, @ColumnInfo(defaultValue = "0") - val removeAudio: Boolean, + var removeAudio: Boolean, var downloadPath: String, val website: String, val downloadSize: String, diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/models/HistoryItem.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/models/HistoryItem.kt index d55dde3d..40b128f7 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/models/HistoryItem.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/models/HistoryItem.kt @@ -2,6 +2,7 @@ package com.deniscerri.ytdlnis.database.models import androidx.room.Entity import androidx.room.PrimaryKey +import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel @Entity(tableName = "history") data class HistoryItem( @@ -12,7 +13,7 @@ data class HistoryItem( val author: String, val duration: String, val thumb: String, - val type: String, + val type: DownloadViewModel.Type, val time: Long, val downloadPath: String, val website: String, 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 63909a91..aa31388a 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 @@ -3,7 +3,6 @@ package com.deniscerri.ytdlnis.database.viewmodel import android.app.Activity import android.app.Application import android.content.SharedPreferences -import android.util.Log import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData @@ -35,7 +34,7 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application private var bestVideoFormat: Format private var bestAudioFormat: Format enum class Type { - AUDIO, VIDEO, COMMAND + audio, video, command } init { @@ -79,7 +78,7 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application return repository.getItemByID(id) } - fun createDownloadItemFromResult(resultItem: ResultItem, type: String) : DownloadItem { + fun createDownloadItemFromResult(resultItem: ResultItem, type: Type) : DownloadItem { val embedSubs = sharedPreferences.getBoolean("embed_subtitles", false) val addChapters = sharedPreferences.getBoolean("add_chapters", false) val saveThumb = sharedPreferences.getBoolean("write_thumbnail", false) @@ -97,16 +96,16 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application } - private fun getFormat(resultItem: ResultItem, type: String) : Format { + private fun getFormat(resultItem: ResultItem, type: Type) : Format { when(type) { - "audio" -> { + Type.audio -> { return try { resultItem.formats.last { it.format_note.contains("audio", ignoreCase = true) } }catch (e: Exception){ bestAudioFormat } } - "video" -> { + Type.video -> { return try { resultItem.formats.last { !it.format_note.contains("audio", ignoreCase = true) } }catch (e: Exception){ @@ -119,10 +118,10 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application } } - fun turnResultItemstoDownloadItems(items: List) : List { + fun turnResultItemsToDownloadItems(items: List) : List { val list : MutableList = mutableListOf() items.forEach { - list.add(createDownloadItemFromResult(it!!, "video")) + list.add(createDownloadItemFromResult(it!!, Type.video)) } return list } @@ -150,10 +149,6 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application return result } - fun deleteSingleProcessing(item: DownloadItem) = viewModelScope.launch(Dispatchers.IO) { - repository.deleteSingleProcessing(item) - } - fun deleteProcessing() = viewModelScope.launch(Dispatchers.IO) { repository.deleteProcessing() } @@ -167,7 +162,10 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application val context = getApplication().applicationContext items.forEach { it.status = DownloadRepository.Status.Queued.toString() - repository.update(it) + if (it.id == 0L){ + val id = repository.insert(it) + it.id = id + }else repository.update(it) val workRequest = OneTimeWorkRequestBuilder() .setInputData(Data.Builder().putLong("id", it.id).build()) diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/HistoryViewModel.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/HistoryViewModel.kt index 5a0ae1cf..dbe78d47 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/HistoryViewModel.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/HistoryViewModel.kt @@ -1,14 +1,7 @@ package com.deniscerri.ytdlnis.database.viewmodel import android.app.Application -import android.util.Log -import android.widget.Toast -import androidx.lifecycle.AndroidViewModel -import androidx.lifecycle.LiveData -import androidx.lifecycle.MediatorLiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.Observer -import androidx.lifecycle.viewModelScope +import androidx.lifecycle.* import com.deniscerri.ytdlnis.database.DBManager import com.deniscerri.ytdlnis.database.models.HistoryItem import com.deniscerri.ytdlnis.database.repository.HistoryRepository @@ -31,26 +24,26 @@ class HistoryViewModel(application: Application) : AndroidViewModel(application) repository = HistoryRepository(dao) allItems = repository.items - _items.addSource(allItems, Observer { + _items.addSource(allItems){ filter(queryFilter.value!!, formatFilter.value!!, websiteFilter.value!!, sortType.value!!) - }) - _items.addSource(formatFilter, Observer { + } + _items.addSource(formatFilter){ filter(queryFilter.value!!, formatFilter.value!!, websiteFilter.value!!, sortType.value!!) - }) - _items.addSource(sortType, Observer { + } + _items.addSource(sortType){ filter(queryFilter.value!!, formatFilter.value!!, websiteFilter.value!!, sortType.value!!) - }) - _items.addSource(websiteFilter, Observer { + } + _items.addSource(websiteFilter){ filter(queryFilter.value!!, formatFilter.value!!, websiteFilter.value!!, sortType.value!!) - }) - _items.addSource(queryFilter, Observer { + } + _items.addSource(queryFilter){ filter(queryFilter.value!!, formatFilter.value!!, websiteFilter.value!!, sortType.value!!) - }) + } } fun getFilteredList() : LiveData>{ - return _items; + return _items } fun setSorting(sort: HistorySort){ @@ -69,7 +62,7 @@ class HistoryViewModel(application: Application) : AndroidViewModel(application) formatFilter.value = filter } - fun filter(query : String, format : String, site : String, sort: HistorySort) = viewModelScope.launch(Dispatchers.IO){ + private fun filter(query : String, format : String, site : String, sort: HistorySort) = viewModelScope.launch(Dispatchers.IO){ _items.postValue(repository.getFiltered(query, format, site, sort)) } @@ -94,7 +87,7 @@ class HistoryViewModel(application: Application) : AndroidViewModel(application) } fun update(item: HistoryItem) = viewModelScope.launch(Dispatchers.IO){ - repository.update(item); + repository.update(item) } fun clearDeleted() = viewModelScope.launch(Dispatchers.IO) { diff --git a/app/src/main/java/com/deniscerri/ytdlnis/receiver/ShareActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/receiver/ShareActivity.kt new file mode 100644 index 00000000..89164c9c --- /dev/null +++ b/app/src/main/java/com/deniscerri/ytdlnis/receiver/ShareActivity.kt @@ -0,0 +1,100 @@ +package com.deniscerri.ytdlnis.receiver + +import android.content.Context +import android.content.Intent +import android.graphics.drawable.ColorDrawable +import android.net.Uri +import android.os.Bundle +import android.util.Log +import android.view.WindowManager +import androidx.fragment.app.FragmentManager +import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel +import com.deniscerri.ytdlnis.database.viewmodel.ResultViewModel +import com.deniscerri.ytdlnis.databinding.ActivityMainBinding +import com.deniscerri.ytdlnis.ui.MoreFragment +import java.io.BufferedReader +import java.io.InputStreamReader +import java.io.Reader +import java.nio.charset.Charset +import java.nio.charset.StandardCharsets +import java.util.* +import kotlin.system.exitProcess +import androidx.activity.ComponentActivity +import androidx.core.view.ViewCompat +import androidx.core.view.WindowCompat + +class ShareActivity : ComponentActivity() { + + private lateinit var binding: ActivityMainBinding + lateinit var context: Context + private lateinit var resultViewModel: ResultViewModel + private lateinit var downloadViewModel: DownloadViewModel + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + WindowCompat.setDecorFitsSystemWindows(window, false) + ViewCompat.setOnApplyWindowInsetsListener(window.decorView) { v, insets -> + v.setPadding(0, 0, 0, 0) + insets + } + window.setBackgroundDrawable(ColorDrawable(0)) + window.setLayout( + WindowManager.LayoutParams.MATCH_PARENT, + WindowManager.LayoutParams.MATCH_PARENT + ) + + handleIntents(intent) + } + + override fun onNewIntent(intent: Intent) { + super.onNewIntent(intent) + handleIntents(intent) + } + + private fun handleIntents(intent: Intent) { + val action = intent.action + val type = intent.type + if (Intent.ACTION_SEND == action && type != null) { + Log.e(TAG, action) + moreFragment = MoreFragment() + if (type.equals("application/txt", ignoreCase = true)) { + try { + val uri = intent.getParcelableExtra(Intent.EXTRA_STREAM) + val `is` = contentResolver.openInputStream(uri!!) + val textBuilder = StringBuilder() + val reader: Reader = BufferedReader( + InputStreamReader( + `is`, Charset.forName( + StandardCharsets.UTF_8.name() + ) + ) + ) + var c: Int + while (reader.read().also { c = it } != -1) { + textBuilder.append(c.toChar()) + } + val l = listOf(*textBuilder.toString().split("\n").toTypedArray()) + val lines = LinkedList(l) + } catch (e: Exception) { + e.printStackTrace() + } + } else { + //TODO + } + } + } + + + + private fun exit() { + finishAffinity() + exitProcess(0) + } + + + companion object { + private const val TAG = "ShareActivity" + private lateinit var moreFragment: MoreFragment + private lateinit var fm: FragmentManager + } +} \ No newline at end of file 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 199f964d..a87487a9 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt @@ -130,9 +130,11 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi }else{ downloadAllFabCoordinator!!.visibility = GONE } - }else if (sharedPreferences!!.getBoolean("download_card", true)){ - if(it.size == 1 && !firstBoot && parentFragmentManager.findFragmentByTag("downloadSingleSheet") == null){ - showSingleDownloadSheet(it[0], "audio") + }else if (it.size == 1){ + if (sharedPreferences!!.getBoolean("download_card", true)){ + if(it.size == 1 && !firstBoot && parentFragmentManager.findFragmentByTag("downloadSingleSheet") == null){ + showSingleDownloadSheet(it[0], DownloadViewModel.Type.video) + } } } firstBoot = false @@ -321,8 +323,8 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi } @SuppressLint("ResourceType") - override fun onButtonClick(videoURL: String, type: String?) { - Log.e(TAG, type!! + " " + videoURL) + override fun onButtonClick(videoURL: String, type: DownloadViewModel.Type?) { + Log.e(TAG, type.toString() + " " + videoURL) val item = resultsList!!.find { it?.url == videoURL } Log.e(TAG, resultsList!![0].toString() + " " + videoURL) val btn = recyclerView!!.findViewWithTag("""${item?.url}##$type""") @@ -339,7 +341,7 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi // selectedObjects!!.clear() // selectedObjects!!.add(item!!) //showConfigureSingleDownloadCard(createDownloadItem(item!!, type), item) - showSingleDownloadSheet(item!!, type) + showSingleDownloadSheet(item!!, type!!) } else { // downloadQueue!!.add(vid) // updateDownloadingStatusOnResult(vid, type, true) @@ -350,13 +352,9 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi } } - private fun showSingleDownloadSheet(resultItem : ResultItem, type: String){ - val downloadItem = downloadViewModel.createDownloadItemFromResult(resultItem, type) - downloadViewModel.putDownloadsForProcessing(listOf(resultItem), listOf(downloadItem)).observe(viewLifecycleOwner) { - downloadItem.id = it[0] - val bottomSheet = DownloadBottomSheetDialog(downloadItem) - bottomSheet.show(parentFragmentManager, "downloadSingleSheet") - } + private fun showSingleDownloadSheet(resultItem : ResultItem, type: DownloadViewModel.Type){ + val bottomSheet = DownloadBottomSheetDialog(resultItem, type) + bottomSheet.show(parentFragmentManager, "downloadSingleSheet") } @@ -393,7 +391,7 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi downloadFabs!!.visibility = VISIBLE } else { downloadFabs!!.visibility = GONE - if (resultsList!!.size > 1 && resultsList!![1]!!.playlistTitle.isNotEmpty()) { + if (resultsList!!.size > 1 && resultsList!![1]!!.playlistTitle != getString(R.string.trendingPlaylist)) { downloadAllFabCoordinator!!.visibility = VISIBLE } } @@ -405,7 +403,7 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi } catch (e: Exception) {""} if (viewIdName.isNotEmpty()) { if (viewIdName == "downloadSelected") { - val downloadList = downloadViewModel.turnResultItemstoDownloadItems(selectedObjects!!) + val downloadList = downloadViewModel.turnResultItemsToDownloadItems(selectedObjects!!) downloadViewModel.putDownloadsForProcessing(selectedObjects!!, downloadList).observe(viewLifecycleOwner) { it.forEachIndexed { i, itemID -> downloadList[i].id = itemID @@ -415,7 +413,7 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi } } if (viewIdName == "downloadAll") { - val downloadList = downloadViewModel.turnResultItemstoDownloadItems(resultsList!!) + val downloadList = downloadViewModel.turnResultItemsToDownloadItems(resultsList!!) downloadViewModel.putDownloadsForProcessing(resultsList!!, downloadList).observe(viewLifecycleOwner) { it.forEachIndexed { i, itemID -> downloadList[i].id = itemID diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/ConfigureDownloadBottomSheetDialog.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/ConfigureDownloadBottomSheetDialog.kt index 1472db06..076deca5 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/ConfigureDownloadBottomSheetDialog.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/ConfigureDownloadBottomSheetDialog.kt @@ -12,6 +12,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.viewpager2.widget.ViewPager2 import com.deniscerri.ytdlnis.R import com.deniscerri.ytdlnis.database.models.DownloadItem +import com.deniscerri.ytdlnis.database.models.ResultItem import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel import com.deniscerri.ytdlnis.database.viewmodel.ResultViewModel import com.google.android.material.bottomsheet.BottomSheetBehavior @@ -24,23 +25,17 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel.Type -class ConfigureDownloadBottomSheetDialog(private val downloadItem: DownloadItem) : BottomSheetDialogFragment() { +class ConfigureDownloadBottomSheetDialog(private val resultItem: ResultItem, private val type: Type) : BottomSheetDialogFragment() { private lateinit var tabLayout: TabLayout private lateinit var viewPager2: ViewPager2 private lateinit var fragmentAdapter : DownloadFragmentAdapter - private lateinit var currentItem : DownloadItem private lateinit var downloadViewModel: DownloadViewModel private lateinit var resultViewModel: ResultViewModel - private val audioDownloadItem =clone(downloadItem) - private val videoDownloadItem = clone(downloadItem) - private val commandDownloadItem = clone(downloadItem) - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) downloadViewModel = ViewModelProvider(this)[DownloadViewModel::class.java] resultViewModel = ViewModelProvider(this)[ResultViewModel::class.java] - currentItem = downloadViewModel.cloneDownloadItem(downloadItem) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -61,23 +56,23 @@ class ConfigureDownloadBottomSheetDialog(private val downloadItem: DownloadItem) val fragmentManager = parentFragmentManager fragmentAdapter = DownloadFragmentAdapter( - audioDownloadItem,videoDownloadItem,commandDownloadItem, + resultItem, fragmentManager, lifecycle ) viewPager2.adapter = fragmentAdapter viewPager2.isSaveFromParentEnabled = false - when(downloadItem.type) { - "audio" -> { + when(type) { + Type.audio -> { tabLayout.selectTab(tabLayout.getTabAt(0)) viewPager2.setCurrentItem(0, false) } - "video" -> { + Type.video -> { tabLayout.selectTab(tabLayout.getTabAt(1)) viewPager2.setCurrentItem(1, false) } - "command" -> { + Type.command -> { tabLayout.selectTab(tabLayout.getTabAt(2)) viewPager2.setCurrentItem(2, false) } @@ -110,18 +105,29 @@ class ConfigureDownloadBottomSheetDialog(private val downloadItem: DownloadItem) val ok = view.findViewById