FillRequest.java revision c7619632145c23e6b5dd45620094e0bc686ad2db
1e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber/* 2e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * Copyright (C) 2017 The Android Open Source Project 3e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * 4e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * you may not use this file except in compliance with the License. 6e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * You may obtain a copy of the License at 7e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * 8e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * 10e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * Unless required by applicable law or agreed to in writing, software 11e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * See the License for the specific language governing permissions and 14e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * limitations under the License. 15e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber */ 16e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 17a5750e0dad9e90f2195ce36f2c4457fa04b2b83eMark Salyzynpackage android.service.autofill; 18a5750e0dad9e90f2195ce36f2c4457fa04b2b83eMark Salyzyn 19a5750e0dad9e90f2195ce36f2c4457fa04b2b83eMark Salyzynimport android.annotation.IntDef; 20050b28a593350047845a45a14cc5026221ac1620James Dongimport android.annotation.NonNull; 21050b28a593350047845a45a14cc5026221ac1620James Dongimport android.annotation.Nullable; 22050b28a593350047845a45a14cc5026221ac1620James Dongimport android.app.assist.AssistStructure; 23050b28a593350047845a45a14cc5026221ac1620James Dongimport android.os.Bundle; 24e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huberimport android.os.CancellationSignal; 256b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dongimport android.os.Parcel; 266b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dongimport android.os.Parcelable; 27e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huberimport com.android.internal.util.Preconditions; 28e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 296b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dongimport java.lang.annotation.Retention; 30082830f92373a1b9e512dbbfb940187ffa1c2c6fAndreas Huberimport java.lang.annotation.RetentionPolicy; 31365a963142093a1cd8efdcea76b5f65096a5b115James Dongimport java.util.concurrent.atomic.AtomicInteger; 32e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 33e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber/** 34e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * This class represents a request to an {@link AutofillService autofill provider} 356b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dong * to interpret the screen and provide information to the system which views are 366b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dong * interesting for saving and what are the possible ways to fill the inputs on 376b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dong * the screen if applicable. 386b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dong * 39082830f92373a1b9e512dbbfb940187ffa1c2c6fAndreas Huber * @see AutofillService#onFillRequest(FillRequest, CancellationSignal, FillCallback) 406b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dong */ 416b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dongpublic final class FillRequest implements Parcelable { 426b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dong /** 435ff1dd576bb93c45b44088a51544a18fc43ebf58Steve Block * Indicates autofill was explicitly requested by the user. 446b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dong */ 456b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dong public static final int FLAG_MANUAL_REQUEST = 0x1; 466b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dong 476b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dong /** @hide */ 486b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dong public static final int INVALID_REQUEST_ID = Integer.MIN_VALUE; 496b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dong 506b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dong /** @hide */ 516b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dong @IntDef( 52e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber flag = true, 5346d26dd29195450db15704e84d65740628a821fbChong Zhang value = {FLAG_MANUAL_REQUEST}) 5446d26dd29195450db15704e84d65740628a821fbChong Zhang @Retention(RetentionPolicy.SOURCE) 55e2ffd5b583da9d30d96710b0e8879e90b2b51d30Glenn Kasten @interface RequestFlags{} 566b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dong 5746d26dd29195450db15704e84d65740628a821fbChong Zhang private final int mId; 58f88d1d8e63442d09303ca1090e1ee12e22040500Marco Nelissen private final @RequestFlags int mFlags; 59f88d1d8e63442d09303ca1090e1ee12e22040500Marco Nelissen private final @NonNull AssistStructure mStructure; 60f88d1d8e63442d09303ca1090e1ee12e22040500Marco Nelissen private final @Nullable Bundle mClientState; 6146292fb347d72a314d985e34e5e3743d846cb9b6James Dong 6246d26dd29195450db15704e84d65740628a821fbChong Zhang private FillRequest(@NonNull Parcel parcel) { 63f88d1d8e63442d09303ca1090e1ee12e22040500Marco Nelissen mId = parcel.readInt(); 646b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dong mStructure = parcel.readParcelable(null); 65af5dd7753e62353411cf0daf3b513c38818e9662Andreas Huber mClientState = parcel.readBundle(); 6646d26dd29195450db15704e84d65740628a821fbChong Zhang mFlags = parcel.readInt(); 6746d26dd29195450db15704e84d65740628a821fbChong Zhang } 68ab334fd351ae5a0e18903da123d63e565b536874Glenn Kasten 6946d26dd29195450db15704e84d65740628a821fbChong Zhang /** @hide */ 70be6ec71af2d12e2a55f2f0b1b77d3fa5d593a1c7James Dong public FillRequest(int id, @NonNull AssistStructure structure, 71e33054eb968cbf8ccaee1b0ff0301403902deed6Glenn Kasten @Nullable Bundle clientState, @RequestFlags int flags) { 72e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent mId = id; 73e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent mFlags = Preconditions.checkFlagsArgument(flags, FLAG_MANUAL_REQUEST); 74e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent mStructure = Preconditions.checkNotNull(structure, "structure"); 75dd8104cc5367262f0e5f13df4e79f131e8d560bbGlenn Kasten mClientState = clientState; 76e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent } 77e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent 78e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent /** 79838b3d8bafa4a781e277870dee4e0390165cff52Glenn Kasten * @return The unique id of this request. 80e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent */ 81e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent public int getId() { 8284333e0475bc911adc16417f4ca327c975cf6c36Andreas Huber return mId; 83e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent } 84e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent 85e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent /** 86e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent * @return The flags associated with this request. 87e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent * 88e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent * @see #FLAG_MANUAL_REQUEST 89e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent */ 90be71aa29a3c86d2e01cd17839d2a72ab09a1bce5Svet Ganov public @RequestFlags int getFlags() { 91bce50bfc3846ab008bafa75c5d3f29fd7b5395f7Glenn Kasten return mFlags; 92e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent } 93e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent 94838b3d8bafa4a781e277870dee4e0390165cff52Glenn Kasten /** 95e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent * @return The structure capturing the UI state. 963e98ecd18c906dc3ac2ff1a890f0b3163447272dGlenn Kasten */ 973e98ecd18c906dc3ac2ff1a890f0b3163447272dGlenn Kasten public @NonNull AssistStructure getStructure() { 983e98ecd18c906dc3ac2ff1a890f0b3163447272dGlenn Kasten return mStructure; 99e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent } 100e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent 101e49f2b424318aa8e830e7a1338e5e32ab82992f9Eric Laurent /** 102e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * Gets the extra client state returned from the last {@link 103e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * AutofillService#onFillRequest(FillRequest, CancellationSignal, FillCallback) 104e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * fill request}. 105e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * <p> 106b44c9d2bdc0d5b9cb03254022a58e017b516e9e6James Dong * Once a {@link AutofillService#onSaveRequest(SaveRequest, SaveCallback) 107e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * save request} is made the client state is cleared. 108e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * 109e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber * @return The client state. 110e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber */ 111e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber public @Nullable Bundle getClientState() { 112e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber return mClientState; 113e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber } 114e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 1156b61f4355db1974cd0f0dfaa4effdd7117b9f09bJames Dong @Override 116e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber public int describeContents() { 117e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber return 0; 118e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber } 119e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 1206e20bdf799a6f4efa6c42121a958634ea32ed5ccJames Dong @Override 1216e20bdf799a6f4efa6c42121a958634ea32ed5ccJames Dong public void writeToParcel(Parcel parcel, int flags) { 1226e20bdf799a6f4efa6c42121a958634ea32ed5ccJames Dong parcel.writeInt(mId); 1236e20bdf799a6f4efa6c42121a958634ea32ed5ccJames Dong parcel.writeParcelable(mStructure, flags); 124d3d4e5069e1af0437c4f5a7b4ba344bda5b937afJames Dong parcel.writeBundle(mClientState); 125d3d4e5069e1af0437c4f5a7b4ba344bda5b937afJames Dong parcel.writeInt(mFlags); 126d707fcb3e29707ca4a5935c294ef0b38eb5aba5fJames Dong } 127f60cafe0e6aad8f9ce54660fa88b651ae4e749e6James Dong 128f60cafe0e6aad8f9ce54660fa88b651ae4e749e6James Dong public static final Parcelable.Creator<FillRequest> CREATOR = 129f60cafe0e6aad8f9ce54660fa88b651ae4e749e6James Dong new Parcelable.Creator<FillRequest>() { 130f60cafe0e6aad8f9ce54660fa88b651ae4e749e6James Dong @Override 131f60cafe0e6aad8f9ce54660fa88b651ae4e749e6James Dong public FillRequest createFromParcel(Parcel parcel) { 132e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber return new FillRequest(parcel); 133e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber } 134e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber 135eaae38445a340c4857c1c5569475879a728e63b7James Dong @Override 136e2ffd5b583da9d30d96710b0e8879e90b2b51d30Glenn Kasten public FillRequest[] newArray(int size) { 137e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber return new FillRequest[size]; 138e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber } 139eaae38445a340c4857c1c5569475879a728e63b7James Dong }; 140e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber} 141e7c9cb48fec02697227bd847cd2e69432659adfdAndreas Huber