From c380e18e31cdc922d42b11c016482857ad47b9a9 Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Fri, 23 Mar 2018 11:45:38 -0700 Subject: [PATCH] Properly set input type on autofill compat mode. Test: atest CtsAutoFillServiceTestCases:android.autofillservice.cts.VirtualContainerActivityTest#testAutofillSync\ CtsAutoFillServiceTestCases:android.autofillservice.cts.VirtualContainerActivityCompatModeTest#testAutofillSync Fixes: 76173462 Change-Id: Ie400ed5d4426febc34b02f68d6be4d86bc11034f --- core/java/android/view/View.java | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index afff19b0be315..5a7dda47bcf4a 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -8536,22 +8536,25 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } structure.setHint(info.getHintText()); } - if ((info.getText() != null || info.getError() != null)) { - structure.setText(info.getText(), info.getTextSelectionStart(), - info.getTextSelectionEnd()); - if (forAutofill) { - if (info.isEditable()) { - structure.setDataIsSensitive(true); + CharSequence text = info.getText(); + boolean hasText = text != null || info.getError() != null; + if (hasText) { + structure.setText(text, info.getTextSelectionStart(), info.getTextSelectionEnd()); + } + if (forAutofill) { + if (info.isEditable()) { + structure.setDataIsSensitive(true); + if (hasText) { structure.setAutofillType(AUTOFILL_TYPE_TEXT); - final AutofillValue autofillValue = AutofillValue.forText(structure.getText()); - structure.setAutofillValue(autofillValue); - if (info.isPassword()) { - structure.setInputType(InputType.TYPE_CLASS_TEXT - | InputType.TYPE_TEXT_VARIATION_PASSWORD); - } - } else { - structure.setDataIsSensitive(false); + structure.setAutofillValue(AutofillValue.forText(text)); } + int inputType = info.getInputType(); + if (inputType == 0 && info.isPassword()) { + inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD; + } + structure.setInputType(inputType); + } else { + structure.setDataIsSensitive(false); } } final int NCHILDREN = info.getChildCount();