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