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