OSDN Git Service

DO NOT MERGE. Grant MMS Uri permissions as the calling UID.
[android-x86/frameworks-base.git] / libs / hwui / PropertyValuesAnimatorSet.h
1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #pragma once
18
19 #include "Animator.h"
20 #include "PropertyValuesHolder.h"
21 #include "Interpolator.h"
22
23 namespace android {
24 namespace uirenderer {
25
26 class PropertyAnimator {
27 public:
28     PropertyAnimator(PropertyValuesHolder* holder, Interpolator* interpolator, nsecs_t startDelay,
29             nsecs_t duration, int repeatCount);
30     void setCurrentPlayTime(nsecs_t playTime);
31     nsecs_t getTotalDuration() {
32         return mTotalDuration;
33     }
34     void setFraction(float fraction);
35
36 private:
37     std::unique_ptr<PropertyValuesHolder> mPropertyValuesHolder;
38     std::unique_ptr<Interpolator> mInterpolator;
39     nsecs_t mStartDelay;
40     nsecs_t mDuration;
41     uint32_t mRepeatCount;
42     nsecs_t mTotalDuration;
43     float mLatestFraction = 0.0f;
44 };
45
46 class ANDROID_API PropertyValuesAnimatorSet : public BaseRenderNodeAnimator {
47 public:
48     friend class PropertyAnimatorSetListener;
49     PropertyValuesAnimatorSet();
50
51     void start(AnimationListener* listener);
52     void reverse(AnimationListener* listener);
53
54     void addPropertyAnimator(PropertyValuesHolder* propertyValuesHolder,
55             Interpolator* interpolators, int64_t startDelays,
56             nsecs_t durations, int repeatCount);
57     virtual uint32_t dirtyMask();
58
59 protected:
60     virtual float getValue(RenderNode* target) const override;
61     virtual void setValue(RenderNode* target, float value) override;
62     virtual void onPlayTimeChanged(nsecs_t playTime) override;
63
64 private:
65     void init();
66     void onFinished(BaseRenderNodeAnimator* animator);
67     // Listener set from outside
68     sp<AnimationListener> mOneShotListener;
69     std::vector< std::unique_ptr<PropertyAnimator> > mAnimators;
70     float mLastFraction = 0.0f;
71     bool mInitialized = false;
72 };
73
74 class PropertyAnimatorSetListener : public AnimationListener {
75 public:
76     PropertyAnimatorSetListener(PropertyValuesAnimatorSet* set) : mSet(set) {}
77     virtual void onAnimationFinished(BaseRenderNodeAnimator* animator) override;
78
79 private:
80     PropertyValuesAnimatorSet* mSet;
81 };
82
83 } // namespace uirenderer
84 } // namespace android