private void fetchDataAndGenerateResponse()

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