Skip to main content

settings_do_not_disturb/
lib.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 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}