Stop emitting deprecated onTextInput events (#44479)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/44479

TextInputs' onTextInput callback was removed way back in React Native 0.62 with https://github.com/facebook/react-native/commit/3f7e0a2c9601fc186f25bfd794cd0008ac3983ab , but remnants of the implementation exists.

We first have to remove the event emitting in native code, and can land the full removal separately in D57092733, once there's no older client references remaining to this event.

Changelog: [General][Removed] Remove deprecated onTextInput callback

Reviewed By: cipolleschi

Differential Revision: D57092734

fbshipit-source-id: 5b0beee3d55b70717216fe8ceaf52444540f5adc
This commit is contained in:
Pieter De Baets
2024-08-05 01:31:21 +02:00
committed by Thibault Malbranche
parent 10e9669ad1
commit 5da40cbb1c
5 changed files with 1 additions and 98 deletions
@@ -493,8 +493,6 @@ RCT_NOT_IMPLEMENTED(-(instancetype)initWithFrame : (CGRect)frame)
}
}
NSString *previousText = [backedTextInputView.attributedText.string copy] ?: @"";
if (range.location + range.length > backedTextInputView.attributedText.string.length) {
_predictedText = backedTextInputView.attributedText.string;
} else if (text != nil) {
@@ -502,17 +500,6 @@ RCT_NOT_IMPLEMENTED(-(instancetype)initWithFrame : (CGRect)frame)
withString:text];
}
if (_onTextInput) {
_onTextInput(@{
// We copy the string here because if it's a mutable string it may get released before we stop using it on a
// different thread, causing a crash.
@"text" : [text copy],
@"previousText" : previousText,
@"range" : @{@"start" : @(range.location), @"end" : @(range.location + range.length)},
@"eventCount" : @(_nativeEventCount),
});
}
return text; // Accepting the change.
}
@@ -7362,15 +7362,6 @@ public class com/facebook/react/views/textinput/ReactTextChangedEvent : com/face
public fun getEventName ()Ljava/lang/String;
}
public class com/facebook/react/views/textinput/ReactTextInputEvent : com/facebook/react/uimanager/events/Event {
public static final field EVENT_NAME Ljava/lang/String;
public fun <init> (IILjava/lang/String;Ljava/lang/String;II)V
public fun <init> (ILjava/lang/String;Ljava/lang/String;II)V
public fun canCoalesce ()Z
protected fun getEventData ()Lcom/facebook/react/bridge/WritableMap;
public fun getEventName ()Ljava/lang/String;
}
public final class com/facebook/react/views/textinput/ReactTextInputLocalData {
public fun <init> (Landroid/widget/EditText;)V
public fun apply (Landroid/widget/EditText;)V
@@ -1,70 +0,0 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
package com.facebook.react.views.textinput;
import androidx.annotation.Nullable;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.uimanager.common.ViewUtil;
import com.facebook.react.uimanager.events.Event;
/**
* Event emitted by EditText native view when text changes. VisibleForTesting from {@link
* TextInputEventsTestCase}.
*/
public class ReactTextInputEvent extends Event<ReactTextInputEvent> {
public static final String EVENT_NAME = "topTextInput";
private String mText;
private String mPreviousText;
private int mRangeStart;
private int mRangeEnd;
@Deprecated
public ReactTextInputEvent(
int viewId, String text, String previousText, int rangeStart, int rangeEnd) {
this(ViewUtil.NO_SURFACE_ID, viewId, text, previousText, rangeStart, rangeEnd);
}
public ReactTextInputEvent(
int surfaceId, int viewId, String text, String previousText, int rangeStart, int rangeEnd) {
super(surfaceId, viewId);
mText = text;
mPreviousText = previousText;
mRangeStart = rangeStart;
mRangeEnd = rangeEnd;
}
@Override
public String getEventName() {
return EVENT_NAME;
}
@Override
public boolean canCoalesce() {
// We don't want to miss any textinput event, as event data is incremental.
return false;
}
@Nullable
@Override
protected WritableMap getEventData() {
WritableMap eventData = Arguments.createMap();
WritableMap range = Arguments.createMap();
range.putDouble("start", mRangeStart);
range.putDouble("end", mRangeEnd);
eventData.putString("text", mText);
eventData.putString("previousText", mPreviousText);
eventData.putMap("range", range);
eventData.putInt("target", getViewTag());
return eventData;
}
}
@@ -14,7 +14,7 @@ import com.facebook.react.uimanager.common.ViewUtil;
import com.facebook.react.uimanager.events.Event;
/** Event emitted by EditText native view when key pressed */
class ReactTextInputKeyPressEvent extends Event<ReactTextInputEvent> {
/* package */ class ReactTextInputKeyPressEvent extends Event<ReactTextInputKeyPressEvent> {
public static final String EVENT_NAME = "topKeyPress";
@@ -1122,17 +1122,12 @@ public class ReactTextInputManager extends BaseViewManager<ReactEditText, Layout
}
// The event that contains the event counter and updates it must be sent first.
// TODO: t7936714 merge these events
mEventDispatcher.dispatchEvent(
new ReactTextChangedEvent(
mSurfaceId,
mEditText.getId(),
s.toString(),
mEditText.incrementAndGetEventCounter()));
mEventDispatcher.dispatchEvent(
new ReactTextInputEvent(
mSurfaceId, mEditText.getId(), newText, oldText, start, start + before));
}
@Override