Constants.java revision e530fffc2c3655ba588454503cbaa7eacba4bffe
1/*
2 * Copyright (C) 2012 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of 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,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.inputmethod.latin;
18
19public final class Constants {
20    public static final class Color {
21        /**
22         * The alpha value for fully opaque.
23         */
24        public final static int ALPHA_OPAQUE = 255;
25    }
26
27    public static final class ImeOption {
28        /**
29         * The private IME option used to indicate that no microphone should be shown for a given
30         * text field. For instance, this is specified by the search dialog when the dialog is
31         * already showing a voice search button.
32         *
33         * @deprecated Use {@link ImeOption#NO_MICROPHONE} with package name prefixed.
34         */
35        @SuppressWarnings("dep-ann")
36        public static final String NO_MICROPHONE_COMPAT = "nm";
37
38        /**
39         * The private IME option used to indicate that no microphone should be shown for a given
40         * text field. For instance, this is specified by the search dialog when the dialog is
41         * already showing a voice search button.
42         */
43        public static final String NO_MICROPHONE = "noMicrophoneKey";
44
45        /**
46         * The private IME option used to indicate that no settings key should be shown for a given
47         * text field.
48         */
49        public static final String NO_SETTINGS_KEY = "noSettingsKey";
50
51        /**
52         * The private IME option used to indicate that the given text field needs ASCII code points
53         * input.
54         *
55         * @deprecated Use EditorInfo#IME_FLAG_FORCE_ASCII.
56         */
57        @SuppressWarnings("dep-ann")
58        public static final String FORCE_ASCII = "forceAscii";
59
60        private ImeOption() {
61            // This utility class is not publicly instantiable.
62        }
63    }
64
65    public static final class Subtype {
66        /**
67         * The subtype mode used to indicate that the subtype is a keyboard.
68         */
69        public static final String KEYBOARD_MODE = "keyboard";
70
71        public static final class ExtraValue {
72            /**
73             * The subtype extra value used to indicate that this subtype is capable of
74             * entering ASCII characters.
75             */
76            public static final String ASCII_CAPABLE = "AsciiCapable";
77
78            /**
79             * The subtype extra value used to indicate that this subtype is enabled
80             * when the default subtype is not marked as ascii capable.
81             */
82            public static final String ENABLED_WHEN_DEFAULT_IS_NOT_ASCII_CAPABLE =
83                    "EnabledWhenDefaultIsNotAsciiCapable";
84
85            /**
86             * The subtype extra value used to indicate that this subtype is capable of
87             * entering emoji characters.
88             */
89            public static final String EMOJI_CAPABLE = "EmojiCapable";
90
91            /**
92             * The subtype extra value used to indicate that this subtype requires a network
93             * connection to work.
94             */
95            public static final String REQ_NETWORK_CONNECTIVITY = "requireNetworkConnectivity";
96
97            /**
98             * The subtype extra value used to indicate that the display name of this subtype
99             * contains a "%s" for printf-like replacement and it should be replaced by
100             * this extra value.
101             * This extra value is supported on JellyBean and later.
102             */
103            public static final String UNTRANSLATABLE_STRING_IN_SUBTYPE_NAME =
104                    "UntranslatableReplacementStringInSubtypeName";
105
106            /**
107             * The subtype extra value used to indicate this subtype keyboard layout set name.
108             * This extra value is private to LatinIME.
109             */
110            public static final String KEYBOARD_LAYOUT_SET = "KeyboardLayoutSet";
111
112            /**
113             * The subtype extra value used to indicate that this subtype is an additional subtype
114             * that the user defined. This extra value is private to LatinIME.
115             */
116            public static final String IS_ADDITIONAL_SUBTYPE = "isAdditionalSubtype";
117
118            /**
119             * The subtype extra value used to specify the combining rules.
120             */
121            public static final String COMBINING_RULES = "CombiningRules";
122
123            private ExtraValue() {
124                // This utility class is not publicly instantiable.
125            }
126        }
127
128        private Subtype() {
129            // This utility class is not publicly instantiable.
130        }
131    }
132
133    public static final class TextUtils {
134        /**
135         * Capitalization mode for {@link android.text.TextUtils#getCapsMode}: don't capitalize
136         * characters.  This value may be used with
137         * {@link android.text.TextUtils#CAP_MODE_CHARACTERS},
138         * {@link android.text.TextUtils#CAP_MODE_WORDS}, and
139         * {@link android.text.TextUtils#CAP_MODE_SENTENCES}.
140         */
141        // TODO: Straighten this out. It's bizarre to have to use android.text.TextUtils.CAP_MODE_*
142        // except for OFF that is in Constants.TextUtils.
143        public static final int CAP_MODE_OFF = 0;
144
145        private TextUtils() {
146            // This utility class is not publicly instantiable.
147        }
148    }
149
150    public static final int NOT_A_CODE = -1;
151    public static final int NOT_A_CURSOR_POSITION = -1;
152    // TODO: replace the following constants with state in InputTransaction?
153    public static final int NOT_A_COORDINATE = -1;
154    public static final int SUGGESTION_STRIP_COORDINATE = -2;
155    public static final int SPELL_CHECKER_COORDINATE = -3;
156    public static final int EXTERNAL_KEYBOARD_COORDINATE = -4;
157
158    // A hint on how many characters to cache from the TextView. A good value of this is given by
159    // how many characters we need to be able to almost always find the caps mode.
160    public static final int EDITOR_CONTENTS_CACHE_SIZE = 1024;
161    // How many characters we accept for the recapitalization functionality. This needs to be
162    // large enough for all reasonable purposes, but avoid purposeful attacks. 100k sounds about
163    // right for this.
164    public static final int MAX_CHARACTERS_FOR_RECAPITALIZATION = 1024 * 100;
165
166    // Must be equal to MAX_WORD_LENGTH in native/jni/src/defines.h
167    public static final int DICTIONARY_MAX_WORD_LENGTH = 48;
168
169    // (MAX_PREV_WORD_COUNT_FOR_N_GRAM + 1)-gram is supported in Java side. Needs to modify
170    // MAX_PREV_WORD_COUNT_FOR_N_GRAM in native/jni/src/defines.h for suggestions.
171    public static final int MAX_PREV_WORD_COUNT_FOR_N_GRAM = 2;
172
173    // Key events coming any faster than this are long-presses.
174    public static final int LONG_PRESS_MILLISECONDS = 200;
175    // TODO: Set this value appropriately.
176    public static final int GET_SUGGESTED_WORDS_TIMEOUT = 200;
177    // How many continuous deletes at which to start deleting at a higher speed.
178    public static final int DELETE_ACCELERATE_AT = 20;
179
180    public static final String WORD_SEPARATOR = " ";
181
182    public static boolean isValidCoordinate(final int coordinate) {
183        // Detect {@link NOT_A_COORDINATE}, {@link SUGGESTION_STRIP_COORDINATE},
184        // and {@link SPELL_CHECKER_COORDINATE}.
185        return coordinate >= 0;
186    }
187
188    /**
189     * Custom request code used in
190     * {@link com.android.inputmethod.keyboard.KeyboardActionListener#onCustomRequest(int)}.
191     */
192    // The code to show input method picker.
193    public static final int CUSTOM_CODE_SHOW_INPUT_METHOD_PICKER = 1;
194
195    /**
196     * Some common keys code. Must be positive.
197     */
198    public static final int CODE_ENTER = '\n';
199    public static final int CODE_TAB = '\t';
200    public static final int CODE_SPACE = ' ';
201    public static final int CODE_PERIOD = '.';
202    public static final int CODE_COMMA = ',';
203    public static final int CODE_DASH = '-';
204    public static final int CODE_SINGLE_QUOTE = '\'';
205    public static final int CODE_DOUBLE_QUOTE = '"';
206    public static final int CODE_QUESTION_MARK = '?';
207    public static final int CODE_EXCLAMATION_MARK = '!';
208    public static final int CODE_SLASH = '/';
209    public static final int CODE_BACKSLASH = '\\';
210    public static final int CODE_VERTICAL_BAR = '|';
211    public static final int CODE_COMMERCIAL_AT = '@';
212    public static final int CODE_PLUS = '+';
213    public static final int CODE_PERCENT = '%';
214    public static final int CODE_CLOSING_PARENTHESIS = ')';
215    public static final int CODE_CLOSING_SQUARE_BRACKET = ']';
216    public static final int CODE_CLOSING_CURLY_BRACKET = '}';
217    public static final int CODE_CLOSING_ANGLE_BRACKET = '>';
218    public static final int CODE_INVERTED_QUESTION_MARK = 0xBF; // ¿
219    public static final int CODE_INVERTED_EXCLAMATION_MARK = 0xA1; // ¡
220
221    public static final String REGEXP_PERIOD = "\\.";
222    public static final String STRING_SPACE = " ";
223    public static final String STRING_PERIOD_AND_SPACE = ". ";
224
225    /**
226     * Special keys code. Must be negative.
227     * These should be aligned with {@link KeyboardCodesSet#ID_TO_NAME},
228     * {@link KeyboardCodesSet#DEFAULT}, and {@link KeyboardCodesSet#RTL}.
229     */
230    public static final int CODE_SHIFT = -1;
231    public static final int CODE_CAPSLOCK = -2;
232    public static final int CODE_SWITCH_ALPHA_SYMBOL = -3;
233    public static final int CODE_OUTPUT_TEXT = -4;
234    public static final int CODE_DELETE = -5;
235    public static final int CODE_SETTINGS = -6;
236    public static final int CODE_SHORTCUT = -7;
237    public static final int CODE_ACTION_NEXT = -8;
238    public static final int CODE_ACTION_PREVIOUS = -9;
239    public static final int CODE_LANGUAGE_SWITCH = -10;
240    public static final int CODE_EMOJI = -11;
241    public static final int CODE_SHIFT_ENTER = -12;
242    public static final int CODE_SYMBOL_SHIFT = -13;
243    public static final int CODE_ALPHA_FROM_EMOJI = -14;
244    // Code value representing the code is not specified.
245    public static final int CODE_UNSPECIFIED = -15;
246
247    public static boolean isLetterCode(final int code) {
248        return code >= CODE_SPACE;
249    }
250
251    public static String printableCode(final int code) {
252        switch (code) {
253        case CODE_SHIFT: return "shift";
254        case CODE_CAPSLOCK: return "capslock";
255        case CODE_SWITCH_ALPHA_SYMBOL: return "symbol";
256        case CODE_OUTPUT_TEXT: return "text";
257        case CODE_DELETE: return "delete";
258        case CODE_SETTINGS: return "settings";
259        case CODE_SHORTCUT: return "shortcut";
260        case CODE_ACTION_NEXT: return "actionNext";
261        case CODE_ACTION_PREVIOUS: return "actionPrevious";
262        case CODE_LANGUAGE_SWITCH: return "languageSwitch";
263        case CODE_EMOJI: return "emoji";
264        case CODE_SHIFT_ENTER: return "shiftEnter";
265        case CODE_ALPHA_FROM_EMOJI: return "alpha";
266        case CODE_UNSPECIFIED: return "unspec";
267        case CODE_TAB: return "tab";
268        case CODE_ENTER: return "enter";
269        case CODE_SPACE: return "space";
270        default:
271            if (code < CODE_SPACE) return String.format("\\u%02X", code);
272            if (code < 0x100) return String.format("%c", code);
273            if (code < 0x10000) return String.format("\\u%04X", code);
274            return String.format("\\U%05X", code);
275        }
276    }
277
278    public static String printableCodes(final int[] codes) {
279        final StringBuilder sb = new StringBuilder();
280        boolean addDelimiter = false;
281        for (final int code : codes) {
282            if (code == NOT_A_CODE) break;
283            if (addDelimiter) sb.append(", ");
284            sb.append(printableCode(code));
285            addDelimiter = true;
286        }
287        return "[" + sb + "]";
288    }
289
290    public static final int MAX_INT_BIT_COUNT = 32;
291
292    /**
293     * Screen metrics (a.k.a. Device form factor) constants of
294     * {@link R.integer#config_screen_metrics}.
295     */
296    public static final int SCREEN_METRICS_SMALL_PHONE = 0;
297    public static final int SCREEN_METRICS_LARGE_PHONE = 1;
298    public static final int SCREEN_METRICS_LARGE_TABLET = 2;
299    public static final int SCREEN_METRICS_SMALL_TABLET = 3;
300
301    /**
302     * Default capacity of gesture points container.
303     * This constant is used by {@link BatchInputArbiter} and etc. to preallocate regions that
304     * contain gesture event points.
305     */
306    public static final int DEFAULT_GESTURE_POINTS_CAPACITY = 128;
307
308    private Constants() {
309        // This utility class is not publicly instantiable.
310    }
311}
312