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