summaryrefslogtreecommitdiff
path: root/java/org/gnu/emacs/EmacsService.java
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2023-06-15 12:36:50 +0800
committerPo Lu <luangruo@yahoo.com>2023-06-15 12:36:50 +0800
commit363e293cc919ab02c40bd9a8fa4875c2e5644b2d (patch)
tree5fa537364e29fbcdb13cd195ac6da253a6d95771 /java/org/gnu/emacs/EmacsService.java
parentca120044ac11d38ca1e8cac7903be38d5ca15d2b (diff)
Update Android port
* java/org/gnu/emacs/EmacsInputConnection.java (EmacsInputConnection, beginBatchEdit, reset, endBatchEdit): Keep track of the number of batch edits and return an appropriate value. (takeSnapshot): Implement function. * java/org/gnu/emacs/EmacsNative.java (takeSnapshot): New function. * java/org/gnu/emacs/EmacsService.java (resetIC): Improve debugging output. * java/org/gnu/emacs/EmacsView.java (onCreateInputConnection): Call `reset' to clear the UI side batch edit count. * src/androidterm.c (struct android_get_surrounding_text_context): New fields `conversion_start' and `conversion_end'. (android_get_surrounding_text): Return the conversion region. (android_get_surrounding_text_internal, NATIVE_NAME): Factor out `getSurroundingText'. (takeSnapshot): New function.
Diffstat (limited to 'java/org/gnu/emacs/EmacsService.java')
-rw-r--r--java/org/gnu/emacs/EmacsService.java25
1 files changed, 24 insertions, 1 deletions
diff --git a/java/org/gnu/emacs/EmacsService.java b/java/org/gnu/emacs/EmacsService.java
index 96216e51cf4..2fe4e8c4146 100644
--- a/java/org/gnu/emacs/EmacsService.java
+++ b/java/org/gnu/emacs/EmacsService.java
@@ -767,8 +767,31 @@ public final class EmacsService extends Service
public void
resetIC (EmacsWindow window, int icMode)
{
+ int oldMode;
+
if (DEBUG_IC)
- Log.d (TAG, "resetIC: " + window);
+ Log.d (TAG, "resetIC: " + window + ", " + icMode);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU
+ && (oldMode = window.view.getICMode ()) == icMode
+ /* Don't do this if there is currently no input
+ connection. */
+ && oldMode != IC_MODE_NULL)
+ {
+ if (DEBUG_IC)
+ Log.d (TAG, "resetIC: calling invalidateInput");
+
+ /* Android 33 and later allow the IM reset to be optimized out
+ and replaced by a call to `invalidateInput', which is much
+ faster, as it does not involve resetting the input
+ connection. */
+
+ icBeginSynchronous ();
+ window.view.imManager.invalidateInput (window.view);
+ icEndSynchronous ();
+
+ return;
+ }
window.view.setICMode (icMode);