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