mirror of
https://github.com/libre-tube/LibreTube.git
synced 2024-12-14 14:20:30 +05:30
Add UI support for audio track types
Co-authored-by: AudricV <74829229+AudricV@users.noreply.github.com>
This commit is contained in:
parent
c052075380
commit
d21daf341d
@ -1348,9 +1348,7 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {
|
||||
trackSelector = DefaultTrackSelector(requireContext())
|
||||
|
||||
trackSelector.updateParameters {
|
||||
setPreferredAudioLanguage(
|
||||
LocaleHelper.getAppLocale().language.lowercase().substring(0, 2)
|
||||
)
|
||||
setPreferredAudioLanguage(LocaleHelper.getAppLocale().isO3Language)
|
||||
}
|
||||
|
||||
exoPlayer = ExoPlayer.Builder(requireContext())
|
||||
@ -1433,21 +1431,59 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {
|
||||
.show(childFragmentManager)
|
||||
}
|
||||
|
||||
private fun getAudioStreamGroups(audioStreams: List<PipedStream>?): Map<String?, List<PipedStream>> {
|
||||
private fun getDisplayTrackType(trackType: String?): String {
|
||||
if (trackType == null) {
|
||||
return getString(R.string.unknown_audio_track_type)
|
||||
}
|
||||
|
||||
return when (trackType.lowercase()) {
|
||||
"descriptive" -> getString(R.string.descriptive_audio_track)
|
||||
"dubbed" -> getString(R.string.dubbed_audio_track)
|
||||
"original" -> getString(R.string.original_or_main_audio_track)
|
||||
else -> getString(R.string.unknown_audio_track_type)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getKeyByAudioStreamGroup(audioStream: PipedStream): String {
|
||||
val nullAudioLocale = audioStream.audioTrackLocale == null
|
||||
if (nullAudioLocale && audioStream.audioTrackType == null) {
|
||||
// A track without a locale set and a track type should be a default track
|
||||
return getString(R.string.default_audio_track)
|
||||
}
|
||||
|
||||
return getString(R.string.audio_track_format).format(
|
||||
if (nullAudioLocale) getString(R.string.unknown_audio_language)
|
||||
else Locale.forLanguageTag(audioStream.audioTrackLocale!!)
|
||||
.getDisplayLanguage(LocaleHelper.getAppLocale())
|
||||
.ifEmpty { getString(R.string.unknown_audio_language) },
|
||||
getDisplayTrackType(audioStream.audioTrackType))
|
||||
}
|
||||
|
||||
private fun getAudioStreamGroups(audioStreams: List<PipedStream>?): Map<String, List<PipedStream>> {
|
||||
return audioStreams.orEmpty()
|
||||
.groupBy { it.audioTrackName }
|
||||
.groupBy { getKeyByAudioStreamGroup(it) }
|
||||
}
|
||||
|
||||
override fun onAudioStreamClicked() {
|
||||
val audioGroups = getAudioStreamGroups(streams.audioStreams)
|
||||
val audioLanguages = audioGroups.map { it.key ?: getString(R.string.default_audio_track) }
|
||||
val audioLanguages = audioGroups.map { it.key }
|
||||
|
||||
BaseBottomSheet()
|
||||
.setSimpleItems(audioLanguages) { index ->
|
||||
val audioStreams = audioGroups.values.elementAt(index)
|
||||
val lang = audioStreams.firstOrNull()?.audioTrackId?.substring(0, 2)
|
||||
val firstAudioStream = audioStreams.firstOrNull()
|
||||
trackSelector.updateParameters {
|
||||
setPreferredAudioLanguage(lang)
|
||||
setPreferredAudioLanguage(firstAudioStream?.audioTrackLocale)
|
||||
setPreferredAudioRoleFlags(
|
||||
if (firstAudioStream?.audioTrackType == null) {
|
||||
C.ROLE_FLAG_MAIN
|
||||
} else when (firstAudioStream.audioTrackType.lowercase()) {
|
||||
"descriptive" -> C.ROLE_FLAG_DESCRIBES_VIDEO
|
||||
"dubbed" -> C.ROLE_FLAG_DUB
|
||||
"original" -> C.ROLE_FLAG_MAIN
|
||||
else -> C.ROLE_FLAG_ALTERNATE
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
.show(childFragmentManager)
|
||||
|
@ -445,6 +445,15 @@
|
||||
<string name="import_format_youtube_csv">YouTube (CSV)</string>
|
||||
<string name="home_tab_content">Home tab content</string>
|
||||
<string name="show_search_suggestions">Show search suggestions</string>
|
||||
<string name="audio_track_format">%1$s - %2$s</string>
|
||||
<string name="unknown_audio_language">Unknown audio language</string>
|
||||
<string name="unknown_audio_track_type">Unknown audio track type</string>
|
||||
<string name="original_or_main_audio_track">original or main</string>
|
||||
<string name="dubbed_audio_track">dubbed</string>
|
||||
<string name="descriptive_audio_track">descriptive</string>
|
||||
<string name="default_or_unknown_audio_track">default or unknown</string>
|
||||
<string name="unknown_or_no_audio">unknown or no audio</string>
|
||||
|
||||
<!-- Notification channel strings -->
|
||||
<string name="download_channel_name">Download Service</string>
|
||||
<string name="download_channel_description">Shows a notification when downloading media.</string>
|
||||
|
Loading…
Reference in New Issue
Block a user