From e37e56b04244f17f7013ef246de10a5a7f1ba5cb Mon Sep 17 00:00:00 2001 From: Valentin Shergin Date: Sun, 10 Jan 2021 13:54:36 -0800 Subject: [PATCH] Back out "Add onFocus and onBlur to Pressable." Summary: I suspect it's causing T82781515. Changelog: [Category][Type] - Backout of "[react-native][PR] Add onFocus and onBlur to Pressable." Reviewed By: p-sun Differential Revision: D25864414 fbshipit-source-id: efba9136edba97d5bd2a0de15f9ddae7dfd24e51 --- Libraries/Components/Pressable/Pressable.js | 23 +----------- Libraries/Components/View/View.js | 36 ++----------------- .../java/com/facebook/react/views/common/BUCK | 5 +-- .../com/facebook/react/views/textinput/BUCK | 1 - .../ReactTextInputBlurEvent.java} | 8 ++--- .../ReactTextInputFocusEvent.java} | 8 ++--- .../textinput/ReactTextInputManager.java | 6 ++-- .../react/views/view/ReactViewManager.java | 26 ++------------ .../js/examples/Pressable/PressableExample.js | 34 ------------------ 9 files changed, 16 insertions(+), 131 deletions(-) rename ReactAndroid/src/main/java/com/facebook/react/views/{common/ReactViewBlurEvent.java => textinput/ReactTextInputBlurEvent.java} (79%) rename ReactAndroid/src/main/java/com/facebook/react/views/{common/ReactViewFocusEvent.java => textinput/ReactTextInputFocusEvent.java} (79%) diff --git a/Libraries/Components/Pressable/Pressable.js b/Libraries/Components/Pressable/Pressable.js index 7b52378a8a0..a6692c92bd4 100644 --- a/Libraries/Components/Pressable/Pressable.js +++ b/Libraries/Components/Pressable/Pressable.js @@ -25,12 +25,7 @@ import type { import {PressabilityDebugView} from '../../Pressability/PressabilityDebug'; import usePressability from '../../Pressability/usePressability'; import {normalizeRect, type RectOrSize} from '../../StyleSheet/Rect'; -import type { - LayoutEvent, - PressEvent, - BlurEvent, - FocusEvent, -} from '../../Types/CoreEventTypes'; +import type {LayoutEvent, PressEvent} from '../../Types/CoreEventTypes'; import View from '../View/View'; type ViewStyleProp = $ElementType, 'style'>; @@ -110,16 +105,6 @@ type Props = $ReadOnly<{| */ onPressOut?: ?(event: PressEvent) => void, - /** - * Called after the element loses focus. - */ - onBlur?: ?(event: BlurEvent) => mixed, - - /** - * Called after the element is focused. - */ - onFocus?: ?(event: FocusEvent) => mixed, - /** * Either view styles or a function that receives a boolean reflecting whether * the component is currently pressed and returns view styles. @@ -169,8 +154,6 @@ function Pressable(props: Props, forwardedRef): React.Node { onPress, onPressIn, onPressOut, - onBlur, - onFocus, pressRetentionOffset, style, testOnly_pressed, @@ -224,8 +207,6 @@ function Pressable(props: Props, forwardedRef): React.Node { onPressOut(event); } }, - onBlur, - onFocus, }), [ android_disableSound, @@ -237,8 +218,6 @@ function Pressable(props: Props, forwardedRef): React.Node { onPress, onPressIn, onPressOut, - onBlur, - onFocus, pressRetentionOffset, setPressed, unstable_pressDelay, diff --git a/Libraries/Components/View/View.js b/Libraries/Components/View/View.js index 5e2c460fe97..0fd0d938676 100644 --- a/Libraries/Components/View/View.js +++ b/Libraries/Components/View/View.js @@ -11,14 +11,10 @@ 'use strict'; import type {ViewProps} from './ViewPropTypes'; -import type {BlurEvent, FocusEvent} from '../../Types/CoreEventTypes'; + const React = require('react'); import ViewNativeComponent from './ViewNativeComponent'; const TextAncestor = require('../../Text/TextAncestor'); -const TextInputState = require('../TextInput/TextInputState'); -import type {HostComponent} from '../../Renderer/shims/ReactNativeTypes'; -const setAndForwardRef = require('../../Utilities/setAndForwardRef'); -const {useRef} = React; export type Props = ViewProps; @@ -33,37 +29,9 @@ const View: React.AbstractComponent< ViewProps, React.ElementRef, > = React.forwardRef((props: ViewProps, forwardedRef) => { - const viewRef = useRef>>(null); - - const _setNativeRef = setAndForwardRef({ - getForwardedRef: () => forwardedRef, - setLocalRef: ref => { - viewRef.current = ref; - }, - }); - - const _onBlur = (event: BlurEvent) => { - TextInputState.blurInput(viewRef.current); - if (props.onBlur) { - props.onBlur(event); - } - }; - - const _onFocus = (event: FocusEvent) => { - TextInputState.focusInput(viewRef.current); - if (props.onFocus) { - props.onFocus(event); - } - }; - return ( - + ); }); diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/common/BUCK b/ReactAndroid/src/main/java/com/facebook/react/views/common/BUCK index 9d637c3c628..720c0618c0f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/common/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/views/common/BUCK @@ -1,4 +1,4 @@ -load("//tools/build_defs/oss:rn_defs.bzl", "react_native_dep", "react_native_target", "rn_android_library") +load("//tools/build_defs/oss:rn_defs.bzl", "react_native_dep", "rn_android_library") rn_android_library( name = "common", @@ -18,8 +18,5 @@ rn_android_library( "PUBLIC", ], deps = [ - react_native_target("java/com/facebook/react/uimanager:uimanager"), - react_native_target("java/com/facebook/react/uimanager/annotations:annotations"), - react_native_target("java/com/facebook/react/bridge:bridge"), ], ) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/BUCK b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/BUCK index 7fa46e712bf..ae5cec13385 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/BUCK @@ -21,7 +21,6 @@ rn_android_library( react_native_target("java/com/facebook/react/modules/core:core"), react_native_target("java/com/facebook/react/uimanager:uimanager"), react_native_target("java/com/facebook/react/uimanager/annotations:annotations"), - react_native_target("java/com/facebook/react/views/common:common"), react_native_target("java/com/facebook/react/views/imagehelper:imagehelper"), react_native_target("java/com/facebook/react/views/scroll:scroll"), react_native_target("java/com/facebook/react/views/text:text"), diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/common/ReactViewBlurEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputBlurEvent.java similarity index 79% rename from ReactAndroid/src/main/java/com/facebook/react/views/common/ReactViewBlurEvent.java rename to ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputBlurEvent.java index a9b1f36f109..5a05bc44407 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/common/ReactViewBlurEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputBlurEvent.java @@ -5,19 +5,19 @@ * LICENSE file in the root directory of this source tree. */ -package com.facebook.react.views.common; +package com.facebook.react.views.textinput; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.RCTEventEmitter; -/** Event emitted by a native view when it loses focus. */ -public class ReactViewBlurEvent extends Event { +/** Event emitted by EditText native view when it loses focus. */ +/* package */ class ReactTextInputBlurEvent extends Event { private static final String EVENT_NAME = "topBlur"; - public ReactViewBlurEvent(int viewId) { + public ReactTextInputBlurEvent(int viewId) { super(viewId); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/common/ReactViewFocusEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputFocusEvent.java similarity index 79% rename from ReactAndroid/src/main/java/com/facebook/react/views/common/ReactViewFocusEvent.java rename to ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputFocusEvent.java index a7dcab6978b..0bdaa6c1992 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/common/ReactViewFocusEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputFocusEvent.java @@ -5,19 +5,19 @@ * LICENSE file in the root directory of this source tree. */ -package com.facebook.react.views.common; +package com.facebook.react.views.textinput; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.RCTEventEmitter; -/** Event emitted by a native view when it receives focus. */ -public class ReactViewFocusEvent extends Event { +/** Event emitted by EditText native view when it receives focus. */ +/* package */ class ReactTextInputFocusEvent extends Event { private static final String EVENT_NAME = "topFocus"; - public ReactViewFocusEvent(int viewId) { + public ReactTextInputFocusEvent(int viewId) { super(viewId); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java index c252deb5978..6d9ab0d39b6 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java @@ -59,8 +59,6 @@ import com.facebook.react.uimanager.ViewProps; import com.facebook.react.uimanager.annotations.ReactProp; import com.facebook.react.uimanager.annotations.ReactPropGroup; import com.facebook.react.uimanager.events.EventDispatcher; -import com.facebook.react.views.common.ReactViewBlurEvent; -import com.facebook.react.views.common.ReactViewFocusEvent; import com.facebook.react.views.imagehelper.ResourceDrawableIdHelper; import com.facebook.react.views.scroll.ScrollEvent; import com.facebook.react.views.scroll.ScrollEventType; @@ -976,9 +974,9 @@ public class ReactTextInputManager extends BaseViewManager { @Override public void onClick(View v) { final EventDispatcher mEventDispatcher = - getEventDispatcher((ReactContext) view.getContext(), view); + UIManagerHelper.getEventDispatcherForReactTag( + (ReactContext) view.getContext(), view.getId()); if (mEventDispatcher == null) { return; } @@ -255,27 +254,6 @@ public class ReactViewManager extends ReactClippingViewManager { } } - private static EventDispatcher getEventDispatcher( - ReactContext reactContext, ReactViewGroup view) { - return UIManagerHelper.getEventDispatcherForReactTag(reactContext, view.getId()); - } - - @Override - protected void addEventEmitters( - final ThemedReactContext reactContext, final ReactViewGroup view) { - view.setOnFocusChangeListener( - new View.OnFocusChangeListener() { - public void onFocusChange(View v, boolean hasFocus) { - EventDispatcher eventDispatcher = getEventDispatcher(reactContext, view); - if (hasFocus) { - eventDispatcher.dispatchEvent(new ReactViewFocusEvent(view.getId())); - } else { - eventDispatcher.dispatchEvent(new ReactViewBlurEvent(view.getId())); - } - } - }); - } - @ReactProp(name = ViewProps.OVERFLOW) public void setOverflow(ReactViewGroup view, String overflow) { view.setOverflow(overflow); diff --git a/packages/rn-tester/js/examples/Pressable/PressableExample.js b/packages/rn-tester/js/examples/Pressable/PressableExample.js index d9097cc5602..f7a1e4dc33d 100644 --- a/packages/rn-tester/js/examples/Pressable/PressableExample.js +++ b/packages/rn-tester/js/examples/Pressable/PressableExample.js @@ -250,32 +250,6 @@ function PressableDisabled() { ); } -function PressableFocusBlurEvents() { - const [lastEvent, setLastEvent] = useState(''); - - return ( - - - { - console.log('Focused!'); - setLastEvent('Received focus event'); - }} - onBlur={() => { - console.log('Blurred!'); - setLastEvent('Received blur event'); - }} - testID="pressable_focus_blur_button"> - Use keyboard to move focus to me - - - - {lastEvent} - - - ); -} - const styles = StyleSheet.create({ row: { justifyContent: 'center', @@ -504,12 +478,4 @@ exports.examples = [ return ; }, }, - { - title: 'Pressable onFocus/onBlur', - description: (' components can receive focus/blur events.': string), - platform: 'android', - render: function(): React.Node { - return ; - }, - }, ];