diff --git a/app/src/main/java/com/github/libretube/ui/adapters/ChannelAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/ChannelAdapter.kt index 1aedd8049..21f713533 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/ChannelAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/ChannelAdapter.kt @@ -10,7 +10,7 @@ import com.github.libretube.databinding.VideoRowBinding import com.github.libretube.extensions.formatShort import com.github.libretube.extensions.setWatchProgressLength import com.github.libretube.extensions.toID -import com.github.libretube.sheets.VideoOptionsBottomSheet +import com.github.libretube.ui.sheets.VideoOptionsBottomSheet import com.github.libretube.ui.viewholders.ChannelViewHolder import com.github.libretube.util.ImageHelper import com.github.libretube.util.NavigationHelper diff --git a/app/src/main/java/com/github/libretube/ui/adapters/PlaylistAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/PlaylistAdapter.kt index 06e88f4b6..0839cf3d9 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/PlaylistAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/PlaylistAdapter.kt @@ -13,7 +13,7 @@ import com.github.libretube.extensions.TAG import com.github.libretube.extensions.setFormattedDuration import com.github.libretube.extensions.setWatchProgressLength import com.github.libretube.extensions.toID -import com.github.libretube.sheets.VideoOptionsBottomSheet +import com.github.libretube.ui.sheets.VideoOptionsBottomSheet import com.github.libretube.ui.viewholders.PlaylistViewHolder import com.github.libretube.util.ImageHelper import com.github.libretube.util.NavigationHelper diff --git a/app/src/main/java/com/github/libretube/ui/adapters/PlaylistsAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/PlaylistsAdapter.kt index 504bc2c0e..819d5600f 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/PlaylistsAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/PlaylistsAdapter.kt @@ -10,7 +10,7 @@ import com.github.libretube.R import com.github.libretube.api.RetrofitInstance import com.github.libretube.databinding.PlaylistsRowBinding import com.github.libretube.extensions.TAG -import com.github.libretube.sheets.PlaylistOptionsBottomSheet +import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet import com.github.libretube.ui.viewholders.PlaylistsViewHolder import com.github.libretube.util.ImageHelper import com.github.libretube.util.NavigationHelper diff --git a/app/src/main/java/com/github/libretube/ui/adapters/SearchAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/SearchAdapter.kt index 255afe162..fcc71b98e 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/SearchAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/SearchAdapter.kt @@ -16,8 +16,8 @@ import com.github.libretube.extensions.formatShort import com.github.libretube.extensions.setFormattedDuration import com.github.libretube.extensions.setWatchProgressLength import com.github.libretube.extensions.toID -import com.github.libretube.sheets.PlaylistOptionsBottomSheet -import com.github.libretube.sheets.VideoOptionsBottomSheet +import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet +import com.github.libretube.ui.sheets.VideoOptionsBottomSheet import com.github.libretube.ui.viewholders.SearchViewHolder import com.github.libretube.util.ImageHelper import com.github.libretube.util.NavigationHelper diff --git a/app/src/main/java/com/github/libretube/ui/adapters/TrendingAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/TrendingAdapter.kt index ddc6a9ece..57f84f3fa 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/TrendingAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/TrendingAdapter.kt @@ -11,7 +11,7 @@ import com.github.libretube.extensions.formatShort import com.github.libretube.extensions.setFormattedDuration import com.github.libretube.extensions.setWatchProgressLength import com.github.libretube.extensions.toID -import com.github.libretube.sheets.VideoOptionsBottomSheet +import com.github.libretube.ui.sheets.VideoOptionsBottomSheet import com.github.libretube.ui.viewholders.SubscriptionViewHolder import com.github.libretube.util.ImageHelper import com.github.libretube.util.NavigationHelper diff --git a/app/src/main/java/com/github/libretube/ui/adapters/WatchHistoryAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/WatchHistoryAdapter.kt index 16e183fca..1fcd4c3d4 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/WatchHistoryAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/WatchHistoryAdapter.kt @@ -9,7 +9,7 @@ import com.github.libretube.db.DatabaseHelper import com.github.libretube.db.obj.WatchHistoryItem import com.github.libretube.extensions.setFormattedDuration import com.github.libretube.extensions.setWatchProgressLength -import com.github.libretube.sheets.VideoOptionsBottomSheet +import com.github.libretube.ui.sheets.VideoOptionsBottomSheet import com.github.libretube.ui.viewholders.WatchHistoryViewHolder import com.github.libretube.util.ImageHelper import com.github.libretube.util.NavigationHelper 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 2babe06ab..165d26763 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 @@ -152,7 +152,6 @@ class PlayerFragment : BaseFragment() { private var token = "" private var relatedStreamsEnabled = true private var autoRotationEnabled = true - private var playbackSpeed = "1F" private var pausePlayerOnScreenOffEnabled = false private var fullscreenOrientationPref = "ratio" private var watchHistoryEnabled = true @@ -256,11 +255,6 @@ class PlayerFragment : BaseFragment() { true ) - playbackSpeed = PreferenceHelper.getString( - PreferenceKeys.PLAYBACK_SPEED, - "1" - ).replace("F", "") // due to old way to handle it (with float) - fullscreenOrientationPref = PreferenceHelper.getString( PreferenceKeys.FULLSCREEN_ORIENTATION, "ratio" @@ -542,9 +536,6 @@ class PlayerFragment : BaseFragment() { } } - // set default playback speed - exoPlayer.setPlaybackSpeed(playbackSpeed.toFloat()) - // share button binding.relPlayerShare.setOnClickListener { val shareDialog = ShareDialog(videoId!!, false, exoPlayer.currentPosition / 1000) diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt index 6adb2cc3e..931d71d9e 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt @@ -15,9 +15,9 @@ import com.github.libretube.constants.IntentData import com.github.libretube.databinding.FragmentPlaylistBinding import com.github.libretube.extensions.TAG import com.github.libretube.extensions.toID -import com.github.libretube.sheets.PlaylistOptionsBottomSheet import com.github.libretube.ui.adapters.PlaylistAdapter import com.github.libretube.ui.base.BaseFragment +import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet import retrofit2.HttpException import java.io.IOException 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 new file mode 100644 index 000000000..3d001533d --- /dev/null +++ b/app/src/main/java/com/github/libretube/ui/sheets/PlaybackSpeedSheet.kt @@ -0,0 +1,35 @@ +package com.github.libretube.ui.sheets + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.github.libretube.databinding.PlaybackBottomSheetBinding +import com.google.android.material.bottomsheet.BottomSheetDialogFragment + +class PlaybackSpeedSheet( + private val onChange: (speed: Float, pitch: Float) -> Unit +) : BottomSheetDialogFragment() { + private lateinit var binding: PlaybackBottomSheetBinding + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = PlaybackBottomSheetBinding.inflate(layoutInflater) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + binding.speed.addOnChangeListener { _, value, _ -> + onChange.invoke(value, binding.pitch.value) + } + + binding.pitch.addOnChangeListener { _, value, _ -> + onChange.invoke(binding.speed.value, value) + } + } +} diff --git a/app/src/main/java/com/github/libretube/sheets/PlaylistOptionsBottomSheet.kt b/app/src/main/java/com/github/libretube/ui/sheets/PlaylistOptionsBottomSheet.kt similarity index 99% rename from app/src/main/java/com/github/libretube/sheets/PlaylistOptionsBottomSheet.kt rename to app/src/main/java/com/github/libretube/ui/sheets/PlaylistOptionsBottomSheet.kt index 21451fa8b..52ad712e6 100644 --- a/app/src/main/java/com/github/libretube/sheets/PlaylistOptionsBottomSheet.kt +++ b/app/src/main/java/com/github/libretube/ui/sheets/PlaylistOptionsBottomSheet.kt @@ -1,4 +1,4 @@ -package com.github.libretube.sheets +package com.github.libretube.ui.sheets import android.os.Bundle import android.text.InputType diff --git a/app/src/main/java/com/github/libretube/sheets/VideoOptionsBottomSheet.kt b/app/src/main/java/com/github/libretube/ui/sheets/VideoOptionsBottomSheet.kt similarity index 98% rename from app/src/main/java/com/github/libretube/sheets/VideoOptionsBottomSheet.kt rename to app/src/main/java/com/github/libretube/ui/sheets/VideoOptionsBottomSheet.kt index 4fa406f94..8c4a49f8c 100644 --- a/app/src/main/java/com/github/libretube/sheets/VideoOptionsBottomSheet.kt +++ b/app/src/main/java/com/github/libretube/ui/sheets/VideoOptionsBottomSheet.kt @@ -1,4 +1,4 @@ -package com.github.libretube.sheets +package com.github.libretube.ui.sheets import android.os.Bundle import android.widget.Toast 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 4bcc4b402..1324ee5a0 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 @@ -5,21 +5,21 @@ import android.content.Context import android.os.Handler import android.os.Looper import android.util.AttributeSet -import android.view.LayoutInflater import android.view.MotionEvent import android.view.View import androidx.fragment.app.FragmentManager import com.github.libretube.R import com.github.libretube.constants.PreferenceKeys -import com.github.libretube.databinding.DialogSliderBinding import com.github.libretube.databinding.DoubleTapOverlayBinding import com.github.libretube.databinding.ExoStyledPlayerControlViewBinding import com.github.libretube.models.interfaces.DoubleTapInterface import com.github.libretube.models.interfaces.PlayerOptionsInterface import com.github.libretube.obj.BottomSheetItem import com.github.libretube.ui.activities.MainActivity +import com.github.libretube.ui.sheets.PlaybackSpeedSheet import com.github.libretube.util.DoubleTapListener import com.github.libretube.util.PreferenceHelper +import com.google.android.exoplayer2.PlaybackParameters import com.google.android.exoplayer2.trackselection.TrackSelector import com.google.android.exoplayer2.ui.AspectRatioFrameLayout import com.google.android.exoplayer2.ui.StyledPlayerView @@ -58,6 +58,11 @@ internal class CustomExoPlayerView( true ) + val playbackSpeed = PreferenceHelper.getString( + PreferenceKeys.PLAYBACK_SPEED, + "1" + ).replace("F", "") + private val seekIncrement = PreferenceHelper.getString( PreferenceKeys.SEEK_INCREMENT, "10.0" @@ -102,6 +107,11 @@ internal class CustomExoPlayerView( initializeAdvancedOptions(context) + player?.playbackParameters = PlaybackParameters( + playbackSpeed.toFloat(), + 1.0f + ) + // locking the player binding.lockPlayer.setOnClickListener { // change the locked/unlocked icon @@ -332,26 +342,12 @@ internal class CustomExoPlayerView( } fun onPlaybackSpeedClicked() { - val playbackSpeedBinding = DialogSliderBinding.inflate( - LayoutInflater.from(context) - ) - playbackSpeedBinding.slider.apply { - valueFrom = 0.25f - valueTo = 4.0f - stepSize = 0.25f - value = player?.playbackParameters?.speed ?: 1f - } - // change playback speed dialog - MaterialAlertDialogBuilder(context) - .setTitle(R.string.change_playback_speed) - .setView(playbackSpeedBinding.root) - .setNegativeButton(R.string.cancel, null) - .setPositiveButton(R.string.okay) { _, _ -> - player?.setPlaybackSpeed( - playbackSpeedBinding.slider.value - ) - } - .show() + PlaybackSpeedSheet { speed, pitch -> + player?.playbackParameters = PlaybackParameters( + speed, + pitch + ) + }.show(childFragmentManager, null) } fun onResizeModeClicked() { diff --git a/app/src/main/res/layout/playback_bottom_sheet.xml b/app/src/main/res/layout/playback_bottom_sheet.xml new file mode 100644 index 000000000..62d1a821d --- /dev/null +++ b/app/src/main/res/layout/playback_bottom_sheet.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 195778668..11f58b235 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -337,6 +337,7 @@ Progressive load interval size A lower value may speed up initial video loading. Default + Pitch Download Service