155c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout/*
255c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * Copyright (C) 2014 The Android Open Source Project
355c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout *
455c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
555c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * in compliance with the License. You may obtain a copy of the License at
655c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout *
755c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * http://www.apache.org/licenses/LICENSE-2.0
855c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout *
955c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * Unless required by applicable law or agreed to in writing, software distributed under the License
1055c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
1155c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * or implied. See the License for the specific language governing permissions and limitations under
1255c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * the License.
1355c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout */
1495400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gupackage android.support.v17.leanback.transition;
1555c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
163c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.animation.Animator;
176f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stoutimport android.animation.TimeInterpolator;
1855c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stoutimport android.content.Context;
199240e796bc63422c28f2707840bd99c48573279bDake Guimport android.transition.AutoTransition;
203c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.transition.ChangeBounds;
213c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.transition.Fade;
2255c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stoutimport android.transition.Scene;
2355c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stoutimport android.transition.Transition;
2455c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stoutimport android.transition.TransitionManager;
253c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.transition.TransitionSet;
263c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.transition.TransitionValues;
273c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.util.SparseBooleanArray;
283c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.util.SparseIntArray;
299240e796bc63422c28f2707840bd99c48573279bDake Guimport android.view.View;
3055c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stoutimport android.view.ViewGroup;
3155c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
323c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport java.util.ArrayList;
333c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport java.util.HashMap;
343c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
3595400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gufinal class TransitionHelperKitkat {
363c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
37e34cae48707e70442aca13e1b4ab55757292828dDake Gu    TransitionHelperKitkat() {
3855c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    }
3955c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
40116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static Object createScene(ViewGroup sceneRoot, Runnable enterAction) {
4155c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout        Scene scene = new Scene(sceneRoot);
429240e796bc63422c28f2707840bd99c48573279bDake Gu        scene.setEnterAction(enterAction);
439240e796bc63422c28f2707840bd99c48573279bDake Gu        return scene;
4455c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    }
4555c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
46116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static Object createTransitionSet(boolean sequential) {
473c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        TransitionSet set = new TransitionSet();
483c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        set.setOrdering(sequential ? TransitionSet.ORDERING_SEQUENTIAL :
493c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            TransitionSet.ORDERING_TOGETHER);
503c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        return set;
513c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
523c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
53116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void addTransition(Object transitionSet, Object transition) {
543c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        ((TransitionSet) transitionSet).addTransition((Transition) transition);
553c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
563c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
57116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static Object createAutoTransition() {
589240e796bc63422c28f2707840bd99c48573279bDake Gu        return new AutoTransition();
599240e796bc63422c28f2707840bd99c48573279bDake Gu    }
609240e796bc63422c28f2707840bd99c48573279bDake Gu
61116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static Object createSlide(SlideCallback callback) {
622f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        Slide slide = new Slide();
632f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        slide.setCallback(callback);
642f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        return slide;
652f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu    }
662f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu
67116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static Object createScale() {
680fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        Scale scale = new Scale();
690fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        return scale;
700fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    }
710fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
72116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static Object createFadeTransition(int fadingMode) {
733c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        Fade fade = new Fade(fadingMode);
743c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        return fade;
753c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
763c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
773c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    /**
783c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu     * change bounds that support customized start delay.
793c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu     */
8095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    static class CustomChangeBounds extends ChangeBounds {
813c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
823c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        int mDefaultStartDelay;
833c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        // View -> delay
843c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        final HashMap<View, Integer> mViewStartDelays = new HashMap<View, Integer>();
853c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        // id -> delay
863c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        final SparseIntArray mIdStartDelays = new SparseIntArray();
873c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        // Class.getName() -> delay
883c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        final HashMap<String, Integer> mClassStartDelays = new HashMap<String, Integer>();
893c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
903c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        private int getDelay(View view) {
913c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            Integer delay = mViewStartDelays.get(view);
923c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            if (delay != null) {
933c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu                return delay;
943c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            }
953c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            int idStartDelay = mIdStartDelays.get(view.getId(), -1);
963c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            if (idStartDelay != -1) {
973c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu                return idStartDelay;
983c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            }
993c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            delay = mClassStartDelays.get(view.getClass().getName());
1003c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            if (delay != null) {
1013c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu                return delay;
1023c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            }
1033c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            return mDefaultStartDelay;
1043c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
1053c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1063c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
1073c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues,
1083c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu                TransitionValues endValues) {
1093c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            Animator animator = super.createAnimator(sceneRoot, startValues, endValues);
1103c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            if (animator != null && endValues != null && endValues.view != null) {
1113c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu                animator.setStartDelay(getDelay(endValues.view));
1123c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            }
1133c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            return animator;
1143c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
1153c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1163c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setStartDelay(View view, int startDelay) {
1173c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            mViewStartDelays.put(view, startDelay);
1183c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
1193c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1203c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setStartDelay(int viewId, int startDelay) {
1213c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            mIdStartDelays.put(viewId, startDelay);
1223c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
1233c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1243c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setStartDelay(String className, int startDelay) {
1253c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            mClassStartDelays.put(className, startDelay);
1263c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
1273c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1283c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setDefaultStartDelay(int startDelay) {
1293c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            mDefaultStartDelay = startDelay;
1303c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
1313c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1323c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
133116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static Object createChangeBounds(boolean reparent) {
1343c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        CustomChangeBounds changeBounds = new CustomChangeBounds();
1353c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        changeBounds.setReparent(reparent);
1363c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        return changeBounds;
1373c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1383c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
139116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void setChangeBoundsStartDelay(Object changeBounds, int viewId, int startDelay) {
1403c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        ((CustomChangeBounds) changeBounds).setStartDelay(viewId, startDelay);
1413c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1423c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
143116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void setChangeBoundsStartDelay(Object changeBounds, View view, int startDelay) {
1443c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        ((CustomChangeBounds) changeBounds).setStartDelay(view, startDelay);
1453c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1463c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
147116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void setChangeBoundsStartDelay(Object changeBounds, String className, int startDelay) {
1483c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        ((CustomChangeBounds) changeBounds).setStartDelay(className, startDelay);
1493c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1503c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
151116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void setChangeBoundsDefaultStartDelay(Object changeBounds, int startDelay) {
1523c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        ((CustomChangeBounds) changeBounds).setDefaultStartDelay(startDelay);
1533c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1543c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
155116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void setStartDelay(Object transition, long startDelay) {
1562f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        ((Transition)transition).setStartDelay(startDelay);
1572f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu    }
1582f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu
159116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void setDuration(Object transition, long duration) {
1602f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        ((Transition)transition).setDuration(duration);
1612f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu    }
1622f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu
163116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void exclude(Object transition, int targetId, boolean exclude) {
1643c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        ((Transition) transition).excludeTarget(targetId, exclude);
1653c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1663c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
167116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void exclude(Object transition, View targetView, boolean exclude) {
1683c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        ((Transition) transition).excludeTarget(targetView, exclude);
1693c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1703c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
171116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void excludeChildren(Object transition, int targetId, boolean exclude) {
1729240e796bc63422c28f2707840bd99c48573279bDake Gu        ((Transition) transition).excludeChildren(targetId, exclude);
1739240e796bc63422c28f2707840bd99c48573279bDake Gu    }
1749240e796bc63422c28f2707840bd99c48573279bDake Gu
175116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void excludeChildren(Object transition, View targetView, boolean exclude) {
1769240e796bc63422c28f2707840bd99c48573279bDake Gu        ((Transition) transition).excludeChildren(targetView, exclude);
1779240e796bc63422c28f2707840bd99c48573279bDake Gu    }
1789240e796bc63422c28f2707840bd99c48573279bDake Gu
179116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void include(Object transition, int targetId) {
1803c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        ((Transition) transition).addTarget(targetId);
1813c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1823c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
183116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void include(Object transition, View targetView) {
1843c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        ((Transition) transition).addTarget(targetView);
1853c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1863c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
187116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void setTransitionListener(Object transition, final TransitionListener listener) {
1889240e796bc63422c28f2707840bd99c48573279bDake Gu        Transition t = (Transition) transition;
1899240e796bc63422c28f2707840bd99c48573279bDake Gu        t.addListener(new Transition.TransitionListener() {
1909240e796bc63422c28f2707840bd99c48573279bDake Gu
1919240e796bc63422c28f2707840bd99c48573279bDake Gu            @Override
1929240e796bc63422c28f2707840bd99c48573279bDake Gu            public void onTransitionStart(Transition transition) {
1932f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu                listener.onTransitionStart(transition);
1949240e796bc63422c28f2707840bd99c48573279bDake Gu            }
1959240e796bc63422c28f2707840bd99c48573279bDake Gu
1969240e796bc63422c28f2707840bd99c48573279bDake Gu            @Override
1979240e796bc63422c28f2707840bd99c48573279bDake Gu            public void onTransitionResume(Transition transition) {
1989240e796bc63422c28f2707840bd99c48573279bDake Gu            }
1999240e796bc63422c28f2707840bd99c48573279bDake Gu
2009240e796bc63422c28f2707840bd99c48573279bDake Gu            @Override
2019240e796bc63422c28f2707840bd99c48573279bDake Gu            public void onTransitionPause(Transition transition) {
2029240e796bc63422c28f2707840bd99c48573279bDake Gu            }
2039240e796bc63422c28f2707840bd99c48573279bDake Gu
2049240e796bc63422c28f2707840bd99c48573279bDake Gu            @Override
2059240e796bc63422c28f2707840bd99c48573279bDake Gu            public void onTransitionEnd(Transition transition) {
2062f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu                listener.onTransitionEnd(transition);
2079240e796bc63422c28f2707840bd99c48573279bDake Gu            }
2089240e796bc63422c28f2707840bd99c48573279bDake Gu
2099240e796bc63422c28f2707840bd99c48573279bDake Gu            @Override
2109240e796bc63422c28f2707840bd99c48573279bDake Gu            public void onTransitionCancel(Transition transition) {
2119240e796bc63422c28f2707840bd99c48573279bDake Gu            }
2129240e796bc63422c28f2707840bd99c48573279bDake Gu        });
2139240e796bc63422c28f2707840bd99c48573279bDake Gu    }
2149240e796bc63422c28f2707840bd99c48573279bDake Gu
215116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void runTransition(Object scene, Object transition) {
2169240e796bc63422c28f2707840bd99c48573279bDake Gu        TransitionManager.go((Scene) scene, (Transition) transition);
21755c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    }
2186f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout
219116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void setInterpolator(Object transition, Object timeInterpolator) {
2206f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout        ((Transition) transition).setInterpolator((TimeInterpolator) timeInterpolator);
2216f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout    }
2220fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
223116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void addTarget(Object transition, View view) {
2240fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        ((Transition) transition).addTarget(view);
2250fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    }
22655c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout}
227