1f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki/* 2f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki * Copyright (C) 2017 The Android Open Source Project 3f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki * 4f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki * Licensed under the Apache License, Version 2.0 (the "License"); 5f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki * you may not use this file except in compliance with the License. 6f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki * You may obtain a copy of the License at 7f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki * 8f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki * http://www.apache.org/licenses/LICENSE-2.0 9f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki * 10f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki * Unless required by applicable law or agreed to in writing, software 11f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki * distributed under the License is distributed on an "AS IS" BASIS, 12f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki * See the License for the specific language governing permissions and 14f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki * limitations under the License. 15f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki */ 16f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki 17f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Arakipackage android.support.transition; 18f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki 19f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Arakiimport static org.junit.Assert.assertEquals; 20f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Arakiimport static org.junit.Assert.assertNotNull; 21f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Arakiimport static org.junit.Assert.assertNull; 22f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Arakiimport static org.junit.Assert.assertTrue; 23f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki 24f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Arakiimport android.graphics.Rect; 25f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Arakiimport android.support.test.filters.MediumTest; 26f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Arakiimport android.support.test.filters.SdkSuppress; 27f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Arakiimport android.support.transition.test.R; 28f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Arakiimport android.support.v4.view.ViewCompat; 29f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Arakiimport android.view.View; 30f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki 31f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Arakiimport org.junit.Test; 32f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki 33f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki@MediumTest 34f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Arakipublic class ChangeClipBoundsTest extends BaseTransitionTest { 35f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki 36f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki @Override 37f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki Transition createTransition() { 38f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki return new ChangeClipBounds(); 39f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki } 40f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki 41f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki @SdkSuppress(minSdkVersion = 18) 42f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki @Test 43f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki public void testChangeClipBounds() throws Throwable { 44f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki enterScene(R.layout.scene1); 45f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki 46f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki final View redSquare = rule.getActivity().findViewById(R.id.redSquare); 47f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki final Rect newClip = new Rect(redSquare.getLeft() + 10, redSquare.getTop() + 10, 48f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki redSquare.getRight() - 10, redSquare.getBottom() - 10); 49f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki 50f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki rule.runOnUiThread(new Runnable() { 51f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki @Override 52f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki public void run() { 53f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki assertNull(ViewCompat.getClipBounds(redSquare)); 54f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki TransitionManager.beginDelayedTransition(mRoot, mTransition); 55f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki ViewCompat.setClipBounds(redSquare, newClip); 56f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki } 57f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki }); 58f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki waitForStart(); 59f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki Thread.sleep(150); 60f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki rule.runOnUiThread(new Runnable() { 61f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki @Override 62f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki public void run() { 63f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki Rect midClip = ViewCompat.getClipBounds(redSquare); 64f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki assertNotNull(midClip); 65f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki assertTrue(midClip.left > 0 && midClip.left < newClip.left); 66f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki assertTrue(midClip.top > 0 && midClip.top < newClip.top); 67f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki assertTrue(midClip.right < redSquare.getRight() && midClip.right > newClip.right); 68f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki assertTrue(midClip.bottom < redSquare.getBottom() 69f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki && midClip.bottom > newClip.bottom); 70f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki } 71f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki }); 72f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki waitForEnd(); 73f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki 74f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki rule.runOnUiThread(new Runnable() { 75f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki @Override 76f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki public void run() { 77f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki final Rect endRect = ViewCompat.getClipBounds(redSquare); 78f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki assertNotNull(endRect); 79f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki assertEquals(newClip, endRect); 80f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki } 81f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki }); 82f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki 83f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki resetListener(); 84f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki rule.runOnUiThread(new Runnable() { 85f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki @Override 86f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki public void run() { 87f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki TransitionManager.beginDelayedTransition(mRoot, mTransition); 88f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki ViewCompat.setClipBounds(redSquare, null); 89f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki } 90f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki }); 91f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki waitForStart(); 92f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki Thread.sleep(150); 93f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki rule.runOnUiThread(new Runnable() { 94f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki @Override 95f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki public void run() { 96f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki Rect midClip = ViewCompat.getClipBounds(redSquare); 97f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki assertNotNull(midClip); 98f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki assertTrue(midClip.left > 0 && midClip.left < newClip.left); 99f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki assertTrue(midClip.top > 0 && midClip.top < newClip.top); 100f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki assertTrue(midClip.right < redSquare.getRight() && midClip.right > newClip.right); 101f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki assertTrue(midClip.bottom < redSquare.getBottom() 102f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki && midClip.bottom > newClip.bottom); 103f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki } 104f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki }); 105f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki waitForEnd(); 106f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki 107f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki rule.runOnUiThread(new Runnable() { 108f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki @Override 109f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki public void run() { 1105fab35f1819881c2c128775aa50797301c4a50ceYuichi Araki assertNull(ViewCompat.getClipBounds(redSquare)); 111f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki } 112f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki }); 113f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki 114f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki } 115f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki 116f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki @Test 117f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki public void dummy() { 118f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki // Avoid "No tests found" on older devices 119f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki } 120f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki 121f137a45c77ee2e753262dc3c5f691fdcfd75053bYuichi Araki} 122