diff --git a/app/src/main/java/com/github/libretube/ui/dialogs/DownloadPlaylistDialog.kt b/app/src/main/java/com/github/libretube/ui/dialogs/DownloadPlaylistDialog.kt index 7cadde1bf..5f2dd2137 100644 --- a/app/src/main/java/com/github/libretube/ui/dialogs/DownloadPlaylistDialog.kt +++ b/app/src/main/java/com/github/libretube/ui/dialogs/DownloadPlaylistDialog.kt @@ -23,6 +23,8 @@ class DownloadPlaylistDialog : DialogFragment() { private lateinit var playlistName: String private lateinit var playlistType: PlaylistType + private val availableLanguages = LocaleHelper.getAvailableLocales() + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -41,7 +43,6 @@ class DownloadPlaylistDialog : DialogFragment() { } val possibleAudioQualities = resources.getStringArray(R.array.audioQualityBitrates) .toList() - val availableLanguages = LocaleHelper.getAvailableLocales() binding.videoSpinner.items = listOf(getString(R.string.no_video)) + possibleVideoQualities binding.audioSpinner.items = listOf(getString(R.string.no_audio)) + possibleAudioQualities @@ -57,31 +58,12 @@ class DownloadPlaylistDialog : DialogFragment() { .setView(binding.root) .setPositiveButton(R.string.download) { _, _ -> with(binding) { - val maxVideoQuality = if (videoSpinner.selectedItemPosition >= 1) { - possibleVideoQualities[videoSpinner.selectedItemPosition - 1] - .getWhileDigit() - } else { - null - } - - val maxAudioQuality = if (audioSpinner.selectedItemPosition >= 1) { - possibleAudioQualities[audioSpinner.selectedItemPosition - 1] - .getWhileDigit() - } else { - null - } - - val captionLanguage = if (subtitleSpinner.selectedItemPosition >= 1) { - availableLanguages[subtitleSpinner.selectedItemPosition - 1].code - } else { - null - } - - val audioLanguage = if (audioLanguageSpinner.selectedItemPosition >= 1) { - availableLanguages[audioLanguageSpinner.selectedItemPosition - 1].code - } else { - null - } + val maxVideoQuality = possibleVideoQualities.getOrNull(videoSpinner.selectedItemPosition - 1) + .getWhileDigit() + val maxAudioQuality = possibleAudioQualities.getOrNull(audioSpinner.selectedItemPosition - 1) + .getWhileDigit() + val captionLanguage = availableLanguages.getOrNull(subtitleSpinner.selectedItemPosition - 1)?.code + val audioLanguage = availableLanguages.getOrNull(audioLanguageSpinner.selectedItemPosition - 1)?.code saveSelections(binding) @@ -109,36 +91,34 @@ class DownloadPlaylistDialog : DialogFragment() { } private fun saveSelections(binding: DialogDownloadPlaylistBinding) { - binding.audioSpinner.selectedItemPosition.let { index -> - val item = binding.audioSpinner.items[index].takeIf { index != 0 } + binding.audioSpinner.getSelectionIfNotFirst().let { item -> PreferenceHelper.putString(PLAYLIST_DOWNLOAD_AUDIO_QUALITY, item.orEmpty()) } - binding.videoSpinner.selectedItemPosition.let { index -> - val item = binding.videoSpinner.items[index].takeIf { index != 0 } + binding.videoSpinner.getSelectionIfNotFirst().let { item -> PreferenceHelper.putString(PLAYLIST_DOWNLOAD_VIDEO_QUALITY, item.orEmpty()) } binding.audioLanguageSpinner.selectedItemPosition.let { index -> - val item = binding.audioLanguageSpinner.items[index].takeIf { index != 0 } - PreferenceHelper.putString(PLAYLIST_DOWNLOAD_AUDIO_LANGUAGE, item.orEmpty()) + val language = availableLanguages.getOrNull(index - 1) + PreferenceHelper.putString(PLAYLIST_DOWNLOAD_AUDIO_LANGUAGE, language?.code.orEmpty()) } binding.subtitleSpinner.selectedItemPosition.let { index -> - val item = binding.subtitleSpinner.items[index].takeIf { index != 0 } - PreferenceHelper.putString(PLAYLIST_DOWNLOAD_CAPTION_LANGUAGE, item.orEmpty()) + val language = availableLanguages.getOrNull(index - 1) + PreferenceHelper.putString(PLAYLIST_DOWNLOAD_CAPTION_LANGUAGE, language?.code.orEmpty()) } } private fun restoreSelections(binding: DialogDownloadPlaylistBinding) { val videoQuality = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_VIDEO_QUALITY, "") - binding.videoSpinner.selectedItemPosition = binding.videoSpinner.items.indexOf(videoQuality).takeIf { it != -1 } ?: 0 + binding.videoSpinner.setSelection(videoQuality) val audioQuality = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_AUDIO_QUALITY, "") - binding.audioSpinner.selectedItemPosition = binding.audioSpinner.items.indexOf(audioQuality).takeIf { it != -1 } ?: 0 + binding.audioSpinner.setSelection(audioQuality) val audioLanguage = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_AUDIO_LANGUAGE, "") - binding.audioLanguageSpinner.selectedItemPosition = binding.audioLanguageSpinner.items.indexOf(audioLanguage).takeIf { it != -1 } ?: 0 + binding.audioLanguageSpinner.setSelection(audioLanguage) val captionLanguage = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_CAPTION_LANGUAGE, "") - binding.subtitleSpinner.selectedItemPosition = binding.subtitleSpinner.items.indexOf(captionLanguage).takeIf { it != -1 } ?: 0 + binding.subtitleSpinner.setSelection(captionLanguage) } companion object { diff --git a/app/src/main/java/com/github/libretube/ui/dialogs/SubmitDeArrowDialog.kt b/app/src/main/java/com/github/libretube/ui/dialogs/SubmitDeArrowDialog.kt index dbe630084..933b56fe9 100644 --- a/app/src/main/java/com/github/libretube/ui/dialogs/SubmitDeArrowDialog.kt +++ b/app/src/main/java/com/github/libretube/ui/dialogs/SubmitDeArrowDialog.kt @@ -86,7 +86,7 @@ class SubmitDeArrowDialog: DialogFragment() { val userID = PreferenceHelper.getSponsorBlockUserID() val userAgent = TextUtils.getUserAgent(context) - val title = binding.dearrowTitle.text + val title = binding.dearrowTitle.selectedItem .takeIf { it.isNotEmpty() && binding.titleCheckbox.isChecked } ?.let { DeArrowSubmitTitle(it) } val thumbnail = binding.thumbnailTime.text.toString().parseDurationString() diff --git a/app/src/main/java/com/github/libretube/ui/views/DropdownMenu.kt b/app/src/main/java/com/github/libretube/ui/views/DropdownMenu.kt index f51ce7441..b2715caf0 100644 --- a/app/src/main/java/com/github/libretube/ui/views/DropdownMenu.kt +++ b/app/src/main/java/com/github/libretube/ui/views/DropdownMenu.kt @@ -38,15 +38,7 @@ class DropdownMenu( get() = adapter.getPosition(binding.autoCompleteTextView.text.toString()) set(index) = binding.autoCompleteTextView.setText(adapter.getItem(index), false) - val text get() = binding.autoCompleteTextView.text.toString() - - override fun setEnabled(enabled: Boolean) { - binding.textInputLayout.isEnabled = enabled - } - - override fun isEnabled(): Boolean { - return binding.textInputLayout.isEnabled - } + val selectedItem get() = binding.autoCompleteTextView.text.toString() var typingEnabled: Boolean set(enabled) { @@ -54,6 +46,21 @@ class DropdownMenu( } get() = binding.autoCompleteTextView.inputType != InputType.TYPE_NULL + override fun setEnabled(enabled: Boolean) { + binding.textInputLayout.isEnabled = enabled + } + + override fun isEnabled() = binding.textInputLayout.isEnabled + + fun setSelection(item: String) { + val itemIndex = items.indexOf(item) + if (itemIndex != -1) selectedItemPosition = itemIndex + } + + fun getSelectionIfNotFirst(): String? { + return selectedItem.takeIf { selectedItemPosition != 0 } + } + init { context.obtainStyledAttributes(attributeSet, R.styleable.DropdownMenu, 0, 0).use { binding.textInputLayout.hint = it.getString(R.styleable.DropdownMenu_hint)