Fix IndexOutOfBoundsException in story viewer back press.

This commit is contained in:
Greyson Parrelli
2026-03-27 14:27:39 +00:00
committed by Alex Hart
parent 1ba9793943
commit 7b4fe7ff40
2 changed files with 9 additions and 5 deletions

View File

@@ -91,7 +91,7 @@ class StoryViewerFragment :
lifecycleDisposable.bindTo(viewLifecycleOwner) lifecycleDisposable.bindTo(viewLifecycleOwner)
lifecycleDisposable += viewModel.state.observeOn(AndroidSchedulers.mainThread()).subscribe { state -> lifecycleDisposable += viewModel.state.observeOn(AndroidSchedulers.mainThread()).subscribe { state ->
if (state.noPosts) { if (state.noPosts) {
onBackPressed(adapter.getRecipientId(storyPager.currentItem)) onBackPressed(adapter.getRecipientIdOrNull(storyPager.currentItem))
} }
adapter.setPages(state.pages) adapter.setPages(state.pages)
@@ -102,7 +102,7 @@ class StoryViewerFragment :
pagerOnPageSelectedLock = false pagerOnPageSelectedLock = false
if (state.page >= state.pages.size) { if (state.page >= state.pages.size) {
onBackPressed(adapter.getRecipientId(storyPager.currentItem)) onBackPressed(adapter.getRecipientIdOrNull(storyPager.currentItem))
lifecycleDisposable.clear() lifecycleDisposable.clear()
} }
} }
@@ -155,14 +155,14 @@ class StoryViewerFragment :
viewLifecycleOwner, viewLifecycleOwner,
object : OnBackPressedCallback(true) { object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() { override fun handleOnBackPressed() {
onBackPressed(adapter.getRecipientId(storyPager.currentItem)) onBackPressed(adapter.getRecipientIdOrNull(storyPager.currentItem))
} }
} }
) )
} }
private fun onBackPressed(currentId: RecipientId) { private fun onBackPressed(currentId: RecipientId?) {
if (viewModel.getInitialRecipientId() != currentId) { if (currentId == null || viewModel.getInitialRecipientId() != currentId) {
requireActivity().finish() requireActivity().finish()
} else { } else {
ActivityCompat.finishAfterTransition(requireActivity()) ActivityCompat.finishAfterTransition(requireActivity())

View File

@@ -28,6 +28,10 @@ class StoryViewerPagerAdapter(
return pages[position] return pages[position]
} }
fun getRecipientIdOrNull(position: Int): RecipientId? {
return pages.getOrNull(position)
}
override fun onAttachedToRecyclerView(recyclerView: RecyclerView) { override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
super.onAttachedToRecyclerView(recyclerView) super.onAttachedToRecyclerView(recyclerView)
recyclerView.overScrollMode = RecyclerView.OVER_SCROLL_NEVER recyclerView.overScrollMode = RecyclerView.OVER_SCROLL_NEVER