[setui_client] Allow setting multiple display fields
Fixed: 68961
Test: fx test -o setui_client_interface_test
Change-Id: If28252d0ac56f321dd05fb2afd9a69133eaa9a02
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/492959
Reviewed-by: William Xiao <wxyz@google.com>
Commit-Queue: Chip Fukuhara <cfukuhara@google.com>
diff --git a/garnet/bin/setui_client/src/display.rs b/garnet/bin/setui_client/src/display.rs
index 229f919..02eae00 100644
--- a/garnet/bin/setui_client/src/display.rs
+++ b/garnet/bin/setui_client/src/display.rs
@@ -16,65 +16,32 @@
theme: Option<Theme>,
screen_enabled: Option<bool>,
) -> WatchOrSetResult {
- let mut output = String::new();
-
- if let Some(auto_brightness_value) = auto_brightness {
- let mut settings = DisplaySettings::EMPTY;
- settings.auto_brightness = Some(auto_brightness_value);
-
- let mutate_result = proxy.set(settings).await?;
- match mutate_result {
- Ok(_) => output.push_str(&format!(
- "Successfully set auto_brightness to {}",
- auto_brightness_value
- )),
- Err(err) => output.push_str(&format!("{:?}", err)),
- }
- } else if let Some(brightness_value) = brightness {
- let mut settings = DisplaySettings::EMPTY;
- settings.brightness_value = Some(brightness_value);
-
- let mutate_result = proxy.set(settings).await?;
- match mutate_result {
- Ok(_) => {
- output.push_str(&format!("Successfully set brightness to {}", brightness_value))
- }
- Err(err) => output.push_str(&format!("{:?}", err)),
- }
- } else if light_sensor {
+ // Light sensor Watch.
+ if light_sensor {
return Ok(Either::Watch(utils::watch_to_stream(proxy, |p| p.watch_light_sensor2(0.0))));
- } else if let Some(mode) = low_light_mode {
- let mut settings = DisplaySettings::EMPTY;
- settings.low_light_mode = Some(mode);
-
- let mutate_result = proxy.set(settings).await?;
- match mutate_result {
- Ok(_) => output.push_str(&format!("Successfully set low_light_mode to {:?}", mode)),
- Err(err) => output.push_str(&format!("{:?}", err)),
- }
- } else if let Some(Theme { theme_type: Some(theme_type), .. }) = theme {
- let mut settings = DisplaySettings::EMPTY;
- settings.theme = Some(Theme { theme_type: Some(theme_type), ..Theme::EMPTY });
-
- let mutate_result = proxy.set(settings).await?;
- match mutate_result {
- Ok(_) => output.push_str(&format!("Successfully set theme to {:?}", theme_type)),
- Err(err) => output.push_str(&format!("{:?}", err)),
- }
- } else if let Some(screen_enabled) = screen_enabled {
- let mut settings = DisplaySettings::EMPTY;
- settings.screen_enabled = Some(screen_enabled);
-
- let mutate_result = proxy.set(settings).await?;
- match mutate_result {
- Ok(_) => {
- output.push_str(&format!("Successfully set screen_enabled to {:?}", screen_enabled))
- }
- Err(err) => output.push_str(&format!("{:?}", err)),
- }
- } else {
- return Ok(Either::Watch(utils::watch_to_stream(proxy, |p| p.watch())));
}
- Ok(Either::Set(output))
+ // Set call.
+ let mut settings = DisplaySettings::EMPTY;
+ settings.auto_brightness = auto_brightness;
+ settings.brightness_value = brightness;
+ settings.low_light_mode = low_light_mode;
+ settings.screen_enabled = screen_enabled;
+
+ if let Some(Theme { theme_type: Some(theme_type), .. }) = theme {
+ settings.theme = Some(Theme { theme_type: Some(theme_type), ..Theme::EMPTY });
+ }
+
+ if settings == DisplaySettings::EMPTY {
+ // No fields were set, interpret as a Watch.
+ return Ok(Either::Watch(utils::watch_to_stream(proxy, |p| p.watch())));
+ } else {
+ let mutate_result = proxy.set(settings.clone()).await?;
+ match mutate_result {
+ Ok(_) => {
+ Ok(Either::Set(format!("Successfully set display settings to {:?}", settings)))
+ }
+ Err(err) => Ok(Either::Set(format!("{:?}", err))),
+ }
+ }
}
diff --git a/garnet/bin/setui_client/src/interface_test.rs b/garnet/bin/setui_client/src/interface_test.rs
index f3f8e4f..6a5d015 100644
--- a/garnet/bin/setui_client/src/interface_test.rs
+++ b/garnet/bin/setui_client/src/interface_test.rs
@@ -227,6 +227,9 @@
println!(" client calls set screen enabled");
validate_display(None, None, None, Some(ThemeType::Dark), Some(false)).await?;
+ println!(" client can modify multiple settings");
+ validate_display(Some(0.3), Some(false), None, Some(ThemeType::Light), Some(true)).await?;
+
println!("factory reset tests");
println!(" client calls set local reset allowed");
validate_factory_reset(true).await?;