• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 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 package android.animation.cts;
17 
18 import java.util.Iterator;
19 import java.util.LinkedList;
20 import java.util.List;
21 
22 import com.android.cts.animation.R;
23 
24 import android.animation.Animator;
25 import android.animation.LayoutTransition;
26 import android.animation.LayoutTransition.TransitionListener;
27 import android.animation.ObjectAnimator;
28 import android.animation.PropertyValuesHolder;
29 import android.animation.TimeInterpolator;
30 import android.test.ActivityInstrumentationTestCase2;
31 import android.test.TouchUtils;
32 import android.view.View;
33 import android.view.ViewGroup;
34 import android.view.animation.AccelerateInterpolator;
35 import android.widget.Button;
36 import android.widget.LinearLayout;
37 
38 public class LayoutAnimationTest extends
39         ActivityInstrumentationTestCase2<LayoutAnimationActivity> {
40     private LayoutAnimationActivity mActivity;
41     private MyLayoutTransition mLayoutTransition;
42     private LinearLayout mView;
43     private Button mButton;
LayoutAnimationTest()44     public LayoutAnimationTest() {
45         super(LayoutAnimationActivity.class);
46     }
47 
setUp()48     public void setUp() throws Exception {
49         super.setUp();
50         setActivityInitialTouchMode(true);
51         mActivity = getActivity();
52         mView = (LinearLayout) mActivity.findViewById(R.id.container);
53         mButton = (Button)mActivity.findViewById(R.id.button1);
54         mLayoutTransition = new MyLayoutTransition();
55     }
56 
testAddTransitionListener()57     public void testAddTransitionListener() throws Throwable {
58         MyTransitionListener listener = new MyTransitionListener();
59         assertNull(mLayoutTransition.getTransitionListeners());
60         mLayoutTransition.addTransitionListener(listener);
61 
62         List<TransitionListener> layoutTransitionList = mLayoutTransition.getTransitionListeners();
63         TransitionListener actualListener = layoutTransitionList.get(0);
64         assertEquals(1, layoutTransitionList.size());
65         assertEquals(listener, actualListener);
66     }
67 
testIsRunning()68     public void testIsRunning() {
69         setDefaultTransition();
70         assertFalse(mLayoutTransition.isRunning());
71         TouchUtils.clickView(this, mButton);
72         assertTrue(mLayoutTransition.isRunning());
73     }
74 
testIsChangingLayout()75     public void testIsChangingLayout() {
76         long duration = 2000l;
77         mView.setLayoutTransition(mLayoutTransition);
78         mLayoutTransition.setDuration(duration);
79         mLayoutTransition.setInterpolator(LayoutTransition.CHANGE_APPEARING,
80                 new AccelerateInterpolator());
81 
82         assertFalse(mLayoutTransition.isChangingLayout());
83         TouchUtils.clickView(this, mButton);
84         assertTrue(mLayoutTransition.isChangingLayout());
85     }
86 
testSetDuration()87     public void testSetDuration() {
88         long duration = 1000l;
89         mLayoutTransition.setDuration(duration);
90 
91         assertEquals(duration, mLayoutTransition.getDuration(LayoutTransition.APPEARING));
92         assertEquals(duration, mLayoutTransition.getDuration(LayoutTransition.CHANGE_APPEARING));
93         assertEquals(duration,
94                      mLayoutTransition.getDuration(LayoutTransition.CHANGE_DISAPPEARING));
95         assertEquals(duration, mLayoutTransition.getDuration(LayoutTransition.DISAPPEARING));
96     }
97 
testSetDurationForTransitionType()98     public void testSetDurationForTransitionType() {
99         long duration = 1000l;
100         mLayoutTransition.setDuration(LayoutTransition.APPEARING, duration);
101         assertEquals(duration, mLayoutTransition.getDuration(LayoutTransition.APPEARING));
102     }
103 
testSetInterpolator()104     public void testSetInterpolator() {
105         TimeInterpolator interpolator = new AccelerateInterpolator();
106         mLayoutTransition.setInterpolator(LayoutTransition.APPEARING, interpolator);
107         assertEquals(interpolator, mLayoutTransition.getInterpolator(
108                 LayoutTransition.APPEARING));
109     }
110 
testSetAnimator()111     public void testSetAnimator() {
112         float startAlpha = 0.0f;
113         float endAlpha = 0.5f;
114         PropertyValuesHolder pvhAlpha = PropertyValuesHolder.ofFloat("alpha", startAlpha,
115                 endAlpha);
116         ObjectAnimator appearingAnimator =  (ObjectAnimator) ObjectAnimator.ofPropertyValuesHolder(
117                 (Object)null, pvhAlpha);
118         appearingAnimator.setInterpolator(new AccelerateInterpolator());
119         mLayoutTransition.setAnimator(LayoutTransition.APPEARING, appearingAnimator);
120         assertEquals(appearingAnimator, mLayoutTransition.getAnimator(LayoutTransition.APPEARING));
121     }
122 
testAnimationWithAnimator()123     public void testAnimationWithAnimator() throws Throwable {
124         MyTransitionListener listener = new MyTransitionListener();
125         mLayoutTransition.addTransitionListener(listener);
126         mLayoutTransition.setAnimateParentHierarchy(false);
127         long duration = 2000;
128         mView.setLayoutTransition(mLayoutTransition);
129         mLayoutTransition.setDuration(duration);
130         float startAlpha = 0.0f;
131         float endAlpha = 0.5f;
132         PropertyValuesHolder pvhAlpha = PropertyValuesHolder.ofFloat("alpha", startAlpha,
133                 endAlpha);
134         ObjectAnimator appearingAnimator =  (ObjectAnimator) ObjectAnimator.ofPropertyValuesHolder(
135                 (Object)null, pvhAlpha);
136         appearingAnimator.setInterpolator(new AccelerateInterpolator());
137 
138         mLayoutTransition.setAnimator(LayoutTransition.APPEARING, appearingAnimator);
139 
140         List<Float> alphaList = new LinkedList<Float>();
141         TouchUtils.clickView(this, mButton);
142         while(listener.mTransition) {
143             float alpha = mActivity.getLastButton().getAlpha();
144             alphaList.add(alpha);
145             Thread.sleep(200);
146         }
147         Iterator<Float> iterator = alphaList.iterator();
148         float lastValue = 0.0f;
149         while(iterator.hasNext()){
150             float alphaValue = iterator.next();
151             assertTrue(alphaValue >= lastValue);
152             assertTrue(alphaValue >= startAlpha);
153             assertTrue(alphaValue <= endAlpha);
154             lastValue = alphaValue;
155         }
156     }
157 
testStartDelay()158     public void testStartDelay() {
159         long delay = 100l;
160         int transitionType = LayoutTransition.APPEARING;
161         mLayoutTransition.setStartDelay(transitionType, delay);
162         assertEquals(delay, mLayoutTransition.getStartDelay(transitionType));
163     }
164 
testSetStagger()165     public void testSetStagger() {
166         long duration = 100;
167         int transitionType = LayoutTransition.CHANGE_APPEARING;
168         mLayoutTransition.setStagger(transitionType, duration);
169         assertEquals(duration, mLayoutTransition.getStagger(transitionType));
170     }
171 
setDefaultTransition()172     private void setDefaultTransition() {
173         long duration = 1000;
174         mView.setLayoutTransition(mLayoutTransition);
175         mLayoutTransition.setDuration(duration);
176         mLayoutTransition.setInterpolator(LayoutTransition.APPEARING,
177                 new AccelerateInterpolator());
178     }
179 
180     class MyTransitionListener implements LayoutTransition.TransitionListener {
181         ViewGroup mContainer;
182         View mView;
183         int mTransitionType;
184         boolean mTransition = false;
endTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType)185         public void endTransition(LayoutTransition transition,
186                 ViewGroup container, View view, int transitionType) {
187             this.mContainer = container;
188             this.mView = view;
189             this.mTransitionType = transitionType;
190             mTransition = false;
191         }
192 
startTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType)193         public void startTransition(LayoutTransition transition,
194                 ViewGroup container, View view, int transitionType) {
195             this.mContainer = container;
196             this.mView = view;
197             this.mTransitionType = transitionType;
198             mTransition = true;
199         }
200     }
201 
202     class MyLayoutTransition extends LayoutTransition {
203         boolean mAddChild = false;
204         boolean mHideChild = false;
205         boolean mRemoveChild = false;
206         boolean mShowChild = false;
207         boolean mSetAnimator = false;
208         boolean mRemoveListener = false;
209         boolean isChangingLayout = false;
210 
211         @Override
addChild(ViewGroup parent, View child)212         public void addChild(ViewGroup parent, View child) {
213             super.addChild(parent, child);
214             mAddChild = true;
215         }
216 
217         @Override
hideChild(ViewGroup parent, View child)218         public void hideChild(ViewGroup parent, View child) {
219             super.hideChild(parent, child);
220             mHideChild = true;
221         }
222 
223         @Override
isChangingLayout()224         public boolean isChangingLayout() {
225             return super.isChangingLayout();
226         }
227 
228         @Override
isRunning()229         public boolean isRunning() {
230             isChangingLayout =  true;
231             return super.isRunning();
232         }
233 
234         @Override
removeChild(ViewGroup parent, View child)235         public void removeChild(ViewGroup parent, View child) {
236             super.removeChild(parent, child);
237             mRemoveChild = true;
238         }
239 
240         @Override
removeTransitionListener(TransitionListener listener)241         public void removeTransitionListener(TransitionListener listener) {
242             super.removeTransitionListener(listener);
243             mRemoveListener = true;
244         }
245 
246         @Override
setAnimator(int transitionType, Animator animator)247         public void setAnimator(int transitionType, Animator animator) {
248             super.setAnimator(transitionType, animator);
249             mSetAnimator = true;
250         }
251 
252         @Override
showChild(ViewGroup parent, View child)253         public void showChild(ViewGroup parent, View child) {
254             super.showChild(parent, child);
255             mShowChild = true;
256         }
257     }
258 }
259 
260