Log when build number preference is clicked.

Optionally also log whether user is in development mode.

Change-Id: I1f5dc2891b2c4fc74f940e3118fb09ee18cc9688
Fix: 34774945
Test: make RunSettingsRoboTests
This commit is contained in:
Fan Zhang
2017-02-24 15:37:14 -08:00
parent efb8d625a2
commit f42377a18e
6 changed files with 45 additions and 8 deletions

View File

@@ -39,8 +39,8 @@ public class EventLogWriter implements LogWriter {
MetricsLogger.hidden(context, category); MetricsLogger.hidden(context, category);
} }
public void action(Context context, int category) { public void action(Context context, int category, Pair<Integer, Object>... taggedData) {
MetricsLogger.action(context, category, ""); action(context, category, "", taggedData);
} }
public void actionWithSource(Context context, int source, int category) { public void actionWithSource(Context context, int source, int category) {

View File

@@ -36,7 +36,7 @@ public interface LogWriter {
/** /**
* Logs an user action. * Logs an user action.
*/ */
void action(Context context, int category); void action(Context context, int category, Pair<Integer, Object>... taggedData);
/** /**
* Logs an user action. * Logs an user action.

View File

@@ -60,9 +60,9 @@ public class MetricsFeatureProvider {
} }
} }
public void action(Context context, int category) { public void action(Context context, int category, Pair<Integer, Object>... taggedData) {
for (LogWriter writer : mLoggerWriters) { for (LogWriter writer : mLoggerWriters) {
writer.action(context, category); writer.action(context, category, taggedData);
} }
} }

View File

@@ -40,7 +40,7 @@ public class SettingSuggestionsLogWriter implements LogWriter {
} }
@Override @Override
public void action(Context context, int category) { public void action(Context context, int category, Pair<Integer, Object>... taggedData) {
} }
@Override @Override

View File

@@ -26,15 +26,19 @@ import android.os.UserManager;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.PreferenceScreen;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Pair;
import android.widget.Toast; import android.widget.Toast;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.ChooseLockSettingsHelper; import com.android.settings.ChooseLockSettingsHelper;
import com.android.settings.DevelopmentSettings; import com.android.settings.DevelopmentSettings;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.core.PreferenceController; 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.LifecycleObserver;
import com.android.settings.core.lifecycle.events.OnResume; import com.android.settings.core.lifecycle.events.OnResume;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.Index; import com.android.settings.search.Index;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
@@ -49,6 +53,7 @@ public class BuildNumberPreferenceController extends PreferenceController
private final Activity mActivity; private final Activity mActivity;
private final Fragment mFragment; private final Fragment mFragment;
private final UserManager mUm; private final UserManager mUm;
private final MetricsFeatureProvider mMetricsFeatureProvider;
private Toast mDevHitToast; private Toast mDevHitToast;
private RestrictedLockUtils.EnforcedAdmin mDebuggingFeaturesDisallowedAdmin; private RestrictedLockUtils.EnforcedAdmin mDebuggingFeaturesDisallowedAdmin;
@@ -61,6 +66,7 @@ public class BuildNumberPreferenceController extends PreferenceController
mActivity = activity; mActivity = activity;
mFragment = fragment; mFragment = fragment;
mUm = UserManager.get(activity); mUm = UserManager.get(activity);
mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
} }
@Override @Override
@@ -106,11 +112,15 @@ public class BuildNumberPreferenceController extends PreferenceController
} }
// Don't enable developer options for secondary users. // Don't enable developer options for secondary users.
if (!mUm.isAdminUser()) { if (!mUm.isAdminUser()) {
mMetricsFeatureProvider.action(
mContext, MetricsEvent.ACTION_SETTINGS_BUILD_NUMBER_PREF);
return false; return false;
} }
// Don't enable developer options until device has been provisioned // Don't enable developer options until device has been provisioned
if (!Utils.isDeviceProvisioned(mContext)) { if (!Utils.isDeviceProvisioned(mContext)) {
mMetricsFeatureProvider.action(
mContext, MetricsEvent.ACTION_SETTINGS_BUILD_NUMBER_PREF);
return false; return false;
} }
@@ -120,6 +130,8 @@ public class BuildNumberPreferenceController extends PreferenceController
RestrictedLockUtils.sendShowAdminSupportDetailsIntent(mContext, RestrictedLockUtils.sendShowAdminSupportDetailsIntent(mContext,
mDebuggingFeaturesDisallowedAdmin); mDebuggingFeaturesDisallowedAdmin);
} }
mMetricsFeatureProvider.action(
mContext, MetricsEvent.ACTION_SETTINGS_BUILD_NUMBER_PREF);
return false; return false;
} }
@@ -136,6 +148,10 @@ public class BuildNumberPreferenceController extends PreferenceController
if (!mProcessingLastDevHit) { if (!mProcessingLastDevHit) {
enableDevelopmentSettings(); 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 } else if (mDevHitCountdown > 0
&& mDevHitCountdown < (TAPS_TO_BE_A_DEVELOPER - 2)) { && mDevHitCountdown < (TAPS_TO_BE_A_DEVELOPER - 2)) {
if (mDevHitToast != null) { if (mDevHitToast != null) {
@@ -148,6 +164,10 @@ public class BuildNumberPreferenceController extends PreferenceController
Toast.LENGTH_SHORT); Toast.LENGTH_SHORT);
mDevHitToast.show(); 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) { } else if (mDevHitCountdown < 0) {
if (mDevHitToast != null) { if (mDevHitToast != null) {
mDevHitToast.cancel(); mDevHitToast.cancel();
@@ -155,6 +175,10 @@ public class BuildNumberPreferenceController extends PreferenceController
mDevHitToast = Toast.makeText(mContext, R.string.show_dev_already, mDevHitToast = Toast.makeText(mContext, R.string.show_dev_already,
Toast.LENGTH_LONG); Toast.LENGTH_LONG);
mDevHitToast.show(); mDevHitToast.show();
mMetricsFeatureProvider.action(
mContext, MetricsEvent.ACTION_SETTINGS_BUILD_NUMBER_PREF,
Pair.create(MetricsEvent.FIELD_SETTINGS_BUILD_NUMBER_DEVELOPER_MODE_ENABLED,
1));
} }
return true; return true;
} }

View File

@@ -25,9 +25,11 @@ import android.provider.Settings;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.PreferenceScreen;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.DevelopmentSettings; import com.android.settings.DevelopmentSettings;
import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -35,12 +37,14 @@ import org.junit.runner.RunWith;
import org.mockito.Answers; import org.mockito.Answers;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowApplication; import org.robolectric.shadows.ShadowApplication;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Answers.RETURNS_DEEP_STUBS; import static org.mockito.Answers.RETURNS_DEEP_STUBS;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never; import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
@@ -61,16 +65,19 @@ public class BuildNumberPreferenceControllerTest {
@Mock @Mock
private UserManager mUserManager; private UserManager mUserManager;
private FakeFeatureFactory mFactory;
private Preference mPreference; private Preference mPreference;
private BuildNumberPreferenceController mController; private BuildNumberPreferenceController mController;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
FakeFeatureFactory.setupForTest(mContext);
mFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
mController = new BuildNumberPreferenceController(mContext, mActivity, mFragment); mController = new BuildNumberPreferenceController(mContext, mActivity, mFragment);
mPreference = new Preference(ShadowApplication.getInstance().getApplicationContext()); mPreference = new Preference(RuntimeEnvironment.application);
mPreference.setKey(mController.getPreferenceKey()); mPreference.setKey(mController.getPreferenceKey());
} }
@@ -104,10 +111,13 @@ public class BuildNumberPreferenceControllerTest {
mController = new BuildNumberPreferenceController(context, mActivity, mFragment); mController = new BuildNumberPreferenceController(context, mActivity, mFragment);
assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse(); assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse();
verify(mFactory.metricsFeatureProvider).action(
any(Context.class),
eq(MetricsProto.MetricsEvent.ACTION_SETTINGS_BUILD_NUMBER_PREF));
} }
@Test @Test
public void handlePrefTreeClick_userHasRestrction_doNothing() { public void handlePrefTreeClick_userHasRestriction_doNothing() {
when(mUserManager.isAdminUser()).thenReturn(true); when(mUserManager.isAdminUser()).thenReturn(true);
final Context context = ShadowApplication.getInstance().getApplicationContext(); final Context context = ShadowApplication.getInstance().getApplicationContext();
Settings.Global.putInt(context.getContentResolver(), Settings.Global.putInt(context.getContentResolver(),
@@ -118,6 +128,9 @@ public class BuildNumberPreferenceControllerTest {
mController = new BuildNumberPreferenceController(context, mActivity, mFragment); mController = new BuildNumberPreferenceController(context, mActivity, mFragment);
assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse(); assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse();
verify(mFactory.metricsFeatureProvider).action(
any(Context.class),
eq(MetricsProto.MetricsEvent.ACTION_SETTINGS_BUILD_NUMBER_PREF));
} }
@Test @Test