MockKeyboardSwitcher.java revision 757f8d96eea3dfb5951243d2ebb4b763db868471
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 ALPHABET_SHIFT_LOCK_SHIFTED = 4;
44        public static final int SYMBOLS_UNSHIFTED = 5;
45        public static final int SYMBOLS_SHIFTED = 6;
46    }
47
48    private int mLayout = Constants.ALPHABET_UNSHIFTED;
49
50    private boolean mAutoCapsMode = Constants.NO_AUTO_CAPS;
51    // Following InputConnection's behavior. Simulating InputType.TYPE_TEXT_FLAG_CAP_WORDS.
52    private boolean mAutoCapsState = true;
53
54    private final KeyboardState mState = new KeyboardState(this);
55
56    public int getLayoutId() {
57        return mLayout;
58    }
59
60    public static String getLayoutName(int layoutId) {
61        switch (layoutId) {
62        case Constants.ALPHABET_UNSHIFTED: return "ALPHABET_UNSHIFTED";
63        case Constants.ALPHABET_MANUAL_SHIFTED: return "ALPHABET_MANUAL_SHIFTED";
64        case Constants.ALPHABET_AUTOMATIC_SHIFTED: return "ALPHABET_AUTOMATIC_SHIFTED";
65        case Constants.ALPHABET_SHIFT_LOCKED: return "ALPHABET_SHIFT_LOCKED";
66        case Constants.ALPHABET_SHIFT_LOCK_SHIFTED: return "ALPHABET_SHIFT_LOCK_SHIFTED";
67        case Constants.SYMBOLS_UNSHIFTED: return "SYMBOLS_UNSHIFTED";
68        case Constants.SYMBOLS_SHIFTED: return "SYMBOLS_SHIFTED";
69        default: return "UNKNOWN<" + layoutId + ">";
70        }
71    }
72
73    public void setAutoCapsMode(boolean autoCaps) {
74        mAutoCapsMode = autoCaps;
75    }
76
77    @Override
78    public void setAlphabetKeyboard() {
79        mLayout = Constants.ALPHABET_UNSHIFTED;
80    }
81
82    @Override
83    public void setAlphabetManualShiftedKeyboard() {
84        mLayout = Constants.ALPHABET_MANUAL_SHIFTED;
85    }
86
87    @Override
88    public void setAlphabetAutomaticShiftedKeyboard() {
89        mLayout = Constants.ALPHABET_AUTOMATIC_SHIFTED;
90    }
91
92    @Override
93    public void setAlphabetShiftLockedKeyboard() {
94        mLayout = Constants.ALPHABET_SHIFT_LOCKED;
95    }
96
97    @Override
98    public void setAlphabetShiftLockShiftedKeyboard() {
99        mLayout = Constants.ALPHABET_SHIFT_LOCK_SHIFTED;
100    }
101
102    @Override
103    public void setSymbolsKeyboard() {
104        mLayout = Constants.SYMBOLS_UNSHIFTED;
105    }
106
107    @Override
108    public void setSymbolsShiftedKeyboard() {
109        mLayout = Constants.SYMBOLS_SHIFTED;
110    }
111
112    @Override
113    public void requestUpdatingShiftState() {
114        mState.onUpdateShiftState(mAutoCapsMode && mAutoCapsState);
115    }
116
117    public void updateShiftState() {
118        mState.onUpdateShiftState(mAutoCapsMode && mAutoCapsState);
119    }
120
121    public void loadKeyboard(String layoutSwitchBackSymbols) {
122        mState.onLoadKeyboard(layoutSwitchBackSymbols);
123    }
124
125    public void saveKeyboardState() {
126        mState.onSaveKeyboardState();
127    }
128
129    public void onPressKey(int code) {
130        mState.onPressKey(code);
131    }
132
133    public void onReleaseKey(int code, boolean withSliding) {
134        mState.onReleaseKey(code, withSliding);
135    }
136
137    public void onCodeInput(int code, boolean isSinglePointer) {
138        if (Keyboard.isLetterCode(code)) {
139            mAutoCapsState = (code == Constants.CODE_AUTO_CAPS_TRIGGER);
140        }
141        mState.onCodeInput(code, isSinglePointer, mAutoCapsMode && mAutoCapsState);
142    }
143
144    public void onCancelInput(boolean isSinglePointer) {
145        mState.onCancelInput(isSinglePointer);
146    }
147}