forked from recloudstream/cloudstream
Fix selecting online and local subtitles on Android TV
This commit is contained in:
parent
9e66245066
commit
1e83d21db4
1 changed files with 20 additions and 5 deletions
|
@ -58,6 +58,7 @@ import kotlinx.android.synthetic.main.player_select_source_and_subs.*
|
||||||
import kotlinx.android.synthetic.main.player_select_source_and_subs.subtitles_click_settings
|
import kotlinx.android.synthetic.main.player_select_source_and_subs.subtitles_click_settings
|
||||||
import kotlinx.android.synthetic.main.player_select_tracks.*
|
import kotlinx.android.synthetic.main.player_select_tracks.*
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
|
|
||||||
class GeneratorPlayer : FullScreenPlayer() {
|
class GeneratorPlayer : FullScreenPlayer() {
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -115,10 +116,11 @@ class GeneratorPlayer : FullScreenPlayer() {
|
||||||
|
|
||||||
override fun onTracksInfoChanged() {
|
override fun onTracksInfoChanged() {
|
||||||
val tracks = player.getVideoTracks()
|
val tracks = player.getVideoTracks()
|
||||||
player_tracks_btt?.isVisible = tracks.allVideoTracks.size > 1 || tracks.allAudioTracks.size > 1
|
player_tracks_btt?.isVisible =
|
||||||
|
tracks.allVideoTracks.size > 1 || tracks.allAudioTracks.size > 1
|
||||||
// Only set the preferred language if it is available.
|
// Only set the preferred language if it is available.
|
||||||
// Otherwise it may give some users audio track init failed!
|
// Otherwise it may give some users audio track init failed!
|
||||||
if (tracks.allAudioTracks.any { it.language == preferredAudioTrackLanguage }){
|
if (tracks.allAudioTracks.any { it.language == preferredAudioTrackLanguage }) {
|
||||||
player.setPreferredAudioTrack(preferredAudioTrackLanguage)
|
player.setPreferredAudioTrack(preferredAudioTrackLanguage)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -602,8 +604,20 @@ class GeneratorPlayer : FullScreenPlayer() {
|
||||||
subtitleList.setItemChecked(subtitleIndex, true)
|
subtitleList.setItemChecked(subtitleIndex, true)
|
||||||
|
|
||||||
subtitleList.setOnItemClickListener { _, _, which, _ ->
|
subtitleList.setOnItemClickListener { _, _, which, _ ->
|
||||||
subtitleIndex = which
|
if (which > currentSubtitles.size) {
|
||||||
subtitleList.setItemChecked(which, true)
|
// Since android TV is funky the setOnItemClickListener will be triggered
|
||||||
|
// instead of setOnClickListener when selecting. To override this we programmatically
|
||||||
|
// click the view when selecting an item outside the list.
|
||||||
|
|
||||||
|
// Cheeky way of getting the view at that position to click it
|
||||||
|
// to avoid keeping track of the various footers.
|
||||||
|
// getChildAt() gives null :(
|
||||||
|
val child = subtitleList.adapter.getView(which, null, subtitleList)
|
||||||
|
child?.performClick()
|
||||||
|
} else {
|
||||||
|
subtitleIndex = which
|
||||||
|
subtitleList.setItemChecked(which, true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceDialog.cancel_btt?.setOnClickListener {
|
sourceDialog.cancel_btt?.setOnClickListener {
|
||||||
|
@ -762,7 +776,8 @@ class GeneratorPlayer : FullScreenPlayer() {
|
||||||
ArrayAdapter<String>(ctx, R.layout.sort_bottom_single_choice)
|
ArrayAdapter<String>(ctx, R.layout.sort_bottom_single_choice)
|
||||||
// audioArrayAdapter.add(ctx.getString(R.string.no_subtitles))
|
// audioArrayAdapter.add(ctx.getString(R.string.no_subtitles))
|
||||||
audioArrayAdapter.addAll(currentAudioTracks.mapIndexed { index, format ->
|
audioArrayAdapter.addAll(currentAudioTracks.mapIndexed { index, format ->
|
||||||
format.label ?: format.language?.let { fromTwoLettersToLanguage(it) } ?: index.toString()
|
format.label ?: format.language?.let { fromTwoLettersToLanguage(it) }
|
||||||
|
?: index.toString()
|
||||||
})
|
})
|
||||||
|
|
||||||
audioList.adapter = audioArrayAdapter
|
audioList.adapter = audioArrayAdapter
|
||||||
|
|
Loading…
Reference in a new issue