blob: 073b01c7b9ce6458beb9a95b4f0e163a2e37b81d [file] [log] [blame]
package android.view.inputmethod;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import com.android.internal.view.IInputContext;
import com.android.internal.view.IInputMethod;
import com.android.internal.view.IInputMethodCallback;
import com.android.internal.view.IInputMethodSession;
import com.android.internal.view.InputConnectionWrapper;
/**
* This is the default input method that runs in the same context of the
* application that requests text input. It does nothing but returns false for
* any key events, so that all key events will be processed by the key listener
* of the focused text box.
* {@hide}
*/
public class DefaultInputMethod implements InputMethod, InputMethodSession {
private static IInputMethod sInstance = new SimpleInputMethod(
new DefaultInputMethod());
private static InputMethodInfo sProperty = new InputMethodInfo(
"android.text.inputmethod", DefaultInputMethod.class.getName(),
"Default", "android.text.inputmethod.defaultImeSettings");
private InputConnection mInputConnection;
public static IInputMethod getInstance() {
return sInstance;
}
public static InputMethodInfo getMetaInfo() {
return sProperty;
}
public void bindInput(InputBinding binding) {
mInputConnection = binding.getConnection();
}
public void unbindInput() {
}
public void createSession(SessionCallback callback) {
callback.sessionCreated(this);
}
public void setSessionEnabled(InputMethodSession session, boolean enabled) {
}
public void revokeSession(InputMethodSession session) {
}
public void finishInput() {
mInputConnection.hideStatusIcon();
}
public void displayCompletions(CompletionInfo[] completions) {
}
public void updateExtractedText(int token, ExtractedText text) {
}
public void updateSelection(int oldSelStart, int oldSelEnd,
int newSelStart, int newSelEnd, int candidatesStart, int candidatesEnd) {
}
public void updateCursor(Rect newCursor) {
}
public void dispatchKeyEvent(int seq, KeyEvent event, EventCallback callback) {
callback.finishedEvent(seq, false);
}
public void dispatchTrackballEvent(int seq, MotionEvent event, EventCallback callback) {
callback.finishedEvent(seq, false);
}
public void restartInput(EditorInfo attribute) {
}
public void attachToken(IBinder token) {
}
public void startInput(EditorInfo attribute) {
mInputConnection
.showStatusIcon("android", com.android.internal.R.drawable.ime_qwerty);
}
public void appPrivateCommand(String action, Bundle data) {
}
public void hideSoftInput() {
}
public void showSoftInput(int flags) {
}
}
// ----------------------------------------------------------------------
class SimpleInputMethod extends IInputMethod.Stub {
final InputMethod mInputMethod;
static class Session extends IInputMethodSession.Stub {
final InputMethodSession mSession;
Session(InputMethodSession session) {
mSession = session;
}
public void finishInput() {
mSession.finishInput();
}
public void updateSelection(int oldSelStart, int oldSelEnd,
int newSelStart, int newSelEnd, int candidatesStart, int candidatesEnd) {
mSession.updateSelection(oldSelStart, oldSelEnd,
newSelStart, newSelEnd, candidatesStart, candidatesEnd);
}
public void updateCursor(Rect newCursor) {
mSession.updateCursor(newCursor);
}
static class InputMethodEventCallbackWrapper implements InputMethodSession.EventCallback {
final IInputMethodCallback mCb;
InputMethodEventCallbackWrapper(IInputMethodCallback cb) {
mCb = cb;
}
public void finishedEvent(int seq, boolean handled) {
try {
mCb.finishedEvent(seq, handled);
} catch (RemoteException e) {
}
}
}
public void dispatchKeyEvent(int seq, KeyEvent event, IInputMethodCallback callback) {
mSession.dispatchKeyEvent(seq, event,
new InputMethodEventCallbackWrapper(callback));
}
public void dispatchTrackballEvent(int seq, MotionEvent event, IInputMethodCallback callback) {
mSession.dispatchTrackballEvent(seq, event,
new InputMethodEventCallbackWrapper(callback));
}
public void displayCompletions(CompletionInfo[] completions) {
mSession.displayCompletions(completions);
}
public void updateExtractedText(int token, ExtractedText text) {
mSession.updateExtractedText(token, text);
}
public void appPrivateCommand(String action, Bundle data) {
mSession.appPrivateCommand(action, data);
}
}
public SimpleInputMethod(InputMethod inputMethod) {
mInputMethod = inputMethod;
}
public InputMethod getInternalInputMethod() {
return mInputMethod;
}
public void attachToken(IBinder token) {
mInputMethod.attachToken(token);
}
public void bindInput(InputBinding binding) {
InputConnectionWrapper ic = new InputConnectionWrapper(
IInputContext.Stub.asInterface(binding.getConnectionToken()));
InputBinding nu = new InputBinding(ic, binding);
mInputMethod.bindInput(nu);
}
public void unbindInput() {
mInputMethod.unbindInput();
}
public void restartInput(EditorInfo attribute) {
mInputMethod.restartInput(attribute);
}
public void startInput(EditorInfo attribute) {
mInputMethod.startInput(attribute);
}
static class InputMethodSessionCallbackWrapper implements InputMethod.SessionCallback {
final IInputMethodCallback mCb;
InputMethodSessionCallbackWrapper(IInputMethodCallback cb) {
mCb = cb;
}
public void sessionCreated(InputMethodSession session) {
try {
mCb.sessionCreated(new Session(session));
} catch (RemoteException e) {
}
}
}
public void createSession(IInputMethodCallback callback) throws RemoteException {
mInputMethod.createSession(new InputMethodSessionCallbackWrapper(callback));
}
public void setSessionEnabled(IInputMethodSession session, boolean enabled) throws RemoteException {
try {
InputMethodSession ls = ((Session)session).mSession;
mInputMethod.setSessionEnabled(ls, enabled);
} catch (ClassCastException e) {
Log.w("SimpleInputMethod", "Incoming session not of correct type: " + session, e);
}
}
public void revokeSession(IInputMethodSession session) throws RemoteException {
try {
InputMethodSession ls = ((Session)session).mSession;
mInputMethod.revokeSession(ls);
} catch (ClassCastException e) {
Log.w("SimpleInputMethod", "Incoming session not of correct type: " + session, e);
}
}
public void showSoftInput(boolean blah) {
}
public void hideSoftInput() {
}
}