1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ash/assistant/ui/main_stage/assistant_ui_element_view_animator.h"
6
7 #include "ash/assistant/ui/main_stage/assistant_ui_element_view.h"
8 #include "ash/assistant/ui/main_stage/element_animator.h"
9 #include "ash/assistant/util/animation_util.h"
10 #include "base/metrics/histogram_functions.h"
11 #include "ui/compositor/callback_layer_animation_observer.h"
12 #include "ui/gfx/animation/tween.h"
13
14 namespace ash {
15
16 namespace {
17
18 using assistant::util::CreateLayerAnimationSequence;
19 using assistant::util::CreateOpacityElement;
20 using assistant::util::StartLayerAnimationSequence;
21
22 // Animation.
23 constexpr base::TimeDelta kAnimateInDuration =
24 base::TimeDelta::FromMilliseconds(250);
25 constexpr base::TimeDelta kAnimateOutDuration =
26 base::TimeDelta::FromMilliseconds(200);
27
28 } // namespace
29
AssistantUiElementViewAnimator(AssistantUiElementView * view,const char * animation_smoothness_histogram)30 AssistantUiElementViewAnimator::AssistantUiElementViewAnimator(
31 AssistantUiElementView* view,
32 const char* animation_smoothness_histogram)
33 : ElementAnimator(view),
34 view_(view),
35 animation_smoothness_histogram_(animation_smoothness_histogram) {}
36
37 AssistantUiElementViewAnimator::AnimationSmoothnessCallback
GetAnimationSmoothnessCallback() const38 AssistantUiElementViewAnimator::GetAnimationSmoothnessCallback() const {
39 return base::BindRepeating<void(const std::string&, int value)>(
40 base::UmaHistogramPercentageObsoleteDoNotUse,
41 animation_smoothness_histogram_);
42 }
43
44 // ElementAnimator:
AnimateIn(ui::CallbackLayerAnimationObserver * observer)45 void AssistantUiElementViewAnimator::AnimateIn(
46 ui::CallbackLayerAnimationObserver* observer) {
47 StartLayerAnimationSequence(
48 layer()->GetAnimator(),
49 CreateLayerAnimationSequence(CreateOpacityElement(
50 1.f, kAnimateInDuration, gfx::Tween::Type::FAST_OUT_SLOW_IN)),
51 observer, GetAnimationSmoothnessCallback());
52 }
53
AnimateOut(ui::CallbackLayerAnimationObserver * observer)54 void AssistantUiElementViewAnimator::AnimateOut(
55 ui::CallbackLayerAnimationObserver* observer) {
56 StartLayerAnimationSequence(
57 layer()->GetAnimator(),
58 CreateLayerAnimationSequence(
59 CreateOpacityElement(kMinimumAnimateOutOpacity, kAnimateOutDuration)),
60 observer, GetAnimationSmoothnessCallback());
61 }
62
layer() const63 ui::Layer* AssistantUiElementViewAnimator::layer() const {
64 return view_->GetLayerForAnimating();
65 }
66
67 } // namespace ash
68