settings_factory_reset/
lib.rs1pub mod factory_reset_controller;
6pub mod types;
7
8mod factory_reset_fidl_handler;
9
10use self::factory_reset_controller::FactoryResetController;
11use self::factory_reset_fidl_handler::FactoryResetFidlHandler;
12use anyhow::{Context, Result};
13use settings_common::inspect::event::{
14 ExternalEventPublisher, SettingValuePublisher, UsagePublisher,
15};
16use settings_common::service_context::ServiceContext;
17use settings_storage::device_storage::DeviceStorage;
18use settings_storage::storage_factory::StorageFactory;
19use std::rc::Rc;
20use types::FactoryResetInfo;
21
22pub struct SetupResult {
23 pub factory_reset_fidl_handler: FactoryResetFidlHandler,
24 pub task: fuchsia_async::Task<()>,
25}
26
27pub async fn setup_factory_reset_api<F>(
28 service_context: &ServiceContext,
29 storage_factory: Rc<F>,
30 setting_value_publisher: SettingValuePublisher<FactoryResetInfo>,
31 usage_publisher: UsagePublisher<FactoryResetInfo>,
32 external_publisher: ExternalEventPublisher,
33) -> Result<SetupResult>
34where
35 F: StorageFactory<Storage = DeviceStorage>,
36{
37 let mut factory_reset_controller = FactoryResetController::new(
38 service_context,
39 storage_factory,
40 setting_value_publisher.clone(),
41 external_publisher,
42 )
43 .await
44 .context("building factory reset controller")?;
45 let initial_value = factory_reset_controller
46 .restore()
47 .await
48 .context("restoring factory reset initial value")?;
49 let _ = setting_value_publisher.publish(&initial_value);
50
51 let (factory_reset_fidl_handler, request_rx) =
52 FactoryResetFidlHandler::new(&mut factory_reset_controller, usage_publisher, initial_value);
53 let task = factory_reset_controller.handle(request_rx).await;
54 Ok(SetupResult { factory_reset_fidl_handler, task })
55}