UiController
interface UiController
Provides base-level UI operations (such as injection of MotionEvents) that can be used to build user actions such as clicks, scrolls, swipes, etc. This replaces parts of the android Instrumentation class that provides similar functionality. However, it provides a more advanced synchronization mechanism for test actions. The key differentiators are:
- test actions are assumed to be called on the main thread
- after a test action is initiated, execution blocks until all messages in the main message queue have been cleared.
Summary
Public methods |
|
---|---|
abstract @NonNull boolean |
injectKeyEvent(@NonNull KeyEvent event) Injects a key event into the application. |
abstract @NonNull boolean |
injectMotionEvent(@NonNull MotionEvent event) Injects a motion event into the application. |
abstract @NonNull boolean |
injectString(@NonNull String str) Types a string into the application using series of KeyEvents. |
abstract @NonNull void |
loopMainThreadForAtLeast(@NonNull long millisDelay) Loops the main thread for a specified period of time. |
abstract @NonNull void |
Loops the main thread until the application goes idle. |
Public methods
injectKeyEvent
@NonNull
public abstract boolean injectKeyEvent(@NonNull KeyEvent event)
Injects a key event into the application.
Parameters | |
---|---|
@NonNull KeyEvent event |
the (non-null!) event to inject |
Returns | |
---|---|
boolean |
true if the event was injected, false otherwise |
Throws | |
---|---|
androidx.test.platform.ui.InjectEventSecurityException |
if the event couldn't be injected because it would interact with another application. |
injectMotionEvent
@NonNull
public abstract boolean injectMotionEvent(@NonNull MotionEvent event)
Injects a motion event into the application.
Parameters | |
---|---|
@NonNull MotionEvent event |
the (non-null!) event to inject |
Returns | |
---|---|
boolean |
true if the event was injected, false otherwise |
Throws | |
---|---|
androidx.test.platform.ui.InjectEventSecurityException |
if the event couldn't be injected because it would interact with another application. |
injectString
@NonNull
public abstract boolean injectString(@NonNull String str)
Types a string into the application using series of KeyEvents. It is up to the implementor to decide how to map the string to KeyEvent objects. If you need specific control over the key events generated use injectKeyEvent
.
Returns | |
---|---|
boolean |
true if the string was injected, false otherwise |
Throws | |
---|---|
androidx.test.platform.ui.InjectEventSecurityException |
if the events couldn't be injected because it would interact with another application. |
loopMainThreadForAtLeast
@NonNull
public abstract void loopMainThreadForAtLeast(@NonNull long millisDelay)
Loops the main thread for a specified period of time.
Control may not return immediately, instead it'll return after the provided delay has passed and the queue is in an idle state again.
Parameters | |
---|---|
@NonNull long millisDelay |
time to spend in looping the main thread |
loopMainThreadUntilIdle
@NonNull
public abstract void loopMainThreadUntilIdle()
Loops the main thread until the application goes idle.
An empty task is immediately inserted into the task queue to ensure that if we're idle at this moment we'll return instantly.