diff options
author | 2024-12-13 19:34:20 -0500 | |
---|---|---|
committer | 2024-12-13 19:41:51 -0500 | |
commit | 5fd6cf8ddc2025504e322b3bb1174556a200d33b (patch) | |
tree | f1be69d1ebc00b845a49ee33835d0f217acfc308 /java/src/com | |
parent | effd3e6c1bba8d5d5ce8047b9a1e455816fcd4b3 (diff) |
Fix Shareousel crash when recomposing
Recomposition could cause a crash when initial position was no longer in
the LazyRow. This fixes it by encapsulating the problematic array
indexing within the remember block so that it is only performed on the
first composition when it is guaranteed to be a valid index position.
Test: Manual test using ShareTest
BUG: 383852288
Flag: EXEMPT Bugfix
Change-Id: Ie6b322d449ddc5c83d9d4e481967c2511b165290
Diffstat (limited to 'java/src/com')
-rw-r--r-- | java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/composable/ShareouselComposable.kt | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/composable/ShareouselComposable.kt b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/composable/ShareouselComposable.kt index 5b368084..c51021a8 100644 --- a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/composable/ShareouselComposable.kt +++ b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/composable/ShareouselComposable.kt @@ -33,9 +33,9 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.itemsIndexed -import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.selection.toggleable import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.systemGestureExclusion @@ -130,15 +130,17 @@ private fun PreviewCarousel(previews: PreviewsModel, viewModel: ShareouselViewMo // Do not compose the list until we have measured values if (measurements == PreviewCarouselMeasurements.UNMEASURED) return@Box - val carouselState = - rememberLazyListState( - prefetchStrategy = remember { ShareouselLazyListPrefetchStrategy() }, - initialFirstVisibleItemIndex = previews.startIdx, - initialFirstVisibleItemScrollOffset = + val prefetchStrategy = remember { ShareouselLazyListPrefetchStrategy() } + val carouselState = remember { + LazyListState( + prefetchStrategy = prefetchStrategy, + firstVisibleItemIndex = previews.startIdx, + firstVisibleItemScrollOffset = measurements.scrollOffsetToCenter( previewModel = previews.previewModels[previews.startIdx] ), ) + } LazyRow( state = carouselState, |