diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index 300f316..9af91cc 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -55,6 +55,7 @@
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.internal.widget.LockPatternUtils;
 import com.android.settings.TrustAgentUtils.TrustAgentComponentInfo;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.fingerprint.FingerprintSettings;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Index;
@@ -1222,7 +1223,7 @@
         }
     }
 
-    public static class UnificationConfirmationDialog extends DialogFragment {
+    public static class UnificationConfirmationDialog extends InstrumentedDialogFragment {
         private static final String EXTRA_COMPLIANT = "compliant";
 
         public static UnificationConfirmationDialog newIntance(boolean compliant) {
@@ -1272,6 +1273,11 @@
             super.onDismiss(dialog);
             ((SecuritySettings) getParentFragment()).updateUnificationPreference();
         }
+
+        @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_UNIFICATION_CONFIRMATION;
+        }
     }
 
 }
diff --git a/src/com/android/settings/UserCredentialsSettings.java b/src/com/android/settings/UserCredentialsSettings.java
index 8a75905..df073d1 100644
--- a/src/com/android/settings/UserCredentialsSettings.java
+++ b/src/com/android/settings/UserCredentialsSettings.java
@@ -50,6 +50,7 @@
 
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.internal.widget.LockPatternUtils;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 
@@ -108,7 +109,7 @@
         }
     }
 
-    public static class CredentialDialogFragment extends DialogFragment {
+    public static class CredentialDialogFragment extends InstrumentedDialogFragment {
         private static final String TAG = "CredentialDialogFragment";
         private static final String ARG_CREDENTIAL = "credential";
 
@@ -166,6 +167,11 @@
             return builder.create();
         }
 
+        @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_USER_CREDENTIAL;
+        }
+
         /**
          * Deletes all certificates and keys under a given alias.
          *
diff --git a/src/com/android/settings/accounts/AccountSettings.java b/src/com/android/settings/accounts/AccountSettings.java
index d0e200af..e93c7fa 100644
--- a/src/com/android/settings/accounts/AccountSettings.java
+++ b/src/com/android/settings/accounts/AccountSettings.java
@@ -56,6 +56,7 @@
 import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Index;
 import com.android.settings.search.Indexable;
@@ -625,7 +626,7 @@
         }
     }
 
-    public static class RemoveUserFragment extends DialogFragment {
+    public static class RemoveUserFragment extends InstrumentedDialogFragment {
         private static final String ARG_USER_ID = "userId";
 
         static RemoveUserFragment newInstance(int userId) {
@@ -649,12 +650,17 @@
                         }
                     });
         }
+
+        @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_REMOVE_USER;
+        }
     }
 
     /**
      * Dialog to inform user about changing auto-sync setting
      */
-    public static class ConfirmAutoSyncChangeFragment extends DialogFragment {
+    public static class ConfirmAutoSyncChangeFragment extends InstrumentedDialogFragment {
         private static final String SAVE_ENABLING = "enabling";
         private static final String SAVE_USER_HANDLE = "userHandle";
         private boolean mEnabling;
@@ -705,6 +711,11 @@
             outState.putBoolean(SAVE_ENABLING, mEnabling);
             outState.putParcelable(SAVE_USER_HANDLE, mUserHandle);
         }
+
+        @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_CONFIRM_AUTO_SYNC_CHANGE;
+        }
     }
 
     public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
diff --git a/src/com/android/settings/applications/AppInfoBase.java b/src/com/android/settings/applications/AppInfoBase.java
index f7992cc..138fadf 100644
--- a/src/com/android/settings/applications/AppInfoBase.java
+++ b/src/com/android/settings/applications/AppInfoBase.java
@@ -37,9 +37,11 @@
 import android.os.UserManager;
 import android.util.Log;
 
+import com.android.internal.logging.MetricsProto;
 import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.applications.ApplicationsState;
 import com.android.settingslib.applications.ApplicationsState.AppEntry;
@@ -229,11 +231,18 @@
                 new UserHandle(UserHandle.getUserId(uid)));
     }
 
-    public static class MyAlertDialogFragment extends DialogFragment {
+    public static class MyAlertDialogFragment extends InstrumentedDialogFragment {
+
+        private static final String ARG_ID = "id";
+
+        @Override
+        public int getMetricsCategory() {
+            return MetricsProto.MetricsEvent.DIALOG_APP_INFO_ACTION;
+        }
 
         @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
-            int id = getArguments().getInt("id");
+            int id = getArguments().getInt(ARG_ID);
             int errorCode = getArguments().getInt("moveError");
             Dialog dialog = ((AppInfoBase) getTargetFragment()).createDialog(id, errorCode);
             if (dialog == null) {
@@ -245,7 +254,7 @@
         public static MyAlertDialogFragment newInstance(int id, int errorCode) {
             MyAlertDialogFragment dialogFragment = new MyAlertDialogFragment();
             Bundle args = new Bundle();
-            args.putInt("id", id);
+            args.putInt(ARG_ID, id);
             args.putInt("moveError", errorCode);
             dialogFragment.setArguments(args);
             return dialogFragment;
diff --git a/src/com/android/settings/applications/RunningServiceDetails.java b/src/com/android/settings/applications/RunningServiceDetails.java
index bfd275f..38b8f37 100644
--- a/src/com/android/settings/applications/RunningServiceDetails.java
+++ b/src/com/android/settings/applications/RunningServiceDetails.java
@@ -36,6 +36,7 @@
 import com.android.settings.core.InstrumentedFragment;
 import com.android.settings.R;
 import com.android.settings.Utils;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -554,15 +555,15 @@
         }
         return null;
     }
-    
+
     private void showConfirmStopDialog(ComponentName comp) {
         DialogFragment newFragment = MyAlertDialogFragment.newConfirmStop(
                 DIALOG_CONFIRM_STOP, comp);
         newFragment.setTargetFragment(this, 0);
         newFragment.show(getFragmentManager(), "confirmstop");
     }
-    
-    public static class MyAlertDialogFragment extends DialogFragment {
+
+    public static class MyAlertDialogFragment extends InstrumentedDialogFragment {
 
         public static MyAlertDialogFragment newConfirmStop(int id, ComponentName comp) {
             MyAlertDialogFragment frag = new MyAlertDialogFragment();
@@ -605,6 +606,11 @@
             }
             throw new IllegalArgumentException("unknown id " + id);
         }
+
+        @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_RUNNIGN_SERVICE;
+        }
     }
 
     void ensureData() {
diff --git a/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java b/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java
index 293a53e..1ee068f 100644
--- a/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java
+++ b/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java
@@ -40,14 +40,17 @@
 import android.widget.EditText;
 import android.widget.TextView;
 
+import com.android.internal.logging.MetricsProto;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
 
 /**
  * Dialog fragment for renaming the local Bluetooth device.
  */
-public final class BluetoothNameDialogFragment extends DialogFragment implements TextWatcher {
+public final class BluetoothNameDialogFragment extends InstrumentedDialogFragment
+        implements TextWatcher {
     private static final int BLUETOOTH_NAME_MAX_LENGTH_BYTES = 248;
 
     private AlertDialog mAlertDialog;
@@ -88,6 +91,11 @@
     }
 
     @Override
+    public int getMetricsCategory() {
+        return MetricsProto.MetricsEvent.DIALOG_BLUETOOTH_RENAME;
+    }
+
+    @Override
     public Dialog onCreateDialog(Bundle savedInstanceState) {
         String deviceName = mLocalAdapter.getName();
         if (savedInstanceState != null) {
diff --git a/src/com/android/settings/bluetooth/DeviceProfilesSettings.java b/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
index ca4d4f5..0c35b69 100755
--- a/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
+++ b/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
@@ -24,8 +24,6 @@
 import android.content.Context;
 import android.content.DialogInterface;
 import android.os.Bundle;
-import android.support.v7.preference.CheckBoxPreference;
-import android.support.v7.preference.EditTextPreference;
 import android.text.Html;
 import android.text.TextUtils;
 import android.util.Log;
@@ -37,7 +35,9 @@
 import android.widget.EditText;
 import android.widget.TextView;
 
+import com.android.internal.logging.MetricsProto;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
@@ -47,9 +47,7 @@
 import com.android.settingslib.bluetooth.PanProfile;
 import com.android.settingslib.bluetooth.PbapServerProfile;
 
-import java.util.HashMap;
-
-public final class DeviceProfilesSettings extends DialogFragment implements
+public final class DeviceProfilesSettings extends InstrumentedDialogFragment implements
         CachedBluetoothDevice.Callback, DialogInterface.OnClickListener, OnClickListener {
     private static final String TAG = "DeviceProfilesSettings";
 
@@ -65,10 +63,6 @@
 
     private ViewGroup mProfileContainer;
     private TextView mProfileLabel;
-    private EditTextPreference mDeviceNamePref;
-
-    private final HashMap<LocalBluetoothProfile, CheckBoxPreference> mAutoConnectPrefs
-            = new HashMap<LocalBluetoothProfile, CheckBoxPreference>();
 
     private AlertDialog mDisconnectDialog;
     private boolean mProfileGroupIsRemoved;
@@ -76,6 +70,11 @@
     private View mRootView;
 
     @Override
+    public int getMetricsCategory() {
+        return MetricsProto.MetricsEvent.DIALOG_BLUETOOTH_PAIRED_DEVICE_PROFILE;
+    }
+
+    @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
diff --git a/src/com/android/settings/dashboard/NoHomeDialogFragment.java b/src/com/android/settings/dashboard/NoHomeDialogFragment.java
index 0bc1705..b8ea9ea 100644
--- a/src/com/android/settings/dashboard/NoHomeDialogFragment.java
+++ b/src/com/android/settings/dashboard/NoHomeDialogFragment.java
@@ -22,9 +22,11 @@
 import android.app.DialogFragment;
 import android.os.Bundle;
 
+import com.android.internal.logging.MetricsProto;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 
-public class NoHomeDialogFragment extends DialogFragment {
+public class NoHomeDialogFragment extends InstrumentedDialogFragment {
     public static void show(Activity parent) {
         final NoHomeDialogFragment dialog = new NoHomeDialogFragment();
         dialog.show(parent.getFragmentManager(), null);
@@ -37,4 +39,9 @@
                 .setPositiveButton(android.R.string.ok, null)
                 .create();
     }
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsProto.MetricsEvent.DIALOG_NO_HOME;
+    }
 }
diff --git a/src/com/android/settings/datausage/BillingCycleSettings.java b/src/com/android/settings/datausage/BillingCycleSettings.java
index 7665bf4..deadc54 100644
--- a/src/com/android/settings/datausage/BillingCycleSettings.java
+++ b/src/com/android/settings/datausage/BillingCycleSettings.java
@@ -37,6 +37,7 @@
 
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settingslib.NetworkPolicyEditor;
 import com.android.settingslib.net.DataUsageController;
 
@@ -191,7 +192,7 @@
     /**
      * Dialog to edit {@link NetworkPolicy#warningBytes}.
      */
-    public static class BytesEditorFragment extends DialogFragment
+    public static class BytesEditorFragment extends InstrumentedDialogFragment
             implements DialogInterface.OnClickListener {
         private static final String EXTRA_TEMPLATE = "template";
         private static final String EXTRA_LIMIT = "limit";
@@ -291,12 +292,17 @@
             }
             target.updateDataUsage();
         }
+
+        @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_BILLING_BYTE_LIMIT;
+        }
     }
 
     /**
      * Dialog to edit {@link NetworkPolicy#cycleDay}.
      */
-    public static class CycleEditorFragment extends DialogFragment implements
+    public static class CycleEditorFragment extends InstrumentedDialogFragment implements
             DialogInterface.OnClickListener {
         private static final String EXTRA_TEMPLATE = "template";
         private NumberPicker mCycleDayPicker;
@@ -314,6 +320,11 @@
         }
 
         @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_BILLING_CYCLE;
+        }
+
+        @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             final Context context = getActivity();
             final DataUsageEditController target = (DataUsageEditController) getTargetFragment();
@@ -359,7 +370,7 @@
      * Dialog to request user confirmation before setting
      * {@link NetworkPolicy#limitBytes}.
      */
-    public static class ConfirmLimitFragment extends DialogFragment implements
+    public static class ConfirmLimitFragment extends InstrumentedDialogFragment implements
             DialogInterface.OnClickListener {
         private static final String EXTRA_MESSAGE = "message";
         private static final String EXTRA_LIMIT_BYTES = "limitBytes";
@@ -392,6 +403,11 @@
         }
 
         @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_BILLING_CONFIRM_LIMIT;
+        }
+
+        @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             final Context context = getActivity();
 
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeForget.java b/src/com/android/settings/deviceinfo/PrivateVolumeForget.java
index 2d408de..d7a57ca 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeForget.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeForget.java
@@ -36,6 +36,7 @@
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 
 public class PrivateVolumeForget extends SettingsPreferenceFragment {
     private static final String TAG_FORGET_CONFIRM = "forget_confirm";
@@ -72,7 +73,13 @@
         }
     };
 
-    public static class ForgetConfirmFragment extends DialogFragment {
+    public static class ForgetConfirmFragment extends InstrumentedDialogFragment {
+
+        @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_VOLUME_FORGET;
+        }
+
         public static void show(Fragment parent, String fsUuid) {
             final Bundle args = new Bundle();
             args.putString(VolumeRecord.EXTRA_FS_UUID, fsUuid);
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
index 428e472..4320223 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
@@ -60,6 +60,7 @@
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
 import com.android.settings.applications.ManageApplications;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.deletionhelper.AutomaticStorageManagerSettings;
 import com.android.settings.deviceinfo.StorageSettings.MountTask;
 import com.android.settingslib.deviceinfo.StorageMeasurement;
@@ -705,7 +706,7 @@
     /**
      * Dialog that allows editing of volume nickname.
      */
-    public static class RenameFragment extends DialogFragment {
+    public static class RenameFragment extends InstrumentedDialogFragment {
         public static void show(PrivateVolumeSettings parent, VolumeInfo vol) {
             if (!parent.isAdded()) return;
 
@@ -718,6 +719,11 @@
         }
 
         @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_VOLUME_RENAME;
+        }
+
+        @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             final Context context = getActivity();
             final StorageManager storageManager = context.getSystemService(StorageManager.class);
@@ -751,7 +757,7 @@
         }
     }
 
-    public static class SystemInfoFragment extends DialogFragment {
+    public static class SystemInfoFragment extends InstrumentedDialogFragment {
         public static void show(Fragment parent) {
             if (!parent.isAdded()) return;
 
@@ -761,6 +767,11 @@
         }
 
         @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_STORAGE_SYSTEM_INFO;
+        }
+
+        @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             return new AlertDialog.Builder(getActivity())
                     .setMessage(R.string.storage_detail_dialog_system)
@@ -769,7 +780,7 @@
         }
     }
 
-    public static class OtherInfoFragment extends DialogFragment {
+    public static class OtherInfoFragment extends InstrumentedDialogFragment {
         public static void show(Fragment parent, String title, VolumeInfo sharedVol) {
             if (!parent.isAdded()) return;
 
@@ -783,6 +794,11 @@
         }
 
         @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_STORAGE_OTHER_INFO;
+        }
+
+        @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             final Context context = getActivity();
 
@@ -806,7 +822,7 @@
         }
     }
 
-    public static class UserInfoFragment extends DialogFragment {
+    public static class UserInfoFragment extends InstrumentedDialogFragment {
         public static void show(Fragment parent, CharSequence userLabel, CharSequence userSize) {
             if (!parent.isAdded()) return;
 
@@ -820,6 +836,11 @@
         }
 
         @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_STORAGE_USER_INFO;
+        }
+
+        @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             final Context context = getActivity();
 
@@ -839,7 +860,7 @@
     /**
      * Dialog to request user confirmation before clearing all cache data.
      */
-    public static class ConfirmClearCacheFragment extends DialogFragment {
+    public static class ConfirmClearCacheFragment extends InstrumentedDialogFragment {
         public static void show(Fragment parent) {
             if (!parent.isAdded()) return;
 
@@ -849,6 +870,11 @@
         }
 
         @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_STORAGE_CLEAR_CACHE;
+        }
+
+        @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             final Context context = getActivity();
 
diff --git a/src/com/android/settings/deviceinfo/StorageSettings.java b/src/com/android/settings/deviceinfo/StorageSettings.java
index 05f5ef0..20717ae 100644
--- a/src/com/android/settings/deviceinfo/StorageSettings.java
+++ b/src/com/android/settings/deviceinfo/StorageSettings.java
@@ -47,6 +47,7 @@
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.dashboard.SummaryLoader;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
@@ -382,7 +383,7 @@
         }
     }
 
-    public static class VolumeUnmountedFragment extends DialogFragment {
+    public static class VolumeUnmountedFragment extends InstrumentedDialogFragment {
         public static void show(Fragment parent, String volumeId) {
             final Bundle args = new Bundle();
             args.putString(VolumeInfo.EXTRA_VOLUME_ID, volumeId);
@@ -394,6 +395,11 @@
         }
 
         @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_VOLUME_UNMOUNT;
+        }
+
+        @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             final Context context = getActivity();
             final StorageManager sm = context.getSystemService(StorageManager.class);
@@ -428,7 +434,12 @@
         }
     }
 
-    public static class DiskInitFragment extends DialogFragment {
+    public static class DiskInitFragment extends InstrumentedDialogFragment {
+        @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_VOLUME_INIT;
+        }
+
         public static void show(Fragment parent, int resId, String diskId) {
             final Bundle args = new Bundle();
             args.putInt(Intent.EXTRA_TEXT, resId);
diff --git a/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java b/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
index b44bc33..bf33487 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
@@ -33,7 +33,9 @@
 import android.view.View;
 import android.widget.Toast;
 
+import com.android.internal.logging.MetricsProto;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 
 import java.util.Objects;
 
@@ -168,7 +170,13 @@
         }
     }
 
-    public static class SlowWarningFragment extends DialogFragment {
+    public static class SlowWarningFragment extends InstrumentedDialogFragment {
+
+        @Override
+        public int getMetricsCategory() {
+            return MetricsProto.MetricsEvent.DIALOG_VOLUME_SLOW_WARNING;
+        }
+
         @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             final Context context = getActivity();
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
index adc7a99..cd56458 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
@@ -44,6 +44,7 @@
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.ChooseLockSettingsHelper;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 
 /**
  * Activity which handles the actual enrolling for fingerprint.
@@ -427,7 +428,7 @@
         return MetricsEvent.FINGERPRINT_ENROLLING;
     }
 
-    public static class IconTouchDialog extends DialogFragment {
+    public static class IconTouchDialog extends InstrumentedDialogFragment {
 
         @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
@@ -443,9 +444,14 @@
                             });
             return builder.create();
         }
+
+        @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_FINGERPRINT_ICON_TOUCH;
+        }
     }
 
-    public static class ErrorDialog extends DialogFragment {
+    public static class ErrorDialog extends InstrumentedDialogFragment {
 
         /**
          * Create a new instance of ErrorDialog.
@@ -488,5 +494,10 @@
             dialog.setCanceledOnTouchOutside(false);
             return dialog;
         }
+
+        @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_FINGERPINT_ERROR;
+        }
     }
 }
diff --git a/src/com/android/settings/fingerprint/FingerprintSettings.java b/src/com/android/settings/fingerprint/FingerprintSettings.java
index 980bf0b..5bb0856 100644
--- a/src/com/android/settings/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/fingerprint/FingerprintSettings.java
@@ -64,6 +64,7 @@
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.ChooseLockGeneric;
 import com.android.settings.ChooseLockSettingsHelper;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settingslib.HelpUtils;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
@@ -562,7 +563,7 @@
             }
         };
 
-        public static class RenameDeleteDialog extends DialogFragment {
+        public static class RenameDeleteDialog extends InstrumentedDialogFragment {
 
             private Fingerprint mFp;
             private EditText mDialogTextField;
@@ -669,13 +670,23 @@
                     outState.putInt("endSelection", mDialogTextField.getSelectionEnd());
                 }
             }
+
+            @Override
+            public int getMetricsCategory() {
+                return MetricsEvent.DIALOG_FINGERPINT_EDIT;
+            }
         }
 
-        public static class ConfirmLastDeleteDialog extends DialogFragment {
+        public static class ConfirmLastDeleteDialog extends InstrumentedDialogFragment {
 
             private Fingerprint mFp;
 
             @Override
+            public int getMetricsCategory() {
+                return MetricsEvent.DIALOG_FINGERPINT_DELETE_LAST;
+            }
+
+            @Override
             public Dialog onCreateDialog(Bundle savedInstanceState) {
                 mFp = getArguments().getParcelable("fingerprint");
                 final boolean isProfileChallengeUser =
diff --git a/src/com/android/settings/fingerprint/SetupFingerprintEnrollEnrolling.java b/src/com/android/settings/fingerprint/SetupFingerprintEnrollEnrolling.java
index 7e95a9a..90b281f 100644
--- a/src/com/android/settings/fingerprint/SetupFingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/fingerprint/SetupFingerprintEnrollEnrolling.java
@@ -31,6 +31,7 @@
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.SetupWizardUtils;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 
 public class SetupFingerprintEnrollEnrolling extends FingerprintEnrollEnrolling {
 
@@ -73,7 +74,7 @@
         return MetricsEvent.FINGERPRINT_ENROLLING_SETUP;
     }
 
-    public static class SkipDialog extends DialogFragment {
+    public static class SkipDialog extends InstrumentedDialogFragment {
 
         @Override
         public void show(FragmentManager manager, String tag) {
@@ -111,5 +112,10 @@
                             })
                     .create();
         }
+
+        @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_FINGERPRINT_CANCEL_SETUP;
+        }
     }
 }
diff --git a/src/com/android/settings/fingerprint/SetupSkipDialog.java b/src/com/android/settings/fingerprint/SetupSkipDialog.java
index c6e04d7..9e9bb4c 100644
--- a/src/com/android/settings/fingerprint/SetupSkipDialog.java
+++ b/src/com/android/settings/fingerprint/SetupSkipDialog.java
@@ -25,9 +25,12 @@
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 
+import com.android.internal.logging.MetricsProto;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 
-public class SetupSkipDialog extends DialogFragment implements DialogInterface.OnClickListener {
+public class SetupSkipDialog extends InstrumentedDialogFragment
+        implements DialogInterface.OnClickListener {
 
     public static final String EXTRA_FRP_SUPPORTED = ":settings:frp_supported";
 
@@ -44,6 +47,11 @@
     }
 
     @Override
+    public int getMetricsCategory() {
+        return MetricsProto.MetricsEvent.DIALOG_FINGERPRINT_SKIP_SETUP;
+    }
+
+    @Override
     public Dialog onCreateDialog(Bundle savedInstanceState) {
         return onCreateDialogBuilder().create();
     }
diff --git a/src/com/android/settings/fuelgauge/HighPowerDetail.java b/src/com/android/settings/fuelgauge/HighPowerDetail.java
index 6946f62..c448756 100644
--- a/src/com/android/settings/fuelgauge/HighPowerDetail.java
+++ b/src/com/android/settings/fuelgauge/HighPowerDetail.java
@@ -30,11 +30,13 @@
 import android.widget.Checkable;
 import android.widget.TextView;
 
+import com.android.internal.logging.MetricsProto;
 import com.android.settings.R;
 import com.android.settings.applications.AppInfoBase;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settingslib.applications.ApplicationsState.AppEntry;
 
-public class HighPowerDetail extends DialogFragment implements OnClickListener,
+public class HighPowerDetail extends InstrumentedDialogFragment implements OnClickListener,
         View.OnClickListener {
 
     private static final String ARG_DEFAULT_ON = "default_on";
@@ -49,6 +51,11 @@
     private Checkable mOptionOff;
 
     @Override
+    public int getMetricsCategory() {
+        return MetricsProto.MetricsEvent.DIALOG_HIGH_POWER_DETAILS;
+    }
+
+    @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
diff --git a/src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java b/src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java
index ad7a2b1..24bdd61 100644
--- a/src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java
+++ b/src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java
@@ -40,12 +40,14 @@
 import android.widget.RadioButton;
 import android.widget.TextView;
 
+import com.android.internal.logging.MetricsProto;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 
 import java.util.ArrayList;
 import java.util.Collections;
 
-public class KeyboardLayoutDialogFragment extends DialogFragment
+public class KeyboardLayoutDialogFragment extends InstrumentedDialogFragment
         implements InputDeviceListener, LoaderCallbacks<KeyboardLayoutDialogFragment.Keyboards> {
     private static final String KEY_INPUT_DEVICE_IDENTIFIER = "inputDeviceIdentifier";
 
@@ -62,6 +64,12 @@
         mInputDeviceIdentifier = inputDeviceIdentifier;
     }
 
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsProto.MetricsEvent.DIALOG_KEYBOARD_LAYOUT;
+    }
+
     @Override
     public void onAttach(Activity activity) {
         super.onAttach(activity);
diff --git a/src/com/android/settings/notification/NotificationAccessSettings.java b/src/com/android/settings/notification/NotificationAccessSettings.java
index 78e90c8..ad3daae 100644
--- a/src/com/android/settings/notification/NotificationAccessSettings.java
+++ b/src/com/android/settings/notification/NotificationAccessSettings.java
@@ -31,6 +31,7 @@
 
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.utils.ManagedServiceSettings;
 import com.android.settings.utils.ServiceListing;
 
@@ -102,7 +103,7 @@
         });
     }
 
-    public class FriendlyWarningDialogFragment extends DialogFragment {
+    public class FriendlyWarningDialogFragment extends InstrumentedDialogFragment {
         static final String KEY_COMPONENT = "c";
         static final String KEY_LABEL = "l";
 
@@ -115,6 +116,11 @@
         }
 
         @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_DISABLE_NOTIFICATION_ACCESS;
+        }
+
+        @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             final Bundle args = getArguments();
diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java
index 8b8ef9e..7365995 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -66,6 +66,7 @@
 import com.android.settings.DefaultRingtonePreference;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.dashboard.SummaryLoader;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
@@ -826,12 +827,17 @@
         mWorkAlarmRingtonePreference = null;
     }
 
-    public static class UnifyWorkDialogFragment extends DialogFragment
+    public static class UnifyWorkDialogFragment extends InstrumentedDialogFragment
             implements DialogInterface.OnClickListener {
         private static final String TAG = "UnifyWorkDialogFragment";
         private static final int REQUEST_CODE = 200;
 
         @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_UNIFY_SOUND_SETTINGS;
+        }
+
+        @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             return new AlertDialog.Builder(getActivity())
                     .setTitle(R.string.work_sync_dialog_title)
diff --git a/src/com/android/settings/notification/ZenAccessSettings.java b/src/com/android/settings/notification/ZenAccessSettings.java
index b0e8e9b..7312b1d 100644
--- a/src/com/android/settings/notification/ZenAccessSettings.java
+++ b/src/com/android/settings/notification/ZenAccessSettings.java
@@ -46,6 +46,7 @@
 
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -203,10 +204,15 @@
     /**
      * Warning dialog when allowing zen access warning about the privileges being granted.
      */
-    public static class ScaryWarningDialogFragment extends DialogFragment {
+    public static class ScaryWarningDialogFragment extends InstrumentedDialogFragment {
         static final String KEY_PKG = "p";
         static final String KEY_LABEL = "l";
 
+        @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_ZEN_ACCESS_GRANT;
+        }
+
         public ScaryWarningDialogFragment setPkgInfo(String pkg, CharSequence label) {
             Bundle args = new Bundle();
             args.putString(KEY_PKG, pkg);
@@ -249,10 +255,16 @@
     /**
      * Warning dialog when revoking zen access warning that zen rule instances will be deleted.
      */
-    public static class FriendlyWarningDialogFragment extends DialogFragment {
+    public static class FriendlyWarningDialogFragment extends InstrumentedDialogFragment {
         static final String KEY_PKG = "p";
         static final String KEY_LABEL = "l";
 
+
+        @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_ZEN_ACCESS_REVOKE;
+        }
+
         public FriendlyWarningDialogFragment setPkgInfo(String pkg, CharSequence label) {
             Bundle args = new Bundle();
             args.putString(KEY_PKG, pkg);
diff --git a/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java b/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java
index d2dcdf8..7a816c3 100644
--- a/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java
+++ b/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java
@@ -39,6 +39,7 @@
 
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 
 import java.text.SimpleDateFormat;
 import java.util.Arrays;
@@ -275,11 +276,16 @@
             setSummary(time);
         }
 
-        public static class TimePickerFragment extends DialogFragment implements
+        public static class TimePickerFragment extends InstrumentedDialogFragment implements
                 TimePickerDialog.OnTimeSetListener {
             public TimePickerPreference pref;
 
             @Override
+            public int getMetricsCategory() {
+                return MetricsEvent.DIALOG_ZEN_TIMEPICKER;
+            }
+
+            @Override
             public Dialog onCreateDialog(Bundle savedInstanceState) {
                 final boolean usePref = pref != null && pref.mHourOfDay >= 0 && pref.mMinute >= 0;
                 final Calendar c = Calendar.getInstance();
diff --git a/src/com/android/settings/utils/ManagedServiceSettings.java b/src/com/android/settings/utils/ManagedServiceSettings.java
index 14c9b61..bd839c8 100644
--- a/src/com/android/settings/utils/ManagedServiceSettings.java
+++ b/src/com/android/settings/utils/ManagedServiceSettings.java
@@ -35,7 +35,9 @@
 import android.view.View;
 import android.widget.TextView;
 
+import com.android.internal.logging.MetricsProto;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.notification.EmptyTextSettings;
 
 import java.util.Collections;
@@ -130,10 +132,15 @@
         }
     }
 
-    public static class ScaryWarningDialogFragment extends DialogFragment {
+    public static class ScaryWarningDialogFragment extends InstrumentedDialogFragment {
         static final String KEY_COMPONENT = "c";
         static final String KEY_LABEL = "l";
 
+        @Override
+        public int getMetricsCategory() {
+            return MetricsProto.MetricsEvent.DIALOG_SERVICE_ACCESS_WARNING;
+        }
+
         public ScaryWarningDialogFragment setServiceInfo(ComponentName cn, String label,
                 Fragment target) {
             Bundle args = new Bundle();
diff --git a/src/com/android/settings/vpn2/AppDialogFragment.java b/src/com/android/settings/vpn2/AppDialogFragment.java
index 8013780..6093e89 100644
--- a/src/com/android/settings/vpn2/AppDialogFragment.java
+++ b/src/com/android/settings/vpn2/AppDialogFragment.java
@@ -31,13 +31,15 @@
 import android.os.UserManager;
 import android.util.Log;
 
+import com.android.internal.logging.MetricsProto;
 import com.android.internal.net.VpnConfig;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 
 /**
  * Fragment wrapper around an {@link AppDialog}.
  */
-public class AppDialogFragment extends DialogFragment implements AppDialog.Listener {
+public class AppDialogFragment extends InstrumentedDialogFragment implements AppDialog.Listener {
     private static final String TAG_APP_DIALOG = "vpnappdialog";
     private static final String TAG = "AppDialogFragment";
 
@@ -53,9 +55,14 @@
     private final IConnectivityManager mService = IConnectivityManager.Stub.asInterface(
             ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
 
+    @Override
+    public int getMetricsCategory() {
+        return MetricsProto.MetricsEvent.DIALOG_VPN_APP_CONFIG;
+    }
+
     public interface Listener {
-        public void onForget();
-        public void onCancel();
+        void onForget();
+        void onCancel();
     }
 
     public static void show(Fragment parent, PackageInfo packageInfo, String label,
diff --git a/src/com/android/settings/vpn2/AppManagementFragment.java b/src/com/android/settings/vpn2/AppManagementFragment.java
index e9dd4fd..1a3000e 100644
--- a/src/com/android/settings/vpn2/AppManagementFragment.java
+++ b/src/com/android/settings/vpn2/AppManagementFragment.java
@@ -42,6 +42,7 @@
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settingslib.RestrictedSwitchPreference;
 import com.android.settingslib.RestrictedPreference;
 
@@ -303,10 +304,15 @@
         return getAlwaysOnVpnPackage() != null && !isVpnAlwaysOn();
     }
 
-    public static class CannotConnectFragment extends DialogFragment {
+    public static class CannotConnectFragment extends InstrumentedDialogFragment {
         private static final String TAG = "CannotConnect";
         private static final String ARG_VPN_LABEL = "label";
 
+        @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_VPN_CANNOT_CONNECT;
+        }
+
         public static void show(AppManagementFragment parent, String vpnLabel) {
             if (parent.getFragmentManager().findFragmentByTag(TAG) == null) {
                 final Bundle args = new Bundle();
@@ -329,10 +335,15 @@
         }
     }
 
-    public static class ReplaceExistingVpnFragment extends DialogFragment
+    public static class ReplaceExistingVpnFragment extends InstrumentedDialogFragment
             implements DialogInterface.OnClickListener {
         private static final String TAG = "ReplaceExistingVpn";
 
+        @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_VPN_REPLACE_EXISTING;
+        }
+
         public static void show(AppManagementFragment parent) {
             if (parent.getFragmentManager().findFragmentByTag(TAG) == null) {
                 final ReplaceExistingVpnFragment frag = new ReplaceExistingVpnFragment();
diff --git a/src/com/android/settings/vpn2/ConfigDialogFragment.java b/src/com/android/settings/vpn2/ConfigDialogFragment.java
index 1880a6b..1a180c5 100644
--- a/src/com/android/settings/vpn2/ConfigDialogFragment.java
+++ b/src/com/android/settings/vpn2/ConfigDialogFragment.java
@@ -16,8 +16,6 @@
 
 package com.android.settings.vpn2;
 
-import java.util.Arrays;
-
 import android.app.Dialog;
 import android.app.DialogFragment;
 import android.content.Context;
@@ -33,16 +31,18 @@
 import android.util.Log;
 import android.widget.Toast;
 
+import com.android.internal.logging.MetricsProto;
 import com.android.internal.net.LegacyVpnInfo;
 import com.android.internal.net.VpnConfig;
 import com.android.internal.net.VpnProfile;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 
 /**
  * Fragment wrapper around a {@link ConfigDialog}.
  */
-public class ConfigDialogFragment extends DialogFragment implements
-        DialogInterface.OnClickListener {
+public class ConfigDialogFragment extends InstrumentedDialogFragment
+        implements DialogInterface.OnClickListener {
     private static final String TAG_CONFIG_DIALOG = "vpnconfigdialog";
     private static final String TAG = "ConfigDialogFragment";
 
@@ -55,6 +55,12 @@
 
     private boolean mUnlocking = false;
 
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsProto.MetricsEvent.DIALOG_LEGACY_VPN_CONFIG;
+    }
+
     public static void show(VpnSettings parent, VpnProfile profile, boolean edit, boolean exists) {
         if (!parent.isAdded()) return;
 
diff --git a/src/com/android/settings/wifi/AdvancedWifiSettings.java b/src/com/android/settings/wifi/AdvancedWifiSettings.java
index f53f59a..b0bdd77 100644
--- a/src/com/android/settings/wifi/AdvancedWifiSettings.java
+++ b/src/com/android/settings/wifi/AdvancedWifiSettings.java
@@ -31,6 +31,7 @@
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.RestrictedSettingsFragment;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settingslib.RestrictedLockUtils;
 
 public class AdvancedWifiSettings extends RestrictedSettingsFragment {
@@ -117,7 +118,7 @@
     }
 
     /* Wrapper class for the WPS dialog to properly handle life cycle events like rotation. */
-    public static class WpsFragment extends DialogFragment {
+    public static class WpsFragment extends InstrumentedDialogFragment {
         private static int mWpsSetup;
 
         // Public default constructor is required for rotation.
@@ -131,6 +132,11 @@
         }
 
         @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.DIALOG_WPS_SETUP;
+        }
+
+        @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             return new WpsDialog(getActivity(), mWpsSetup);
         }
diff --git a/src/com/android/settings/wifi/WifiScanModeActivity.java b/src/com/android/settings/wifi/WifiScanModeActivity.java
index 893aaf4..29ef79e 100644
--- a/src/com/android/settings/wifi/WifiScanModeActivity.java
+++ b/src/com/android/settings/wifi/WifiScanModeActivity.java
@@ -28,7 +28,9 @@
 import android.os.Bundle;
 import android.provider.Settings;
 
+import com.android.internal.logging.MetricsProto;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 
 /**
  * This activity requests users permission to allow scanning even when Wi-Fi is turned off
@@ -104,7 +106,7 @@
         createDialog();
     }
 
-    public static class AlertDialogFragment extends DialogFragment {
+    public static class AlertDialogFragment extends InstrumentedDialogFragment {
         static AlertDialogFragment newInstance(String app) {
             AlertDialogFragment frag = new AlertDialogFragment(app);
             return frag;
@@ -122,6 +124,11 @@
         }
 
         @Override
+        public int getMetricsCategory() {
+            return MetricsProto.MetricsEvent.DIALOG_WIFI_SCAN_MODE;
+        }
+
+        @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             return new AlertDialog.Builder(getActivity())
                     .setMessage(getString(R.string.wifi_scan_always_turnon_message, mApp))
diff --git a/src/com/android/settings/wifi/WifiSetupActivity.java b/src/com/android/settings/wifi/WifiSetupActivity.java
index 2264546..70370b2 100644
--- a/src/com/android/settings/wifi/WifiSetupActivity.java
+++ b/src/com/android/settings/wifi/WifiSetupActivity.java
@@ -32,9 +32,11 @@
 import android.support.v14.preference.PreferenceFragment;
 import android.util.Log;
 
+import com.android.internal.logging.MetricsProto;
 import com.android.settings.ButtonBarHandler;
 import com.android.settings.R;
 import com.android.settings.SetupWizardUtils;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.setupwizardlib.view.NavigationBar;
 
 public class WifiSetupActivity extends WifiPickerActivity
@@ -240,7 +242,7 @@
         return info != null && info.isConnected();
     }
 
-    public static class WifiSkipDialog extends DialogFragment {
+    public static class WifiSkipDialog extends InstrumentedDialogFragment {
         public static WifiSkipDialog newInstance(int messageRes) {
             final Bundle args = new Bundle();
             args.putInt("messageRes", messageRes);
@@ -254,6 +256,11 @@
         }
 
         @Override
+        public int getMetricsCategory() {
+            return MetricsProto.MetricsEvent.DIALOG_WIFI_SKIP;
+        }
+
+        @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             int messageRes = getArguments().getInt("messageRes");
             final AlertDialog dialog = new AlertDialog.Builder(getActivity())
