public void onFillRequest()

in AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/MyAutofillService.java [101:145]


    public void onFillRequest(@NonNull FillRequest request,
            @NonNull CancellationSignal cancellationSignal, @NonNull FillCallback callback) {
        List<FillContext> fillContexts = request.getFillContexts();
        List<AssistStructure> structures =
                fillContexts.stream().map(FillContext::getStructure).collect(toList());
        AssistStructure latestStructure = fillContexts.get(fillContexts.size() - 1).getStructure();
        ClientParser parser = new ClientParser(structures);

        // Check user's settings for authenticating Responses and Datasets.
        boolean responseAuth = mPreferences.isResponseAuth();
        boolean datasetAuth = mPreferences.isDatasetAuth();
        boolean manual = (request.getFlags() & FillRequest.FLAG_MANUAL_REQUEST) != 0;
        mLocalAutofillDataSource.getFieldTypeByAutofillHints(
                new DataCallback<HashMap<String, FieldTypeWithHeuristics>>() {
                    @Override
                    public void onLoaded(HashMap<String, FieldTypeWithHeuristics> fieldTypesByAutofillHint) {
                        DatasetAdapter datasetAdapter = new DatasetAdapter(parser);
                        ClientViewMetadataBuilder clientViewMetadataBuilder =
                                new ClientViewMetadataBuilder(parser, fieldTypesByAutofillHint);
                        mClientViewMetadata = clientViewMetadataBuilder.buildClientViewMetadata();
                        mResponseAdapter = new ResponseAdapter(MyAutofillService.this,
                                mClientViewMetadata, getPackageName(), datasetAdapter);
                        String packageName = latestStructure.getActivityComponent().getPackageName();
                        if (!mPackageVerificationRepository.putPackageSignatures(packageName)) {
                            callback.onFailure(getString(R.string.invalid_package_signature));
                            return;
                        }
                        if (logVerboseEnabled()) {
                            logv("onFillRequest(): clientState=%s",
                                    bundleToString(request.getClientState()));
                            dumpStructure(latestStructure);
                        }
                        cancellationSignal.setOnCancelListener(() ->
                                logw("Cancel autofill not implemented in this sample.")
                        );
                        fetchDataAndGenerateResponse(fieldTypesByAutofillHint, responseAuth,
                                datasetAuth, manual, callback);
                    }

                    @Override
                    public void onDataNotAvailable(String msg, Object... params) {

                    }
                });
    }