diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java
index 58990d3..8082f62 100644
--- a/src/com/android/settings/dashboard/DashboardAdapter.java
+++ b/src/com/android/settings/dashboard/DashboardAdapter.java
@@ -225,6 +225,8 @@
                 holder.itemView.setOnClickListener(new View.OnClickListener() {
                     @Override
                     public void onClick(View v) {
+                        MetricsLogger.action(mContext, MetricsEvent.ACTION_SETTINGS_SUGGESTION,
+                                DashboardAdapter.getSuggestionIdentifier(mContext, suggestion));
                         ((SettingsActivity) mContext).startSuggestion(suggestion.intent);
                     }
                 });
@@ -259,6 +261,8 @@
                 new MenuItem.OnMenuItemClickListener() {
             @Override
             public boolean onMenuItemClick(MenuItem item) {
+                MetricsLogger.action(mContext, MetricsEvent.ACTION_SETTINGS_DISMISS_SUGGESTION,
+                        DashboardAdapter.getSuggestionIdentifier(mContext, suggestion));
                 disableSuggestion(suggestion);
                 mSuggestions.remove(suggestion);
                 recountItems();
@@ -378,6 +382,16 @@
         return null;
     }
 
+    public static String getSuggestionIdentifier(Context context, Tile suggestion) {
+        String packageName = suggestion.intent.getComponent().getPackageName();
+        if (packageName.equals(context.getPackageName())) {
+            // Since Settings provides several suggestions, fill in the class instead of the
+            // package for these.
+            packageName = suggestion.intent.getComponent().getClassName();
+        }
+        return packageName;
+    }
+
     public static class DashboardItemHolder extends RecyclerView.ViewHolder {
         public final ImageView icon;
         public final TextView title;
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index 4595629..5d9a79b 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -39,6 +39,7 @@
 import com.android.settingslib.SuggestionParser;
 import com.android.settingslib.drawer.DashboardCategory;
 import com.android.settingslib.drawer.SettingsDrawerActivity;
+import com.android.settingslib.drawer.Tile;
 
 import java.util.List;
 
@@ -114,6 +115,10 @@
         for (Condition c : mConditionManager.getVisibleConditions()) {
             MetricsLogger.visible(getContext(), c.getMetricsConstant());
         }
+        for (Tile suggestion : mSuggestionParser.getSuggestions()) {
+            MetricsLogger.action(getContext(), MetricsEvent.ACTION_SHOW_SETTINGS_SUGGESTION,
+                    DashboardAdapter.getSuggestionIdentifier(getContext(), suggestion));
+        }
     }
 
     @Override
@@ -125,6 +130,10 @@
         for (Condition c : mConditionManager.getVisibleConditions()) {
             MetricsLogger.hidden(getContext(), c.getMetricsConstant());
         }
+        for (Tile suggestion : mSuggestionParser.getSuggestions()) {
+            MetricsLogger.action(getContext(), MetricsEvent.ACTION_HIDE_SETTINGS_SUGGESTION,
+                    DashboardAdapter.getSuggestionIdentifier(getContext(), suggestion));
+        }
     }
 
     @Override
