diff --git a/src/com/android/contacts/DynamicShortcuts.java b/src/com/android/contacts/DynamicShortcuts.java
index f02306c..c21f3a0 100644
--- a/src/com/android/contacts/DynamicShortcuts.java
+++ b/src/com/android/contacts/DynamicShortcuts.java
@@ -45,6 +45,7 @@
 
 import com.android.contacts.common.ContactPhotoManager;
 import com.android.contacts.common.Experiments;
+import com.android.contacts.common.compat.CompatUtils;
 import com.android.contacts.common.util.BitmapUtil;
 import com.android.contacts.common.util.ImplicitIntentsUtil;
 import com.android.contactsbind.experiments.Flags;
@@ -68,6 +69,11 @@
 public class DynamicShortcuts {
     private static final String TAG = "DynamicShortcuts";
 
+    // Must be the same as shortcutId in res/xml/shortcuts.xml
+    // Note: This doesn't fit very well because this is a "static" shortcut but it's still the most
+    // sensible place to put it right now.
+    public static final String SHORTCUT_ADD_CONTACT = "shortcut-add-contact";
+
     // Note the Nexus launcher automatically truncates shortcut labels if they exceed these limits
     // however, we implement our own truncation in case the shortcut is shown on a launcher that
     // has different behavior
@@ -372,7 +378,10 @@
                 .addTriggerContentUri(new JobInfo.TriggerContentUri(ContactsContract.AUTHORITY_URI,
                         JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS))
                 .setTriggerContentUpdateDelay(mContentChangeMinUpdateDelay)
-                .setTriggerContentMaxDelay(mContentChangeMaxUpdateDelay).build();
+                .setTriggerContentMaxDelay(mContentChangeMaxUpdateDelay)
+                // Minimize impact on UX by waiting for idle before updating.
+                .setRequiresDeviceIdle(true)
+                .build();
         mJobScheduler.schedule(job);
     }
 
@@ -390,7 +399,7 @@
                     flags.getInteger(Experiments.DYNAMIC_MAX_CONTENT_CHANGE_UPDATE_DELAY_MILLIS));
         }
 
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N_MR1) return;
+        if (!CompatUtils.isLauncherShortcutCompatible()) return;
 
         final DynamicShortcuts shortcuts = new DynamicShortcuts(context);
         if (!Flags.getInstance(context).getBoolean(Experiments.DYNAMIC_SHORTCUTS)) {
@@ -426,6 +435,13 @@
         return scheduler.getPendingJob(ContactsJobService.DYNAMIC_SHORTCUTS_JOB_ID) != null;
     }
 
+    public static void reportShortcutUsed(Context context, String lookupKey) {
+        if (!CompatUtils.isLauncherShortcutCompatible()) return;
+        final ShortcutManager shortcutManager = (ShortcutManager) context
+                .getSystemService(Context.SHORTCUT_SERVICE);
+        shortcutManager.reportShortcutUsed(lookupKey);
+    }
+
     private static class ShortcutUpdateTask extends AsyncTask<Void, Void, Void> {
         private DynamicShortcuts mDynamicShortcuts;
 
diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
index 8c26e2e..5022947 100644
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorActivity.java
@@ -30,6 +30,7 @@
 
 import com.android.contacts.ContactSaveService;
 import com.android.contacts.ContactsActivity;
+import com.android.contacts.DynamicShortcuts;
 import com.android.contacts.R;
 import com.android.contacts.common.activity.RequestPermissionsActivity;
 import com.android.contacts.common.model.RawContactDeltaList;
@@ -387,6 +388,10 @@
         // Load editor data (even if it's hidden)
         final Uri uri = Intent.ACTION_EDIT.equals(action) ? getIntent().getData() : null;
         mFragment.load(action, uri, getIntent().getExtras());
+
+        if (Intent.ACTION_INSERT.equals(action)) {
+            DynamicShortcuts.reportShortcutUsed(this, DynamicShortcuts.SHORTCUT_ADD_CONTACT);
+        }
     }
 
     @Override
diff --git a/src/com/android/contacts/common/compat/CompatUtils.java b/src/com/android/contacts/common/compat/CompatUtils.java
index 567f183..a394093 100644
--- a/src/com/android/contacts/common/compat/CompatUtils.java
+++ b/src/com/android/contacts/common/compat/CompatUtils.java
@@ -173,6 +173,16 @@
         return VERSION.SDK_INT >= 24;
     }
 
+
+    public static boolean isNougatMr1Compatible() {
+        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.N_MR1)
+                >= Build.VERSION_CODES.N_MR1;
+    }
+
+    public static boolean isLauncherShortcutCompatible() {
+        return isNougatMr1Compatible();
+    }
+
     /**
      * Determines if the given class is available. Can be used to check if system apis exist at
      * runtime.
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 8a1b5e9..87c339a 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -104,6 +104,7 @@
 
 import com.android.contacts.ContactSaveService;
 import com.android.contacts.ContactsActivity;
+import com.android.contacts.DynamicShortcuts;
 import com.android.contacts.NfcHandler;
 import com.android.contacts.R;
 import com.android.contacts.activities.ContactEditorActivity;
@@ -124,10 +125,10 @@
 import com.android.contacts.common.list.ShortcutIntentBuilder;
 import com.android.contacts.common.list.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
 import com.android.contacts.common.logging.Logger;
-import com.android.contacts.common.logging.ScreenEvent.ScreenType;
-import com.android.contacts.common.logging.QuickContactEvent.ContactType;
-import com.android.contacts.common.logging.QuickContactEvent.CardType;
 import com.android.contacts.common.logging.QuickContactEvent.ActionType;
+import com.android.contacts.common.logging.QuickContactEvent.CardType;
+import com.android.contacts.common.logging.QuickContactEvent.ContactType;
+import com.android.contacts.common.logging.ScreenEvent.ScreenType;
 import com.android.contacts.common.model.AccountTypeManager;
 import com.android.contacts.common.model.Contact;
 import com.android.contacts.common.model.ContactLoader;
@@ -183,7 +184,6 @@
 import com.android.contacts.widget.MultiShrinkScroller.MultiShrinkScrollerListener;
 import com.android.contacts.widget.QuickContactImageView;
 import com.android.contactsbind.HelpUtils;
-
 import com.google.common.collect.Lists;
 
 import java.util.ArrayList;
@@ -261,6 +261,7 @@
 
     // Set true in {@link #onCreate} after orientation change for later use in processIntent().
     private boolean mIsRecreatedInstance;
+    private boolean mShortcutUsageReported = false;
 
     private boolean mShouldLog;
 
@@ -1246,6 +1247,7 @@
                 getIntent().getStringExtra(QuickContact.EXTRA_PRIORITIZED_MIMETYPE);
         final Uri oldLookupUri = mLookupUri;
 
+
         if (lookupUri == null) {
             finish();
             return;
@@ -2592,6 +2594,11 @@
                     return;
                 }
 
+                if (!mIsRecreatedInstance && !mShortcutUsageReported) {
+                    mShortcutUsageReported = true;
+                    DynamicShortcuts.reportShortcutUsed(QuickContactActivity.this,
+                            data.getLookupKey());
+                }
                 bindContactData(data);
 
             } finally {
