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