in AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/MyAutofillService.java [147:190]
private void fetchDataAndGenerateResponse(
HashMap<String, FieldTypeWithHeuristics> fieldTypesByAutofillHint, boolean responseAuth,
boolean datasetAuth, boolean manual, FillCallback callback) {
if (responseAuth) {
// If the entire Autofill Response is authenticated, AuthActivity is used
// to generate Response.
IntentSender sender = AuthActivity.getAuthIntentSenderForResponse(this);
RemoteViews remoteViews = RemoteViewsHelper.viewsWithAuth(getPackageName(),
getString(R.string.autofill_sign_in_prompt));
FillResponse response = mResponseAdapter.buildResponse(sender, remoteViews);
if (response != null) {
callback.onSuccess(response);
}
} else {
mLocalAutofillDataSource.getAutofillDatasets(mClientViewMetadata.getAllHints(),
new DataCallback<List<DatasetWithFilledAutofillFields>>() {
@Override
public void onLoaded(List<DatasetWithFilledAutofillFields> datasets) {
if ((datasets == null || datasets.isEmpty()) && manual) {
IntentSender sender = ManualActivity
.getManualIntentSenderForResponse(MyAutofillService.this);
RemoteViews remoteViews = RemoteViewsHelper.viewsWithNoAuth(
getPackageName(),
getString(R.string.autofill_manual_prompt));
FillResponse response = mResponseAdapter.buildManualResponse(sender,
remoteViews);
if (response != null) {
callback.onSuccess(response);
}
} else {
FillResponse response = mResponseAdapter.buildResponse(
fieldTypesByAutofillHint, datasets, datasetAuth);
callback.onSuccess(response);
}
}
@Override
public void onDataNotAvailable(String msg, Object... params) {
logw(msg, params);
callback.onFailure(String.format(msg, params));
}
});
}
}