feat: support android keyboard input

This commit is contained in:
mcfans
2023-10-17 22:12:52 +08:00
parent cf97d090f3
commit bbc241748b
6 changed files with 57 additions and 5 deletions

View File

@@ -10,8 +10,10 @@ import android.accessibilityservice.AccessibilityService
import android.accessibilityservice.GestureDescription
import android.graphics.Path
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.view.accessibility.AccessibilityEvent
import android.view.accessibility.AccessibilityNodeInfo
import androidx.annotation.RequiresApi
import java.util.*
import kotlin.math.abs
@@ -252,6 +254,18 @@ class InputService : AccessibilityService() {
}
}
@RequiresApi(Build.VERSION_CODES.N)
fun onTextInput(str: String) {
findFocus(AccessibilityNodeInfo.FOCUS_INPUT)?.let {
val arguments = Bundle()
arguments.putCharSequence(
AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE,
str
)
it.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments)
}
}
override fun onServiceConnected() {
super.onServiceConnected()
ctx = this

View File

@@ -94,6 +94,12 @@ class MainService : Service() {
}
}
@Keep
@RequiresApi(Build.VERSION_CODES.N)
fun rustInputString(input: String) {
InputService.ctx?.onTextInput(input)
}
@Keep
fun rustGetByName(name: String): String {
return when (name) {

View File

@@ -12,9 +12,9 @@ class DesktopRemoteScreen extends StatelessWidget {
final Map<String, dynamic> params;
DesktopRemoteScreen({Key? key, required this.params}) : super(key: key) {
if (!bind.mainStartGrabKeyboard()) {
stateGlobal.grabKeyboard = true;
}
if (!bind.mainStartGrabKeyboard()) {
stateGlobal.grabKeyboard = true;
}
}
@override

View File

@@ -364,6 +364,10 @@ class _RemotePageState extends State<RemotePage> {
? []
: gFFI.ffiModel.isPeerAndroid
? [
IconButton(
color: Colors.white,
icon: Icon(Icons.keyboard),
onPressed: openKeyboard),
IconButton(
color: Colors.white,
icon: const Icon(Icons.build),