From 6167bf230fa9992c9207ce247e6be7389d3d1ffa Mon Sep 17 00:00:00 2001 From: Linus Tufvesson Date: Mon, 18 Nov 2019 18:14:00 +0000 Subject: [PATCH] Only apply flag when it has been changed The properies object provided in onPropertiesChanged only contains flag(s) that have been added/deleted/updated. Test: atest WmTests:HighRefreshRateBlacklistTest Bug: 144693310 Change-Id: Ieb5a494c01103141ee97fc1f6507437cb1d9b6b6 --- .../server/wm/HighRefreshRateBlacklist.java | 6 ++++-- .../server/wm/HighRefreshRateBlacklistTest.java | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/wm/HighRefreshRateBlacklist.java b/services/core/java/com/android/server/wm/HighRefreshRateBlacklist.java index 29b6bc479f72d..d9cf637ffaf8f 100644 --- a/services/core/java/com/android/server/wm/HighRefreshRateBlacklist.java +++ b/services/core/java/com/android/server/wm/HighRefreshRateBlacklist.java @@ -105,8 +105,10 @@ class HighRefreshRateBlacklist { private class OnPropertiesChangedListener implements DeviceConfig.OnPropertiesChangedListener { public void onPropertiesChanged(@NonNull DeviceConfig.Properties properties) { - updateBlacklist( - properties.getString(KEY_HIGH_REFRESH_RATE_BLACKLIST, null /*default*/)); + if (properties.getKeyset().contains(KEY_HIGH_REFRESH_RATE_BLACKLIST)) { + updateBlacklist( + properties.getString(KEY_HIGH_REFRESH_RATE_BLACKLIST, null /*default*/)); + } } } } diff --git a/services/tests/wmtests/src/com/android/server/wm/HighRefreshRateBlacklistTest.java b/services/tests/wmtests/src/com/android/server/wm/HighRefreshRateBlacklistTest.java index 5fb6f45b400ed..56cb447e65b0b 100644 --- a/services/tests/wmtests/src/com/android/server/wm/HighRefreshRateBlacklistTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/HighRefreshRateBlacklistTest.java @@ -120,6 +120,23 @@ public class HighRefreshRateBlacklistTest { assertFalse(mBlacklist.isBlacklisted(APP3)); } + @Test + public void testOverriddenByDeviceConfigUnrelatedFlagChanged() { + final Resources r = createResources(APP1); + final FakeDeviceConfig config = new FakeDeviceConfig(); + mBlacklist = new HighRefreshRateBlacklist(r, config); + config.setBlacklist(APP2 + "," + APP3); + assertFalse(mBlacklist.isBlacklisted(APP1)); + assertTrue(mBlacklist.isBlacklisted(APP2)); + assertTrue(mBlacklist.isBlacklisted(APP3)); + + // Change an unrelated flag in our namespace and verify that the blacklist is intact + config.putPropertyAndNotify(DeviceConfig.NAMESPACE_DISPLAY_MANAGER, "someKey", "someValue"); + assertFalse(mBlacklist.isBlacklisted(APP1)); + assertTrue(mBlacklist.isBlacklisted(APP2)); + assertTrue(mBlacklist.isBlacklisted(APP3)); + } + private Resources createResources(String... defaultBlacklist) { Resources r = mock(Resources.class); when(r.getStringArray(R.array.config_highRefreshRateBlacklist))