diff --git a/packages/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt b/packages/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt index 19258769ba..3f1caf6338 100644 --- a/packages/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +++ b/packages/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt @@ -440,7 +440,11 @@ class RNGestureHandlerButtonViewManager : val isResponder = tryGrabbingResponder() if (isResponder) { isTouched = true + // when setPressed(true) is called before canBegin it will not call super.setPressed + // in this case we call it here + setPressed(true) } + return isResponder } @@ -515,16 +519,6 @@ class RNGestureHandlerButtonViewManager : } override fun setPressed(pressed: Boolean) { - // there is a possibility of this method being called before NativeViewGestureHandler has - // opportunity to call canStart, in that case we need to grab responder in case the gesture - // will activate - // when canStart is called eventually, tryGrabbingResponder will return true if the button - // already is a responder - if (pressed) { - if (tryGrabbingResponder()) { - soundResponder = this - } - } // button can be pressed alongside other button if both are non-exclusive and it doesn't have // any pressed children (to prevent pressing the parent when children is pressed). val canBePressedAlongsideOther = !exclusive && touchResponder?.exclusive != true && !isChildTouched() @@ -535,6 +529,7 @@ class RNGestureHandlerButtonViewManager : isTouched = pressed super.setPressed(pressed) } + if (!pressed && touchResponder === this) { // if the responder is no longer pressed we release button responder isTouched = false