blob: eb45e964064771d7ce265142a484bd0f59b201d5 [file] [log] [blame]
// Copyright 2020 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.
use {
anyhow::{Context, Error},
async_trait::async_trait,
fuchsia_async as fasync,
fuchsia_syslog::fx_log_info,
input::{input_device, input_handler::InputHandler, input_pipeline::InputPipeline},
};
/// A simple InputHandler that prints MouseEvents as they're received.
struct MouseEventPrinter;
impl MouseEventPrinter {
pub fn new() -> Self {
MouseEventPrinter {}
}
}
#[async_trait]
impl InputHandler for MouseEventPrinter {
async fn handle_input_event(
&mut self,
input_event: input_device::InputEvent,
) -> Vec<input_device::InputEvent> {
match input_event {
input_device::InputEvent {
device_event: input_device::InputDeviceEvent::Mouse(mouse_event),
device_descriptor: input_device::InputDeviceDescriptor::Mouse(_mouse_descriptor),
event_time,
} => {
fx_log_info!("location: {:?}", mouse_event.location);
fx_log_info!("phase: {:?}", mouse_event.phase);
fx_log_info!("buttons: {:?}", mouse_event.buttons);
fx_log_info!("event_time: {:?}", event_time);
vec![]
}
_ => vec![input_event],
}
}
}
/// Creates an `InputPipeline` that binds to mouse devices. Logs each mouse event as received.
#[fasync::run_singlethreaded]
async fn main() -> Result<(), Error> {
fuchsia_syslog::init_with_tags(&["input_session"]).expect("Failed to initialize logger.");
let input_pipeline = InputPipeline::new(
vec![input_device::InputDeviceType::Mouse],
vec![Box::new(MouseEventPrinter::new())],
)
.await
.context("Failed to create InputPipeline.")?;
input_pipeline.handle_input_events().await;
Ok(())
}
#[cfg(test)]
mod tests {
#[test]
fn noop_test() {
// Note, this test replaces the invalid tests mentioned in fxbug.dev/67160
println!("Don't panic!(), you've got this!");
}
}