MockKeyboardSwitcher.java revision 373f452584f5a6881d496eec9beb262fccf4a2a4
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 static String getLayoutName(int layoutId) {
60        switch (layoutId) {
61        case Constants.ALPHABET_UNSHIFTED: return "ALPHABET_UNSHIFTED";
62        case Constants.ALPHABET_MANUAL_SHIFTED: return "ALPHABET_MANUAL_SHIFTED";
63        case Constants.ALPHABET_AUTOMATIC_SHIFTED: return "ALPHABET_AUTOMATIC_SHIFTED";
64        case Constants.ALPHABET_SHIFT_LOCKED: return "ALPHABET_SHIFT_LOCKED";
65        case Constants.SYMBOLS_UNSHIFTED: return "SYMBOLS_UNSHIFTED";
66        case Constants.SYMBOLS_SHIFTED: return "SYMBOLS_SHIFTED";
67        default: return "UNKNOWN<" + layoutId + ">";
68        }
69    }
70
71    public void setAutoCapsMode(boolean autoCaps) {
72        mAutoCapsMode = autoCaps;
73    }
74
75    @Override
76    public void setAlphabetKeyboard() {
77        mLayout = Constants.ALPHABET_UNSHIFTED;
78    }
79
80    @Override
81    public void setShifted(int shiftMode) {
82        if (shiftMode == SwitchActions.UNSHIFT) {
83            mLayout = Constants.ALPHABET_UNSHIFTED;
84        } else if (shiftMode == SwitchActions.MANUAL_SHIFT) {
85            mLayout = Constants.ALPHABET_MANUAL_SHIFTED;
86        } else if (shiftMode == SwitchActions.AUTOMATIC_SHIFT) {
87            mLayout = Constants.ALPHABET_AUTOMATIC_SHIFTED;
88        }
89    }
90
91    @Override
92    public void setShiftLocked(boolean shiftLocked) {
93        if (shiftLocked) {
94            mLayout = Constants.ALPHABET_SHIFT_LOCKED;
95        } else {
96            mLayout = Constants.ALPHABET_UNSHIFTED;
97        }
98    }
99
100    @Override
101    public void setSymbolsKeyboard() {
102        mLayout = Constants.SYMBOLS_UNSHIFTED;
103    }
104
105    @Override
106    public void setSymbolsShiftedKeyboard() {
107        mLayout = Constants.SYMBOLS_SHIFTED;
108    }
109
110    @Override
111    public void requestUpdatingShiftState() {
112        mState.onUpdateShiftState(mAutoCapsMode && mAutoCapsState);
113    }
114
115    public void updateShiftState() {
116        mState.onUpdateShiftState(mAutoCapsMode && mAutoCapsState);
117    }
118
119    public void loadKeyboard(String layoutSwitchBackSymbols) {
120        mState.onLoadKeyboard(layoutSwitchBackSymbols);
121    }
122
123    public void saveKeyboardState() {
124        mState.onSaveKeyboardState();
125    }
126
127    public void onPressKey(int code) {
128        mState.onPressKey(code);
129    }
130
131    public void onReleaseKey(int code, boolean withSliding) {
132        mState.onReleaseKey(code, withSliding);
133    }
134
135    public void onCodeInput(int code, boolean isSinglePointer) {
136        if (Keyboard.isLetterCode(code)) {
137            mAutoCapsState = (code == Constants.CODE_AUTO_CAPS_TRIGGER);
138        }
139        mState.onCodeInput(code, isSinglePointer, mAutoCapsMode && mAutoCapsState);
140    }
141
142    public void onCancelInput(boolean isSinglePointer) {
143        mState.onCancelInput(isSinglePointer);
144    }
145}