Implement getExtractedText in InputConnectionAdaptor (flutter/engine#17426)

This commit is contained in:
Gary Qian 2020-04-01 18:51:04 -07:00 committed by GitHub
parent 474e90ba76
commit eff62e12bd
2 changed files with 26 additions and 0 deletions

View File

@ -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.

View File

@ -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.";