From e6ad652c6ae2222e95b3dc351f28c0fa3a91d622 Mon Sep 17 00:00:00 2001 From: Pieter De Baets Date: Fri, 10 May 2024 03:48:43 -0700 Subject: [PATCH] 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 --- .../Text/TextInput/RCTBaseTextInputView.mm | 13 ---- .../views/textinput/ReactTextInputEvent.java | 70 ------------------- .../textinput/ReactTextInputManager.java | 5 -- 3 files changed, 88 deletions(-) delete mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEvent.java diff --git a/packages/react-native/Libraries/Text/TextInput/RCTBaseTextInputView.mm b/packages/react-native/Libraries/Text/TextInput/RCTBaseTextInputView.mm index b0d71dcd350..20b953520b6 100644 --- a/packages/react-native/Libraries/Text/TextInput/RCTBaseTextInputView.mm +++ b/packages/react-native/Libraries/Text/TextInput/RCTBaseTextInputView.mm @@ -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. } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEvent.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEvent.java deleted file mode 100644 index 2f4fb2fa783..00000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEvent.java +++ /dev/null @@ -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 { - - 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; - } -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java index 8496a7d059e..afa1030b3eb 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java @@ -1062,17 +1062,12 @@ public class ReactTextInputManager extends BaseViewManager