Merge pull request #1434 from Bnyro/master

use bottom sheets for all player options
This commit is contained in:
Bnyro 2022-10-01 11:53:59 +02:00 committed by GitHub
commit 9476736bd3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 44 additions and 36 deletions

View File

@ -63,6 +63,7 @@ import com.github.libretube.ui.base.BaseFragment
import com.github.libretube.ui.dialogs.AddToPlaylistDialog
import com.github.libretube.ui.dialogs.DownloadDialog
import com.github.libretube.ui.dialogs.ShareDialog
import com.github.libretube.ui.views.BottomSheet
import com.github.libretube.util.AutoPlayHelper
import com.github.libretube.util.BackgroundHelper
import com.github.libretube.util.ImageHelper
@ -426,9 +427,8 @@ class PlayerFragment : BaseFragment() {
subtitleCodesList += it.code!!
}
MaterialAlertDialogBuilder(requireContext())
.setTitle(R.string.captions)
.setItems(subtitlesNamesList.toTypedArray()) { _, index ->
BottomSheet()
.setSimpleItems(subtitlesNamesList) { index ->
val newParams = if (index != 0) {
// caption selected
@ -449,7 +449,7 @@ class PlayerFragment : BaseFragment() {
// set the new caption language
trackSelector.setParameters(newParams)
}
.show()
.show(childFragmentManager)
}
override fun onQualityClicked() {
@ -458,11 +458,10 @@ class PlayerFragment : BaseFragment() {
// Dialog for quality selection
val lastPosition = exoPlayer.currentPosition
MaterialAlertDialogBuilder(requireContext())
.setTitle(R.string.choose_quality_dialog)
.setItems(
videosNameArray
) { _, which ->
BottomSheet()
.setSimpleItems(
videosNameArray.toList()
) { which ->
if (
videosNameArray[which] == getString(R.string.hls) ||
videosNameArray[which] == "LBRY HLS"
@ -477,7 +476,7 @@ class PlayerFragment : BaseFragment() {
}
exoPlayer.seekTo(lastPosition)
}
.show()
.show(childFragmentManager)
}
}

View File

@ -4,6 +4,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.FragmentManager
import com.github.libretube.databinding.PlaybackBottomSheetBinding
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
@ -32,4 +33,9 @@ class PlaybackSpeedSheet(
onChange.invoke(binding.speed.value, value)
}
}
fun show(fragmentManager: FragmentManager) = show(
fragmentManager,
null
)
}

View File

@ -4,6 +4,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.FragmentManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.github.libretube.databinding.BottomSheetBinding
import com.github.libretube.obj.BottomSheetItem
@ -31,7 +32,7 @@ open class BottomSheet : BottomSheetDialogFragment() {
binding.optionsRecycler.adapter = BottomSheetAdapter(items, listener)
}
fun setItems(items: List<BottomSheetItem>, listener: (index: Int) -> Unit) {
fun setItems(items: List<BottomSheetItem>, listener: (index: Int) -> Unit) = apply {
this.items = items
this.listener = { index ->
listener.invoke(index)
@ -39,11 +40,16 @@ open class BottomSheet : BottomSheetDialogFragment() {
}
}
fun setSimpleItems(titles: List<String>, listener: (index: Int) -> Unit) {
fun setSimpleItems(titles: List<String>, listener: (index: Int) -> Unit) = apply {
this.items = titles.map { BottomSheetItem(it) }
this.listener = { index ->
listener.invoke(index)
dialog?.dismiss()
}
}
fun show(fragmentManager: FragmentManager) = show(
fragmentManager,
null
)
}

View File

@ -24,7 +24,6 @@ import com.google.android.exoplayer2.trackselection.TrackSelector
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout
import com.google.android.exoplayer2.ui.StyledPlayerView
import com.google.android.exoplayer2.util.RepeatModeUtil
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import kotlin.math.roundToInt
@SuppressLint("ClickableViewAccessibility")
@ -58,7 +57,7 @@ internal class CustomExoPlayerView(
true
)
val playbackSpeed = PreferenceHelper.getString(
private val playbackSpeed = PreferenceHelper.getString(
PreferenceKeys.PLAYBACK_SPEED,
"1"
).replace("F", "")
@ -323,68 +322,66 @@ internal class CustomExoPlayerView(
}
}
fun onAutoplayClicked() {
private fun onAutoplayClicked() {
// autoplay options dialog
MaterialAlertDialogBuilder(context)
.setTitle(R.string.player_autoplay)
.setItems(
arrayOf(
BottomSheet()
.setSimpleItems(
listOf(
context.getString(R.string.enabled),
context.getString(R.string.disabled)
)
) { _, index ->
) { index ->
when (index) {
0 -> autoplayEnabled = true
1 -> autoplayEnabled = false
}
}
.show()
.show(childFragmentManager)
}
fun onPlaybackSpeedClicked() {
private fun onPlaybackSpeedClicked() {
PlaybackSpeedSheet { speed, pitch ->
player?.playbackParameters = PlaybackParameters(
speed,
pitch
)
}.show(childFragmentManager, null)
}.show(childFragmentManager)
}
fun onResizeModeClicked() {
private fun onResizeModeClicked() {
// switching between original aspect ratio (black bars) and zoomed to fill device screen
val aspectRatioModeNames = context.resources?.getStringArray(R.array.resizeMode)
?.toList().orEmpty()
val aspectRatioModes = arrayOf(
val aspectRatioModes = listOf(
AspectRatioFrameLayout.RESIZE_MODE_FIT,
AspectRatioFrameLayout.RESIZE_MODE_ZOOM,
AspectRatioFrameLayout.RESIZE_MODE_FILL
)
MaterialAlertDialogBuilder(context)
.setTitle(R.string.aspect_ratio)
.setItems(aspectRatioModeNames) { _, index ->
BottomSheet()
.setSimpleItems(aspectRatioModeNames) { index ->
resizeMode = aspectRatioModes[index]
}
.show()
.show(childFragmentManager)
}
fun onRepeatModeClicked() {
val repeatModeNames = arrayOf(
private fun onRepeatModeClicked() {
val repeatModeNames = listOf(
context.getString(R.string.repeat_mode_none),
context.getString(R.string.repeat_mode_current)
)
val repeatModes = arrayOf(
val repeatModes = listOf(
RepeatModeUtil.REPEAT_TOGGLE_MODE_NONE,
RepeatModeUtil.REPEAT_TOGGLE_MODE_ALL
)
// repeat mode options dialog
MaterialAlertDialogBuilder(context)
.setTitle(R.string.repeat_mode)
.setItems(repeatModeNames) { _, index ->
BottomSheet()
.setSimpleItems(repeatModeNames) { index ->
player?.repeatMode = repeatModes[index]
}
.show()
.show(childFragmentManager)
}
}