KeyboardStateSingleTouchTests.java revision 60c4594ee6415b266b3418e46d09e6a5b3ed23e1
1e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka/*
2e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * Copyright (C) 2012 The Android Open Source Project
3e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka *
4e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * use this file except in compliance with the License. You may obtain a copy of
6e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * the License at
7e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka *
8e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0
9e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka *
10e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software
11e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * License for the specific language governing permissions and limitations under
14e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka * the License.
15e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka */
16e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
17e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaokapackage com.android.inputmethod.keyboard.internal;
18e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
1960c4594ee6415b266b3418e46d09e6a5b3ed23e1Tadashi G. Takaokapublic class KeyboardStateSingleTouchTests extends KeyboardStateTestsBase {
20e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Shift key in alphabet mode.
21e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testShift() {
22e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Press/release shift key, enter into shift state.
2364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
24e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Press/release shift key, back to normal state.
2564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
26e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
27e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Press/release shift key, enter into shift state.
2864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
29e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Press/release letter key, snap back to normal state.
3064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
31e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
32e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
3387e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    // Shift key sliding input.
3487e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    public void testShiftSliding() {
3564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press and slide from shift key.
3664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndSlideFromKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
37e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
3864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Enter/release letter key, snap back to alphabet.
3964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
40e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
41e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
42e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Switching between alphabet and symbols.
43e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testAlphabetAndSymbols() {
4464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "?123" key, enter into symbols.
4564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
4664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "?123" key, back to alphabet.
4764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
48e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
49e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
50e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Switching between alphabet shift locked and symbols.
51e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testAlphabetShiftLockedAndSymbols() {
5264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Long press shift key, enter alphabet shift locked.
5364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
5464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
5564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "?123" key, enter into symbols.
5664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
57e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
5887e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka        // Press/release "ABC" key, switch back to shift locked mode.
5964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
6087e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    }
6187e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka
6287e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    // Symbols key sliding input.
6387e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    public void testSymbolsSliding() {
6464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press and slide from "123?" key.
6564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndSlideFromKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
6664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
6764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Enter/release into symbol key, snap back to alphabet.
6864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('!', SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
69e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
70e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
71e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Switching between symbols and symbols shifted.
72e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testSymbolsAndSymbolsShifted() {
7364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "?123" key, enter into symbols.
7464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
7564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
7664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "=\<" key, enter into symbols shifted.
7764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
7864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
7964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "?123" key, enter into symbols.
8064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
8187e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    }
8287e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka
8387e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    // Symbols shift sliding input
8487e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    public void testSymbolsShiftSliding() {
8564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "?123" key, enter into symbols.
8664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
8764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
8864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press and slide from "=\<" key.
8964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
9064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
9164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Enter/release symbol shifted letter key, snap back to symbols.
9264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_UNSHIFTED);
9387e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    }
94e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
9587e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    // Symbols shift sliding input from symbols shifted.
9687e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    public void testSymbolsShiftSliding2() {
9764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "?123" key, enter into symbols.
9864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
9964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
10064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "=\<" key, enter into symbols shifted.
10164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
10264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
10364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press and slide from "123?" key.
10464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
10564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
10664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Enter/release symbol letter key, snap back to symbols shifted.
10764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_SHIFTED);
108e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
109e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
110e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Automatic snap back to alphabet from symbols by space key.
111e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testSnapBackBySpace() {
11264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "?123" key, enter into symbols.
11364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
114e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
115e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Enter a symbol letter.
11664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
11764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
118e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Enter space, snap back to alphabet.
11964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SPACE, SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
120e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
121e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
12287e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    // TODO: Add automatic snap back to shift locked test.
12387e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka
124e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Automatic snap back to alphabet from symbols by registered letters.
125e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testSnapBack() {
12664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Set snap back chars.
127e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        final String snapBackChars = "'";
128e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        final int snapBackCode = snapBackChars.codePointAt(0);
12964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        loadKeyboard(snapBackChars, ALPHABET_UNSHIFTED);
130e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
13164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release "?123" key, enter into symbols.
13264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
133e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
134e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Enter a symbol letter.
13564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
13664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
137e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Enter snap back letter, snap back to alphabet.
13864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(snapBackCode, SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
139e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
140e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
141e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Automatic upper case test
142e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testAutomaticUpperCase() {
14364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Set auto caps mode on.
14464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        setAutoCapsMode(AUTO_CAPS);
14564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
146e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Update shift state with auto caps enabled.
14764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
14864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
14964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release shift key, back to alphabet.
15064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
151e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
152e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
15387e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    // Sliding from shift key in automatic upper case.
15487e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    public void testAutomaticUpperCaseSliding() {
15564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Set auto caps mode on.
15664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        setAutoCapsMode(AUTO_CAPS);
15764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
15887e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka        // Update shift state with auto caps enabled.
15964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
16064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
16164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press and slide from shift key.
16264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndSlideFromKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
16364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
16464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Enter and release letter key, back to alphabet.
16564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
16687e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    }
16787e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka
16887e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    // Sliding from symbol key in automatic upper case.
16987e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka    public void testAutomaticUpperCaseSliding2() {
17064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Set auto caps mode on.
17164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        setAutoCapsMode(AUTO_CAPS);
17264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
17387e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka        // Update shift state with auto caps enabled.
17464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
17587e025da11703af65e7bb85670adac5b54e2a367Tadashi G. Takaoka
17664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press and slide from "123?" key.
17764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndSlideFromKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
178e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
17964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Enter and release symbol letter keys, back to alphabet.
18064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
181e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
182e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
183e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Long press shift key.
184e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // TODO: Move long press recognizing timer/logic into KeyboardState.
185e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testLongPressShift() {
18664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Long press shift key, enter alphabet shift locked.
18764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
18864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
18964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release letter key, remain in shift locked.
19064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('A', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
19164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
19264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release letter key, remain in shift locked.
19364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('B', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
19464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
19564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release word separator, remain in shift locked.
19664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SPACE, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
19764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
19864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Long press shift key, back to alphabet.
19964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
200e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka     }
201e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
202e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Leave shift lock with single tap shift key.
203e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testShiftInShiftLock() {
20464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Long press shift key, enter alphabet shift locked.
20564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
20664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
20764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release shift key, back to alphabet.
20864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
209e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
210e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
211e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Double tap shift key.
212e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // TODO: Move double tap recognizing timer/logic into KeyboardState.
213e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testDoubleTapShift() {
214e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // First shift key tap.
21564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
21664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
217e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Second shift key tap.
218e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Double tap recognized in LatinKeyboardView.KeyTimerHandler.
21964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        secondTapShiftKey(ALPHABET_SHIFT_LOCKED);
220e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
221e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // First shift key tap.
22264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
22364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
224e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Second shift key tap.
225e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Second tap is ignored in LatinKeyboardView.KeyTimerHandler.
226e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
227e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
228e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Update shift state.
229e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testUpdateShiftState() {
23064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Set auto caps mode on.
23164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        setAutoCapsMode(AUTO_CAPS);
23264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
233e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Update shift state.
23464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
23564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
23664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release letter key, back to alphabet.
23764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('A', ALPHABET_AUTOMATIC_SHIFTED, ALPHABET_UNSHIFTED);
23864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
23964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release letter key
24064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey('b', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
24164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
24264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Press/release auto caps trigger letter, back to automatic shifted.
24364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
244e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
245e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
246e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // Update shift state when shift locked.
247e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    public void testUpdateShiftStateInShiftLocked() {
24864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Set auto caps mode on.
24964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        setAutoCapsMode(AUTO_CAPS);
25064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
25164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Long press shift key, enter alphabet shift locked.
25264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        longPressShiftKey(ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
25364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka
254e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka        // Update shift state when shift locked
25564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        updateShiftState(ALPHABET_SHIFT_LOCKED);
256e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    }
257e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
258e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // TODO: Change focus test.
259e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka
260e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka    // TODO: Change orientation test.
261e47bd3f4fbf38ae20c5b61fac563a3f6152037a3Tadashi G. Takaoka}
262