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