blob: 538f46cdf6dccfe05caf5a77442831c6fe75cfa4 [file] [log] [blame]
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.transition.cts;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import android.support.test.filters.MediumTest;
import android.support.test.runner.AndroidJUnit4;
import android.transition.AutoTransition;
import android.transition.ChangeBounds;
import android.transition.ChangeClipBounds;
import android.transition.ChangeImageTransform;
import android.transition.ChangeScroll;
import android.transition.ChangeTransform;
import android.transition.Explode;
import android.transition.Fade;
import android.transition.Slide;
import android.transition.Transition;
import android.transition.TransitionManager;
import android.transition.TransitionSet;
import android.transition.TransitionValues;
import android.util.ArrayMap;
import org.junit.Test;
import org.junit.runner.RunWith;
@MediumTest
@RunWith(AndroidJUnit4.class)
public class CaptureValuesTest extends BaseTransitionTest {
private ArrayMap<Class<?>, Boolean> mStartCaptured = new ArrayMap<>();
private ArrayMap<Class<?>, Boolean> mEndCaptured = new ArrayMap<>();
/**
* Ensures captureValues is called on all Transitions and the proper values are captured.
*/
@Test
public void testCaptureValues() throws Throwable {
final TransitionSetCaptureValues set = new TransitionSetCaptureValues();
set.addTransition(new FadeCaptureValues());
set.addTransition(new ChangeBoundsCaptureValues());
set.addTransition(new ChangeImageTransformCaptureValues());
set.addTransition(new ChangeTransformCaptureValues());
set.addTransition(new AutoTransitionCaptureValues());
set.addTransition(new ChangeClipBoundsCaptureValues());
set.addTransition(new ChangeScrollCaptureValues());
set.addTransition(new ExplodeCaptureValues());
set.addTransition(new SlideCaptureValues());
enterScene(R.layout.scene11);
set.addTarget(mActivity.findViewById(R.id.redSquare));
mTransition = set;
resetListener();
mActivityRule.runOnUiThread(() -> {
TransitionManager.beginDelayedTransition(mSceneRoot, set);
mSceneRoot.invalidate();
});
waitForStart();
// no transition needs to run, but they should have all captured values.
for (int i = 0; i < set.getTransitionCount(); i++) {
Transition transition = set.getTransitionAt(i);
String className = transition.getClass().getSuperclass().getSimpleName().toString();
assertNotNull("captureStartValues not called for " + className,
mStartCaptured.get(transition.getClass()));
assertNotNull("captureEndValues not called for " + className,
mEndCaptured.get(transition.getClass()));
}
assertNotNull(mStartCaptured.get(set.getClass()));
assertNotNull(mEndCaptured.get(set.getClass()));
}
private void verifyCapturedValues(Transition transition, TransitionValues values,
boolean isStart) {
String[] properties = transition.getTransitionProperties();
if (transition instanceof TransitionSet) {
assertNull(properties);
} else {
String className = transition.getClass().getSuperclass().getSimpleName().toString();
assertNotNull(className + " should have non-null transition properties", properties);
assertTrue(properties.length > 0);
for (String property : properties) {
assertTrue(className + " should have written to property " + property,
values.values.keySet().contains(property));
}
}
if (isStart) {
mStartCaptured.put(transition.getClass(), true);
} else {
mEndCaptured.put(transition.getClass(), true);
}
}
public class FadeCaptureValues extends Fade {
@Override
public void captureStartValues(TransitionValues transitionValues) {
super.captureStartValues(transitionValues);
verifyCapturedValues(this, transitionValues, true);
}
@Override
public void captureEndValues(TransitionValues transitionValues) {
super.captureEndValues(transitionValues);
verifyCapturedValues(this, transitionValues, false);
}
}
public class ChangeBoundsCaptureValues extends ChangeBounds {
public ChangeBoundsCaptureValues() {
super();
setResizeClip(true);
setReparent(true);
}
@Override
public void captureStartValues(TransitionValues transitionValues) {
super.captureStartValues(transitionValues);
verifyCapturedValues(this, transitionValues, true);
}
@Override
public void captureEndValues(TransitionValues transitionValues) {
super.captureEndValues(transitionValues);
verifyCapturedValues(this, transitionValues, false);
}
}
public class ChangeImageTransformCaptureValues extends ChangeImageTransform {
@Override
public void captureStartValues(TransitionValues transitionValues) {
super.captureStartValues(transitionValues);
verifyCapturedValues(this, transitionValues, true);
}
@Override
public void captureEndValues(TransitionValues transitionValues) {
super.captureEndValues(transitionValues);
verifyCapturedValues(this, transitionValues, false);
}
}
public class ChangeTransformCaptureValues extends ChangeTransform {
@Override
public void captureStartValues(TransitionValues transitionValues) {
super.captureStartValues(transitionValues);
verifyCapturedValues(this, transitionValues, true);
}
@Override
public void captureEndValues(TransitionValues transitionValues) {
super.captureEndValues(transitionValues);
verifyCapturedValues(this, transitionValues, false);
}
}
public class AutoTransitionCaptureValues extends AutoTransition {
@Override
public void captureStartValues(TransitionValues transitionValues) {
super.captureStartValues(transitionValues);
verifyCapturedValues(this, transitionValues, true);
}
@Override
public void captureEndValues(TransitionValues transitionValues) {
super.captureEndValues(transitionValues);
verifyCapturedValues(this, transitionValues, false);
}
}
public class ChangeClipBoundsCaptureValues extends ChangeClipBounds {
@Override
public void captureStartValues(TransitionValues transitionValues) {
super.captureStartValues(transitionValues);
verifyCapturedValues(this, transitionValues, true);
}
@Override
public void captureEndValues(TransitionValues transitionValues) {
super.captureEndValues(transitionValues);
verifyCapturedValues(this, transitionValues, false);
}
}
public class ChangeScrollCaptureValues extends ChangeScroll {
@Override
public void captureStartValues(TransitionValues transitionValues) {
super.captureStartValues(transitionValues);
verifyCapturedValues(this, transitionValues, true);
}
@Override
public void captureEndValues(TransitionValues transitionValues) {
super.captureEndValues(transitionValues);
verifyCapturedValues(this, transitionValues, false);
}
}
public class ExplodeCaptureValues extends Explode {
@Override
public void captureStartValues(TransitionValues transitionValues) {
super.captureStartValues(transitionValues);
verifyCapturedValues(this, transitionValues, true);
}
@Override
public void captureEndValues(TransitionValues transitionValues) {
super.captureEndValues(transitionValues);
verifyCapturedValues(this, transitionValues, false);
}
}
public class SlideCaptureValues extends Slide {
@Override
public void captureStartValues(TransitionValues transitionValues) {
super.captureStartValues(transitionValues);
verifyCapturedValues(this, transitionValues, true);
}
@Override
public void captureEndValues(TransitionValues transitionValues) {
super.captureEndValues(transitionValues);
verifyCapturedValues(this, transitionValues, false);
}
}
public class TransitionSetCaptureValues extends TransitionSet {
@Override
public void captureStartValues(TransitionValues transitionValues) {
super.captureStartValues(transitionValues);
verifyCapturedValues(this, transitionValues, true);
}
@Override
public void captureEndValues(TransitionValues transitionValues) {
super.captureEndValues(transitionValues);
verifyCapturedValues(this, transitionValues, false);
}
}
}