1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5 * in compliance with the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the License
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11 * or implied. See the License for the specific language governing permissions and limitations under
12 * the License.
13 */
14package android.support.v17.leanback.transition;
15
16import android.R;
17import android.content.Context;
18import android.graphics.Rect;
19import android.support.annotation.RequiresApi;
20import android.transition.ChangeTransform;
21import android.transition.Transition;
22import android.transition.TransitionManager;
23import android.view.View;
24import android.view.ViewGroup;
25import android.view.Window;
26import android.view.animation.AnimationUtils;
27
28@RequiresApi(21)
29final class TransitionHelperApi21 {
30
31    TransitionHelperApi21() {
32    }
33
34    public static void setEnterTransition(android.app.Fragment fragment, Object transition) {
35        fragment.setEnterTransition((Transition)transition);
36    }
37
38    public static void setExitTransition(android.app.Fragment fragment, Object transition) {
39       fragment.setExitTransition((Transition)transition);
40    }
41
42    public static void setSharedElementEnterTransition(android.app.Fragment fragment,
43            Object transition) {
44        fragment.setSharedElementEnterTransition((Transition)transition);
45     }
46
47    public static void addSharedElement(android.app.FragmentTransaction ft,
48            View view, String transitionName) {
49        ft.addSharedElement(view, transitionName);
50    }
51
52    public static Object getSharedElementEnterTransition(Window window) {
53        return window.getSharedElementEnterTransition();
54    }
55
56    public static void setSharedElementEnterTransition(Window window, Object transition) {
57        window.setSharedElementEnterTransition((Transition) transition);
58    }
59
60    public static Object getSharedElementReturnTransition(Window window) {
61        return window.getSharedElementReturnTransition();
62    }
63
64    public static void setSharedElementReturnTransition(Window window, Object transition) {
65        window.setSharedElementReturnTransition((Transition) transition);
66    }
67
68    public static Object getSharedElementExitTransition(Window window) {
69        return window.getSharedElementExitTransition();
70    }
71
72    public static Object getSharedElementReenterTransition(Window window) {
73        return window.getSharedElementReenterTransition();
74    }
75
76    public static Object getEnterTransition(Window window) {
77        return window.getEnterTransition();
78    }
79
80    public static void setEnterTransition(Window window, Object transition) {
81        window.setEnterTransition((Transition) transition);
82    }
83
84    public static Object getReturnTransition(Window window) {
85        return window.getReturnTransition();
86    }
87
88    public static void setReturnTransition(Window window, Object transition) {
89        window.setReturnTransition((Transition) transition);
90    }
91
92    public static Object getExitTransition(Window window) {
93        return window.getExitTransition();
94    }
95
96    public static Object getReenterTransition(Window window) {
97        return window.getReenterTransition();
98    }
99
100    public static Object createScale() {
101        return new ChangeTransform();
102    }
103
104    public static Object createDefaultInterpolator(Context context) {
105        return AnimationUtils.loadInterpolator(context, R.interpolator.fast_out_linear_in);
106    }
107
108    public static Object createChangeTransform() {
109        return new ChangeTransform();
110    }
111
112    public static Object createFadeAndShortSlide(int edge) {
113        return new FadeAndShortSlide(edge);
114    }
115
116    public static Object createFadeAndShortSlide(int edge, float distance) {
117        FadeAndShortSlide slide = new FadeAndShortSlide(edge);
118        slide.setDistance(distance);
119        return slide;
120    }
121
122    public static void beginDelayedTransition(ViewGroup sceneRoot, Object transitionObject) {
123        Transition transition = (Transition) transitionObject;
124        TransitionManager.beginDelayedTransition(sceneRoot, transition);
125    }
126
127    public static void setTransitionGroup(ViewGroup viewGroup, boolean transitionGroup) {
128        viewGroup.setTransitionGroup(transitionGroup);
129    }
130
131    public static void setEpicenterCallback(Object transitionObject,
132            final TransitionEpicenterCallback callback) {
133        Transition transition = (Transition) transitionObject;
134        if (callback == null) {
135            transition.setEpicenterCallback(null);
136        } else {
137            transition.setEpicenterCallback(new Transition.EpicenterCallback() {
138                @Override
139                public Rect onGetEpicenter(Transition transition) {
140                    return callback.onGetEpicenter(transition);
141                }
142            });
143        }
144    }
145}
146