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;
24c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Guimport android.transition.TransitionInflater;
2555c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stoutimport android.transition.TransitionManager;
263c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.transition.TransitionSet;
273c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.transition.TransitionValues;
283c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.util.SparseBooleanArray;
293c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.util.SparseIntArray;
309240e796bc63422c28f2707840bd99c48573279bDake Guimport android.view.View;
3155c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stoutimport android.view.ViewGroup;
3255c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
333c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport java.util.ArrayList;
343c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport java.util.HashMap;
353c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
3695400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gufinal class TransitionHelperKitkat {
373c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
38e34cae48707e70442aca13e1b4ab55757292828dDake Gu    TransitionHelperKitkat() {
3955c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    }
4055c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
41116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static Object createScene(ViewGroup sceneRoot, Runnable enterAction) {
4255c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout        Scene scene = new Scene(sceneRoot);
439240e796bc63422c28f2707840bd99c48573279bDake Gu        scene.setEnterAction(enterAction);
449240e796bc63422c28f2707840bd99c48573279bDake Gu        return scene;
4555c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    }
4655c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
47116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static Object createTransitionSet(boolean sequential) {
483c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        TransitionSet set = new TransitionSet();
493c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        set.setOrdering(sequential ? TransitionSet.ORDERING_SEQUENTIAL :
503c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            TransitionSet.ORDERING_TOGETHER);
513c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        return set;
523c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
533c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
54116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void addTransition(Object transitionSet, Object transition) {
553c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        ((TransitionSet) transitionSet).addTransition((Transition) transition);
563c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
573c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
58116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static Object createAutoTransition() {
599240e796bc63422c28f2707840bd99c48573279bDake Gu        return new AutoTransition();
609240e796bc63422c28f2707840bd99c48573279bDake Gu    }
619240e796bc63422c28f2707840bd99c48573279bDake Gu
624735bfcd924fec2d694523f34fac5f8151257dc7Dake Gu    static Object createSlide(int slideEdge) {
634735bfcd924fec2d694523f34fac5f8151257dc7Dake Gu        SlideKitkat slide = new SlideKitkat();
644735bfcd924fec2d694523f34fac5f8151257dc7Dake Gu        slide.setSlideEdge(slideEdge);
652f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        return slide;
662f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu    }
672f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu
68116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static Object createScale() {
690fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        Scale scale = new Scale();
700fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        return scale;
710fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    }
720fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
73116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static Object createFadeTransition(int fadingMode) {
743c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        Fade fade = new Fade(fadingMode);
753c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        return fade;
763c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
773c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
783c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    /**
793c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu     * change bounds that support customized start delay.
803c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu     */
8195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    static class CustomChangeBounds extends ChangeBounds {
823c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
833c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        int mDefaultStartDelay;
843c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        // View -> delay
853c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        final HashMap<View, Integer> mViewStartDelays = new HashMap<View, Integer>();
863c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        // id -> delay
873c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        final SparseIntArray mIdStartDelays = new SparseIntArray();
883c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        // Class.getName() -> delay
893c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        final HashMap<String, Integer> mClassStartDelays = new HashMap<String, Integer>();
903c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
913c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        private int getDelay(View view) {
923c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            Integer delay = mViewStartDelays.get(view);
933c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            if (delay != null) {
943c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu                return delay;
953c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            }
963c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            int idStartDelay = mIdStartDelays.get(view.getId(), -1);
973c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            if (idStartDelay != -1) {
983c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu                return idStartDelay;
993c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            }
1003c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            delay = mClassStartDelays.get(view.getClass().getName());
1013c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            if (delay != null) {
1023c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu                return delay;
1033c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            }
1043c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            return mDefaultStartDelay;
1053c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
1063c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1073c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
1083c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues,
1093c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu                TransitionValues endValues) {
1103c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            Animator animator = super.createAnimator(sceneRoot, startValues, endValues);
1113c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            if (animator != null && endValues != null && endValues.view != null) {
1123c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu                animator.setStartDelay(getDelay(endValues.view));
1133c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            }
1143c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            return animator;
1153c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
1163c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1173c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setStartDelay(View view, int startDelay) {
1183c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            mViewStartDelays.put(view, startDelay);
1193c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
1203c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1213c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setStartDelay(int viewId, int startDelay) {
1223c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            mIdStartDelays.put(viewId, startDelay);
1233c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
1243c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1253c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setStartDelay(String className, int startDelay) {
1263c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            mClassStartDelays.put(className, startDelay);
1273c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
1283c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1293c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setDefaultStartDelay(int startDelay) {
1303c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            mDefaultStartDelay = startDelay;
1313c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
1323c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1333c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
134116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static Object createChangeBounds(boolean reparent) {
1353c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        CustomChangeBounds changeBounds = new CustomChangeBounds();
1363c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        changeBounds.setReparent(reparent);
1373c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        return changeBounds;
1383c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1393c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
140116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void setChangeBoundsStartDelay(Object changeBounds, int viewId, int startDelay) {
1413c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        ((CustomChangeBounds) changeBounds).setStartDelay(viewId, startDelay);
1423c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1433c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
144116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void setChangeBoundsStartDelay(Object changeBounds, View view, int startDelay) {
1453c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        ((CustomChangeBounds) changeBounds).setStartDelay(view, startDelay);
1463c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1473c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
148116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void setChangeBoundsStartDelay(Object changeBounds, String className, int startDelay) {
1493c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        ((CustomChangeBounds) changeBounds).setStartDelay(className, startDelay);
1503c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1513c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
152116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void setChangeBoundsDefaultStartDelay(Object changeBounds, int startDelay) {
1533c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        ((CustomChangeBounds) changeBounds).setDefaultStartDelay(startDelay);
1543c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1553c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
156116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void setStartDelay(Object transition, long startDelay) {
1572f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        ((Transition)transition).setStartDelay(startDelay);
1582f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu    }
1592f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu
160116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void setDuration(Object transition, long duration) {
1612f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        ((Transition)transition).setDuration(duration);
1622f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu    }
1632f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu
164116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void exclude(Object transition, int targetId, boolean exclude) {
1653c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        ((Transition) transition).excludeTarget(targetId, exclude);
1663c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1673c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
168116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void exclude(Object transition, View targetView, boolean exclude) {
1693c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        ((Transition) transition).excludeTarget(targetView, exclude);
1703c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1713c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
172116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void excludeChildren(Object transition, int targetId, boolean exclude) {
1739240e796bc63422c28f2707840bd99c48573279bDake Gu        ((Transition) transition).excludeChildren(targetId, exclude);
1749240e796bc63422c28f2707840bd99c48573279bDake Gu    }
1759240e796bc63422c28f2707840bd99c48573279bDake Gu
176116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void excludeChildren(Object transition, View targetView, boolean exclude) {
1779240e796bc63422c28f2707840bd99c48573279bDake Gu        ((Transition) transition).excludeChildren(targetView, exclude);
1789240e796bc63422c28f2707840bd99c48573279bDake Gu    }
1799240e796bc63422c28f2707840bd99c48573279bDake Gu
180116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void include(Object transition, int targetId) {
1813c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        ((Transition) transition).addTarget(targetId);
1823c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1833c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
184116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void include(Object transition, View targetView) {
1853c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        ((Transition) transition).addTarget(targetView);
1863c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
1873c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
188116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void setTransitionListener(Object transition, final TransitionListener listener) {
1899240e796bc63422c28f2707840bd99c48573279bDake Gu        Transition t = (Transition) transition;
1909240e796bc63422c28f2707840bd99c48573279bDake Gu        t.addListener(new Transition.TransitionListener() {
1919240e796bc63422c28f2707840bd99c48573279bDake Gu
1929240e796bc63422c28f2707840bd99c48573279bDake Gu            @Override
1939240e796bc63422c28f2707840bd99c48573279bDake Gu            public void onTransitionStart(Transition transition) {
1942f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu                listener.onTransitionStart(transition);
1959240e796bc63422c28f2707840bd99c48573279bDake Gu            }
1969240e796bc63422c28f2707840bd99c48573279bDake Gu
1979240e796bc63422c28f2707840bd99c48573279bDake Gu            @Override
1989240e796bc63422c28f2707840bd99c48573279bDake Gu            public void onTransitionResume(Transition transition) {
1999240e796bc63422c28f2707840bd99c48573279bDake Gu            }
2009240e796bc63422c28f2707840bd99c48573279bDake Gu
2019240e796bc63422c28f2707840bd99c48573279bDake Gu            @Override
2029240e796bc63422c28f2707840bd99c48573279bDake Gu            public void onTransitionPause(Transition transition) {
2039240e796bc63422c28f2707840bd99c48573279bDake Gu            }
2049240e796bc63422c28f2707840bd99c48573279bDake Gu
2059240e796bc63422c28f2707840bd99c48573279bDake Gu            @Override
2069240e796bc63422c28f2707840bd99c48573279bDake Gu            public void onTransitionEnd(Transition transition) {
2072f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu                listener.onTransitionEnd(transition);
2089240e796bc63422c28f2707840bd99c48573279bDake Gu            }
2099240e796bc63422c28f2707840bd99c48573279bDake Gu
2109240e796bc63422c28f2707840bd99c48573279bDake Gu            @Override
2119240e796bc63422c28f2707840bd99c48573279bDake Gu            public void onTransitionCancel(Transition transition) {
2129240e796bc63422c28f2707840bd99c48573279bDake Gu            }
2139240e796bc63422c28f2707840bd99c48573279bDake Gu        });
2149240e796bc63422c28f2707840bd99c48573279bDake Gu    }
2159240e796bc63422c28f2707840bd99c48573279bDake Gu
216116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void runTransition(Object scene, Object transition) {
2179240e796bc63422c28f2707840bd99c48573279bDake Gu        TransitionManager.go((Scene) scene, (Transition) transition);
21855c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    }
2196f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout
220116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void setInterpolator(Object transition, Object timeInterpolator) {
2216f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout        ((Transition) transition).setInterpolator((TimeInterpolator) timeInterpolator);
2226f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout    }
2230fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
224116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    static void addTarget(Object transition, View view) {
2250fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        ((Transition) transition).addTarget(view);
2260fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    }
227c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu
228c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu    static Object loadTransition(Context context, int resId) {
229c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu        return TransitionInflater.from(context).inflateTransition(resId);
230c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu    }
23155c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout}
232