1640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme/*
2640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * Copyright (C) 2017 The Android Open Source Project
3640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme *
4640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * Licensed under the Apache License, Version 2.0 (the "License");
5640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * you may not use this file except in compliance with the License.
6640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * You may obtain a copy of the License at
7640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme *
8640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme *      http://www.apache.org/licenses/LICENSE-2.0
9640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme *
10640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * Unless required by applicable law or agreed to in writing, software
11640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * distributed under the License is distributed on an "AS IS" BASIS,
12640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * See the License for the specific language governing permissions and
14640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * limitations under the License.
15640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme */
16640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
17640f30a7763b0a4b80c767acb84c740aac04768bFelipe Lemepackage android.view.autofill;
18640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
199668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmannimport static android.view.View.AUTOFILL_TYPE_DATE;
209668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmannimport static android.view.View.AUTOFILL_TYPE_LIST;
219668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmannimport static android.view.View.AUTOFILL_TYPE_TEXT;
229668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmannimport static android.view.View.AUTOFILL_TYPE_TOGGLE;
239f9ee25515591ef33281708c0ab911962f4364a6Felipe Lemeimport static android.view.autofill.Helper.sDebug;
24640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
259668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmannimport android.annotation.NonNull;
26640f30a7763b0a4b80c767acb84c740aac04768bFelipe Lemeimport android.annotation.Nullable;
27640f30a7763b0a4b80c767acb84c740aac04768bFelipe Lemeimport android.os.Parcel;
28640f30a7763b0a4b80c767acb84c740aac04768bFelipe Lemeimport android.os.Parcelable;
29a8fce3b29eff8ed452ee20a1938268b837a105adFelipe Lemeimport android.text.TextUtils;
30640f30a7763b0a4b80c767acb84c740aac04768bFelipe Lemeimport android.view.View;
31640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
329668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmannimport com.android.internal.util.Preconditions;
339668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann
349668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmannimport java.util.Objects;
359668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann
36640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme/**
37640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * Abstracts how a {@link View} can be autofilled by an
38640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * {@link android.service.autofill.AutofillService}.
39640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme *
40640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * <p>Each {@link AutofillValue} is associated with a {@code type}, as defined by
41640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme * {@link View#getAutofillType()}.
42640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme */
43640f30a7763b0a4b80c767acb84c740aac04768bFelipe Lemepublic final class AutofillValue implements Parcelable {
449668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann    private final @View.AutofillType int mType;
459668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann    private final @NonNull Object mValue;
46640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
479668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann    private AutofillValue(@View.AutofillType int type, @NonNull Object value) {
489668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        mType = type;
499668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        mValue = value;
50640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    }
51640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
52640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    /**
53640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     * Gets the value to autofill a text field.
54640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     *
559668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     * <p>See {@link View#AUTOFILL_TYPE_TEXT} for more info.</p>
569668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     *
579668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     * @throws IllegalStateException if the value is not a text value
589668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     */
599668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann    @NonNull public CharSequence getTextValue() {
609668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        Preconditions.checkState(isText(), "value must be a text value, not type=" + mType);
619668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        return (CharSequence) mValue;
629668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann    }
639668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann
649668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann    /**
659668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     * Checks is this is a text value.
669668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     *
679668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     * <p>See {@link View#AUTOFILL_TYPE_TEXT} for more info.</p>
68640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     */
699668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann    public boolean isText() {
709668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        return mType == AUTOFILL_TYPE_TEXT;
71640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    }
72640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
73640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    /**
74640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     * Gets the value to autofill a toggable field.
75640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     *
769668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     * <p>See {@link View#AUTOFILL_TYPE_TOGGLE} for more info.</p>
779668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     *
789668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     * @throws IllegalStateException if the value is not a toggle value
79640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     */
80640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    public boolean getToggleValue() {
819668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        Preconditions.checkState(isToggle(), "value must be a toggle value, not type=" + mType);
829668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        return (Boolean) mValue;
839668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann    }
849668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann
859668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann    /**
869668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     * Checks is this is a toggle value.
879668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     *
889668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     * <p>See {@link View#AUTOFILL_TYPE_TOGGLE} for more info.</p>
899668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     */
909668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann    public boolean isToggle() {
919668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        return mType == AUTOFILL_TYPE_TOGGLE;
92640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    }
93640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
94640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    /**
95640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     * Gets the value to autofill a selection list field.
96640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     *
979668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     * <p>See {@link View#AUTOFILL_TYPE_LIST} for more info.</p>
989668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     *
999668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     * @throws IllegalStateException if the value is not a list value
100640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     */
101640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    public int getListValue() {
1029668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        Preconditions.checkState(isList(), "value must be a list value, not type=" + mType);
1039668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        return (Integer) mValue;
1049668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann    }
1059668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann
1069668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann    /**
1079668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     * Checks is this is a list value.
1089668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     *
1099668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     * <p>See {@link View#AUTOFILL_TYPE_LIST} for more info.</p>
1109668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     */
1119668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann    public boolean isList() {
1129668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        return mType == AUTOFILL_TYPE_LIST;
113640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    }
114640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
115640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    /**
116640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     * Gets the value to autofill a date field.
117640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     *
1189668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     * <p>See {@link View#AUTOFILL_TYPE_DATE} for more info.</p>
1199668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     *
1209668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     * @throws IllegalStateException if the value is not a date value
121640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     */
122640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    public long getDateValue() {
1239668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        Preconditions.checkState(isDate(), "value must be a date value, not type=" + mType);
1249668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        return (Long) mValue;
1259668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann    }
1269668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann
1279668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann    /**
1289668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     * Checks is this is a date value.
1299668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     *
1309668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     * <p>See {@link View#AUTOFILL_TYPE_DATE} for more info.</p>
1319668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann     */
1329668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann    public boolean isDate() {
1339668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        return mType == AUTOFILL_TYPE_DATE;
134640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    }
135640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
13682e3793c15298f9c62edee23259c116606f10911Felipe Leme    /**
13782e3793c15298f9c62edee23259c116606f10911Felipe Leme     * Used to define whether a field is empty so it's not sent to service on save.
13882e3793c15298f9c62edee23259c116606f10911Felipe Leme     *
13982e3793c15298f9c62edee23259c116606f10911Felipe Leme     * <p>Only applies to some types, like text.
14082e3793c15298f9c62edee23259c116606f10911Felipe Leme     *
14182e3793c15298f9c62edee23259c116606f10911Felipe Leme     * @hide
14282e3793c15298f9c62edee23259c116606f10911Felipe Leme     */
14382e3793c15298f9c62edee23259c116606f10911Felipe Leme    public boolean isEmpty() {
14482e3793c15298f9c62edee23259c116606f10911Felipe Leme        return isText() && ((CharSequence) mValue).length() == 0;
14582e3793c15298f9c62edee23259c116606f10911Felipe Leme    }
14682e3793c15298f9c62edee23259c116606f10911Felipe Leme
147640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    /////////////////////////////////////
148640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    //  Object "contract" methods. //
149640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    /////////////////////////////////////
150640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
151640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    @Override
152640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    public int hashCode() {
1539668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        return mType + mValue.hashCode();
154640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    }
155640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
156640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    @Override
157640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    public boolean equals(Object obj) {
158640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme        if (this == obj) return true;
159640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme        if (obj == null) return false;
160640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme        if (getClass() != obj.getClass()) return false;
161640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme        final AutofillValue other = (AutofillValue) obj;
1629668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann
1639668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        if (mType != other.mType) return false;
1649668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann
1659668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        if (isText()) {
1669668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann            return mValue.toString().equals(other.mValue.toString());
167640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme        } else {
1689668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann            return Objects.equals(mValue, other.mValue);
169640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme        }
170640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    }
171640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
172640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    @Override
173640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    public String toString() {
1749f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme        if (!sDebug) return super.toString();
175640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
1769f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme        final StringBuilder string = new StringBuilder()
1779f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme                .append("[type=").append(mType)
1789f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme                .append(", value=");
1799f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme        if (isText()) {
1809f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme            string.append(((CharSequence) mValue).length()).append("_chars");
1819f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme        } else {
1829f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme            string.append(mValue);
1839f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme        }
1849f9ee25515591ef33281708c0ab911962f4364a6Felipe Leme        return string.append(']').toString();
185640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    }
186640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
187640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    /////////////////////////////////////
188640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    //  Parcelable "contract" methods. //
189640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    /////////////////////////////////////
190640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
191640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    @Override
192640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    public int describeContents() {
193640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme        return 0;
194640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    }
195640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
196640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    @Override
197640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    public void writeToParcel(Parcel parcel, int flags) {
1989668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        parcel.writeInt(mType);
1999668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann
2009668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        switch (mType) {
2019668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann            case AUTOFILL_TYPE_TEXT:
2029668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann                parcel.writeCharSequence((CharSequence) mValue);
2039668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann                break;
2049668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann            case AUTOFILL_TYPE_TOGGLE:
2059668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann                parcel.writeInt((Boolean) mValue ? 1 : 0);
2069668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann                break;
2079668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann            case AUTOFILL_TYPE_LIST:
2089668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann                parcel.writeInt((Integer) mValue);
2099668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann                break;
2109668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann            case AUTOFILL_TYPE_DATE:
2119668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann                parcel.writeLong((Long) mValue);
2129668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann                break;
2139668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        }
214640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    }
215640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
2169668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann    private AutofillValue(@NonNull Parcel parcel) {
2179668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        mType = parcel.readInt();
2189668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann
2199668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        switch (mType) {
2209668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann            case AUTOFILL_TYPE_TEXT:
2219668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann                mValue = parcel.readCharSequence();
2229668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann                break;
2239668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann            case AUTOFILL_TYPE_TOGGLE:
2249668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann                int rawValue = parcel.readInt();
2259668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann                mValue = rawValue != 0;
2269668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann                break;
2279668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann            case AUTOFILL_TYPE_LIST:
2289668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann                mValue = parcel.readInt();
2299668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann                break;
2309668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann            case AUTOFILL_TYPE_DATE:
2319668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann                mValue = parcel.readLong();
2329668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann                break;
2339668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann            default:
2349668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann                throw new IllegalArgumentException("type=" + mType + " not valid");
2359668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        }
236640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    }
237640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
238640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    public static final Parcelable.Creator<AutofillValue> CREATOR =
239640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme            new Parcelable.Creator<AutofillValue>() {
240640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme        @Override
241640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme        public AutofillValue createFromParcel(Parcel source) {
242640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme            return new AutofillValue(source);
243640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme        }
244640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
245640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme        @Override
246640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme        public AutofillValue[] newArray(int size) {
247640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme            return new AutofillValue[size];
248640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme        }
249640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    };
250640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
251640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    ////////////////////
252640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    // Factory methods //
253640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    ////////////////////
254640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
255640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    /**
256640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     * Creates a new {@link AutofillValue} to autofill a {@link View} representing a text field.
257640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     *
258640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     * <p>See {@link View#AUTOFILL_TYPE_TEXT} for more info.
259640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     */
260640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    public static AutofillValue forText(@Nullable CharSequence value) {
261a8fce3b29eff8ed452ee20a1938268b837a105adFelipe Leme        return value == null ? null : new AutofillValue(AUTOFILL_TYPE_TEXT,
262a8fce3b29eff8ed452ee20a1938268b837a105adFelipe Leme                TextUtils.trimNoCopySpans(value));
263640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    }
264640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
265640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    /**
266640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     * Creates a new {@link AutofillValue} to autofill a {@link View} representing a toggable
267640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     * field.
268640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     *
269640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     * <p>See {@link View#AUTOFILL_TYPE_TOGGLE} for more info.
270640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     */
271640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    public static AutofillValue forToggle(boolean value) {
2729668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        return new AutofillValue(AUTOFILL_TYPE_TOGGLE, value);
273640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    }
274640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
275640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    /**
276640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     * Creates a new {@link AutofillValue} to autofill a {@link View} representing a selection
277640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     * list.
278640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     *
279640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     * <p>See {@link View#AUTOFILL_TYPE_LIST} for more info.
280640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     */
281640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    public static AutofillValue forList(int value) {
2829668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        return new AutofillValue(AUTOFILL_TYPE_LIST, value);
283640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    }
284640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme
285640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    /**
286640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     * Creates a new {@link AutofillValue} to autofill a {@link View} representing a date.
287640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     *
288640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     * <p>See {@link View#AUTOFILL_TYPE_DATE} for more info.
289640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme     */
290640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    public static AutofillValue forDate(long value) {
2919668903731c272e51ce610598c052ef411c9d89fPhilip P. Moltmann        return new AutofillValue(AUTOFILL_TYPE_DATE, value);
292640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme    }
293640f30a7763b0a4b80c767acb84c740aac04768bFelipe Leme}
294