• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
isWebEditTextInputType(int inputType)63     private static boolean isWebEditTextInputType(int inputType) {
64         return inputType == (InputType.TYPE_CLASS_TEXT
65                 | InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT);
66     }
67 
isWebPasswordInputType(int inputType)68     private static boolean isWebPasswordInputType(int inputType) {
69         return WEB_TEXT_PASSWORD_INPUT_TYPE != 0
70                 && inputType == WEB_TEXT_PASSWORD_INPUT_TYPE;
71     }
72 
isWebEmailAddressInputType(int inputType)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 
isNumberPasswordInputType(int inputType)78     private static boolean isNumberPasswordInputType(int inputType) {
79         return NUMBER_PASSWORD_INPUT_TYPE != 0
80                 && inputType == NUMBER_PASSWORD_INPUT_TYPE;
81     }
82 
isTextPasswordInputType(int inputType)83     private static boolean isTextPasswordInputType(int inputType) {
84         return inputType == TEXT_PASSWORD_INPUT_TYPE;
85     }
86 
isWebEmailAddressVariation(int variation)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 
isEmailVariation(int variation)92     public static boolean isEmailVariation(int variation) {
93         return variation == InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS
94                 || isWebEmailAddressVariation(variation);
95     }
96 
isWebInputType(int inputType)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
isPasswordInputType(int inputType)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
isVisiblePasswordInputType(int inputType)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