1faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase/* 2faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Copyright (C) 2013 The Android Open Source Project 3faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 4faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Licensed under the Apache License, Version 2.0 (the "License"); 5faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * you may not use this file except in compliance with the License. 6faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * You may obtain a copy of the License at 7faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 8faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * http://www.apache.org/licenses/LICENSE-2.0 9faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 10faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Unless required by applicable law or agreed to in writing, software 11faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * distributed under the License is distributed on an "AS IS" BASIS, 12faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * See the License for the specific language governing permissions and 14faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * limitations under the License. 15faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 166ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase 17d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haasepackage android.transition; 18faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 19d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haaseimport android.animation.TimeInterpolator; 20ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mountimport android.content.Context; 21ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mountimport android.content.res.TypedArray; 22faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.util.AndroidRuntimeException; 23ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mountimport android.util.AttributeSet; 24d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haaseimport android.view.View; 25faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.ViewGroup; 26faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 27413739e8c62a7cd83ec519203a2628504b1b0d16George Mountimport com.android.internal.R; 28413739e8c62a7cd83ec519203a2628504b1b0d16George Mount 29faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport java.util.ArrayList; 30faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 31faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase/** 32d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * A TransitionSet is a parent of child transitions (including other 33d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * TransitionSets). Using TransitionSets enables more complex 34d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * choreography of transitions, where some sets play {@link #ORDERING_TOGETHER} and 35d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * others play {@link #ORDERING_SEQUENTIAL}. For example, {@link AutoTransition} 36d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * uses a TransitionSet to sequentially play a Fade(Fade.OUT), followed by 37d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * a {@link ChangeBounds}, followed by a Fade(Fade.OUT) transition. 38aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * 39aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * <p>A TransitionSet can be described in a resource file by using the 40aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * tag <code>transitionSet</code>, along with the standard 41aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * attributes of {@link android.R.styleable#TransitionSet} and 42aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * {@link android.R.styleable#Transition}. Child transitions of the 43aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * TransitionSet object can be loaded by adding those child tags inside the 44aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * enclosing <code>transitionSet</code> tag. For example, the following xml 45aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * describes a TransitionSet that plays a Fade and then a ChangeBounds 46aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * transition on the affected view targets:</p> 47aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * <pre> 48aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * <transitionSet xmlns:android="http://schemas.android.com/apk/res/android" 4993aaab034fec85d3a6ca9dab6d1fd6c0610c6b62George Mount * android:transitionOrdering="sequential"> 50aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * <fade/> 51aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * <changeBounds/> 52aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * </transitionSet> 53aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * </pre> 54faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 55d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haasepublic class TransitionSet extends Transition { 56faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 57faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase ArrayList<Transition> mTransitions = new ArrayList<Transition>(); 58faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase private boolean mPlayTogether = true; 59faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase int mCurrentListeners; 60faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase boolean mStarted = false; 61faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 62faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 63d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * A flag used to indicate that the child transitions of this set 64faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * should all start at the same time. 65faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 66d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public static final int ORDERING_TOGETHER = 0; 67faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 68d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * A flag used to indicate that the child transitions of this set should 69faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * play in sequence; when one child transition ends, the next child 70faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * transition begins. Note that a transition does not end until all 71faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * instances of it (which are playing on all applicable targets of the 72faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * transition) end. 73faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 74d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public static final int ORDERING_SEQUENTIAL = 1; 75faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 76faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 77d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * Constructs an empty transition set. Add child transitions to the 78d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * set by calling {@link #addTransition(Transition)} )}. By default, 79d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * child transitions will play {@link #ORDERING_TOGETHER together}. 80faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 81d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet() { 82faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 83faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 84ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount public TransitionSet(Context context, AttributeSet attrs) { 85ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount super(context, attrs); 86ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TransitionSet); 87ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount int ordering = a.getInt(R.styleable.TransitionSet_transitionOrdering, 88ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount TransitionSet.ORDERING_TOGETHER); 89ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount setOrdering(ordering); 90ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount a.recycle(); 91ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount } 92ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount 93faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 94d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * Sets the play order of this set's child transitions. 95faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 96d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @param ordering {@link #ORDERING_TOGETHER} to play this set's child 97d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * transitions together, {@link #ORDERING_SEQUENTIAL} to play the child 98faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * transitions in sequence. 99d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @return This transitionSet object. 100faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 101d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet setOrdering(int ordering) { 102faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase switch (ordering) { 103d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase case ORDERING_SEQUENTIAL: 104faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase mPlayTogether = false; 105faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase break; 106d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase case ORDERING_TOGETHER: 107faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase mPlayTogether = true; 108faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase break; 109faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase default: 110d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase throw new AndroidRuntimeException("Invalid parameter for TransitionSet " + 111faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase "ordering: " + ordering); 112faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 113d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return this; 114faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 115faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 116faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 117d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * Returns the ordering of this TransitionSet. By default, the value is 118d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * {@link #ORDERING_TOGETHER}. 119d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * 120d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @return {@link #ORDERING_TOGETHER} if child transitions will play at the same 121d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * time, {@link #ORDERING_SEQUENTIAL} if they will play in sequence. 122faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 123d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @see #setOrdering(int) 124faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 125d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public int getOrdering() { 126d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return mPlayTogether ? ORDERING_TOGETHER : ORDERING_SEQUENTIAL; 127d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 128d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 129d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase /** 130d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * Adds child transition to this set. The order in which this child transition 131d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * is added relative to other child transitions that are added, in addition to 132d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * the {@link #getOrdering() ordering} property, determines the 133d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * order in which the transitions are started. 134d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * 135d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * <p>If this transitionSet has a {@link #getDuration() duration} set on it, the 136d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * child transition will inherit that duration. Transitions are assumed to have 137d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * a maximum of one transitionSet parent.</p> 138d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * 139d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @param transition A non-null child transition to be added to this set. 140d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @return This transitionSet object. 141d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase */ 142d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet addTransition(Transition transition) { 143d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase if (transition != null) { 144d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase mTransitions.add(transition); 145d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase transition.mParent = this; 146d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase if (mDuration >= 0) { 147d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase transition.setDuration(mDuration); 148faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 149faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 150d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return this; 151faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 152faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 153faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 1547f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount * Returns the number of child transitions in the TransitionSet. 1557f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount * 1567f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount * @return The number of child transitions in the TransitionSet. 1577f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount * @see #addTransition(Transition) 1587f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount * @see #getTransitionAt(int) 1597f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount */ 1607f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount public int getTransitionCount() { 1617f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount return mTransitions.size(); 1627f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount } 1637f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount 1647f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount /** 1657f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount * Returns the child Transition at the specified position in the TransitionSet. 1667f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount * 1677f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount * @param index The position of the Transition to retrieve. 1687f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount * @see #addTransition(Transition) 1697f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount * @see #getTransitionCount() 1707f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount */ 1717f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount public Transition getTransitionAt(int index) { 1727f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount if (index < 0 || index >= mTransitions.size()) { 1737f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount return null; 1747f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount } 1757f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount return mTransitions.get(index); 1767f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount } 1777f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount 1787f15164ecb4c93cbb3cc886a3028621c0d0fffccGeorge Mount /** 179d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * Setting a non-negative duration on a TransitionSet causes all of the child 180867a86613d4152a93423300f83597300e6ebeebeChet Haase * transitions (current and future) to inherit this duration. 181867a86613d4152a93423300f83597300e6ebeebeChet Haase * 182867a86613d4152a93423300f83597300e6ebeebeChet Haase * @param duration The length of the animation, in milliseconds. 183d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @return This transitionSet object. 184867a86613d4152a93423300f83597300e6ebeebeChet Haase */ 185867a86613d4152a93423300f83597300e6ebeebeChet Haase @Override 186d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet setDuration(long duration) { 187867a86613d4152a93423300f83597300e6ebeebeChet Haase super.setDuration(duration); 188e3b50aecfd913d3032460a99224803ba688bab27George Mount if (mDuration >= 0 && mTransitions != null) { 189867a86613d4152a93423300f83597300e6ebeebeChet Haase int numTransitions = mTransitions.size(); 190867a86613d4152a93423300f83597300e6ebeebeChet Haase for (int i = 0; i < numTransitions; ++i) { 191867a86613d4152a93423300f83597300e6ebeebeChet Haase mTransitions.get(i).setDuration(duration); 192867a86613d4152a93423300f83597300e6ebeebeChet Haase } 193867a86613d4152a93423300f83597300e6ebeebeChet Haase } 194867a86613d4152a93423300f83597300e6ebeebeChet Haase return this; 195867a86613d4152a93423300f83597300e6ebeebeChet Haase } 196867a86613d4152a93423300f83597300e6ebeebeChet Haase 197d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 198d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet setStartDelay(long startDelay) { 199d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) super.setStartDelay(startDelay); 200d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 201d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 202d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 203d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet setInterpolator(TimeInterpolator interpolator) { 204d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) super.setInterpolator(interpolator); 205d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 206d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 207d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 208d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet addTarget(View target) { 209d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 210d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).addTarget(target); 211d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 212d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) super.addTarget(target); 213d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 214d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 215d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 216ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase public TransitionSet addTarget(int targetId) { 217d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 218d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).addTarget(targetId); 219d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 220ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase return (TransitionSet) super.addTarget(targetId); 221d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 222d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 223d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 224d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public TransitionSet addTarget(String targetName) { 225d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 226d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).addTarget(targetName); 227d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 228d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return (TransitionSet) super.addTarget(targetName); 229d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 230d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 231d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 232d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public TransitionSet addTarget(Class targetType) { 233d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 234d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).addTarget(targetType); 235d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 236d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return (TransitionSet) super.addTarget(targetType); 237d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 238d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 239d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 240d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet addListener(TransitionListener listener) { 241d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) super.addListener(listener); 242d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 243d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 244d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 245ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase public TransitionSet removeTarget(int targetId) { 246d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 247d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).removeTarget(targetId); 248d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 249ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase return (TransitionSet) super.removeTarget(targetId); 250d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 251d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 252d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 253d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet removeTarget(View target) { 254d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 255d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).removeTarget(target); 256d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 257d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return (TransitionSet) super.removeTarget(target); 258d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 259d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 260d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 261d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public TransitionSet removeTarget(Class target) { 262d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 263d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).removeTarget(target); 264d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 265d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return (TransitionSet) super.removeTarget(target); 266d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 267d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 268d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 269d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public TransitionSet removeTarget(String target) { 270d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 271d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).removeTarget(target); 272d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 273d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) super.removeTarget(target); 274d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 275d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 276d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 277d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public Transition excludeTarget(View target, boolean exclude) { 278d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 279d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).excludeTarget(target, exclude); 280d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 281d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return super.excludeTarget(target, exclude); 282d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 283d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 284d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 2850a2ae002e60f7ea9b6bea282086b5eb0ae3c6e51George Mount public Transition excludeTarget(String targetName, boolean exclude) { 286d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 2870a2ae002e60f7ea9b6bea282086b5eb0ae3c6e51George Mount mTransitions.get(i).excludeTarget(targetName, exclude); 288d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 2890a2ae002e60f7ea9b6bea282086b5eb0ae3c6e51George Mount return super.excludeTarget(targetName, exclude); 290d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 291d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 292d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 293d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public Transition excludeTarget(int targetId, boolean exclude) { 294d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 295d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).excludeTarget(targetId, exclude); 296d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 297d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return super.excludeTarget(targetId, exclude); 298d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 299d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 300d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 301d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public Transition excludeTarget(Class type, boolean exclude) { 302d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 303d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).excludeTarget(type, exclude); 304d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 305d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return super.excludeTarget(type, exclude); 306d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 307d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 308d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 309d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet removeListener(TransitionListener listener) { 310d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) super.removeListener(listener); 311d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 312d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 313ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount @Override 314ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount public void setPathMotion(PathMotion pathMotion) { 315ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount super.setPathMotion(pathMotion); 316ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount for (int i = 0; i < mTransitions.size(); i++) { 317ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount mTransitions.get(i).setPathMotion(pathMotion); 318ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount } 319ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount } 320ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount 321867a86613d4152a93423300f83597300e6ebeebeChet Haase /** 322d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * Removes the specified child transition from this set. 323faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 324faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * @param transition The transition to be removed. 325d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @return This transitionSet object. 326faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 327d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet removeTransition(Transition transition) { 328faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase mTransitions.remove(transition); 3296ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase transition.mParent = null; 330d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return this; 331faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 332faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 333faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 334faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Sets up listeners for each of the child transitions. This is used to 335d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * determine when this transition set is finished (all child transitions 336faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * must finish first). 337faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 338faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase private void setupStartEndListeners() { 339d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase TransitionSetListener listener = new TransitionSetListener(this); 340faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase for (Transition childTransition : mTransitions) { 3416ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase childTransition.addListener(listener); 342faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 343faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase mCurrentListeners = mTransitions.size(); 344faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 345faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 346faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 347faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * This listener is used to detect when all child transitions are done, at 348d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * which point this transition set is also done. 349faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 350d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase static class TransitionSetListener extends TransitionListenerAdapter { 351d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase TransitionSet mTransitionSet; 352d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase TransitionSetListener(TransitionSet transitionSet) { 353d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase mTransitionSet = transitionSet; 3546ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase } 355faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 356faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase public void onTransitionStart(Transition transition) { 357d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase if (!mTransitionSet.mStarted) { 358d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase mTransitionSet.start(); 359d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase mTransitionSet.mStarted = true; 360faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 361faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 362faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 363faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 364faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase public void onTransitionEnd(Transition transition) { 365d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase --mTransitionSet.mCurrentListeners; 366d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase if (mTransitionSet.mCurrentListeners == 0) { 367faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase // All child trans 368d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase mTransitionSet.mStarted = false; 369d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase mTransitionSet.end(); 370faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 371faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase transition.removeListener(this); 372faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 3736ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase } 374faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 375faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 376faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * @hide 377faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 378faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 379d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase protected void createAnimators(ViewGroup sceneRoot, TransitionValuesMaps startValues, 3804d1ecf5daf6ad0b5420f3f3657e2cbaeea630240George Mount TransitionValuesMaps endValues, ArrayList<TransitionValues> startValuesList, 3814d1ecf5daf6ad0b5420f3f3657e2cbaeea630240George Mount ArrayList<TransitionValues> endValuesList) { 38204600023d096dfd7ed2b53d6ee273c57b6c2c20fGeorge Mount long startDelay = getStartDelay(); 38304600023d096dfd7ed2b53d6ee273c57b6c2c20fGeorge Mount int numTransitions = mTransitions.size(); 38404600023d096dfd7ed2b53d6ee273c57b6c2c20fGeorge Mount for (int i = 0; i < numTransitions; i++) { 38504600023d096dfd7ed2b53d6ee273c57b6c2c20fGeorge Mount Transition childTransition = mTransitions.get(i); 38604600023d096dfd7ed2b53d6ee273c57b6c2c20fGeorge Mount // We only set the start delay on the first transition if we are playing 38704600023d096dfd7ed2b53d6ee273c57b6c2c20fGeorge Mount // the transitions sequentially. 38804600023d096dfd7ed2b53d6ee273c57b6c2c20fGeorge Mount if (startDelay > 0 && (mPlayTogether || i == 0)) { 38904600023d096dfd7ed2b53d6ee273c57b6c2c20fGeorge Mount long childStartDelay = childTransition.getStartDelay(); 39004600023d096dfd7ed2b53d6ee273c57b6c2c20fGeorge Mount if (childStartDelay > 0) { 39104600023d096dfd7ed2b53d6ee273c57b6c2c20fGeorge Mount childTransition.setStartDelay(startDelay + childStartDelay); 39204600023d096dfd7ed2b53d6ee273c57b6c2c20fGeorge Mount } else { 39304600023d096dfd7ed2b53d6ee273c57b6c2c20fGeorge Mount childTransition.setStartDelay(startDelay); 39404600023d096dfd7ed2b53d6ee273c57b6c2c20fGeorge Mount } 39504600023d096dfd7ed2b53d6ee273c57b6c2c20fGeorge Mount } 3964d1ecf5daf6ad0b5420f3f3657e2cbaeea630240George Mount childTransition.createAnimators(sceneRoot, startValues, endValues, startValuesList, 3974d1ecf5daf6ad0b5420f3f3657e2cbaeea630240George Mount endValuesList); 398faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 399faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 400faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 401faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 402faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * @hide 403faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 404faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 405d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase protected void runAnimators() { 40638a664986ba5ed101916c49c926d176c434b725bGeorge Mount if (mTransitions.isEmpty()) { 40738a664986ba5ed101916c49c926d176c434b725bGeorge Mount start(); 40838a664986ba5ed101916c49c926d176c434b725bGeorge Mount end(); 40938a664986ba5ed101916c49c926d176c434b725bGeorge Mount return; 41038a664986ba5ed101916c49c926d176c434b725bGeorge Mount } 411faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase setupStartEndListeners(); 41238a664986ba5ed101916c49c926d176c434b725bGeorge Mount int numTransitions = mTransitions.size(); 413faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase if (!mPlayTogether) { 414faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase // Setup sequence with listeners 415faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase // TODO: Need to add listeners in such a way that we can remove them later if canceled 41638a664986ba5ed101916c49c926d176c434b725bGeorge Mount for (int i = 1; i < numTransitions; ++i) { 417faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase Transition previousTransition = mTransitions.get(i - 1); 418faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase final Transition nextTransition = mTransitions.get(i); 419faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase previousTransition.addListener(new TransitionListenerAdapter() { 420faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 421faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase public void onTransitionEnd(Transition transition) { 422d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase nextTransition.runAnimators(); 423faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase transition.removeListener(this); 424faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 425faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase }); 426faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 427faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase Transition firstTransition = mTransitions.get(0); 428faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase if (firstTransition != null) { 429d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase firstTransition.runAnimators(); 430faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 431faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } else { 43238a664986ba5ed101916c49c926d176c434b725bGeorge Mount for (int i = 0; i < numTransitions; ++i) { 43338a664986ba5ed101916c49c926d176c434b725bGeorge Mount mTransitions.get(i).runAnimators(); 434faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 435faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 436faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 437faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 438faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 439d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public void captureStartValues(TransitionValues transitionValues) { 44030da61d477bcb6cc7718f9516c444359352fe148George Mount if (isValidTarget(transitionValues.view)) { 441ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase for (Transition childTransition : mTransitions) { 44230da61d477bcb6cc7718f9516c444359352fe148George Mount if (childTransition.isValidTarget(transitionValues.view)) { 443ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase childTransition.captureStartValues(transitionValues); 4445030c7f6f15c5c2cac2403f863e4f618a8cfaedfGeorge Mount transitionValues.targetedTransitions.add(childTransition); 445ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase } 446d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 447d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 448d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 449d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 450d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 451d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public void captureEndValues(TransitionValues transitionValues) { 45230da61d477bcb6cc7718f9516c444359352fe148George Mount if (isValidTarget(transitionValues.view)) { 453ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase for (Transition childTransition : mTransitions) { 45430da61d477bcb6cc7718f9516c444359352fe148George Mount if (childTransition.isValidTarget(transitionValues.view)) { 455ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase childTransition.captureEndValues(transitionValues); 4565030c7f6f15c5c2cac2403f863e4f618a8cfaedfGeorge Mount transitionValues.targetedTransitions.add(childTransition); 457ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase } 458faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 459faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 460faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 461faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 462d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount @Override 463d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount void capturePropagationValues(TransitionValues transitionValues) { 464d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount super.capturePropagationValues(transitionValues); 465d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount int numTransitions = mTransitions.size(); 466d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount for (int i = 0; i < numTransitions; ++i) { 467d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount mTransitions.get(i).capturePropagationValues(transitionValues); 468d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount } 469d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount } 470d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount 471199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase /** @hide */ 472faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 473cf68aad3164303df59b2a669d186a94533c9c743George Mount public void pause(View sceneRoot) { 474cf68aad3164303df59b2a669d186a94533c9c743George Mount super.pause(sceneRoot); 475e9d32ea13ee14fc0eb4e45ca627ca77729d38bfeChet Haase int numTransitions = mTransitions.size(); 476e9d32ea13ee14fc0eb4e45ca627ca77729d38bfeChet Haase for (int i = 0; i < numTransitions; ++i) { 477cf68aad3164303df59b2a669d186a94533c9c743George Mount mTransitions.get(i).pause(sceneRoot); 478199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase } 479199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase } 480199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase 481199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase /** @hide */ 482199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase @Override 483cf68aad3164303df59b2a669d186a94533c9c743George Mount public void resume(View sceneRoot) { 484cf68aad3164303df59b2a669d186a94533c9c743George Mount super.resume(sceneRoot); 485199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase int numTransitions = mTransitions.size(); 486199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase for (int i = 0; i < numTransitions; ++i) { 487cf68aad3164303df59b2a669d186a94533c9c743George Mount mTransitions.get(i).resume(sceneRoot); 488199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase } 489199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase } 490199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase 491d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase /** @hide */ 492199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase @Override 493199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase protected void cancel() { 494199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase super.cancel(); 495199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase int numTransitions = mTransitions.size(); 496199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase for (int i = 0; i < numTransitions; ++i) { 497199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase mTransitions.get(i).cancel(); 498e9d32ea13ee14fc0eb4e45ca627ca77729d38bfeChet Haase } 499e9d32ea13ee14fc0eb4e45ca627ca77729d38bfeChet Haase } 500e9d32ea13ee14fc0eb4e45ca627ca77729d38bfeChet Haase 501413739e8c62a7cd83ec519203a2628504b1b0d16George Mount /** @hide */ 502413739e8c62a7cd83ec519203a2628504b1b0d16George Mount @Override 503413739e8c62a7cd83ec519203a2628504b1b0d16George Mount void forceToEnd(ViewGroup sceneRoot) { 504413739e8c62a7cd83ec519203a2628504b1b0d16George Mount super.forceToEnd(sceneRoot); 505413739e8c62a7cd83ec519203a2628504b1b0d16George Mount int numTransitions = mTransitions.size(); 506413739e8c62a7cd83ec519203a2628504b1b0d16George Mount for (int i = 0; i < numTransitions; ++i) { 507413739e8c62a7cd83ec519203a2628504b1b0d16George Mount mTransitions.get(i).forceToEnd(sceneRoot); 508413739e8c62a7cd83ec519203a2628504b1b0d16George Mount } 509413739e8c62a7cd83ec519203a2628504b1b0d16George Mount } 510413739e8c62a7cd83ec519203a2628504b1b0d16George Mount 511e9d32ea13ee14fc0eb4e45ca627ca77729d38bfeChet Haase @Override 512d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase TransitionSet setSceneRoot(ViewGroup sceneRoot) { 5136ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase super.setSceneRoot(sceneRoot); 5146ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase int numTransitions = mTransitions.size(); 5156ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase for (int i = 0; i < numTransitions; ++i) { 5166ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase mTransitions.get(i).setSceneRoot(sceneRoot); 5176ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase } 518d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) this; 5196ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase } 5206ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase 5216ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase @Override 522b7a7fc9d233bad507ce893882352618b13647058Chet Haase void setCanRemoveViews(boolean canRemoveViews) { 523b7a7fc9d233bad507ce893882352618b13647058Chet Haase super.setCanRemoveViews(canRemoveViews); 524b7a7fc9d233bad507ce893882352618b13647058Chet Haase int numTransitions = mTransitions.size(); 525b7a7fc9d233bad507ce893882352618b13647058Chet Haase for (int i = 0; i < numTransitions; ++i) { 526b7a7fc9d233bad507ce893882352618b13647058Chet Haase mTransitions.get(i).setCanRemoveViews(canRemoveViews); 527b7a7fc9d233bad507ce893882352618b13647058Chet Haase } 528b7a7fc9d233bad507ce893882352618b13647058Chet Haase } 529b7a7fc9d233bad507ce893882352618b13647058Chet Haase 530b7a7fc9d233bad507ce893882352618b13647058Chet Haase @Override 531d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount public void setPropagation(TransitionPropagation propagation) { 532d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount super.setPropagation(propagation); 533d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount int numTransitions = mTransitions.size(); 534d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount for (int i = 0; i < numTransitions; ++i) { 535d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount mTransitions.get(i).setPropagation(propagation); 536d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount } 537d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount } 538d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount 539d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount @Override 540d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount public void setEpicenterCallback(EpicenterCallback epicenterCallback) { 541d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount super.setEpicenterCallback(epicenterCallback); 542d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount int numTransitions = mTransitions.size(); 543d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount for (int i = 0; i < numTransitions; ++i) { 544d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount mTransitions.get(i).setEpicenterCallback(epicenterCallback); 545d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount } 546d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount } 547d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount 548d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount @Override 549faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase String toString(String indent) { 550faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase String result = super.toString(indent); 551faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase for (int i = 0; i < mTransitions.size(); ++i) { 552faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase result += "\n" + mTransitions.get(i).toString(indent + " "); 553faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 554faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase return result; 555faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 556faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 5576ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase @Override 558d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet clone() { 559d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase TransitionSet clone = (TransitionSet) super.clone(); 5606ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase clone.mTransitions = new ArrayList<Transition>(); 5616ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase int numTransitions = mTransitions.size(); 5626ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase for (int i = 0; i < numTransitions; ++i) { 563c46181a963be736186ae29101625a05b5c1f0ba8Chet Haase clone.addTransition((Transition) mTransitions.get(i).clone()); 5646ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase } 5656ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase return clone; 5666ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase } 567faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase} 568