diff --git a/src/com/android/settings/core/instrumentation/EventLogWriter.java b/src/com/android/settings/core/instrumentation/EventLogWriter.java index 2e0be30fb8e..e7628e8b6b7 100644 --- a/src/com/android/settings/core/instrumentation/EventLogWriter.java +++ b/src/com/android/settings/core/instrumentation/EventLogWriter.java @@ -39,8 +39,8 @@ public class EventLogWriter implements LogWriter { MetricsLogger.hidden(context, category); } - public void action(Context context, int category) { - MetricsLogger.action(context, category, ""); + public void action(Context context, int category, Pair... taggedData) { + action(context, category, "", taggedData); } public void actionWithSource(Context context, int source, int category) { diff --git a/src/com/android/settings/core/instrumentation/LogWriter.java b/src/com/android/settings/core/instrumentation/LogWriter.java index 54ed1a8d52b..584217d85cb 100644 --- a/src/com/android/settings/core/instrumentation/LogWriter.java +++ b/src/com/android/settings/core/instrumentation/LogWriter.java @@ -36,7 +36,7 @@ public interface LogWriter { /** * Logs an user action. */ - void action(Context context, int category); + void action(Context context, int category, Pair... taggedData); /** * Logs an user action. diff --git a/src/com/android/settings/core/instrumentation/MetricsFeatureProvider.java b/src/com/android/settings/core/instrumentation/MetricsFeatureProvider.java index b071fd4c919..afdec558556 100644 --- a/src/com/android/settings/core/instrumentation/MetricsFeatureProvider.java +++ b/src/com/android/settings/core/instrumentation/MetricsFeatureProvider.java @@ -60,9 +60,9 @@ public class MetricsFeatureProvider { } } - public void action(Context context, int category) { + public void action(Context context, int category, Pair... taggedData) { for (LogWriter writer : mLoggerWriters) { - writer.action(context, category); + writer.action(context, category, taggedData); } } diff --git a/src/com/android/settings/core/instrumentation/SettingSuggestionsLogWriter.java b/src/com/android/settings/core/instrumentation/SettingSuggestionsLogWriter.java index 1c4e26eb67f..b8735765924 100644 --- a/src/com/android/settings/core/instrumentation/SettingSuggestionsLogWriter.java +++ b/src/com/android/settings/core/instrumentation/SettingSuggestionsLogWriter.java @@ -40,7 +40,7 @@ public class SettingSuggestionsLogWriter implements LogWriter { } @Override - public void action(Context context, int category) { + public void action(Context context, int category, Pair... taggedData) { } @Override diff --git a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java index d118a45e043..a9fd21b0ebe 100644 --- a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java +++ b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java @@ -26,15 +26,19 @@ import android.os.UserManager; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.text.TextUtils; +import android.util.Pair; import android.widget.Toast; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.ChooseLockSettingsHelper; import com.android.settings.DevelopmentSettings; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.PreferenceController; +import com.android.settings.core.instrumentation.MetricsFeatureProvider; import com.android.settings.core.lifecycle.LifecycleObserver; import com.android.settings.core.lifecycle.events.OnResume; +import com.android.settings.overlay.FeatureFactory; import com.android.settings.search.Index; import com.android.settingslib.RestrictedLockUtils; @@ -49,6 +53,7 @@ public class BuildNumberPreferenceController extends PreferenceController private final Activity mActivity; private final Fragment mFragment; private final UserManager mUm; + private final MetricsFeatureProvider mMetricsFeatureProvider; private Toast mDevHitToast; private RestrictedLockUtils.EnforcedAdmin mDebuggingFeaturesDisallowedAdmin; @@ -61,6 +66,7 @@ public class BuildNumberPreferenceController extends PreferenceController mActivity = activity; mFragment = fragment; mUm = UserManager.get(activity); + mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); } @Override @@ -106,11 +112,15 @@ public class BuildNumberPreferenceController extends PreferenceController } // Don't enable developer options for secondary users. if (!mUm.isAdminUser()) { + mMetricsFeatureProvider.action( + mContext, MetricsEvent.ACTION_SETTINGS_BUILD_NUMBER_PREF); return false; } // Don't enable developer options until device has been provisioned if (!Utils.isDeviceProvisioned(mContext)) { + mMetricsFeatureProvider.action( + mContext, MetricsEvent.ACTION_SETTINGS_BUILD_NUMBER_PREF); return false; } @@ -120,6 +130,8 @@ public class BuildNumberPreferenceController extends PreferenceController RestrictedLockUtils.sendShowAdminSupportDetailsIntent(mContext, mDebuggingFeaturesDisallowedAdmin); } + mMetricsFeatureProvider.action( + mContext, MetricsEvent.ACTION_SETTINGS_BUILD_NUMBER_PREF); return false; } @@ -136,6 +148,10 @@ public class BuildNumberPreferenceController extends PreferenceController if (!mProcessingLastDevHit) { enableDevelopmentSettings(); } + mMetricsFeatureProvider.action( + mContext, MetricsEvent.ACTION_SETTINGS_BUILD_NUMBER_PREF, + Pair.create(MetricsEvent.FIELD_SETTINGS_BUILD_NUMBER_DEVELOPER_MODE_ENABLED, + mProcessingLastDevHit ? 0 : 1)); } else if (mDevHitCountdown > 0 && mDevHitCountdown < (TAPS_TO_BE_A_DEVELOPER - 2)) { if (mDevHitToast != null) { @@ -148,6 +164,10 @@ public class BuildNumberPreferenceController extends PreferenceController Toast.LENGTH_SHORT); mDevHitToast.show(); } + mMetricsFeatureProvider.action( + mContext, MetricsEvent.ACTION_SETTINGS_BUILD_NUMBER_PREF, + Pair.create(MetricsEvent.FIELD_SETTINGS_BUILD_NUMBER_DEVELOPER_MODE_ENABLED, + 0)); } else if (mDevHitCountdown < 0) { if (mDevHitToast != null) { mDevHitToast.cancel(); @@ -155,6 +175,10 @@ public class BuildNumberPreferenceController extends PreferenceController mDevHitToast = Toast.makeText(mContext, R.string.show_dev_already, Toast.LENGTH_LONG); mDevHitToast.show(); + mMetricsFeatureProvider.action( + mContext, MetricsEvent.ACTION_SETTINGS_BUILD_NUMBER_PREF, + Pair.create(MetricsEvent.FIELD_SETTINGS_BUILD_NUMBER_DEVELOPER_MODE_ENABLED, + 1)); } return true; } diff --git a/tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java index 81372cc2996..017c5a8b9e3 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java @@ -25,9 +25,11 @@ import android.provider.Settings; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; +import com.android.internal.logging.nano.MetricsProto; import com.android.settings.DevelopmentSettings; import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; +import com.android.settings.testutils.FakeFeatureFactory; import org.junit.Before; import org.junit.Test; @@ -35,12 +37,14 @@ import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowApplication; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Answers.RETURNS_DEEP_STUBS; import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; @@ -61,16 +65,19 @@ public class BuildNumberPreferenceControllerTest { @Mock private UserManager mUserManager; + private FakeFeatureFactory mFactory; private Preference mPreference; private BuildNumberPreferenceController mController; @Before public void setUp() { MockitoAnnotations.initMocks(this); + FakeFeatureFactory.setupForTest(mContext); + mFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext); when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); mController = new BuildNumberPreferenceController(mContext, mActivity, mFragment); - mPreference = new Preference(ShadowApplication.getInstance().getApplicationContext()); + mPreference = new Preference(RuntimeEnvironment.application); mPreference.setKey(mController.getPreferenceKey()); } @@ -104,10 +111,13 @@ public class BuildNumberPreferenceControllerTest { mController = new BuildNumberPreferenceController(context, mActivity, mFragment); assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse(); + verify(mFactory.metricsFeatureProvider).action( + any(Context.class), + eq(MetricsProto.MetricsEvent.ACTION_SETTINGS_BUILD_NUMBER_PREF)); } @Test - public void handlePrefTreeClick_userHasRestrction_doNothing() { + public void handlePrefTreeClick_userHasRestriction_doNothing() { when(mUserManager.isAdminUser()).thenReturn(true); final Context context = ShadowApplication.getInstance().getApplicationContext(); Settings.Global.putInt(context.getContentResolver(), @@ -118,6 +128,9 @@ public class BuildNumberPreferenceControllerTest { mController = new BuildNumberPreferenceController(context, mActivity, mFragment); assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse(); + verify(mFactory.metricsFeatureProvider).action( + any(Context.class), + eq(MetricsProto.MetricsEvent.ACTION_SETTINGS_BUILD_NUMBER_PREF)); } @Test