1ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing/*
2ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Copyright (C) 2015 The Android Open Source Project
3ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing *
4ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * in compliance with the License. You may obtain a copy of the License at
6ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing *
7ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * http://www.apache.org/licenses/LICENSE-2.0
8ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing *
9ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Unless required by applicable law or agreed to in writing, software distributed under the License
10ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * or implied. See the License for the specific language governing permissions and limitations under
12ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * the License.
13ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */
14ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingpackage android.support.v17.leanback.animation;
15ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
16ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.animation.Animator;
17ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.animation.AnimatorSet;
18ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.animation.TimeInterpolator;
19ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
20ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport java.util.ArrayList;
21ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
22ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing/**
23ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Custom fragment animations supplied by Fragment.onCreateAnimator have their targets set to the
24ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * fragment's main view by the fragment manager.  Sometimes, this isn't what you want; you may be
25ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * supplying a heterogeneous collection of animations that already have targets. This class helps
26ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * you return such a collection of animations from onCreateAnimator without having their targets
27ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * reset.
28ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing *
29ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Note that one does not simply subclass AnimatorSet and override setTarget() because AnimatorSet
30ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * is final.
31ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @hide
32ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */
33ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingpublic class UntargetableAnimatorSet extends Animator {
34ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
35ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    private final AnimatorSet mAnimatorSet;
36ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
37ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    public UntargetableAnimatorSet(AnimatorSet animatorSet) {
38ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing        mAnimatorSet = animatorSet;
39ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    }
40ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
41ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    @Override
42ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    public void addListener(Animator.AnimatorListener listener) {
43ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing        mAnimatorSet.addListener(listener);
44ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    }
45ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
46ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    @Override
47ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    public void cancel() {
48ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing        mAnimatorSet.cancel();
49ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    }
50ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
51ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    @Override
52ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    public Animator clone() {
53ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing        return mAnimatorSet.clone();
54ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    }
55ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
56ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    @Override
57ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    public void end() {
58ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing        mAnimatorSet.end();
59ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    }
60ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
61ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    @Override
62ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    public long getDuration() {
63ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing        return mAnimatorSet.getDuration();
64ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    }
65ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
66ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    @Override
67ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    public ArrayList<Animator.AnimatorListener> getListeners() {
68ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing        return mAnimatorSet.getListeners();
69ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    }
70ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
71ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    @Override
72ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    public long getStartDelay() {
73ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing        return mAnimatorSet.getStartDelay();
74ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    }
75ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
76ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    @Override
77ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    public boolean isRunning() {
78ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing        return mAnimatorSet.isRunning();
79ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    }
80ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
81ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    @Override
82ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    public boolean isStarted() {
83ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing        return mAnimatorSet.isStarted();
84ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    }
85ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
86ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    @Override
87ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    public void removeAllListeners() {
88ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing        mAnimatorSet.removeAllListeners();
89ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    }
90ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
91ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    @Override
92ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    public void removeListener(Animator.AnimatorListener listener) {
93ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing        mAnimatorSet.removeListener(listener);
94ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    }
95ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
96ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    @Override
97ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    public Animator setDuration(long duration) {
98ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing        return mAnimatorSet.setDuration(duration);
99ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    }
100ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
101ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    @Override
102ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    public void setInterpolator(TimeInterpolator value) {
103ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing        mAnimatorSet.setInterpolator(value);
104ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    }
105ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
106ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    @Override
107ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    public void setStartDelay(long startDelay) {
108ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing        mAnimatorSet.setStartDelay(startDelay);
109ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    }
110ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
111ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    @Override
112ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    public void setTarget(Object target) {
113ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing        // ignore
114ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    }
115ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
116ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    @Override
117ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    public void setupEndValues() {
118ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing        mAnimatorSet.setupEndValues();
119ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    }
120ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
121ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    @Override
122ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    public void setupStartValues() {
123ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing        mAnimatorSet.setupStartValues();
124ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    }
125ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
126ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    @Override
127ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    public void start() {
128ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing        mAnimatorSet.start();
129ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing    }
130ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing}
131ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing
132