Merge "Log preference change as Integer instead of Long." into oc-mr1-dev

This commit is contained in:
TreeHugger Robot
2017-08-10 03:41:07 +00:00
committed by Android (Google) Code Review
2 changed files with 56 additions and 14 deletions

View File

@@ -120,19 +120,29 @@ public class SharedPreferencesLogger implements SharedPreferences {
final Pair<Integer, Object> valueData; final Pair<Integer, Object> valueData;
if (value instanceof Long) { if (value instanceof Long) {
valueData = Pair.create(MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_LONG_VALUE, final Long longVal = (Long) value;
value); final int intVal;
if (longVal > Integer.MAX_VALUE) {
intVal = Integer.MAX_VALUE;
} else if (longVal < Integer.MIN_VALUE) {
intVal = Integer.MIN_VALUE;
} else {
intVal = longVal.intValue();
}
valueData = Pair.create(MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_INT_VALUE,
intVal);
} else if (value instanceof Integer) { } else if (value instanceof Integer) {
valueData = Pair.create(MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_LONG_VALUE, valueData = Pair.create(MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_INT_VALUE,
((Integer) value).longValue()); value);
} else if (value instanceof Boolean) { } else if (value instanceof Boolean) {
valueData = Pair.create(MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_LONG_VALUE, valueData = Pair.create(MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_INT_VALUE,
(Boolean) value ? 1L : 0L); (Boolean) value ? 1 : 0);
} else if (value instanceof Float) { } else if (value instanceof Float) {
valueData = Pair.create(MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_FLOAT_VALUE, valueData = Pair.create(MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_FLOAT_VALUE,
value); value);
} else if (value instanceof String) { } else if (value instanceof String) {
valueData = Pair.create(MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_VALUE, value); Log.d(LOG_TAG, "Tried to log string preference " + prefKey + " = " + value);
valueData = null;
} else { } else {
Log.w(LOG_TAG, "Tried to log unloggable object" + value); Log.w(LOG_TAG, "Tried to log unloggable object" + value);
valueData = null; valueData = null;

View File

@@ -39,7 +39,7 @@ import static com.android.internal.logging.nano.MetricsProto.MetricsEvent
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent import static com.android.internal.logging.nano.MetricsProto.MetricsEvent
.FIELD_SETTINGS_PREFERENCE_CHANGE_FLOAT_VALUE; .FIELD_SETTINGS_PREFERENCE_CHANGE_FLOAT_VALUE;
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent import static com.android.internal.logging.nano.MetricsProto.MetricsEvent
.FIELD_SETTINGS_PREFERENCE_CHANGE_LONG_VALUE; .FIELD_SETTINGS_PREFERENCE_CHANGE_INT_VALUE;
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent import static com.android.internal.logging.nano.MetricsProto.MetricsEvent
.FIELD_SETTINGS_PREFERENCE_CHANGE_NAME; .FIELD_SETTINGS_PREFERENCE_CHANGE_NAME;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
@@ -88,7 +88,7 @@ public class SharedPreferenceLoggerTest {
verify(mMetricsFeature, times(6)).action(any(Context.class), anyInt(), verify(mMetricsFeature, times(6)).action(any(Context.class), anyInt(),
argThat(mNamePairMatcher), argThat(mNamePairMatcher),
argThat(pairMatches(FIELD_SETTINGS_PREFERENCE_CHANGE_LONG_VALUE, Long.class))); argThat(pairMatches(FIELD_SETTINGS_PREFERENCE_CHANGE_INT_VALUE, Integer.class)));
} }
@Test @Test
@@ -103,10 +103,10 @@ public class SharedPreferenceLoggerTest {
verify(mMetricsFeature).action(any(Context.class), anyInt(), verify(mMetricsFeature).action(any(Context.class), anyInt(),
argThat(mNamePairMatcher), argThat(mNamePairMatcher),
argThat(pairMatches(FIELD_SETTINGS_PREFERENCE_CHANGE_LONG_VALUE, true))); argThat(pairMatches(FIELD_SETTINGS_PREFERENCE_CHANGE_INT_VALUE, true)));
verify(mMetricsFeature, times(3)).action(any(Context.class), anyInt(), verify(mMetricsFeature, times(3)).action(any(Context.class), anyInt(),
argThat(mNamePairMatcher), argThat(mNamePairMatcher),
argThat(pairMatches(FIELD_SETTINGS_PREFERENCE_CHANGE_LONG_VALUE, false))); argThat(pairMatches(FIELD_SETTINGS_PREFERENCE_CHANGE_INT_VALUE, false)));
} }
@Test @Test
@@ -120,7 +120,33 @@ public class SharedPreferenceLoggerTest {
verify(mMetricsFeature, times(4)).action(any(Context.class), anyInt(), verify(mMetricsFeature, times(4)).action(any(Context.class), anyInt(),
argThat(mNamePairMatcher), argThat(mNamePairMatcher),
argThat(pairMatches(FIELD_SETTINGS_PREFERENCE_CHANGE_LONG_VALUE, Long.class))); argThat(pairMatches(FIELD_SETTINGS_PREFERENCE_CHANGE_INT_VALUE, Integer.class)));
}
@Test
public void putLong_biggerThanIntMax_shouldLogIntMax() {
final SharedPreferences.Editor editor = mSharedPrefLogger.edit();
final long veryBigNumber = 500L + Integer.MAX_VALUE;
editor.putLong(TEST_KEY, 1);
editor.putLong(TEST_KEY, veryBigNumber);
verify(mMetricsFeature).action(any(Context.class), anyInt(),
argThat(mNamePairMatcher),
argThat(pairMatches(
FIELD_SETTINGS_PREFERENCE_CHANGE_INT_VALUE, Integer.MAX_VALUE)));
}
@Test
public void putLong_smallerThanIntMin_shouldLogIntMin() {
final SharedPreferences.Editor editor = mSharedPrefLogger.edit();
final long veryNegativeNumber = -500L + Integer.MIN_VALUE;
editor.putLong(TEST_KEY, 1);
editor.putLong(TEST_KEY, veryNegativeNumber);
verify(mMetricsFeature).action(any(Context.class), anyInt(),
argThat(mNamePairMatcher),
argThat(pairMatches(
FIELD_SETTINGS_PREFERENCE_CHANGE_INT_VALUE, Integer.MIN_VALUE)));
} }
@Test @Test
@@ -152,7 +178,13 @@ public class SharedPreferenceLoggerTest {
private ArgumentMatcher<Pair<Integer, Object>> pairMatches(int tag, boolean bool) { private ArgumentMatcher<Pair<Integer, Object>> pairMatches(int tag, boolean bool) {
return pair -> pair.first == tag return pair -> pair.first == tag
&& Platform.isInstanceOfType(pair.second, Long.class) && Platform.isInstanceOfType(pair.second, Integer.class)
&& pair.second.equals((bool ? 1L : 0L)); && pair.second.equals((bool ? 1 : 0));
}
private ArgumentMatcher<Pair<Integer, Object>> pairMatches(int tag, int val) {
return pair -> pair.first == tag
&& Platform.isInstanceOfType(pair.second, Integer.class)
&& pair.second.equals(val);
} }
} }