diff --git a/src/com/android/settings/ApnSettings.java b/src/com/android/settings/ApnSettings.java
index 9865fb2..a32e421 100644
--- a/src/com/android/settings/ApnSettings.java
+++ b/src/com/android/settings/ApnSettings.java
@@ -507,4 +507,12 @@
         }
         return null;
     }
+
+    @Override
+    public int getDialogMetricsCategory(int dialogId) {
+        if (dialogId == DIALOG_RESTORE_DEFAULTAPN) {
+            return MetricsEvent.DIALOG_APN_RESTORE_DEFAULT;
+        }
+        return 0;
+    }
 }
diff --git a/src/com/android/settings/DialogCreatable.java b/src/com/android/settings/DialogCreatable.java
index a0de2e0..ca0d3d1 100644
--- a/src/com/android/settings/DialogCreatable.java
+++ b/src/com/android/settings/DialogCreatable.java
@@ -26,4 +26,6 @@
 public interface DialogCreatable {
 
     Dialog onCreateDialog(int dialogId);
+
+    int getDialogMetricsCategory(int dialogId);
 }
diff --git a/src/com/android/settings/DreamSettings.java b/src/com/android/settings/DreamSettings.java
index 2a7c852..6587097 100644
--- a/src/com/android/settings/DreamSettings.java
+++ b/src/com/android/settings/DreamSettings.java
@@ -183,6 +183,14 @@
         return super.onCreateDialog(dialogId);
     }
 
+    @Override
+    public int getDialogMetricsCategory(int dialogId) {
+        if (dialogId == DIALOG_WHEN_TO_DREAM) {
+            return MetricsEvent.DIALOG_DREAM_START_DELAY;
+        }
+        return 0;
+    }
+
     private Dialog createWhenToDreamDialog() {
         final CharSequence[] items = {
                 mContext.getString(R.string.screensaver_settings_summary_dock),
diff --git a/src/com/android/settings/EncryptionInterstitial.java b/src/com/android/settings/EncryptionInterstitial.java
index a26d0dc..81945df 100644
--- a/src/com/android/settings/EncryptionInterstitial.java
+++ b/src/com/android/settings/EncryptionInterstitial.java
@@ -259,6 +259,14 @@
             }
         }
 
+        @Override
+        public int getDialogMetricsCategory(int dialogId) {
+            if (dialogId == ACCESSIBILITY_WARNING_DIALOG) {
+                return MetricsEvent.DIALOG_ENCRYPTION_INTERSTITIAL_ACCESSIBILITY;
+            }
+            return 0;
+        }
+
         private void setRequirePasswordState(boolean required) {
             mPasswordRequired = required;
         }
diff --git a/src/com/android/settings/ProxySelector.java b/src/com/android/settings/ProxySelector.java
index ae5dd8b..80de9da 100644
--- a/src/com/android/settings/ProxySelector.java
+++ b/src/com/android/settings/ProxySelector.java
@@ -108,6 +108,11 @@
         return null;
     }
 
+    @Override
+    public int getDialogMetricsCategory(int dialogId) {
+        return MetricsEvent.DIALOG_PROXY_SELECTOR_ERROR;
+    }
+
     private void showDialog(int dialogId) {
         if (mDialogFragment != null) {
             Log.e(TAG, "Old dialog fragment not null!");
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index cc87c05..28230a9 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -46,9 +46,11 @@
 
 import com.android.settings.applications.LayoutPreference;
 import com.android.settings.core.InstrumentedFragment;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settingslib.HelpUtils;
 
 import java.util.UUID;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * Base class for Settings fragments, with some helper functions and dialog management.
@@ -501,10 +503,16 @@
         mDialogFragment.show(getChildFragmentManager(), Integer.toString(dialogId));
     }
 
+    @Override
     public Dialog onCreateDialog(int dialogId) {
         return null;
     }
 
+    @Override
+    public int getDialogMetricsCategory(int dialogId) {
+        return 0;
+    }
+
     protected void removeDialog(int dialogId) {
         // mDialogFragment may not be visible yet in parent fragment's onResume().
         // To be able to dismiss dialog at that time, don't check
@@ -569,12 +577,10 @@
         onDialogShowing();
     }
 
-    public static class SettingsDialogFragment extends DialogFragment {
+    public static class SettingsDialogFragment extends InstrumentedDialogFragment {
         private static final String KEY_DIALOG_ID = "key_dialog_id";
         private static final String KEY_PARENT_FRAGMENT_ID = "key_parent_fragment_id";
 
-        private int mDialogId;
-
         private Fragment mParentFragment;
 
         private DialogInterface.OnCancelListener mOnCancelListener;
@@ -585,7 +591,7 @@
         }
 
         public SettingsDialogFragment(DialogCreatable fragment, int dialogId) {
-            mDialogId = dialogId;
+            super(fragment, dialogId);
             if (!(fragment instanceof Fragment)) {
                 throw new IllegalArgumentException("fragment argument must be an instance of "
                         + Fragment.class.getName());
@@ -593,6 +599,16 @@
             mParentFragment = (Fragment) fragment;
         }
 
+
+        @Override
+        public int getMetricsCategory() {
+            final int metricsCategory = mDialogCreatable.getDialogMetricsCategory(mDialogId);
+            if (metricsCategory <= 0) {
+                throw new IllegalStateException("Dialog must provide a metrics category");
+            }
+            return metricsCategory;
+        }
+
         @Override
         public void onSaveInstanceState(Bundle outState) {
             super.onSaveInstanceState(outState);
diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java
index 7485328..40c91ce 100644
--- a/src/com/android/settings/TetherSettings.java
+++ b/src/com/android/settings/TetherSettings.java
@@ -259,6 +259,14 @@
         return null;
     }
 
+    @Override
+    public int getDialogMetricsCategory(int dialogId) {
+        if (dialogId == DIALOG_AP_SETTINGS) {
+            return MetricsEvent.DIALOG_AP_SETTINGS;
+        }
+        return 0;
+    }
+
     private class TetherChangeReceiver extends BroadcastReceiver {
         @Override
         public void onReceive(Context content, Intent intent) {
diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
index 3168178..8535850 100644
--- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
@@ -202,6 +202,15 @@
         }
     }
 
+    @Override
+    public int getDialogMetricsCategory(int dialogId) {
+        if (dialogId == DIALOG_ID_ENABLE_WARNING) {
+            return MetricsEvent.DIALOG_ACCESSIBILITY_SERVICE_ENABLE;
+        } else {
+            return MetricsEvent.DIALOG_ACCESSIBILITY_SERVICE_DISABLE;
+        }
+    }
+
     private void updateSwitchBarToggleSwitch() {
         final boolean checked = AccessibilityUtils.getEnabledServicesFromSettings(getActivity())
                 .contains(mComponentName);
diff --git a/src/com/android/settings/accounts/AccountSyncSettings.java b/src/com/android/settings/accounts/AccountSyncSettings.java
index 6b6791e..ae06f9c 100644
--- a/src/com/android/settings/accounts/AccountSyncSettings.java
+++ b/src/com/android/settings/accounts/AccountSyncSettings.java
@@ -52,13 +52,13 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 
-import com.google.android.collect.Lists;
-
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settingslib.RestrictedLockUtils;
 
+import com.google.android.collect.Lists;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Date;
@@ -153,6 +153,20 @@
     }
 
     @Override
+    public int getDialogMetricsCategory(int dialogId) {
+        switch (dialogId) {
+            case REALLY_REMOVE_DIALOG:
+                return MetricsEvent.DIALOG_ACCOUNT_SYNC_REMOVE;
+            case FAILED_REMOVAL_DIALOG:
+                return MetricsEvent.DIALOG_ACCOUNT_SYNC_FAILED_REMOVAL;
+            case CANT_DO_ONETIME_SYNC_DIALOG:
+                return MetricsEvent.DIALOG_ACCOUNT_SYNC_CANNOT_ONETIME_SYNC;
+            default:
+                return 0;
+        }
+    }
+
+    @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         setPreferenceScreen(null);
diff --git a/src/com/android/settings/core/instrumentation/InstrumentedDialogFragment.java b/src/com/android/settings/core/instrumentation/InstrumentedDialogFragment.java
index 6f97068..f0a3fed 100644
--- a/src/com/android/settings/core/instrumentation/InstrumentedDialogFragment.java
+++ b/src/com/android/settings/core/instrumentation/InstrumentedDialogFragment.java
@@ -15,12 +15,25 @@
  */
 package com.android.settings.core.instrumentation;
 
+import com.android.settings.DialogCreatable;
 import com.android.settings.core.lifecycle.ObservableDialogFragment;
 
 public abstract class InstrumentedDialogFragment extends ObservableDialogFragment
         implements Instrumentable {
 
+    protected final DialogCreatable mDialogCreatable;
+    protected int mDialogId;
+
     public InstrumentedDialogFragment() {
+        this(null /* parentFragment */, 0 /* dialogId */);
+    }
+
+    /**
+     * Use this if the dialog is created via {@code DialogCreatable}
+     */
+    public InstrumentedDialogFragment(DialogCreatable dialogCreatable, int dialogId) {
+        mDialogCreatable = dialogCreatable;
+        mDialogId = dialogId;
         mLifecycle.addObserver(new VisibilityLoggerMixin(getMetricsCategory()));
     }
 
diff --git a/src/com/android/settings/display/NightDisplaySettings.java b/src/com/android/settings/display/NightDisplaySettings.java
index 98352a7..b37e2e2 100644
--- a/src/com/android/settings/display/NightDisplaySettings.java
+++ b/src/com/android/settings/display/NightDisplaySettings.java
@@ -156,6 +156,17 @@
     }
 
     @Override
+    public int getDialogMetricsCategory(int dialogId) {
+        switch (dialogId) {
+            case DIALOG_START_TIME:
+                return MetricsEvent.DIALOG_NIGHT_DISPLAY_SET_START_TIME;
+            case DIALOG_END_TIME:
+                return MetricsEvent.DIALOG_NIGHT_DISPLAY_SET_END_TIME;
+            default:
+                return 0;
+        }
+    }
+    @Override
     public void onActivated(boolean activated) {
         mActivatedPreference.setChecked(activated);
     }
diff --git a/src/com/android/settings/users/RestrictedProfileSettings.java b/src/com/android/settings/users/RestrictedProfileSettings.java
index 182053f..31722e2 100644
--- a/src/com/android/settings/users/RestrictedProfileSettings.java
+++ b/src/com/android/settings/users/RestrictedProfileSettings.java
@@ -26,6 +26,7 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import com.android.internal.logging.MetricsProto;
 import com.android.settings.R;
 import com.android.settings.Utils;
 
@@ -133,6 +134,18 @@
         return null;
     }
 
+    @Override
+    public int getDialogMetricsCategory(int dialogId) {
+        switch (dialogId) {
+            case DIALOG_ID_EDIT_USER_INFO:
+                return MetricsProto.MetricsEvent.DIALOG_USER_EDIT;
+            case DIALOG_CONFIRM_REMOVE:
+                return MetricsProto.MetricsEvent.DIALOG_USER_REMOVE;
+            default:
+                return 0;
+        }
+    }
+
     private void removeUser() {
         getView().post(new Runnable() {
             public void run() {
diff --git a/src/com/android/settings/users/UserDetailsSettings.java b/src/com/android/settings/users/UserDetailsSettings.java
index 65f55cb..47f8007 100644
--- a/src/com/android/settings/users/UserDetailsSettings.java
+++ b/src/com/android/settings/users/UserDetailsSettings.java
@@ -26,6 +26,7 @@
 import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
 
+import com.android.internal.logging.MetricsProto;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
@@ -192,6 +193,20 @@
         throw new IllegalArgumentException("Unsupported dialogId " + dialogId);
     }
 
+    @Override
+    public int getDialogMetricsCategory(int dialogId) {
+        switch (dialogId) {
+            case DIALOG_CONFIRM_REMOVE:
+                return MetricsProto.MetricsEvent.DIALOG_USER_REMOVE;
+            case DIALOG_CONFIRM_ENABLE_CALLING:
+                return MetricsProto.MetricsEvent.DIALOG_USER_ENABLE_CALLING;
+            case DIALOG_CONFIRM_ENABLE_CALLING_AND_SMS:
+                return MetricsProto.MetricsEvent.DIALOG_USER_ENABLE_CALLING_AND_SMS;
+            default:
+                return 0;
+        }
+    }
+
     void removeUser() {
         mUserManager.removeUser(mUserInfo.id);
         finishFragment();
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index bc3712e..d070838 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -622,6 +622,32 @@
         }
     }
 
+    @Override
+    public int getDialogMetricsCategory(int dialogId) {
+        switch (dialogId) {
+            case DIALOG_CONFIRM_REMOVE:
+                return MetricsEvent.DIALOG_USER_REMOVE;
+            case DIALOG_USER_CANNOT_MANAGE:
+                return MetricsEvent.DIALOG_USER_CANNOT_MANAGE;
+            case DIALOG_ADD_USER:
+                return MetricsEvent.DIALOG_USER_ADD;
+            case DIALOG_SETUP_USER:
+                return MetricsEvent.DIALOG_USER_SETUP;
+            case DIALOG_SETUP_PROFILE:
+                return MetricsEvent.DIALOG_USER_SETUP_PROFILE;
+            case DIALOG_CHOOSE_USER_TYPE:
+                return MetricsEvent.DIALOG_USER_CHOOSE_TYPE;
+            case DIALOG_NEED_LOCKSCREEN:
+                return MetricsEvent.DIALOG_USER_NEED_LOCKSCREEN;
+            case DIALOG_CONFIRM_EXIT_GUEST:
+                return MetricsEvent.DIALOG_USER_CONFIRM_EXIT_GUEST;
+            case DIALOG_USER_PROFILE_EDITOR:
+                return MetricsEvent.DIALOG_USER_EDIT_PROFILE;
+            default:
+                return 0;
+        }
+    }
+
     private static boolean emergencyInfoActivityPresent(Context context) {
         Intent intent = new Intent(ACTION_EDIT_EMERGENCY_INFO).setPackage("com.android.emergency");
         List<ResolveInfo> infos = context.getPackageManager().queryIntentActivities(intent, 0);
diff --git a/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java b/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java
index ea92b7f..55f0b63 100644
--- a/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java
+++ b/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java
@@ -25,6 +25,7 @@
 import android.support.v7.preference.PreferenceScreen;
 import android.util.Log;
 
+import com.android.internal.logging.MetricsProto;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
@@ -152,6 +153,16 @@
     }
 
     @Override
+    public int getDialogMetricsCategory(int dialogId) {
+        switch (dialogId) {
+            case WifiSettings.WIFI_DIALOG_ID:
+                return MetricsProto.MetricsEvent.DIALOG_WIFI_SAVED_AP_EDIT;
+            default:
+                return 0;
+        }
+    }
+
+    @Override
     public void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
 
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 6198bc9..782ff13 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -597,6 +597,22 @@
         return super.onCreateDialog(dialogId);
     }
 
+    @Override
+    public int getDialogMetricsCategory(int dialogId) {
+        switch (dialogId) {
+            case WIFI_DIALOG_ID:
+                return MetricsEvent.DIALOG_WIFI_AP_EDIT;
+            case WPS_PBC_DIALOG_ID:
+                return MetricsEvent.DIALOG_WIFI_PBC;
+            case WPS_PIN_DIALOG_ID:
+                return MetricsEvent.DIALOG_WIFI_PIN;
+            case WRITE_NFC_DIALOG_ID:
+                return MetricsEvent.DIALOG_WIFI_WRITE_NFC;
+            default:
+                return 0;
+        }
+    }
+
     /**
      * Shows the latest access points available with supplemental information like
      * the strength of network and the security for it.
diff --git a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
index ddf7dfe..487090d 100644
--- a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
+++ b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
@@ -496,6 +496,21 @@
     }
 
     @Override
+    public int getDialogMetricsCategory(int dialogId) {
+        switch (dialogId) {
+            case DIALOG_DISCONNECT:
+                return MetricsEvent.DIALOG_WIFI_P2P_DISCONNECT;
+            case DIALOG_CANCEL_CONNECT:
+                return MetricsEvent.DIALOG_WIFI_P2P_CANCEL_CONNECT;
+            case DIALOG_RENAME:
+                return MetricsEvent.DIALOG_WIFI_P2P_RENAME;
+            case DIALOG_DELETE_GROUP:
+                return MetricsEvent.DIALOG_WIFI_P2P_DELETE_GROUP;
+        }
+        return 0;
+    }
+
+    @Override
     public void onSaveInstanceState(Bundle outState) {
         if (mSelectedWifiPeer != null) {
             outState.putParcelable(SAVE_DIALOG_PEER, mSelectedWifiPeer.device);
