Merge pull request #5933 from Bnyro/master

feat: automatically scroll to current chapter
This commit is contained in:
Bnyro 2024-04-23 14:10:57 +02:00 committed by GitHub
commit 885a19c708
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -7,6 +7,7 @@ import android.os.Looper
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.ViewTreeObserver
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.media3.common.util.UnstableApi import androidx.media3.common.util.UnstableApi
@ -39,11 +40,7 @@ class ChaptersBottomSheet : UndimmedBottomSheet() {
val binding = _binding ?: return val binding = _binding ?: return
handler.postDelayed(this, 200) handler.postDelayed(this, 200)
val player = playerViewModel.player ?: return val currentIndex = getCurrentIndex() ?: return
val currentIndex = PlayerHelper.getCurrentChapterIndex(
player.currentPosition,
playerViewModel.chapters
) ?: return
val adapter = binding.optionsRecycler.adapter as ChaptersAdapter val adapter = binding.optionsRecycler.adapter as ChaptersAdapter
adapter.updateSelectedPosition(currentIndex) adapter.updateSelectedPosition(currentIndex)
@ -61,6 +58,17 @@ class ChaptersBottomSheet : UndimmedBottomSheet() {
} }
binding.optionsRecycler.adapter = adapter binding.optionsRecycler.adapter = adapter
binding.optionsRecycler.viewTreeObserver.addOnGlobalLayoutListener(
object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
val currentIndex = getCurrentIndex() ?: return
binding.optionsRecycler.scrollToPosition(currentIndex)
binding.optionsRecycler.viewTreeObserver.removeOnGlobalLayoutListener(this)
}
}
)
binding.bottomSheetTitle.text = context?.getString(R.string.chapters) binding.bottomSheetTitle.text = context?.getString(R.string.chapters)
binding.bottomSheetTitleLayout.isVisible = true binding.bottomSheetTitleLayout.isVisible = true
@ -72,6 +80,15 @@ class ChaptersBottomSheet : UndimmedBottomSheet() {
updatePosition.run() updatePosition.run()
} }
private fun getCurrentIndex(): Int? {
val player = playerViewModel.player ?: return null
return PlayerHelper.getCurrentChapterIndex(
player.currentPosition,
playerViewModel.chapters
)
}
override fun getSheetMaxHeightPx() = playerViewModel.maxSheetHeightPx override fun getSheetMaxHeightPx() = playerViewModel.maxSheetHeightPx
override fun getDragHandle() = binding.dragHandle override fun getDragHandle() = binding.dragHandle