diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png index bae97906..c968cf27 100644 Binary files a/app/src/main/ic_launcher-playstore.png and b/app/src/main/ic_launcher-playstore.png differ 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 1c5cc718..b257a111 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 @@ -182,11 +182,14 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application private fun getFormat(formats: List, type: Type) : Format { when(type) { Type.audio -> { - return try { - cloneFormat(formats.last { it.format_note.contains("audio", ignoreCase = true) }) - }catch (e: Exception){ - bestAudioFormat - } + return cloneFormat ( + try { + formats.last { it.format_note.contains("audio", ignoreCase = true) } + }catch (e: Exception){ + bestAudioFormat + } + ) + } Type.video -> { return cloneFormat( 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 1820996c..0b5793f0 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 @@ -30,6 +30,7 @@ import com.deniscerri.ytdlnis.database.models.Format import com.deniscerri.ytdlnis.database.models.ResultItem import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel.Type +import com.deniscerri.ytdlnis.database.viewmodel.ResultViewModel import com.deniscerri.ytdlnis.databinding.FragmentHomeBinding import com.deniscerri.ytdlnis.util.FileUtil import com.deniscerri.ytdlnis.util.UiUtil @@ -48,6 +49,7 @@ class DownloadAudioFragment(private var resultItem: ResultItem, private var curr private var fragmentView: View? = null private var activity: Activity? = null private lateinit var downloadViewModel : DownloadViewModel + private lateinit var resultViewModel : ResultViewModel private lateinit var fileUtil : FileUtil private lateinit var uiUtil : UiUtil @@ -66,6 +68,8 @@ 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] + resultViewModel = ViewModelProvider(this)[ResultViewModel::class.java] + fileUtil = FileUtil() uiUtil = UiUtil(fileUtil) return fragmentView @@ -123,8 +127,9 @@ class DownloadAudioFragment(private var resultItem: ResultItem, private var curr File(fileUtil.formatPath(downloadItem.downloadPath)).freeSpace ) - - var formats = resultItem.formats.filter { it.format_note.contains("audio", ignoreCase = true) } + var formats = mutableListOf() + formats.addAll(resultItem.formats.filter { it.format_note.contains("audio", ignoreCase = true) }) + val audioFormats = resources.getStringArray(R.array.audio_formats) val containers = requireContext().resources.getStringArray(R.array.audio_containers) val containerPreference = sharedPreferences.getString("audio_format", getString(R.string.defaultValue)) @@ -132,36 +137,37 @@ class DownloadAudioFragment(private var resultItem: ResultItem, private var curr val containerAutoCompleteTextView = view.findViewById(R.id.container_textview) + if (formats.isEmpty()) { + audioFormats.forEach { formats.add(Format(it, containerPreference!!,"","", "",0, it)) } + } val formatCard = view.findViewById(R.id.format_card_constraintLayout) - if (formats.isEmpty()) { - formatCard.visibility = View.GONE - view.findViewById(R.id.audio_quality_title).visibility = View.GONE - } else { - val chosenFormat = downloadItem.format - uiUtil.populateFormatCard(formatCard, chosenFormat) - val listener = object : OnFormatClickListener { - override fun onFormatClick(allFormats: List, item: Format) { - downloadItem.format = item - if (containers.contains(item.container)){ - downloadItem.format.container = item.container - containerAutoCompleteTextView.setText(item.container, false) - }else{ - downloadItem.format.container = containers[0] - containerAutoCompleteTextView.setText(containers[0], false) + val chosenFormat = downloadItem.format + uiUtil.populateFormatCard(formatCard, chosenFormat) + val listener = object : OnFormatClickListener { + override fun onFormatClick(allFormats: List, item: Format) { + downloadItem.format = item + uiUtil.populateFormatCard(formatCard, item) + if (containers.contains(item.container)){ + downloadItem.format.container = item.container + containerAutoCompleteTextView.setText(item.container, false) + } + lifecycleScope.launch { + withContext(Dispatchers.IO){ + resultItem.formats.removeAll(formats.toSet()) + resultItem.formats.addAll(allFormats) + resultViewModel.update(resultItem) } - uiUtil.populateFormatCard(formatCard, item) - formats = allFormats } + formats = allFormats.toMutableList() } - formatCard.setOnClickListener{_ -> - formats.forEach { - Log.e("aa", it.toString()) - } - val bottomSheet = FormatSelectionBottomSheetDialog(downloadItem, formats, listener) - bottomSheet.show(parentFragmentManager, "formatSheet") + } + formatCard.setOnClickListener{_ -> + formats.forEach { + Log.e("aa", it.toString()) } - + val bottomSheet = FormatSelectionBottomSheetDialog(downloadItem, formats, listener) + bottomSheet.show(parentFragmentManager, "formatSheet") } diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt index d7f87a3a..b37ab6b8 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt @@ -137,7 +137,6 @@ class DownloadVideoFragment(private val resultItem: ResultItem, private var curr val containerPreference = sharedPreferences.getString("video_format", getString(R.string.defaultValue)) if (formats.isEmpty()) { - videoFormats.forEach { formats.add(Format(it, containerPreference!!,"","", "",0, it)) } } @@ -152,12 +151,11 @@ class DownloadVideoFragment(private val resultItem: ResultItem, private var curr if (containers.contains(item.container)){ downloadItem.format.container = item.container containerAutoCompleteTextView.setText(item.container, false) - }else{ - containerAutoCompleteTextView.setText(containers[0], false) } lifecycleScope.launch { withContext(Dispatchers.IO){ - resultItem.formats = ArrayList(allFormats) + resultItem.formats.removeAll(formats.toSet()) + resultItem.formats.addAll(allFormats) resultViewModel.update(resultItem) } } @@ -165,7 +163,7 @@ class DownloadVideoFragment(private val resultItem: ResultItem, private var curr uiUtil.populateFormatCard(formatCard, item) } } - formatCard.setOnClickListener{_ -> + formatCard.setOnClickListener{ val bottomSheet = FormatSelectionBottomSheetDialog(downloadItem, formats, listener) bottomSheet.show(parentFragmentManager, "formatSheet") } @@ -219,8 +217,8 @@ class DownloadVideoFragment(private val resultItem: ResultItem, private var curr downloadItem.SaveThumb = saveThumbnail.isChecked } - val sponsorblock = view.findViewById(R.id.sponsorblock_filters) - sponsorblock!!.setOnClickListener { + val sponsorBlock = view.findViewById(R.id.sponsorblock_filters) + sponsorBlock!!.setOnClickListener { val builder = MaterialAlertDialogBuilder(requireContext()) builder.setTitle(getString(R.string.select_sponsorblock_filtering)) val values = resources.getStringArray(R.array.sponsorblock_settings_values) diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/CancelledDownloadsFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/CancelledDownloadsFragment.kt index d61f2220..8d0c3a7d 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/CancelledDownloadsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/CancelledDownloadsFragment.kt @@ -108,15 +108,18 @@ class CancelledDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClic author!!.text = item.author // BUTTON ---------------------------------- - val buttonLayout = bottomSheet.findViewById(R.id.downloads_download_button_layout) - val btn = buttonLayout!!.findViewById(R.id.downloads_download_button_type) + val btn = bottomSheet.findViewById(R.id.downloads_download_button_type) - if (item.type == DownloadViewModel.Type.audio) { - btn.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_music) - } else if (item.type == DownloadViewModel.Type.video) { - btn.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_video) - }else{ - btn.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_terminal) + when (item.type) { + DownloadViewModel.Type.audio -> { + btn!!.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_music) + } + DownloadViewModel.Type.video -> { + btn!!.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_video) + } + else -> { + btn!!.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_terminal) + } } val time = bottomSheet.findViewById(R.id.time) diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ErroredDownloadsFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ErroredDownloadsFragment.kt index 1ff1482b..85dbf455 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ErroredDownloadsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ErroredDownloadsFragment.kt @@ -108,15 +108,18 @@ class ErroredDownloadsFragment() : Fragment(), GenericDownloadAdapter.OnItemClic author!!.text = item.author // BUTTON ---------------------------------- - val buttonLayout = bottomSheet.findViewById(R.id.downloads_download_button_layout) - val btn = buttonLayout!!.findViewById(R.id.downloads_download_button_type) + val btn = bottomSheet.findViewById(R.id.downloads_download_button_type) - if (item.type == DownloadViewModel.Type.audio) { - btn.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_music) - } else if (item.type == DownloadViewModel.Type.video) { - btn.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_video) - }else{ - btn.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_terminal) + when (item.type) { + DownloadViewModel.Type.audio -> { + btn!!.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_music) + } + DownloadViewModel.Type.video -> { + btn!!.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_video) + } + else -> { + btn!!.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_terminal) + } } val time = bottomSheet.findViewById(R.id.time) diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/HistoryFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/HistoryFragment.kt index 2c5142bf..d4a6c22f 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/HistoryFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/HistoryFragment.kt @@ -408,19 +408,18 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener{ author!!.text = item.author // BUTTON ---------------------------------- - val buttonLayout = bottomSheet!!.findViewById(R.id.downloads_download_button_layout) - val btn = buttonLayout!!.findViewById(R.id.downloads_download_button_type) + val btn = bottomSheet!!.findViewById(R.id.downloads_download_button_type) if (item.type == DownloadViewModel.Type.audio) { - if (isPresent) btn.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_music_downloaded) else btn.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_music) + if (isPresent) btn!!.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_music_downloaded) else btn!!.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_music) } else if (item.type == DownloadViewModel.Type.video) { - if (isPresent) btn.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_video_downloaded) else btn.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_video) + if (isPresent) btn!!.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_video_downloaded) else btn!!.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_video) }else{ - btn.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_terminal) + btn!!.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_terminal) } if (isPresent){ - btn.setOnClickListener { + btn!!.setOnClickListener { uiUtil!!.shareFileIntent(requireContext(),item.downloadPath) } } diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/QueuedDownloadsFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/QueuedDownloadsFragment.kt index 79d59db7..86e7b59c 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/QueuedDownloadsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/QueuedDownloadsFragment.kt @@ -116,15 +116,18 @@ class QueuedDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickLi author!!.text = item.author // BUTTON ---------------------------------- - val buttonLayout = bottomSheet.findViewById(R.id.downloads_download_button_layout) - val btn = buttonLayout!!.findViewById(R.id.downloads_download_button_type) + val btn = bottomSheet.findViewById(R.id.downloads_download_button_type) - if (item.type == DownloadViewModel.Type.audio) { - btn.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_music) - } else if (item.type == DownloadViewModel.Type.video) { - btn.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_video) - }else{ - btn.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_terminal) + when (item.type) { + DownloadViewModel.Type.audio -> { + btn!!.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_music) + } + DownloadViewModel.Type.video -> { + btn!!.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_video) + } + else -> { + btn!!.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_terminal) + } } val time = bottomSheet.findViewById(R.id.time) diff --git a/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt b/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt index fe5857a6..0e8b4c5c 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt @@ -129,7 +129,9 @@ class DownloadWorker( DownloadViewModel.Type.audio -> { request.addOption("-x") var audioQualityId : String = downloadItem.format.format_id - if (audioQualityId.isBlank() || audioQualityId == "0" || audioQualityId == context.getString(R.string.best_quality)) audioQualityId = "" + if (audioQualityId.isBlank() || audioQualityId == "0") audioQualityId = "" + else if (audioQualityId == context.getString(R.string.worst_quality)) audioQualityId = "worstaudio" + if (audioQualityId.isNotBlank()){ request.addOption("-f", audioQualityId) } diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml similarity index 100% rename from app/src/main/res/drawable-v24/ic_launcher_foreground.xml rename to app/src/main/res/drawable/ic_launcher_foreground.xml diff --git a/app/src/main/res/layout/download_card.xml b/app/src/main/res/layout/download_card.xml index 420fde2a..030dde5b 100644 --- a/app/src/main/res/layout/download_card.xml +++ b/app/src/main/res/layout/download_card.xml @@ -11,7 +11,7 @@ android:layout_width="0dp" app:shapeAppearance="@style/ShapeAppearanceOverlay.Avatar" android:layout_height="wrap_content" - android:layout_margin="10dp" + android:padding="10dp" android:checkable="true" android:clickable="true" android:focusable="true" @@ -86,6 +86,13 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + + app:layout_constraintTop_toBottomOf="@+id/barrier"> diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 00000000..bbd3e021 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index 6f3b755b..7ff31669 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,6 +1,6 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index d4b91061..9e095cd9 100644 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 00000000..9e095cd9 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png index 9caa44b2..dca1e264 100644 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 00000000..dca1e264 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 6b6fd12d..3173af87 100644 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 00000000..3173af87 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 8ca4cf2e..6815665e 100644 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 00000000..6815665e Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 7b456e26..35d57100 100644 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 00000000..35d57100 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 9faa24c7..2334c6c4 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -28,6 +28,11 @@ @string/best_quality + + @string/worst_quality + @string/best_quality + + @string/sponsorblock_nonmusic @string/sponsorblock_sponsors