| /* |
| * 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.android.settings.applications.autofill; |
| |
| import android.app.Activity; |
| import android.content.Intent; |
| import android.os.Bundle; |
| import android.view.autofill.AutofillManager; |
| |
| import com.android.settings.applications.defaultapps.DefaultAutofillPicker; |
| |
| /** |
| * Standalone activity used to launch a {@link DefaultAutofillPicker} fragment from a |
| * {@link android.provider.Settings#ACTION_REQUEST_SET_AUTOFILL_SERVICE} intent. |
| * |
| * <p>It first check for cases that can fail fast, then forward to {@link AutofillPickerActivity} |
| * if necessary. |
| */ |
| public class AutofillPickerTrampolineActivity extends Activity { |
| |
| @Override |
| protected void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| |
| // First check if the current user's service already belongs to the app... |
| final Intent intent = getIntent(); |
| final String packageName = intent.getData().getSchemeSpecificPart(); |
| final String currentService = DefaultAutofillPicker.getDefaultKey(this); |
| if (currentService != null && currentService.startsWith(packageName)) { |
| // ...and succeed right away if it does. |
| setResult(RESULT_OK); |
| finish(); |
| return; |
| } |
| |
| // Then check if the Autofill is available for the current user... |
| final AutofillManager afm = getSystemService(AutofillManager.class); |
| if (afm == null || !afm.hasAutofillFeature() || !afm.isAutofillSupported()) { |
| // ... and fail right away if it is not. |
| setResult(RESULT_CANCELED); |
| finish(); |
| return; |
| } |
| |
| // Otherwise, go ahead and show the real UI... |
| final Intent newIntent = new Intent(this, AutofillPickerActivity.class) |
| .setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT) |
| .setData(intent.getData()); |
| startActivity(newIntent); |
| finish(); |
| } |
| } |