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