KeyboardStateMultiTouchTests.java revision beb08b398fa73a26f2d42d6feec87e34a96ca2d9
1/*
2 * Copyright (C) 2012 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License. You may obtain a copy of
6 * 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, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations under
14 * the License.
15 */
16
17package com.android.inputmethod.keyboard.internal;
18
19public class KeyboardStateMultiTouchTests extends KeyboardStateTestsBase {
20    // Chording input in alphabet.
21    public void testChordingAlphabet() {
22        // Press shift key and hold, enter into choring shift state.
23        pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
24        // Press/release letter key.
25        chordingPressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
26        // Release shift key, switch back to alphabet.
27        releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
28
29        // Press "?123" key and hold, enter into choring symbols state.
30        pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
31        // Press/release symbol letter key.
32        chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
33        // Release "ABC" key, switch back to alphabet.
34        releaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
35    }
36
37    // Chording input in shift locked.
38    public void testChordingShiftLocked() {
39        // Long press shift key, enter alphabet shift locked.
40        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
41
42        // Press shift key and hold, enter into choring shift state.
43        pressKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED);
44        // Press/release letter key.
45        chordingPressAndReleaseKey('Z', ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_SHIFT_LOCK_SHIFTED);
46        // Release shift key, switch back to alphabet shift locked.
47        releaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCKED);
48
49        // Press "?123" key and hold, enter into choring symbols state.
50        pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
51        // Press/release symbol letter key.
52        chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
53        // Release "123?" key, switch back to alphabet shift locked.
54        releaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED);
55    }
56
57    // Chording input in symbols.
58    public void testChordingSymbols() {
59        // Press/release "?123" key, enter symbols.
60        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
61
62        // Press "=\<" key and hold, enter into choring symbols shifted state.
63        pressKey(CODE_SHIFT, SYMBOLS_SHIFTED);
64        // Press/release symbol letter key.
65        chordingPressAndReleaseKey('1', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
66        // Release "=\<" key, switch back to symbols.
67        releaseKey(CODE_SHIFT, SYMBOLS_UNSHIFTED);
68
69        // Press "ABC" key and hold, enter into choring alphabet state.
70        pressKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
71        // Press/release letter key.
72        chordingPressAndReleaseKey('a', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
73        // Release "ABC" key, switch back to symbols.
74        releaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
75
76        // Alphabet shifted -> symbols -> "ABC" key + letter -> symbols
77        // -> alphabet.
78        // Load keyboard
79        loadKeyboard(ALPHABET_UNSHIFTED);
80        // Press/release shift key, enter alphabet shifted.
81        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
82        // Press/release "?123" key, enter into symbols.
83        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
84        // Press "ABC" key, enter into chording alphabet state.
85        pressKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
86        // Enter/release letter key.
87        chordingPressAndReleaseKey('a', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
88        // Release "ABC" key, switch back to symbols.
89        releaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
90        // Press/release "ABC" key, switch to alphabet (not alphabet shifted).
91        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
92
93        // Alphabet shift locked -> symbols -> "ABC" key + letter -> symbols ->
94        // alphabet shift locked.
95        // Load keyboard
96        loadKeyboard(ALPHABET_UNSHIFTED);
97        // Long press shift key, enter alphabet shift locked.
98        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
99        // Press/release "?123" key, enter into symbols.
100        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
101        // Press "ABC" key, enter into chording alphabet shift locked.
102        pressKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED);
103        // Enter/release letter key.
104        chordingPressAndReleaseKey('A', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
105        // Release "ABC" key, switch back to symbols.
106        releaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
107        // Press/release "ABC" key, switch to alphabet shift locked.
108        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
109
110        // Alphabet shift locked -> symbols -> "=\<" key + letter -> symbols ->
111        // alphabet shift locked.
112        // Load keyboard
113        loadKeyboard(ALPHABET_UNSHIFTED);
114        // Long press shift key, enter alphabet shift locked.
115        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
116        // Press/release "?123" key, enter into symbols.
117        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
118        // Press "=\<" key, enter into symbols shifted chording state.
119        pressKey(CODE_SHIFT, SYMBOLS_SHIFTED);
120        // Enter/release symbols shift letter key.
121        chordingPressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
122        // Release "=\<" key, switch back to symbols.
123        releaseKey(CODE_SHIFT, SYMBOLS_UNSHIFTED);
124        // Press/release "ABC" key, switch to alphabet shift locked.
125        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
126    }
127
128    // Chording input in symbol shifted.
129    public void testChordingSymbolsShifted() {
130        // Press/release "?123" key, enter symbols.
131        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
132        // Press/release "=\<" key, enter symbols shifted.
133        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
134
135        // Press "?123" key and hold, enter into chording symbols state.
136        pressKey(CODE_SHIFT, SYMBOLS_UNSHIFTED);
137        // Press/release symbol letter key.
138        chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
139        // Release "=\<" key, switch back to symbols shifted state.
140        releaseKey(CODE_SHIFT, SYMBOLS_SHIFTED);
141
142        // Press "ABC" key and hold, enter into choring alphabet state.
143        pressKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
144        // Press/release letter key.
145        chordingPressAndReleaseKey('a', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
146        // Release "ABC" key, switch back to symbols.
147        releaseKey(CODE_SYMBOL, SYMBOLS_SHIFTED);
148
149        // Alphabet shifted -> symbols shifted -> "ABC" key + letter -> symbols shifted ->
150        // alphabet.
151        // Load keyboard
152        loadKeyboard(ALPHABET_UNSHIFTED);
153        // Press/release shift key, enter alphabet shifted.
154        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
155        // Press/release "?123" key, enter into symbols.
156        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
157        // Press/release "=\<" key, enter symbols shifted.
158        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
159        // Press "ABC" key, enter into chording alphabet state.
160        pressKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
161        // Enter/release letter key.
162        chordingPressAndReleaseKey('a', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
163        // Release "ABC" key, switch back to symbols shifted.
164        releaseKey(CODE_SYMBOL, SYMBOLS_SHIFTED);
165        // Press/release "ABC" key, switch to alphabet (not alphabet shifted).
166        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
167
168        // Alphabet shift locked -> symbols shifted -> "ABC" key + letter -> symbols shifted
169        // -> alphabet shift locked.
170        // Load keyboard
171        loadKeyboard(ALPHABET_UNSHIFTED);
172        // Long press shift key, enter alphabet shift locked.
173        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
174        // Press/release "?123" key, enter into symbols.
175        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
176        // Press/release "=\<" key, enter symbols shifted.
177        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
178        // Press "ABC" key, enter into chording alphabet shift locked.
179        pressKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED);
180        // Enter/release letter key.
181        chordingPressAndReleaseKey('A', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
182        // Release "ABC" key, switch back to symbols shifted.
183        releaseKey(CODE_SYMBOL, SYMBOLS_SHIFTED);
184        // Press/release "ABC" key, switch to alphabet shift locked.
185        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
186
187        // Alphabet shift locked -> symbols shifted -> "=\<" key + letter -> symbols shifted
188        // -> alphabet shift locked.
189        // Load keyboard
190        loadKeyboard(ALPHABET_UNSHIFTED);
191        // Long press shift key, enter alphabet shift locked.
192        longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
193        // Press/release "?123" key, enter into symbols.
194        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
195        // Press/release "=\<" key, enter symbols shifted.
196        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
197        // Press "=\<" key, enter into symbols chording state.
198        pressKey(CODE_SHIFT, SYMBOLS_UNSHIFTED);
199        // Enter/release symbols letter key.
200        chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
201        // Release "=\<" key, switch back to symbols shifted.
202        releaseKey(CODE_SHIFT, SYMBOLS_SHIFTED);
203        // Press/release "ABC" key, switch to alphabet shift locked.
204        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
205    }
206
207    // Chording input in automatic upper case.
208    public void testChordingAutomaticUpperCase() {
209        // Set auto caps mode on.
210        setAutoCapsMode(AUTO_CAPS);
211
212        // Update shift state with auto caps enabled.
213        pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
214        // Press shift key and hold, enter into chording shift state.
215        pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
216        // Press/release letter key.
217        chordingPressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
218        // Release shift key, switch back to alphabet.
219        releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
220
221        // Update shift state with auto caps enabled.
222        pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
223        // Press "123?" key and hold, enter into chording symbols state.
224        pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
225        // Press/release symbol letter key.
226        chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
227        // Release "123?" key, switch back to alphabet.
228        releaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
229    }
230
231    // Chording letter key with shift key.
232    public void testChordingLetterAndShiftKey() {
233        // Press letter key and hold.
234        pressKey('z', ALPHABET_UNSHIFTED);
235        // Press shift key, {@link PointerTracker} will fire a phantom release letter key.
236        chordingReleaseKey('z', ALPHABET_UNSHIFTED);
237        chordingPressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
238        // Press another letter key and hold.
239        chordingPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
240        // Release shift key
241        releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
242    }
243}
244