blob: 6e8bbbd982499cf137ac92ba8ae14be19dbf6db8 [file] [log] [blame]
// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.ui.test.input;
using fuchsia.input.report;
using fuchsia.math;
using fuchsia.ui.pointer;
using zx;
@available(added=12)
const MAX_FINGERS uint8 = 10;
/// A tool to inject touch events into Input Pipeline.
///
/// Please extend as necessary.
closed protocol TouchScreen {
/// Simulates a tap at the requested location.
strict SimulateTap(table {
/// Location of the tap event, in the coordinate units specified during
/// registration.
1: tap_location fuchsia.math.Vec;
}) -> ();
/// Simulates multi finger tap at the requested locations.
@available(added=12)
strict SimulateMultiTap(table {
/// Locations of the tap event, in the coordinate units specified during
/// registration.
1: tap_locations vector<fuchsia.math.Vec>:MAX_FINGERS;
}) -> ();
/// Simulates a swipe that starts at `start_location` and ends at `end_location`,
/// with a total number of move events equal to `move_event_count`.
///
/// The generated pointer event stream will be:
///
/// DOWN + CHANGE_1 + ... + CHANGE_n + UP, where n == `move_event_count`
///
/// Events are injected with no explicit delay in between; in other words, the
/// observed delay between successive events will be approximately equal to the
/// time required to inject a single event.
strict SimulateSwipe(table {
/// Starting location of the swipe, in the coordinate units specified during
/// registration.
1: start_location fuchsia.math.Vec;
/// End location of the swipe, in the coordinate units specified during
/// registration.
2: end_location fuchsia.math.Vec;
/// Number of move events in the swipe.
3: move_event_count uint32;
}) -> ();
/// Simulates a multi fingers linear gesture that starts at `start_locations`
/// and ends at `end_locations`, with a total number of move events equal to
/// `move_event_count`. if the arguments are invalid, the server should close
/// the connection.
///
/// The generated pointer event stream will be:
///
/// DOWN + CHANGE_1 + ... + CHANGE_n + UP, where n == `move_event_count`
///
/// Events are injected with a small explicit delay in between.
@available(added=12)
strict SimulateMultiFingerGesture(table {
/// Starting locations of the gesture, in the coordinate units specified during
/// registration.
1: start_locations array<fuchsia.math.Vec, MAX_FINGERS>;
/// End locations of the gesture, in the coordinate units specified during
/// registration.
2: end_locations array<fuchsia.math.Vec, MAX_FINGERS>;
/// Number of move events in the pinch.
3: move_event_count uint32;
/// Number of fingers, because `array<fuchsia.math.Vec, MAX_FINGERS>` is
/// fixed length, we use this field to know how many fingers in gesture.
@available(added=18)
4: finger_count uint32;
}) -> ();
/// Simulate a touch event by a touch input report.
///
/// TouchInputReport includes a list of contacts that are currently contacting the
/// touch surface. The report can represent multiply touch events by comparing with
/// previous reports received.
@available(added=17)
strict SimulateTouchEvent(struct {
report fuchsia.input.report.TouchInputReport;
}) -> ();
};
/// A tool for applications to report touch input to interested parties (e.g. a test
/// fixture).
@discoverable
closed protocol TouchInputListener {
/// Report that component under test has received expected input.
strict ReportTouchInput(table {
/// The horizontal coordinate, in the reporter's coordinate system.
1: local_x float64;
/// The vertical coordinate, in the reporter's coordinate system.
2: local_y float64;
/// The monotonic time (ns) the pointer data was received by the reporter.
/// Note that this value should be used with caution. Some reporters may not be
/// capable of ns-level precision, but still report in ns-level units.
3: time_received zx.Time;
/// The number of physical pixels, per logical pixel, as reported by the reporter.
4: device_pixel_ratio float64;
/// Name of the component to help distinguish responses from multiple components.
///
/// NOTE: This name is *independent* of component framework, so the reporter and
/// listener are free to agree on an arbitrary value.
5: component_name string:1024;
/// The phase of the touch event.
@available(added=12)
6: phase fuchsia.ui.pointer.EventPhase;
/// pointer_id is used to identify finger in multi touch. each finger
/// is sent in a separate call to `ReportTouchInput()`, and the callee
/// is responsible for assembling the fingers as needed
@available(added=12)
7: pointer_id uint32;
});
};