TextInput: Avoid firing onSubmitEditing twice on Android

Summary:
For returnKeyType 'go', 'search' and 'send' Android will call
onEditorAction twice, once with IME_NULL and another time with the respective IME_ACTION.
This change makes sure to only fire one onSubmitEditing by always returning true in onEditorAction, which causes no subsequent events to be fired by android.

Fixes #10443

**Test plan**

1. Create view with TextInput having 'go', 'search' or 'send as `returnKeyType`
```javascript
<View>
           <TextInput
                returnKeyType='search'
                onSubmitEditing={event => console.log('submit search')}></TextInput>

           <TextInput
                returnKeyType='go'
                onSubmitEditing={event => console.log('submit go')}></TextInput>

         <TextInput
              returnKeyType='send'
              onSubmitEditing={event => console.log('submit send')}></TextInput>
</View>
```

2. Input some text and click submit button in soft keyboard
3. See event fired only once instead of two times
Closes https://github.com/facebook/react-native/pull/11006

Differential Revision: D4439110

Pulled By: hramos

fbshipit-source-id: 5573b7f15f862b432600ddd3d61a0852ce51b2b3
This commit is contained in:
Rene Weber
2017-01-20 17:50:30 -08:00
committed by Facebook Github Bot
parent f521e992cc
commit 116916b98d
3 changed files with 64 additions and 12 deletions
@@ -18,6 +18,8 @@ var Text = require('Text');
var TextInput = require('TextInput');
var View = require('View');
var Recording = require('NativeModules').Recording;
var app;
class TokenizedTextExample extends React.Component {
@@ -81,6 +83,10 @@ class TextInputTestApp extends React.Component {
app = this;
}
handleOnSubmitEditing = (record) => {
Recording.record(record);
};
render() {
return (
<View style={styles.container}>
@@ -128,6 +134,12 @@ class TextInputTestApp extends React.Component {
defaultValue="Text"
testID="textInput6"
/>
<TextInput
ref="onSubmitTextInput"
onSubmitEditing={this.handleOnSubmitEditing.bind(this, 'onSubmit')}
defaultValue=""
testID="onSubmitTextInput"
/>
<TokenizedTextExample />
</View>
);