ChangeTouchModeTest.java revision 1d3165f10b12165f02b7015ac1a817c5f60e6399
1/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.widget.touchmode;
18
19import android.widget.layout.linear.LLOfButtons1;
20import android.widget.layout.linear.LLOfButtons2;
21import static android.util.TouchModeFlexibleAsserts.assertInTouchModeAfterClick;
22import static android.util.TouchModeFlexibleAsserts.assertNotInTouchModeAfterKey;
23import static android.util.TouchModeFlexibleAsserts.assertInTouchModeAfterTap;
24
25import android.test.ActivityInstrumentationTestCase;
26import android.test.suitebuilder.annotation.LargeTest;
27import android.test.suitebuilder.annotation.MediumTest;
28import android.view.KeyEvent;
29
30/**
31 * Tests that the touch mode changes from various events, and that the state
32 * persists across activities.
33 */
34public class ChangeTouchModeTest extends ActivityInstrumentationTestCase<LLOfButtons1> {
35
36    public ChangeTouchModeTest() {
37        super("com.android.frameworks.coretests", LLOfButtons1.class);
38    }
39
40    @Override
41    protected void setUp() throws Exception {
42        super.setUp();
43    }
44
45    @MediumTest
46    public void testPreconditions() throws Exception {
47        assertFalse("touch mode", getActivity().isInTouchMode());
48    }
49
50    @MediumTest
51    public void testTouchingScreenEntersTouchMode() throws Exception {
52        assertInTouchModeAfterTap(this, getActivity().getFirstButton());
53        assertTrue("touch mode", getActivity().isInTouchMode());
54    }
55
56    // TODO: reenable when more reliable
57    public void DISABLE_testDpadDirectionLeavesTouchMode() throws Exception {
58        assertInTouchModeAfterClick(this, getActivity().getFirstButton());
59        sendKeys(KeyEvent.KEYCODE_DPAD_RIGHT);
60        assertNotInTouchModeAfterKey(this, KeyEvent.KEYCODE_DPAD_RIGHT, getActivity().getFirstButton());
61        assertFalse("touch mode", getActivity().isInTouchMode());
62    }
63
64    public void TODO_touchTrackBallMovementLeavesTouchMode() throws Exception {
65
66    }
67
68    @MediumTest
69    public void testTouchModeFalseAcrossActivites() throws Exception {
70
71        getInstrumentation().waitForIdleSync();
72
73        LLOfButtons2 otherActivity = null;
74        try {
75            otherActivity =
76                    launchActivity("com.android.frameworks.coretests", LLOfButtons2.class, null);
77            assertNotNull(otherActivity);
78            assertFalse(otherActivity.isInTouchMode());
79        } finally {
80            if (otherActivity != null) {
81                otherActivity.finish();
82            }
83        }
84    }
85
86    @LargeTest
87    public void testTouchModeTrueAcrossActivites() throws Exception {
88        assertInTouchModeAfterClick(this, getActivity().getFirstButton());
89        LLOfButtons2 otherActivity = null;
90        try {
91            otherActivity =
92                    launchActivity("com.android.frameworks.coretests", LLOfButtons2.class, null);
93            assertNotNull(otherActivity);
94            assertTrue(otherActivity.isInTouchMode());
95        } finally {
96            if (otherActivity != null) {
97                otherActivity.finish();
98            }
99        }
100    }
101
102    @LargeTest
103    public void testTouchModeChangedInOtherActivity() throws Exception {
104
105        assertFalse("touch mode", getActivity().isInTouchMode());
106
107        LLOfButtons2 otherActivity = null;
108        try {
109            otherActivity =
110                    launchActivity("com.android.frameworks.coretests", LLOfButtons2.class, null);
111            assertNotNull(otherActivity);
112            assertFalse(otherActivity.isInTouchMode());
113            assertInTouchModeAfterClick(this, otherActivity.getFirstButton());
114            assertTrue(otherActivity.isInTouchMode());
115        } finally {
116            if (otherActivity != null) {
117                otherActivity.finish();
118            }
119        }
120
121        // need to wait for async update back to window to occur
122        Thread.sleep(200);
123
124        assertTrue("touch mode", getActivity().isInTouchMode());
125    }
126
127}
128