Skip to main content

settings_privacy/
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.
4pub mod privacy_controller;
5pub mod privacy_fidl_handler;
6pub mod types;
7
8use self::privacy_controller::PrivacyController;
9use self::privacy_fidl_handler::PrivacyFidlHandler;
10use settings_common::inspect::event::{SettingValuePublisher, UsagePublisher};
11use settings_storage::device_storage::DeviceStorage;
12use settings_storage::storage_factory::StorageFactory;
13use std::rc::Rc;
14use types::PrivacyInfo;
15
16pub struct SetupResult {
17    pub privacy_fidl_handler: PrivacyFidlHandler,
18    pub task: fuchsia_async::Task<()>,
19}
20
21pub async fn setup_privacy_api<F>(
22    storage_factory: Rc<F>,
23    setting_value_publisher: SettingValuePublisher<PrivacyInfo>,
24    usage_publisher: UsagePublisher<PrivacyInfo>,
25) -> SetupResult
26where
27    F: StorageFactory<Storage = DeviceStorage>,
28{
29    let mut privacy_controller =
30        PrivacyController::new(storage_factory, setting_value_publisher.clone()).await;
31    let initial_value = privacy_controller.restore().await;
32    let _ = setting_value_publisher.publish(&initial_value);
33
34    let (privacy_fidl_handler, request_rx) =
35        PrivacyFidlHandler::new(&mut privacy_controller, usage_publisher, initial_value);
36    let task = privacy_controller.handle(request_rx).await;
37    SetupResult { privacy_fidl_handler, task }
38}