List of usage examples for android.view.inputmethod InputConnection getExtractedText
ExtractedText getExtractedText(ExtractedTextRequest request, int flags);
From source file:Main.java
private static int getCursorPosition(InputConnection connection) { ExtractedText extracted = connection.getExtractedText(new ExtractedTextRequest(), 0); if (extracted == null) { return -1; }//ww w . j a va 2 s . c o m return extracted.startOffset + extracted.selectionStart; }
From source file:com.volosyukivan.WiFiInputMethod.java
private void selectAll(InputConnection conn) { ExtractedText text = conn.getExtractedText(req, 0); try {/*from w w w . j a va 2s. c o m*/ conn.setSelection(0, text.text.length()); } catch (NullPointerException e) { // Potentially, text or text.text can be null } }
From source file:com.volosyukivan.WiFiInputMethod.java
private void wordRight(InputConnection conn) { boolean shift = pressedKeys.contains(KeyEvent.KEYCODE_SHIFT_LEFT); ExtractedText text = conn.getExtractedText(req, 0); if (text == null) return;//from w ww.j av a 2s .c o m int end = text.selectionEnd; String str = text.text.toString(); int len = str.length(); for (; end < len; end++) { if (!Character.isSpace(str.charAt(end))) break; } for (; end < len; end++) { if (Character.isSpace(str.charAt(end))) break; } int start = shift ? text.selectionStart : end; Log.d("wifikeyboard", "start = " + start + " end = " + end); conn.setSelection(start, end); }
From source file:com.volosyukivan.WiFiInputMethod.java
private void wordLeft(InputConnection conn) { boolean shift = pressedKeys.contains(KeyEvent.KEYCODE_SHIFT_LEFT); ExtractedText text = conn.getExtractedText(req, 0); if (text == null) return;// w w w .j a va2 s . c om int end = text.selectionEnd - 1; String str = text.text.toString(); for (; end >= 0; end--) { if (!Character.isSpace(str.charAt(end))) break; } for (; end >= 0; end--) { if (Character.isSpace(str.charAt(end))) break; } end++; int start = shift ? text.selectionStart : end; Log.d("wifikeyboard", "start = " + start + " end = " + end); conn.setSelection(start, end); }
From source file:com.volosyukivan.WiFiInputMethod.java
private void keyEnd(InputConnection conn) { boolean control = pressedKeys.contains(KEY_CONTROL); boolean shift = pressedKeys.contains(KeyEvent.KEYCODE_SHIFT_LEFT); ExtractedText text = conn.getExtractedText(req, 0); if (text == null) return;//from ww w. j a v a 2 s .c om int end; if (control) { end = text.text.length(); } else { end = text.text.toString().indexOf('\n', text.selectionEnd); if (end == -1) end = text.text.length(); } int start = shift ? text.selectionStart : end; Log.d("wifikeyboard", "start = " + start + " end = " + end); conn.setSelection(start, end); }
From source file:com.volosyukivan.WiFiInputMethod.java
private void keyHome(InputConnection conn) { boolean control = pressedKeys.contains(KEY_CONTROL); boolean shift = pressedKeys.contains(KeyEvent.KEYCODE_SHIFT_LEFT); ExtractedText text = conn.getExtractedText(req, 0); if (text == null) return;/*from w w w. j a va 2s . c o m*/ int end; if (control) { end = 0; } else { end = text.text.toString().lastIndexOf('\n', text.selectionEnd - 1); end++; } int start = shift ? text.selectionStart : end; Log.d("wifikeyboard", "start = " + start + " end = " + end); conn.setSelection(start, end); }
From source file:com.volosyukivan.WiFiInputMethod.java
String getText() { String text = ""; try {// www . jav a2s . c om InputConnection conn = getCurrentInputConnection(); ExtractedTextRequest req = new ExtractedTextRequest(); req.hintMaxChars = 1000000; req.hintMaxLines = 10000; req.flags = 0; req.token = 1; text = conn.getExtractedText(req, 0).text.toString(); } catch (Throwable t) { } return text; }
From source file:org.kde.kdeconnect.Plugins.RemoteKeyboardPlugin.RemoteKeyboardPlugin.java
private boolean handleSpecialKey(int key, boolean shift, boolean ctrl, boolean alt) { int keyEvent = specialKeyMap.get(key, 0); if (keyEvent == 0) return false; InputConnection inputConn = RemoteKeyboardService.instance.getCurrentInputConnection(); // Log.d("RemoteKeyboardPlugin", "Handling special key " + key + " translated to " + keyEvent + " shift=" + shift + " ctrl=" + ctrl + " alt=" + alt); // special sequences: if (ctrl && (keyEvent == KeyEvent.KEYCODE_DPAD_RIGHT)) { // Ctrl + right -> next word ExtractedText extractedText = inputConn.getExtractedText(new ExtractedTextRequest(), 0); int pos = getCharPos(extractedText, ' ', keyEvent == KeyEvent.KEYCODE_DPAD_RIGHT); if (pos == -1) pos = currentTextLength(extractedText); else/*w w w . j a v a 2 s .co m*/ pos++; int startPos = pos; int endPos = pos; if (shift) { // Shift -> select word (otherwise jump) Pair<Integer, Integer> sel = currentSelection(extractedText); int cursor = currentCursorPos(extractedText); // Log.d("RemoteKeyboardPlugin", "Selection (to right): " + sel.first + " / " + sel.second + " cursor: " + cursor); startPos = cursor; if (sel.first < cursor || // active selection from left to right -> grow sel.first > sel.second) // active selection from right to left -> shrink startPos = sel.first; } inputConn.setSelection(startPos, endPos); } else if (ctrl && keyEvent == KeyEvent.KEYCODE_DPAD_LEFT) { // Ctrl + left -> previous word ExtractedText extractedText = inputConn.getExtractedText(new ExtractedTextRequest(), 0); int pos = getCharPos(extractedText, ' ', keyEvent == KeyEvent.KEYCODE_DPAD_RIGHT); if (pos == -1) pos = 0; else pos++; int startPos = pos; int endPos = pos; if (shift) { Pair<Integer, Integer> sel = currentSelection(extractedText); int cursor = currentCursorPos(extractedText); // Log.d("RemoteKeyboardPlugin", "Selection (to left): " + sel.first + " / " + sel.second + " cursor: " + cursor); startPos = cursor; if (cursor < sel.first || // active selection from right to left -> grow sel.first < sel.second) // active selection from right to left -> shrink startPos = sel.first; } inputConn.setSelection(startPos, endPos); } else if (shift && (keyEvent == KeyEvent.KEYCODE_DPAD_LEFT || keyEvent == KeyEvent.KEYCODE_DPAD_RIGHT || keyEvent == KeyEvent.KEYCODE_DPAD_UP || keyEvent == KeyEvent.KEYCODE_DPAD_DOWN || keyEvent == KeyEvent.KEYCODE_MOVE_HOME || keyEvent == KeyEvent.KEYCODE_MOVE_END)) { // Shift + up/down/left/right/home/end long now = SystemClock.uptimeMillis(); inputConn.sendKeyEvent(new KeyEvent(now, now, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SHIFT_LEFT, 0, 0)); inputConn.sendKeyEvent( new KeyEvent(now, now, KeyEvent.ACTION_DOWN, keyEvent, 0, KeyEvent.META_SHIFT_LEFT_ON)); inputConn.sendKeyEvent( new KeyEvent(now, now, KeyEvent.ACTION_UP, keyEvent, 0, KeyEvent.META_SHIFT_LEFT_ON)); inputConn.sendKeyEvent(new KeyEvent(now, now, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SHIFT_LEFT, 0, 0)); } else if (keyEvent == KeyEvent.KEYCODE_NUMPAD_ENTER || keyEvent == KeyEvent.KEYCODE_ENTER) { // Enter key EditorInfo editorInfo = RemoteKeyboardService.instance.getCurrentInputEditorInfo(); // Log.d("RemoteKeyboardPlugin", "Enter: " + editorInfo.imeOptions); if (editorInfo != null && (((editorInfo.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) == 0) || ctrl)) { // Ctrl+Return overrides IME_FLAG_NO_ENTER_ACTION (FIXME: make configurable?) // check for special DONE/GO/etc actions first: int[] actions = { EditorInfo.IME_ACTION_GO, EditorInfo.IME_ACTION_NEXT, EditorInfo.IME_ACTION_SEND, EditorInfo.IME_ACTION_SEARCH, EditorInfo.IME_ACTION_DONE }; // note: DONE should be last or we might hide the ime instead of "go" for (int i = 0; i < actions.length; i++) { if ((editorInfo.imeOptions & actions[i]) == actions[i]) { // Log.d("RemoteKeyboardPlugin", "Enter-action: " + actions[i]); inputConn.performEditorAction(actions[i]); return true; } } } else { // else: fall back to regular Enter-event: // Log.d("RemoteKeyboardPlugin", "Enter: normal keypress"); inputConn.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, keyEvent)); inputConn.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keyEvent)); } } else { // default handling: inputConn.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, keyEvent)); inputConn.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keyEvent)); } return true; }
From source file:com.anysoftkeyboard.AnySoftKeyboard.java
private static int getCursorPosition(@Nullable InputConnection connection) { if (connection == null) return 0; ExtractedText extracted = connection.getExtractedText(EXTRACTED_TEXT_REQUEST, 0); if (extracted == null) return 0; return extracted.startOffset + extracted.selectionStart; }
From source file:org.distantshoresmedia.keyboard.LatinIME.java
private void checkReCorrectionOnStart() { if (mReCorrectionEnabled && isPredictionOn()) { // First get the cursor position. This is required by // setOldSuggestions(), so that // it can pass the correct range to setComposingRegion(). At this // point, we don't // have valid values for mLastSelectionStart/Stop because // onUpdateSelection() has // not been called yet. InputConnection ic = getCurrentInputConnection(); if (ic == null) return; ExtractedTextRequest etr = new ExtractedTextRequest(); etr.token = 0; // anything is fine here ExtractedText et = ic.getExtractedText(etr, 0); if (et == null) return; mLastSelectionStart = et.startOffset + et.selectionStart; mLastSelectionEnd = et.startOffset + et.selectionEnd; // Then look for possible corrections in a delayed fashion if (!TextUtils.isEmpty(et.text) && isCursorTouchingWord()) { postUpdateOldSuggestions();/*from w w w .j a v a2 s . c o m*/ } } }