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