summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
author Govinda Wasserman <gwasserman@google.com> 2024-12-13 19:34:20 -0500
committer Govinda Wasserman <gwasserman@google.com> 2024-12-13 19:41:51 -0500
commit5fd6cf8ddc2025504e322b3bb1174556a200d33b (patch)
treef1be69d1ebc00b845a49ee33835d0f217acfc308 /java
parenteffd3e6c1bba8d5d5ce8047b9a1e455816fcd4b3 (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')
-rw-r--r--java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/composable/ShareouselComposable.kt14
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,