blob: a39bdf03f659c3e8d933fdc40676a035e63c28a6 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use crate::utils::{self, Either, WatchOrSetResult};
use crate::{AccessibilityOptions, CaptionCommands};
use fidl_fuchsia_settings::{
AccessibilityProxy, AccessibilitySettings, CaptionFontStyle, CaptionsSettings,
};
pub async fn command(proxy: AccessibilityProxy, options: AccessibilityOptions) -> WatchOrSetResult {
let mut settings = AccessibilitySettings::EMPTY;
settings.audio_description = options.audio_description;
settings.screen_reader = options.screen_reader;
settings.color_inversion = options.color_inversion;
settings.enable_magnification = options.enable_magnification;
settings.color_correction = options.color_correction;
if let Some(caption_settings_enum) = options.caption_options {
let CaptionCommands::CaptionOptions(input) = caption_settings_enum;
let style = input.style;
let mut font_style = CaptionFontStyle::EMPTY;
font_style.family = style.font_family;
font_style.color = style.font_color;
font_style.relative_size = style.relative_size;
font_style.char_edge_style = style.char_edge_style;
let mut captions_settings = CaptionsSettings::EMPTY;
captions_settings.for_media = input.for_media;
captions_settings.for_tts = input.for_tts;
captions_settings.window_color = input.window_color;
captions_settings.background_color = input.background_color;
captions_settings.font_style = Some(font_style);
settings.captions_settings = Some(captions_settings);
}
Ok(if settings == AccessibilitySettings::EMPTY {
// No values set, perform a watch loop instead.
Either::Watch(utils::watch_to_stream(proxy, |p| p.watch()))
} else {
let mutate_result = proxy.set(settings).await?;
Either::Set(match mutate_result {
Ok(_) => format!("Successfully set AccessibilitySettings"),
Err(err) => format!("{:#?}", err),
})
})
}