InjectionScope
@JvmDefaultWithCompatibility
interface InjectionScope : Density
The receiver scope of all input injection lambdas offered in ui-test
, such as
performTouchInput
and performMouseInput
.
This scope offers several properties that allow you to get coordinates
within the node
you're interacting on, like the topLeft
corner, its center
, or some percentage of the size
(percentOffset
).
All positional properties are expressed in pixels. InjectionScope
implements Density
so you
can convert between px and dp as you wish. The density used is taken from the
SemanticsNode
from the SemanticsNodeInteraction
on which the input injection method is called.
Properties
val eventPeriodMillis
The default time between two successive events.
val visibleSize: IntSize
The size of the visible part of the node we're interacting with in px, i.e. its clipped bounds.
val viewConfiguration: ViewConfiguration
The ViewConfiguration
in use by the
SemanticsNode
from the
SemanticsNodeInteraction
on which the input injection method is called.
val width: Int
The width of the node in px. Shorthand for visibleSize.width
.
val height: Int
The height of the node in px. Shorthand for visibleSize.height
.
val left: Float
The x-coordinate for the left edge of the node we're interacting with in px, in the node's local coordinate system, where (0, 0) is the top left corner of the node.
val top: Float
The y-coordinate for the bottom of the node we're interacting with in px, in the node's local coordinate system, where (0, 0) is the top left corner of the node.
val centerX: Float
The x-coordinate for the center of the node we're interacting with in px, in the node's local coordinate system, where (0, 0) is the top left corner of the node.
val centerY: Float
The y-coordinate for the center of the node we're interacting with in px, in the node's local coordinate system, where (0, 0) is the top left corner of the node.
val right: Float
The x-coordinate for the right edge of the node we're interacting with in px, in the node's local coordinate system, where (0, 0) is the top left corner of the node.
Note that, unless width == 0
, right != width
. In particular, right == width - 1f
,
because pixels are 0-based. If width == 0
, right == 0
too.
val bottom: Float
The y-coordinate for the bottom of the node we're interacting with in px, in the node's local coordinate system, where (0, 0) is the top left corner of the node.
Note that, unless height == 0
, bottom != height
. In particular, bottom == height - 1f
,
because pixels are 0-based. If height == 0
, bottom == 0
too.
val topLeft: Offset
The top left corner of the node we're interacting with, in the node's local coordinate system, where (0, 0) is the top left corner of the node.
val topCenter: Offset
The center of the top edge of the node we're interacting with, in the node's local coordinate system, where (0, 0) is the top left corner of the node.
val topRight: Offset
The top right corner of the node we're interacting with, in the node's local coordinate system, where (0, 0) is the top left corner of the node.
Note that topRight.x != width
, see right
.
val centerLeft: Offset
The center of the left edge of the node we're interacting with, in the node's local coordinate system, where (0, 0) is the top left corner of the node.
val center: Offset
The center of the node we're interacting with, in the node's local coordinate system, where (0, 0) is the top left corner of the node.
val centerRight: Offset
The center of the right edge of the node we're interacting with, in the node's local coordinate system, where (0, 0) is the top left corner of the node.
Note that centerRight.x != width
, see right
.
val bottomLeft: Offset
The bottom left corner of the node we're interacting with, in the node's local coordinate system, where (0, 0) is the top left corner of the node.
Note that bottomLeft.y != height
, see bottom
.
val bottomCenter: Offset
The center of the bottom edge of the node we're interacting with, in the node's local coordinate system, where (0, 0) is the top left corner of the node.
Note that bottomCenter.y != height
, see bottom
.
val bottomRight: Offset
The bottom right corner of the node we're interacting with, in the node's local coordinate system, where (0, 0) is the top left corner of the node.
Note that bottomRight.x != width
and bottomRight.y != height
, see right
and bottom
.
Functions
fun advanceEventTime(durationMillis: Long = eventPeriodMillis)
Adds the given durationMillis
to the current event time, delaying the next event by that
time.
fun percentOffset(
/*@FloatRange(from = -1.0, to = 1.0)*/
x: Float = 0f,
/*@FloatRange(from = -1.0, to = 1.0)*/
y: Float = 0f,
): Offset
Creates an Offset
relative to the size of the node we're interacting with. x
and y
are
fractions of the width
and height
, between -1
and 1
.
Note that percentOffset(1f, 1f) != bottomRight
, see right
and bottom
.
For example: percentOffset(.5f, .5f)
is the same as the center
; centerLeft + percentOffset(.1f, 0f)
is a point 10% inward from the middle of the left edge; and
bottomRight - percentOffset(.2f, .1f)
is a point 20% to the left and 10% to the top of the
bottom right corner.