From 7b4fe7ff40a6fa1be626158bbce1d1310cbbfd54 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 27 Mar 2026 14:27:39 +0000 Subject: [PATCH] Fix IndexOutOfBoundsException in story viewer back press. --- .../securesms/stories/viewer/StoryViewerFragment.kt | 10 +++++----- .../stories/viewer/StoryViewerPagerAdapter.kt | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerFragment.kt index 8abfd78040..62198cae82 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerFragment.kt @@ -91,7 +91,7 @@ class StoryViewerFragment : lifecycleDisposable.bindTo(viewLifecycleOwner) lifecycleDisposable += viewModel.state.observeOn(AndroidSchedulers.mainThread()).subscribe { state -> if (state.noPosts) { - onBackPressed(adapter.getRecipientId(storyPager.currentItem)) + onBackPressed(adapter.getRecipientIdOrNull(storyPager.currentItem)) } adapter.setPages(state.pages) @@ -102,7 +102,7 @@ class StoryViewerFragment : pagerOnPageSelectedLock = false if (state.page >= state.pages.size) { - onBackPressed(adapter.getRecipientId(storyPager.currentItem)) + onBackPressed(adapter.getRecipientIdOrNull(storyPager.currentItem)) lifecycleDisposable.clear() } } @@ -155,14 +155,14 @@ class StoryViewerFragment : viewLifecycleOwner, object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { - onBackPressed(adapter.getRecipientId(storyPager.currentItem)) + onBackPressed(adapter.getRecipientIdOrNull(storyPager.currentItem)) } } ) } - private fun onBackPressed(currentId: RecipientId) { - if (viewModel.getInitialRecipientId() != currentId) { + private fun onBackPressed(currentId: RecipientId?) { + if (currentId == null || viewModel.getInitialRecipientId() != currentId) { requireActivity().finish() } else { ActivityCompat.finishAfterTransition(requireActivity()) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerPagerAdapter.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerPagerAdapter.kt index 4cfd7ec10a..51de281a34 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerPagerAdapter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerPagerAdapter.kt @@ -28,6 +28,10 @@ class StoryViewerPagerAdapter( return pages[position] } + fun getRecipientIdOrNull(position: Int): RecipientId? { + return pages.getOrNull(position) + } + override fun onAttachedToRecyclerView(recyclerView: RecyclerView) { super.onAttachedToRecyclerView(recyclerView) recyclerView.overScrollMode = RecyclerView.OVER_SCROLL_NEVER