Skip to main content

settings_keyboard/
lib.rs

1// Copyright 2021 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// TODO(https://github.com/rust-lang/rust-clippy/issues/13885) Upstream issue
6// Clippy lints on the license comment above.
7#![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}