diff --git a/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/EventLogWriter.java b/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/EventLogWriter.java index 3e33da5a2ba79..ece898618f8cd 100644 --- a/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/EventLogWriter.java +++ b/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/EventLogWriter.java @@ -50,6 +50,34 @@ public class EventLogWriter implements LogWriter { @Override public void clicked(int sourceCategory, String key) { + final LogMaker logMaker = new LogMaker(MetricsProto.MetricsEvent.ACTION_SETTINGS_TILE_CLICK) + .setType(MetricsProto.MetricsEvent.TYPE_ACTION); + if (sourceCategory != MetricsProto.MetricsEvent.VIEW_UNKNOWN) { + logMaker.addTaggedData(MetricsProto.MetricsEvent.FIELD_CONTEXT, sourceCategory); + } + if (!TextUtils.isEmpty(key)) { + logMaker.addTaggedData(MetricsProto.MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_NAME, + key); + } + MetricsLogger.action(logMaker); + } + + @Override + public void changed(int category, String key, int value) { + final LogMaker logMaker = new LogMaker( + MetricsProto.MetricsEvent.ACTION_SETTINGS_PREFERENCE_CHANGE) + .setType(MetricsProto.MetricsEvent.TYPE_ACTION); + if (category != MetricsProto.MetricsEvent.VIEW_UNKNOWN) { + logMaker.addTaggedData(MetricsProto.MetricsEvent.FIELD_CONTEXT, category); + } + if (!TextUtils.isEmpty(key)) { + logMaker.addTaggedData(MetricsProto.MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_NAME, + key); + logMaker.addTaggedData( + MetricsProto.MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_INT_VALUE, + value); + } + MetricsLogger.action(logMaker); } @Override diff --git a/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/LogWriter.java b/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/LogWriter.java index cceca13ec3e59..dcd6ccedf9bc2 100644 --- a/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/LogWriter.java +++ b/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/LogWriter.java @@ -38,6 +38,11 @@ public interface LogWriter { */ void clicked(int category, String key); + /** + * Logs a value changed event when user changed item value. + */ + void changed(int category, String key, int value); + /** * Logs an user action. */ diff --git a/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/MetricsFeatureProvider.java b/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/MetricsFeatureProvider.java index 915421a8f7a09..09abc394634af 100644 --- a/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/MetricsFeatureProvider.java +++ b/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/MetricsFeatureProvider.java @@ -107,6 +107,19 @@ public class MetricsFeatureProvider { } } + /** + * Logs a value changed event when user changed item value. + * + * @param category the target page id + * @param key the key id that user clicked + * @param value the value that user changed which converted to integer + */ + public void changed(int category, String key, int value) { + for (LogWriter writer : mLoggerWriters) { + writer.changed(category, key, value); + } + } + /** * Logs a simple action without page id or attribution * diff --git a/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/SharedPreferencesLogger.java b/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/SharedPreferencesLogger.java index 869de0debd374..067afa4ff7269 100644 --- a/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/SharedPreferencesLogger.java +++ b/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/SharedPreferencesLogger.java @@ -35,15 +35,22 @@ public class SharedPreferencesLogger implements SharedPreferences { private static final String LOG_TAG = "SharedPreferencesLogger"; private final String mTag; + private final int mMetricCategory; private final Context mContext; private final MetricsFeatureProvider mMetricsFeature; private final Set mPreferenceKeySet; public SharedPreferencesLogger(Context context, String tag, MetricsFeatureProvider metricsFeature) { + this(context, tag, metricsFeature, SettingsEnums.PAGE_UNKNOWN); + } + + public SharedPreferencesLogger(Context context, String tag, + MetricsFeatureProvider metricsFeature, int metricCategory) { mContext = context; mTag = tag; mMetricsFeature = metricsFeature; + mMetricCategory = metricCategory; mPreferenceKeySet = new ConcurrentSkipListSet<>(); } @@ -151,20 +158,15 @@ public class SharedPreferencesLogger implements SharedPreferences { return; } // Pref key exists in set, log its change in metrics. - mMetricsFeature.action(SettingsEnums.PAGE_UNKNOWN, - SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE, - SettingsEnums.PAGE_UNKNOWN, - prefKey, - intVal); + mMetricsFeature.changed(mMetricCategory, key, intVal); } @VisibleForTesting void logPackageName(String key, String value) { - final String prefKey = mTag + "/" + key; - mMetricsFeature.action(SettingsEnums.PAGE_UNKNOWN, + mMetricsFeature.action(mMetricCategory, SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE, SettingsEnums.PAGE_UNKNOWN, - prefKey + ":" + value, + key + ":" + value, 0); } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/SharedPreferenceLoggerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/SharedPreferenceLoggerTest.java index 89de81fde889e..a2b208aced64c 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/SharedPreferenceLoggerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/SharedPreferenceLoggerTest.java @@ -39,7 +39,6 @@ public class SharedPreferenceLoggerTest { private static final String TEST_TAG = "tag"; private static final String TEST_KEY = "key"; - private static final String TEST_TAGGED_KEY = TEST_TAG + "/" + TEST_KEY; @Mock(answer = Answers.RETURNS_DEEP_STUBS) private Context mContext; @@ -65,10 +64,8 @@ public class SharedPreferenceLoggerTest { editor.putInt(TEST_KEY, 2); editor.putInt(TEST_KEY, 2); - verify(mMetricsFeature, times(6)).action(eq(SettingsEnums.PAGE_UNKNOWN), - eq(SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE), - eq(SettingsEnums.PAGE_UNKNOWN), - eq(TEST_TAGGED_KEY), + verify(mMetricsFeature, times(6)).changed(eq(SettingsEnums.PAGE_UNKNOWN), + eq(TEST_KEY), anyInt()); } @@ -82,15 +79,11 @@ public class SharedPreferenceLoggerTest { editor.putBoolean(TEST_KEY, false); - verify(mMetricsFeature).action(SettingsEnums.PAGE_UNKNOWN, - SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE, - SettingsEnums.PAGE_UNKNOWN, - TEST_TAGGED_KEY, + verify(mMetricsFeature).changed(SettingsEnums.PAGE_UNKNOWN, + TEST_KEY, 1); - verify(mMetricsFeature, times(3)).action(SettingsEnums.PAGE_UNKNOWN, - SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE, - SettingsEnums.PAGE_UNKNOWN, - TEST_TAGGED_KEY, + verify(mMetricsFeature, times(3)).changed(SettingsEnums.PAGE_UNKNOWN, + TEST_KEY, 0); } @@ -103,10 +96,8 @@ public class SharedPreferenceLoggerTest { editor.putLong(TEST_KEY, 1); editor.putLong(TEST_KEY, 2); - verify(mMetricsFeature, times(4)).action(eq(SettingsEnums.PAGE_UNKNOWN), - eq(SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE), - eq(SettingsEnums.PAGE_UNKNOWN), - eq(TEST_TAGGED_KEY), + verify(mMetricsFeature, times(4)).changed(eq(SettingsEnums.PAGE_UNKNOWN), + eq(TEST_KEY), anyInt()); } @@ -117,10 +108,8 @@ public class SharedPreferenceLoggerTest { editor.putLong(TEST_KEY, 1); editor.putLong(TEST_KEY, veryBigNumber); - verify(mMetricsFeature).action(SettingsEnums.PAGE_UNKNOWN, - SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE, - SettingsEnums.PAGE_UNKNOWN, - TEST_TAGGED_KEY, + verify(mMetricsFeature).changed(SettingsEnums.PAGE_UNKNOWN, + TEST_KEY, Integer.MAX_VALUE); } @@ -131,10 +120,8 @@ public class SharedPreferenceLoggerTest { editor.putLong(TEST_KEY, 1); editor.putLong(TEST_KEY, veryNegativeNumber); - verify(mMetricsFeature).action(SettingsEnums.PAGE_UNKNOWN, - SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE, - SettingsEnums.PAGE_UNKNOWN, - TEST_TAGGED_KEY, Integer.MIN_VALUE); + verify(mMetricsFeature).changed(SettingsEnums.PAGE_UNKNOWN, + TEST_KEY, Integer.MIN_VALUE); } @Test @@ -146,10 +133,8 @@ public class SharedPreferenceLoggerTest { editor.putFloat(TEST_KEY, 1); editor.putFloat(TEST_KEY, 2); - verify(mMetricsFeature, times(4)).action(eq(SettingsEnums.PAGE_UNKNOWN), - eq(SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE), - eq(SettingsEnums.PAGE_UNKNOWN), - eq(TEST_TAGGED_KEY), + verify(mMetricsFeature, times(4)).changed(eq(SettingsEnums.PAGE_UNKNOWN), + eq(TEST_KEY), anyInt()); } @@ -159,7 +144,7 @@ public class SharedPreferenceLoggerTest { verify(mMetricsFeature).action(SettingsEnums.PAGE_UNKNOWN, ACTION_SETTINGS_PREFERENCE_CHANGE, SettingsEnums.PAGE_UNKNOWN, - "tag/key:com.android.settings", + "key:com.android.settings", 0); } @@ -170,10 +155,8 @@ public class SharedPreferenceLoggerTest { mSharedPrefLogger.logValue(TEST_KEY, "62"); mSharedPrefLogger.logValue(TEST_KEY, "0"); - verify(mMetricsFeature, times(3)).action(eq(SettingsEnums.PAGE_UNKNOWN), - eq(SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE), - eq(SettingsEnums.PAGE_UNKNOWN), - eq(TEST_TAGGED_KEY), + verify(mMetricsFeature, times(3)).changed(eq(SettingsEnums.PAGE_UNKNOWN), + eq(TEST_KEY), anyInt()); } @@ -185,10 +168,8 @@ public class SharedPreferenceLoggerTest { mSharedPrefLogger.logValue(TEST_KEY, "4.2"); mSharedPrefLogger.logValue(TEST_KEY, "3.0"); - verify(mMetricsFeature, times(0)).action(eq(SettingsEnums.PAGE_UNKNOWN), - eq(SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE), - eq(SettingsEnums.PAGE_UNKNOWN), - eq(TEST_TAGGED_KEY), + verify(mMetricsFeature, times(0)).changed(eq(SettingsEnums.PAGE_UNKNOWN), + eq(TEST_KEY), anyInt()); } }