From 19d69f9c22c3d230e86898416713c4c18ba322d0 Mon Sep 17 00:00:00 2001 From: Tim Yung Date: Wed, 26 Dec 2018 11:43:59 -0800 Subject: [PATCH] RN: Workaround HorizontalMeasurementProvider Crash Summary: Adds a workaround to `ReactTextView` for a crash that happens in `getOffsetForHorizontal`: https://issuetracker.google.com/issues/113348914 Reviewed By: mdvacca Differential Revision: D13548917 fbshipit-source-id: 1c346283cd036c88d60a4b10890ade46c7e80eca --- .../src/main/java/com/facebook/react/views/text/BUCK | 1 + .../com/facebook/react/views/text/ReactTextView.java | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/BUCK b/ReactAndroid/src/main/java/com/facebook/react/views/text/BUCK index a4b6e0c3b..449f27ada 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/BUCK @@ -9,6 +9,7 @@ rn_android_library( ], deps = [ YOGA_TARGET, + react_native_dep("libraries/fbcore/src/main/java/com/facebook/common/logging:logging"), react_native_dep("third-party/java/infer-annotations:infer-annotations"), react_native_dep("third-party/java/jsr-305:jsr-305"), react_native_target("java/com/facebook/react/bridge:bridge"), diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java index 4c7023f07..735904c80 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java @@ -17,6 +17,8 @@ import android.text.TextUtils; import android.view.Gravity; import android.view.ViewGroup; import android.widget.TextView; +import com.facebook.common.logging.FLog; +import com.facebook.react.common.ReactConstants; import com.facebook.react.uimanager.ReactCompoundView; import com.facebook.react.uimanager.ViewDefaults; import com.facebook.react.views.view.ReactViewBackgroundManager; @@ -96,7 +98,14 @@ public class ReactTextView extends TextView implements ReactCompoundView { // TODO(5966918): Consider extending touchable area for text spans by some DP constant if (text instanceof Spanned && x >= lineStartX && x <= lineEndX) { Spanned spannedText = (Spanned) text; - int index = layout.getOffsetForHorizontal(line, x); + int index = -1; + try { + index = layout.getOffsetForHorizontal(line, x); + } catch (ArrayIndexOutOfBoundsException e) { + // https://issuetracker.google.com/issues/113348914 + FLog.e(ReactConstants.TAG, "Crash in HorizontalMeasurementProvider: " + e.getMessage()); + return target; + } // We choose the most inner span (shortest) containing character at the given index // if no such span can be found we will send the textview's react id as a touch handler