1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.service.autofill;
18 
19 import android.annotation.IntDef;
20 import android.annotation.NonNull;
21 import android.annotation.Nullable;
22 import android.content.IntentSender;
23 import android.os.Bundle;
24 import android.os.Parcel;
25 import android.os.Parcelable;
26 import android.view.View;
27 import android.view.inputmethod.InlineSuggestionsRequest;
28 
29 import com.android.internal.util.DataClass;
30 import com.android.internal.util.Preconditions;
31 
32 import java.lang.annotation.Retention;
33 import java.lang.annotation.RetentionPolicy;
34 import java.util.ArrayList;
35 import java.util.List;
36 
37 /**
38  * This class represents a request to an autofill service
39  * to interpret the screen and provide information to the system which views are
40  * interesting for saving and what are the possible ways to fill the inputs on
41  * the screen if applicable.
42  *
43  * @see AutofillService#onFillRequest(FillRequest, android.os.CancellationSignal, FillCallback)
44  */
45 @DataClass(
46         genToString = true,
47         genHiddenConstructor = true,
48         genHiddenConstDefs = true)
49 public final class FillRequest implements Parcelable {
50 
51     /**
52      * Indicates autofill was explicitly requested by the user.
53      *
54      * <p>Users typically make an explicit request to autofill a screen in two situations:
55      * <ul>
56      *   <li>The app disabled autofill (using {@link View#setImportantForAutofill(int)}.
57      *   <li>The service could not figure out how to autofill a screen (but the user knows the
58      *       service has data for that app).
59      * </ul>
60      *
61      * <p>This flag is particularly useful for the second case. For example, the service could offer
62      * a complex UI where the user can map which screen views belong to each user data, or it could
63      * offer a simpler UI where the user picks the data for just the view used to trigger the
64      * request (that would be the view whose
65      * {@link android.app.assist.AssistStructure.ViewNode#isFocused()} method returns {@code true}).
66      *
67      * <p>An explicit autofill request is triggered when the
68      * {@link android.view.autofill.AutofillManager#requestAutofill(View)} or
69      * {@link android.view.autofill.AutofillManager#requestAutofill(View, int, android.graphics.Rect)}
70      * is called. For example, standard {@link android.widget.TextView} views show an
71      * {@code AUTOFILL} option in the overflow menu that triggers such request.
72      */
73     public static final @RequestFlags int FLAG_MANUAL_REQUEST = 0x1;
74 
75     /**
76      * Indicates this request was made using
77      * <a href="AutofillService.html#CompatibilityMode">compatibility mode</a>.
78      */
79     public static final @RequestFlags int FLAG_COMPATIBILITY_MODE_REQUEST = 0x2;
80 
81     /**
82      * Indicates the request came from a password field.
83      *
84      * (TODO: b/141703197) Temporary fix for augmented autofill showing passwords.
85      *
86      * @hide
87      */
88     public static final @RequestFlags int FLAG_PASSWORD_INPUT_TYPE = 0x4;
89 
90     /**
91      * Indicates the view was not focused.
92      *
93      * <p><b>Note:</b> Defines the flag value to 0x10, because the flag value 0x08 has been defined
94      * in {@link AutofillManager}.</p>
95      *
96      * @hide
97      */
98     public static final @RequestFlags int FLAG_VIEW_NOT_FOCUSED = 0x10;
99 
100     /**
101      * Indicates the request supports fill dialog presentation for the fields, the
102      * system will send the request when the activity just started.
103      */
104     public static final @RequestFlags int FLAG_SUPPORTS_FILL_DIALOG = 0x40;
105 
106     /**
107      * Indicates the ime is showing while request coming.
108      * @hide
109      */
110     public static final @RequestFlags int FLAG_IME_SHOWING = 0x80;
111 
112     /**
113      * Indicates whether autofill session should reset the fill dialog state.
114      * @hide
115      */
116     public static final @RequestFlags int FLAG_RESET_FILL_DIALOG_STATE = 0x100;
117 
118     /**
119      * Indicate the fill request is made for PCC detection
120      * @hide
121      */
122     public static final @RequestFlags int FLAG_PCC_DETECTION = 0x200;
123 
124     /**
125      * Indicate whether the screen has credman field
126      * @hide
127      */
128     public static final @RequestFlags int FLAG_SCREEN_HAS_CREDMAN_FIELD = 0x400;
129 
130     /**
131      * Indicate whether the user has focused on a credman field view.
132      * @hide
133      */
134     public static final @RequestFlags int FLAG_VIEW_REQUESTS_CREDMAN_SERVICE = 0x800;
135 
136     /** @hide */
137     public static final int INVALID_REQUEST_ID = Integer.MIN_VALUE;
138 
139     /**
140      * Gets the unique id of this request.
141      */
142     private final int mId;
143 
144     /**
145      * Gets the contexts associated with each previous fill request.
146      *
147      * <p><b>Note:</b> Starting on Android {@link android.os.Build.VERSION_CODES#Q}, it could also
148      * include contexts from requests whose {@link SaveInfo} had the
149      * {@link SaveInfo#FLAG_DELAY_SAVE} flag.
150      */
151     private final @NonNull List<FillContext> mFillContexts;
152 
153     /**
154      * Sends a list of datatypes for the Autofill Provider.
155      *
156      * If this is populated, Autofill Provider should return data
157      * for the autofill hints requested here,
158      * even though the Autofill Provider may not have detected these types.
159      * The hints would be part of HintConstants:
160      * https://developer.android.com/reference/androidx/autofill/HintConstants
161      *
162      * This is populated if the platform's field detection is enabled.
163      */
164     private final @NonNull List<String> mHints;
165 
166     /**
167      * Gets the latest client state bundle set by the service in a
168      * {@link FillResponse.Builder#setClientState(Bundle) fill response}.
169      *
170      * <p><b>Note:</b> Prior to Android {@link android.os.Build.VERSION_CODES#P}, only client state
171      * bundles set by {@link FillResponse.Builder#setClientState(Bundle)} were considered. On
172      * Android {@link android.os.Build.VERSION_CODES#P} and higher, bundles set in the result of
173      * an authenticated request through the
174      * {@link android.view.autofill.AutofillManager#EXTRA_CLIENT_STATE} extra are
175      * also considered (and take precedence when set).
176      *
177      * @return The client state.
178      */
179     private final @Nullable Bundle mClientState;
180 
181     /**
182      * Gets the flags associated with this request.
183      *
184      * @return any combination of {@link #FLAG_MANUAL_REQUEST},
185      *         {@link #FLAG_SUPPORTS_FILL_DIALOG} and
186      *         {@link #FLAG_COMPATIBILITY_MODE_REQUEST}.
187      *
188      */
189     private final @RequestFlags int mFlags;
190 
191     /**
192      * Gets the {@link InlineSuggestionsRequest} associated
193      * with this request.
194      *
195      * <p>Autofill Framework will send a {@code @non-null} {@link InlineSuggestionsRequest} if
196      * currently inline suggestions are supported and can be displayed. If the Autofill service
197      * wants to show inline suggestions, they may return {@link Dataset} with valid
198      * {@link InlinePresentation}.</p>
199      *
200      * <p>The Autofill Service must set supportsInlineSuggestions in its XML to enable support
201      * for inline suggestions.</p>
202      *
203      * @return the suggestionspec
204      */
205     private final @Nullable InlineSuggestionsRequest mInlineSuggestionsRequest;
206 
207     /**
208      * Gets the {@link IntentSender} to send a delayed fill response.
209      *
210      * <p>The autofill service must first indicate that it wants to return a delayed
211      * {@link FillResponse} by setting {@link FillResponse#FLAG_DELAY_FILL} in a successful
212      * fill response. Then it can use this IntentSender to send an Intent with extra
213      * {@link AutofillService#EXTRA_FILL_RESPONSE} with the delayed response.</p>
214      *
215      * <p>Note that this may be null if a delayed fill response is not supported for
216      * this fill request.</p>
217      */
218     private final @Nullable IntentSender mDelayedFillIntentSender;
219 
onConstructed()220     private void onConstructed() {
221         Preconditions.checkCollectionElementsNotNull(mFillContexts, "contexts");
222         Preconditions.checkCollectionElementsNotNull(mHints, "hints");
223     }
224 
225 
226 
227     // Code below generated by codegen v1.0.23.
228     //
229     // DO NOT MODIFY!
230     // CHECKSTYLE:OFF Generated code
231     //
232     // To regenerate run:
233     // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/service/autofill/FillRequest.java
234     //
235     // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
236     //   Settings > Editor > Code Style > Formatter Control
237     //@formatter:off
238 
239 
240     /** @hide */
241     @IntDef(flag = true, prefix = "FLAG_", value = {
242         FLAG_MANUAL_REQUEST,
243         FLAG_COMPATIBILITY_MODE_REQUEST,
244         FLAG_PASSWORD_INPUT_TYPE,
245         FLAG_VIEW_NOT_FOCUSED,
246         FLAG_SUPPORTS_FILL_DIALOG,
247         FLAG_IME_SHOWING,
248         FLAG_RESET_FILL_DIALOG_STATE,
249         FLAG_PCC_DETECTION,
250         FLAG_SCREEN_HAS_CREDMAN_FIELD,
251         FLAG_VIEW_REQUESTS_CREDMAN_SERVICE
252     })
253     @Retention(RetentionPolicy.SOURCE)
254     @DataClass.Generated.Member
255     public @interface RequestFlags {}
256 
257     /** @hide */
258     @DataClass.Generated.Member
requestFlagsToString(@equestFlags int value)259     public static String requestFlagsToString(@RequestFlags int value) {
260         return com.android.internal.util.BitUtils.flagsToString(
261                 value, FillRequest::singleRequestFlagsToString);
262     }
263 
264     @DataClass.Generated.Member
singleRequestFlagsToString(@equestFlags int value)265     static String singleRequestFlagsToString(@RequestFlags int value) {
266         switch (value) {
267             case FLAG_MANUAL_REQUEST:
268                     return "FLAG_MANUAL_REQUEST";
269             case FLAG_COMPATIBILITY_MODE_REQUEST:
270                     return "FLAG_COMPATIBILITY_MODE_REQUEST";
271             case FLAG_PASSWORD_INPUT_TYPE:
272                     return "FLAG_PASSWORD_INPUT_TYPE";
273             case FLAG_VIEW_NOT_FOCUSED:
274                     return "FLAG_VIEW_NOT_FOCUSED";
275             case FLAG_SUPPORTS_FILL_DIALOG:
276                     return "FLAG_SUPPORTS_FILL_DIALOG";
277             case FLAG_IME_SHOWING:
278                     return "FLAG_IME_SHOWING";
279             case FLAG_RESET_FILL_DIALOG_STATE:
280                     return "FLAG_RESET_FILL_DIALOG_STATE";
281             case FLAG_PCC_DETECTION:
282                     return "FLAG_PCC_DETECTION";
283             case FLAG_SCREEN_HAS_CREDMAN_FIELD:
284                     return "FLAG_SCREEN_HAS_CREDMAN_FIELD";
285             case FLAG_VIEW_REQUESTS_CREDMAN_SERVICE:
286                     return "FLAG_VIEW_REQUESTS_CREDMAN_SERVICE";
287             default: return Integer.toHexString(value);
288         }
289     }
290 
291     /**
292      * Creates a new FillRequest.
293      *
294      * @param id
295      *   Gets the unique id of this request.
296      * @param fillContexts
297      *   Gets the contexts associated with each previous fill request.
298      *
299      *   <p><b>Note:</b> Starting on Android {@link android.os.Build.VERSION_CODES#Q}, it could also
300      *   include contexts from requests whose {@link SaveInfo} had the
301      *   {@link SaveInfo#FLAG_DELAY_SAVE} flag.
302      * @param hints
303      *   Sends a list of datatypes for the Autofill Provider.
304      *
305      *   If this is populated, Autofill Provider should return data
306      *   for the autofill hints requested here,
307      *   even though the Autofill Provider may not have detected these types.
308      *   The hints would be part of HintConstants:
309      *   https://developer.android.com/reference/androidx/autofill/HintConstants
310      *
311      *   This is populated if the platform's field detection is enabled.
312      * @param clientState
313      *   Gets the latest client state bundle set by the service in a
314      *   {@link FillResponse.Builder#setClientState(Bundle) fill response}.
315      *
316      *   <p><b>Note:</b> Prior to Android {@link android.os.Build.VERSION_CODES#P}, only client state
317      *   bundles set by {@link FillResponse.Builder#setClientState(Bundle)} were considered. On
318      *   Android {@link android.os.Build.VERSION_CODES#P} and higher, bundles set in the result of
319      *   an authenticated request through the
320      *   {@link android.view.autofill.AutofillManager#EXTRA_CLIENT_STATE} extra are
321      *   also considered (and take precedence when set).
322      * @param flags
323      *   Gets the flags associated with this request.
324      *
325      *   @return any combination of {@link #FLAG_MANUAL_REQUEST},
326      *           {@link #FLAG_SUPPORTS_FILL_DIALOG} and
327      *           {@link #FLAG_COMPATIBILITY_MODE_REQUEST}.
328      * @param inlineSuggestionsRequest
329      *   Gets the {@link InlineSuggestionsRequest} associated
330      *   with this request.
331      *
332      *   <p>Autofill Framework will send a {@code @non-null} {@link InlineSuggestionsRequest} if
333      *   currently inline suggestions are supported and can be displayed. If the Autofill service
334      *   wants to show inline suggestions, they may return {@link Dataset} with valid
335      *   {@link InlinePresentation}.</p>
336      *
337      *   <p>The Autofill Service must set supportsInlineSuggestions in its XML to enable support
338      *   for inline suggestions.</p>
339      * @param delayedFillIntentSender
340      *   Gets the {@link IntentSender} to send a delayed fill response.
341      *
342      *   <p>The autofill service must first indicate that it wants to return a delayed
343      *   {@link FillResponse} by setting {@link FillResponse#FLAG_DELAY_FILL} in a successful
344      *   fill response. Then it can use this IntentSender to send an Intent with extra
345      *   {@link AutofillService#EXTRA_FILL_RESPONSE} with the delayed response.</p>
346      *
347      *   <p>Note that this may be null if a delayed fill response is not supported for
348      *   this fill request.</p>
349      * @hide
350      */
351     @DataClass.Generated.Member
FillRequest( int id, @NonNull List<FillContext> fillContexts, @NonNull List<String> hints, @Nullable Bundle clientState, @RequestFlags int flags, @Nullable InlineSuggestionsRequest inlineSuggestionsRequest, @Nullable IntentSender delayedFillIntentSender)352     public FillRequest(
353             int id,
354             @NonNull List<FillContext> fillContexts,
355             @NonNull List<String> hints,
356             @Nullable Bundle clientState,
357             @RequestFlags int flags,
358             @Nullable InlineSuggestionsRequest inlineSuggestionsRequest,
359             @Nullable IntentSender delayedFillIntentSender) {
360         this.mId = id;
361         this.mFillContexts = fillContexts;
362         com.android.internal.util.AnnotationValidations.validate(
363                 NonNull.class, null, mFillContexts);
364         this.mHints = hints;
365         com.android.internal.util.AnnotationValidations.validate(
366                 NonNull.class, null, mHints);
367         this.mClientState = clientState;
368         this.mFlags = flags;
369 
370         Preconditions.checkFlagsArgument(
371                 mFlags,
372                 FLAG_MANUAL_REQUEST
373                         | FLAG_COMPATIBILITY_MODE_REQUEST
374                         | FLAG_PASSWORD_INPUT_TYPE
375                         | FLAG_VIEW_NOT_FOCUSED
376                         | FLAG_SUPPORTS_FILL_DIALOG
377                         | FLAG_IME_SHOWING
378                         | FLAG_RESET_FILL_DIALOG_STATE
379                         | FLAG_PCC_DETECTION
380                         | FLAG_SCREEN_HAS_CREDMAN_FIELD
381                         | FLAG_VIEW_REQUESTS_CREDMAN_SERVICE);
382         this.mInlineSuggestionsRequest = inlineSuggestionsRequest;
383         this.mDelayedFillIntentSender = delayedFillIntentSender;
384 
385         onConstructed();
386     }
387 
388     /**
389      * Gets the unique id of this request.
390      */
391     @DataClass.Generated.Member
getId()392     public int getId() {
393         return mId;
394     }
395 
396     /**
397      * Gets the contexts associated with each previous fill request.
398      *
399      * <p><b>Note:</b> Starting on Android {@link android.os.Build.VERSION_CODES#Q}, it could also
400      * include contexts from requests whose {@link SaveInfo} had the
401      * {@link SaveInfo#FLAG_DELAY_SAVE} flag.
402      */
403     @DataClass.Generated.Member
getFillContexts()404     public @NonNull List<FillContext> getFillContexts() {
405         return mFillContexts;
406     }
407 
408     /**
409      * Sends a list of datatypes for the Autofill Provider.
410      *
411      * If this is populated, Autofill Provider should return data
412      * for the autofill hints requested here,
413      * even though the Autofill Provider may not have detected these types.
414      * The hints would be part of HintConstants:
415      * https://developer.android.com/reference/androidx/autofill/HintConstants
416      *
417      * This is populated if the platform's field detection is enabled.
418      */
419     @DataClass.Generated.Member
getHints()420     public @NonNull List<String> getHints() {
421         return mHints;
422     }
423 
424     /**
425      * Gets the latest client state bundle set by the service in a
426      * {@link FillResponse.Builder#setClientState(Bundle) fill response}.
427      *
428      * <p><b>Note:</b> Prior to Android {@link android.os.Build.VERSION_CODES#P}, only client state
429      * bundles set by {@link FillResponse.Builder#setClientState(Bundle)} were considered. On
430      * Android {@link android.os.Build.VERSION_CODES#P} and higher, bundles set in the result of
431      * an authenticated request through the
432      * {@link android.view.autofill.AutofillManager#EXTRA_CLIENT_STATE} extra are
433      * also considered (and take precedence when set).
434      *
435      * @return The client state.
436      */
437     @DataClass.Generated.Member
getClientState()438     public @Nullable Bundle getClientState() {
439         return mClientState;
440     }
441 
442     /**
443      * Gets the flags associated with this request.
444      *
445      * @return any combination of {@link #FLAG_MANUAL_REQUEST},
446      *         {@link #FLAG_SUPPORTS_FILL_DIALOG} and
447      *         {@link #FLAG_COMPATIBILITY_MODE_REQUEST}.
448      */
449     @DataClass.Generated.Member
getFlags()450     public @RequestFlags int getFlags() {
451         return mFlags;
452     }
453 
454     /**
455      * Gets the {@link InlineSuggestionsRequest} associated
456      * with this request.
457      *
458      * <p>Autofill Framework will send a {@code @non-null} {@link InlineSuggestionsRequest} if
459      * currently inline suggestions are supported and can be displayed. If the Autofill service
460      * wants to show inline suggestions, they may return {@link Dataset} with valid
461      * {@link InlinePresentation}.</p>
462      *
463      * <p>The Autofill Service must set supportsInlineSuggestions in its XML to enable support
464      * for inline suggestions.</p>
465      *
466      * @return the suggestionspec
467      */
468     @DataClass.Generated.Member
getInlineSuggestionsRequest()469     public @Nullable InlineSuggestionsRequest getInlineSuggestionsRequest() {
470         return mInlineSuggestionsRequest;
471     }
472 
473     /**
474      * Gets the {@link IntentSender} to send a delayed fill response.
475      *
476      * <p>The autofill service must first indicate that it wants to return a delayed
477      * {@link FillResponse} by setting {@link FillResponse#FLAG_DELAY_FILL} in a successful
478      * fill response. Then it can use this IntentSender to send an Intent with extra
479      * {@link AutofillService#EXTRA_FILL_RESPONSE} with the delayed response.</p>
480      *
481      * <p>Note that this may be null if a delayed fill response is not supported for
482      * this fill request.</p>
483      */
484     @DataClass.Generated.Member
getDelayedFillIntentSender()485     public @Nullable IntentSender getDelayedFillIntentSender() {
486         return mDelayedFillIntentSender;
487     }
488 
489     @Override
490     @DataClass.Generated.Member
toString()491     public String toString() {
492         // You can override field toString logic by defining methods like:
493         // String fieldNameToString() { ... }
494 
495         return "FillRequest { " +
496                 "id = " + mId + ", " +
497                 "fillContexts = " + mFillContexts + ", " +
498                 "hints = " + mHints + ", " +
499                 "clientState = " + mClientState + ", " +
500                 "flags = " + requestFlagsToString(mFlags) + ", " +
501                 "inlineSuggestionsRequest = " + mInlineSuggestionsRequest + ", " +
502                 "delayedFillIntentSender = " + mDelayedFillIntentSender +
503         " }";
504     }
505 
506     @Override
507     @DataClass.Generated.Member
writeToParcel(@onNull Parcel dest, int flags)508     public void writeToParcel(@NonNull Parcel dest, int flags) {
509         // You can override field parcelling by defining methods like:
510         // void parcelFieldName(Parcel dest, int flags) { ... }
511 
512         byte flg = 0;
513         if (mClientState != null) flg |= 0x8;
514         if (mInlineSuggestionsRequest != null) flg |= 0x20;
515         if (mDelayedFillIntentSender != null) flg |= 0x40;
516         dest.writeByte(flg);
517         dest.writeInt(mId);
518         dest.writeParcelableList(mFillContexts, flags);
519         dest.writeStringList(mHints);
520         if (mClientState != null) dest.writeBundle(mClientState);
521         dest.writeInt(mFlags);
522         if (mInlineSuggestionsRequest != null) dest.writeTypedObject(mInlineSuggestionsRequest, flags);
523         if (mDelayedFillIntentSender != null) dest.writeTypedObject(mDelayedFillIntentSender, flags);
524     }
525 
526     @Override
527     @DataClass.Generated.Member
describeContents()528     public int describeContents() { return 0; }
529 
530     /** @hide */
531     @SuppressWarnings({"unchecked", "RedundantCast"})
532     @DataClass.Generated.Member
FillRequest(@onNull Parcel in)533     /* package-private */ FillRequest(@NonNull Parcel in) {
534         // You can override field unparcelling by defining methods like:
535         // static FieldType unparcelFieldName(Parcel in) { ... }
536 
537         byte flg = in.readByte();
538         int id = in.readInt();
539         List<FillContext> fillContexts = new ArrayList<>();
540         in.readParcelableList(fillContexts, FillContext.class.getClassLoader());
541         List<String> hints = new ArrayList<>();
542         in.readStringList(hints);
543         Bundle clientState = (flg & 0x8) == 0 ? null : in.readBundle();
544         int flags = in.readInt();
545         InlineSuggestionsRequest inlineSuggestionsRequest = (flg & 0x20) == 0 ? null : (InlineSuggestionsRequest) in.readTypedObject(InlineSuggestionsRequest.CREATOR);
546         IntentSender delayedFillIntentSender = (flg & 0x40) == 0 ? null : (IntentSender) in.readTypedObject(IntentSender.CREATOR);
547 
548         this.mId = id;
549         this.mFillContexts = fillContexts;
550         com.android.internal.util.AnnotationValidations.validate(
551                 NonNull.class, null, mFillContexts);
552         this.mHints = hints;
553         com.android.internal.util.AnnotationValidations.validate(
554                 NonNull.class, null, mHints);
555         this.mClientState = clientState;
556         this.mFlags = flags;
557 
558         Preconditions.checkFlagsArgument(
559                 mFlags,
560                 FLAG_MANUAL_REQUEST
561                         | FLAG_COMPATIBILITY_MODE_REQUEST
562                         | FLAG_PASSWORD_INPUT_TYPE
563                         | FLAG_VIEW_NOT_FOCUSED
564                         | FLAG_SUPPORTS_FILL_DIALOG
565                         | FLAG_IME_SHOWING
566                         | FLAG_RESET_FILL_DIALOG_STATE
567                         | FLAG_PCC_DETECTION
568                         | FLAG_SCREEN_HAS_CREDMAN_FIELD
569                         | FLAG_VIEW_REQUESTS_CREDMAN_SERVICE);
570         this.mInlineSuggestionsRequest = inlineSuggestionsRequest;
571         this.mDelayedFillIntentSender = delayedFillIntentSender;
572 
573         onConstructed();
574     }
575 
576     @DataClass.Generated.Member
577     public static final @NonNull Parcelable.Creator<FillRequest> CREATOR
578             = new Parcelable.Creator<FillRequest>() {
579         @Override
580         public FillRequest[] newArray(int size) {
581             return new FillRequest[size];
582         }
583 
584         @Override
585         public FillRequest createFromParcel(@NonNull Parcel in) {
586             return new FillRequest(in);
587         }
588     };
589 
590     @DataClass.Generated(
591             time = 1701010178309L,
592             codegenVersion = "1.0.23",
593             sourceFile = "frameworks/base/core/java/android/service/autofill/FillRequest.java",
594             inputSignatures = "public static final @android.service.autofill.FillRequest.RequestFlags int FLAG_MANUAL_REQUEST\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_COMPATIBILITY_MODE_REQUEST\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_PASSWORD_INPUT_TYPE\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_VIEW_NOT_FOCUSED\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_SUPPORTS_FILL_DIALOG\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_IME_SHOWING\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_RESET_FILL_DIALOG_STATE\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_PCC_DETECTION\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_SCREEN_HAS_CREDMAN_FIELD\npublic static final @android.service.autofill.FillRequest.RequestFlags int FLAG_VIEW_REQUESTS_CREDMAN_SERVICE\npublic static final  int INVALID_REQUEST_ID\nprivate final  int mId\nprivate final @android.annotation.NonNull java.util.List<android.service.autofill.FillContext> mFillContexts\nprivate final @android.annotation.NonNull java.util.List<java.lang.String> mHints\nprivate final @android.annotation.Nullable android.os.Bundle mClientState\nprivate final @android.service.autofill.FillRequest.RequestFlags int mFlags\nprivate final @android.annotation.Nullable android.view.inputmethod.InlineSuggestionsRequest mInlineSuggestionsRequest\nprivate final @android.annotation.Nullable android.content.IntentSender mDelayedFillIntentSender\nprivate  void onConstructed()\nclass FillRequest extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true, genHiddenConstructor=true, genHiddenConstDefs=true)")
595     @Deprecated
__metadata()596     private void __metadata() {}
597 
598 
599     //@formatter:on
600     // End of generated code
601 
602 }
603