settings/
display.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 display_configuration;
6pub mod display_controller;
7mod display_fidl_handler;
8pub mod types;
9
10#[cfg(test)]
11mod test_fakes;
12
13use self::display_controller::DisplayController;
14use self::display_fidl_handler::DisplayFidlHandler;
15use anyhow::{Context, Result};
16pub use display_configuration::build_display_default_settings;
17use display_controller::BrightnessManager;
18use settings_common::inspect::event::{
19    ExternalEventPublisher, SettingValuePublisher, UsagePublisher,
20};
21use settings_common::service_context::ServiceContext;
22use settings_storage::device_storage::DeviceStorage;
23use settings_storage::storage_factory::StorageFactory;
24use std::rc::Rc;
25use types::DisplayInfo;
26
27pub struct SetupResult {
28    pub display_fidl_handler: DisplayFidlHandler,
29    pub task: fuchsia_async::Task<()>,
30}
31
32pub async fn setup_display_api<F, T>(
33    service_context: &ServiceContext,
34    storage_factory: Rc<F>,
35    setting_value_publisher: SettingValuePublisher<DisplayInfo>,
36    usage_publisher: UsagePublisher<DisplayInfo>,
37    external_publisher: ExternalEventPublisher,
38) -> Result<SetupResult>
39where
40    F: StorageFactory<Storage = DeviceStorage>,
41    T: BrightnessManager + 'static,
42{
43    let mut display_controller = DisplayController::<T>::new(
44        service_context,
45        storage_factory,
46        setting_value_publisher.clone(),
47        external_publisher,
48    )
49    .await
50    .context("Failed to initialize display: {e:?}")?;
51    let initial_value = display_controller.restore().await.context("Failed to restore display")?;
52    let _ = setting_value_publisher.publish(&initial_value);
53
54    let (display_fidl_handler, request_rx) =
55        DisplayFidlHandler::new(&mut display_controller, usage_publisher, initial_value);
56    let task = display_controller.handle(request_rx).await;
57    Ok(SetupResult { display_fidl_handler, task })
58}