Skip to main content

settings_night_mode/
lib.rs

1// Copyright 2020 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 night_mode_controller;
6pub mod night_mode_fidl_handler;
7pub mod types;
8
9use self::night_mode_controller::NightModeController;
10use self::night_mode_fidl_handler::NightModeFidlHandler;
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::NightModeInfo;
16
17pub struct SetupResult {
18    pub night_mode_fidl_handler: NightModeFidlHandler,
19    pub task: fuchsia_async::Task<()>,
20}
21
22pub async fn setup_night_mode_api<F>(
23    storage_factory: Rc<F>,
24    setting_value_publisher: SettingValuePublisher<NightModeInfo>,
25    usage_publisher: UsagePublisher<NightModeInfo>,
26) -> SetupResult
27where
28    F: StorageFactory<Storage = DeviceStorage>,
29{
30    let mut night_mode_controller =
31        NightModeController::new(storage_factory, setting_value_publisher.clone()).await;
32    let initial_value = night_mode_controller.restore().await;
33    let _ = setting_value_publisher.publish(&initial_value);
34
35    let (night_mode_fidl_handler, request_rx) =
36        NightModeFidlHandler::new(&mut night_mode_controller, usage_publisher, initial_value);
37    let task = night_mode_controller.handle(request_rx).await;
38    SetupResult { night_mode_fidl_handler, task }
39}