From 5fd6cf8ddc2025504e322b3bb1174556a200d33b Mon Sep 17 00:00:00 2001 From: Govinda Wasserman Date: Fri, 13 Dec 2024 19:34:20 -0500 Subject: 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 --- .../payloadtoggle/ui/composable/ShareouselComposable.kt | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'java/src/com') 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, -- cgit v1.2.3-59-g8ed1b