Example #1
0
        public AutofillFieldMetadata(AssistStructure.ViewNode view)
        {
            mAutofillId      = view.AutofillId;
            mAutofillType    = view.AutofillType;
            mAutofillOptions = view.GetAutofillOptions();
            mFocused         = view.IsFocused;
            var hints = AutofillHints.FilterForSupportedHints(view.GetAutofillHints());

            if (hints != null)
            {
                AutofillHints.ConvertToStoredHintNames(hints);
                SetHints(hints);
            }
        }
        void BindValueToNode(AssistStructure.ViewNode viewNode,
                             FilledAutofillField field, Dataset.Builder builder,
                             MutableBoolean setValueAtLeastOnce)
        {
            AutofillId autofillId = viewNode.AutofillId;

            if (autofillId == null)
            {
                Util.Logw("Autofill ID null for %s", viewNode.ToString());
                return;
            }
            int autofillType = (int)viewNode.AutofillType;

            switch (autofillType)
            {
            case (int)AutofillType.List:
                var options   = viewNode.GetAutofillOptions();
                int listValue = -1;
                if (options != null)
                {
                    listValue = Util.IndexOf(viewNode.GetAutofillOptions(), field.GetTextValue());
                }
                if (listValue != -1)
                {
                    builder.SetValue(autofillId, AutofillValue.ForList(listValue));
                    setValueAtLeastOnce.Value = true;
                }
                break;

            case (int)AutofillType.Date:
                var dateValue = field.GetDateValue();
                if (dateValue != null)
                {
                    builder.SetValue(autofillId, AutofillValue.ForDate(dateValue));
                    setValueAtLeastOnce.Value = true;
                }
                break;

            case (int)AutofillType.Text:
                string textValue = field.GetTextValue();
                if (textValue != null)
                {
                    builder.SetValue(autofillId, AutofillValue.ForText(textValue));
                    setValueAtLeastOnce.Value = true;
                }
                break;

            case (int)AutofillType.Toggle:
                var toggleValue = field.GetToggleValue();
                if (toggleValue != null)
                {
                    builder.SetValue(autofillId, AutofillValue.ForToggle(toggleValue));
                    setValueAtLeastOnce.Value = true;
                }
                break;

            case (int)AutofillType.None:
                break;

            default:
                Util.Logw("Invalid autofill type - %d", autofillType);
                break;
            }
        }
        /**
         * Populates a {@link Dataset.Builder} with appropriate values for each {@link AutofillId}
         * in a {@code AutofillFieldMetadataCollection}.
         *
         * In other words, it constructs an autofill
         * {@link Dataset.Builder} by applying saved values (from this {@code FilledAutofillFieldCollection})
         * to Views specified in a {@code AutofillFieldMetadataCollection}, which represents the current
         * page the user is on.
         */
        public bool ApplyToFields(AutofillFieldMetadataCollection autofillFieldMetadataCollection,
                                  Dataset.Builder datasetBuilder)
        {
            bool          setValueAtLeastOnce = false;
            List <string> allHints            = autofillFieldMetadataCollection.GetAllHints();

            for (var hintIndex = 0; hintIndex < allHints.Count; hintIndex++)
            {
                string hint = allHints[hintIndex];
                var    fillableAutofillFields = autofillFieldMetadataCollection.GetFieldsForHint(hint);
                if (fillableAutofillFields == null)
                {
                    continue;
                }

                for (var autofillFieldIndex = 0;
                     autofillFieldIndex < fillableAutofillFields.Count;
                     autofillFieldIndex++)
                {
                    var filledAutofillField = mHintMap.FirstOrDefault(x => x.Key == hint);
                    if (filledAutofillField.Value == null)
                    {
                        continue;
                    }

                    var        autofillFieldMetadata = fillableAutofillFields[autofillFieldIndex];
                    AutofillId autofillId            = autofillFieldMetadata.GetId();
                    var        autofillType          = autofillFieldMetadata.GetAutofillType();
                    switch (autofillType)
                    {
                    case AutofillType.List:
                        int listValue =
                            autofillFieldMetadata.GetAutofillOptionIndex(filledAutofillField.Value.GetTextValue());
                        if (listValue != -1)
                        {
                            datasetBuilder.SetValue(autofillId, AutofillValue.ForList(listValue));
                            setValueAtLeastOnce = true;
                        }

                        break;

                    case AutofillType.Date:
                        var dateValue = filledAutofillField.Value.GetDateValue();
                        if (dateValue != null)
                        {
                            datasetBuilder.SetValue(autofillId, AutofillValue.ForDate(dateValue));
                            setValueAtLeastOnce = true;
                        }

                        break;

                    case AutofillType.Text:
                        var textValue = filledAutofillField.Value.GetTextValue();
                        if (textValue != null)
                        {
                            datasetBuilder.SetValue(autofillId, AutofillValue.ForText(textValue));
                            setValueAtLeastOnce = true;
                        }

                        break;

                    case AutofillType.Toggle:
                        var toggleValue = filledAutofillField.Value.GetToggleValue();
                        if (toggleValue != null)
                        {
                            datasetBuilder.SetValue(autofillId, AutofillValue.ForToggle(toggleValue));
                            setValueAtLeastOnce = true;
                        }

                        break;

                    case  AutofillType.None:
                        break;

                    default:
                        Log.Warn(CommonUtil.TAG, "Invalid autofill type - " + autofillType);
                        break;
                    }
                }
            }

            return(setValueAtLeastOnce);
        }