• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.app.stubs;
18 
19 import android.app.Activity;
20 import android.app.Fragment;
21 import android.content.Context;
22 import android.os.Bundle;
23 import android.transition.Transition;
24 import android.transition.Transition.TransitionListener;
25 import android.transition.TransitionInflater;
26 import android.view.LayoutInflater;
27 import android.view.View;
28 import android.view.ViewGroup;
29 import android.view.WindowManager;
30 
31 /**
32  * A simple activity used for Fragment Transitions
33  */
34 public class FragmentTestActivity extends Activity {
35     @Override
onCreate(Bundle icicle)36     public void onCreate(Bundle icicle) {
37         super.onCreate(icicle);
38         setContentView(R.layout.activity_content);
39         // Work around problems running while on lock screen
40         getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
41                 WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
42                 WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
43     }
44 
45     public static class TestFragment extends Fragment {
46         public static final int ENTER = 0;
47         public static final int RETURN = 1;
48         public static final int EXIT = 2;
49         public static final int REENTER = 3;
50         public static final int SHARED_ELEMENT_ENTER = 4;
51         public static final int SHARED_ELEMENT_RETURN = 5;
52         private static final int TRANSITION_COUNT = 6;
53 
54         private static final String LAYOUT_ID = "layoutId";
55         private static final String TRANSITION_KEY = "transition_";
56         private int mLayoutId = R.layout.fragment_start;
57         private final int[] mTransitionIds = new int[] {
58                 android.R.transition.explode,
59                 android.R.transition.explode,
60                 android.R.transition.fade,
61                 android.R.transition.fade,
62                 android.R.transition.move,
63                 android.R.transition.move,
64         };
65         private final TransitionCalledListener[] mListeners =
66                 new TransitionCalledListener[TRANSITION_COUNT];
67         private OnTransitionListener mOnTransitionListener;
68 
TestFragment()69         public TestFragment() {
70             for (int i = 0; i < TRANSITION_COUNT; i++) {
71                 mListeners[i] = new TransitionCalledListener();
72             }
73         }
74 
TestFragment(int layoutId)75         public TestFragment(int layoutId) {
76             this();
77             mLayoutId = layoutId;
78         }
79 
clearTransitions()80         public void clearTransitions() {
81             for (int i = 0; i < TRANSITION_COUNT; i++) {
82                 mTransitionIds[i] = 0;
83             }
84         }
85 
clearNotifications()86         public void clearNotifications() {
87             for (int i = 0; i < TRANSITION_COUNT; i++) {
88                 mListeners[i].transitionStarted = false;
89                 mListeners[i].transitionEnded = false;
90             }
91         }
92 
93         @Override
onCreate(Bundle savedInstanceState)94         public void onCreate(Bundle savedInstanceState) {
95             super.onCreate(savedInstanceState);
96             if (savedInstanceState != null) {
97                 mLayoutId = savedInstanceState.getInt(LAYOUT_ID, mLayoutId);
98                 for (int i = 0; i < TRANSITION_COUNT; i++) {
99                     String key = TRANSITION_KEY + i;
100                     mTransitionIds[i] = savedInstanceState.getInt(key, mTransitionIds[i]);
101                 }
102             }
103         }
104 
105         @Override
onSaveInstanceState(Bundle outState)106         public void onSaveInstanceState(Bundle outState) {
107             super.onSaveInstanceState(outState);
108             outState.putInt(LAYOUT_ID, mLayoutId);
109             for (int i = 0; i < TRANSITION_COUNT; i++) {
110                 String key = TRANSITION_KEY + i;
111                 outState.putInt(key, mTransitionIds[i]);
112             }
113         }
114 
115         @Override
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)116         public View onCreateView(LayoutInflater inflater, ViewGroup container,
117                 Bundle savedInstanceState) {
118             return inflater.inflate(mLayoutId, container, false);
119         }
120 
121         @Override
onAttach(Context context)122         public void onAttach(Context context) {
123             super.onAttach(context);
124             setEnterTransition(loadTransition(ENTER));
125             setReenterTransition(loadTransition(REENTER));
126             setExitTransition(loadTransition(EXIT));
127             setReturnTransition(loadTransition(RETURN));
128             setSharedElementEnterTransition(loadTransition(SHARED_ELEMENT_ENTER));
129             setSharedElementReturnTransition(loadTransition(SHARED_ELEMENT_RETURN));
130         }
131 
setOnTransitionListener(OnTransitionListener listener)132         public void setOnTransitionListener(OnTransitionListener listener) {
133             mOnTransitionListener = listener;
134         }
135 
wasStartCalled(int transitionKey)136         public boolean wasStartCalled(int transitionKey) {
137             return mListeners[transitionKey].transitionStarted;
138         }
139 
wasEndCalled(int transitionKey)140         public boolean wasEndCalled(int transitionKey) {
141             return mListeners[transitionKey].transitionEnded;
142         }
143 
loadTransition(int key)144         private Transition loadTransition(int key) {
145             final int id = mTransitionIds[key];
146             if (id == 0) {
147                 return null;
148             }
149             Transition transition = TransitionInflater.from(getActivity()).inflateTransition(id);
150             transition.addListener(mListeners[key]);
151             return transition;
152         }
153 
notifyTransition()154         private void notifyTransition() {
155             if (mOnTransitionListener != null) {
156                 mOnTransitionListener.onTransition(this);
157             }
158         }
159 
160         private class TransitionCalledListener implements TransitionListener {
161             public boolean transitionStarted;
162             public boolean transitionEnded;
163 
TransitionCalledListener()164             public TransitionCalledListener() {
165             }
166 
167             @Override
onTransitionStart(Transition transition)168             public void onTransitionStart(Transition transition) {
169                 transitionStarted = true;
170                 notifyTransition();
171             }
172 
173             @Override
onTransitionEnd(Transition transition)174             public void onTransitionEnd(Transition transition) {
175                 transitionEnded = true;
176                 notifyTransition();
177             }
178 
179             @Override
onTransitionCancel(Transition transition)180             public void onTransitionCancel(Transition transition) {
181             }
182 
183             @Override
onTransitionPause(Transition transition)184             public void onTransitionPause(Transition transition) {
185             }
186 
187             @Override
onTransitionResume(Transition transition)188             public void onTransitionResume(Transition transition) {
189             }
190         }
191     }
192 
193     public interface OnTransitionListener {
onTransition(TestFragment fragment)194         void onTransition(TestFragment fragment);
195     }
196 
197 }
198