diff --git a/shell/platform/android/io/flutter/embedding/engine/systemchannels/TextInputChannel.java b/shell/platform/android/io/flutter/embedding/engine/systemchannels/TextInputChannel.java index 55386eeba5b45..8432269407288 100644 --- a/shell/platform/android/io/flutter/embedding/engine/systemchannels/TextInputChannel.java +++ b/shell/platform/android/io/flutter/embedding/engine/systemchannels/TextInputChannel.java @@ -271,6 +271,7 @@ public static Configuration fromJson(@NonNull JSONObject json) throws JSONExcept return new Configuration( json.optBoolean("obscureText"), json.optBoolean("autocorrect", true), + json.optBoolean("enableSuggestions"), TextCapitalization.fromValue(json.getString("textCapitalization")), InputType.fromJson(json.getJSONObject("inputType")), inputAction, @@ -307,6 +308,7 @@ private static Integer inputActionFromTextInputAction(@NonNull String inputActio public final boolean obscureText; public final boolean autocorrect; + public final boolean enableSuggestions; @NonNull public final TextCapitalization textCapitalization; @NonNull @@ -319,6 +321,7 @@ private static Integer inputActionFromTextInputAction(@NonNull String inputActio public Configuration( boolean obscureText, boolean autocorrect, + boolean enableSuggestions, @NonNull TextCapitalization textCapitalization, @NonNull InputType inputType, @Nullable Integer inputAction, @@ -326,6 +329,7 @@ public Configuration( ) { this.obscureText = obscureText; this.autocorrect = autocorrect; + this.enableSuggestions = enableSuggestions; this.textCapitalization = textCapitalization; this.inputType = inputType; this.inputAction = inputAction; diff --git a/shell/platform/android/io/flutter/plugin/editing/TextInputPlugin.java b/shell/platform/android/io/flutter/plugin/editing/TextInputPlugin.java index 5c23ea40beca9..68efb65142e78 100644 --- a/shell/platform/android/io/flutter/plugin/editing/TextInputPlugin.java +++ b/shell/platform/android/io/flutter/plugin/editing/TextInputPlugin.java @@ -138,6 +138,7 @@ private static int inputTypeFromTextInputType( TextInputChannel.InputType type, boolean obscureText, boolean autocorrect, + boolean enableSuggestions, TextInputChannel.TextCapitalization textCapitalization ) { if (type.type == TextInputChannel.TextInputType.DATETIME) { @@ -172,6 +173,7 @@ 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 (textCapitalization == TextInputChannel.TextCapitalization.CHARACTERS) { @@ -203,6 +205,7 @@ public InputConnection createInputConnection(View view, EditorInfo outAttrs) { configuration.inputType, configuration.obscureText, configuration.autocorrect, + configuration.enableSuggestions, configuration.textCapitalization ); outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_FULLSCREEN; diff --git a/shell/platform/android/test/io/flutter/plugin/editing/TextInputPluginTest.java b/shell/platform/android/test/io/flutter/plugin/editing/TextInputPluginTest.java index cd5eb377861dc..0342668e21d7a 100644 --- a/shell/platform/android/test/io/flutter/plugin/editing/TextInputPluginTest.java +++ b/shell/platform/android/test/io/flutter/plugin/editing/TextInputPluginTest.java @@ -36,7 +36,7 @@ public void setTextInputEditingState_doesNotRestartWhenTextIsIdentical() { testImm.setCurrentInputMethodSubtype(inputMethodSubtype); View testView = new View(RuntimeEnvironment.application); TextInputPlugin textInputPlugin = new TextInputPlugin(testView, mock(DartExecutor.class), mock(PlatformViewsController.class)); - textInputPlugin.setTextInputClient(0, new TextInputChannel.Configuration(false, false, TextInputChannel.TextCapitalization.NONE, null, null, null)); + textInputPlugin.setTextInputClient(0, new TextInputChannel.Configuration(false, false, true, TextInputChannel.TextCapitalization.NONE, null, null, null)); // There's a pending restart since we initialized the text input client. Flush that now. textInputPlugin.setTextInputEditingState(testView, new TextInputChannel.TextEditState("", 0, 0)); @@ -61,7 +61,7 @@ public void setTextInputEditingState_alwaysRestartsOnAffectedDevices2() { testImm.setCurrentInputMethodSubtype(inputMethodSubtype); View testView = new View(RuntimeEnvironment.application); TextInputPlugin textInputPlugin = new TextInputPlugin(testView, mock(DartExecutor.class), mock(PlatformViewsController.class)); - textInputPlugin.setTextInputClient(0, new TextInputChannel.Configuration(false, false, TextInputChannel.TextCapitalization.NONE, null, null, null)); + textInputPlugin.setTextInputClient(0, new TextInputChannel.Configuration(false, false, true, TextInputChannel.TextCapitalization.NONE, null, null, null)); // There's a pending restart since we initialized the text input client. Flush that now. textInputPlugin.setTextInputEditingState(testView, new TextInputChannel.TextEditState("", 0, 0)); @@ -83,7 +83,7 @@ public void setTextInputEditingState_doesNotRestartOnUnaffectedDevices() { testImm.setCurrentInputMethodSubtype(inputMethodSubtype); View testView = new View(RuntimeEnvironment.application); TextInputPlugin textInputPlugin = new TextInputPlugin(testView, mock(DartExecutor.class), mock(PlatformViewsController.class)); - textInputPlugin.setTextInputClient(0, new TextInputChannel.Configuration(false, false, TextInputChannel.TextCapitalization.NONE, null, null, null)); + textInputPlugin.setTextInputClient(0, new TextInputChannel.Configuration(false, false, true, TextInputChannel.TextCapitalization.NONE, null, null, null)); // There's a pending restart since we initialized the text input client. Flush that now. textInputPlugin.setTextInputEditingState(testView, new TextInputChannel.TextEditState("", 0, 0)); @@ -102,7 +102,7 @@ public void setTextInputEditingState_nullInputMethodSubtype() { View testView = new View(RuntimeEnvironment.application); TextInputPlugin textInputPlugin = new TextInputPlugin(testView, mock(DartExecutor.class), mock(PlatformViewsController.class)); - textInputPlugin.setTextInputClient(0, new TextInputChannel.Configuration(false, false, TextInputChannel.TextCapitalization.NONE, null, null, null)); + textInputPlugin.setTextInputClient(0, new TextInputChannel.Configuration(false, false, true, TextInputChannel.TextCapitalization.NONE, null, null, null)); // There's a pending restart since we initialized the text input client. Flush that now. textInputPlugin.setTextInputEditingState(testView, new TextInputChannel.TextEditState("", 0, 0)); assertEquals(1, testImm.getRestartCount(testView));