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:
@@ -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) {
|
||||||
|
@@ -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.
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user