From b155cd9a5af2808bb08fc980e7b9260b68102460 Mon Sep 17 00:00:00 2001 From: mcfans Date: Sat, 4 Nov 2023 17:08:49 +0800 Subject: [PATCH] fix: set same rect for correct layout and navigation and set correct selection --- .../main/kotlin/com/carriez/flutter_hbb/InputService.kt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/InputService.kt b/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/InputService.kt index adb888695..57a231975 100644 --- a/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/InputService.kt +++ b/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/InputService.kt @@ -18,6 +18,7 @@ import android.widget.EditText import android.view.accessibility.AccessibilityEvent import android.view.ViewGroup.LayoutParams import android.view.accessibility.AccessibilityNodeInfo +import android.graphics.Rect import android.accessibilityservice.AccessibilityServiceInfo import android.accessibilityservice.AccessibilityServiceInfo.FLAG_INPUT_METHOD_EDITOR import android.accessibilityservice.AccessibilityServiceInfo.FLAG_RETRIEVE_INTERACTIVE_WINDOWS @@ -458,6 +459,10 @@ class InputService : AccessibilityService() { success = updateTextForAccessibilityNode(node) } else if (text != null) { this.fakeEditTextForTextStateCalculation?.setText(text) + this.fakeEditTextForTextStateCalculation?.setSelection( + textSelectionStart, + textSelectionEnd + ) this.fakeEditTextForTextStateCalculation?.text?.insert(textSelectionStart, textToCommit) success = updateTextAndSelectionForAccessibiltyNode(node) } @@ -477,6 +482,10 @@ class InputService : AccessibilityService() { this.fakeEditTextForTextStateCalculation?.let { // This is essiential to make sure layout object is created. OnKeyDown may not work if layout is not created. + val rect = Rect() + node.getBoundsInScreen(rect) + + it.layout(rect.left, rect.top, rect.right, rect.bottom) it.onPreDraw() if (event.action == android.view.KeyEvent.ACTION_DOWN) { val succ = it.onKeyDown(event.getKeyCode(), event)