19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007-2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); you may not 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * use this file except in compliance with the License. You may obtain a copy of 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * License for the specific language governing permissions and limitations under 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.view.inputmethod; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.KeyCharacterMap; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.KeyEvent; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The InputConnection interface is the communication channel from an 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link InputMethod} back to the application that is receiving its input. It 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is used to perform such things as reading text around the cursor, 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * committing text to the text box, and sending raw key events to the application. 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 299567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * <p>Applications should never directly implement this interface, but instead 309567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * subclass from {@link BaseInputConnection}. This will ensure that the 319567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * application does not break when new methods are added to the interface. 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic interface InputConnection { 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Flag for use with {@link #getTextAfterCursor} and 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getTextBeforeCursor} to have style information returned along 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with the text. If not set, you will receive only the raw text. If 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set, you may receive a complex CharSequence of both text and style 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * spans. 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final int GET_TEXT_WITH_STYLES = 0x0001; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Flag for use with {@link #getExtractedText} to indicate you would 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * like to receive updates when the extracted text changes. 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int GET_EXTRACTED_TEXT_MONITOR = 0x0001; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get <var>n</var> characters of text before the current cursor position. 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This method may fail either if the input connection has become invalid 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (such as its process crashing) or the client is taking too long to 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * respond with the text (it is given a couple seconds to return). 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In either case, a null is returned. 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param n The expected length of the text. 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param flags Supplies additional options controlling how the text is 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returned. May be either 0 or {@link #GET_TEXT_WITH_STYLES}. 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the text before the cursor position; the length of the 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returned text might be less than <var>n</var>. 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence getTextBeforeCursor(int n, int flags); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get <var>n</var> characters of text after the current cursor position. 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This method may fail either if the input connection has become invalid 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (such as its process crashing) or the client is taking too long to 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * respond with the text (it is given a couple seconds to return). 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In either case, a null is returned. 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param n The expected length of the text. 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param flags Supplies additional options controlling how the text is 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returned. May be either 0 or {@link #GET_TEXT_WITH_STYLES}. 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the text after the cursor position; the length of the 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returned text might be less than <var>n</var>. 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence getTextAfterCursor(int n, int flags); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 84a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani * Gets the selected text, if any. 85a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani * 86a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani * <p>This method may fail if either the input connection has become 87a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani * invalid (such as its process crashing) or the client is taking too 88a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani * long to respond with the text (it is given a couple of seconds to return). 89a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani * In either case, a null is returned. 90a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani * 91a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani * @param flags Supplies additional options controlling how the text is 92a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani * returned. May be either 0 or {@link #GET_TEXT_WITH_STYLES}. 93a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani * @return Returns the text that is currently selected, if any, or null if 94a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani * no text is selected. 95a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani */ 96a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani public CharSequence getSelectedText(int flags); 97a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani 98a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani /** 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the current capitalization mode in effect at the current 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * cursor position in the text. See 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.text.TextUtils#getCapsMode TextUtils.getCapsMode} for 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * more information. 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This method may fail either if the input connection has become invalid 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (such as its process crashing) or the client is taking too long to 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * respond with the text (it is given a couple seconds to return). 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In either case, a 0 is returned. 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param reqModes The desired modes to retrieve, as defined by 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.text.TextUtils#getCapsMode TextUtils.getCapsMode}. These 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * constants are defined so that you can simply pass the current 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link EditorInfo#inputType TextBoxAttribute.contentType} value 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * directly in to here. 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the caps mode flags that are in effect. 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getCursorCapsMode(int reqModes); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the current text in the input connection's editor, and monitor 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for any changes to it. This function returns with the current text, 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and optionally the input connection can send updates to the 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * input method when its text changes. 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This method may fail either if the input connection has become invalid 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (such as its process crashing) or the client is taking too long to 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * respond with the text (it is given a couple seconds to return). 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In either case, a null is returned. 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param request Description of how the text should be returned. 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param flags Additional options to control the client, either 0 or 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #GET_EXTRACTED_TEXT_MONITOR}. 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns an ExtractedText object describing the state of the 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * text view and containing the extracted text itself. 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ExtractedText getExtractedText(ExtractedTextRequest request, 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int flags); 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Delete <var>leftLength</var> characters of text before the current cursor 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * position, and delete <var>rightLength</var> characters of text after the 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current cursor position, excluding composing text. 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param leftLength The number of characters to be deleted before the 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current cursor position. 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param rightLength The number of characters to be deleted after the 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current cursor position. 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns true on success, false if the input connection is no longer 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * valid. 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 153b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project public boolean deleteSurroundingText(int leftLength, int rightLength); 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set composing text around the current cursor position with the given text, 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and set the new cursor position. Any composing text set previously will 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be removed automatically. 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The composing text with styles if necessary. If no style 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object attached to the text, the default style for composing text 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is used. See {#link android.text.Spanned} for how to attach style 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object to the text. {#link android.text.SpannableString} and 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {#link android.text.SpannableStringBuilder} are two 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementations of the interface {#link android.text.Spanned}. 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newCursorPosition The new cursor position around the text. If 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * > 0, this is relative to the end of the text - 1; if <= 0, this 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is relative to the start of the text. So a value of 1 will 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * always advance you to the position after the full text being 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inserted. Note that this means you can't position the cursor 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * within the text, because the editor can make modifications to 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the text you are providing so it is not possible to correctly 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specify locations there. 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns true on success, false if the input connection is no longer 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * valid. 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean setComposingText(CharSequence text, int newCursorPosition); 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 181a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani * Mark a certain region of text as composing text. Any composing text set 182a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani * previously will be removed automatically. The default style for composing 183a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani * text is used. 184a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani * 185a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani * @param start the position in the text at which the composing region begins 186a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani * @param end the position in the text at which the composing region ends 187a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani * @return Returns true on success, false if the input connection is no longer 188a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani * valid. 189a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani */ 190a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani public boolean setComposingRegion(int start, int end); 191a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani 192a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani /** 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Have the text editor finish whatever composing text is currently 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * active. This simply leaves the text as-is, removing any special 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * composing styling or other state that was around it. The cursor 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * position remains unchanged. 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean finishComposingText(); 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Commit text to the text box and set the new cursor position. 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Any composing text set previously will be removed 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * automatically. 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The committed text. 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newCursorPosition The new cursor position around the text. If 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * > 0, this is relative to the end of the text - 1; if <= 0, this 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is relative to the start of the text. So a value of 1 will 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * always advance you to the position after the full text being 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inserted. Note that this means you can't position the cursor 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * within the text, because the editor can make modifications to 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the text you are providing so it is not possible to correctly 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specify locations there. 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns true on success, false if the input connection is no longer 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * valid. 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean commitText(CharSequence text, int newCursorPosition); 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Commit a completion the user has selected from the possible ones 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * previously reported to {@link InputMethodSession#displayCompletions 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * InputMethodSession.displayCompletions()}. This will result in the 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * same behavior as if the user had selected the completion from the 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * actual UI. 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The committed completion. 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns true on success, false if the input connection is no longer 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * valid. 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean commitCompletion(CompletionInfo text); 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 236cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne * Commit a correction automatically performed on the raw user's input. A typical example would 237cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne * be to correct typos using a dictionary. 238cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne * 239cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne * @param correctionInfo Detailed information about the correction. 240cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne * 241cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne * @return True on success, false if the input connection is no longer valid. 242cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne */ 243cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne public boolean commitCorrection(CorrectionInfo correctionInfo); 244cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne 245cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne /** 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the selection of the text editor. To set the cursor position, 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * start and end should have the same value. 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns true on success, false if the input connection is no longer 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * valid. 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean setSelection(int start, int end); 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Have the editor perform an action it has said it can do. 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param editorAction This must be one of the action constants for 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link EditorInfo#imeOptions EditorInfo.editorType}, such as 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link EditorInfo#IME_ACTION_GO EditorInfo.EDITOR_ACTION_GO}. 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns true on success, false if the input connection is no longer 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * valid. 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean performEditorAction(int editorAction); 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Perform a context menu action on the field. The given id may be one of: 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.id#selectAll}, 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.id#startSelectingText}, {@link android.R.id#stopSelectingText}, 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.id#cut}, {@link android.R.id#copy}, 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.id#paste}, {@link android.R.id#copyUrl}, 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or {@link android.R.id#switchInputMethod} 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean performContextMenuAction(int id); 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tell the editor that you are starting a batch of editor operations. 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The editor will try to avoid sending you updates about its state 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * until {@link #endBatchEdit} is called. 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean beginBatchEdit(); 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tell the editor that you are done with a batch edit previously 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * initiated with {@link #endBatchEdit}. 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean endBatchEdit(); 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Send a key event to the process that is currently attached through 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this input connection. The event will be dispatched like a normal 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * key event, to the currently focused; this generally is the view that 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is providing this InputConnection, but due to the asynchronous nature 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of this protocol that can not be guaranteed and the focus may have 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * changed by the time the event is received. 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This method can be used to send key events to the application. For 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * example, an on-screen keyboard may use this method to simulate a hardware 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * keyboard. There are three types of standard keyboards, numeric (12-key), 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * predictive (20-key) and ALPHA (QWERTY). You can specify the keyboard type 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * by specify the device id of the key event. 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You will usually want to set the flag 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link KeyEvent#FLAG_SOFT_KEYBOARD KeyEvent.FLAG_SOFT_KEYBOARD} on all 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * key event objects you give to this API; the flag will not be set 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for you. 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event The key event. 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns true on success, false if the input connection is no longer 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * valid. 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see KeyEvent 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see KeyCharacterMap#NUMERIC 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see KeyCharacterMap#PREDICTIVE 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see KeyCharacterMap#ALPHA 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean sendKeyEvent(KeyEvent event); 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Clear the given meta key pressed states in the given input connection. 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param states The states to be cleared, may be one or more bits as 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * per {@link KeyEvent#getMetaState() KeyEvent.getMetaState()}. 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns true on success, false if the input connection is no longer 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * valid. 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean clearMetaKeyStates(int states); 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called by the IME to tell the client when it switches between fullscreen 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and normal modes. This will normally be called for you by the standard 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of {@link android.inputmethodservice.InputMethodService}. 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean reportFullscreenMode(boolean enabled); 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * API to send private commands from an input method to its connected 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * editor. This can be used to provide domain-specific features that are 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * only known between certain input methods and their clients. Note that 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * because the InputConnection protocol is asynchronous, you have no way 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to get a result back or know if the client understood the command; you 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can use the information in {@link EditorInfo} to determine if 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a client supports a particular command. 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action Name of the command to be performed. This <em>must</em> 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be a scoped name, i.e. prefixed with a package name you own, so that 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * different developers will not create conflicting commands. 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data Any data to include with the command. 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns true if the command was sent (whether or not the 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated editor understood it), false if the input connection is no longer 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * valid. 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean performPrivateCommand(String action, Bundle data); 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 358