Home | History | Annotate | Download | only in compat
      1 /*
      2  * Copyright (C) 2011 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 
     17 package com.android.inputmethod.compat;
     18 
     19 import android.text.InputType;
     20 
     21 import java.lang.reflect.Field;
     22 
     23 public class InputTypeCompatUtils {
     24     private static final Field FIELD_InputType_TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS =
     25             CompatUtils.getField(InputType.class, "TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS");
     26     private static final Field FIELD_InputType_TYPE_TEXT_VARIATION_WEB_PASSWORD = CompatUtils
     27             .getField(InputType.class, "TYPE_TEXT_VARIATION_WEB_PASSWORD");
     28     private static final Field FIELD_InputType_TYPE_NUMBER_VARIATION_PASSWORD = CompatUtils
     29             .getField(InputType.class, "TYPE_NUMBER_VARIATION_PASSWORD");
     30     private static final Integer OBJ_InputType_TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS =
     31             (Integer) CompatUtils.getFieldValue(null, null,
     32                     FIELD_InputType_TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS);
     33     private static final Integer OBJ_InputType_TYPE_TEXT_VARIATION_WEB_PASSWORD =
     34             (Integer) CompatUtils.getFieldValue(null, null,
     35                     FIELD_InputType_TYPE_TEXT_VARIATION_WEB_PASSWORD);
     36     private static final Integer OBJ_InputType_TYPE_NUMBER_VARIATION_PASSWORD =
     37             (Integer) CompatUtils.getFieldValue(null, null,
     38                     FIELD_InputType_TYPE_NUMBER_VARIATION_PASSWORD);
     39     private static final int WEB_TEXT_PASSWORD_INPUT_TYPE;
     40     private static final int WEB_TEXT_EMAIL_ADDRESS_INPUT_TYPE;
     41     private static final int NUMBER_PASSWORD_INPUT_TYPE;
     42     private static final int TEXT_PASSWORD_INPUT_TYPE =
     43             InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD;
     44     private static final int TEXT_VISIBLE_PASSWORD_INPUT_TYPE =
     45             InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD;
     46 
     47     static {
     48         WEB_TEXT_PASSWORD_INPUT_TYPE =
     49             OBJ_InputType_TYPE_TEXT_VARIATION_WEB_PASSWORD != null
     50                     ? InputType.TYPE_CLASS_TEXT | OBJ_InputType_TYPE_TEXT_VARIATION_WEB_PASSWORD
     51                     : 0;
     52         WEB_TEXT_EMAIL_ADDRESS_INPUT_TYPE =
     53             OBJ_InputType_TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS != null
     54                     ? InputType.TYPE_CLASS_TEXT
     55                             | OBJ_InputType_TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS
     56                     : 0;
     57         NUMBER_PASSWORD_INPUT_TYPE =
     58                 OBJ_InputType_TYPE_NUMBER_VARIATION_PASSWORD != null
     59                         ? InputType.TYPE_CLASS_NUMBER | OBJ_InputType_TYPE_NUMBER_VARIATION_PASSWORD
     60                         : 0;
     61     }
     62 
     63     private static boolean isWebEditTextInputType(int inputType) {
     64         return inputType == (InputType.TYPE_CLASS_TEXT
     65                 | InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT);
     66     }
     67 
     68     private static boolean isWebPasswordInputType(int inputType) {
     69         return WEB_TEXT_PASSWORD_INPUT_TYPE != 0
     70                 && inputType == WEB_TEXT_PASSWORD_INPUT_TYPE;
     71     }
     72 
     73     private static boolean isWebEmailAddressInputType(int inputType) {
     74         return WEB_TEXT_EMAIL_ADDRESS_INPUT_TYPE != 0
     75                 && inputType == WEB_TEXT_EMAIL_ADDRESS_INPUT_TYPE;
     76     }
     77 
     78     private static boolean isNumberPasswordInputType(int inputType) {
     79         return NUMBER_PASSWORD_INPUT_TYPE != 0
     80                 && inputType == NUMBER_PASSWORD_INPUT_TYPE;
     81     }
     82 
     83     private static boolean isTextPasswordInputType(int inputType) {
     84         return inputType == TEXT_PASSWORD_INPUT_TYPE;
     85     }
     86 
     87     private static boolean isWebEmailAddressVariation(int variation) {
     88         return OBJ_InputType_TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS != null
     89                 && variation == OBJ_InputType_TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS;
     90     }
     91 
     92     public static boolean isEmailVariation(int variation) {
     93         return variation == InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS
     94                 || isWebEmailAddressVariation(variation);
     95     }
     96 
     97     public static boolean isWebInputType(int inputType) {
     98         final int maskedInputType =
     99                 inputType & (InputType.TYPE_MASK_CLASS | InputType.TYPE_MASK_VARIATION);
    100         return isWebEditTextInputType(maskedInputType) || isWebPasswordInputType(maskedInputType)
    101                 || isWebEmailAddressInputType(maskedInputType);
    102     }
    103 
    104     // Please refer to TextView.isPasswordInputType
    105     public static boolean isPasswordInputType(int inputType) {
    106         final int maskedInputType =
    107                 inputType & (InputType.TYPE_MASK_CLASS | InputType.TYPE_MASK_VARIATION);
    108         return isTextPasswordInputType(maskedInputType) || isWebPasswordInputType(maskedInputType)
    109                 || isNumberPasswordInputType(maskedInputType);
    110     }
    111 
    112     // Please refer to TextView.isVisiblePasswordInputType
    113     public static boolean isVisiblePasswordInputType(int inputType) {
    114         final int maskedInputType =
    115                 inputType & (InputType.TYPE_MASK_CLASS | InputType.TYPE_MASK_VARIATION);
    116         return maskedInputType == TEXT_VISIBLE_PASSWORD_INPUT_TYPE;
    117     }
    118 }
    119