diff options
author | Gilles Debunne <debunne@google.com> | 2010-12-08 17:43:58 -0800 |
---|---|---|
committer | Gilles Debunne <debunne@google.com> | 2010-12-10 11:31:59 -0800 |
commit | cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91 (patch) | |
tree | 89a70a7fd0d4c3289df77b6e2422d0ce59409e81 /core/java/com/android | |
parent | 70e81ba9abbac2f9e5add30fb749c4bd85441d4c (diff) | |
download | frameworks_base-cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91.zip frameworks_base-cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91.tar.gz frameworks_base-cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91.tar.bz2 |
New API in InputConnection to signal IME's text correction.
Scafolding so that the IME team can start working on this feature.
The animation part in the TextView is missing.
Change-Id: I8225538564370fba1500e3539742a8ab79bdd199
Diffstat (limited to 'core/java/com/android')
4 files changed, 51 insertions, 1 deletions
diff --git a/core/java/com/android/internal/view/IInputConnectionWrapper.java b/core/java/com/android/internal/view/IInputConnectionWrapper.java index 986ba38..b5df812 100644 --- a/core/java/com/android/internal/view/IInputConnectionWrapper.java +++ b/core/java/com/android/internal/view/IInputConnectionWrapper.java @@ -24,6 +24,7 @@ import android.os.RemoteException; import android.util.Log; import android.view.KeyEvent; import android.view.inputmethod.CompletionInfo; +import android.view.inputmethod.CorrectionInfo; import android.view.inputmethod.ExtractedTextRequest; import android.view.inputmethod.InputConnection; @@ -39,6 +40,7 @@ public class IInputConnectionWrapper extends IInputContext.Stub { private static final int DO_GET_EXTRACTED_TEXT = 40; private static final int DO_COMMIT_TEXT = 50; private static final int DO_COMMIT_COMPLETION = 55; + private static final int DO_COMMIT_CORRECTION = 56; private static final int DO_SET_SELECTION = 57; private static final int DO_PERFORM_EDITOR_ACTION = 58; private static final int DO_PERFORM_CONTEXT_MENU_ACTION = 59; @@ -116,6 +118,10 @@ public class IInputConnectionWrapper extends IInputContext.Stub { dispatchMessage(obtainMessageO(DO_COMMIT_COMPLETION, text)); } + public void commitCorrection(CorrectionInfo info) { + dispatchMessage(obtainMessageO(DO_COMMIT_CORRECTION, info)); + } + public void setSelection(int start, int end) { dispatchMessage(obtainMessageII(DO_SET_SELECTION, start, end)); } @@ -309,6 +315,15 @@ public class IInputConnectionWrapper extends IInputContext.Stub { ic.commitCompletion((CompletionInfo)msg.obj); return; } + case DO_COMMIT_CORRECTION: { + InputConnection ic = mInputConnection.get(); + if (ic == null || !isActive()) { + Log.w(TAG, "commitCorrection on inactive InputConnection"); + return; + } + ic.commitCorrection((CorrectionInfo)msg.obj); + return; + } case DO_SET_COMPOSING_TEXT: { InputConnection ic = mInputConnection.get(); if (ic == null || !isActive()) { diff --git a/core/java/com/android/internal/view/IInputContext.aidl b/core/java/com/android/internal/view/IInputContext.aidl index 333fc82..e00dd4e 100644 --- a/core/java/com/android/internal/view/IInputContext.aidl +++ b/core/java/com/android/internal/view/IInputContext.aidl @@ -19,6 +19,7 @@ package com.android.internal.view; import android.os.Bundle; import android.view.KeyEvent; import android.view.inputmethod.CompletionInfo; +import android.view.inputmethod.CorrectionInfo; import android.view.inputmethod.ExtractedTextRequest; import com.android.internal.view.IInputContextCallback; @@ -48,6 +49,8 @@ import com.android.internal.view.IInputContextCallback; void commitCompletion(in CompletionInfo completion); + void commitCorrection(in CorrectionInfo correction); + void setSelection(int start, int end); void performEditorAction(int actionCode); diff --git a/core/java/com/android/internal/view/InputConnectionWrapper.java b/core/java/com/android/internal/view/InputConnectionWrapper.java index 08c3026..b13118a 100644 --- a/core/java/com/android/internal/view/InputConnectionWrapper.java +++ b/core/java/com/android/internal/view/InputConnectionWrapper.java @@ -22,6 +22,7 @@ import android.os.SystemClock; import android.util.Log; import android.view.KeyEvent; import android.view.inputmethod.CompletionInfo; +import android.view.inputmethod.CorrectionInfo; import android.view.inputmethod.ExtractedText; import android.view.inputmethod.ExtractedTextRequest; import android.view.inputmethod.InputConnection; @@ -287,6 +288,15 @@ public class InputConnectionWrapper implements InputConnection { } } + public boolean commitCorrection(CorrectionInfo correctionInfo) { + try { + mIInputContext.commitCorrection(correctionInfo); + return true; + } catch (RemoteException e) { + return false; + } + } + public boolean setSelection(int start, int end) { try { mIInputContext.setSelection(start, end); diff --git a/core/java/com/android/internal/widget/EditableInputConnection.java b/core/java/com/android/internal/widget/EditableInputConnection.java index ad329d1..6a1beb4 100644 --- a/core/java/com/android/internal/widget/EditableInputConnection.java +++ b/core/java/com/android/internal/widget/EditableInputConnection.java @@ -22,6 +22,7 @@ import android.text.method.KeyListener; import android.util.Log; import android.view.inputmethod.BaseInputConnection; import android.view.inputmethod.CompletionInfo; +import android.view.inputmethod.CorrectionInfo; import android.view.inputmethod.ExtractedText; import android.view.inputmethod.ExtractedTextRequest; import android.widget.TextView; @@ -37,6 +38,7 @@ public class EditableInputConnection extends BaseInputConnection { mTextView = textview; } + @Override public Editable getEditable() { TextView tv = mTextView; if (tv != null) { @@ -45,16 +47,19 @@ public class EditableInputConnection extends BaseInputConnection { return null; } + @Override public boolean beginBatchEdit() { mTextView.beginBatchEdit(); return true; } + @Override public boolean endBatchEdit() { mTextView.endBatchEdit(); return true; } + @Override public boolean clearMetaKeyStates(int states) { final Editable content = getEditable(); if (content == null) return false; @@ -70,6 +75,7 @@ public class EditableInputConnection extends BaseInputConnection { return true; } + @Override public boolean commitCompletion(CompletionInfo text) { if (DEBUG) Log.v(TAG, "commitCompletion " + text); mTextView.beginBatchEdit(); @@ -78,12 +84,26 @@ public class EditableInputConnection extends BaseInputConnection { return true; } + /** + * Calls the {@link TextView#onCommitCorrection} method of the associated TextView. + */ + @Override + public boolean commitCorrection(CorrectionInfo correctionInfo) { + if (DEBUG) Log.v(TAG, "commitCorrection" + correctionInfo); + mTextView.beginBatchEdit(); + mTextView.onCommitCorrection(correctionInfo); + mTextView.endBatchEdit(); + return true; + } + + @Override public boolean performEditorAction(int actionCode) { if (DEBUG) Log.v(TAG, "performEditorAction " + actionCode); mTextView.onEditorAction(actionCode); return true; } + @Override public boolean performContextMenuAction(int id) { if (DEBUG) Log.v(TAG, "performContextMenuAction " + id); mTextView.beginBatchEdit(); @@ -92,6 +112,7 @@ public class EditableInputConnection extends BaseInputConnection { return true; } + @Override public ExtractedText getExtractedText(ExtractedTextRequest request, int flags) { if (mTextView != null) { ExtractedText et = new ExtractedText(); @@ -104,7 +125,8 @@ public class EditableInputConnection extends BaseInputConnection { } return null; } - + + @Override public boolean performPrivateCommand(String action, Bundle data) { mTextView.onPrivateIMECommand(action, data); return true; |