diff options
author | Douglas Sigelbaum <sigelbaum@google.com> | 2017-06-07 14:39:08 -0400 |
---|---|---|
committer | Douglas Sigelbaum <sigelbaum@google.com> | 2017-06-07 18:06:49 -0400 |
commit | c84feef5290bcabaababc23e86c59cc14a5af357 (patch) | |
tree | ef9bfa67bd6ddb21f4880d32e4ce55ea54bbbd6e /input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework | |
parent | d44566a42776d03195b15ba394d0d861306c0057 (diff) | |
download | android-c84feef5290bcabaababc23e86c59cc14a5af357.tar.gz |
Renamed autofill Field classes.
Also moved AutofillMetadata-related classes out of the model
package.
Bug: 38182790
Test: manual
Change-Id: Ia86bad151a64c0487215622546a0ea7c67de2dcb
Diffstat (limited to 'input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework')
9 files changed, 63 insertions, 67 deletions
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 |