Home | History | Annotate | Download | only in utils
      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.utils;
     18 
     19 import android.text.InputType;
     20 import android.view.inputmethod.EditorInfo;
     21 
     22 public final class InputTypeUtils implements InputType {
     23     private static final int WEB_TEXT_PASSWORD_INPUT_TYPE =
     24             TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_WEB_PASSWORD;
     25     private static final int WEB_TEXT_EMAIL_ADDRESS_INPUT_TYPE =
     26             TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS;
     27     private static final int NUMBER_PASSWORD_INPUT_TYPE =
     28             TYPE_CLASS_NUMBER | TYPE_NUMBER_VARIATION_PASSWORD;
     29     private static final int TEXT_PASSWORD_INPUT_TYPE =
     30             TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PASSWORD;
     31     private static final int TEXT_VISIBLE_PASSWORD_INPUT_TYPE =
     32             TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_VISIBLE_PASSWORD;
     33     private static final int[] SUPPRESSING_AUTO_SPACES_FIELD_VARIATION = {
     34         InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS,
     35         InputType.TYPE_TEXT_VARIATION_PASSWORD,
     36         InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD,
     37         InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD };
     38     public static final int IME_ACTION_CUSTOM_LABEL = EditorInfo.IME_MASK_ACTION + 1;
     39 
     40     private InputTypeUtils() {
     41         // This utility class is not publicly instantiable.
     42     }
     43 
     44     private static boolean isWebEditTextInputType(final int inputType) {
     45         return inputType == (TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_WEB_EDIT_TEXT);
     46     }
     47 
     48     private static boolean isWebPasswordInputType(final int inputType) {
     49         return WEB_TEXT_PASSWORD_INPUT_TYPE != 0
     50                 && inputType == WEB_TEXT_PASSWORD_INPUT_TYPE;
     51     }
     52 
     53     private static boolean isWebEmailAddressInputType(final int inputType) {
     54         return WEB_TEXT_EMAIL_ADDRESS_INPUT_TYPE != 0
     55                 && inputType == WEB_TEXT_EMAIL_ADDRESS_INPUT_TYPE;
     56     }
     57 
     58     private static boolean isNumberPasswordInputType(final int inputType) {
     59         return NUMBER_PASSWORD_INPUT_TYPE != 0
     60                 && inputType == NUMBER_PASSWORD_INPUT_TYPE;
     61     }
     62 
     63     private static boolean isTextPasswordInputType(final int inputType) {
     64         return inputType == TEXT_PASSWORD_INPUT_TYPE;
     65     }
     66 
     67     private static boolean isWebEmailAddressVariation(int variation) {
     68         return variation == TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS;
     69     }
     70 
     71     public static boolean isEmailVariation(final int variation) {
     72         return variation == TYPE_TEXT_VARIATION_EMAIL_ADDRESS
     73                 || isWebEmailAddressVariation(variation);
     74     }
     75 
     76     public static boolean isWebInputType(final int inputType) {
     77         final int maskedInputType =
     78                 inputType & (TYPE_MASK_CLASS | TYPE_MASK_VARIATION);
     79         return isWebEditTextInputType(maskedInputType) || isWebPasswordInputType(maskedInputType)
     80                 || isWebEmailAddressInputType(maskedInputType);
     81     }
     82 
     83     // Please refer to TextView.isPasswordInputType
     84     public static boolean isPasswordInputType(final int inputType) {
     85         final int maskedInputType =
     86                 inputType & (TYPE_MASK_CLASS | TYPE_MASK_VARIATION);
     87         return isTextPasswordInputType(maskedInputType) || isWebPasswordInputType(maskedInputType)
     88                 || isNumberPasswordInputType(maskedInputType);
     89     }
     90 
     91     // Please refer to TextView.isVisiblePasswordInputType
     92     public static boolean isVisiblePasswordInputType(final int inputType) {
     93         final int maskedInputType =
     94                 inputType & (TYPE_MASK_CLASS | TYPE_MASK_VARIATION);
     95         return maskedInputType == TEXT_VISIBLE_PASSWORD_INPUT_TYPE;
     96     }
     97 
     98     public static boolean isAutoSpaceFriendlyType(final int inputType) {
     99         if (TYPE_CLASS_TEXT != (TYPE_MASK_CLASS & inputType)) return false;
    100         final int variation = TYPE_MASK_VARIATION & inputType;
    101         for (final int fieldVariation : SUPPRESSING_AUTO_SPACES_FIELD_VARIATION) {
    102             if (variation == fieldVariation) return false;
    103         }
    104         return true;
    105     }
    106 
    107     public static int getImeOptionsActionIdFromEditorInfo(final EditorInfo editorInfo) {
    108         if ((editorInfo.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0) {
    109             return EditorInfo.IME_ACTION_NONE;
    110         } else if (editorInfo.actionLabel != null) {
    111             return IME_ACTION_CUSTOM_LABEL;
    112         } else {
    113             // Note: this is different from editorInfo.actionId, hence "ImeOptionsActionId"
    114             return editorInfo.imeOptions & EditorInfo.IME_MASK_ACTION;
    115         }
    116     }
    117 }
    118