1pub 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}