aboutsummaryrefslogtreecommitdiff
path: root/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/service/MyAutofillService.java
diff options
context:
space:
mode:
Diffstat (limited to 'input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/service/MyAutofillService.java')
-rw-r--r--input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/service/MyAutofillService.java128
1 files changed, 128 insertions, 0 deletions
diff --git a/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/service/MyAutofillService.java b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/service/MyAutofillService.java
new file mode 100644
index 00000000..61e42050
--- /dev/null
+++ b/input/autofill/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/service/MyAutofillService.java
@@ -0,0 +1,128 @@
+/*
+ * 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.service;
+
+import android.app.assist.AssistStructure;
+import android.content.IntentSender;
+import android.os.Bundle;
+import android.os.CancellationSignal;
+import android.service.autofill.AutofillService;
+import android.service.autofill.FillCallback;
+import android.service.autofill.FillContext;
+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 android.widget.RemoteViews;
+
+import com.example.android.autofillframework.R;
+import com.example.android.autofillframework.service.datasource.LocalAutofillRepository;
+import com.example.android.autofillframework.service.model.AutofillFieldsCollection;
+import com.example.android.autofillframework.service.model.ClientFormData;
+import com.example.android.autofillframework.service.settings.MyPreferences;
+
+import java.util.HashMap;
+import java.util.List;
+
+import static com.example.android.autofillframework.CommonUtil.TAG;
+import static com.example.android.autofillframework.CommonUtil.bundleToString;
+
+public class MyAutofillService extends AutofillService {
+
+ @Override
+ public void onFillRequest(AssistStructure assistStructure, Bundle bundle, int i,
+ CancellationSignal cancellationSignal, FillCallback fillCallback) {
+ /* Deprecated, ignore */
+ }
+
+ @Override
+ public void onSaveRequest(AssistStructure assistStructure, Bundle bundle,
+ SaveCallback saveCallback) {
+ /* Deprecated, ignore */
+ }
+
+ @Override
+ public void onFillRequest(FillRequest request, CancellationSignal cancellationSignal,
+ FillCallback callback) {
+ AssistStructure structure = request.getStructure();
+ final Bundle data = request.getClientState();
+ 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.getActivityComponent().toShortString()
+ .contains("com.example.android.autofillframework.service")) {
+ callback.onSuccess(null);
+ return;
+ }
+ cancellationSignal.setOnCancelListener(new CancellationSignal.OnCancelListener() {
+ @Override
+ public void onCancel() {
+ Log.w(TAG, "Cancel autofill not implemented in this sample.");
+ }
+ });
+ // Parse AutoFill data in Activity
+ StructureParser parser = new StructureParser(structure);
+ parser.parse();
+ AutofillFieldsCollection autofillFields = parser.getAutofillFields();
+ int saveTypes = parser.getSaveTypes();
+
+ FillResponse.Builder responseBuilder = new FillResponse.Builder();
+ // Check user's settings for authenticating Responses and Datasets.
+ boolean responseAuth = MyPreferences.getInstance(this).isResponseAuth();
+ if (responseAuth) {
+ // If the entire Autofill Response is authenticated, AuthActivity is used
+ // to generate Response.
+ IntentSender sender = AuthActivity.getAuthIntentSenderForResponse(this);
+ RemoteViews presentation = AutofillHelper
+ .newRemoteViews(getPackageName(), getString(R.string.autofill_sign_in_prompt));
+ responseBuilder
+ .setAuthentication(autofillFields.getAutofillIds(), sender, presentation);
+ callback.onSuccess(responseBuilder.build());
+ } else {
+ boolean datasetAuth = MyPreferences.getInstance(this).isDatasetAuth();
+ HashMap<String, ClientFormData> clientFormDataMap =
+ LocalAutofillRepository.getInstance(this).getClientFormData
+ (autofillFields.getFocusedHints(), autofillFields.getAllHints());
+ FillResponse response = AutofillHelper.newResponse
+ (this, datasetAuth, autofillFields, saveTypes, clientFormDataMap);
+ callback.onSuccess(response);
+ }
+ }
+
+ @Override
+ public void onSaveRequest(SaveRequest request, SaveCallback callback) {
+ List<FillContext> context = request.getFillContexts();
+ final AssistStructure structure = context.get(context.size() - 1).getStructure();
+ final Bundle data = request.getClientState();
+ Log.d(TAG, "onSaveRequest(): data=" + bundleToString(data));
+ StructureParser parser = new StructureParser(structure);
+ parser.parse();
+ ClientFormData clientFormData = parser.getClientFormData();
+ LocalAutofillRepository.getInstance(this).saveClientFormData(clientFormData);
+ }
+
+ @Override
+ public void onConnected() {
+ Log.d(TAG, "onConnected");
+ }
+
+ @Override
+ public void onDisconnected() {
+ Log.d(TAG, "onDisconnected");
+ }
+}