settings/
accessibility.rs

1// Copyright 2019 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
5pub mod accessibility_controller;
6
7/// Exposes the supported data types for this setting.
8pub mod types;
9
10mod accessibility_fidl_handler;
11
12use self::accessibility_controller::AccessibilityController;
13use self::accessibility_fidl_handler::AccessibilityFidlHandler;
14use settings_common::inspect::event::{SettingValuePublisher, UsagePublisher};
15use settings_storage::device_storage::DeviceStorage;
16use settings_storage::storage_factory::StorageFactory;
17use std::rc::Rc;
18use types::AccessibilityInfo;
19
20pub struct SetupResult {
21    pub accessibility_fidl_handler: AccessibilityFidlHandler,
22    pub task: fuchsia_async::Task<()>,
23}
24
25pub async fn setup_accessibility_api<F>(
26    storage_factory: Rc<F>,
27    setting_value_publisher: SettingValuePublisher<AccessibilityInfo>,
28    usage_publisher: UsagePublisher<AccessibilityInfo>,
29) -> SetupResult
30where
31    F: StorageFactory<Storage = DeviceStorage>,
32{
33    let mut accessibility_controller =
34        AccessibilityController::new(storage_factory, setting_value_publisher.clone()).await;
35    let initial_value = accessibility_controller.restore().await;
36    let _ = setting_value_publisher.publish(&initial_value);
37
38    let (accessibility_fidl_handler, request_rx) = AccessibilityFidlHandler::new(
39        &mut accessibility_controller,
40        usage_publisher,
41        initial_value,
42    );
43    let task = accessibility_controller.handle(request_rx).await;
44    SetupResult { accessibility_fidl_handler, task }
45}