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);
}
public void action(Context context, int category) {
MetricsLogger.action(context, category, "");
public void action(Context context, int category, Pair<Integer, Object>... taggedData) {
action(context, category, "", taggedData);
}
public void actionWithSource(Context context, int source, int category) {

View File

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

View File

@@ -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<Integer, Object>... taggedData) {
}
@Override

View File

@@ -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;
}

View File

@@ -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