From 5090f7da48cfff49ebf71de0eccdd009ab931624 Mon Sep 17 00:00:00 2001 From: Beverly Date: Mon, 24 Jun 2019 16:00:15 -0400 Subject: [PATCH] Log Preference changes when value is a String As long as the String can be converted to an integer Test: atest SharedPreferenceLoggerTest Fixes: 135937584 Change-Id: If58077c9c7b10373c4c2459d275add25a5bcdc05 --- .../SharedPreferencesLogger.java | 14 +++++++-- .../SharedPreferenceLoggerTest.java | 29 +++++++++++++++++++ 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/SharedPreferencesLogger.java b/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/SharedPreferencesLogger.java index 320380fc0ed9d..869de0debd374 100644 --- a/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/SharedPreferencesLogger.java +++ b/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/SharedPreferencesLogger.java @@ -102,7 +102,8 @@ public class SharedPreferencesLogger implements SharedPreferences { OnSharedPreferenceChangeListener listener) { } - private void logValue(String key, Object value) { + @VisibleForTesting + protected void logValue(String key, Object value) { logValue(key, value, false /* forceLog */); } @@ -138,11 +139,18 @@ public class SharedPreferencesLogger implements SharedPreferences { } else { intVal = (int) floatValue; } + } else if (value instanceof String) { + try { + intVal = Integer.parseInt((String) value); + } catch (NumberFormatException e) { + Log.w(LOG_TAG, "Tried to log unloggable object=" + value); + return; + } } else { - Log.w(LOG_TAG, "Tried to log unloggable object" + value); + Log.w(LOG_TAG, "Tried to log unloggable object=" + value); return; } - // Pref key exists in set, log it's change in metrics. + // Pref key exists in set, log its change in metrics. mMetricsFeature.action(SettingsEnums.PAGE_UNKNOWN, SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE, SettingsEnums.PAGE_UNKNOWN, diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/SharedPreferenceLoggerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/SharedPreferenceLoggerTest.java index 8f51dece64e55..89de81fde889e 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/SharedPreferenceLoggerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/SharedPreferenceLoggerTest.java @@ -162,4 +162,33 @@ public class SharedPreferenceLoggerTest { "tag/key:com.android.settings", 0); } + + @Test + public void putString_shouldNotLogInitialPut() { + mSharedPrefLogger.logValue(TEST_KEY, "1"); + mSharedPrefLogger.logValue(TEST_KEY, "2"); + mSharedPrefLogger.logValue(TEST_KEY, "62"); + mSharedPrefLogger.logValue(TEST_KEY, "0"); + + verify(mMetricsFeature, times(3)).action(eq(SettingsEnums.PAGE_UNKNOWN), + eq(SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE), + eq(SettingsEnums.PAGE_UNKNOWN), + eq(TEST_TAGGED_KEY), + anyInt()); + } + + @Test + public void putString_shouldNotLogAnyNonIntegers() { + mSharedPrefLogger.logValue(TEST_KEY, "string"); + mSharedPrefLogger.logValue(TEST_KEY, "not an int"); + mSharedPrefLogger.logValue(TEST_KEY, "1.234f"); + mSharedPrefLogger.logValue(TEST_KEY, "4.2"); + mSharedPrefLogger.logValue(TEST_KEY, "3.0"); + + verify(mMetricsFeature, times(0)).action(eq(SettingsEnums.PAGE_UNKNOWN), + eq(SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE), + eq(SettingsEnums.PAGE_UNKNOWN), + eq(TEST_TAGGED_KEY), + anyInt()); + } }