settings_do_not_disturb/
lib.rs1pub mod do_not_disturb_controller;
6pub mod do_not_disturb_fidl_handler;
7pub mod types;
8
9use self::do_not_disturb_controller::DoNotDisturbController;
10use self::do_not_disturb_fidl_handler::DoNotDisturbFidlHandler;
11use settings_common::inspect::event::{SettingValuePublisher, UsagePublisher};
12use settings_storage::device_storage::DeviceStorage;
13use settings_storage::storage_factory::StorageFactory;
14use std::rc::Rc;
15use types::DoNotDisturbInfo;
16
17pub struct SetupResult {
18 pub do_not_disturb_fidl_handler: DoNotDisturbFidlHandler,
19 pub task: fuchsia_async::Task<()>,
20}
21
22pub async fn setup_do_not_disturb_api<F>(
23 storage_factory: Rc<F>,
24 setting_value_publisher: SettingValuePublisher<DoNotDisturbInfo>,
25 usage_publisher: UsagePublisher<DoNotDisturbInfo>,
26) -> SetupResult
27where
28 F: StorageFactory<Storage = DeviceStorage>,
29{
30 let mut do_not_disturb_controller =
31 DoNotDisturbController::new(storage_factory, setting_value_publisher.clone()).await;
32 let initial_value = do_not_disturb_controller.restore().await;
33 let _ = setting_value_publisher.publish(&initial_value);
34
35 let (do_not_disturb_fidl_handler, request_rx) = DoNotDisturbFidlHandler::new(
36 &mut do_not_disturb_controller,
37 usage_publisher,
38 initial_value,
39 );
40 let task = do_not_disturb_controller.handle(request_rx).await;
41 SetupResult { do_not_disturb_fidl_handler, task }
42}