MockKeyboardSwitcher.java revision 60c4594ee6415b266b3418e46d09e6a5b3ed23e1
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
19import com.android.inputmethod.keyboard.Keyboard;
20import com.android.inputmethod.keyboard.internal.KeyboardState.SwitchActions;
21
22public class MockKeyboardSwitcher implements KeyboardState.SwitchActions {
23    public interface Constants {
24        // Argument for {@link KeyboardState#onPressKey} and {@link KeyboardState#onReleaseKey}.
25        public static final boolean NOT_SLIDING = false;
26        public static final boolean SLIDING = true;
27        // Argument for {@link KeyboardState#onCodeInput}.
28        public static final boolean SINGLE = true;
29        public static final boolean MULTI = false;
30        public static final boolean NO_AUTO_CAPS = false;
31        public static final boolean AUTO_CAPS = true;
32
33        public static final int CODE_SHIFT = Keyboard.CODE_SHIFT;
34        public static final int CODE_SYMBOL = Keyboard.CODE_SWITCH_ALPHA_SYMBOL;
35        public static final int CODE_CAPSLOCK = Keyboard.CODE_CAPSLOCK;
36        public static final int CODE_SPACE = Keyboard.CODE_SPACE;
37        public static final int CODE_AUTO_CAPS_TRIGGER = Keyboard.CODE_SPACE;
38
39        public static final int ALPHABET_UNSHIFTED = 0;
40        public static final int ALPHABET_MANUAL_SHIFTED = 1;
41        public static final int ALPHABET_AUTOMATIC_SHIFTED = 2;
42        public static final int ALPHABET_SHIFT_LOCKED = 3;
43        public static final int SYMBOLS_UNSHIFTED = 4;
44        public static final int SYMBOLS_SHIFTED = 5;
45    }
46
47    private int mLayout = Constants.ALPHABET_UNSHIFTED;
48
49    private boolean mAutoCapsMode = Constants.NO_AUTO_CAPS;
50    // Following InputConnection's behavior. Simulating InputType.TYPE_TEXT_FLAG_CAP_WORDS.
51    private boolean mAutoCapsState = true;
52
53    private final KeyboardState mState = new KeyboardState(this);
54
55    public int getLayoutId() {
56        return mLayout;
57    }
58
59    public void setAutoCapsMode(boolean autoCaps) {
60        mAutoCapsMode = autoCaps;
61    }
62
63    @Override
64    public void setAlphabetKeyboard() {
65        mLayout = Constants.ALPHABET_UNSHIFTED;
66    }
67
68    @Override
69    public void setShifted(int shiftMode) {
70        if (shiftMode == SwitchActions.UNSHIFT) {
71            mLayout = Constants.ALPHABET_UNSHIFTED;
72        } else if (shiftMode == SwitchActions.MANUAL_SHIFT) {
73            mLayout = Constants.ALPHABET_MANUAL_SHIFTED;
74        } else if (shiftMode == SwitchActions.AUTOMATIC_SHIFT) {
75            mLayout = Constants.ALPHABET_AUTOMATIC_SHIFTED;
76        }
77    }
78
79    @Override
80    public void setShiftLocked(boolean shiftLocked) {
81        if (shiftLocked) {
82            mLayout = Constants.ALPHABET_SHIFT_LOCKED;
83        } else {
84            mLayout = Constants.ALPHABET_UNSHIFTED;
85        }
86    }
87
88    @Override
89    public void setSymbolsKeyboard() {
90        mLayout = Constants.SYMBOLS_UNSHIFTED;
91    }
92
93    @Override
94    public void setSymbolsShiftedKeyboard() {
95        mLayout = Constants.SYMBOLS_SHIFTED;
96    }
97
98    @Override
99    public void requestUpdatingShiftState() {
100        mState.onUpdateShiftState(mAutoCapsMode && mAutoCapsState);
101    }
102
103    public void updateShiftState() {
104        mState.onUpdateShiftState(mAutoCapsMode && mAutoCapsState);
105    }
106
107    public void loadKeyboard(String layoutSwitchBackSymbols) {
108        mState.onLoadKeyboard(layoutSwitchBackSymbols);
109    }
110
111    public void onPressKey(int code) {
112        mState.onPressKey(code);
113    }
114
115    public void onReleaseKey(int code, boolean withSliding) {
116        mState.onReleaseKey(code, withSliding);
117    }
118
119    public void onCodeInput(int code, boolean isSinglePointer) {
120        if (Keyboard.isLetterCode(code)) {
121            mAutoCapsState = (code == Constants.CODE_AUTO_CAPS_TRIGGER);
122        }
123        mState.onCodeInput(code, isSinglePointer, mAutoCapsMode && mAutoCapsState);
124    }
125
126    public void onCancelInput(boolean isSinglePointer) {
127        mState.onCancelInput(isSinglePointer);
128    }
129}