Provide ability for tests to send hardware key events to Owner
This CL adds a function to Owner that allows a test to send hardware keyboard events to Owner. The hardware events are then routed to the currently focused Component.
Bug: 156837288
Fixes: 156837288
Test: Updated tests to use this new API
Change-Id: Icafb13a4f485410fa4d5de71f20a491e4baf50a0
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/KeyInputHelpers.kt b/ui/ui-test/src/main/java/androidx/ui/test/KeyInputHelpers.kt
new file mode 100644
index 0000000..701aa18
--- /dev/null
+++ b/ui/ui-test/src/main/java/androidx/ui/test/KeyInputHelpers.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.ui.test
+
+import androidx.ui.core.keyinput.KeyEvent
+
+/**
+ * Send the specified [KeyEvent] to the focused component.
+ *
+ * @return true if the event was consumed. False otherwise.
+ */
+fun SemanticsNodeInteraction.doSendKeyEvent(keyEvent: KeyEvent): Boolean {
+ val semanticsNode = fetchSemanticsNode("Failed to send key Event (${keyEvent.key})")
+ val owner = semanticsNode.componentNode.owner
+ requireNotNull(owner) { "Failed to find owner" }
+ return runOnUiThread { owner.sendKeyEvent(keyEvent) }
+}