Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion app/src/main/java/com/github/libretube/api/obj/Subtitle.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.github.libretube.api.obj

import android.content.Context
import com.github.libretube.R
import kotlinx.serialization.Serializable

@Serializable
Expand All @@ -9,4 +11,10 @@ data class Subtitle(
val name: String? = null,
val code: String? = null,
val autoGenerated: Boolean? = null
)
) {
fun getDisplayName(context: Context) = if (autoGenerated != true) {
name!!
} else {
"$name (${context.getString(R.string.auto_generated)})"
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.github.libretube.obj

data class BottomSheetItem(
val title: String,
var title: String,
val drawable: Int? = null,
val getCurrent: () -> String? = { null },
val onClick: () -> Unit = {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@ import com.github.libretube.helpers.IntentHelper
import com.github.libretube.helpers.NavBarHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.helpers.PlayerHelper
import com.github.libretube.helpers.PlayerHelper.autoPlayEnabled
import com.github.libretube.helpers.PlayerHelper.checkForSegments
import com.github.libretube.helpers.PlayerHelper.getVideoStats
import com.github.libretube.helpers.PlayerHelper.isInSegment
Expand Down Expand Up @@ -1404,13 +1403,9 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {

BaseBottomSheet()
.setSimpleItems(
subtitles.map {
if (it.autoGenerated != true) {
it.name!!
} else {
"${it.name} (${getString(R.string.auto_generated)})"
}
}
subtitles.map { it.getDisplayName(requireContext()) },
preselectedItem = subtitles.firstOrNull { it == viewModel.currentSubtitle }
?.getDisplayName(requireContext()) ?: getString(R.string.none)
) { index ->
val subtitle = subtitles.getOrNull(index) ?: return@setSimpleItems
updateCurrentSubtitle(subtitle)
Expand All @@ -1435,9 +1430,8 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {
// Dialog for quality selection
BaseBottomSheet()
.setSimpleItems(
resolutions.map {
if (currentQuality == it.resolution) "${it.name} ✓" else it.name
}
resolutions.map(VideoResolution::name),
preselectedItem = resolutions.firstOrNull { it.resolution == currentQuality }?.name
) { which ->
val newResolution = resolutions[which].resolution
setPlayerResolution(newResolution, true)
Expand All @@ -1463,27 +1457,28 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {
}
val baseBottomSheet = BaseBottomSheet()

if (audioLanguagesAndRoleFlags.isEmpty()) {
baseBottomSheet.setSimpleItems(
listOf(getString(R.string.unknown_or_no_audio)),
null
)
} else if (audioLanguagesAndRoleFlags.size == 1 &&
audioLanguagesAndRoleFlags[0].first == null &&
!PlayerHelper.haveAudioTrackRoleFlagSet(
audioLanguagesAndRoleFlags[0].second
)
if (audioLanguagesAndRoleFlags.isEmpty() || (audioLanguagesAndRoleFlags.size == 1 &&
audioLanguagesAndRoleFlags[0].first == null &&
!PlayerHelper.haveAudioTrackRoleFlagSet(
audioLanguagesAndRoleFlags[0].second
))
) {
// Regardless of audio format or quality, if there is only one audio stream which has
// no language and no role flags, it should mean that there is only a single audio
// track which has no language or track type set in the video played
// Consider it as the default audio track (or unknown)
baseBottomSheet.setSimpleItems(
listOf(getString(R.string.default_or_unknown_audio_track)),
null
preselectedItem = getString(R.string.default_or_unknown_audio_track),
listener = null
)
} else {
baseBottomSheet.setSimpleItems(audioLanguages) { index ->
baseBottomSheet.setSimpleItems(audioLanguages, preselectedItem = audioLanguagesAndRoleFlags.firstOrNull {
val format = viewModel.player.audioFormat
format?.language == it.first && format?.roleFlags == it.second
}?.let {
PlayerHelper.getAudioTrackNameFromFormat(context, it)
},) { index ->
val selectedAudioFormat = audioLanguagesAndRoleFlags[index]
viewModel.trackSelector.updateParameters {
setPreferredAudioLanguage(selectedAudioFormat.first)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.github.libretube.ui.sheets

import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
Expand All @@ -20,6 +21,7 @@ open class BaseBottomSheet : ExpandedBottomSheet() {
private val binding get() = _binding!!

private var title: String? = null
private var preselectedItem: String? = null
private lateinit var items: List<BottomSheetItem>
private lateinit var listener: (index: Int) -> Unit

Expand All @@ -46,6 +48,13 @@ open class BaseBottomSheet : ExpandedBottomSheet() {
}
}

// set the selected item
for (item in items) {
Log.e(item.title, preselectedItem.toString())
}
for (item in items.filter { it.title == preselectedItem }) {
item.title = "${item.title} ✓"
}
binding.optionsRecycler.layoutManager = LinearLayoutManager(requireContext())
binding.optionsRecycler.adapter = BottomSheetAdapter(items, listener)
}
Expand All @@ -72,8 +81,14 @@ open class BaseBottomSheet : ExpandedBottomSheet() {
this.title = title
}

fun setSimpleItems(titles: List<String>, listener: (suspend (index: Int) -> Unit)?) =
fun setSimpleItems(
titles: List<String>,
preselectedItem: String? = null,
listener: (suspend (index: Int) -> Unit)?
) = apply {
setItems(titles.map { BottomSheetItem(it) }, listener)
this.preselectedItem = preselectedItem
}

companion object {
private val titleTextSize = 7f.dpToPx().toFloat()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,8 @@ abstract class CustomExoPlayerView(
if (scrubbingTimeBar && !forceUpdate) return

val currentIndex = PlayerHelper.getCurrentChapterIndex(player.currentPosition, chapters)
val newChapterName = currentIndex?.let { chapters[it].title.trim() } ?: context.getString(R.string.no_chapter)
val newChapterName = currentIndex?.let { chapters[it].title.trim() }
?: context.getString(R.string.no_chapter)
chaptersViewModel.currentChapterIndex.updateIfChanged(currentIndex ?: return)

// change the chapter name textView text to the chapterName
Expand Down Expand Up @@ -601,7 +602,10 @@ abstract class CustomExoPlayerView(
)

BaseBottomSheet()
.setSimpleItems(aspectRatioModeNames) { index ->
.setSimpleItems(
aspectRatioModeNames,
preselectedItem = aspectRatioModeNames[aspectRatioModes.indexOf(resizeMode)]
) { index ->
resizeMode = aspectRatioModes[index]
}
.show(supportFragmentManager)
Expand All @@ -611,7 +615,12 @@ abstract class CustomExoPlayerView(
// repeat mode options dialog
BaseBottomSheet()
.setSimpleItems(
PlayerHelper.repeatModes.map { context.getString(it.second) }
PlayerHelper.repeatModes.map { context.getString(it.second) },
preselectedItem = PlayerHelper.repeatModes
.firstOrNull { it.first == PlayingQueue.repeatMode }
?.second?.let {
context.getString(it)
}
) { index ->
PlayingQueue.repeatMode = PlayerHelper.repeatModes[index].first
}
Expand Down