fix: update text selection for API level lower than 33
This commit is contained in:
parent
7b24835c9e
commit
70dd3f323e
@ -19,6 +19,7 @@ import android.view.accessibility.AccessibilityEvent
|
|||||||
import android.view.accessibility.AccessibilityNodeInfo
|
import android.view.accessibility.AccessibilityNodeInfo
|
||||||
import android.accessibilityservice.AccessibilityServiceInfo
|
import android.accessibilityservice.AccessibilityServiceInfo
|
||||||
import android.accessibilityservice.AccessibilityServiceInfo.FLAG_INPUT_METHOD_EDITOR
|
import android.accessibilityservice.AccessibilityServiceInfo.FLAG_INPUT_METHOD_EDITOR
|
||||||
|
import android.view.inputmethod.EditorInfo
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.lang.Character
|
import java.lang.Character
|
||||||
@ -319,6 +320,9 @@ class InputService : AccessibilityService() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun insertAccessibilityNode(list: LinkedList<AccessibilityNodeInfo>, node: AccessibilityNodeInfo) {
|
private fun insertAccessibilityNode(list: LinkedList<AccessibilityNodeInfo>, node: AccessibilityNodeInfo) {
|
||||||
|
if (node == null) {
|
||||||
|
return
|
||||||
|
}
|
||||||
if (list.contains(node)) {
|
if (list.contains(node)) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -410,6 +414,8 @@ class InputService : AccessibilityService() {
|
|||||||
|
|
||||||
private fun trySendKeyEvent(event: android.view.KeyEvent, node: AccessibilityNodeInfo, textToCommit: String?): Boolean {
|
private fun trySendKeyEvent(event: android.view.KeyEvent, node: AccessibilityNodeInfo, textToCommit: String?): Boolean {
|
||||||
node.refresh()
|
node.refresh()
|
||||||
|
this.fakeEditTextForTextStateCalculation?.setSelection(0,0)
|
||||||
|
this.fakeEditTextForTextStateCalculation?.setText(null)
|
||||||
val text = node.getText()
|
val text = node.getText()
|
||||||
var isShowingHint = false
|
var isShowingHint = false
|
||||||
if (Build.VERSION.SDK_INT >= 26) {
|
if (Build.VERSION.SDK_INT >= 26) {
|
||||||
@ -463,7 +469,13 @@ class InputService : AccessibilityService() {
|
|||||||
textSelectionEnd
|
textSelectionEnd
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
this.fakeEditTextForTextStateCalculation?.dispatchKeyEvent(event)
|
|
||||||
|
this.fakeEditTextForTextStateCalculation?.let {
|
||||||
|
val inputConnection = it.onCreateInputConnection(EditorInfo())
|
||||||
|
if (inputConnection != null) {
|
||||||
|
success = inputConnection.sendKeyEvent(event)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.fakeEditTextForTextStateCalculation?.getText()?.let { newText ->
|
this.fakeEditTextForTextStateCalculation?.getText()?.let { newText ->
|
||||||
val arguments = Bundle()
|
val arguments = Bundle()
|
||||||
@ -473,6 +485,24 @@ class InputService : AccessibilityService() {
|
|||||||
)
|
)
|
||||||
success = node.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments)
|
success = node.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (success && this.fakeEditTextForTextStateCalculation != null) {
|
||||||
|
val selectionStart = this.fakeEditTextForTextStateCalculation?.selectionStart
|
||||||
|
val selectionEnd = this.fakeEditTextForTextStateCalculation?.selectionEnd
|
||||||
|
|
||||||
|
if (selectionStart != null && selectionEnd != null) {
|
||||||
|
val arguments = Bundle()
|
||||||
|
arguments.putInt(
|
||||||
|
AccessibilityNodeInfo.ACTION_ARGUMENT_SELECTION_START_INT,
|
||||||
|
selectionStart
|
||||||
|
)
|
||||||
|
arguments.putInt(
|
||||||
|
AccessibilityNodeInfo.ACTION_ARGUMENT_SELECTION_END_INT,
|
||||||
|
selectionEnd
|
||||||
|
)
|
||||||
|
success = node.performAction(AccessibilityNodeInfo.ACTION_SET_SELECTION, arguments)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return success
|
return success
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user