diff --git a/app/schemas/com.deniscerri.ytdlnis.database.DBManager/1.json b/app/schemas/com.deniscerri.ytdlnis.database.DBManager/1.json index cb7d9710..37ed69b5 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": "2c0fdec170ca54d97ef928dfe28a6992", + "identityHash": "db5c9df3e43ddd5a5131bbd372a7c92b", "entities": [ { "tableName": "results", @@ -74,7 +74,7 @@ }, { "tableName": "formats", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `itemId` INTEGER NOT NULL, `format_id` TEXT NOT NULL, `container` TEXT NOT NULL, `filesize` INTEGER NOT NULL, `format_note` TEXT NOT NULL, `encoding` TEXT NOT NULL)", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `itemId` INTEGER NOT NULL, `format_id` TEXT NOT NULL, `container` TEXT NOT NULL, `filesize` INTEGER NOT NULL, `format_note` TEXT NOT NULL)", "fields": [ { "fieldPath": "id", @@ -111,12 +111,6 @@ "columnName": "format_note", "affinity": "TEXT", "notNull": true - }, - { - "fieldPath": "encoding", - "columnName": "encoding", - "affinity": "TEXT", - "notNull": true } ], "primaryKey": { @@ -392,7 +386,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, '2c0fdec170ca54d97ef928dfe28a6992')" + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'db5c9df3e43ddd5a5131bbd372a7c92b')" ] } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f987cde1..6d19a90a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -19,7 +19,9 @@ android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme" > + android:enableOnBackInvokedCallback="true" + android:theme="@style/AppTheme" + tools:targetApi="tiramisu"> 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 0086b5d4..5e91d4e4 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/ConfigureMultipleDownloadsAdapter.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/adapter/ConfigureMultipleDownloadsAdapter.kt @@ -4,10 +4,12 @@ import android.app.Activity import android.graphics.Color import android.os.Handler import android.os.Looper +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.core.content.ContextCompat import androidx.recyclerview.widget.AsyncDifferConfig @@ -16,12 +18,13 @@ import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import com.deniscerri.ytdlnis.R import com.deniscerri.ytdlnis.database.models.DownloadItem +import com.deniscerri.ytdlnis.database.models.ResultItem import com.google.android.material.button.MaterialButton import com.google.android.material.card.MaterialCardView +import com.google.android.material.progressindicator.LinearProgressIndicator import com.squareup.picasso.Picasso -class ConfigureMultipleDownloadsAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : - ListAdapter(AsyncDifferConfig.Builder(DIFF_CALLBACK).build()) { +class ConfigureMultipleDownloadsAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(DIFF_CALLBACK).build()) { private val onItemClickListener: OnItemClickListener private val activity: Activity @@ -30,18 +33,17 @@ class ConfigureMultipleDownloadsAdapter(onItemClickListener: OnItemClickListener this.activity = activity } - class ViewHolder(itemView: View, onItemClickListener: OnItemClickListener?) : - RecyclerView.ViewHolder(itemView) { + class ViewHolder(itemView: View, onItemClickListener: OnItemClickListener?) : RecyclerView.ViewHolder(itemView) { val cardView: MaterialCardView init { - cardView = itemView.findViewById(R.id.download_multiple_card_view) + cardView = itemView.findViewById(R.id.download_card_view) } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val cardView = LayoutInflater.from(parent.context) - .inflate(R.layout.home_download_multiple_card, parent, false) + .inflate(R.layout.download_card, parent, false) return ViewHolder(cardView, onItemClickListener) } @@ -49,7 +51,7 @@ class ConfigureMultipleDownloadsAdapter(onItemClickListener: OnItemClickListener val item = getItem(position) val card = holder.cardView // THUMBNAIL ---------------------------------- - val thumbnail = card.findViewById(R.id.result_image_view) + val thumbnail = card.findViewById(R.id.downloads_image_view) val imageURL = item!!.thumb if (imageURL.isNotEmpty()) { val uiHandler = Handler(Looper.getMainLooper()) @@ -62,7 +64,7 @@ class ConfigureMultipleDownloadsAdapter(onItemClickListener: OnItemClickListener } // TITLE ---------------------------------- - val itemTitle = card.findViewById(R.id.result_title) + val itemTitle = card.findViewById(R.id.title) var title = item.title if (title.length > 100) { title = title.substring(0, 40) + "..." @@ -73,20 +75,16 @@ class ConfigureMultipleDownloadsAdapter(onItemClickListener: OnItemClickListener val author = card.findViewById(R.id.author) author.text = item.author - // Format - val format = card.findViewById(R.id.format) - format.text = item.ext - - // Quality - val quality = card.findViewById(R.id.quality) - quality.text = item.formatDesc + // Container ---------------------------------- + val container = card.findViewById(R.id.container) + container.text = item.ext // File Size val fileSize = card.findViewById(R.id.filesize) fileSize.text = item.filesize // Type Icon Button - val btn = card.findViewById(R.id.download_type) + val btn = card.findViewById(R.id.downloads_download_button_type) when(item.type) { "audio" -> { @@ -105,21 +103,20 @@ class ConfigureMultipleDownloadsAdapter(onItemClickListener: OnItemClickListener } } - interface OnItemClickListener { + fun onButtonClick(videoURL: String, type: String?) fun onCardClick(itemID: Long) } companion object { - private val DIFF_CALLBACK: DiffUtil.ItemCallback = - object : DiffUtil.ItemCallback() { - override fun areItemsTheSame(oldItem: DownloadItem, newItem: DownloadItem): Boolean { - return oldItem.id === newItem.id - } - - override fun areContentsTheSame(oldItem: DownloadItem, newItem: DownloadItem): Boolean { - return oldItem.url == newItem.url - } + private val DIFF_CALLBACK: DiffUtil.ItemCallback = object : DiffUtil.ItemCallback() { + override fun areItemsTheSame(oldItem: DownloadItem, newItem: DownloadItem): Boolean { + return oldItem.id === newItem.id } + + override fun areContentsTheSame(oldItem: DownloadItem, newItem: DownloadItem): Boolean { + return oldItem.url == newItem.url && oldItem.title == newItem.title && oldItem.author == newItem.author + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/dao/DownloadDao.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/dao/DownloadDao.kt index b62d5ab0..544e5ce9 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/dao/DownloadDao.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/dao/DownloadDao.kt @@ -9,14 +9,17 @@ import com.deniscerri.ytdlnis.util.FileUtil @Dao interface DownloadDao { - @Query("SELECT * FROM downloads") + @Query("SELECT * FROM downloads ORDER BY status") fun getAllDownloads() : LiveData> @Query("SELECT * FROM downloads WHERE status='Active'") fun getActiveDownloads() : LiveData> @Query("SELECT * FROM downloads WHERE status='Queued'") - fun getQueuedDownloads() : List + fun getQueuedDownloads() : LiveData> + + @Query("SELECT * FROM downloads WHERE status='Processing'") + fun getProcessingDownloads() : LiveData> @Query("SELECT * FROM downloads WHERE workID=:workID") fun getDownloadByWorkId(workID: Int) : DownloadItem @@ -33,6 +36,9 @@ interface DownloadDao { @Delete suspend fun delete(item: DownloadItem) + @Query("DELETE FROM downloads WHERE status='Processing'") + suspend fun deleteProcessing() + @Update(onConflict = OnConflictStrategy.REPLACE) suspend fun update(item: DownloadItem) diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/models/Format.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/models/Format.kt index 3651dbbe..279384b6 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/models/Format.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/models/Format.kt @@ -7,16 +7,14 @@ import com.google.gson.annotations.SerializedName @Entity(tableName = "formats") data class Format( @PrimaryKey(autoGenerate = true) - var id: Long, - var itemId: Long, + var id: Long = -1, + var itemId: Long = 0, @SerializedName(value = "format_id", alternate = ["itag"]) - val format_id: String, + val format_id: String = "", @SerializedName(value = "ext", alternate = ["container"]) - val container: String, + val container: String = "", @SerializedName(value = "filesize", alternate = ["clen", "filesize_approx"]) - val filesize: Long, + val filesize: Long = 0, @SerializedName(value = "format_note", alternate = ["resolution", "audioQuality"]) - val format_note: String, - @SerializedName(value = "encoding", alternate = ["vcodec", "acodec", "video_ext"]) - val encoding: String + val format_note: String = "" ) \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/DownloadRepository.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/DownloadRepository.kt index aa0e6932..1703a2c8 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/DownloadRepository.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/DownloadRepository.kt @@ -3,11 +3,16 @@ package com.deniscerri.ytdlnis.database.repository import android.util.Log import androidx.lifecycle.LiveData import com.deniscerri.ytdlnis.database.dao.DownloadDao +import com.deniscerri.ytdlnis.database.dao.FormatDao import com.deniscerri.ytdlnis.database.models.DownloadItem +import com.deniscerri.ytdlnis.database.models.Format +import com.deniscerri.ytdlnis.database.models.ResultItem class DownloadRepository(private val downloadDao: DownloadDao) { val allDownloads : LiveData> = downloadDao.getAllDownloads() val activeDownloads : LiveData> = downloadDao.getActiveDownloads() + val queuedDownloads : LiveData> = downloadDao.getQueuedDownloads() + val processingDownloads : LiveData> = downloadDao.getProcessingDownloads() enum class status { Active, Queued, Errored, Processing @@ -29,9 +34,6 @@ class DownloadRepository(private val downloadDao: DownloadDao) { return downloadDao.getDownloadByWorkId(workID) } - fun getQueuedDownloads() : List{ - return downloadDao.getQueuedDownloads() - } suspend fun setDownloadStatus(item: DownloadItem, status: status){ item.status = status.toString() @@ -42,4 +44,7 @@ class DownloadRepository(private val downloadDao: DownloadDao) { return downloadDao.getDownloadById(id) } + suspend fun deleteProcessing(){ + downloadDao.deleteProcessing() + } } \ No newline at end of file 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 98ef2526..d4f8b73c 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 @@ -1,24 +1,35 @@ package com.deniscerri.ytdlnis.database.viewmodel +import android.app.Activity import android.app.Application import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope +import com.deniscerri.ytdlnis.App import com.deniscerri.ytdlnis.database.DBManager import com.deniscerri.ytdlnis.database.models.DownloadItem +import com.deniscerri.ytdlnis.database.models.Format +import com.deniscerri.ytdlnis.database.models.ResultItem import com.deniscerri.ytdlnis.database.repository.DownloadRepository import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch class DownloadViewModel(application: Application) : AndroidViewModel(application) { private val repository : DownloadRepository - private val allDownloads : LiveData> + val allDownloads : LiveData> + val queuedDownloads : LiveData> + val activeDownloads : LiveData> + val processingDownloads : LiveData> init { val dao = DBManager.getInstance(application).downloadDao + val formatDao = DBManager.getInstance(application).formatDao repository = DownloadRepository(dao) allDownloads = repository.allDownloads + queuedDownloads = repository.queuedDownloads + activeDownloads = repository.activeDownloads + processingDownloads = repository.processingDownloads } fun startWork(items: List){ @@ -48,4 +59,51 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application fun getItemByID(id: Long) : DownloadItem { return repository.getItemByID(id) } + + fun createDownloadItemFromResult(resultItem: ResultItem, type: String) : DownloadItem { + val sharedPreferences = + getApplication().getSharedPreferences("root_preferences", Activity.MODE_PRIVATE) + val embedSubs = sharedPreferences.getBoolean("embed_subtitles", false) + val addChapters = sharedPreferences.getBoolean("add_chapters", false) + val saveThumb = sharedPreferences.getBoolean("write_thumbnail", false) + + return DownloadItem(0, + resultItem.url, + resultItem.title, + resultItem.author, + resultItem.thumb, + resultItem.duration, + type, + "", "", 0, "", false, + "", resultItem.website, "", resultItem.playlistTitle, embedSubs, addChapters, saveThumb, "", + "", DownloadRepository.status.Processing.toString(), 0 + ) + + } + + fun turnResultItemstoDownloadItems(items: List) : List { + val list : MutableList = mutableListOf() + items.forEach { + list.add(createDownloadItemFromResult(it!!, "video")) + } + return list + } + + fun putDownloadsForProcessing(items: List) : LiveData> { + val result = MutableLiveData>() + viewModelScope.launch(Dispatchers.IO){ + val list : MutableList = mutableListOf() + items.forEachIndexed { i, it -> + val tmpDownloadItem = createDownloadItemFromResult(it!!, "video") + val id = repository.insert(tmpDownloadItem) + list.add(id) + } + result.postValue(list) + } + return result + } + + fun deleteProcessing() = viewModelScope.launch(Dispatchers.IO) { + repository.deleteProcessing() + } } \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/ResultViewModel.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/ResultViewModel.kt index 7f9d577b..2ddb37a1 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/ResultViewModel.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/ResultViewModel.kt @@ -10,6 +10,7 @@ import com.deniscerri.ytdlnis.database.DBManager import com.deniscerri.ytdlnis.database.dao.FormatDao import com.deniscerri.ytdlnis.database.models.Format import com.deniscerri.ytdlnis.database.models.ResultItem +import com.deniscerri.ytdlnis.database.repository.DownloadRepository import com.deniscerri.ytdlnis.database.repository.ResultRepository import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -111,7 +112,7 @@ class ResultViewModel(application: Application) : AndroidViewModel(application) "video" -> { list = list.filter { !it.format_note.contains("audio", ignoreCase = true) } if (list.isEmpty()) { - videoFormats.forEach { formats.add(Format(0, item.id, it, "", 0, it, "")) } + videoFormats.forEach { formats.add(Format(0, item.id, it, "", 0, it)) } return formats } return list @@ -120,7 +121,7 @@ class ResultViewModel(application: Application) : AndroidViewModel(application) val templates = repository.getTemplates() templates.forEach { - formats.add(Format(0, item.id, it.title, "", 0, it.content, "")) + formats.add(Format(0, item.id, it.title, "", 0, it.content)) } return formats } diff --git a/app/src/main/java/com/deniscerri/ytdlnis/service/DownloadInfo.kt b/app/src/main/java/com/deniscerri/ytdlnis/service/DownloadInfo.kt index f166fb6d..54233507 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/service/DownloadInfo.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/service/DownloadInfo.kt @@ -6,13 +6,13 @@ import java.util.* class DownloadInfo { var video: ResultItem? = null var progress = 0 - var downloadQueue: LinkedList? = null + //var downloadQueue: LinkedList? = null var outputLine: String? = null var downloadStatus: String? = null var downloadPath: String? = null var downloadType: String? = null - fun setDownloadQueue(downloadQueue: LinkedList) { - this.downloadQueue = downloadQueue - video = downloadQueue.peek() - } +// fun setDownloadQueue(downloadQueue: LinkedList) { +// this.downloadQueue = downloadQueue +// video = downloadQueue.peek() +// } } \ 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 0d718f8f..afaa9391 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt @@ -23,13 +23,16 @@ import com.deniscerri.ytdlnis.MainActivity import com.deniscerri.ytdlnis.R import com.deniscerri.ytdlnis.adapter.HomeAdapter import com.deniscerri.ytdlnis.database.models.DownloadItem +import com.deniscerri.ytdlnis.database.models.Format import com.deniscerri.ytdlnis.database.models.ResultItem +import com.deniscerri.ytdlnis.database.models.ResultItemWithFormats import com.deniscerri.ytdlnis.database.repository.DownloadRepository import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel import com.deniscerri.ytdlnis.database.viewmodel.ResultViewModel import com.deniscerri.ytdlnis.databinding.FragmentHomeBinding import com.deniscerri.ytdlnis.service.DownloadInfo import com.deniscerri.ytdlnis.ui.downloadcard.DownloadBottomSheetDialog +import com.deniscerri.ytdlnis.ui.downloadcard.DownloadMultipleBottomSheetDialog import com.deniscerri.ytdlnis.util.FileUtil import com.deniscerri.ytdlnis.util.InfoUtil import com.facebook.shimmer.ShimmerFrameLayout @@ -42,6 +45,7 @@ import com.google.android.material.floatingactionbutton.ExtendedFloatingActionBu import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.progressindicator.LinearProgressIndicator import java.util.* +import kotlin.collections.ArrayList class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickListener { private var progressBar: LinearProgressIndicator? = null @@ -166,12 +170,9 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi homeFabs = view.findViewById(R.id.home_fabs) downloadFabs = homeFabs!!.findViewById(R.id.download_selected_coordinator) downloadAllFabCoordinator = homeFabs!!.findViewById(R.id.download_all_coordinator) - val musicFab = downloadFabs!!.findViewById(R.id.audio_fab) - val videoFab = downloadFabs!!.findViewById(R.id.video_fab) - musicFab.tag = "SELECT##audio" - videoFab.tag = "SELECT##video" - musicFab.setOnClickListener(this) - videoFab.setOnClickListener(this) + val downloadSelectedFab = downloadFabs!!.findViewById(R.id.download_selected_fab) + downloadSelectedFab.tag = "downloadSelected" + downloadSelectedFab.setOnClickListener(this) val downloadAllFab = downloadAllFabCoordinator!!.findViewById(R.id.download_all_fab) downloadAllFab.tag = "downloadAll" @@ -359,25 +360,11 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi } private fun showSingleDownloadSheet(resultItem : ResultItem, type: String){ - val sharedPreferences = - requireContext().getSharedPreferences("root_preferences", Activity.MODE_PRIVATE) - val embedSubs = sharedPreferences.getBoolean("embed_subtitles", false) - val addChapters = sharedPreferences.getBoolean("add_chapters", false) - val saveThumb = sharedPreferences.getBoolean("write_thumbnail", false) - - - val downloadItem = DownloadItem(0, - resultItem.url, - resultItem.title, - resultItem.author, - resultItem.thumb, - resultItem.duration, - type, - "", "", 0, "", false, - "", resultItem.website, "", resultItem.playlistTitle, embedSubs, addChapters, saveThumb, "", - "", DownloadRepository.status.Processing.toString(), 0 + val item = ResultItemWithFormats( + resultItem, + resultViewModel.getFormats(resultItem, "video") as ArrayList ) - + val downloadItem = downloadViewModel.createDownloadItemFromResult(resultItem, "video") downloadViewModel.insertDownload(downloadItem).observe(viewLifecycleOwner) { downloadItem.id = it val bottomSheet = DownloadBottomSheetDialog(downloadItem) @@ -428,51 +415,27 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi override fun onClick(v: View) { val viewIdName: String = try { v.tag.toString() - } catch (e: Exception) { - "" - } + } catch (e: Exception) {""} if (viewIdName.isNotEmpty()) { - if (viewIdName.contains("audio") || viewIdName.contains("video")) { - val buttonData = - viewIdName.split("##".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() - if (buttonData[0] == "SELECT") { - initSelectedDownload(buttonData[1]) + if (viewIdName == "downloadSelected") { + val downloadList = downloadViewModel.turnResultItemstoDownloadItems(selectedObjects!!) + downloadViewModel.putDownloadsForProcessing(selectedObjects!!).observe(viewLifecycleOwner) { + it.forEachIndexed { i, itemID -> + downloadList[i].id = itemID + } + val bottomSheet = DownloadMultipleBottomSheetDialog(downloadList) + bottomSheet.show(parentFragmentManager, "downloadMultipleSheet") } } if (viewIdName == "downloadAll") { -// //remove previously selected -// for (i in selectedObjects!!.indices) { -// val vid = findVideo( -// selectedObjects!![i].url -// ) -// homeAdapter!!.notifyItemChanged(resultsList!!.indexOf(vid)) -// } -// selectedObjects = ArrayList() -// downloadFabs!!.visibility = GONE -// bottomSheet = BottomSheetDialog(fragmentContext!!) -// bottomSheet!!.requestWindowFeature(Window.FEATURE_NO_TITLE) -// bottomSheet!!.setContentView(R.layout.home_download_all_bottom_sheet) -// val first = bottomSheet!!.findViewById(R.id.first_textinput) -// first!!.editText!!.setText(1.toString()) -// val last = bottomSheet!!.findViewById(R.id.last_textinput) -// last!!.editText!!.setText(resultsList!!.size.toString()) -// val audio = bottomSheet!!.findViewById