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