1#![allow(clippy::literal_string_with_formatting_args)]
8
9pub mod keyboard_controller;
10pub mod keyboard_fidl_handler;
11pub mod types;
12
13use self::keyboard_controller::KeyboardController;
14use self::keyboard_fidl_handler::KeyboardFidlHandler;
15use settings_common::inspect::event::{SettingValuePublisher, UsagePublisher};
16use settings_storage::device_storage::DeviceStorage;
17use settings_storage::storage_factory::StorageFactory;
18use std::rc::Rc;
19use types::KeyboardInfo;
20
21pub struct SetupResult {
22 pub keyboard_fidl_handler: KeyboardFidlHandler,
23 pub task: fuchsia_async::Task<()>,
24}
25
26pub async fn setup_keyboard_api<F>(
27 storage_factory: Rc<F>,
28 setting_value_publisher: SettingValuePublisher<KeyboardInfo>,
29 usage_publisher: UsagePublisher<KeyboardInfo>,
30) -> SetupResult
31where
32 F: StorageFactory<Storage = DeviceStorage>,
33{
34 let mut keyboard_controller =
35 KeyboardController::new(storage_factory, setting_value_publisher.clone()).await;
36 let initial_value = keyboard_controller.restore().await;
37 let _ = setting_value_publisher.publish(&initial_value);
38
39 let (keyboard_fidl_handler, request_rx) =
40 KeyboardFidlHandler::new(&mut keyboard_controller, usage_publisher, initial_value);
41 let task = keyboard_controller.handle(request_rx).await;
42 SetupResult { keyboard_fidl_handler, task }
43}