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