/* * Copyright (C) 2007-2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package android.view.inputmethod; import android.graphics.Rect; import android.os.Bundle; import android.view.KeyEvent; import android.view.MotionEvent; /** * The InputMethodSession interface provides the per-client functionality * of {@link InputMethod} that is safe to expose to applications. * *

Applications will not normally use this interface themselves, instead * relying on the standard interaction provided by * {@link android.widget.TextView} and {@link android.widget.EditText}. */ public interface InputMethodSession { public interface EventCallback { void finishedEvent(int seq, boolean handled); } /** * This method is called when the application would like to stop * receiving text input. */ public void finishInput(); /** * This method is called when the selection or cursor in the current * target input field has changed. * * @param oldSelStart The previous text offset of the cursor selection * start position. * @param oldSelEnd The previous text offset of the cursor selection * end position. * @param newSelStart The new text offset of the cursor selection * start position. * @param newSelEnd The new text offset of the cursor selection * end position. * @param candidatesStart The text offset of the current candidate * text start position. * @param candidatesEnd The text offset of the current candidate * text end position. */ public void updateSelection(int oldSelStart, int oldSelEnd, int newSelStart, int newSelEnd, int candidatesStart, int candidatesEnd); /** * This method is called when the user tapped a text view. * IMEs can't rely on this method being called because this was not part of the original IME * protocol, so applications with custom text editing written before this method appeared will * not call to inform the IME of this interaction. * @param focusChanged true if the user changed the focused view by this click. */ public void viewClicked(boolean focusChanged); /** * This method is called when cursor location of the target input field * has changed within its window. This is not normally called, but will * only be reported if requested by the input method. * * @param newCursor The rectangle of the cursor currently being shown in * the input field's window coordinates. */ public void updateCursor(Rect newCursor); /** * Called by a text editor that performs auto completion, to tell the * input method about the completions it has available. This can be used * by the input method to display them to the user to select the text to * be inserted. * * @param completions Array of text completions that are available, starting with * the best. If this array is null, any existing completions will be * removed. */ public void displayCompletions(CompletionInfo[] completions); /** * Called by a text editor to report its new extracted text when its * contents change. This will only be called if the input method * calls {@link InputConnection#getExtractedText(ExtractedTextRequest, int) * InputConnection.getExtractedText()} with the option to report updates. * * @param token The input method supplied token for identifying its request. * @param text The new extracted text. */ public void updateExtractedText(int token, ExtractedText text); /** * This method is called when a key is pressed. When done with the event, * the implementation must call back on callback with its * result. * *

* If the input method wants to handle this event, return true, otherwise * return false and the caller (i.e. the application) will handle the event. * * @param event The key event. * * @return Whether the input method wants to handle this event. * * @see #dispatchKeyUp * @see android.view.KeyEvent */ public void dispatchKeyEvent(int seq, KeyEvent event, EventCallback callback); /** * This method is called when there is a track ball event. * *

* If the input method wants to handle this event, return true, otherwise * return false and the caller (i.e. the application) will handle the event. * * @param event The motion event. * * @return Whether the input method wants to handle this event. * * @see android.view.MotionEvent */ public void dispatchTrackballEvent(int seq, MotionEvent event, EventCallback callback); /** * This method is called when there is a generic motion event. * *

* If the input method wants to handle this event, return true, otherwise * return false and the caller (i.e. the application) will handle the event. * * @param event The motion event. * * @return Whether the input method wants to handle this event. * * @see android.view.MotionEvent */ public void dispatchGenericMotionEvent(int seq, MotionEvent event, EventCallback callback); /** * Process a private command sent from the application to the input method. * This can be used to provide domain-specific features that are * only known between certain input methods and their clients. * * @param action Name of the command to be performed. This must * be a scoped name, i.e. prefixed with a package name you own, so that * different developers will not create conflicting commands. * @param data Any data to include with the command. */ public void appPrivateCommand(String action, Bundle data); /** * Toggle the soft input window. * Applications can toggle the state of the soft input window. * @param showFlags Provides additional operating flags. May be * 0 or have the {@link InputMethodManager#SHOW_IMPLICIT}, * {@link InputMethodManager#SHOW_FORCED} bit set. * @param hideFlags Provides additional operating flags. May be * 0 or have the {@link InputMethodManager#HIDE_IMPLICIT_ONLY}, * {@link InputMethodManager#HIDE_NOT_ALWAYS} bit set. */ public void toggleSoftInput(int showFlags, int hideFlags); /** * This method is called when the cursor and/or the character position relevant to text input * is changed on the screen. This is not called by default. It will only be reported if * requested by the input method. * * @param cursorAnchorInfo Positional information relevant to text input, such as text * insertion point and composition string. */ public void updateCursorAnchorInfo(CursorAnchorInfo cursorAnchorInfo); }