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
16116c06a5bc40fd4d1753012582842ecc5cd06aecDake Guimport android.content.Context;
1755c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stoutimport android.os.Build;
184735bfcd924fec2d694523f34fac5f8151257dc7Dake Guimport android.view.Gravity;
199240e796bc63422c28f2707840bd99c48573279bDake Guimport android.view.View;
2055c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stoutimport android.view.ViewGroup;
2195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Guimport android.view.Window;
2255c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
2355c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout/**
2455c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout * Helper for view transitions.
2595400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu * @hide
2655c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout */
2795400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gupublic final class TransitionHelper {
2855c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
293c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    public static final int FADE_IN = 0x1;
303c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    public static final int FADE_OUT = 0x2;
313c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
324735bfcd924fec2d694523f34fac5f8151257dc7Dake Gu    public static final int SLIDE_LEFT = Gravity.LEFT;
334735bfcd924fec2d694523f34fac5f8151257dc7Dake Gu    public static final int SLIDE_TOP = Gravity.TOP;
344735bfcd924fec2d694523f34fac5f8151257dc7Dake Gu    public static final int SLIDE_RIGHT = Gravity.RIGHT;
354735bfcd924fec2d694523f34fac5f8151257dc7Dake Gu    public static final int SLIDE_BOTTOM = Gravity.BOTTOM;
362f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu
37e34cae48707e70442aca13e1b4ab55757292828dDake Gu    private final static TransitionHelper sHelper = new TransitionHelper();
3855c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    TransitionHelperVersionImpl mImpl;
3955c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
4055c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    /**
4155c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout     * Gets whether the system supports Transition animations.
4255c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout     *
4355c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout     * @return True if Transition animations are supported.
4455c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout     */
4555c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    public static boolean systemSupportsTransitions() {
4655c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout        if (Build.VERSION.SDK_INT >= 19) {
4755c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout            // Supported on Android 4.4 or later.
4855c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout            return true;
4955c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout        }
5055c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout        return false;
5155c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    }
5255c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
5355c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    /**
54572ed31d757c2635ea0a5cdd7ec8a33cd16f77b7Dake Gu     * Returns true if system supports entrance Transition animations.
55572ed31d757c2635ea0a5cdd7ec8a33cd16f77b7Dake Gu     */
56572ed31d757c2635ea0a5cdd7ec8a33cd16f77b7Dake Gu    public static boolean systemSupportsEntranceTransitions() {
57572ed31d757c2635ea0a5cdd7ec8a33cd16f77b7Dake Gu        return Build.VERSION.SDK_INT >= 21;
58572ed31d757c2635ea0a5cdd7ec8a33cd16f77b7Dake Gu    }
59572ed31d757c2635ea0a5cdd7ec8a33cd16f77b7Dake Gu
60572ed31d757c2635ea0a5cdd7ec8a33cd16f77b7Dake Gu    /**
6155c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout     * Interface implemented by classes that support Transition animations.
6255c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout     */
6355c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    static interface TransitionHelperVersionImpl {
6455c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
6595400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getSharedElementEnterTransition(Window window);
6695400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
6795400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getSharedElementReturnTransition(Window window);
6895400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
6995400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getSharedElementExitTransition(Window window);
7095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
7195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getSharedElementReenterTransition(Window window);
7295400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
7395400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getEnterTransition(Window window);
7495400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
7595400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getReturnTransition(Window window);
7695400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
7795400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getExitTransition(Window window);
7895400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
7995400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getReenterTransition(Window window);
8095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
819240e796bc63422c28f2707840bd99c48573279bDake Gu        public Object createScene(ViewGroup sceneRoot, Runnable r);
829240e796bc63422c28f2707840bd99c48573279bDake Gu
839240e796bc63422c28f2707840bd99c48573279bDake Gu        public Object createAutoTransition();
849240e796bc63422c28f2707840bd99c48573279bDake Gu
854735bfcd924fec2d694523f34fac5f8151257dc7Dake Gu        public Object createSlide(int slideEdge);
862f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu
870fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        public Object createScale();
880fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
893c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public Object createFadeTransition(int fadingMode);
903c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
913c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public Object createChangeBounds(boolean reparent);
923c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
933c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setChangeBoundsStartDelay(Object changeBounds, View view, int startDelay);
943c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
953c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setChangeBoundsStartDelay(Object changeBounds, int viewId, int startDelay);
963c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
973c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setChangeBoundsStartDelay(Object changeBounds, String className,
983c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu                int startDelay);
993c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1003c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setChangeBoundsDefaultStartDelay(Object changeBounds, int startDelay);
1013c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1023c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public Object createTransitionSet(boolean sequential);
1033c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1043c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void addTransition(Object transitionSet, Object transition);
1053c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1062f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        public void setTransitionListener(Object transition, TransitionListener listener);
1079240e796bc63422c28f2707840bd99c48573279bDake Gu
1089240e796bc63422c28f2707840bd99c48573279bDake Gu        public void runTransition(Object scene, Object transition);
1099240e796bc63422c28f2707840bd99c48573279bDake Gu
1103c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void exclude(Object transition, int targetId, boolean exclude);
1113c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1123c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void exclude(Object transition, View targetView, boolean exclude);
1133c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1149240e796bc63422c28f2707840bd99c48573279bDake Gu        public void excludeChildren(Object transition, int targetId, boolean exclude);
11555c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
1169240e796bc63422c28f2707840bd99c48573279bDake Gu        public void excludeChildren(Object transition, View target, boolean exclude);
1173c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1183c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void include(Object transition, int targetId);
1193c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1203c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void include(Object transition, View targetView);
1213c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1222f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        public void setStartDelay(Object transition, long startDelay);
1232f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu
1242f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        public void setDuration(Object transition, long duration);
1252f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu
1266f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout        public void setInterpolator(Object transition, Object timeInterpolator);
1276f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout
1280fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        public void addTarget(Object transition, View view);
129116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu
130116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu        public Object createDefaultInterpolator(Context context);
131c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu
132c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu        public Object loadTransition(Context context, int resId);
13355c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    }
13455c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
13555c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    /**
13655c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout     * Interface used when we do not support Transition animations.
13755c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout     */
13855c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    private static final class TransitionHelperStubImpl implements TransitionHelperVersionImpl {
1399240e796bc63422c28f2707840bd99c48573279bDake Gu
1409240e796bc63422c28f2707840bd99c48573279bDake Gu        private static class TransitionStub {
1412f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu            TransitionListener mTransitionListener;
1429240e796bc63422c28f2707840bd99c48573279bDake Gu        }
1439240e796bc63422c28f2707840bd99c48573279bDake Gu
1449240e796bc63422c28f2707840bd99c48573279bDake Gu        @Override
14595400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getSharedElementEnterTransition(Window window) {
14695400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu            return null;
14795400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
14895400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
14995400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
15095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getSharedElementReturnTransition(Window window) {
15195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu            return null;
15295400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
15395400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
15495400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
15595400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getSharedElementExitTransition(Window window) {
15695400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu            return null;
15795400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
15895400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
15995400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
16095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getSharedElementReenterTransition(Window window) {
16195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu            return null;
16295400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
16395400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
16495400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
16595400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getEnterTransition(Window window) {
16695400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu            return null;
16795400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
16895400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
16995400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
17095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getReturnTransition(Window window) {
17195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu            return null;
17295400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
17395400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
17495400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
17595400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getExitTransition(Window window) {
17695400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu            return null;
17795400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
17895400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
17995400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
18095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getReenterTransition(Window window) {
18195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu            return null;
18295400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
18395400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
18495400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
1859240e796bc63422c28f2707840bd99c48573279bDake Gu        public Object createScene(ViewGroup sceneRoot, Runnable r) {
1869240e796bc63422c28f2707840bd99c48573279bDake Gu            return r;
1879240e796bc63422c28f2707840bd99c48573279bDake Gu        }
18855c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
18955c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout        @Override
1909240e796bc63422c28f2707840bd99c48573279bDake Gu        public Object createAutoTransition() {
1919240e796bc63422c28f2707840bd99c48573279bDake Gu            return new TransitionStub();
19255c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout        }
19355c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
19455c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout        @Override
1953c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public Object createFadeTransition(int fadingMode) {
1963c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            return new TransitionStub();
1973c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
1983c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
1993c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
2003c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public Object createChangeBounds(boolean reparent) {
2013c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            return new TransitionStub();
2023c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
2033c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
2043c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
2054735bfcd924fec2d694523f34fac5f8151257dc7Dake Gu        public Object createSlide(int slideEdge) {
2062f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu            return new TransitionStub();
2072f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        }
2082f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu
2092f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        @Override
2100fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        public Object createScale() {
2110fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout            return new TransitionStub();
2120fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        }
2130fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
2140fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        @Override
2153c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setChangeBoundsStartDelay(Object changeBounds, View view, int startDelay) {
2163c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
2173c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
2183c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
2193c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setChangeBoundsStartDelay(Object changeBounds, int viewId, int startDelay) {
2203c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
2213c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
2223c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
2233c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setChangeBoundsStartDelay(Object changeBounds, String className,
2243c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu                int startDelay) {
2253c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
2263c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
2273c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
2283c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setChangeBoundsDefaultStartDelay(Object changeBounds, int startDelay) {
2293c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
2303c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
2313c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
2323c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public Object createTransitionSet(boolean sequential) {
2333c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu            return new TransitionStub();
2343c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
2353c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
2363c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
2373c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void addTransition(Object transitionSet, Object transition) {
2383c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
2393c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
2403c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
2413c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void exclude(Object transition, int targetId, boolean exclude) {
2423c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
2433c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
2443c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
2453c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void exclude(Object transition, View targetView, boolean exclude) {
2463c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
2473c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
2483c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
2499240e796bc63422c28f2707840bd99c48573279bDake Gu        public void excludeChildren(Object transition, int targetId, boolean exclude) {
2509240e796bc63422c28f2707840bd99c48573279bDake Gu        }
2519240e796bc63422c28f2707840bd99c48573279bDake Gu
2529240e796bc63422c28f2707840bd99c48573279bDake Gu        @Override
2539240e796bc63422c28f2707840bd99c48573279bDake Gu        public void excludeChildren(Object transition, View targetView, boolean exclude) {
2549240e796bc63422c28f2707840bd99c48573279bDake Gu        }
2559240e796bc63422c28f2707840bd99c48573279bDake Gu
2569240e796bc63422c28f2707840bd99c48573279bDake Gu        @Override
2573c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void include(Object transition, int targetId) {
2583c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
2593c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
2603c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
2613c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void include(Object transition, View targetView) {
2623c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
2633c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
2643c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
2652f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        public void setStartDelay(Object transition, long startDelay) {
2662f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        }
2672f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu
2682f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        @Override
2692f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        public void setDuration(Object transition, long duration) {
2702f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        }
2712f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu
2722f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        @Override
2732f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        public void setTransitionListener(Object transition, TransitionListener listener) {
2742f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu            ((TransitionStub) transition).mTransitionListener = listener;
2759240e796bc63422c28f2707840bd99c48573279bDake Gu        }
2769240e796bc63422c28f2707840bd99c48573279bDake Gu
2779240e796bc63422c28f2707840bd99c48573279bDake Gu        @Override
2789240e796bc63422c28f2707840bd99c48573279bDake Gu        public void runTransition(Object scene, Object transition) {
2792f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu            TransitionStub transitionStub = (TransitionStub) transition;
2802f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu            if (transitionStub != null && transitionStub.mTransitionListener != null) {
2812f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu                transitionStub.mTransitionListener.onTransitionStart(transition);
2822f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu            }
2839240e796bc63422c28f2707840bd99c48573279bDake Gu            Runnable r = ((Runnable) scene);
28455c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout            if (r != null) {
28555c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout                r.run();
28655c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout            }
2872f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu            if (transitionStub != null && transitionStub.mTransitionListener != null) {
2882f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu                transitionStub.mTransitionListener.onTransitionEnd(transition);
2899240e796bc63422c28f2707840bd99c48573279bDake Gu            }
29055c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout        }
2916f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout
2926f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout        @Override
2936f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout        public void setInterpolator(Object transition, Object timeInterpolator) {
2946f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout        }
2950fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
2960fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        @Override
2970fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        public void addTarget(Object transition, View view) {
2980fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        }
299116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu
300116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu        @Override
301116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu        public Object createDefaultInterpolator(Context context) {
302116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            return null;
303116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu        }
304c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu
305c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu        @Override
306c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu        public Object loadTransition(Context context, int resId) {
30749770db28f9d54507324a660faa305ffb9c6c620Dake Gu            return new TransitionStub();
308c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu        }
30955c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    }
31055c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
31155c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    /**
31255c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout     * Implementation used on KitKat (and above).
31355c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout     */
31495400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    private static class TransitionHelperKitkatImpl implements TransitionHelperVersionImpl {
31555c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
31655c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout        @Override
31795400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getSharedElementEnterTransition(Window window) {
31895400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu            return null;
31995400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
32095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
32195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
32295400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getSharedElementReturnTransition(Window window) {
32395400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu            return null;
32495400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
32595400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
32695400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
32795400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getSharedElementExitTransition(Window window) {
32895400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu            return null;
32995400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
33095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
33195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
33295400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getSharedElementReenterTransition(Window window) {
33395400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu            return null;
33495400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
33595400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
33695400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
33795400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getEnterTransition(Window window) {
33895400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu            return null;
33995400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
34095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
34195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
34295400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getReturnTransition(Window window) {
34395400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu            return null;
34495400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
34595400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
34695400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
34795400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getExitTransition(Window window) {
34895400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu            return null;
34995400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
35095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
35195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
35295400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getReenterTransition(Window window) {
35395400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu            return null;
35495400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
35595400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
35695400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
3579240e796bc63422c28f2707840bd99c48573279bDake Gu        public Object createScene(ViewGroup sceneRoot, Runnable r) {
358116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            return TransitionHelperKitkat.createScene(sceneRoot, r);
35955c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout        }
36055c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
36155c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout        @Override
3629240e796bc63422c28f2707840bd99c48573279bDake Gu        public Object createAutoTransition() {
363116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            return TransitionHelperKitkat.createAutoTransition();
3649240e796bc63422c28f2707840bd99c48573279bDake Gu        }
3659240e796bc63422c28f2707840bd99c48573279bDake Gu
3669240e796bc63422c28f2707840bd99c48573279bDake Gu        @Override
3673c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public Object createFadeTransition(int fadingMode) {
368116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            return TransitionHelperKitkat.createFadeTransition(fadingMode);
3693c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
3703c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
3713c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
3723c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public Object createChangeBounds(boolean reparent) {
373116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            return TransitionHelperKitkat.createChangeBounds(reparent);
3743c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
3753c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
3763c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
3774735bfcd924fec2d694523f34fac5f8151257dc7Dake Gu        public Object createSlide(int slideEdge) {
3784735bfcd924fec2d694523f34fac5f8151257dc7Dake Gu            return TransitionHelperKitkat.createSlide(slideEdge);
3792f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        }
3802f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu
3812f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        @Override
3820fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        public Object createScale() {
383116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            return TransitionHelperKitkat.createScale();
3840fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        }
3850fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
3860fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        @Override
3873c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setChangeBoundsStartDelay(Object changeBounds, View view, int startDelay) {
388116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            TransitionHelperKitkat.setChangeBoundsStartDelay(changeBounds, view, startDelay);
3893c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
3903c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
3913c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
3923c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setChangeBoundsStartDelay(Object changeBounds, int viewId, int startDelay) {
393116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            TransitionHelperKitkat.setChangeBoundsStartDelay(changeBounds, viewId, startDelay);
3943c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
3953c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
3963c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
3973c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setChangeBoundsStartDelay(Object changeBounds, String className,
3983c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu                int startDelay) {
399116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            TransitionHelperKitkat.setChangeBoundsStartDelay(changeBounds, className, startDelay);
4003c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
4013c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
4023c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
4033c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void setChangeBoundsDefaultStartDelay(Object changeBounds, int startDelay) {
404116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            TransitionHelperKitkat.setChangeBoundsDefaultStartDelay(changeBounds, startDelay);
4053c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
4063c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
4073c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
4083c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public Object createTransitionSet(boolean sequential) {
409116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            return TransitionHelperKitkat.createTransitionSet(sequential);
4103c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
4113c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
4123c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
4133c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void addTransition(Object transitionSet, Object transition) {
414116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            TransitionHelperKitkat.addTransition(transitionSet, transition);
4153c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
4163c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
4173c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
4183c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void exclude(Object transition, int targetId, boolean exclude) {
419116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            TransitionHelperKitkat.exclude(transition, targetId, exclude);
4203c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
4213c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
4223c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
4233c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void exclude(Object transition, View targetView, boolean exclude) {
424116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            TransitionHelperKitkat.exclude(transition, targetView, exclude);
4253c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
4263c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
4273c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
4289240e796bc63422c28f2707840bd99c48573279bDake Gu        public void excludeChildren(Object transition, int targetId, boolean exclude) {
429116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            TransitionHelperKitkat.excludeChildren(transition, targetId, exclude);
4309240e796bc63422c28f2707840bd99c48573279bDake Gu        }
4319240e796bc63422c28f2707840bd99c48573279bDake Gu
4329240e796bc63422c28f2707840bd99c48573279bDake Gu        @Override
4339240e796bc63422c28f2707840bd99c48573279bDake Gu        public void excludeChildren(Object transition, View targetView, boolean exclude) {
434116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            TransitionHelperKitkat.excludeChildren(transition, targetView, exclude);
4359240e796bc63422c28f2707840bd99c48573279bDake Gu        }
4369240e796bc63422c28f2707840bd99c48573279bDake Gu
4379240e796bc63422c28f2707840bd99c48573279bDake Gu        @Override
4383c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void include(Object transition, int targetId) {
439116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            TransitionHelperKitkat.include(transition, targetId);
4403c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
4413c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
4423c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
4433c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        public void include(Object transition, View targetView) {
444116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            TransitionHelperKitkat.include(transition, targetView);
4453c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        }
4463c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
4473c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        @Override
4482f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        public void setStartDelay(Object transition, long startDelay) {
449116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            TransitionHelperKitkat.setStartDelay(transition, startDelay);
4502f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        }
4512f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu
4522f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        @Override
4532f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        public void setDuration(Object transition, long duration) {
454116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            TransitionHelperKitkat.setDuration(transition, duration);
4552f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        }
4562f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu
4572f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        @Override
4582f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        public void setTransitionListener(Object transition, TransitionListener listener) {
459116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            TransitionHelperKitkat.setTransitionListener(transition, listener);
4609240e796bc63422c28f2707840bd99c48573279bDake Gu        }
4619240e796bc63422c28f2707840bd99c48573279bDake Gu
4629240e796bc63422c28f2707840bd99c48573279bDake Gu        @Override
4639240e796bc63422c28f2707840bd99c48573279bDake Gu        public void runTransition(Object scene, Object transition) {
464116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            TransitionHelperKitkat.runTransition(scene, transition);
46555c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout        }
4666f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout
4676f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout        @Override
4686f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout        public void setInterpolator(Object transition, Object timeInterpolator) {
469116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            TransitionHelperKitkat.setInterpolator(transition, timeInterpolator);
4706f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout        }
4710fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
4720fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        @Override
4730fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        public void addTarget(Object transition, View view) {
474116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            TransitionHelperKitkat.addTarget(transition, view);
475116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu        }
476116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu
477116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu        @Override
478116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu        public Object createDefaultInterpolator(Context context) {
479116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            return null;
4800fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        }
481c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu
482c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu        @Override
483c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu        public Object loadTransition(Context context, int resId) {
484c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu            return TransitionHelperKitkat.loadTransition(context, resId);
485c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu        }
48655c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    }
48755c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
48895400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    private static final class TransitionHelperApi21Impl extends TransitionHelperKitkatImpl {
48995400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
49095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
49195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getSharedElementEnterTransition(Window window) {
492116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            return TransitionHelperApi21.getSharedElementEnterTransition(window);
49395400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
49495400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
49595400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
49695400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getSharedElementReturnTransition(Window window) {
497116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            return TransitionHelperApi21.getSharedElementReturnTransition(window);
49895400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
49995400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
50095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
50195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getSharedElementExitTransition(Window window) {
502116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            return TransitionHelperApi21.getSharedElementExitTransition(window);
50395400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
50495400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
50595400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
50695400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getSharedElementReenterTransition(Window window) {
507116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            return TransitionHelperApi21.getSharedElementReenterTransition(window);
50895400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
50995400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
51095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
51195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getEnterTransition(Window window) {
512116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            return TransitionHelperApi21.getEnterTransition(window);
51395400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
51495400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
51595400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
51695400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getReturnTransition(Window window) {
517116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            return TransitionHelperApi21.getReturnTransition(window);
51895400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
51995400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
52095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
52195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getExitTransition(Window window) {
522116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            return TransitionHelperApi21.getExitTransition(window);
52395400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
52495400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
52595400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        @Override
52695400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        public Object getReenterTransition(Window window) {
527116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            return TransitionHelperApi21.getReenterTransition(window);
52895400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        }
5290fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
5300fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        @Override
5310fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        public Object createScale() {
532116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            return TransitionHelperApi21.createScale();
533116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu        }
534116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu
535116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu        @Override
536116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu        public Object createDefaultInterpolator(Context context) {
537116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu            return TransitionHelperApi21.createDefaultInterpolator(context);
5380fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        }
53995400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    }
54095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
54155c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    /**
54255c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout     * Returns the TransitionHelper that can be used to perform Transition
54355c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout     * animations.
54455c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout     */
545e34cae48707e70442aca13e1b4ab55757292828dDake Gu    public static TransitionHelper getInstance() {
546e34cae48707e70442aca13e1b4ab55757292828dDake Gu        return sHelper;
547e34cae48707e70442aca13e1b4ab55757292828dDake Gu    }
548e34cae48707e70442aca13e1b4ab55757292828dDake Gu
549e34cae48707e70442aca13e1b4ab55757292828dDake Gu    private TransitionHelper() {
550a52784195525cdb1f2bb4d8dde1b8b314f480957Chet Haase        if (Build.VERSION.SDK_INT >= 21) {
55195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu            mImpl = new TransitionHelperApi21Impl();
55295400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        } else  if (systemSupportsTransitions()) {
553e34cae48707e70442aca13e1b4ab55757292828dDake Gu            mImpl = new TransitionHelperKitkatImpl();
55455c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout        } else {
55555c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout            mImpl = new TransitionHelperStubImpl();
55655c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout        }
55755c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    }
55855c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
55995400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    public Object getSharedElementEnterTransition(Window window) {
56095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        return mImpl.getSharedElementEnterTransition(window);
56195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    }
56295400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
56395400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    public Object getSharedElementReturnTransition(Window window) {
56495400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        return mImpl.getSharedElementReturnTransition(window);
56595400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    }
56695400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
56795400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    public Object getSharedElementExitTransition(Window window) {
56895400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        return mImpl.getSharedElementExitTransition(window);
56995400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    }
57095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
57195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    public Object getSharedElementReenterTransition(Window window) {
57295400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        return mImpl.getSharedElementReenterTransition(window);
57395400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    }
57495400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
57595400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    public Object getEnterTransition(Window window) {
57695400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        return mImpl.getEnterTransition(window);
57795400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    }
57895400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
57995400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    public Object getReturnTransition(Window window) {
58095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        return mImpl.getReturnTransition(window);
58195400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    }
58295400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
58395400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    public Object getExitTransition(Window window) {
58495400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        return mImpl.getExitTransition(window);
58595400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    }
58695400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
58795400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    public Object getReenterTransition(Window window) {
58895400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu        return mImpl.getReenterTransition(window);
58995400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu    }
59095400e6d31a1ac09e48cb8944a79b7250484aa4cDake Gu
5919240e796bc63422c28f2707840bd99c48573279bDake Gu    public Object createScene(ViewGroup sceneRoot, Runnable r) {
5929240e796bc63422c28f2707840bd99c48573279bDake Gu        return mImpl.createScene(sceneRoot, r);
5939240e796bc63422c28f2707840bd99c48573279bDake Gu    }
5949240e796bc63422c28f2707840bd99c48573279bDake Gu
5953c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    public Object createChangeBounds(boolean reparent) {
5963c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        return mImpl.createChangeBounds(reparent);
5973c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
5983c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
5993c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    public void setChangeBoundsStartDelay(Object changeBounds, View view, int startDelay) {
6003c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        mImpl.setChangeBoundsStartDelay(changeBounds, view, startDelay);
6013c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
6023c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
6033c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    public void setChangeBoundsStartDelay(Object changeBounds, int viewId, int startDelay) {
6043c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        mImpl.setChangeBoundsStartDelay(changeBounds, viewId, startDelay);
6053c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
6063c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
6073c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    public void setChangeBoundsStartDelay(Object changeBounds, String className, int startDelay) {
6083c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        mImpl.setChangeBoundsStartDelay(changeBounds, className, startDelay);
6093c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
6103c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
6113c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    public void setChangeBoundsDefaultStartDelay(Object changeBounds, int startDelay) {
6123c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        mImpl.setChangeBoundsDefaultStartDelay(changeBounds, startDelay);
6133c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
6143c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
6153c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    public Object createTransitionSet(boolean sequential) {
6163c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        return mImpl.createTransitionSet(sequential);
6173c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
6183c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
6194735bfcd924fec2d694523f34fac5f8151257dc7Dake Gu    public Object createSlide(int slideEdge) {
6204735bfcd924fec2d694523f34fac5f8151257dc7Dake Gu        return mImpl.createSlide(slideEdge);
6212f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu    }
6222f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu
6230fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    public Object createScale() {
6240fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        return mImpl.createScale();
6250fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    }
6260fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
6273c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    public void addTransition(Object transitionSet, Object transition) {
6283c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        mImpl.addTransition(transitionSet, transition);
6293c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
6303c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
6313c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    public void exclude(Object transition, int targetId, boolean exclude) {
6323c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        mImpl.exclude(transition, targetId, exclude);
6333c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
6343c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
6353c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    public void exclude(Object transition, View targetView, boolean exclude) {
6363c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        mImpl.exclude(transition, targetView, exclude);
6373c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
6383c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
6399240e796bc63422c28f2707840bd99c48573279bDake Gu    public void excludeChildren(Object transition, int targetId, boolean exclude) {
6409240e796bc63422c28f2707840bd99c48573279bDake Gu        mImpl.excludeChildren(transition, targetId, exclude);
6419240e796bc63422c28f2707840bd99c48573279bDake Gu    }
6429240e796bc63422c28f2707840bd99c48573279bDake Gu
6439240e796bc63422c28f2707840bd99c48573279bDake Gu    public void excludeChildren(Object transition, View targetView, boolean exclude) {
6449240e796bc63422c28f2707840bd99c48573279bDake Gu        mImpl.excludeChildren(transition, targetView, exclude);
6459240e796bc63422c28f2707840bd99c48573279bDake Gu    }
6469240e796bc63422c28f2707840bd99c48573279bDake Gu
6473c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    public void include(Object transition, int targetId) {
6483c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        mImpl.include(transition, targetId);
6493c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
6503c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
6513c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    public void include(Object transition, View targetView) {
6523c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        mImpl.include(transition, targetView);
6533c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
6543c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
6552f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu    public void setStartDelay(Object transition, long startDelay) {
6562f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        mImpl.setStartDelay(transition, startDelay);
6572f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu    }
6582f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu
6592f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu    public void setDuration(Object transition, long duration) {
6602f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        mImpl.setDuration(transition, duration);
6612f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu    }
6622f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu
6639240e796bc63422c28f2707840bd99c48573279bDake Gu    public Object createAutoTransition() {
6649240e796bc63422c28f2707840bd99c48573279bDake Gu        return mImpl.createAutoTransition();
6659240e796bc63422c28f2707840bd99c48573279bDake Gu    }
6669240e796bc63422c28f2707840bd99c48573279bDake Gu
6673c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    public Object createFadeTransition(int fadeMode) {
6683c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu        return mImpl.createFadeTransition(fadeMode);
6693c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu    }
6703c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu
6712f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu    public void setTransitionListener(Object transition, TransitionListener listener) {
6722f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu        mImpl.setTransitionListener(transition, listener);
67355c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    }
67455c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout
6759240e796bc63422c28f2707840bd99c48573279bDake Gu    public void runTransition(Object scene, Object transition) {
6769240e796bc63422c28f2707840bd99c48573279bDake Gu        mImpl.runTransition(scene, transition);
67755c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout    }
6786f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout
6796f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout    public void setInterpolator(Object transition, Object timeInterpolator) {
6806f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout        mImpl.setInterpolator(transition, timeInterpolator);
6816f8c0cb076a103d044b18fc58117e37d2319d9ebCraig Stout    }
6820fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
6830fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    public void addTarget(Object transition, View view) {
6840fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        mImpl.addTarget(transition, view);
6850fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    }
686116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu
687116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    public Object createDefaultInterpolator(Context context) {
688116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu        return mImpl.createDefaultInterpolator(context);
689116c06a5bc40fd4d1753012582842ecc5cd06aecDake Gu    }
690c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu
691c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu    public Object loadTransition(Context context, int resId) {
692c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu        return mImpl.loadTransition(context, resId);
693c04ca1b14c5bf9ecac80fc53d3f28a5a7fdd4e77Dake Gu    }
69455c9ee4b612ffc7b4632b1e4b7b7ab4900cd47c7Craig Stout}
695