1f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk/* 2f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk * Copyright (C) 2016 The Android Open Source Project 3f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk * 4f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 5f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk * except in compliance with the License. You may obtain a copy of the License at 6f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk * 7f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk * http://www.apache.org/licenses/LICENSE-2.0 8f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk * 9f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk * Unless required by applicable law or agreed to in writing, software distributed under the 10f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 11f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk * KIND, either express or implied. See the License for the specific language governing 12f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk * permissions and limitations under the License. 13f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk */ 14f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 15f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monkpackage com.android.systemui.qs; 16f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 172c403db659db615831d8bd02661f8769c7762241Geoffrey Pitschimport android.support.test.runner.AndroidJUnit4; 180c6e099482182007d74a2ae013ca79ad473e1fc7Jason Monkimport android.test.suitebuilder.annotation.SmallTest; 19f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monkimport android.view.View; 20f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monkimport com.android.systemui.qs.TouchAnimator.Listener; 212c403db659db615831d8bd02661f8769c7762241Geoffrey Pitschimport com.android.systemui.SysuiTestCase; 222c403db659db615831d8bd02661f8769c7762241Geoffrey Pitschimport org.junit.Before; 232c403db659db615831d8bd02661f8769c7762241Geoffrey Pitschimport org.junit.runner.RunWith; 242c403db659db615831d8bd02661f8769c7762241Geoffrey Pitschimport org.junit.Test; 25f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monkimport org.mockito.Mockito; 26f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 272c403db659db615831d8bd02661f8769c7762241Geoffrey Pitschimport static junit.framework.Assert.assertEquals; 282c403db659db615831d8bd02661f8769c7762241Geoffrey Pitsch 290c6e099482182007d74a2ae013ca79ad473e1fc7Jason Monk@SmallTest 302c403db659db615831d8bd02661f8769c7762241Geoffrey Pitsch@RunWith(AndroidJUnit4.class) 31fc2b64e3e80d44dabd6c32eb8cd69893d39476a9Geoffrey Pitschpublic class TouchAnimatorTest extends SysuiTestCase { 32f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 33f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk private Listener mTouchListener; 34f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk private View mTestView; 35f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 362c403db659db615831d8bd02661f8769c7762241Geoffrey Pitsch @Before 372c403db659db615831d8bd02661f8769c7762241Geoffrey Pitsch public void setUp() throws Exception { 38f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk mTestView = new View(getContext()); 39f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk mTouchListener = Mockito.mock(Listener.class); 40f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 41f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 422c403db659db615831d8bd02661f8769c7762241Geoffrey Pitsch @Test 43f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk public void testSetValueFloat() { 44f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk TouchAnimator animator = new TouchAnimator.Builder() 45f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .addFloat(mTestView, "x", 0, 50) 46f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .build(); 47f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 48f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 49f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(0f, mTestView.getX()); 50f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 51f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.5f); 52f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(25f, mTestView.getX()); 53f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 54f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 55f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(50f, mTestView.getX()); 56f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 57f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 582c403db659db615831d8bd02661f8769c7762241Geoffrey Pitsch @Test 59d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh public void testSetValueFloat_threeValues() { 60d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh TouchAnimator animator = new TouchAnimator.Builder() 61d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh .addFloat(mTestView, "x", 0, 20, 50) 62d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh .build(); 63d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh 64d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh animator.setPosition(0); 65d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh assertEquals(0f, mTestView.getX()); 66d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh 67d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh animator.setPosition(.25f); 68d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh assertEquals(10f, mTestView.getX()); 69d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh 70d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh animator.setPosition(.5f); 71d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh assertEquals(20f, mTestView.getX()); 72d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh 73d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh animator.setPosition(.75f); 74d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh assertEquals(35f, mTestView.getX()); 75d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh 76d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh animator.setPosition(1); 77d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh assertEquals(50f, mTestView.getX()); 78d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh } 79d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh 80d620def5f409e2649d1926a4e589aa7ccf6e4a9fAmin Shaikh @Test 81f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk public void testSetValueInt() { 82f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk TouchAnimator animator = new TouchAnimator.Builder() 83f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .addInt(mTestView, "top", 0, 50) 84f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .build(); 85f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 86f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 87f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(0, mTestView.getTop()); 88f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 89f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.5f); 90f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(25, mTestView.getTop()); 91f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 92f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 93f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(50, mTestView.getTop()); 94f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 95f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 962c403db659db615831d8bd02661f8769c7762241Geoffrey Pitsch @Test 97f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk public void testStartDelay() { 98f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk TouchAnimator animator = new TouchAnimator.Builder() 99f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .addFloat(mTestView, "x", 0, 50) 100f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .setStartDelay(.5f) 101f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .build(); 102f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 103f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 104f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(0f, mTestView.getX()); 105f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 106f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.5f); 107f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(0f, mTestView.getX()); 108f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 109f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.75f); 110f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(25f, mTestView.getX()); 111f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 112f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 113f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(50f, mTestView.getX()); 114f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 115f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 1162c403db659db615831d8bd02661f8769c7762241Geoffrey Pitsch @Test 117f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk public void testEndDelay() { 118f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk TouchAnimator animator = new TouchAnimator.Builder() 119f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .addFloat(mTestView, "x", 0, 50) 120f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .setEndDelay(.5f) 121f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .build(); 122f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 123f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 124f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(0f, mTestView.getX()); 125f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 126f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.25f); 127f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(25f, mTestView.getX()); 128f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 129f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.5f); 130f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(50f, mTestView.getX()); 131f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 132f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 133f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(50f, mTestView.getX()); 134f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 135f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 1362c403db659db615831d8bd02661f8769c7762241Geoffrey Pitsch @Test 137f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk public void testOnAnimationAtStartCallback() { 138f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk TouchAnimator animator = new TouchAnimator.Builder() 139f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .setListener(mTouchListener) 140f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .build(); 141f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 142f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Called on init. 143f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 144f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationAtStart(1); 145f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 146f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Not called from same state. 147f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 148f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationAtStart(1); 149f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 150f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Called after starting and moving back to start. 151f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.5f); 152f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 153f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationAtStart(2); 154f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 155f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Called when move from end to end. 156f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 157f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 158f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationAtStart(3); 159f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 160f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 1612c403db659db615831d8bd02661f8769c7762241Geoffrey Pitsch @Test 162f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk public void testOnAnimationAtEndCallback() { 163f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk TouchAnimator animator = new TouchAnimator.Builder() 164f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .setListener(mTouchListener) 165f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .build(); 166f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 167f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Called on init. 168f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 169f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationAtEnd(1); 170f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 171f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Not called from same state. 172f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 173f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationAtEnd(1); 174f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 175f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Called after starting and moving back to end. 176f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.5f); 177f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 178f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationAtEnd(2); 179f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 180f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Called when move from end to end. 181f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 182f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 183f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationAtEnd(3); 184f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 185f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 1862c403db659db615831d8bd02661f8769c7762241Geoffrey Pitsch @Test 187f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk public void testOnAnimationStartedCallback() { 188f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk TouchAnimator animator = new TouchAnimator.Builder() 189f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .setListener(mTouchListener) 190f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .build(); 191f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 192f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Called on init. 193f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.5f); 194f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationStarted(1); 195f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 196f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Not called from same state. 197f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.6f); 198f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationStarted(1); 199f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 200f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Called after going to end then moving again. 201f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 202f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.5f); 203f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationStarted(2); 204f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 205f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Called after moving to start then moving again. 206f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 207f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.5f); 208f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationStarted(3); 209f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 210f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 211f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // TODO: Add test for interpolator. 212f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 213f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk private void verifyOnAnimationAtStart(int times) { 214f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk Mockito.verify(mTouchListener, Mockito.times(times)).onAnimationAtStart(); 215f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 216f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 217f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk private void verifyOnAnimationAtEnd(int times) { 218f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk Mockito.verify(mTouchListener, Mockito.times(times)).onAnimationAtEnd(); 219f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 220f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 221f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk private void verifyOnAnimationStarted(int times) { 222f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk Mockito.verify(mTouchListener, Mockito.times(times)).onAnimationStarted(); 223f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 224f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk} 225