Skip to content

Commit 3901187

Browse files
authored
Merge pull request libre-tube#7135 from Bnyro/master
refactor: simplify download options storing and restoring logic
2 parents 0ec724a + 644f012 commit 3901187

3 files changed

Lines changed: 34 additions & 47 deletions

File tree

app/src/main/java/com/github/libretube/ui/dialogs/DownloadPlaylistDialog.kt

Lines changed: 18 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ class DownloadPlaylistDialog : DialogFragment() {
2323
private lateinit var playlistName: String
2424
private lateinit var playlistType: PlaylistType
2525

26+
private val availableLanguages = LocaleHelper.getAvailableLocales()
27+
2628
override fun onCreate(savedInstanceState: Bundle?) {
2729
super.onCreate(savedInstanceState)
2830

@@ -41,7 +43,6 @@ class DownloadPlaylistDialog : DialogFragment() {
4143
}
4244
val possibleAudioQualities = resources.getStringArray(R.array.audioQualityBitrates)
4345
.toList()
44-
val availableLanguages = LocaleHelper.getAvailableLocales()
4546

4647
binding.videoSpinner.items = listOf(getString(R.string.no_video)) + possibleVideoQualities
4748
binding.audioSpinner.items = listOf(getString(R.string.no_audio)) + possibleAudioQualities
@@ -57,31 +58,12 @@ class DownloadPlaylistDialog : DialogFragment() {
5758
.setView(binding.root)
5859
.setPositiveButton(R.string.download) { _, _ ->
5960
with(binding) {
60-
val maxVideoQuality = if (videoSpinner.selectedItemPosition >= 1) {
61-
possibleVideoQualities[videoSpinner.selectedItemPosition - 1]
62-
.getWhileDigit()
63-
} else {
64-
null
65-
}
66-
67-
val maxAudioQuality = if (audioSpinner.selectedItemPosition >= 1) {
68-
possibleAudioQualities[audioSpinner.selectedItemPosition - 1]
69-
.getWhileDigit()
70-
} else {
71-
null
72-
}
73-
74-
val captionLanguage = if (subtitleSpinner.selectedItemPosition >= 1) {
75-
availableLanguages[subtitleSpinner.selectedItemPosition - 1].code
76-
} else {
77-
null
78-
}
79-
80-
val audioLanguage = if (audioLanguageSpinner.selectedItemPosition >= 1) {
81-
availableLanguages[audioLanguageSpinner.selectedItemPosition - 1].code
82-
} else {
83-
null
84-
}
61+
val maxVideoQuality = possibleVideoQualities.getOrNull(videoSpinner.selectedItemPosition - 1)
62+
.getWhileDigit()
63+
val maxAudioQuality = possibleAudioQualities.getOrNull(audioSpinner.selectedItemPosition - 1)
64+
.getWhileDigit()
65+
val captionLanguage = availableLanguages.getOrNull(subtitleSpinner.selectedItemPosition - 1)?.code
66+
val audioLanguage = availableLanguages.getOrNull(audioLanguageSpinner.selectedItemPosition - 1)?.code
8567

8668
saveSelections(binding)
8769

@@ -109,36 +91,34 @@ class DownloadPlaylistDialog : DialogFragment() {
10991
}
11092

11193
private fun saveSelections(binding: DialogDownloadPlaylistBinding) {
112-
binding.audioSpinner.selectedItemPosition.let { index ->
113-
val item = binding.audioSpinner.items[index].takeIf { index != 0 }
94+
binding.audioSpinner.getSelectionIfNotFirst().let { item ->
11495
PreferenceHelper.putString(PLAYLIST_DOWNLOAD_AUDIO_QUALITY, item.orEmpty())
11596
}
116-
binding.videoSpinner.selectedItemPosition.let { index ->
117-
val item = binding.videoSpinner.items[index].takeIf { index != 0 }
97+
binding.videoSpinner.getSelectionIfNotFirst().let { item ->
11898
PreferenceHelper.putString(PLAYLIST_DOWNLOAD_VIDEO_QUALITY, item.orEmpty())
11999
}
120100
binding.audioLanguageSpinner.selectedItemPosition.let { index ->
121-
val item = binding.audioLanguageSpinner.items[index].takeIf { index != 0 }
122-
PreferenceHelper.putString(PLAYLIST_DOWNLOAD_AUDIO_LANGUAGE, item.orEmpty())
101+
val language = availableLanguages.getOrNull(index - 1)
102+
PreferenceHelper.putString(PLAYLIST_DOWNLOAD_AUDIO_LANGUAGE, language?.code.orEmpty())
123103
}
124104
binding.subtitleSpinner.selectedItemPosition.let { index ->
125-
val item = binding.subtitleSpinner.items[index].takeIf { index != 0 }
126-
PreferenceHelper.putString(PLAYLIST_DOWNLOAD_CAPTION_LANGUAGE, item.orEmpty())
105+
val language = availableLanguages.getOrNull(index - 1)
106+
PreferenceHelper.putString(PLAYLIST_DOWNLOAD_CAPTION_LANGUAGE, language?.code.orEmpty())
127107
}
128108
}
129109

130110
private fun restoreSelections(binding: DialogDownloadPlaylistBinding) {
131111
val videoQuality = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_VIDEO_QUALITY, "")
132-
binding.videoSpinner.selectedItemPosition = binding.videoSpinner.items.indexOf(videoQuality).takeIf { it != -1 } ?: 0
112+
binding.videoSpinner.setSelection(videoQuality)
133113

134114
val audioQuality = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_AUDIO_QUALITY, "")
135-
binding.audioSpinner.selectedItemPosition = binding.audioSpinner.items.indexOf(audioQuality).takeIf { it != -1 } ?: 0
115+
binding.audioSpinner.setSelection(audioQuality)
136116

137117
val audioLanguage = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_AUDIO_LANGUAGE, "")
138-
binding.audioLanguageSpinner.selectedItemPosition = binding.audioLanguageSpinner.items.indexOf(audioLanguage).takeIf { it != -1 } ?: 0
118+
binding.audioLanguageSpinner.setSelection(audioLanguage)
139119

140120
val captionLanguage = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_CAPTION_LANGUAGE, "")
141-
binding.subtitleSpinner.selectedItemPosition = binding.subtitleSpinner.items.indexOf(captionLanguage).takeIf { it != -1 } ?: 0
121+
binding.subtitleSpinner.setSelection(captionLanguage)
142122
}
143123

144124
companion object {

app/src/main/java/com/github/libretube/ui/dialogs/SubmitDeArrowDialog.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ class SubmitDeArrowDialog: DialogFragment() {
8686

8787
val userID = PreferenceHelper.getSponsorBlockUserID()
8888
val userAgent = TextUtils.getUserAgent(context)
89-
val title = binding.dearrowTitle.text
89+
val title = binding.dearrowTitle.selectedItem
9090
.takeIf { it.isNotEmpty() && binding.titleCheckbox.isChecked }
9191
?.let { DeArrowSubmitTitle(it) }
9292
val thumbnail = binding.thumbnailTime.text.toString().parseDurationString()

app/src/main/java/com/github/libretube/ui/views/DropdownMenu.kt

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,21 +38,28 @@ class DropdownMenu(
3838
get() = adapter.getPosition(binding.autoCompleteTextView.text.toString())
3939
set(index) = binding.autoCompleteTextView.setText(adapter.getItem(index), false)
4040

41-
val text get() = binding.autoCompleteTextView.text.toString()
41+
val selectedItem get() = binding.autoCompleteTextView.text.toString()
42+
43+
var typingEnabled: Boolean
44+
set(enabled) {
45+
binding.autoCompleteTextView.inputType = if (enabled) InputType.TYPE_CLASS_TEXT else InputType.TYPE_NULL
46+
}
47+
get() = binding.autoCompleteTextView.inputType != InputType.TYPE_NULL
4248

4349
override fun setEnabled(enabled: Boolean) {
4450
binding.textInputLayout.isEnabled = enabled
4551
}
4652

47-
override fun isEnabled(): Boolean {
48-
return binding.textInputLayout.isEnabled
53+
override fun isEnabled() = binding.textInputLayout.isEnabled
54+
55+
fun setSelection(item: String) {
56+
val itemIndex = items.indexOf(item)
57+
if (itemIndex != -1) selectedItemPosition = itemIndex
4958
}
5059

51-
var typingEnabled: Boolean
52-
set(enabled) {
53-
binding.autoCompleteTextView.inputType = if (enabled) InputType.TYPE_CLASS_TEXT else InputType.TYPE_NULL
54-
}
55-
get() = binding.autoCompleteTextView.inputType != InputType.TYPE_NULL
60+
fun getSelectionIfNotFirst(): String? {
61+
return selectedItem.takeIf { selectedItemPosition != 0 }
62+
}
5663

5764
init {
5865
context.obtainStyledAttributes(attributeSet, R.styleable.DropdownMenu, 0, 0).use {

0 commit comments

Comments
 (0)