1bf7c3b4fa6d971201ab3fce162611639b857b810George Mount/* 2bf7c3b4fa6d971201ab3fce162611639b857b810George Mount * Copyright (C) 2016 The Android Open Source Project 3bf7c3b4fa6d971201ab3fce162611639b857b810George Mount * 4bf7c3b4fa6d971201ab3fce162611639b857b810George Mount * Licensed under the Apache License, Version 2.0 (the "License"); 5bf7c3b4fa6d971201ab3fce162611639b857b810George Mount * you may not use this file except in compliance with the License. 6bf7c3b4fa6d971201ab3fce162611639b857b810George Mount * You may obtain a copy of the License at 7bf7c3b4fa6d971201ab3fce162611639b857b810George Mount * 8bf7c3b4fa6d971201ab3fce162611639b857b810George Mount * http://www.apache.org/licenses/LICENSE-2.0 9bf7c3b4fa6d971201ab3fce162611639b857b810George Mount * 10bf7c3b4fa6d971201ab3fce162611639b857b810George Mount * Unless required by applicable law or agreed to in writing, software 11bf7c3b4fa6d971201ab3fce162611639b857b810George Mount * distributed under the License is distributed on an "AS IS" BASIS, 12bf7c3b4fa6d971201ab3fce162611639b857b810George Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bf7c3b4fa6d971201ab3fce162611639b857b810George Mount * See the License for the specific language governing permissions and 14bf7c3b4fa6d971201ab3fce162611639b857b810George Mount * limitations under the License. 15bf7c3b4fa6d971201ab3fce162611639b857b810George Mount */ 16bf7c3b4fa6d971201ab3fce162611639b857b810George Mount 17bf7c3b4fa6d971201ab3fce162611639b857b810George Mountpackage android.transition; 18bf7c3b4fa6d971201ab3fce162611639b857b810George Mount 19bf7c3b4fa6d971201ab3fce162611639b857b810George Mountimport android.animation.AnimatorSetActivity; 20bf7c3b4fa6d971201ab3fce162611639b857b810George Mountimport android.app.Activity; 21bf7c3b4fa6d971201ab3fce162611639b857b810George Mountimport android.graphics.Rect; 22bdbde55592792efe350acd6a46733f439f6a3f3dAurimas Liutikasimport android.support.test.filters.LargeTest; 23bf7c3b4fa6d971201ab3fce162611639b857b810George Mountimport android.test.ActivityInstrumentationTestCase2; 24bf7c3b4fa6d971201ab3fce162611639b857b810George Mountimport android.transition.Transition.EpicenterCallback; 25bf7c3b4fa6d971201ab3fce162611639b857b810George Mountimport android.util.ArrayMap; 26bf7c3b4fa6d971201ab3fce162611639b857b810George Mountimport android.view.View; 27bf7c3b4fa6d971201ab3fce162611639b857b810George Mountimport android.view.animation.AccelerateInterpolator; 28bf7c3b4fa6d971201ab3fce162611639b857b810George Mountimport android.widget.TextView; 29bf7c3b4fa6d971201ab3fce162611639b857b810George Mount 30bf7c3b4fa6d971201ab3fce162611639b857b810George Mountimport com.android.frameworks.coretests.R; 31bf7c3b4fa6d971201ab3fce162611639b857b810George Mount 323f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mountimport java.lang.reflect.Field; 333f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount 34bdbde55592792efe350acd6a46733f439f6a3f3dAurimas Liutikas@LargeTest 35bf7c3b4fa6d971201ab3fce162611639b857b810George Mountpublic class TransitionTest extends ActivityInstrumentationTestCase2<AnimatorSetActivity> { 36bf7c3b4fa6d971201ab3fce162611639b857b810George Mount Activity mActivity; 37bf7c3b4fa6d971201ab3fce162611639b857b810George Mount public TransitionTest() { 38bf7c3b4fa6d971201ab3fce162611639b857b810George Mount super(AnimatorSetActivity.class); 39bf7c3b4fa6d971201ab3fce162611639b857b810George Mount } 40bf7c3b4fa6d971201ab3fce162611639b857b810George Mount 41bf7c3b4fa6d971201ab3fce162611639b857b810George Mount @Override 42bf7c3b4fa6d971201ab3fce162611639b857b810George Mount protected void setUp() throws Exception { 43bf7c3b4fa6d971201ab3fce162611639b857b810George Mount mActivity = getActivity(); 44bf7c3b4fa6d971201ab3fce162611639b857b810George Mount } 45bf7c3b4fa6d971201ab3fce162611639b857b810George Mount 46bf7c3b4fa6d971201ab3fce162611639b857b810George Mount public void testClone() throws Throwable { 47bf7c3b4fa6d971201ab3fce162611639b857b810George Mount View square1 = mActivity.findViewById(R.id.square1); 48bf7c3b4fa6d971201ab3fce162611639b857b810George Mount View square2 = mActivity.findViewById(R.id.square2); 49bf7c3b4fa6d971201ab3fce162611639b857b810George Mount View square3 = mActivity.findViewById(R.id.square3); 50bf7c3b4fa6d971201ab3fce162611639b857b810George Mount Fade fade = new Fade(); 51bf7c3b4fa6d971201ab3fce162611639b857b810George Mount fade.setStartDelay(1000); 52bf7c3b4fa6d971201ab3fce162611639b857b810George Mount fade.setDuration(1001); 53bf7c3b4fa6d971201ab3fce162611639b857b810George Mount 54bf7c3b4fa6d971201ab3fce162611639b857b810George Mount fade.addTarget(square1); 55bf7c3b4fa6d971201ab3fce162611639b857b810George Mount fade.excludeTarget(square2, true); 56bf7c3b4fa6d971201ab3fce162611639b857b810George Mount fade.excludeChildren(square3, true); 57bf7c3b4fa6d971201ab3fce162611639b857b810George Mount 58bf7c3b4fa6d971201ab3fce162611639b857b810George Mount fade.addTarget(R.id.square4); 59bf7c3b4fa6d971201ab3fce162611639b857b810George Mount fade.excludeTarget(R.id.square3, true); 60bf7c3b4fa6d971201ab3fce162611639b857b810George Mount fade.excludeChildren(R.id.square2, true); 61bf7c3b4fa6d971201ab3fce162611639b857b810George Mount 62bf7c3b4fa6d971201ab3fce162611639b857b810George Mount fade.addTarget("hello"); 63bf7c3b4fa6d971201ab3fce162611639b857b810George Mount fade.excludeTarget("world", true); 64bf7c3b4fa6d971201ab3fce162611639b857b810George Mount 65bf7c3b4fa6d971201ab3fce162611639b857b810George Mount fade.addTarget(View.class); 66bf7c3b4fa6d971201ab3fce162611639b857b810George Mount fade.excludeTarget(TextView.class, true); 67bf7c3b4fa6d971201ab3fce162611639b857b810George Mount 68bf7c3b4fa6d971201ab3fce162611639b857b810George Mount fade.setMatchOrder(Transition.MATCH_ID); 69bf7c3b4fa6d971201ab3fce162611639b857b810George Mount fade.setPropagation(new CircularPropagation()); 70bf7c3b4fa6d971201ab3fce162611639b857b810George Mount fade.setPathMotion(new ArcMotion()); 71bf7c3b4fa6d971201ab3fce162611639b857b810George Mount fade.setInterpolator(new AccelerateInterpolator()); 72bf7c3b4fa6d971201ab3fce162611639b857b810George Mount fade.setNameOverrides(new ArrayMap<>()); 73bf7c3b4fa6d971201ab3fce162611639b857b810George Mount 74bf7c3b4fa6d971201ab3fce162611639b857b810George Mount EpicenterCallback epicenterCallback = new EpicenterCallback() { 75bf7c3b4fa6d971201ab3fce162611639b857b810George Mount @Override 76bf7c3b4fa6d971201ab3fce162611639b857b810George Mount public Rect onGetEpicenter(Transition transition) { 77bf7c3b4fa6d971201ab3fce162611639b857b810George Mount return null; 78bf7c3b4fa6d971201ab3fce162611639b857b810George Mount } 79bf7c3b4fa6d971201ab3fce162611639b857b810George Mount }; 80bf7c3b4fa6d971201ab3fce162611639b857b810George Mount 81bf7c3b4fa6d971201ab3fce162611639b857b810George Mount fade.setEpicenterCallback(epicenterCallback); 82bf7c3b4fa6d971201ab3fce162611639b857b810George Mount 83bf7c3b4fa6d971201ab3fce162611639b857b810George Mount Fade clone = (Fade) fade.clone(); 843f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount assertFieldEquals(fade, clone, "mStartDelay"); 853f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount assertFieldEquals(fade, clone, "mDuration"); 863f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount assertFieldEquals(fade, clone, "mInterpolator"); 873f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount assertFieldEquals(fade, clone, "mPropagation"); 88bf7c3b4fa6d971201ab3fce162611639b857b810George Mount assertEquals(fade.getPathMotion(), clone.getPathMotion()); 89bf7c3b4fa6d971201ab3fce162611639b857b810George Mount assertEquals(fade.getEpicenterCallback(), clone.getEpicenterCallback()); 903f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount assertFieldEquals(fade, clone, "mNameOverrides"); 913f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount assertFieldEquals(fade, clone, "mMatchOrder"); 923f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount 933f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount assertFieldEquals(fade, clone, "mTargets"); 943f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount assertFieldEquals(fade, clone, "mTargetExcludes"); 953f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount assertFieldEquals(fade, clone, "mTargetChildExcludes"); 963f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount 973f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount assertFieldEquals(fade, clone, "mTargetIds"); 983f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount assertFieldEquals(fade, clone, "mTargetIdExcludes"); 993f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount assertFieldEquals(fade, clone, "mTargetIdChildExcludes"); 100bf7c3b4fa6d971201ab3fce162611639b857b810George Mount 1013f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount assertFieldEquals(fade, clone, "mTargetNames"); 1023f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount assertFieldEquals(fade, clone, "mTargetNameExcludes"); 103bf7c3b4fa6d971201ab3fce162611639b857b810George Mount 1043f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount assertFieldEquals(fade, clone, "mTargetTypes"); 1053f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount assertFieldEquals(fade, clone, "mTargetTypeExcludes"); 1063f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount } 107bf7c3b4fa6d971201ab3fce162611639b857b810George Mount 1083f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount private static void assertFieldEquals(Fade fade1, Fade fade2, String fieldName) 1093f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount throws NoSuchFieldException, IllegalAccessException { 1103f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount Field field = findField(Fade.class, fieldName); 1113f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount field.setAccessible(true); 1123f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount assertEquals("Field '" + fieldName + "' value mismatch", field.get(fade1), 1133f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount field.get(fade2)); 1143f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount } 115bf7c3b4fa6d971201ab3fce162611639b857b810George Mount 1163f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount private static Field findField(Class<?> type, String fieldName) throws NoSuchFieldException { 1173f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount while (type != null) { 1183f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount try { 1193f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount return type.getDeclaredField(fieldName); 1203f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount } catch (NoSuchFieldException e) { 1213f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount // try the parent 1223f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount type = type.getSuperclass(); 1233f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount } 1243f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount } 1253f81c33a35e69fcfcb6e1f3d486bc1f01015615bGeorge Mount throw new NoSuchFieldException(fieldName); 126bf7c3b4fa6d971201ab3fce162611639b857b810George Mount } 127bf7c3b4fa6d971201ab3fce162611639b857b810George Mount} 128