[Settings] Add preference click metric log

- Move the log point of onPreferenceTreeClick from DashboardFragment to
  it's super class InstrumentedPreferenceFragment for better coverage.
- Write the preference click metric log in PreferenceController handling
  case in DashboardFragment which will skip super class's log point.

Bug: 137559984
Test: robotest
Change-Id: I67178f613c74f755e20fc9dc41319974cb02e83c
This commit is contained in:
Jason Chiu
2019-12-12 17:31:28 +08:00
parent e7e4dd905a
commit 1281e595e4
4 changed files with 18 additions and 12 deletions

View File

@@ -87,6 +87,12 @@ public abstract class InstrumentedPreferenceFragment extends ObservablePreferenc
return super.findPreference(key); return super.findPreference(key);
} }
@Override
public boolean onPreferenceTreeClick(Preference preference) {
writePreferenceClickMetric(preference);
return super.onPreferenceTreeClick(preference);
}
protected final Context getPrefContext() { protected final Context getPrefContext() {
return getPreferenceManager().getContext(); return getPreferenceManager().getContext();
} }
@@ -102,6 +108,10 @@ public abstract class InstrumentedPreferenceFragment extends ObservablePreferenc
mVisibilityLoggerMixin.writeElapsedTimeMetric(action, key); mVisibilityLoggerMixin.writeElapsedTimeMetric(action, key);
} }
protected void writePreferenceClickMetric(Preference preference) {
mMetricsFeatureProvider.logClickedPreference(preference, getMetricsCategory());
}
private void updateActivityTitleWithScreenTitle(PreferenceScreen screen) { private void updateActivityTitleWithScreenTitle(PreferenceScreen screen) {
if (screen != null) { if (screen != null) {
final CharSequence title = screen.getTitle(); final CharSequence title = screen.getTitle();

View File

@@ -400,16 +400,15 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
ProfileSelectDialog.updateUserHandlesIfNeeded(mContext, tile); ProfileSelectDialog.updateUserHandlesIfNeeded(mContext, tile);
if (tile.userHandle == null || tile.isPrimaryProfileOnly()) { if (tile.userHandle == null || tile.isPrimaryProfileOnly()) {
mMetricsFeatureProvider.logDashboardStartIntent(mContext, intent, sourceMetricCategory); mMetricsFeatureProvider.logStartedIntent(intent, sourceMetricCategory);
activity.startActivityForResult(intent, 0); activity.startActivityForResult(intent, 0);
} else if (tile.userHandle.size() == 1) { } else if (tile.userHandle.size() == 1) {
mMetricsFeatureProvider.logDashboardStartIntent(mContext, intent, sourceMetricCategory); mMetricsFeatureProvider.logStartedIntent(intent, sourceMetricCategory);
activity.startActivityForResultAsUser(intent, 0, tile.userHandle.get(0)); activity.startActivityForResultAsUser(intent, 0, tile.userHandle.get(0));
} else { } else {
final UserHandle userHandle = intent.getParcelableExtra(EXTRA_USER); final UserHandle userHandle = intent.getParcelableExtra(EXTRA_USER);
if (userHandle != null && tile.userHandle.contains(userHandle)) { if (userHandle != null && tile.userHandle.contains(userHandle)) {
mMetricsFeatureProvider.logDashboardStartIntent( mMetricsFeatureProvider.logStartedIntent(intent, sourceMetricCategory);
mContext, intent, sourceMetricCategory);
activity.startActivityForResultAsUser(intent, 0, userHandle); activity.startActivityForResultAsUser(intent, 0, userHandle);
} else { } else {
ProfileSelectDialog.show(activity.getSupportFragmentManager(), tile); ProfileSelectDialog.show(activity.getSupportFragmentManager(), tile);

View File

@@ -201,16 +201,15 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
@Override @Override
public boolean onPreferenceTreeClick(Preference preference) { public boolean onPreferenceTreeClick(Preference preference) {
Collection<List<AbstractPreferenceController>> controllers = final Collection<List<AbstractPreferenceController>> controllers =
mPreferenceControllers.values(); mPreferenceControllers.values();
// If preference contains intent, log it before handling.
mMetricsFeatureProvider.logDashboardStartIntent(
getContext(), preference.getIntent(), getMetricsCategory());
// Give all controllers a chance to handle click. // Give all controllers a chance to handle click.
preference.getExtras().putInt(CATEGORY, getMetricsCategory()); preference.getExtras().putInt(CATEGORY, getMetricsCategory());
for (List<AbstractPreferenceController> controllerList : controllers) { for (List<AbstractPreferenceController> controllerList : controllers) {
for (AbstractPreferenceController controller : controllerList) { for (AbstractPreferenceController controller : controllerList) {
if (controller.handlePreferenceTreeClick(preference)) { if (controller.handlePreferenceTreeClick(preference)) {
// log here since calling super.onPreferenceTreeClick will be skipped
writePreferenceClickMetric(preference);
return true; return true;
} }
} }

View File

@@ -230,8 +230,7 @@ public class DashboardFeatureProviderImplTest {
MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER); MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER);
preference.getOnPreferenceClickListener().onPreferenceClick(null); preference.getOnPreferenceClickListener().onPreferenceClick(null);
verify(mFeatureFactory.metricsFeatureProvider).logDashboardStartIntent( verify(mFeatureFactory.metricsFeatureProvider).logStartedIntent(
any(Context.class),
any(Intent.class), any(Intent.class),
eq(MetricsEvent.SETTINGS_GESTURES)); eq(MetricsEvent.SETTINGS_GESTURES));
verify(mActivity) verify(mActivity)
@@ -249,8 +248,7 @@ public class DashboardFeatureProviderImplTest {
mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon, mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER); MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER);
preference.getOnPreferenceClickListener().onPreferenceClick(null); preference.getOnPreferenceClickListener().onPreferenceClick(null);
verify(mFeatureFactory.metricsFeatureProvider).logDashboardStartIntent( verify(mFeatureFactory.metricsFeatureProvider).logStartedIntent(
any(Context.class),
any(Intent.class), any(Intent.class),
anyInt()); anyInt());
verify(mActivity) verify(mActivity)