diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java index e548b66ea..ffa6e911a 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java @@ -15,8 +15,8 @@ import java.util.ArrayList; import android.content.Context; import android.graphics.Rect; -import android.graphics.drawable.Drawable; import android.graphics.Typeface; +import android.graphics.drawable.Drawable; import android.text.Editable; import android.text.InputType; import android.text.SpannableStringBuilder; @@ -29,6 +29,7 @@ import android.text.style.BackgroundColorSpan; import android.text.style.ForegroundColorSpan; import android.view.Gravity; import android.view.KeyEvent; +import android.view.MotionEvent; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; @@ -68,12 +69,12 @@ public class ReactEditText extends EditText { private @Nullable ArrayList mListeners; private @Nullable TextWatcherDelegator mTextWatcherDelegator; private int mStagedInputType; - private boolean mTextIsSelectable = true; private boolean mContainsImages; private boolean mBlurOnSubmit; private @Nullable SelectionWatcher mSelectionWatcher; private @Nullable ContentSizeWatcher mContentSizeWatcher; private final InternalKeyListener mKeyListener; + private boolean mDetectScrollMovement = false; private static final KeyListener sKeyListener = QwertyKeyListener.getInstanceForFullKeyboard(); @@ -124,6 +125,31 @@ public class ReactEditText extends EditText { } } + @Override + public boolean onTouchEvent(MotionEvent ev) { + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + mDetectScrollMovement = true; + // Disallow parent views to intercept touch events, until we can detect if we should be + // capturing these touches or not. + this.getParent().requestDisallowInterceptTouchEvent(true); + break; + case MotionEvent.ACTION_MOVE: + if (mDetectScrollMovement) { + if (!canScrollVertically(-1) && + !canScrollVertically(1) && + !canScrollHorizontally(-1) && + !canScrollHorizontally(1)) { + // We cannot scroll, let parent views take care of these touches. + this.getParent().requestDisallowInterceptTouchEvent(false); + } + mDetectScrollMovement = false; + } + break; + } + return super.onTouchEvent(ev); + } + // Consume 'Enter' key events: TextView tries to give focus to the next TextInput, but it can't // since we only allow JS to change focus, which in turn causes TextView to crash. @Override @@ -252,12 +278,6 @@ public class ReactEditText extends EditText { setKeyListener(mKeyListener); } - @Override - public void setTextIsSelectable(boolean selectable) { - mTextIsSelectable = selectable; - super.setTextIsSelectable(selectable); - } - // VisibleForTesting from {@link TextInputEventsTestCase}. public void requestFocusFromJS() { mIsJSSettingFocus = true;