diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEvent.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEvent.java index 6d8f644411f..e0509633bb7 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEvent.java @@ -11,6 +11,7 @@ import android.view.MotionEvent; import androidx.annotation.Nullable; import androidx.core.util.Pools; import com.facebook.infer.annotation.Assertions; +import com.facebook.react.bridge.ReactSoftException; import com.facebook.react.bridge.SoftAssertions; /** @@ -22,6 +23,7 @@ import com.facebook.react.bridge.SoftAssertions; * these coalescing keys are determined. */ public class TouchEvent extends Event { + private static final String TAG = TouchEvent.class.getSimpleName(); private static final int TOUCH_EVENTS_POOL_SIZE = 3; @@ -163,6 +165,13 @@ public class TouchEvent extends Event { @Override public void dispatch(RCTEventEmitter rctEventEmitter) { + if (!hasMotionEvent()) { + ReactSoftException.logSoftException( + TAG, + new IllegalStateException( + "Cannot dispatch a TouchEvent that has no MotionEvent; the TouchEvent has been recycled")); + return; + } TouchesHelper.sendTouchEvent( rctEventEmitter, Assertions.assertNotNull(mTouchEventType), @@ -181,6 +190,10 @@ public class TouchEvent extends Event { return mMotionEvent; } + private boolean hasMotionEvent() { + return mMotionEvent != null; + } + public float getViewX() { return mViewX; }