diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt index 165d26763..9cdef7810 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt @@ -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) } } diff --git a/app/src/main/java/com/github/libretube/ui/sheets/PlaybackSpeedSheet.kt b/app/src/main/java/com/github/libretube/ui/sheets/PlaybackSpeedSheet.kt index 3d001533d..099641ba5 100644 --- a/app/src/main/java/com/github/libretube/ui/sheets/PlaybackSpeedSheet.kt +++ b/app/src/main/java/com/github/libretube/ui/sheets/PlaybackSpeedSheet.kt @@ -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 + ) } diff --git a/app/src/main/java/com/github/libretube/ui/views/BottomSheet.kt b/app/src/main/java/com/github/libretube/ui/views/BottomSheet.kt index 8838c0337..2e1e30206 100644 --- a/app/src/main/java/com/github/libretube/ui/views/BottomSheet.kt +++ b/app/src/main/java/com/github/libretube/ui/views/BottomSheet.kt @@ -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, listener: (index: Int) -> Unit) { + fun setItems(items: List, 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, listener: (index: Int) -> Unit) { + fun setSimpleItems(titles: List, 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 + ) } diff --git a/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt b/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt index 1324ee5a0..5c3b26935 100644 --- a/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt +++ b/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt @@ -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) } }