diff --git a/engine/src/flutter/shell/platform/android/io/flutter/plugin/editing/InputConnectionAdaptor.java b/engine/src/flutter/shell/platform/android/io/flutter/plugin/editing/InputConnectionAdaptor.java index 7513b2ffa4d..93ec036b75d 100644 --- a/engine/src/flutter/shell/platform/android/io/flutter/plugin/editing/InputConnectionAdaptor.java +++ b/engine/src/flutter/shell/platform/android/io/flutter/plugin/editing/InputConnectionAdaptor.java @@ -21,6 +21,8 @@ import android.view.View; import android.view.inputmethod.BaseInputConnection; import android.view.inputmethod.CursorAnchorInfo; import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.ExtractedText; +import android.view.inputmethod.ExtractedTextRequest; import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodSubtype; import io.flutter.Log; @@ -161,6 +163,16 @@ class InputConnectionAdaptor extends BaseInputConnection { return result; } + // TODO(garyq): Implement a more feature complete version of getExtractedText + @Override + public ExtractedText getExtractedText(ExtractedTextRequest request, int flags) { + ExtractedText extractedText = new ExtractedText(); + extractedText.selectionStart = Selection.getSelectionStart(mEditable); + extractedText.selectionEnd = Selection.getSelectionEnd(mEditable); + extractedText.text = mEditable.toString(); + return extractedText; + } + // Detect if the keyboard is a Samsung keyboard, where we apply Samsung-specific hacks to // fix critical bugs that make the keyboard otherwise unusable. See finishComposingText() for // more details. diff --git a/engine/src/flutter/shell/platform/android/test/io/flutter/plugin/editing/InputConnectionAdaptorTest.java b/engine/src/flutter/shell/platform/android/test/io/flutter/plugin/editing/InputConnectionAdaptorTest.java index 9d8d95095ad..12d042c0237 100644 --- a/engine/src/flutter/shell/platform/android/test/io/flutter/plugin/editing/InputConnectionAdaptorTest.java +++ b/engine/src/flutter/shell/platform/android/test/io/flutter/plugin/editing/InputConnectionAdaptorTest.java @@ -19,6 +19,7 @@ import android.text.SpannableStringBuilder; import android.view.KeyEvent; import android.view.View; import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.ExtractedText; import io.flutter.embedding.engine.FlutterJNI; import io.flutter.embedding.engine.dart.DartExecutor; import io.flutter.embedding.engine.systemchannels.TextInputChannel; @@ -256,6 +257,19 @@ public class InputConnectionAdaptorTest { assertTrue(Selection.getSelectionStart(editable) > selStart); } + @Test + public void testMethod_getExtractedText() { + int selStart = 5; + Editable editable = sampleEditable(selStart, selStart); + InputConnectionAdaptor adaptor = sampleInputConnectionAdaptor(editable); + + ExtractedText extractedText = adaptor.getExtractedText(null, 0); + + assertEquals(extractedText.text, SAMPLE_TEXT); + assertEquals(extractedText.selectionStart, selStart); + assertEquals(extractedText.selectionEnd, selStart); + } + private static final String SAMPLE_TEXT = "Lorem ipsum dolor sit amet," + "\nconsectetur adipiscing elit.";