From 055a41b081c5bc9535b071d9b4b7488b92e71803 Mon Sep 17 00:00:00 2001 From: Janic Duplessis Date: Fri, 31 Jan 2020 18:13:00 -0800 Subject: [PATCH] Implement native TextInput autoFocus on Android (#27924) Summary: Follow up to https://github.com/facebook/react-native/issues/27803. To keep consistency between the implementations this also implements autoFocus natively on Android. This will allow removing the JS auto focus logic completely. ## Changelog [Android] [Fixed] - Implement native TextInput autoFocus on Android Pull Request resolved: https://github.com/facebook/react-native/pull/27924 Test Plan: Test using the TextInput example in RN tester. Differential Revision: D19674506 Pulled By: TheSavior fbshipit-source-id: 9cbb517fc69bccd11f5292a1ccb4acea2e3713e9 --- .../react/views/textinput/ReactEditText.java | 14 ++++++++++++++ .../views/textinput/ReactTextInputManager.java | 5 +++++ 2 files changed, 19 insertions(+) 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 639e01ba1eb..da50126bed6 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 @@ -100,6 +100,8 @@ public class ReactEditText extends AppCompatEditText { private @Nullable String mFontFamily = null; private int mFontWeight = ReactTypefaceUtils.UNSET; private int mFontStyle = ReactTypefaceUtils.UNSET; + private boolean mAutoFocus = false; + private boolean mDidAttachToWindow = false; private ReactViewBackgroundManager mReactBackgroundManager; @@ -750,6 +752,14 @@ public class ReactEditText extends AppCompatEditText { span.onAttachedToWindow(); } } + + if (mAutoFocus && !mDidAttachToWindow) { + mShouldAllowFocus = true; + requestFocus(); + mShouldAllowFocus = false; + } + + mDidAttachToWindow = true; } @Override @@ -813,6 +823,10 @@ public class ReactEditText extends AppCompatEditText { } } + public void setAutoFocus(boolean autoFocus) { + mAutoFocus = autoFocus; + } + protected void applyTextAttributes() { // In general, the `getEffective*` functions return `Float.NaN` if the // property hasn't been set. 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 37134e1994e..6ea31dd7279 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 @@ -795,6 +795,11 @@ public class ReactTextInputManager extends BaseViewManager