From d44566a42776d03195b15ba394d0d861306c0057 Mon Sep 17 00:00:00 2001 From: Douglas Sigelbaum Date: Wed, 7 Jun 2017 16:21:09 -0400 Subject: Renaming sample autofill service to Multidataset AutofillService. Bug: 38182790 Test: manual Change-Id: I21784ece130355f9bd1efec811bba7c0bfba5b70 --- .../multidatasetservice/MyAutofillService.kt | 91 ++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/MyAutofillService.kt (limited to 'input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/MyAutofillService.kt') 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 new file mode 100644 index 00000000..f9169029 --- /dev/null +++ b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/multidatasetservice/MyAutofillService.kt @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.autofillframework.multidatasetservice + +import android.os.CancellationSignal +import android.service.autofill.AutofillService +import android.service.autofill.FillCallback +import android.service.autofill.FillRequest +import android.service.autofill.FillResponse +import android.service.autofill.SaveCallback +import android.service.autofill.SaveRequest +import android.util.Log +import com.example.android.autofillframework.CommonUtil.TAG +import com.example.android.autofillframework.CommonUtil.bundleToString +import com.example.android.autofillframework.R +import com.example.android.autofillframework.multidatasetservice.datasource.SharedPrefsAutofillRepository +import com.example.android.autofillframework.multidatasetservice.settings.MyPreferences + +class MyAutofillService : AutofillService() { + + override fun onFillRequest(request: FillRequest, cancellationSignal: CancellationSignal, + callback: FillCallback) { + val structure = request.getFillContexts().get(request.getFillContexts().size - 1).structure + val data = request.clientState + Log.d(TAG, "onFillRequest(): data=" + bundleToString(data)) + + // Temporary hack for disabling autofill for components in this autofill service. + // i.e. we don't want to autofill components in AuthActivity. + if (structure.activityComponent.toShortString() + .contains("com.example.android.autofillframework.service")) { + callback.onSuccess(null) + return + } + cancellationSignal.setOnCancelListener { Log.w(TAG, "Cancel autofill not implemented in this sample.") } + // Parse AutoFill data in Activity + val parser = StructureParser(structure) + parser.parseForFill() + val autofillFields = parser.autofillFields + + val responseBuilder = FillResponse.Builder() + // Check user's settings for authenticating Responses and Datasets. + val responseAuth = MyPreferences.isResponseAuth(this) + if (responseAuth) { + // If the entire Autofill Response is authenticated, AuthActivity is used + // to generate Response. + val sender = AuthActivity.getAuthIntentSenderForResponse(this) + val presentation = AutofillHelper + .newRemoteViews(packageName, getString(R.string.autofill_sign_in_prompt)) + responseBuilder + .setAuthentication(autofillFields.autofillIds.toTypedArray(), sender, presentation) + callback.onSuccess(responseBuilder.build()) + } else { + val datasetAuth = MyPreferences.isDatasetAuth(this) + val clientFormDataMap = SharedPrefsAutofillRepository.getClientFormData(this, + autofillFields.focusedAutofillHints, autofillFields.allAutofillHints) + val response = AutofillHelper.newResponse(this, datasetAuth, autofillFields, clientFormDataMap) + callback.onSuccess(response) + } + } + + override fun onSaveRequest(request: SaveRequest, callback: SaveCallback) { + val context = request.fillContexts + val structure = context[context.size - 1].structure + val data = request.clientState + Log.d(TAG, "onSaveRequest(): data=" + bundleToString(data)) + val parser = StructureParser(structure) + parser.parseForSave() + SharedPrefsAutofillRepository.saveClientFormData(this, parser.clientFormData) + } + + override fun onConnected() { + Log.d(TAG, "onConnected") + } + + override fun onDisconnected() { + Log.d(TAG, "onDisconnected") + } +} -- cgit v1.2.3