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 170c6e099482182007d74a2ae013ca79ad473e1fc7Jason Monkimport android.test.suitebuilder.annotation.SmallTest; 18f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monkimport android.view.View; 19f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monkimport com.android.systemui.SysuiTestCase; 20f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monkimport com.android.systemui.qs.TouchAnimator.Listener; 21f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monkimport org.mockito.Mockito; 22f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 230c6e099482182007d74a2ae013ca79ad473e1fc7Jason Monk@SmallTest 24f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monkpublic class TouchAnimatorTests extends SysuiTestCase { 25f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 26f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk private Listener mTouchListener; 27f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk private View mTestView; 28f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 29f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk @Override 30f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk protected void setUp() throws Exception { 31f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk super.setUp(); 32f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 33f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk mTestView = new View(getContext()); 34f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk mTouchListener = Mockito.mock(Listener.class); 35f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 36f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 37f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk public void testSetValueFloat() { 38f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk TouchAnimator animator = new TouchAnimator.Builder() 39f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .addFloat(mTestView, "x", 0, 50) 40f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .build(); 41f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 42f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 43f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(0f, mTestView.getX()); 44f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 45f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.5f); 46f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(25f, mTestView.getX()); 47f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 48f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 49f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(50f, mTestView.getX()); 50f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 51f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 52f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk public void testSetValueInt() { 53f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk TouchAnimator animator = new TouchAnimator.Builder() 54f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .addInt(mTestView, "top", 0, 50) 55f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .build(); 56f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 57f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 58f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(0, mTestView.getTop()); 59f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 60f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.5f); 61f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(25, mTestView.getTop()); 62f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 63f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 64f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(50, mTestView.getTop()); 65f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 66f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 67f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk public void testStartDelay() { 68f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk TouchAnimator animator = new TouchAnimator.Builder() 69f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .addFloat(mTestView, "x", 0, 50) 70f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .setStartDelay(.5f) 71f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .build(); 72f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 73f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 74f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(0f, mTestView.getX()); 75f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 76f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.5f); 77f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(0f, mTestView.getX()); 78f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 79f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.75f); 80f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(25f, mTestView.getX()); 81f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 82f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 83f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(50f, mTestView.getX()); 84f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 85f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 86f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk public void testEndDelay() { 87f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk TouchAnimator animator = new TouchAnimator.Builder() 88f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .addFloat(mTestView, "x", 0, 50) 89f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .setEndDelay(.5f) 90f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .build(); 91f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 92f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 93f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(0f, mTestView.getX()); 94f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 95f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.25f); 96f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(25f, mTestView.getX()); 97f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 98f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.5f); 99f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(50f, mTestView.getX()); 100f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 101f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 102f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk assertEquals(50f, mTestView.getX()); 103f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 104f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 105f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk public void testOnAnimationAtStartCallback() { 106f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk TouchAnimator animator = new TouchAnimator.Builder() 107f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .setListener(mTouchListener) 108f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .build(); 109f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 110f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Called on init. 111f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 112f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationAtStart(1); 113f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 114f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Not called from same state. 115f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 116f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationAtStart(1); 117f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 118f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Called after starting and moving back to start. 119f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.5f); 120f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 121f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationAtStart(2); 122f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 123f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Called when move from end to end. 124f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 125f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 126f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationAtStart(3); 127f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 128f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 129f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk public void testOnAnimationAtEndCallback() { 130f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk TouchAnimator animator = new TouchAnimator.Builder() 131f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .setListener(mTouchListener) 132f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .build(); 133f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 134f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Called on init. 135f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 136f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationAtEnd(1); 137f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 138f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Not called from same state. 139f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 140f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationAtEnd(1); 141f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 142f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Called after starting and moving back to end. 143f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.5f); 144f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 145f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationAtEnd(2); 146f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 147f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Called when move from end to end. 148f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 149f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 150f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationAtEnd(3); 151f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 152f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 153f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk public void testOnAnimationStartedCallback() { 154f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk TouchAnimator animator = new TouchAnimator.Builder() 155f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .setListener(mTouchListener) 156f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk .build(); 157f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 158f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Called on init. 159f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.5f); 160f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationStarted(1); 161f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 162f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Not called from same state. 163f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.6f); 164f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationStarted(1); 165f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 166f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Called after going to end then moving again. 167f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(1); 168f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.5f); 169f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationStarted(2); 170f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 171f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // Called after moving to start then moving again. 172f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(0); 173f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk animator.setPosition(.5f); 174f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk verifyOnAnimationStarted(3); 175f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 176f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 177f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk // TODO: Add test for interpolator. 178f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 179f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk private void verifyOnAnimationAtStart(int times) { 180f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk Mockito.verify(mTouchListener, Mockito.times(times)).onAnimationAtStart(); 181f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 182f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 183f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk private void verifyOnAnimationAtEnd(int times) { 184f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk Mockito.verify(mTouchListener, Mockito.times(times)).onAnimationAtEnd(); 185f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 186f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk 187f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk private void verifyOnAnimationStarted(int times) { 188f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk Mockito.verify(mTouchListener, Mockito.times(times)).onAnimationStarted(); 189f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk } 190f6a3cf929102fd74757affdbd09053144e29a3c7Jason Monk} 191