Loading services/autofill/java/com/android/server/autofill/Session.java +35 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -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 Loading Loading
services/autofill/java/com/android/server/autofill/Session.java +35 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -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 Loading