1013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov/* 2013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * Copyright (C) 2017 The Android Open Source Project 3013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * 4013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * Licensed under the Apache License, Version 2.0 (the "License"); 5013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * you may not use this file except in compliance with the License. 6013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * You may obtain a copy of the License at 7013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * 8013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * http://www.apache.org/licenses/LICENSE-2.0 9013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * 10013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * Unless required by applicable law or agreed to in writing, software 11013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * distributed under the License is distributed on an "AS IS" BASIS, 12013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * See the License for the specific language governing permissions and 14013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * limitations under the License. 15013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov */ 16013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov 17013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganovpackage android.service.autofill; 18013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov 19013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganovimport android.annotation.NonNull; 20013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganovimport android.annotation.Nullable; 21013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganovimport android.os.Bundle; 22013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganovimport android.os.CancellationSignal; 23013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganovimport android.os.Parcel; 24013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganovimport android.os.Parcelable; 25013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganovimport com.android.internal.util.Preconditions; 26013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov 27013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganovimport java.util.ArrayList; 28013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganovimport java.util.List; 29013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov 30013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov/** 31013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * This class represents a request to an {@link AutofillService 32013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * autofill provider} to save applicable data entered by the user. 33013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * 34013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * @see AutofillService#onSaveRequest(SaveRequest, SaveCallback) 35013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov */ 36013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganovpublic final class SaveRequest implements Parcelable { 37013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov private final @NonNull ArrayList<FillContext> mFillContexts; 38013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov private final @Nullable Bundle mClientState; 39013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov 40013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov /** @hide */ 41013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov public SaveRequest(@NonNull ArrayList<FillContext> fillContexts, 42013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov @Nullable Bundle clientState) { 43013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov mFillContexts = Preconditions.checkNotNull(fillContexts, "fillContexts"); 44013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov mClientState = clientState; 45013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov } 46013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov 47013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov private SaveRequest(@NonNull Parcel parcel) { 48013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov this(parcel.readTypedArrayList(null), parcel.readBundle()); 49013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov } 50013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov 51013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov /** 52013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * @return The contexts associated with each previous fill request. 53013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov */ 54013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov public @NonNull List<FillContext> getFillContexts() { 55013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov return mFillContexts; 56013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov } 57013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov 58013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov /** 59013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * Gets the extra client state returned from the last {@link 60013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * AutofillService#onFillRequest(FillRequest, CancellationSignal, FillCallback)} 61013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * fill request}. 62013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * 63013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov * @return The client state. 64013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov */ 65013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov public @Nullable Bundle getClientState() { 66013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov return mClientState; 67013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov } 68013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov 69013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov @Override 70013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov public int describeContents() { 71013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov return 0; 72013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov } 73013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov 74013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov @Override 75013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov public void writeToParcel(Parcel parcel, int flags) { 76013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov parcel.writeTypedArrayList(mFillContexts, flags); 77013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov parcel.writeBundle(mClientState); 78013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov } 79013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov 80013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov public static final Creator<SaveRequest> CREATOR = 81013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov new Creator<SaveRequest>() { 82013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov @Override 83013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov public SaveRequest createFromParcel(Parcel parcel) { 84013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov return new SaveRequest(parcel); 85013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov } 86013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov 87013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov @Override 88013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov public SaveRequest[] newArray(int size) { 89013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov return new SaveRequest[size]; 90013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov } 91013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov }; 92013efe173e56612a910ebd8576480ce4ef005e3cSvet Ganov} 93