Merge "[Settings] Add preference click metric log"
diff --git a/src/com/android/settings/core/InstrumentedPreferenceFragment.java b/src/com/android/settings/core/InstrumentedPreferenceFragment.java
index 31ac11f..06e6584 100644
--- a/src/com/android/settings/core/InstrumentedPreferenceFragment.java
+++ b/src/com/android/settings/core/InstrumentedPreferenceFragment.java
@@ -87,6 +87,12 @@
         return super.findPreference(key);
     }
 
+    @Override
+    public boolean onPreferenceTreeClick(Preference preference) {
+        writePreferenceClickMetric(preference);
+        return super.onPreferenceTreeClick(preference);
+    }
+
     protected final Context getPrefContext() {
         return getPreferenceManager().getContext();
     }
@@ -102,6 +108,10 @@
         mVisibilityLoggerMixin.writeElapsedTimeMetric(action, key);
     }
 
+    protected void writePreferenceClickMetric(Preference preference) {
+        mMetricsFeatureProvider.logClickedPreference(preference, getMetricsCategory());
+    }
+
     private void updateActivityTitleWithScreenTitle(PreferenceScreen screen) {
         if (screen != null) {
             final CharSequence title = screen.getTitle();
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index 282cdb9..3a744a9 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -400,16 +400,15 @@
         ProfileSelectDialog.updateUserHandlesIfNeeded(mContext, tile);
 
         if (tile.userHandle == null || tile.isPrimaryProfileOnly()) {
-            mMetricsFeatureProvider.logDashboardStartIntent(mContext, intent, sourceMetricCategory);
+            mMetricsFeatureProvider.logStartedIntent(intent, sourceMetricCategory);
             activity.startActivityForResult(intent, 0);
         } else if (tile.userHandle.size() == 1) {
-            mMetricsFeatureProvider.logDashboardStartIntent(mContext, intent, sourceMetricCategory);
+            mMetricsFeatureProvider.logStartedIntent(intent, sourceMetricCategory);
             activity.startActivityForResultAsUser(intent, 0, tile.userHandle.get(0));
         } else {
             final UserHandle userHandle = intent.getParcelableExtra(EXTRA_USER);
             if (userHandle != null && tile.userHandle.contains(userHandle)) {
-                mMetricsFeatureProvider.logDashboardStartIntent(
-                        mContext, intent, sourceMetricCategory);
+                mMetricsFeatureProvider.logStartedIntent(intent, sourceMetricCategory);
                 activity.startActivityForResultAsUser(intent, 0, userHandle);
             } else {
                 ProfileSelectDialog.show(activity.getSupportFragmentManager(), tile);
diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index a8c4760..0d3d5b0 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -201,16 +201,15 @@
 
     @Override
     public boolean onPreferenceTreeClick(Preference preference) {
-        Collection<List<AbstractPreferenceController>> controllers =
+        final Collection<List<AbstractPreferenceController>> controllers =
                 mPreferenceControllers.values();
-        // If preference contains intent, log it before handling.
-        mMetricsFeatureProvider.logDashboardStartIntent(
-                getContext(), preference.getIntent(), getMetricsCategory());
         // Give all controllers a chance to handle click.
         preference.getExtras().putInt(CATEGORY, getMetricsCategory());
         for (List<AbstractPreferenceController> controllerList : controllers) {
             for (AbstractPreferenceController controller : controllerList) {
                 if (controller.handlePreferenceTreeClick(preference)) {
+                    // log here since calling super.onPreferenceTreeClick will be skipped
+                    writePreferenceClickMetric(preference);
                     return true;
                 }
             }
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
index 14fd284..3f2b7c3 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
@@ -230,8 +230,7 @@
                 MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER);
         preference.getOnPreferenceClickListener().onPreferenceClick(null);
 
-        verify(mFeatureFactory.metricsFeatureProvider).logDashboardStartIntent(
-                any(Context.class),
+        verify(mFeatureFactory.metricsFeatureProvider).logStartedIntent(
                 any(Intent.class),
                 eq(MetricsEvent.SETTINGS_GESTURES));
         verify(mActivity)
@@ -249,8 +248,7 @@
         mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
                 MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER);
         preference.getOnPreferenceClickListener().onPreferenceClick(null);
-        verify(mFeatureFactory.metricsFeatureProvider).logDashboardStartIntent(
-                any(Context.class),
+        verify(mFeatureFactory.metricsFeatureProvider).logStartedIntent(
                 any(Intent.class),
                 anyInt());
         verify(mActivity)