diff options
Diffstat (limited to 'input')
19 files changed, 152 insertions, 158 deletions
diff --git a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AuthActivity.java b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AuthActivity.java index cbf7e6dc..30591c0e 100644 --- a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AuthActivity.java +++ b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AuthActivity.java @@ -34,8 +34,7 @@ import android.widget.Toast; import com.example.android.autofillframework.R; import com.example.android.autofillframework.multidatasetservice.datasource.SharedPrefsAutofillRepository; -import com.example.android.autofillframework.multidatasetservice.model.AutofillFieldsCollection; -import com.example.android.autofillframework.multidatasetservice.model.ClientFormData; +import com.example.android.autofillframework.multidatasetservice.model.FilledAutofillFieldCollection; import com.example.android.autofillframework.multidatasetservice.settings.MyPreferences; import java.util.HashMap; @@ -127,10 +126,10 @@ public class AuthActivity extends Activity { AssistStructure structure = intent.getParcelableExtra(EXTRA_ASSIST_STRUCTURE); StructureParser parser = new StructureParser(structure); parser.parseForFill(); - AutofillFieldsCollection autofillFields = parser.getAutofillFields(); + AutofillFieldMetadataCollection autofillFields = parser.getAutofillFields(); int saveTypes = autofillFields.getSaveType(); mReplyIntent = new Intent(); - HashMap<String, ClientFormData> clientFormDataMap = + HashMap<String, FilledAutofillFieldCollection> clientFormDataMap = SharedPrefsAutofillRepository.getInstance(this).getClientFormData (autofillFields.getFocusedHints(), autofillFields.getAllHints()); if (forResponse) { diff --git a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/AutofillField.java b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AutofillFieldMetadata.java index 095c7611..b4cf8992 100644 --- a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/AutofillField.java +++ b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AutofillFieldMetadata.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.example.android.autofillframework.multidatasetservice.model; +package com.example.android.autofillframework.multidatasetservice; import android.app.assist.AssistStructure.ViewNode; import android.service.autofill.SaveInfo; @@ -25,7 +25,7 @@ import android.view.autofill.AutofillId; * also contains a {@code mSaveType} flag that is calculated based on the {@link ViewNode}]'s * autofill hints. */ -public class AutofillField { +public class AutofillFieldMetadata { private int mSaveType = 0; private String[] mAutofillHints; private AutofillId mAutofillId; @@ -33,7 +33,7 @@ public class AutofillField { private CharSequence[] mAutofillOptions; private boolean mFocused; - public AutofillField(ViewNode view) { + public AutofillFieldMetadata(ViewNode view) { mAutofillId = view.getAutofillId(); mAutofillType = view.getAutofillType(); mAutofillOptions = view.getAutofillOptions(); diff --git a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/AutofillFieldsCollection.java b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AutofillFieldMetadataCollection.java index ace69870..f0a9e346 100644 --- a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/AutofillFieldsCollection.java +++ b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AutofillFieldMetadataCollection.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.example.android.autofillframework.multidatasetservice.model; +package com.example.android.autofillframework.multidatasetservice; import android.view.autofill.AutofillId; @@ -23,32 +23,32 @@ import java.util.HashMap; import java.util.List; /** - * Data structure that stores a collection of {@code AutofillField}s. Contains all of the client's - * {@code View} hierarchy autofill-relevant metadata. + * Data structure that stores a collection of {@code AutofillFieldMetadata}s. Contains all of the + * client's {@code View} hierarchy autofill-relevant metadata. */ -public final class AutofillFieldsCollection { +public final class AutofillFieldMetadataCollection { private final List<AutofillId> mAutofillIds = new ArrayList<>(); - private final HashMap<String, List<AutofillField>> mAutofillHintsToFieldsMap = new HashMap<>(); + private final HashMap<String, List<AutofillFieldMetadata>> mAutofillHintsToFieldsMap = new HashMap<>(); private final List<String> mAllAutofillHints = new ArrayList<>(); private final List<String> mFocusedAutofillHints = new ArrayList<>(); private int mSize = 0; private int mSaveType = 0; - public void add(AutofillField autofillField) { - mSaveType |= autofillField.getSaveType(); + public void add(AutofillFieldMetadata autofillFieldMetadata) { + mSaveType |= autofillFieldMetadata.getSaveType(); mSize++; - mAutofillIds.add(autofillField.getId()); - List<String> hintsList = Arrays.asList(autofillField.getHints()); + mAutofillIds.add(autofillFieldMetadata.getId()); + List<String> hintsList = Arrays.asList(autofillFieldMetadata.getHints()); mAllAutofillHints.addAll(hintsList); - if (autofillField.isFocused()) { + if (autofillFieldMetadata.isFocused()) { mFocusedAutofillHints.addAll(hintsList); } - for (String hint : autofillField.getHints()) { + for (String hint : autofillFieldMetadata.getHints()) { if (mAutofillHintsToFieldsMap.get(hint) == null) { - mAutofillHintsToFieldsMap.put(hint, new ArrayList<AutofillField>()); + mAutofillHintsToFieldsMap.put(hint, new ArrayList<AutofillFieldMetadata>()); } - mAutofillHintsToFieldsMap.get(hint).add(autofillField); + mAutofillHintsToFieldsMap.get(hint).add(autofillFieldMetadata); } } @@ -60,7 +60,7 @@ public final class AutofillFieldsCollection { return mAutofillIds.toArray(new AutofillId[mSize]); } - public List<AutofillField> getFieldsForHint(String hint) { + public List<AutofillFieldMetadata> getFieldsForHint(String hint) { return mAutofillHintsToFieldsMap.get(hint); } diff --git a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AutofillHelper.java b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AutofillHelper.java index f5915179..6ba758b2 100644 --- a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AutofillHelper.java +++ b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AutofillHelper.java @@ -25,8 +25,7 @@ import android.view.autofill.AutofillId; import android.widget.RemoteViews; import com.example.android.autofillframework.R; -import com.example.android.autofillframework.multidatasetservice.model.AutofillFieldsCollection; -import com.example.android.autofillframework.multidatasetservice.model.ClientFormData; +import com.example.android.autofillframework.multidatasetservice.model.FilledAutofillFieldCollection; import java.util.HashMap; import java.util.Set; @@ -43,8 +42,8 @@ public final class AutofillHelper { * client View. */ public static Dataset newDataset(Context context, - AutofillFieldsCollection autofillFields, ClientFormData clientFormData, boolean datasetAuth) { - String datasetName = clientFormData.getDatasetName(); + AutofillFieldMetadataCollection autofillFields, FilledAutofillFieldCollection filledAutofillFieldCollection, boolean datasetAuth) { + String datasetName = filledAutofillFieldCollection.getDatasetName(); if (datasetName != null) { Dataset.Builder datasetBuilder = new Dataset.Builder (newRemoteViews(context.getPackageName(), datasetName)); @@ -52,7 +51,7 @@ public final class AutofillHelper { IntentSender sender = AuthActivity.getAuthIntentSenderForDataset(context, datasetName); datasetBuilder.setAuthentication(sender); } - boolean setValueAtLeastOnce = clientFormData.applyToFields(autofillFields, datasetBuilder); + boolean setValueAtLeastOnce = filledAutofillFieldCollection.applyToFields(autofillFields, datasetBuilder); if (setValueAtLeastOnce) { return datasetBuilder.build(); } @@ -71,15 +70,15 @@ public final class AutofillHelper { * be sent back to the client View. */ public static FillResponse newResponse(Context context, - boolean datasetAuth, AutofillFieldsCollection autofillFields, - HashMap<String, ClientFormData> clientFormDataMap) { + boolean datasetAuth, AutofillFieldMetadataCollection autofillFields, + HashMap<String, FilledAutofillFieldCollection> clientFormDataMap) { FillResponse.Builder responseBuilder = new FillResponse.Builder(); if (clientFormDataMap != null) { Set<String> datasetNames = clientFormDataMap.keySet(); for (String datasetName : datasetNames) { - ClientFormData clientFormData = clientFormDataMap.get(datasetName); - if (clientFormData != null) { - Dataset dataset = newDataset(context, autofillFields, clientFormData, datasetAuth); + FilledAutofillFieldCollection filledAutofillFieldCollection = clientFormDataMap.get(datasetName); + if (filledAutofillFieldCollection != null) { + Dataset dataset = newDataset(context, autofillFields, filledAutofillFieldCollection, datasetAuth); if (dataset != null) { responseBuilder.addDataset(dataset); } diff --git a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/MyAutofillService.java b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/MyAutofillService.java index 5e0b0233..494a8bf1 100644 --- a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/MyAutofillService.java +++ b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/MyAutofillService.java @@ -31,8 +31,7 @@ import android.widget.RemoteViews; import com.example.android.autofillframework.R; import com.example.android.autofillframework.multidatasetservice.datasource.SharedPrefsAutofillRepository; -import com.example.android.autofillframework.multidatasetservice.model.AutofillFieldsCollection; -import com.example.android.autofillframework.multidatasetservice.model.ClientFormData; +import com.example.android.autofillframework.multidatasetservice.model.FilledAutofillFieldCollection; import com.example.android.autofillframework.multidatasetservice.settings.MyPreferences; import java.util.HashMap; @@ -67,7 +66,7 @@ public class MyAutofillService extends AutofillService { // Parse AutoFill data in Activity StructureParser parser = new StructureParser(structure); parser.parseForFill(); - AutofillFieldsCollection autofillFields = parser.getAutofillFields(); + AutofillFieldMetadataCollection autofillFields = parser.getAutofillFields(); FillResponse.Builder responseBuilder = new FillResponse.Builder(); // Check user's settings for authenticating Responses and Datasets. boolean responseAuth = MyPreferences.getInstance(this).isResponseAuth(); @@ -82,7 +81,7 @@ public class MyAutofillService extends AutofillService { callback.onSuccess(responseBuilder.build()); } else { boolean datasetAuth = MyPreferences.getInstance(this).isDatasetAuth(); - HashMap<String, ClientFormData> clientFormDataMap = + HashMap<String, FilledAutofillFieldCollection> clientFormDataMap = SharedPrefsAutofillRepository.getInstance(this).getClientFormData (autofillFields.getFocusedHints(), autofillFields.getAllHints()); FillResponse response = AutofillHelper.newResponse @@ -99,8 +98,8 @@ public class MyAutofillService extends AutofillService { Log.d(TAG, "onSaveRequest(): data=" + bundleToString(data)); StructureParser parser = new StructureParser(structure); parser.parseForSave(); - ClientFormData clientFormData = parser.getClientFormData(); - SharedPrefsAutofillRepository.getInstance(this).saveClientFormData(clientFormData); + FilledAutofillFieldCollection filledAutofillFieldCollection = parser.getClientFormData(); + SharedPrefsAutofillRepository.getInstance(this).saveClientFormData(filledAutofillFieldCollection); } @Override diff --git a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/StructureParser.java b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/StructureParser.java index 020a4eec..e2908819 100644 --- a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/StructureParser.java +++ b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/StructureParser.java @@ -20,10 +20,8 @@ import android.app.assist.AssistStructure.ViewNode; import android.app.assist.AssistStructure.WindowNode; import android.util.Log; -import com.example.android.autofillframework.multidatasetservice.model.AutofillField; -import com.example.android.autofillframework.multidatasetservice.model.AutofillFieldsCollection; -import com.example.android.autofillframework.multidatasetservice.model.ClientFormData; -import com.example.android.autofillframework.multidatasetservice.model.SavableAutofillData; +import com.example.android.autofillframework.multidatasetservice.model.FilledAutofillFieldCollection; +import com.example.android.autofillframework.multidatasetservice.model.FilledAutofillField; import static com.example.android.autofillframework.CommonUtil.TAG; @@ -33,9 +31,9 @@ import static com.example.android.autofillframework.CommonUtil.TAG; * parses the hierarchy and collects autofill metadata from {@link ViewNode}s along the way. */ final class StructureParser { - private final AutofillFieldsCollection mAutofillFields = new AutofillFieldsCollection(); + private final AutofillFieldMetadataCollection mAutofillFields = new AutofillFieldMetadataCollection(); private final AssistStructure mStructure; - private ClientFormData mClientFormData; + private FilledAutofillFieldCollection mFilledAutofillFieldCollection; StructureParser(AssistStructure structure) { mStructure = structure; @@ -56,7 +54,7 @@ final class StructureParser { private void parse(boolean forFill) { Log.d(TAG, "Parsing structure for " + mStructure.getActivityComponent()); int nodes = mStructure.getWindowNodeCount(); - mClientFormData = new ClientFormData(); + mFilledAutofillFieldCollection = new FilledAutofillFieldCollection(); for (int i = 0; i < nodes; i++) { WindowNode node = mStructure.getWindowNodeAt(i); ViewNode view = node.getRootViewNode(); @@ -68,10 +66,10 @@ final class StructureParser { if (viewNode.getAutofillHints() != null && viewNode.getAutofillHints().length > 0) { //TODO check to make sure hints are supported by service. if (forFill) { - mAutofillFields.add(new AutofillField(viewNode)); + mAutofillFields.add(new AutofillFieldMetadata(viewNode)); } else { - mClientFormData.setAutofillValuesForHints - (viewNode.getAutofillHints(), new SavableAutofillData(viewNode)); + mFilledAutofillFieldCollection.setAutofillValuesForHints + (viewNode.getAutofillHints(), new FilledAutofillField(viewNode)); } } int childrenSize = viewNode.getChildCount(); @@ -82,11 +80,11 @@ final class StructureParser { } } - public AutofillFieldsCollection getAutofillFields() { + public AutofillFieldMetadataCollection getAutofillFields() { return mAutofillFields; } - public ClientFormData getClientFormData() { - return mClientFormData; + public FilledAutofillFieldCollection getClientFormData() { + return mFilledAutofillFieldCollection; } } diff --git a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/datasource/AutofillRepository.java b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/datasource/AutofillRepository.java index 408b0c58..2296feb3 100644 --- a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/datasource/AutofillRepository.java +++ b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/datasource/AutofillRepository.java @@ -15,7 +15,7 @@ */ package com.example.android.autofillframework.multidatasetservice.datasource; -import com.example.android.autofillframework.multidatasetservice.model.ClientFormData; +import com.example.android.autofillframework.multidatasetservice.model.FilledAutofillFieldCollection; import java.util.HashMap; import java.util.List; @@ -23,16 +23,16 @@ import java.util.List; public interface AutofillRepository { /** - * Gets saved ClientFormData that contains some objects that can autofill fields with these + * Gets saved FilledAutofillFieldCollection that contains some objects that can autofill fields with these * {@code autofillHints}. */ - HashMap<String, ClientFormData> getClientFormData(List<String> focusedAutofillHints, + HashMap<String, FilledAutofillFieldCollection> getClientFormData(List<String> focusedAutofillHints, List<String> allAutofillHints); /** * Saves LoginCredential under this datasetName. */ - void saveClientFormData(ClientFormData clientFormData); + void saveClientFormData(FilledAutofillFieldCollection filledAutofillFieldCollection); /** * Clears all data. diff --git a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/datasource/SharedPrefsAutofillRepository.java b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/datasource/SharedPrefsAutofillRepository.java index fee39691..31f92000 100644 --- a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/datasource/SharedPrefsAutofillRepository.java +++ b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/datasource/SharedPrefsAutofillRepository.java @@ -19,7 +19,7 @@ import android.content.Context; import android.content.SharedPreferences; import android.util.ArraySet; -import com.example.android.autofillframework.multidatasetservice.model.ClientFormData; +import com.example.android.autofillframework.multidatasetservice.model.FilledAutofillFieldCollection; import com.google.gson.Gson; import java.util.HashMap; @@ -53,23 +53,23 @@ public class SharedPrefsAutofillRepository implements AutofillRepository { } @Override - public HashMap<String, ClientFormData> getClientFormData(List<String> focusedAutofillHints, + public HashMap<String, FilledAutofillFieldCollection> getClientFormData(List<String> focusedAutofillHints, List<String> allAutofillHints) { boolean hasDataForFocusedAutofillHints = false; - HashMap<String, ClientFormData> clientFormDataMap = new HashMap<>(); + HashMap<String, FilledAutofillFieldCollection> clientFormDataMap = new HashMap<>(); Set<String> clientFormDataStringSet = getAllAutofillDataStringSet(); for (String clientFormDataString : clientFormDataStringSet) { - ClientFormData clientFormData = new Gson().fromJson(clientFormDataString, ClientFormData.class); - if (clientFormData != null) { - if (clientFormData.helpsWithHints(focusedAutofillHints)) { + FilledAutofillFieldCollection filledAutofillFieldCollection = new Gson().fromJson(clientFormDataString, FilledAutofillFieldCollection.class); + if (filledAutofillFieldCollection != null) { + if (filledAutofillFieldCollection.helpsWithHints(focusedAutofillHints)) { // Saved data has data relevant to at least 1 of the hints associated with the // View in focus. hasDataForFocusedAutofillHints = true; } - if (clientFormData.helpsWithHints(allAutofillHints)) { + if (filledAutofillFieldCollection.helpsWithHints(allAutofillHints)) { // Saved data has data relevant to at least 1 of these hints associated with any // of the Views in the hierarchy. - clientFormDataMap.put(clientFormData.getDatasetName(), clientFormData); + clientFormDataMap.put(filledAutofillFieldCollection.getDatasetName(), filledAutofillFieldCollection); } } } @@ -81,11 +81,11 @@ public class SharedPrefsAutofillRepository implements AutofillRepository { } @Override - public void saveClientFormData(ClientFormData clientFormData) { + public void saveClientFormData(FilledAutofillFieldCollection filledAutofillFieldCollection) { String datasetName = "dataset-" + getDatasetNumber(); - clientFormData.setDatasetName(datasetName); + filledAutofillFieldCollection.setDatasetName(datasetName); Set<String> allAutofillData = getAllAutofillDataStringSet(); - allAutofillData.add(new Gson().toJson(clientFormData)); + allAutofillData.add(new Gson().toJson(filledAutofillFieldCollection)); saveAllAutofillDataStringSet(allAutofillData); incrementDatasetNumber(); } diff --git a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/SavableAutofillData.java b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/FilledAutofillField.java index 0286ffdd..3ca61d89 100644 --- a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/SavableAutofillData.java +++ b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/FilledAutofillField.java @@ -21,12 +21,12 @@ import android.view.autofill.AutofillValue; /** * JSON serializable data class containing the same data as an {@link AutofillValue}. */ -public class SavableAutofillData { +public class FilledAutofillField { private String mTextValue = null; private Long mDateValue = null; private Boolean mToggleValue = null; - public SavableAutofillData(AssistStructure.ViewNode viewNode) { + public FilledAutofillField(AssistStructure.ViewNode viewNode) { AutofillValue autofillValue = viewNode.getAutofillValue(); if (autofillValue != null) { if (autofillValue.isList()) { @@ -66,7 +66,7 @@ public class SavableAutofillData { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - SavableAutofillData that = (SavableAutofillData) o; + FilledAutofillField that = (FilledAutofillField) o; if (mTextValue != null ? !mTextValue.equals(that.mTextValue) : that.mTextValue != null) return false; diff --git a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/ClientFormData.java b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/FilledAutofillFieldCollection.java index b01c06b4..a7ff4992 100644 --- a/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/ClientFormData.java +++ b/input/autofill/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/FilledAutofillFieldCollection.java @@ -22,24 +22,27 @@ import android.view.View; import android.view.autofill.AutofillId; import android.view.autofill.AutofillValue; +import com.example.android.autofillframework.multidatasetservice.AutofillFieldMetadata; +import com.example.android.autofillframework.multidatasetservice.AutofillFieldMetadataCollection; + import java.util.HashMap; import java.util.List; import static com.example.android.autofillframework.CommonUtil.TAG; /** - * ClientFormData is the model that holds all of the data on a client app's page, plus the dataset - * name associated with it. + * FilledAutofillFieldCollection is the model that holds all of the data on a client app's page, + * plus the dataset name associated with it. */ -public final class ClientFormData { - private final HashMap<String, SavableAutofillData> mHintMap; +public final class FilledAutofillFieldCollection { + private final HashMap<String, FilledAutofillField> mHintMap; private String mDatasetName; - public ClientFormData() { - this(null, new HashMap<String, SavableAutofillData>()); + public FilledAutofillFieldCollection() { + this(null, new HashMap<String, FilledAutofillField>()); } - public ClientFormData(String datasetName, HashMap<String, SavableAutofillData> hintMap) { + public FilledAutofillFieldCollection(String datasetName, HashMap<String, FilledAutofillField> hintMap) { mHintMap = hintMap; mDatasetName = datasetName; } @@ -61,7 +64,7 @@ public final class ClientFormData { /** * Sets values for a list of hints. */ - public void setAutofillValuesForHints(@NonNull String[] autofillHints, @NonNull SavableAutofillData autofillValue) { + public void setAutofillValuesForHints(@NonNull String[] autofillHints, @NonNull FilledAutofillField autofillValue) { for (int i = 0; i < autofillHints.length; i++) { mHintMap.put(autofillHints[i], autofillValue); } @@ -69,50 +72,50 @@ public final class ClientFormData { /** * Populates a {@link Dataset.Builder} with appropriate values for each {@link AutofillId} - * in a {@code AutofillFieldsCollection}. + * in a {@code AutofillFieldMetadataCollection}. */ - public boolean applyToFields(AutofillFieldsCollection autofillFieldsCollection, + public boolean applyToFields(AutofillFieldMetadataCollection autofillFieldMetadataCollection, Dataset.Builder datasetBuilder) { boolean setValueAtLeastOnce = false; - List<String> allHints = autofillFieldsCollection.getAllHints(); + List<String> allHints = autofillFieldMetadataCollection.getAllHints(); for (int hintIndex = 0; hintIndex < allHints.size(); hintIndex++) { String hint = allHints.get(hintIndex); - List<AutofillField> autofillFields = autofillFieldsCollection.getFieldsForHint(hint); - if (autofillFields == null) { + List<AutofillFieldMetadata> fillableAutofillFields = autofillFieldMetadataCollection.getFieldsForHint(hint); + if (fillableAutofillFields == null) { continue; } - for (int autofillFieldIndex = 0; autofillFieldIndex < autofillFields.size(); autofillFieldIndex++) { - SavableAutofillData savableAutofillData = mHintMap.get(hint); - if (savableAutofillData == null) { + for (int autofillFieldIndex = 0; autofillFieldIndex < fillableAutofillFields.size(); autofillFieldIndex++) { + FilledAutofillField filledAutofillField = mHintMap.get(hint); + if (filledAutofillField == null) { continue; } - AutofillField autofillField = autofillFields.get(autofillFieldIndex); - AutofillId autofillId = autofillField.getId(); - int autofillType = autofillField.getAutofillType(); + AutofillFieldMetadata autofillFieldMetadata = fillableAutofillFields.get(autofillFieldIndex); + AutofillId autofillId = autofillFieldMetadata.getId(); + int autofillType = autofillFieldMetadata.getAutofillType(); switch (autofillType) { case View.AUTOFILL_TYPE_LIST: - int listValue = autofillField.getAutofillOptionIndex(savableAutofillData.getTextValue()); + int listValue = autofillFieldMetadata.getAutofillOptionIndex(filledAutofillField.getTextValue()); if (listValue != -1) { datasetBuilder.setValue(autofillId, AutofillValue.forList(listValue)); setValueAtLeastOnce = true; } break; case View.AUTOFILL_TYPE_DATE: - Long dateValue = savableAutofillData.getDateValue(); + Long dateValue = filledAutofillField.getDateValue(); if (dateValue != null) { datasetBuilder.setValue(autofillId, AutofillValue.forDate(dateValue)); setValueAtLeastOnce = true; } break; case View.AUTOFILL_TYPE_TEXT: - String textValue = savableAutofillData.getTextValue(); + String textValue = filledAutofillField.getTextValue(); if (textValue != null) { datasetBuilder.setValue(autofillId, AutofillValue.forText(textValue)); setValueAtLeastOnce = true; } break; case View.AUTOFILL_TYPE_TOGGLE: - Boolean toggleValue = savableAutofillData.getToggleValue(); + Boolean toggleValue = filledAutofillField.getToggleValue(); if (toggleValue != null) { datasetBuilder.setValue(autofillId, AutofillValue.forToggle(toggleValue)); setValueAtLeastOnce = true; diff --git a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/AutofillField.kt b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AutofillFieldMetadata.kt index 474454a3..47539dfd 100644 --- a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/AutofillField.kt +++ b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AutofillFieldMetadata.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.example.android.autofillframework.multidatasetservice.model +package com.example.android.autofillframework.multidatasetservice import android.app.assist.AssistStructure.ViewNode; import android.service.autofill.SaveInfo @@ -24,7 +24,7 @@ import android.view.autofill.AutofillId * A stripped down version of a [ViewNode] that contains only autofill-relevant metadata. It also * contains a `saveType` flag that is calculated based on the [ViewNode]'s autofill hints. */ -class AutofillField(view: ViewNode) { +class AutofillFieldMetadata(view: ViewNode) { var saveType = 0 private set diff --git a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/AutofillFieldsCollection.kt b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AutofillFieldMetadataCollection.kt index c62ea327..4aa3e1fd 100644 --- a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/AutofillFieldsCollection.kt +++ b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AutofillFieldMetadataCollection.kt @@ -13,39 +13,37 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.example.android.autofillframework.multidatasetservice.model +package com.example.android.autofillframework.multidatasetservice import android.view.autofill.AutofillId -import java.util.ArrayList -import java.util.HashMap /** - * Data structure that stores a collection of `AutofillField`s. Contains all of the client's `View` + * Data structure that stores a collection of `AutofillFieldMetadata`s. Contains all of the client's `View` * hierarchy autofill-relevant metadata. */ -data class AutofillFieldsCollection(val autofillIds: ArrayList<AutofillId> = ArrayList<AutofillId>(), - val allAutofillHints: ArrayList<String> = ArrayList<String>(), - val focusedAutofillHints: ArrayList<String> = ArrayList<String>()) { +data class AutofillFieldMetadataCollection(val autofillIds: java.util.ArrayList<AutofillId> = java.util.ArrayList<AutofillId>(), + val allAutofillHints: java.util.ArrayList<String> = java.util.ArrayList<String>(), + val focusedAutofillHints: java.util.ArrayList<String> = java.util.ArrayList<String>()) { - private val autofillHintsToFieldsMap = HashMap<String, MutableList<AutofillField>>() + private val autofillHintsToFieldsMap = java.util.HashMap<String, MutableList<AutofillFieldMetadata>>() var saveType = 0 private set - fun add(autofillField: AutofillField) { - saveType = saveType or autofillField.saveType - autofillIds.add(autofillField.autofillId) - val hintsList = autofillField.autofillHints + fun add(autofillFieldMetadata: AutofillFieldMetadata) { + saveType = saveType or autofillFieldMetadata.saveType + autofillIds.add(autofillFieldMetadata.autofillId) + val hintsList = autofillFieldMetadata.autofillHints allAutofillHints.addAll(hintsList) - if (autofillField.isFocused) { + if (autofillFieldMetadata.isFocused) { focusedAutofillHints.addAll(hintsList) } - autofillField.autofillHints.forEach { autofillHint -> - autofillHintsToFieldsMap[autofillHint] = autofillHintsToFieldsMap[autofillHint] ?: ArrayList<AutofillField>() - autofillHintsToFieldsMap[autofillHint]?.add(autofillField) + autofillFieldMetadata.autofillHints.forEach { autofillHint -> + autofillHintsToFieldsMap[autofillHint] = autofillHintsToFieldsMap[autofillHint] ?: java.util.ArrayList<AutofillFieldMetadata>() + autofillHintsToFieldsMap[autofillHint]?.add(autofillFieldMetadata) } } - fun getFieldsForHint(hint: String): MutableList<AutofillField>? { + fun getFieldsForHint(hint: String): MutableList<AutofillFieldMetadata>? { return autofillHintsToFieldsMap[hint] } } diff --git a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AutofillHelper.kt b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AutofillHelper.kt index 4d67d5bc..394f620f 100644 --- a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AutofillHelper.kt +++ b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/AutofillHelper.kt @@ -23,8 +23,7 @@ import android.util.Log import android.widget.RemoteViews import com.example.android.autofillframework.CommonUtil.TAG import com.example.android.autofillframework.R -import com.example.android.autofillframework.multidatasetservice.model.AutofillFieldsCollection -import com.example.android.autofillframework.multidatasetservice.model.ClientFormData +import com.example.android.autofillframework.multidatasetservice.model.FilledAutofillFieldCollection import java.util.HashMap /** @@ -36,11 +35,11 @@ object AutofillHelper { * Wraps autofill data in a [Dataset] object which can then be sent back to the * client View. */ - fun newDataset(context: Context, autofillFields: AutofillFieldsCollection, - clientFormData: ClientFormData, datasetAuth: Boolean): Dataset? { - clientFormData.datasetName?.let { datasetName -> + fun newDataset(context: Context, autofillFieldMetadata: AutofillFieldMetadataCollection, + filledAutofillFieldCollection: FilledAutofillFieldCollection, datasetAuth: Boolean): Dataset? { + filledAutofillFieldCollection.datasetName?.let { datasetName -> val datasetBuilder = Dataset.Builder(newRemoteViews(context.packageName, datasetName)) - val setValueAtLeastOnce = clientFormData.applyToFields(autofillFields, datasetBuilder) + val setValueAtLeastOnce = filledAutofillFieldCollection.applyToFields(autofillFieldMetadata, datasetBuilder) if (datasetAuth) { val sender = AuthActivity.getAuthIntentSenderForDataset(context, datasetName) datasetBuilder.setAuthentication(sender) @@ -63,20 +62,20 @@ object AutofillHelper { * then be sent back to the client View. */ fun newResponse(context: Context, - datasetAuth: Boolean, autofillFields: AutofillFieldsCollection, - clientFormDataMap: HashMap<String, ClientFormData>?): FillResponse? { + datasetAuth: Boolean, autofillFieldMetadata: AutofillFieldMetadataCollection, + filledAutofillFieldCollectionMap: HashMap<String, FilledAutofillFieldCollection>?): FillResponse? { val responseBuilder = FillResponse.Builder() - clientFormDataMap?.keys?.let { datasetNames -> + filledAutofillFieldCollectionMap?.keys?.let { datasetNames -> for (datasetName in datasetNames) { - clientFormDataMap[datasetName]?.let { clientFormData -> - val dataset = newDataset(context, autofillFields, clientFormData, datasetAuth) + filledAutofillFieldCollectionMap[datasetName]?.let { clientFormData -> + val dataset = newDataset(context, autofillFieldMetadata, clientFormData, datasetAuth) dataset?.let(responseBuilder::addDataset) } } } - if (autofillFields.saveType != 0) { - val autofillIds = autofillFields.autofillIds - responseBuilder.setSaveInfo(SaveInfo.Builder(autofillFields.saveType, + if (autofillFieldMetadata.saveType != 0) { + val autofillIds = autofillFieldMetadata.autofillIds + responseBuilder.setSaveInfo(SaveInfo.Builder(autofillFieldMetadata.saveType, autofillIds.toTypedArray()).build()) return responseBuilder.build() } else { diff --git a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/MyAutofillService.kt b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/MyAutofillService.kt index f9169029..fa069241 100644 --- a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/MyAutofillService.kt +++ b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/MyAutofillService.kt @@ -78,7 +78,7 @@ class MyAutofillService : AutofillService() { Log.d(TAG, "onSaveRequest(): data=" + bundleToString(data)) val parser = StructureParser(structure) parser.parseForSave() - SharedPrefsAutofillRepository.saveClientFormData(this, parser.clientFormData) + SharedPrefsAutofillRepository.saveClientFormData(this, parser.filledAutofillFieldCollection) } override fun onConnected() { diff --git a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/StructureParser.kt b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/StructureParser.kt index 78cab5ee..31b59c8a 100644 --- a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/StructureParser.kt +++ b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/StructureParser.kt @@ -19,10 +19,8 @@ import android.app.assist.AssistStructure import android.app.assist.AssistStructure.ViewNode import android.util.Log import com.example.android.autofillframework.CommonUtil.TAG -import com.example.android.autofillframework.multidatasetservice.model.AutofillField -import com.example.android.autofillframework.multidatasetservice.model.AutofillFieldsCollection -import com.example.android.autofillframework.multidatasetservice.model.ClientFormData -import com.example.android.autofillframework.multidatasetservice.model.SavableAutofillData +import com.example.android.autofillframework.multidatasetservice.model.FilledAutofillFieldCollection +import com.example.android.autofillframework.multidatasetservice.model.FilledAutofillField /** * Parser for an AssistStructure object. This is invoked when the Autofill Service receives an @@ -30,8 +28,8 @@ import com.example.android.autofillframework.multidatasetservice.model.SavableAu * parses the hierarchy and collects autofill metadata from {@link ViewNode}s along the way. */ internal class StructureParser(private val mStructure: AssistStructure) { - val autofillFields = AutofillFieldsCollection() - var clientFormData: ClientFormData = ClientFormData() + val autofillFields = AutofillFieldMetadataCollection() + var filledAutofillFieldCollection: FilledAutofillFieldCollection = FilledAutofillFieldCollection() private set @@ -49,7 +47,7 @@ internal class StructureParser(private val mStructure: AssistStructure) { private fun parse(forFill: Boolean) { Log.d(TAG, "Parsing structure for " + mStructure.activityComponent) val nodes = mStructure.windowNodeCount - clientFormData = ClientFormData() + filledAutofillFieldCollection = FilledAutofillFieldCollection() for (i in 0..nodes - 1) { val node = mStructure.getWindowNodeAt(i) val view = node.rootViewNode @@ -61,10 +59,10 @@ internal class StructureParser(private val mStructure: AssistStructure) { viewNode.autofillHints?.let { autofillHints -> if (autofillHints.isNotEmpty()) { if (forFill) { - autofillFields.add(AutofillField(viewNode)) + autofillFields.add(AutofillFieldMetadata(viewNode)) } else { - clientFormData.setAutofillValuesForHints(viewNode.autofillHints, - SavableAutofillData(viewNode)) + filledAutofillFieldCollection.setAutofillValuesForHints(viewNode.autofillHints, + FilledAutofillField(viewNode)) } } } diff --git a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/datasource/AutofillRepository.kt b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/datasource/AutofillRepository.kt index 9e4d6e20..510d759f 100644 --- a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/datasource/AutofillRepository.kt +++ b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/datasource/AutofillRepository.kt @@ -16,22 +16,22 @@ package com.example.android.autofillframework.multidatasetservice.datasource import android.content.Context -import com.example.android.autofillframework.multidatasetservice.model.ClientFormData +import com.example.android.autofillframework.multidatasetservice.model.FilledAutofillFieldCollection import java.util.HashMap interface AutofillRepository { /** - * Gets saved ClientFormData that contains some objects that can autofill fields with these + * Gets saved FilledAutofillFieldCollection that contains some objects that can autofill fields with these * `autofillHints`. */ fun getClientFormData(context: Context, focusedAutofillHints: List<String>, - allAutofillHints: List<String>): HashMap<String, ClientFormData>? + allAutofillHints: List<String>): HashMap<String, FilledAutofillFieldCollection>? /** * Saves LoginCredential under this datasetName. */ - fun saveClientFormData(context: Context, clientFormData: ClientFormData) + fun saveClientFormData(context: Context, filledAutofillFieldCollection: FilledAutofillFieldCollection) /** * Clears all data. diff --git a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/datasource/SharedPrefsAutofillRepository.kt b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/datasource/SharedPrefsAutofillRepository.kt index 8aeac0df..e2171708 100644 --- a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/datasource/SharedPrefsAutofillRepository.kt +++ b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/datasource/SharedPrefsAutofillRepository.kt @@ -18,7 +18,7 @@ package com.example.android.autofillframework.multidatasetservice.datasource import android.content.Context import android.content.SharedPreferences import android.util.ArraySet -import com.example.android.autofillframework.multidatasetservice.model.ClientFormData +import com.example.android.autofillframework.multidatasetservice.model.FilledAutofillFieldCollection import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -38,13 +38,13 @@ object SharedPrefsAutofillRepository : AutofillRepository { } override fun getClientFormData(context: Context, focusedAutofillHints: List<String>, - allAutofillHints: List<String>): HashMap<String, ClientFormData>? { + allAutofillHints: List<String>): HashMap<String, FilledAutofillFieldCollection>? { var hasDataForFocusedAutofillHints = false - val clientFormDataMap = HashMap<String, ClientFormData>() + val clientFormDataMap = HashMap<String, FilledAutofillFieldCollection>() val clientFormDataStringSet = getAllAutofillDataStringSet(context) for (clientFormDataString in clientFormDataStringSet) { - val type = object : TypeToken<ClientFormData>() {}.type - Gson().fromJson<ClientFormData>(clientFormDataString, type)?.let { clientFormData -> + val type = object : TypeToken<FilledAutofillFieldCollection>() {}.type + Gson().fromJson<FilledAutofillFieldCollection>(clientFormDataString, type)?.let { clientFormData -> if (clientFormData.helpsWithHints(focusedAutofillHints)) { // Saved data has data relevant to at least 1 of the hints associated with the // View in focus. @@ -66,11 +66,11 @@ object SharedPrefsAutofillRepository : AutofillRepository { } } - override fun saveClientFormData(context: Context, clientFormData: ClientFormData) { + override fun saveClientFormData(context: Context, filledAutofillFieldCollection: FilledAutofillFieldCollection) { val datasetName = "dataset-" + getDatasetNumber(context) - clientFormData.datasetName = datasetName + filledAutofillFieldCollection.datasetName = datasetName val allAutofillData = getAllAutofillDataStringSet(context) - allAutofillData.add(Gson().toJson(clientFormData).toString()) + allAutofillData.add(Gson().toJson(filledAutofillFieldCollection).toString()) saveAllAutofillDataStringSet(context, allAutofillData) incrementDatasetNumber(context) } diff --git a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/SavableAutofillData.kt b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/FilledAutofillField.kt index 3c50d339..fd2e1769 100644 --- a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/SavableAutofillData.kt +++ b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/FilledAutofillField.kt @@ -21,7 +21,7 @@ import android.view.autofill.AutofillValue /** * JSON serializable data class containing the same data as an [AutofillValue]. */ -class SavableAutofillData(viewNode: AssistStructure.ViewNode) { +class FilledAutofillField(viewNode: AssistStructure.ViewNode) { var textValue: CharSequence? = null var dateValue: Long? = null var toggleValue: Boolean? = null diff --git a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/ClientFormData.kt b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/FilledAutofillFieldCollection.kt index 8f434abe..1adf1dcc 100644 --- a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/ClientFormData.kt +++ b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/model/FilledAutofillFieldCollection.kt @@ -20,36 +20,37 @@ import android.util.Log import android.view.View import android.view.autofill.AutofillId import android.view.autofill.AutofillValue +import com.example.android.autofillframework.multidatasetservice.AutofillFieldMetadataCollection import java.util.HashMap /** - * ClientFormData is the model that represents all of the form data on a client app's page, plus the + * FilledAutofillFieldCollection is the model that represents all of the form data on a client app's page, plus the * dataset name associated with it. */ -class ClientFormData constructor(var datasetName: String? = null, - private val hintMap: HashMap<String, SavableAutofillData> = HashMap<String, SavableAutofillData>()) { +class FilledAutofillFieldCollection constructor(var datasetName: String? = null, + private val hintMap: HashMap<String, FilledAutofillField> = HashMap<String, FilledAutofillField>()) { - private val TAG = "ClientFormData" + private val TAG = "FilledAutofillFieldCollection" /** * Sets values for a list of autofillHints. */ - fun setAutofillValuesForHints(autofillHints: Array<String>, autofillData: SavableAutofillData) { + fun setAutofillValuesForHints(autofillHints: Array<String>, autofillField: FilledAutofillField) { autofillHints.forEach { hint -> - hintMap[hint] = autofillData + hintMap[hint] = autofillField } } /** * Populates a [Dataset.Builder] with appropriate values for each [AutofillId] - * in a `AutofillFieldsCollection`. + * in a `AutofillFieldMetadataCollection`. */ - fun applyToFields(autofillFieldsCollection: AutofillFieldsCollection, + fun applyToFields(autofillFieldMetadataCollection: AutofillFieldMetadataCollection, datasetBuilder: Dataset.Builder): Boolean { var setValueAtLeastOnce = false - for (hint in autofillFieldsCollection.allAutofillHints) { - val autofillFields = autofillFieldsCollection.getFieldsForHint(hint) ?: continue + for (hint in autofillFieldMetadataCollection.allAutofillHints) { + val autofillFields = autofillFieldMetadataCollection.getFieldsForHint(hint) ?: continue for (autofillField in autofillFields) { val autofillId = autofillField.autofillId val autofillType = autofillField.autofillType |