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    /**
1410c95dd3f4f02564fab9b86a221bbcbb4aafc2981Fabrice Di Meglio     * Delete <var>beforeLength</var> characters of text before the current cursor
1420c95dd3f4f02564fab9b86a221bbcbb4aafc2981Fabrice Di Meglio     * position, and delete <var>afterLength</var> characters of text after the
14339d23bddef15cd3f5fd2f336afe193c912d32ac3Fabrice Di Meglio     * current cursor position, excluding composing text. Before and after refer
14439d23bddef15cd3f5fd2f336afe193c912d32ac3Fabrice Di Meglio     * to the order of the characters in the string, not to their visual representation.
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1460c95dd3f4f02564fab9b86a221bbcbb4aafc2981Fabrice Di Meglio     *
1470c95dd3f4f02564fab9b86a221bbcbb4aafc2981Fabrice Di Meglio     * @param beforeLength The number of characters to be deleted before the
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        current cursor position.
1490c95dd3f4f02564fab9b86a221bbcbb4aafc2981Fabrice Di Meglio     * @param afterLength The number of characters to be deleted after the
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        current cursor position.
1510c95dd3f4f02564fab9b86a221bbcbb4aafc2981Fabrice Di Meglio     *
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns true on success, false if the input connection is no longer
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * valid.
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1550c95dd3f4f02564fab9b86a221bbcbb4aafc2981Fabrice Di Meglio    public boolean deleteSurroundingText(int beforeLength, int afterLength);
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set composing text around the current cursor position with the given text,
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and set the new cursor position.  Any composing text set previously will
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be removed automatically.
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param text The composing text with styles if necessary. If no style
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        object attached to the text, the default style for composing text
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        is used. See {#link android.text.Spanned} for how to attach style
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        object to the text. {#link android.text.SpannableString} and
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        {#link android.text.SpannableStringBuilder} are two
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        implementations of the interface {#link android.text.Spanned}.
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param newCursorPosition The new cursor position around the text.  If
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        > 0, this is relative to the end of the text - 1; if <= 0, this
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        is relative to the start of the text.  So a value of 1 will
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        always advance you to the position after the full text being
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        inserted.  Note that this means you can't position the cursor
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        within the text, because the editor can make modifications to
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        the text you are providing so it is not possible to correctly
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        specify locations there.
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns true on success, false if the input connection is no longer
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * valid.
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean setComposingText(CharSequence text, int newCursorPosition);
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
183a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani     * Mark a certain region of text as composing text. Any composing text set
184a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani     * previously will be removed automatically. The default style for composing
185a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani     * text is used.
186a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani     *
187a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani     * @param start the position in the text at which the composing region begins
188a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani     * @param end the position in the text at which the composing region ends
189a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani     * @return Returns true on success, false if the input connection is no longer
190a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani     * valid.
191a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani     */
192a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani    public boolean setComposingRegion(int start, int end);
193a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani
194a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani    /**
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Have the text editor finish whatever composing text is currently
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * active.  This simply leaves the text as-is, removing any special
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * composing styling or other state that was around it.  The cursor
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * position remains unchanged.
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean finishComposingText();
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Commit text to the text box and set the new cursor position.
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Any composing text set previously will be removed
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * automatically.
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param text The committed text.
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param newCursorPosition The new cursor position around the text.  If
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        > 0, this is relative to the end of the text - 1; if <= 0, this
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        is relative to the start of the text.  So a value of 1 will
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        always advance you to the position after the full text being
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        inserted.  Note that this means you can't position the cursor
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        within the text, because the editor can make modifications to
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        the text you are providing so it is not possible to correctly
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *        specify locations there.
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns true on success, false if the input connection is no longer
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * valid.
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean commitText(CharSequence text, int newCursorPosition);
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Commit a completion the user has selected from the possible ones
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * previously reported to {@link InputMethodSession#displayCompletions
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * InputMethodSession.displayCompletions()}.  This will result in the
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * same behavior as if the user had selected the completion from the
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * actual UI.
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param text The committed completion.
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns true on success, false if the input connection is no longer
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * valid.
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean commitCompletion(CompletionInfo text);
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
238cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     * Commit a correction automatically performed on the raw user's input. A typical example would
239cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     * be to correct typos using a dictionary.
240cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     *
241cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     * @param correctionInfo Detailed information about the correction.
242cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     *
243cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     * @return True on success, false if the input connection is no longer valid.
244cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     */
245cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    public boolean commitCorrection(CorrectionInfo correctionInfo);
246cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne
247cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    /**
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set the selection of the text editor.  To set the cursor position,
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * start and end should have the same value.
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns true on success, false if the input connection is no longer
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * valid.
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean setSelection(int start, int end);
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Have the editor perform an action it has said it can do.
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param editorAction This must be one of the action constants for
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link EditorInfo#imeOptions EditorInfo.editorType}, such as
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link EditorInfo#IME_ACTION_GO EditorInfo.EDITOR_ACTION_GO}.
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns true on success, false if the input connection is no longer
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * valid.
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean performEditorAction(int editorAction);
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Perform a context menu action on the field.  The given id may be one of:
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.R.id#selectAll},
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.R.id#startSelectingText}, {@link android.R.id#stopSelectingText},
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.R.id#cut}, {@link android.R.id#copy},
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.R.id#paste}, {@link android.R.id#copyUrl},
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * or {@link android.R.id#switchInputMethod}
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean performContextMenuAction(int id);
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Tell the editor that you are starting a batch of editor operations.
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The editor will try to avoid sending you updates about its state
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * until {@link #endBatchEdit} is called.
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean beginBatchEdit();
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Tell the editor that you are done with a batch edit previously
286405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard     * initiated with {@link #beginBatchEdit}.
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean endBatchEdit();
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Send a key event to the process that is currently attached through
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * this input connection.  The event will be dispatched like a normal
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * key event, to the currently focused; this generally is the view that
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is providing this InputConnection, but due to the asynchronous nature
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of this protocol that can not be guaranteed and the focus may have
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * changed by the time the event is received.
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * This method can be used to send key events to the application. For
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * example, an on-screen keyboard may use this method to simulate a hardware
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * keyboard. There are three types of standard keyboards, numeric (12-key),
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * predictive (20-key) and ALPHA (QWERTY). You can specify the keyboard type
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * by specify the device id of the key event.
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * You will usually want to set the flag
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link KeyEvent#FLAG_SOFT_KEYBOARD KeyEvent.FLAG_SOFT_KEYBOARD} on all
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * key event objects you give to this API; the flag will not be set
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for you.
310405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard     *
311405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard     * <p>Note that it's discouraged to send such key events in normal operation;
312405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard     * this is mainly for use with {@link android.text.InputType#TYPE_NULL} type
313405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard     * text fields. Use the {@link #commitText} family of methods to send text
314405bc51c5dc73846a4abdc325cd234eb2d37469fJean Chalard     * to the application instead.
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param event The key event.
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns true on success, false if the input connection is no longer
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * valid.
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see KeyEvent
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see KeyCharacterMap#NUMERIC
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see KeyCharacterMap#PREDICTIVE
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see KeyCharacterMap#ALPHA
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean sendKeyEvent(KeyEvent event);
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Clear the given meta key pressed states in the given input connection.
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param states The states to be cleared, may be one or more bits as
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * per {@link KeyEvent#getMetaState() KeyEvent.getMetaState()}.
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns true on success, false if the input connection is no longer
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * valid.
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean clearMetaKeyStates(int states);
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Called by the IME to tell the client when it switches between fullscreen
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and normal modes.  This will normally be called for you by the standard
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * implementation of {@link android.inputmethodservice.InputMethodService}.
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean reportFullscreenMode(boolean enabled);
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * API to send private commands from an input method to its connected
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * editor.  This can be used to provide domain-specific features that are
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * only known between certain input methods and their clients.  Note that
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * because the InputConnection protocol is asynchronous, you have no way
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to get a result back or know if the client understood the command; you
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can use the information in {@link EditorInfo} to determine if
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a client supports a particular command.
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param action Name of the command to be performed.  This <em>must</em>
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be a scoped name, i.e. prefixed with a package name you own, so that
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * different developers will not create conflicting commands.
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param data Any data to include with the command.
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns true if the command was sent (whether or not the
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * associated editor understood it), false if the input connection is no longer
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * valid.
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean performPrivateCommand(String action, Bundle data);
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
364