Skip to content

Commit

Permalink
[Android] Fix enableSuggestions set to false not honored (#46037)
Browse files Browse the repository at this point in the history
## Description

This PR fixes an issue where setting `TextField.enableSuggestions` to false was not honored on Android.

Several Android devices (Samsung) and/or IMEs (including GBoard) does not disabled suggestions when `InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS `flag is set. The common solution is to rely on the following flag:  ~~`InputType.TYPE_TEXT_VARIATION_PASSWORD`~~ `InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD`.

Reference:
- https://issuetracker.google.com/issues/36934423#comment4
- https://stackoverflow.com/questions/33148168/inputtype-type-text-flag-no-suggestions-in-samsung/33227237#33227237
- Existing comment on the codebase:
https://github.com/flutter/engine/blob/53430c7c96a3ef1fc78d63ea6b0c35e5ff46c45e/shell/platform/android/io/flutter/plugin/editing/TextInputPlugin.java#L270

## Related Issue

Fixes flutter/flutter#71679.

## Tests

Adds 1 test.
  • Loading branch information
bleroux committed Sep 26, 2023
1 parent 0a8ad23 commit 8bbf25e
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,11 @@ private static int inputTypeFromTextInputType(
textType |= InputType.TYPE_TEXT_VARIATION_PASSWORD;
} else {
if (autocorrect) textType |= InputType.TYPE_TEXT_FLAG_AUTO_CORRECT;
if (!enableSuggestions) textType |= InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
if (!enableSuggestions) {
// Note: both required. Some devices ignore TYPE_TEXT_FLAG_NO_SUGGESTIONS.
textType |= InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
textType |= InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD;
}
}

if (textCapitalization == TextInputChannel.TextCapitalization.CHARACTERS) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1306,6 +1306,42 @@ public void showTextInput_textInputTypeNone() {
assertEquals(testImm.isSoftInputVisible(), false);
}

@Test
public void inputConnection_textInputTypeMultilineAndSuggestionsDisabled() {
// Regression test for https://github.com/flutter/flutter/issues/71679.
View testView = new View(ctx);
DartExecutor dartExecutor = mock(DartExecutor.class);
TextInputChannel textInputChannel = new TextInputChannel(dartExecutor);
TextInputPlugin textInputPlugin =
new TextInputPlugin(testView, textInputChannel, mock(PlatformViewsController.class));
textInputPlugin.setTextInputClient(
0,
new TextInputChannel.Configuration(
false,
false,
false, // Disable suggestions.
true,
false,
TextInputChannel.TextCapitalization.NONE,
new TextInputChannel.InputType(TextInputChannel.TextInputType.MULTILINE, false, false),
null,
null,
null,
null,
null));

EditorInfo editorInfo = new EditorInfo();
InputConnection connection =
textInputPlugin.createInputConnection(testView, mock(KeyboardManager.class), editorInfo);

assertEquals(
editorInfo.inputType,
InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_FLAG_MULTI_LINE
| InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS
| InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
}

// -------- Start: Autofill Tests -------
@Test
public void autofill_enabledByDefault() {
Expand Down

0 comments on commit 8bbf25e

Please sign in to comment.