use crate::adb::Device;
pub struct AnimationGuard<'a> {
device: &'a Device,
original_animator: Option<String>,
original_window: Option<String>,
original_transition: Option<String>,
}
impl<'a> AnimationGuard<'a> {
pub fn acquire(device: &'a Device) -> Self {
let original_animator = device.get_setting("global", "animator_duration_scale").ok();
let original_window = device.get_setting("global", "window_animation_scale").ok();
let original_transition = device.get_setting("global", "transition_animation_scale").ok();
let _ = device.set_setting("global", "animator_duration_scale", "0");
let _ = device.set_setting("global", "window_animation_scale", "0");
let _ = device.set_setting("global", "transition_animation_scale", "0");
Self {
device,
original_animator,
original_window,
original_transition,
}
}
}
impl<'a> Drop for AnimationGuard<'a> {
fn drop(&mut self) {
if let Some(ref val) = self.original_animator {
let _ = self.device.set_setting("global", "animator_duration_scale", val);
}
if let Some(ref val) = self.original_window {
let _ = self.device.set_setting("global", "window_animation_scale", val);
}
if let Some(ref val) = self.original_transition {
let _ = self.device.set_setting("global", "transition_animation_scale", val);
}
}
}