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