diff options
Diffstat (limited to 'java/org/gnu/emacs/EmacsInputConnection.java')
| -rw-r--r-- | java/org/gnu/emacs/EmacsInputConnection.java | 181 |
1 files changed, 100 insertions, 81 deletions
diff --git a/java/org/gnu/emacs/EmacsInputConnection.java b/java/org/gnu/emacs/EmacsInputConnection.java index 897a393b984..3cf4419838b 100644 --- a/java/org/gnu/emacs/EmacsInputConnection.java +++ b/java/org/gnu/emacs/EmacsInputConnection.java @@ -25,6 +25,7 @@ import android.view.inputmethod.ExtractedText; import android.view.inputmethod.ExtractedTextRequest; import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.SurroundingText; +import android.view.inputmethod.TextSnapshot; import android.view.KeyEvent; import android.text.Editable; @@ -38,138 +39,156 @@ import android.util.Log; public class EmacsInputConnection extends BaseInputConnection { private static final String TAG = "EmacsInputConnection"; - public EmacsView view; - private EmacsEditable editable; - - /* The length of the last string to be committed. */ - private int lastCommitLength; - - int currentLargeOffset; + private EmacsView view; + private short windowHandle; public EmacsInputConnection (EmacsView view) { - super (view, false); + super (view, true); + this.view = view; - this.editable = new EmacsEditable (this); + this.windowHandle = view.window.handle; } @Override - public Editable - getEditable () + public boolean + beginBatchEdit () { - return editable; + Log.d (TAG, "beginBatchEdit"); + EmacsNative.beginBatchEdit (windowHandle); + return true; } @Override public boolean - setComposingText (CharSequence text, int newCursorPosition) + endBatchEdit () { - editable.compositionStart (); - super.setComposingText (text, newCursorPosition); + Log.d (TAG, "endBatchEdit"); + EmacsNative.endBatchEdit (windowHandle); return true; } @Override public boolean - setComposingRegion (int start, int end) + commitCompletion (CompletionInfo info) { - int i; - - if (lastCommitLength != 0) - { - Log.d (TAG, "Restarting composition for: " + lastCommitLength); - - for (i = 0; i < lastCommitLength; ++i) - sendKeyEvent (new KeyEvent (KeyEvent.ACTION_DOWN, - KeyEvent.KEYCODE_DEL)); + Log.d (TAG, "commitCompletion: " + info); + EmacsNative.commitCompletion (windowHandle, + info.getText ().toString (), + info.getPosition ()); + return true; + } - lastCommitLength = 0; - } + @Override + public boolean + commitText (CharSequence text, int newCursorPosition) + { + Log.d (TAG, "commitText: " + text + " " + newCursorPosition); + EmacsNative.commitText (windowHandle, text.toString (), + newCursorPosition); + return true; + } - editable.compositionStart (); - super.setComposingRegion (start, end); + @Override + public boolean + deleteSurroundingText (int leftLength, int rightLength) + { + Log.d (TAG, ("deleteSurroundingText: " + + leftLength + " " + rightLength)); + EmacsNative.deleteSurroundingText (windowHandle, leftLength, + rightLength); return true; } - + @Override public boolean finishComposingText () { - editable.compositionEnd (); - return super.finishComposingText (); + Log.d (TAG, "finishComposingText"); + + EmacsNative.finishComposingText (windowHandle); + return true; } @Override - public boolean - beginBatchEdit () + public String + getSelectedText (int flags) { - editable.beginBatchEdit (); - return super.beginBatchEdit (); + Log.d (TAG, "getSelectedText: " + flags); + + return EmacsNative.getSelectedText (windowHandle, flags); } @Override - public boolean - endBatchEdit () + public String + getTextAfterCursor (int length, int flags) { - editable.endBatchEdit (); - return super.endBatchEdit (); + Log.d (TAG, "getTextAfterCursor: " + length + " " + flags); + + return EmacsNative.getTextAfterCursor (windowHandle, length, + flags); } - + @Override - public boolean - commitText (CharSequence text, int newCursorPosition) + public String + getTextBeforeCursor (int length, int flags) { - editable.compositionEnd (); - super.commitText (text, newCursorPosition); + Log.d (TAG, "getTextBeforeCursor: " + length + " " + flags); - /* An observation is that input methods rarely recompose trailing - spaces. Avoid re-setting the commit length in that case. */ + return EmacsNative.getTextBeforeCursor (windowHandle, length, + flags); + } - if (text.toString ().equals (" ")) - lastCommitLength += 1; - else - /* At this point, the editable is now empty. - - The input method may try to cancel the edit upon a subsequent - backspace by calling setComposingRegion with a region that is - the length of TEXT. - - Record this length in order to be able to send backspace - events to ``delete'' the text in that case. */ - lastCommitLength = text.length (); + @Override + public boolean + setComposingText (CharSequence text, int newCursorPosition) + { + Log.d (TAG, "setComposingText: " + newCursorPosition); - Log.d (TAG, "commitText: \"" + text + "\""); + EmacsNative.setComposingText (windowHandle, text.toString (), + newCursorPosition); + return true; + } + @Override + public boolean + setComposingRegion (int start, int end) + { + Log.d (TAG, "setComposingRegion: " + start + " " + end); + + EmacsNative.setComposingRegion (windowHandle, start, end); return true; } - /* Return a large offset, cycling through 100000, 30000, 0. - The offset is typically used to force the input method to update - its notion of ``surrounding text'', bypassing any caching that - it might have in progress. + @Override + public boolean + performEditorAction (int editorAction) + { + Log.d (TAG, "performEditorAction: " + editorAction); - There must be another way to do this, but I can't find it. */ + EmacsNative.performEditorAction (windowHandle, editorAction); + return true; + } - public int - largeSelectionOffset () + @Override + public ExtractedText + getExtractedText (ExtractedTextRequest request, int flags) { - switch (currentLargeOffset) - { - case 0: - currentLargeOffset = 100000; - return 100000; + Log.d (TAG, "getExtractedText: " + request + " " + flags); - case 100000: - currentLargeOffset = 30000; - return 30000; + return EmacsNative.getExtractedText (windowHandle, request, + flags); + } - case 30000: - currentLargeOffset = 0; - return 0; - } + + /* Override functions which are not implemented. */ - currentLargeOffset = 0; - return -1; + @Override + public TextSnapshot + takeSnapshot () + { + Log.d (TAG, "takeSnapshot"); + return null; } } |
