1 /* 2 * Copyright (C) 2016 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.transition.cts; 17 18 import static org.junit.Assert.assertEquals; 19 import static org.junit.Assert.assertFalse; 20 import static org.junit.Assert.assertNotNull; 21 import static org.junit.Assert.assertTrue; 22 import static org.junit.Assert.fail; 23 24 import android.content.Context; 25 import android.graphics.Path; 26 import android.graphics.PathMeasure; 27 import android.support.test.filters.MediumTest; 28 import android.support.test.runner.AndroidJUnit4; 29 import android.transition.ArcMotion; 30 import android.transition.AutoTransition; 31 import android.transition.ChangeBounds; 32 import android.transition.ChangeClipBounds; 33 import android.transition.ChangeImageTransform; 34 import android.transition.ChangeScroll; 35 import android.transition.ChangeTransform; 36 import android.transition.Explode; 37 import android.transition.Fade; 38 import android.transition.PathMotion; 39 import android.transition.PatternPathMotion; 40 import android.transition.Scene; 41 import android.transition.Slide; 42 import android.transition.Transition; 43 import android.transition.TransitionInflater; 44 import android.transition.TransitionManager; 45 import android.transition.TransitionSet; 46 import android.transition.TransitionValues; 47 import android.transition.Visibility; 48 import android.util.AttributeSet; 49 import android.view.Gravity; 50 import android.widget.ImageView; 51 import android.widget.TextView; 52 53 import org.junit.Test; 54 import org.junit.runner.RunWith; 55 56 import java.util.List; 57 58 @MediumTest 59 @RunWith(AndroidJUnit4.class) 60 public class TransitionInflaterTest extends BaseTransitionTest { 61 @Test 62 public void testInflationConstructors() throws Throwable { 63 TransitionInflater inflater = TransitionInflater.from(mActivity); 64 Transition transition = inflater.inflateTransition(R.transition.transition_constructors); 65 assertTrue(transition instanceof TransitionSet); 66 TransitionSet set = (TransitionSet) transition; 67 assertEquals(10, set.getTransitionCount()); 68 } 69 70 @Test 71 public void testInflation() { 72 TransitionInflater inflater = TransitionInflater.from(mActivity); 73 verifyFadeProperties(inflater.inflateTransition(R.transition.fade)); 74 verifyChangeBoundsProperties(inflater.inflateTransition(R.transition.change_bounds)); 75 verifySlideProperties(inflater.inflateTransition(R.transition.slide)); 76 verifyExplodeProperties(inflater.inflateTransition(R.transition.explode)); 77 verifyChangeImageTransformProperties( 78 inflater.inflateTransition(R.transition.change_image_transform)); 79 verifyChangeTransformProperties(inflater.inflateTransition(R.transition.change_transform)); 80 verifyChangeClipBoundsProperties( 81 inflater.inflateTransition(R.transition.change_clip_bounds)); 82 verifyAutoTransitionProperties(inflater.inflateTransition(R.transition.auto_transition)); 83 verifyChangeScrollProperties(inflater.inflateTransition(R.transition.change_scroll)); 84 verifyTransitionSetProperties(inflater.inflateTransition(R.transition.transition_set)); 85 verifyCustomTransitionProperties( 86 inflater.inflateTransition(R.transition.custom_transition)); 87 verifyTargetIds(inflater.inflateTransition(R.transition.target_ids)); 88 verifyTargetNames(inflater.inflateTransition(R.transition.target_names)); 89 verifyTargetClass(inflater.inflateTransition(R.transition.target_classes)); 90 verifyArcMotion(inflater.inflateTransition(R.transition.arc_motion)); 91 verifyCustomPathMotion(inflater.inflateTransition(R.transition.custom_path_motion)); 92 verifyPatternPathMotion(inflater.inflateTransition(R.transition.pattern_path_motion)); 93 } 94 95 @Test 96 public void testInflateTransitionManager() throws Throwable { 97 TransitionInflater inflater = TransitionInflater.from(mActivity); 98 TransitionManager transitionManager = 99 inflater.inflateTransitionManager(R.transition.transition_manager, mSceneRoot); 100 assertNotNull(transitionManager); 101 102 Scene scene1 = Scene.getSceneForLayout(mSceneRoot, R.layout.scene1, mActivity); 103 Transition transition = transitionManager.getTransition(scene1); 104 assertNotNull(transition); 105 assertTrue(transition instanceof Fade); 106 enterScene(scene1); 107 108 Scene scene2 = Scene.getSceneForLayout(mSceneRoot, R.layout.scene2, mActivity); 109 transition = transitionManager.getTransition(scene2); 110 assertNotNull(transition); 111 assertTrue(transition instanceof ChangeBounds); 112 } 113 114 private void verifyFadeProperties(Transition transition) { 115 assertTrue(transition instanceof Fade); 116 Fade fade = (Fade) transition; 117 assertEquals(Fade.OUT, fade.getMode()); 118 } 119 120 private void verifyChangeBoundsProperties(Transition transition) { 121 assertTrue(transition instanceof ChangeBounds); 122 ChangeBounds changeBounds = (ChangeBounds) transition; 123 assertTrue(changeBounds.getResizeClip()); 124 } 125 126 private void verifySlideProperties(Transition transition) { 127 assertTrue(transition instanceof Slide); 128 Slide slide = (Slide) transition; 129 assertEquals(Gravity.TOP, slide.getSlideEdge()); 130 } 131 132 private void verifyExplodeProperties(Transition transition) { 133 assertTrue(transition instanceof Explode); 134 Visibility visibility = (Visibility) transition; 135 assertEquals(Visibility.MODE_IN, visibility.getMode()); 136 } 137 138 private void verifyChangeImageTransformProperties(Transition transition) { 139 assertTrue(transition instanceof ChangeImageTransform); 140 } 141 142 private void verifyChangeTransformProperties(Transition transition) { 143 assertTrue(transition instanceof ChangeTransform); 144 ChangeTransform changeTransform = (ChangeTransform) transition; 145 assertFalse(changeTransform.getReparent()); 146 assertFalse(changeTransform.getReparentWithOverlay()); 147 } 148 149 private void verifyChangeClipBoundsProperties(Transition transition) { 150 assertTrue(transition instanceof ChangeClipBounds); 151 } 152 153 private void verifyAutoTransitionProperties(Transition transition) { 154 assertTrue(transition instanceof AutoTransition); 155 } 156 157 private void verifyChangeScrollProperties(Transition transition) { 158 assertTrue(transition instanceof ChangeScroll); 159 } 160 161 private void verifyTransitionSetProperties(Transition transition) { 162 assertTrue(transition instanceof TransitionSet); 163 TransitionSet set = (TransitionSet) transition; 164 assertEquals(TransitionSet.ORDERING_SEQUENTIAL, set.getOrdering()); 165 assertEquals(2, set.getTransitionCount()); 166 assertTrue(set.getTransitionAt(0) instanceof ChangeBounds); 167 assertTrue(set.getTransitionAt(1) instanceof Fade); 168 } 169 170 private void verifyCustomTransitionProperties(Transition transition) { 171 assertTrue(transition instanceof CustomTransition); 172 } 173 174 private void verifyTargetIds(Transition transition) { 175 List<Integer> targets = transition.getTargetIds(); 176 assertNotNull(targets); 177 assertEquals(2, targets.size()); 178 assertEquals(R.id.hello, (int) targets.get(0)); 179 assertEquals(R.id.world, (int) targets.get(1)); 180 } 181 182 private void verifyTargetNames(Transition transition) { 183 List<String> targets = transition.getTargetNames(); 184 assertNotNull(targets); 185 assertEquals(2, targets.size()); 186 assertEquals("hello", targets.get(0)); 187 assertEquals("world", targets.get(1)); 188 } 189 190 private void verifyTargetClass(Transition transition) { 191 List<Class> targets = transition.getTargetTypes(); 192 assertNotNull(targets); 193 assertEquals(2, targets.size()); 194 assertEquals(TextView.class, targets.get(0)); 195 assertEquals(ImageView.class, targets.get(1)); 196 } 197 198 private void verifyArcMotion(Transition transition) { 199 assertNotNull(transition); 200 PathMotion motion = transition.getPathMotion(); 201 assertNotNull(motion); 202 assertTrue(motion instanceof ArcMotion); 203 ArcMotion arcMotion = (ArcMotion) motion; 204 assertEquals(1f, arcMotion.getMinimumVerticalAngle(), 0.01f); 205 assertEquals(2f, arcMotion.getMinimumHorizontalAngle(), 0.01f); 206 assertEquals(53f, arcMotion.getMaximumAngle(), 0.01f); 207 } 208 209 private void verifyCustomPathMotion(Transition transition) { 210 assertNotNull(transition); 211 PathMotion motion = transition.getPathMotion(); 212 assertNotNull(motion); 213 assertTrue(motion instanceof CustomPathMotion); 214 } 215 216 private void verifyPatternPathMotion(Transition transition) { 217 assertNotNull(transition); 218 PathMotion motion = transition.getPathMotion(); 219 assertNotNull(motion); 220 assertTrue(motion instanceof PatternPathMotion); 221 PatternPathMotion pattern = (PatternPathMotion) motion; 222 Path path = pattern.getPatternPath(); 223 PathMeasure measure = new PathMeasure(path, false); 224 assertEquals(200f, measure.getLength(), 0.1f); 225 } 226 227 public static class CustomTransition extends Transition { 228 public CustomTransition() { 229 fail("Default constructor was not expected"); 230 } 231 232 public CustomTransition(Context context, AttributeSet attrs) { 233 super(context, attrs); 234 } 235 236 @Override 237 public void captureStartValues(TransitionValues transitionValues) { 238 } 239 240 @Override 241 public void captureEndValues(TransitionValues transitionValues) { 242 } 243 } 244 245 public static class CustomPathMotion extends PathMotion { 246 public CustomPathMotion() { 247 fail("default constructor shouldn't be called."); 248 } 249 250 public CustomPathMotion(Context context, AttributeSet attrs) { 251 super(context, attrs); 252 } 253 254 @Override 255 public Path getPath(float startX, float startY, float endX, float endY) { 256 return null; 257 } 258 } 259 260 public static class InflationFade extends Fade { 261 public InflationFade(Context context, AttributeSet attrs) { 262 super(context, attrs); 263 } 264 } 265 266 public static class InflationChangeBounds extends ChangeBounds { 267 public InflationChangeBounds(Context context, AttributeSet attrs) { 268 super(context, attrs); 269 } 270 } 271 272 public static class InflationSlide extends Slide { 273 public InflationSlide(Context context, AttributeSet attrs) { 274 super(context, attrs); 275 } 276 } 277 278 public static class InflationTransitionSet extends TransitionSet { 279 public InflationTransitionSet(Context context, AttributeSet attrs) { 280 super(context, attrs); 281 } 282 } 283 284 public static class InflationChangeImageTransform extends ChangeImageTransform { 285 public InflationChangeImageTransform(Context context, AttributeSet attrs) { 286 super(context, attrs); 287 } 288 } 289 290 public static class InflationChangeTransform extends ChangeTransform { 291 public InflationChangeTransform(Context context, AttributeSet attrs) { 292 super(context, attrs); 293 } 294 } 295 296 public static class InflationAutoTransition extends AutoTransition { 297 public InflationAutoTransition(Context context, AttributeSet attrs) { 298 super(context, attrs); 299 } 300 } 301 302 public static class InflationChangeClipBounds extends ChangeClipBounds { 303 public InflationChangeClipBounds(Context context, AttributeSet attrs) { 304 super(context, attrs); 305 } 306 } 307 308 public static class InflationChangeScroll extends ChangeScroll { 309 public InflationChangeScroll(Context context, AttributeSet attrs) { 310 super(context, attrs); 311 } 312 } 313 314 public static class InflationExplode extends Explode { 315 public InflationExplode(Context context, AttributeSet attrs) { 316 super(context, attrs); 317 } 318 } 319 } 320