164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka/* 264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka * Copyright (C) 2012 The Android Open Source Project 364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka * 4ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); 5ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * you may not use this file except in compliance with the License. 6ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * You may obtain a copy of the License at 764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka * 8ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0 964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka * 1064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software 11ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, 12ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * See the License for the specific language governing permissions and 14ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * limitations under the License. 1564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka */ 1664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka 1764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaokapackage com.android.inputmethod.keyboard.internal; 1864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka 1964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaokaimport android.test.AndroidTestCase; 2064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka 219552badf3c24d2098d227b0ddca0721b928a10b1Tadashi G. Takaokaimport com.android.inputmethod.latin.Constants; 229552badf3c24d2098d227b0ddca0721b928a10b1Tadashi G. Takaoka 2306bc1db017b14614353137fde035d2eed666a74fTadashi G. Takaokapublic class KeyboardStateTestsBase extends AndroidTestCase 24240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka implements MockKeyboardSwitcher.MockConstants { 2564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka protected MockKeyboardSwitcher mSwitcher; 2664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka 2764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka @Override 2864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka protected void setUp() throws Exception { 2964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka super.setUp(); 3064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka 3164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka mSwitcher = new MockKeyboardSwitcher(); 32553e2f19c1607080ff874cb642237f947809cdb3Tadashi G. Takaoka mSwitcher.setAutoCapsMode(CAP_MODE_OFF); 3364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka 3406bc1db017b14614353137fde035d2eed666a74fTadashi G. Takaoka loadKeyboard(ALPHABET_UNSHIFTED); 3564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka } 3664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka 37f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka /** 38f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * Set auto caps mode. 39f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * 40f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param autoCaps the auto cap mode. 41f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka */ 42cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka public void setAutoCapsMode(final int autoCaps) { 4364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka mSwitcher.setAutoCapsMode(autoCaps); 4464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka } 4564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka 46cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka private static void assertLayout(final String message, final int expected, final int actual) { 470d6d4c20ce2e6ff75901d29aa9b2ad11b8dd1118Tadashi G. Takaoka assertTrue(message + ": expected=" + MockKeyboardSwitcher.getLayoutName(expected) 48373f452584f5a6881d496eec9beb262fccf4a2a4Tadashi G. Takaoka + " actual=" + MockKeyboardSwitcher.getLayoutName(actual), 49373f452584f5a6881d496eec9beb262fccf4a2a4Tadashi G. Takaoka expected == actual); 50373f452584f5a6881d496eec9beb262fccf4a2a4Tadashi G. Takaoka } 51373f452584f5a6881d496eec9beb262fccf4a2a4Tadashi G. Takaoka 52f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka /** 53f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * Emulate update keyboard shift state. 54f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * 55f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterUpdate the keyboard state after updating the keyboard shift state. 56f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka */ 57cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka public void updateShiftState(final int afterUpdate) { 5864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka mSwitcher.updateShiftState(); 590d6d4c20ce2e6ff75901d29aa9b2ad11b8dd1118Tadashi G. Takaoka assertLayout("afterUpdate", afterUpdate, mSwitcher.getLayoutId()); 6064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka } 6164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka 62f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka /** 63f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * Emulate load default keyboard. 64f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * 65f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterLoad the keyboard state after loading default keyboard. 66f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka */ 67cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka public void loadKeyboard(final int afterLoad) { 68cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka mSwitcher.loadKeyboard(); 690d6d4c20ce2e6ff75901d29aa9b2ad11b8dd1118Tadashi G. Takaoka mSwitcher.updateShiftState(); 700d6d4c20ce2e6ff75901d29aa9b2ad11b8dd1118Tadashi G. Takaoka assertLayout("afterLoad", afterLoad, mSwitcher.getLayoutId()); 7164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka } 7264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka 73f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka /** 74f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * Emulate rotate device. 75f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * 76f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterRotate the keyboard state after rotating device. 77f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka */ 78cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka public void rotateDevice(final int afterRotate) { 7906bc1db017b14614353137fde035d2eed666a74fTadashi G. Takaoka mSwitcher.saveKeyboardState(); 80cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka mSwitcher.loadKeyboard(); 810d6d4c20ce2e6ff75901d29aa9b2ad11b8dd1118Tadashi G. Takaoka assertLayout("afterRotate", afterRotate, mSwitcher.getLayoutId()); 8206bc1db017b14614353137fde035d2eed666a74fTadashi G. Takaoka } 8306bc1db017b14614353137fde035d2eed666a74fTadashi G. Takaoka 84cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka private void pressKeyWithoutTimerExpire(final int code, final boolean isSinglePointer, 85cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka final int afterPress) { 8616950d65c323f99507d97cb7f0403dc653e2506cTadashi G. Takaoka mSwitcher.onPressKey(code, isSinglePointer); 870d6d4c20ce2e6ff75901d29aa9b2ad11b8dd1118Tadashi G. Takaoka assertLayout("afterPress", afterPress, mSwitcher.getLayoutId()); 8864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka } 8964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka 90f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka /** 91f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * Emulate key press. 92f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * 93f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param code the key code to press. 94f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterPress the keyboard state after pressing the key. 95f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka */ 96cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka public void pressKey(final int code, final int afterPress) { 970ed2d3a4491cb0f6142975a15b653be6079b6a4eTadashi G. Takaoka mSwitcher.expireDoubleTapTimeout(); 9816950d65c323f99507d97cb7f0403dc653e2506cTadashi G. Takaoka pressKeyWithoutTimerExpire(code, true, afterPress); 990ed2d3a4491cb0f6142975a15b653be6079b6a4eTadashi G. Takaoka } 1000ed2d3a4491cb0f6142975a15b653be6079b6a4eTadashi G. Takaoka 101f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka /** 102f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * Emulate key release and register. 103f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * 104f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param code the key code to release and register 105f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterRelease the keyboard state after releasing the key. 106f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka */ 107cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka public void releaseKey(final int code, final int afterRelease) { 10841016acacfa21354f59ed51db1f85ea3d99bf6a4Tadashi G. Takaoka mSwitcher.onCodeInput(code); 10964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka mSwitcher.onReleaseKey(code, NOT_SLIDING); 1100d6d4c20ce2e6ff75901d29aa9b2ad11b8dd1118Tadashi G. Takaoka assertLayout("afterRelease", afterRelease, mSwitcher.getLayoutId()); 11164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka } 11264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka 113f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka /** 114f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * Emulate key press and release. 115f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * 116f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param code the key code to press and release. 117f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterPress the keyboard state after pressing the key. 118f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterRelease the keyboard state after releasing the key. 119f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka */ 120cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka public void pressAndReleaseKey(final int code, final int afterPress, final int afterRelease) { 12164e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka pressKey(code, afterPress); 12264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka releaseKey(code, afterRelease); 12364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka } 12464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka 125f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka /** 126f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * Emulate chording key press. 127f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * 128f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param code the chording key code. 129f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterPress the keyboard state after pressing chording key. 130f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka */ 131cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka public void chordingPressKey(final int code, final int afterPress) { 13216950d65c323f99507d97cb7f0403dc653e2506cTadashi G. Takaoka mSwitcher.expireDoubleTapTimeout(); 13316950d65c323f99507d97cb7f0403dc653e2506cTadashi G. Takaoka pressKeyWithoutTimerExpire(code, false, afterPress); 13464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka } 13564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka 136f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka /** 137f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * Emulate chording key release. 138f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * 139f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param code the cording key code. 140f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterRelease the keyboard state after releasing chording key. 141f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka */ 142cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka public void chordingReleaseKey(final int code, final int afterRelease) { 14341016acacfa21354f59ed51db1f85ea3d99bf6a4Tadashi G. Takaoka mSwitcher.onCodeInput(code); 14464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka mSwitcher.onReleaseKey(code, NOT_SLIDING); 1450d6d4c20ce2e6ff75901d29aa9b2ad11b8dd1118Tadashi G. Takaoka assertLayout("afterRelease", afterRelease, mSwitcher.getLayoutId()); 14664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka } 14764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka 148f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka /** 149f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * Emulate chording key press and release. 150f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * 151f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param code the chording key code. 152f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterPress the keyboard state after pressing chording key. 153f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterRelease the keyboard state after releasing chording key. 154f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka */ 155cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka public void chordingPressAndReleaseKey(final int code, final int afterPress, 156cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka final int afterRelease) { 15764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka chordingPressKey(code, afterPress); 15864e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka chordingReleaseKey(code, afterRelease); 15964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka } 16064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka 161f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka /** 162f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * Emulate start of the sliding key input. 163f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * 164f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param code the key code to start sliding. 165f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterPress the keyboard state after pressing the key. 166f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterSlide the keyboard state after releasing the key with sliding input. 167f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka */ 168cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka public void pressAndSlideFromKey(final int code, final int afterPress, final int afterSlide) { 16964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka pressKey(code, afterPress); 17064e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka mSwitcher.onReleaseKey(code, SLIDING); 1710d6d4c20ce2e6ff75901d29aa9b2ad11b8dd1118Tadashi G. Takaoka assertLayout("afterSlide", afterSlide, mSwitcher.getLayoutId()); 17264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka } 17364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka 174f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka /** 175f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * Emulate end of the sliding key input. 176f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * 177f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param code the key code to stop sliding. 178f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterPress the keyboard state after pressing the key. 179f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterSlide the keyboard state after releasing the key and stop sliding. 180f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka */ 18141016acacfa21354f59ed51db1f85ea3d99bf6a4Tadashi G. Takaoka public void stopSlidingOnKey(final int code, final int afterPress, final int afterSlide) { 18241016acacfa21354f59ed51db1f85ea3d99bf6a4Tadashi G. Takaoka pressKey(code, afterPress); 18341016acacfa21354f59ed51db1f85ea3d99bf6a4Tadashi G. Takaoka mSwitcher.onCodeInput(code); 18441016acacfa21354f59ed51db1f85ea3d99bf6a4Tadashi G. Takaoka mSwitcher.onReleaseKey(code, NOT_SLIDING); 18541016acacfa21354f59ed51db1f85ea3d99bf6a4Tadashi G. Takaoka mSwitcher.onFinishSlidingInput(); 18641016acacfa21354f59ed51db1f85ea3d99bf6a4Tadashi G. Takaoka assertLayout("afterSlide", afterSlide, mSwitcher.getLayoutId()); 18741016acacfa21354f59ed51db1f85ea3d99bf6a4Tadashi G. Takaoka } 18841016acacfa21354f59ed51db1f85ea3d99bf6a4Tadashi G. Takaoka 189f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka /** 190f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * Emulate cancel the sliding key input. 191f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * 192f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterCancelSliding the keyboard state after canceling sliding input. 193f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka */ 19441016acacfa21354f59ed51db1f85ea3d99bf6a4Tadashi G. Takaoka public void stopSlidingAndCancel(final int afterCancelSliding) { 19541016acacfa21354f59ed51db1f85ea3d99bf6a4Tadashi G. Takaoka mSwitcher.onFinishSlidingInput(); 19641016acacfa21354f59ed51db1f85ea3d99bf6a4Tadashi G. Takaoka assertLayout("afterCancelSliding", afterCancelSliding, mSwitcher.getLayoutId()); 19741016acacfa21354f59ed51db1f85ea3d99bf6a4Tadashi G. Takaoka } 19841016acacfa21354f59ed51db1f85ea3d99bf6a4Tadashi G. Takaoka 199f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka /** 200f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * Emulate long press shift key. 201f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * 202f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterPress the keyboard state after pressing shift key. 203f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterLongPress the keyboard state after long press fired. 204f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka */ 205f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka public void longPressShiftKey(final int afterPress, final int afterLongPress) { 2069552badf3c24d2098d227b0ddca0721b928a10b1Tadashi G. Takaoka // Long press shift key will register {@link Constants#CODE_CAPS_LOCK}. See 2079552badf3c24d2098d227b0ddca0721b928a10b1Tadashi G. Takaoka // {@link R.xml#key_styles_common} and its baseForShiftKeyStyle. We thus emulate the 208f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka // behavior that is implemented in {@link MainKeyboardView#onLongPress(PointerTracker)}. 209f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka pressKey(Constants.CODE_SHIFT, afterPress); 210f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka mSwitcher.onPressKey(Constants.CODE_CAPSLOCK, true /* isSinglePointer */); 211f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka mSwitcher.onCodeInput(Constants.CODE_CAPSLOCK); 2120d6d4c20ce2e6ff75901d29aa9b2ad11b8dd1118Tadashi G. Takaoka assertLayout("afterLongPress", afterLongPress, mSwitcher.getLayoutId()); 213fb0a4ba8fd7291e1bed0ec61bb7d2b5c8f93c1adTadashi G. Takaoka } 214fb0a4ba8fd7291e1bed0ec61bb7d2b5c8f93c1adTadashi G. Takaoka 215f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka /** 216f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * Emulate long press shift key and release. 217f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * 218f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterPress the keyboard state after pressing shift key. 219f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterLongPress the keyboard state after long press fired. 220f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterRelease the keyboard state after shift key is released. 221f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka */ 222f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka public void longPressAndReleaseShiftKey(final int afterPress, final int afterLongPress, 223f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka final int afterRelease) { 224f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka // Long press shift key will register {@link Constants#CODE_CAPS_LOCK}. See 225f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka // {@link R.xml#key_styles_common} and its baseForShiftKeyStyle. We thus emulate the 226f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka // behavior that is implemented in {@link MainKeyboardView#onLongPress(PointerTracker)}. 227f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka longPressShiftKey(afterPress, afterLongPress); 228f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka releaseKey(Constants.CODE_CAPSLOCK, afterRelease); 229f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka } 230f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka 231f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka /** 232f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * Emulate the second press of the double tap. 233f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * 234f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param code the key code to double tap. 235f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterPress the keyboard state after pressing the second tap. 236f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka */ 237f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka public void secondPressKey(final int code, final int afterPress) { 23816950d65c323f99507d97cb7f0403dc653e2506cTadashi G. Takaoka pressKeyWithoutTimerExpire(code, true, afterPress); 2399a3211802baf11e5749a080e4f451ef7b795220bTadashi G. Takaoka } 2409a3211802baf11e5749a080e4f451ef7b795220bTadashi G. Takaoka 241f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka /** 242f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * Emulate the second tap of the double tap. 243f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * 244f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param code the key code to double tap. 245f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterPress the keyboard state after pressing the second tap. 246f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka * @param afterRelease the keyboard state after releasing the second tap. 247f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka */ 248f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka public void secondPressAndReleaseKey(final int code, final int afterPress, 249f87e8f7ec1efb93398d909c67468d716b0248fe7Tadashi G. Takaoka final int afterRelease) { 2509a3211802baf11e5749a080e4f451ef7b795220bTadashi G. Takaoka secondPressKey(code, afterPress); 2510ed2d3a4491cb0f6142975a15b653be6079b6a4eTadashi G. Takaoka releaseKey(code, afterRelease); 25264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka } 25364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka} 254