diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2d8e06a..59d2d79 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -3077,9 +3077,17 @@
             android:permission="android.permission.DUMP"
             android:enabled="@bool/config_has_help" />
 
-        <activity android:name=".applications.defaultapps.AutofillPickerActivity"
-                android:taskAffinity=""
-                android:noHistory="true">
+        <activity android:name=".applications.autofill.AutofillPickerActivity"
+                android:excludeFromRecents="true"
+                android:launchMode="singleInstance"
+                android:exported="false">
+        </activity>
+
+        <activity android:name=".applications.autofill.AutofillPickerTrampolineActivity"
+                android:theme="@android:style/Theme.NoDisplay"
+                android:excludeFromRecents="true"
+                android:launchMode="singleInstance"
+                android:label="@string/autofill_app">
             <intent-filter android:priority="1">
                 <action android:name="android.settings.REQUEST_SET_AUTOFILL_SERVICE" />
                 <category android:name="android.intent.category.DEFAULT" />
diff --git a/src/com/android/settings/applications/defaultapps/AutofillPickerActivity.java b/src/com/android/settings/applications/autofill/AutofillPickerActivity.java
similarity index 88%
rename from src/com/android/settings/applications/defaultapps/AutofillPickerActivity.java
rename to src/com/android/settings/applications/autofill/AutofillPickerActivity.java
index a173909..93b9880 100644
--- a/src/com/android/settings/applications/defaultapps/AutofillPickerActivity.java
+++ b/src/com/android/settings/applications/autofill/AutofillPickerActivity.java
@@ -11,16 +11,17 @@
  * KIND, either express or implied. See the License for the specific language governing
  * permissions and limitations under the License.
  */
-package com.android.settings.applications.defaultapps;
+package com.android.settings.applications.autofill;
 
 import android.content.Intent;
 import android.os.Bundle;
 
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
+import com.android.settings.applications.defaultapps.DefaultAutofillPicker;
 
 /**
- * Standalone activity used to launch {@link DefaultAppPickerFragment} from a
+ * Standalone activity used to launch a {@link DefaultAutofillPicker} fragment from a
  * {@link android.provider.Settings#ACTION_REQUEST_SET_AUTOFILL_SERVICE} intent.
  */
 public class AutofillPickerActivity extends SettingsActivity {
@@ -32,7 +33,6 @@
         intent.putExtra(EXTRA_SHOW_FRAGMENT, DefaultAutofillPicker.class.getName());
         intent.putExtra(EXTRA_SHOW_FRAGMENT_TITLE_RESID, R.string.autofill_app);
         intent.putExtra(DefaultAutofillPicker.EXTRA_PACKAGE_NAME, packageName);
-
         super.onCreate(savedInstanceState);
     }
 
diff --git a/src/com/android/settings/applications/autofill/AutofillPickerTrampolineActivity.java b/src/com/android/settings/applications/autofill/AutofillPickerTrampolineActivity.java
new file mode 100644
index 0000000..1db3c82
--- /dev/null
+++ b/src/com/android/settings/applications/autofill/AutofillPickerTrampolineActivity.java
@@ -0,0 +1,63 @@
+/*
+ * 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();
+    }
+}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java b/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java
index 9ab704e..73f4bbe 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java
@@ -55,8 +55,8 @@
         if (TextUtils.isEmpty(confirmationMessage)) {
             super.onRadioButtonClicked(selected);
         } else if (activity != null) {
-            final DialogFragment fragment = ConfirmationDialogFragment.newInstance(
-                    this, selectedKey, confirmationMessage);
+            final DialogFragment fragment =
+                    newConfirmationDialogFragment(selectedKey, confirmationMessage);
             fragment.show(activity.getFragmentManager(), ConfirmationDialogFragment.TAG);
         }
     }
@@ -74,6 +74,11 @@
         }
     }
 
+    protected ConfirmationDialogFragment newConfirmationDialogFragment(String selectedKey,
+            CharSequence confirmationMessage) {
+        return ConfirmationDialogFragment.newInstance(this, selectedKey, confirmationMessage);
+    }
+
     protected CharSequence getConfirmationMessage(CandidateInfo info) {
         return null;
     }
@@ -85,6 +90,12 @@
         public static final String EXTRA_KEY = "extra_key";
         public static final String EXTRA_MESSAGE = "extra_message";
 
+        private final DialogInterface.OnClickListener mCancelListener;
+
+        private ConfirmationDialogFragment(DialogInterface.OnClickListener cancelListener) {
+            mCancelListener = cancelListener;
+        }
+
         @Override
         public int getMetricsCategory() {
             return MetricsProto.MetricsEvent.DEFAULT_APP_PICKER_CONFIRMATION_DIALOG;
@@ -92,7 +103,14 @@
 
         public static ConfirmationDialogFragment newInstance(DefaultAppPickerFragment parent,
                 String key, CharSequence message) {
-            final ConfirmationDialogFragment fragment = new ConfirmationDialogFragment();
+            return newInstance(parent, key, message, null);
+        }
+
+        // TODO: add test case for cancelListener
+        public static ConfirmationDialogFragment newInstance(DefaultAppPickerFragment parent,
+                String key, CharSequence message, DialogInterface.OnClickListener cancelListener) {
+            final ConfirmationDialogFragment fragment = new ConfirmationDialogFragment(
+                    cancelListener);
             final Bundle argument = new Bundle();
             argument.putString(EXTRA_KEY, key);
             argument.putCharSequence(EXTRA_MESSAGE, message);
@@ -107,7 +125,7 @@
             final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
                     .setMessage(bundle.getCharSequence(EXTRA_MESSAGE))
                     .setPositiveButton(android.R.string.ok, this)
-                    .setNegativeButton(android.R.string.cancel, null);
+                    .setNegativeButton(android.R.string.cancel, mCancelListener);
             return builder.create();
         }
 
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java b/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java
index 037cddf..2e79660 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java
@@ -18,10 +18,13 @@
 
 import android.app.Activity;
 import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
+import android.os.Bundle;
 import android.provider.Settings;
 import android.service.autofill.AutofillService;
 import android.service.autofill.AutofillServiceInfo;
@@ -30,6 +33,7 @@
 
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
+import com.android.settings.applications.defaultapps.DefaultAppPickerFragment.ConfirmationDialogFragment;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -39,7 +43,35 @@
     static final String SETTING = Settings.Secure.AUTOFILL_SERVICE;
     static final Intent AUTOFILL_PROBE = new Intent(AutofillService.SERVICE_INTERFACE);
 
-    static final String EXTRA_PACKAGE_NAME = "package_name";
+    /**
+     * Extra set when the fragment is implementing ACTION_REQUEST_SET_AUTOFILL_SERVICE.
+     */
+    public static final String EXTRA_PACKAGE_NAME = "package_name";
+
+    /**
+     * Set when the fragment is implementing ACTION_REQUEST_SET_AUTOFILL_SERVICE.
+     */
+    public DialogInterface.OnClickListener mCancelListener;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        final Activity activity = getActivity();
+        if (activity != null && activity.getIntent().getStringExtra(EXTRA_PACKAGE_NAME) != null) {
+            mCancelListener = (d, w) -> {
+                activity.setResult(Activity.RESULT_CANCELED);
+                activity.finish();
+            };
+        }
+    }
+
+    @Override
+    protected ConfirmationDialogFragment newConfirmationDialogFragment(String selectedKey,
+            CharSequence confirmationMessage) {
+        return ConfirmationDialogFragment.newInstance(this, selectedKey, confirmationMessage,
+                mCancelListener);
+    }
 
     @Override
     public int getMetricsCategory() {
@@ -63,9 +95,13 @@
         return candidates;
     }
 
+    public static String getDefaultKey(Context context) {
+        return Settings.Secure.getString(context.getContentResolver(), SETTING);
+    }
+
     @Override
     protected String getDefaultKey() {
-        return Settings.Secure.getString(getContext().getContentResolver(), SETTING);
+        return getDefaultKey(getContext());
     }
 
     @Override
