1pub use self::audio_controller::Request;
6pub use self::audio_default_settings::build_audio_default_settings;
7#[cfg(test)]
8pub(crate) use self::audio_default_settings::create_default_audio_stream;
9pub(crate) use self::audio_default_settings::{
10 AudioInfoLoader, ModifiedCounters, create_default_modified_counters,
11};
12pub use self::stream_volume_control::StreamVolumeControl;
13pub mod audio_controller;
14pub mod types;
15
16mod audio_default_settings;
17mod audio_fidl_handler;
18mod stream_volume_control;
19
20pub(crate) mod utils;
22
23use self::audio_controller::AudioController;
24use self::audio_fidl_handler::AudioFidlHandler;
25use futures::channel::mpsc::{self, UnboundedSender};
26use settings_common::inspect::event::{
27 ExternalEventPublisher, SettingValuePublisher, UsagePublisher,
28};
29use settings_common::service_context::ServiceContext;
30use settings_storage::device_storage::DeviceStorage;
31use settings_storage::storage_factory::StorageFactory;
32use std::rc::Rc;
33use types::AudioInfo;
34
35pub struct SetupResult {
36 pub audio_fidl_handler: AudioFidlHandler,
37 pub request_tx: UnboundedSender<Request>,
38 pub task: fuchsia_async::Task<()>,
39}
40
41pub async fn setup_audio_api<F>(
42 service_context: Rc<ServiceContext>,
43 audio_info_loader: AudioInfoLoader,
44 storage_factory: Rc<F>,
45 setting_value_publisher: SettingValuePublisher<AudioInfo>,
46 usage_publisher: UsagePublisher<AudioInfo>,
47 external_publisher: ExternalEventPublisher,
48) -> SetupResult
49where
50 F: StorageFactory<Storage = DeviceStorage>,
51{
52 let (request_tx, request_rx) = mpsc::unbounded();
53 let mut audio_controller = AudioController::new(
54 service_context,
55 audio_info_loader,
56 storage_factory,
57 setting_value_publisher.clone(),
58 external_publisher,
59 )
60 .await;
61 let initial_value = audio_controller.restore().await;
62 let _ = setting_value_publisher.publish(&initial_value);
63
64 let audio_fidl_handler = AudioFidlHandler::new(
65 &mut audio_controller,
66 usage_publisher,
67 request_tx.clone(),
68 initial_value,
69 );
70 let task = audio_controller.handle(request_rx).await;
71 SetupResult { audio_fidl_handler, request_tx, task }
72}