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