1549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka/*
2549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka * Copyright (C) 2012 The Android Open Source Project
3549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi 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
7549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka *
8ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka *      http://www.apache.org/licenses/LICENSE-2.0
9549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka *
10549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi 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.
15549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka */
16549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka
17549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaokapackage com.android.inputmethod.keyboard.internal;
18549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka
19553e2f19c1607080ff874cb642237f947809cdb3Tadashi G. Takaokaimport android.text.TextUtils;
20553e2f19c1607080ff874cb642237f947809cdb3Tadashi G. Takaoka
21e38043849e01adfb2f6eb33cf6133c1d39d2466aJean Chalardimport com.android.inputmethod.event.Event;
229342484e8d573a40f470b6a593df31c602fa4076Ken Wakasaimport com.android.inputmethod.latin.common.Constants;
23e28eba5074664d5716b8e58b8d0a235746b261ebKen Wakasaimport com.android.inputmethod.latin.utils.RecapitalizeStatus;
24549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka
25549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaokapublic class MockKeyboardSwitcher implements KeyboardState.SwitchActions {
26240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka    public interface MockConstants {
2764e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        // Argument for {@link KeyboardState#onPressKey} and {@link KeyboardState#onReleaseKey}.
282a88440419f49d100c73e067a823390f64aba3b1Tadashi G. Takaoka        public static final boolean NOT_SLIDING = false;
292a88440419f49d100c73e067a823390f64aba3b1Tadashi G. Takaoka        public static final boolean SLIDING = true;
30e38043849e01adfb2f6eb33cf6133c1d39d2466aJean Chalard        // Argument for {@link KeyboardState#onEvent}.
312a88440419f49d100c73e067a823390f64aba3b1Tadashi G. Takaoka        public static final boolean SINGLE = true;
322a88440419f49d100c73e067a823390f64aba3b1Tadashi G. Takaoka        public static final boolean MULTI = false;
33240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka        public static final int CAP_MODE_OFF = Constants.TextUtils.CAP_MODE_OFF;
34553e2f19c1607080ff874cb642237f947809cdb3Tadashi G. Takaoka        public static final int CAP_MODE_WORDS = TextUtils.CAP_MODE_WORDS;
35553e2f19c1607080ff874cb642237f947809cdb3Tadashi G. Takaoka        public static final int CAP_MODE_CHARACTERS = TextUtils.CAP_MODE_CHARACTERS;
362a88440419f49d100c73e067a823390f64aba3b1Tadashi G. Takaoka
37240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka        public static final int CODE_SHIFT = Constants.CODE_SHIFT;
38240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka        public static final int CODE_SYMBOL = Constants.CODE_SWITCH_ALPHA_SYMBOL;
39240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka        public static final int CODE_SPACE = Constants.CODE_SPACE;
40240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka        public static final int CODE_AUTO_CAPS_TRIGGER = Constants.CODE_SPACE;
418ece45bb32a350a4c73c9708eedc18389970f07dTadashi G. Takaoka
4264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        public static final int ALPHABET_UNSHIFTED = 0;
4364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        public static final int ALPHABET_MANUAL_SHIFTED = 1;
4464e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        public static final int ALPHABET_AUTOMATIC_SHIFTED = 2;
4564e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        public static final int ALPHABET_SHIFT_LOCKED = 3;
46757f8d96eea3dfb5951243d2ebb4b763db868471Tadashi G. Takaoka        public static final int ALPHABET_SHIFT_LOCK_SHIFTED = 4;
47e3150664ae4d8d007b8571b5bd0fd2259aac3a20Satoshi Kataoka        public static final int SYMBOLS_UNSHIFTED = 5;
48e3150664ae4d8d007b8571b5bd0fd2259aac3a20Satoshi Kataoka        public static final int SYMBOLS_SHIFTED = 6;
4964e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka    }
50549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka
51240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka    private int mLayout = MockConstants.ALPHABET_UNSHIFTED;
52549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka
53240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka    private int mAutoCapsMode = MockConstants.CAP_MODE_OFF;
548ece45bb32a350a4c73c9708eedc18389970f07dTadashi G. Takaoka    // Following InputConnection's behavior. Simulating InputType.TYPE_TEXT_FLAG_CAP_WORDS.
55240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka    private int mAutoCapsState = MockConstants.CAP_MODE_OFF;
56549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka
572a9882a433e2372ac32fbc0def578d4d9a97a676Tadashi G. Takaoka    private boolean mIsInDoubleTapShiftKeyTimeout;
58a5c96f376ad57e78a88942bb618e067054ed818aTadashi G. Takaoka    private int mLongPressTimeoutCode;
590ed2d3a4491cb0f6142975a15b653be6079b6a4eTadashi G. Takaoka
60549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    private final KeyboardState mState = new KeyboardState(this);
61549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka
6264e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka    public int getLayoutId() {
6364e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        return mLayout;
64549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    }
65549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka
66cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka    public static String getLayoutName(final int layoutId) {
67373f452584f5a6881d496eec9beb262fccf4a2a4Tadashi G. Takaoka        switch (layoutId) {
68240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka        case MockConstants.ALPHABET_UNSHIFTED: return "ALPHABET_UNSHIFTED";
69240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka        case MockConstants.ALPHABET_MANUAL_SHIFTED: return "ALPHABET_MANUAL_SHIFTED";
70240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka        case MockConstants.ALPHABET_AUTOMATIC_SHIFTED: return "ALPHABET_AUTOMATIC_SHIFTED";
71240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka        case MockConstants.ALPHABET_SHIFT_LOCKED: return "ALPHABET_SHIFT_LOCKED";
72240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka        case MockConstants.ALPHABET_SHIFT_LOCK_SHIFTED: return "ALPHABET_SHIFT_LOCK_SHIFTED";
73e3150664ae4d8d007b8571b5bd0fd2259aac3a20Satoshi Kataoka        case MockConstants.SYMBOLS_UNSHIFTED: return "SYMBOLS_UNSHIFTED";
74e3150664ae4d8d007b8571b5bd0fd2259aac3a20Satoshi Kataoka        case MockConstants.SYMBOLS_SHIFTED: return "SYMBOLS_SHIFTED";
75373f452584f5a6881d496eec9beb262fccf4a2a4Tadashi G. Takaoka        default: return "UNKNOWN<" + layoutId + ">";
76373f452584f5a6881d496eec9beb262fccf4a2a4Tadashi G. Takaoka        }
77373f452584f5a6881d496eec9beb262fccf4a2a4Tadashi G. Takaoka    }
78373f452584f5a6881d496eec9beb262fccf4a2a4Tadashi G. Takaoka
79cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka    public void setAutoCapsMode(final int autoCaps) {
808ece45bb32a350a4c73c9708eedc18389970f07dTadashi G. Takaoka        mAutoCapsMode = autoCaps;
81553e2f19c1607080ff874cb642237f947809cdb3Tadashi G. Takaoka        mAutoCapsState = autoCaps;
82549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    }
83549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka
840ed2d3a4491cb0f6142975a15b653be6079b6a4eTadashi G. Takaoka    public void expireDoubleTapTimeout() {
852a9882a433e2372ac32fbc0def578d4d9a97a676Tadashi G. Takaoka        mIsInDoubleTapShiftKeyTimeout = false;
860ed2d3a4491cb0f6142975a15b653be6079b6a4eTadashi G. Takaoka    }
870ed2d3a4491cb0f6142975a15b653be6079b6a4eTadashi G. Takaoka
88549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    @Override
89549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    public void setAlphabetKeyboard() {
90240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka        mLayout = MockConstants.ALPHABET_UNSHIFTED;
91549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    }
92549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka
93549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    @Override
940f05076990f1308c34c2f12ed793e1e1c41f8ac1Tadashi G. Takaoka    public void setAlphabetManualShiftedKeyboard() {
95240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka        mLayout = MockConstants.ALPHABET_MANUAL_SHIFTED;
96549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    }
97549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka
98549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    @Override
990f05076990f1308c34c2f12ed793e1e1c41f8ac1Tadashi G. Takaoka    public void setAlphabetAutomaticShiftedKeyboard() {
100240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka        mLayout = MockConstants.ALPHABET_AUTOMATIC_SHIFTED;
1010f05076990f1308c34c2f12ed793e1e1c41f8ac1Tadashi G. Takaoka    }
1020f05076990f1308c34c2f12ed793e1e1c41f8ac1Tadashi G. Takaoka
1030f05076990f1308c34c2f12ed793e1e1c41f8ac1Tadashi G. Takaoka    @Override
1040f05076990f1308c34c2f12ed793e1e1c41f8ac1Tadashi G. Takaoka    public void setAlphabetShiftLockedKeyboard() {
105240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka        mLayout = MockConstants.ALPHABET_SHIFT_LOCKED;
106549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    }
107549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka
108549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    @Override
109757f8d96eea3dfb5951243d2ebb4b763db868471Tadashi G. Takaoka    public void setAlphabetShiftLockShiftedKeyboard() {
110240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka        mLayout = MockConstants.ALPHABET_SHIFT_LOCK_SHIFTED;
111757f8d96eea3dfb5951243d2ebb4b763db868471Tadashi G. Takaoka    }
112757f8d96eea3dfb5951243d2ebb4b763db868471Tadashi G. Takaoka
113757f8d96eea3dfb5951243d2ebb4b763db868471Tadashi G. Takaoka    @Override
114549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    public void setSymbolsKeyboard() {
115e3150664ae4d8d007b8571b5bd0fd2259aac3a20Satoshi Kataoka        mLayout = MockConstants.SYMBOLS_UNSHIFTED;
116e3150664ae4d8d007b8571b5bd0fd2259aac3a20Satoshi Kataoka    }
117e3150664ae4d8d007b8571b5bd0fd2259aac3a20Satoshi Kataoka
118e3150664ae4d8d007b8571b5bd0fd2259aac3a20Satoshi Kataoka    @Override
119e3150664ae4d8d007b8571b5bd0fd2259aac3a20Satoshi Kataoka    public void setSymbolsShiftedKeyboard() {
120e3150664ae4d8d007b8571b5bd0fd2259aac3a20Satoshi Kataoka        mLayout = MockConstants.SYMBOLS_SHIFTED;
121549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    }
122549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka
123549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    @Override
1245169937dd48d69e52e647662cb6fc3def5bf90d4Satoshi Kataoka    public void setEmojiKeyboard() {
1255169937dd48d69e52e647662cb6fc3def5bf90d4Satoshi Kataoka        // Just ignore.
1265169937dd48d69e52e647662cb6fc3def5bf90d4Satoshi Kataoka    }
1275169937dd48d69e52e647662cb6fc3def5bf90d4Satoshi Kataoka
1285169937dd48d69e52e647662cb6fc3def5bf90d4Satoshi Kataoka    @Override
129ddc163988a7e2e910ff3cac26ed580bac123fda0Jean Chalard    public void requestUpdatingShiftState(final int currentAutoCapsState,
130ddc163988a7e2e910ff3cac26ed580bac123fda0Jean Chalard            final int currentRecapitalizeState) {
131ddc163988a7e2e910ff3cac26ed580bac123fda0Jean Chalard        mState.onUpdateShiftState(currentAutoCapsState, currentRecapitalizeState);
132ddc163988a7e2e910ff3cac26ed580bac123fda0Jean Chalard    }
133ddc163988a7e2e910ff3cac26ed580bac123fda0Jean Chalard
134ddc163988a7e2e910ff3cac26ed580bac123fda0Jean Chalard    @Override
1352a9882a433e2372ac32fbc0def578d4d9a97a676Tadashi G. Takaoka    public void startDoubleTapShiftKeyTimer() {
1362a9882a433e2372ac32fbc0def578d4d9a97a676Tadashi G. Takaoka        mIsInDoubleTapShiftKeyTimeout = true;
1370ed2d3a4491cb0f6142975a15b653be6079b6a4eTadashi G. Takaoka    }
1380ed2d3a4491cb0f6142975a15b653be6079b6a4eTadashi G. Takaoka
1390ed2d3a4491cb0f6142975a15b653be6079b6a4eTadashi G. Takaoka    @Override
1402a9882a433e2372ac32fbc0def578d4d9a97a676Tadashi G. Takaoka    public void cancelDoubleTapShiftKeyTimer() {
1412a9882a433e2372ac32fbc0def578d4d9a97a676Tadashi G. Takaoka        mIsInDoubleTapShiftKeyTimeout = false;
142beb08b398fa73a26f2d42d6feec87e34a96ca2d9Tadashi G. Takaoka    }
143beb08b398fa73a26f2d42d6feec87e34a96ca2d9Tadashi G. Takaoka
144beb08b398fa73a26f2d42d6feec87e34a96ca2d9Tadashi G. Takaoka    @Override
1452a9882a433e2372ac32fbc0def578d4d9a97a676Tadashi G. Takaoka    public boolean isInDoubleTapShiftKeyTimeout() {
1462a9882a433e2372ac32fbc0def578d4d9a97a676Tadashi G. Takaoka        return mIsInDoubleTapShiftKeyTimeout;
1470ed2d3a4491cb0f6142975a15b653be6079b6a4eTadashi G. Takaoka    }
1480ed2d3a4491cb0f6142975a15b653be6079b6a4eTadashi G. Takaoka
149549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    public void updateShiftState() {
1508094bf45d73a5f7257076afc97d91d6708ee03c4Jean Chalard        mState.onUpdateShiftState(mAutoCapsState, RecapitalizeStatus.NOT_A_RECAPITALIZE_MODE);
151549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    }
152549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka
153cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka    public void loadKeyboard() {
154f091c491ea8259ea696186ea6d97e6ce0c4c3597Jean Chalard        mState.onLoadKeyboard(mAutoCapsState, RecapitalizeStatus.NOT_A_RECAPITALIZE_MODE);
155549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    }
156549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka
15706bc1db017b14614353137fde035d2eed666a74fTadashi G. Takaoka    public void saveKeyboardState() {
15806bc1db017b14614353137fde035d2eed666a74fTadashi G. Takaoka        mState.onSaveKeyboardState();
15906bc1db017b14614353137fde035d2eed666a74fTadashi G. Takaoka    }
16006bc1db017b14614353137fde035d2eed666a74fTadashi G. Takaoka
161cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka    public void onPressKey(final int code, final boolean isSinglePointer) {
162f091c491ea8259ea696186ea6d97e6ce0c4c3597Jean Chalard        mState.onPressKey(code, isSinglePointer, mAutoCapsState,
163f091c491ea8259ea696186ea6d97e6ce0c4c3597Jean Chalard                RecapitalizeStatus.NOT_A_RECAPITALIZE_MODE);
164549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    }
165549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka
166cc2636b4e1b2d340351324f178f7ee990d7538cbTadashi G. Takaoka    public void onReleaseKey(final int code, final boolean withSliding) {
167ddc163988a7e2e910ff3cac26ed580bac123fda0Jean Chalard        onReleaseKey(code, withSliding, mAutoCapsState, RecapitalizeStatus.NOT_A_RECAPITALIZE_MODE);
168ddc163988a7e2e910ff3cac26ed580bac123fda0Jean Chalard    }
169ddc163988a7e2e910ff3cac26ed580bac123fda0Jean Chalard
170ddc163988a7e2e910ff3cac26ed580bac123fda0Jean Chalard    public void onReleaseKey(final int code, final boolean withSliding,
171ddc163988a7e2e910ff3cac26ed580bac123fda0Jean Chalard            final int currentAutoCapsState, final int currentRecapitalizeState) {
172ddc163988a7e2e910ff3cac26ed580bac123fda0Jean Chalard        mState.onReleaseKey(code, withSliding, currentAutoCapsState, currentRecapitalizeState);
173a5c96f376ad57e78a88942bb618e067054ed818aTadashi G. Takaoka        if (mLongPressTimeoutCode == code) {
174a5c96f376ad57e78a88942bb618e067054ed818aTadashi G. Takaoka            mLongPressTimeoutCode = 0;
175a5c96f376ad57e78a88942bb618e067054ed818aTadashi G. Takaoka        }
176549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    }
177549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka
17841016acacfa21354f59ed51db1f85ea3d99bf6a4Tadashi G. Takaoka    public void onCodeInput(final int code) {
179240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka        if (mAutoCapsMode == MockConstants.CAP_MODE_WORDS) {
180240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka            if (Constants.isLetterCode(code)) {
181240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka                mAutoCapsState = (code == MockConstants.CODE_AUTO_CAPS_TRIGGER)
182240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka                        ? mAutoCapsMode : MockConstants.CAP_MODE_OFF;
183553e2f19c1607080ff874cb642237f947809cdb3Tadashi G. Takaoka            }
184553e2f19c1607080ff874cb642237f947809cdb3Tadashi G. Takaoka        } else {
185553e2f19c1607080ff874cb642237f947809cdb3Tadashi G. Takaoka            mAutoCapsState = mAutoCapsMode;
18664e01baadeb624781d9d056b62679b25ea0fe5c0Tadashi G. Takaoka        }
187e38043849e01adfb2f6eb33cf6133c1d39d2466aJean Chalard        final Event event =
188e38043849e01adfb2f6eb33cf6133c1d39d2466aJean Chalard                Event.createSoftwareKeypressEvent(code /* codePoint */, code /* keyCode */,
189e38043849e01adfb2f6eb33cf6133c1d39d2466aJean Chalard                        Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE,
190e38043849e01adfb2f6eb33cf6133c1d39d2466aJean Chalard                        false /* isKeyRepeat */);
191e38043849e01adfb2f6eb33cf6133c1d39d2466aJean Chalard        mState.onEvent(event, mAutoCapsState, RecapitalizeStatus.NOT_A_RECAPITALIZE_MODE);
192549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    }
193549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka
19441016acacfa21354f59ed51db1f85ea3d99bf6a4Tadashi G. Takaoka    public void onFinishSlidingInput() {
195f091c491ea8259ea696186ea6d97e6ce0c4c3597Jean Chalard        mState.onFinishSlidingInput(mAutoCapsState, RecapitalizeStatus.NOT_A_RECAPITALIZE_MODE);
196549571cf5c7c5132bcf8073bac0554ae0ee1dcefTadashi G. Takaoka    }
19741016acacfa21354f59ed51db1f85ea3d99bf6a4Tadashi G. Takaoka}
198