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) {
}
});
}