summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/autofill/java/com/android/server/autofill/Session.java39
1 files changed, 35 insertions, 4 deletions
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index e19ef1074ebf..65e1916c27de 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -134,6 +134,7 @@ import android.service.autofill.AutofillService;
import android.service.autofill.CompositeUserData;
import android.service.autofill.Dataset;
import android.service.autofill.Dataset.DatasetEligibleReason;
+import android.service.autofill.Field;
import android.service.autofill.FieldClassification;
import android.service.autofill.FieldClassification.Match;
import android.service.autofill.FieldClassificationUserData;
@@ -2578,10 +2579,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
if (sDebug) Slog.d(TAG, "Updating client state from auth dataset");
mClientState = newClientState;
}
- Dataset dataset = (Dataset) result;
- FillResponse temp = new FillResponse.Builder().addDataset(dataset).build();
- temp = getEffectiveFillResponse(temp);
- dataset = temp.getDatasets().get(0);
+ Dataset dataset = getEffectiveDatasetForAuthentication((Dataset) result);
final Dataset oldDataset = authenticatedResponse.getDatasets().get(datasetIdx);
if (!isAuthResultDatasetEphemeral(oldDataset, data)) {
authenticatedResponse.getDatasets().set(datasetIdx, dataset);
@@ -2607,6 +2605,39 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
}
}
+ Dataset getEffectiveDatasetForAuthentication(Dataset authenticatedDataset) {
+ FillResponse response = new FillResponse.Builder().addDataset(authenticatedDataset).build();
+ response = getEffectiveFillResponse(response);
+ if (DBG) {
+ Slog.d(TAG, "DBG: authenticated effective response: " + response);
+ }
+ if (response == null || response.getDatasets().size() == 0) {
+ Log.wtf(TAG, "No datasets in fill response on authentication. response = "
+ + (response == null ? "null" : response.toString()));
+ return authenticatedDataset;
+ }
+ List<Dataset> datasets = response.getDatasets();
+ Dataset result = response.getDatasets().get(0);
+ if (datasets.size() > 1) {
+ Dataset.Builder builder = new Dataset.Builder();
+ for (Dataset dataset : datasets) {
+ if (!dataset.getFieldIds().isEmpty()) {
+ for (int i = 0; i < dataset.getFieldIds().size(); i++) {
+ builder.setField(dataset.getFieldIds().get(i),
+ new Field.Builder().setValue(dataset.getFieldValues().get(i))
+ .build());
+ }
+ }
+ }
+ result = builder.setId(authenticatedDataset.getId()).build();
+ }
+
+ if (DBG) {
+ Slog.d(TAG, "DBG: authenticated effective dataset after auth: " + result);
+ }
+ return result;
+ }
+
/**
* Returns whether the dataset returned from the authentication result is ephemeral or not.
* See {@link AutofillManager#EXTRA_AUTHENTICATION_RESULT_EPHEMERAL_DATASET} for more