mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Migrate to androidx.autofill.HintConstants & Support all constant types (#28008)
Summary: Fix for https://github.com/facebook/react-native/issues/27952. Noticed more than just `AUTOFILL_HINT_NEW_PASSWORD` were missing, this PR will support every `AUTOFILL_HINT_*` type. ## Changelog [Android] [Added] - Added all autofill types to TextEdit Pull Request resolved: https://github.com/facebook/react-native/pull/28008 Reviewed By: sturmen Differential Revision: D29766235 Pulled By: mdvacca fbshipit-source-id: d5171aef8092d37716fddcb6f3443637a4af8481
This commit is contained in:
committed by
Facebook GitHub Bot
parent
48ba8df8f2
commit
d9e0ea77f0
@@ -13,6 +13,7 @@ rn_android_library(
|
||||
react_native_dep("third-party/android/androidx:fragment"),
|
||||
react_native_dep("third-party/android/androidx:legacy-support-core-ui"),
|
||||
react_native_dep("third-party/android/androidx:legacy-support-core-utils"),
|
||||
react_native_dep("third-party/android/androidx:autofill"),
|
||||
],
|
||||
visibility = [
|
||||
"PUBLIC",
|
||||
|
||||
@@ -15,6 +15,7 @@ rn_android_library(
|
||||
react_native_dep("libraries/fbcore/src/main/java/com/facebook/common/logging:logging"),
|
||||
react_native_dep("third-party/java/infer-annotations:infer-annotations"),
|
||||
react_native_dep("third-party/java/jsr-305:jsr-305"),
|
||||
react_native_dep("third-party/android/androidx:autofill"),
|
||||
react_native_target("java/com/facebook/react/bridge:bridge"),
|
||||
react_native_target("java/com/facebook/react/common:common"),
|
||||
react_native_target("java/com/facebook/react/module/annotations:annotations"),
|
||||
|
||||
+49
-24
@@ -30,6 +30,7 @@ import android.view.inputmethod.EditorInfo;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.autofill.HintConstants;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import com.facebook.common.logging.FLog;
|
||||
import com.facebook.infer.annotation.Assertions;
|
||||
@@ -72,6 +73,7 @@ import com.facebook.react.views.text.TextLayoutManager;
|
||||
import com.facebook.react.views.text.TextTransform;
|
||||
import com.facebook.yoga.YogaConstants;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -84,6 +86,51 @@ public class ReactTextInputManager extends BaseViewManager<ReactEditText, Layout
|
||||
private static final int[] SPACING_TYPES = {
|
||||
Spacing.ALL, Spacing.LEFT, Spacing.RIGHT, Spacing.TOP, Spacing.BOTTOM,
|
||||
};
|
||||
private static final Map<String, String> REACT_PROPS_AUTOFILL_HINTS_MAP =
|
||||
new HashMap<String, String>() {
|
||||
{
|
||||
put("birthdate-day", HintConstants.AUTOFILL_HINT_BIRTH_DATE_DAY);
|
||||
put("birthdate-full", HintConstants.AUTOFILL_HINT_BIRTH_DATE_FULL);
|
||||
put("birthdate-month", HintConstants.AUTOFILL_HINT_BIRTH_DATE_MONTH);
|
||||
put("birthdate-year", HintConstants.AUTOFILL_HINT_BIRTH_DATE_YEAR);
|
||||
put("cc-csc", HintConstants.AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE);
|
||||
put("cc-exp", HintConstants.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE);
|
||||
put("cc-exp-day", HintConstants.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY);
|
||||
put("cc-exp-month", HintConstants.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH);
|
||||
put("cc-exp-year", HintConstants.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR);
|
||||
put("cc-number", HintConstants.AUTOFILL_HINT_CREDIT_CARD_NUMBER);
|
||||
put("email", HintConstants.AUTOFILL_HINT_EMAIL_ADDRESS);
|
||||
put("gender", HintConstants.AUTOFILL_HINT_GENDER);
|
||||
put("name", HintConstants.AUTOFILL_HINT_PERSON_NAME);
|
||||
put("name-family", HintConstants.AUTOFILL_HINT_PERSON_NAME_FAMILY);
|
||||
put("name-given", HintConstants.AUTOFILL_HINT_PERSON_NAME_GIVEN);
|
||||
put("name-middle", HintConstants.AUTOFILL_HINT_PERSON_NAME_MIDDLE);
|
||||
put("name-middle-initial", HintConstants.AUTOFILL_HINT_PERSON_NAME_MIDDLE_INITIAL);
|
||||
put("name-prefix", HintConstants.AUTOFILL_HINT_PERSON_NAME_PREFIX);
|
||||
put("name-suffix", HintConstants.AUTOFILL_HINT_PERSON_NAME_SUFFIX);
|
||||
put("password", HintConstants.AUTOFILL_HINT_PASSWORD);
|
||||
put("password-new", HintConstants.AUTOFILL_HINT_NEW_PASSWORD);
|
||||
put("postal-address", HintConstants.AUTOFILL_HINT_POSTAL_ADDRESS);
|
||||
put("postal-address-country", HintConstants.AUTOFILL_HINT_POSTAL_ADDRESS_COUNTRY);
|
||||
put(
|
||||
"postal-address-extended",
|
||||
HintConstants.AUTOFILL_HINT_POSTAL_ADDRESS_EXTENDED_ADDRESS);
|
||||
put(
|
||||
"postal-address-extended-postal-code",
|
||||
HintConstants.AUTOFILL_HINT_POSTAL_ADDRESS_EXTENDED_POSTAL_CODE);
|
||||
put("postal-address-locality", HintConstants.AUTOFILL_HINT_POSTAL_ADDRESS_LOCALITY);
|
||||
put("postal-address-region", HintConstants.AUTOFILL_HINT_POSTAL_ADDRESS_REGION);
|
||||
put("postal-code", HintConstants.AUTOFILL_HINT_POSTAL_CODE);
|
||||
put("street-address", HintConstants.AUTOFILL_HINT_POSTAL_ADDRESS_STREET_ADDRESS);
|
||||
put("sms-otp", HintConstants.AUTOFILL_HINT_SMS_OTP);
|
||||
put("tel", HintConstants.AUTOFILL_HINT_PHONE_NUMBER);
|
||||
put("tel-country-code", HintConstants.AUTOFILL_HINT_PHONE_COUNTRY_CODE);
|
||||
put("tel-national", HintConstants.AUTOFILL_HINT_PHONE_NATIONAL);
|
||||
put("tel-device", HintConstants.AUTOFILL_HINT_PHONE_NUMBER_DEVICE);
|
||||
put("username", HintConstants.AUTOFILL_HINT_USERNAME);
|
||||
put("username-new", HintConstants.AUTOFILL_HINT_NEW_USERNAME);
|
||||
}
|
||||
};
|
||||
|
||||
private static final int FOCUS_TEXT_INPUT = 1;
|
||||
private static final int BLUR_TEXT_INPUT = 2;
|
||||
@@ -659,32 +706,10 @@ public class ReactTextInputManager extends BaseViewManager<ReactEditText, Layout
|
||||
public void setTextContentType(ReactEditText view, @Nullable String autoCompleteType) {
|
||||
if (autoCompleteType == null) {
|
||||
setImportantForAutofill(view, View.IMPORTANT_FOR_AUTOFILL_NO);
|
||||
} else if ("username".equals(autoCompleteType)) {
|
||||
setAutofillHints(view, View.AUTOFILL_HINT_USERNAME);
|
||||
} else if ("password".equals(autoCompleteType)) {
|
||||
setAutofillHints(view, View.AUTOFILL_HINT_PASSWORD);
|
||||
} else if ("email".equals(autoCompleteType)) {
|
||||
setAutofillHints(view, View.AUTOFILL_HINT_EMAIL_ADDRESS);
|
||||
} else if ("name".equals(autoCompleteType)) {
|
||||
setAutofillHints(view, View.AUTOFILL_HINT_NAME);
|
||||
} else if ("tel".equals(autoCompleteType)) {
|
||||
setAutofillHints(view, View.AUTOFILL_HINT_PHONE);
|
||||
} else if ("street-address".equals(autoCompleteType)) {
|
||||
setAutofillHints(view, View.AUTOFILL_HINT_POSTAL_ADDRESS);
|
||||
} else if ("postal-code".equals(autoCompleteType)) {
|
||||
setAutofillHints(view, View.AUTOFILL_HINT_POSTAL_CODE);
|
||||
} else if ("cc-number".equals(autoCompleteType)) {
|
||||
setAutofillHints(view, View.AUTOFILL_HINT_CREDIT_CARD_NUMBER);
|
||||
} else if ("cc-csc".equals(autoCompleteType)) {
|
||||
setAutofillHints(view, View.AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE);
|
||||
} else if ("cc-exp".equals(autoCompleteType)) {
|
||||
setAutofillHints(view, View.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE);
|
||||
} else if ("cc-exp-month".equals(autoCompleteType)) {
|
||||
setAutofillHints(view, View.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH);
|
||||
} else if ("cc-exp-year".equals(autoCompleteType)) {
|
||||
setAutofillHints(view, View.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR);
|
||||
} else if ("off".equals(autoCompleteType)) {
|
||||
setImportantForAutofill(view, View.IMPORTANT_FOR_AUTOFILL_NO);
|
||||
} else if (REACT_PROPS_AUTOFILL_HINTS_MAP.containsKey(autoCompleteType)) {
|
||||
setAutofillHints(view, REACT_PROPS_AUTOFILL_HINTS_MAP.get(autoCompleteType));
|
||||
} else {
|
||||
throw new JSApplicationIllegalArgumentException(
|
||||
"Invalid autoCompleteType: " + autoCompleteType);
|
||||
|
||||
Reference in New Issue
Block a user