Skip to content

Commit 2fac004

Browse files
m-bertj-piasecki
authored andcommitted
[Android] Use asReversed instead of reversed (#3598)
## Description Some of our users experience crashes that `reversed` is not defined: ``` java.lang.NoSuchMethodError: No virtual method reversed()Ljava/util/List; ``` This PR changes `reversed` occurrences to either `asReversed` (if possible), or `asReversed().toList()`, if array can be modified. Closes #3594 ## Test plan Tested on expo-example (mostly _transformations_, _multitap_).
1 parent 7a988f7 commit 2fac004

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

packages/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ class GestureHandlerOrchestrator(
207207
}
208208

209209
// Clear all awaiting handlers waiting for the current handler to fail
210-
for (otherHandler in awaitingHandlers.reversed()) {
210+
for (otherHandler in awaitingHandlers.asReversed()) {
211211
if (shouldHandlerBeCancelledBy(otherHandler, handler)) {
212212
otherHandler.isAwaiting = false
213213
}
@@ -256,15 +256,18 @@ class GestureHandlerOrchestrator(
256256
}
257257

258258
private fun cancelAll() {
259-
for (handler in awaitingHandlers.reversed()) {
259+
// We need `toList` as `awaitingHandlers` can be modified by `cancel`:
260+
// `onHandlerStateChange` -> `tryActivate` -> `addAwaitingHandler`
261+
for (handler in awaitingHandlers.asReversed().toList()) {
260262
handler.cancel()
261263
}
264+
262265
// Copy handlers to "prepared handlers" array, because the list of active handlers can change
263266
// as a result of state updates
264267
preparedHandlers.clear()
265268
preparedHandlers.addAll(gestureHandlers)
266269

267-
for (handler in gestureHandlers.reversed()) {
270+
for (handler in gestureHandlers.asReversed()) {
268271
handler.cancel()
269272
}
270273
}
@@ -283,7 +286,7 @@ class GestureHandlerOrchestrator(
283286
val event = transformEventToViewCoords(handler.view, MotionEvent.obtain(sourceEvent))
284287

285288
// Touch events are sent before the handler itself has a chance to process them,
286-
// mainly because `onTouchesUp` shoul be send befor gesture finishes. This means that
289+
// mainly because `onTouchesUp` should be send before gesture finishes. This means that
287290
// the first `onTouchesDown` event is sent before a gesture begins, activation in
288291
// callback for this event causes problems because the handler doesn't have a chance
289292
// to initialize itself with starting values of pointer (in pan this causes translation

0 commit comments

Comments
 (0)