Merge pull request #743 from Bnyro/master

custom playback speed dialog
This commit is contained in:
Bnyro 2022-07-10 10:40:49 +02:00 committed by GitHub
commit b9e5a1ca4b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 44 additions and 38 deletions

View File

@ -90,9 +90,7 @@ import kotlinx.coroutines.launch
import org.chromium.net.CronetEngine
import retrofit2.HttpException
import java.io.IOException
import java.util.*
import java.util.concurrent.Executors
import kotlin.collections.ArrayList
import kotlin.math.abs
var isFullScreen = false
@ -719,6 +717,29 @@ class PlayerFragment : Fragment() {
initializeChapters()
}
// set default playback speed
val playbackSpeed =
PreferenceHelper.getString(requireContext(), "playback_speed", "1F")!!
val playbackSpeeds = context?.resources?.getStringArray(R.array.playbackSpeed)!!
val playbackSpeedValues =
context?.resources?.getStringArray(R.array.playbackSpeedValues)!!
exoPlayer.setPlaybackSpeed(playbackSpeed.toFloat())
val speedIndex = playbackSpeedValues.indexOf(playbackSpeed)
playerBinding.speedText.text = playbackSpeeds[speedIndex]
// change playback speed button
playerBinding.speedText.setOnClickListener {
MaterialAlertDialogBuilder(requireContext())
.setTitle(R.string.change_playback_speed)
.setItems(playbackSpeeds) { _, index ->
// set the new playback speed
val newPlaybackSpeed = playbackSpeedValues[index].toFloat()
exoPlayer.setPlaybackSpeed(newPlaybackSpeed)
playerBinding.speedText.text = playbackSpeeds[index]
}
.show()
}
// Listener for play and pause icon change
exoPlayer.addListener(object : Player.Listener {
override fun onIsPlayingChanged(isPlaying: Boolean) {
@ -1095,7 +1116,7 @@ class PlayerFragment : Fragment() {
}
}
playerBinding.qualityLinLayout.setOnClickListener {
playerBinding.qualityText.setOnClickListener {
// Dialog for quality selection
val builder: MaterialAlertDialogBuilder? = activity?.let {
MaterialAlertDialogBuilder(it)
@ -1130,13 +1151,8 @@ class PlayerFragment : Fragment() {
}
private fun createExoPlayer(view: View) {
val playbackSpeed =
PreferenceHelper.getString(requireContext(), "playback_speed", "1F")?.toFloat()
// multiply by thousand: s -> ms
val bufferingGoal =
PreferenceHelper.getString(requireContext(), "buffering_goal", "50")?.toInt()!! * 1000
val seekIncrement =
PreferenceHelper.getString(requireContext(), "seek_increment", "5")?.toLong()!! * 1000
val cronetEngine: CronetEngine = CronetHelper.getCronetEngine()
val cronetDataSourceFactory: CronetDataSource.Factory =
@ -1168,13 +1184,9 @@ class PlayerFragment : Fragment() {
exoPlayer = ExoPlayer.Builder(view.context)
.setMediaSourceFactory(DefaultMediaSourceFactory(dataSourceFactory))
.setLoadControl(loadControl)
.setSeekBackIncrementMs(seekIncrement)
.setSeekForwardIncrementMs(seekIncrement)
.build()
exoPlayer.setAudioAttributes(audioAttributes, true)
exoPlayer.setPlaybackSpeed(playbackSpeed!!)
}
private fun initializePlayerNotification(c: Context) {

View File

@ -74,34 +74,31 @@
android:id="@+id/aspect_ratio_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="12dp"
android:layout_marginHorizontal="5dp"
android:background="#00FFFFFF"
android:padding="@dimen/exo_icon_padding"
android:src="@drawable/ic_aspect_ratio" />
<LinearLayout
android:id="@+id/quality_linLayout"
<TextView
android:id="@+id/speed_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:layout_marginHorizontal="5dp"
android:layout_gravity="center"
android:padding="@dimen/exo_icon_padding"
android:text="1x"
android:textColor="#FFFFFF" />
<TextView
android:id="@+id/quality_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="5dp"
android:layout_gravity="center"
android:padding="@dimen/exo_icon_padding"
android:text="@string/hls"
android:textColor="#FFFFFF" />
<ImageView
android:id="@+id/quality_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/exo_icon_padding"
android:src="@drawable/ic_arrow_down"
app:tint="@android:color/white" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
@ -183,10 +180,6 @@
android:id="@id/exo_subtitle"
style="@style/ExoStyledControls.Button.Bottom.CC" />
<ImageButton
android:id="@id/exo_settings"
style="@style/ExoStyledControls.Button.Bottom.Settings" />
<ImageButton
android:id="@+id/fullscreen"
style="@style/ExoStyledControls.Button.Bottom.FullScreen"

View File

@ -357,7 +357,7 @@
android:id="@+id/player"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/colorSurface"
android:background="@android:color/black"
app:layout_constraintBottom_toBottomOf="@id/main_container"
app:layout_constraintStart_toStartOf="@id/main_container"
app:layout_constraintTop_toTopOf="@id/main_container"

View File

@ -230,4 +230,5 @@
<string name="turnInternetOn">Please connect to the internet by turning on WiFi or mobile data.</string>
<string name="open">Open …</string>
<string name="chapters">Chapters</string>
<string name="change_playback_speed">Playback speed</string>
</resources>