summaryrefslogtreecommitdiff
path: root/java/org/gnu/emacs/EmacsInputConnection.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/org/gnu/emacs/EmacsInputConnection.java')
-rw-r--r--java/org/gnu/emacs/EmacsInputConnection.java181
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;
}
}