Loading services/core/java/com/android/server/display/PersistentDataStore.java +9 −3 Original line number Diff line number Diff line Loading @@ -619,7 +619,7 @@ final class PersistentDataStore { private static final class DisplayState { private int mColorMode; private float mBrightness; private float mBrightness = Float.NaN; private int mWidth; private int mHeight; private float mRefreshRate; Loading Loading @@ -700,7 +700,11 @@ final class PersistentDataStore { break; case TAG_BRIGHTNESS_VALUE: String brightness = parser.nextText(); try { mBrightness = Float.parseFloat(brightness); } catch (NumberFormatException e) { mBrightness = Float.NaN; } break; case TAG_BRIGHTNESS_CONFIGURATIONS: mDisplayBrightnessConfigurations.loadFromXml(parser); Loading @@ -727,7 +731,9 @@ final class PersistentDataStore { serializer.endTag(null, TAG_COLOR_MODE); serializer.startTag(null, TAG_BRIGHTNESS_VALUE); if (!Float.isNaN(mBrightness)) { serializer.text(Float.toString(mBrightness)); } serializer.endTag(null, TAG_BRIGHTNESS_VALUE); serializer.startTag(null, TAG_BRIGHTNESS_CONFIGURATIONS); Loading services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java +34 −0 Original line number Diff line number Diff line Loading @@ -344,6 +344,40 @@ public class PersistentDataStoreTest { assertEquals(85.3f, newDataStore.getUserPreferredRefreshRate(testDisplayDevice), 0.1f); } @Test public void testBrightnessInitialisesWithInvalidFloat() { final String uniqueDisplayId = "test:123"; DisplayDevice testDisplayDevice = new DisplayDevice(null, null, uniqueDisplayId, null) { @Override public boolean hasStableUniqueId() { return true; } @Override public DisplayDeviceInfo getDisplayDeviceInfoLocked() { return null; } }; // Set any value which initialises Display state float refreshRate = 85.3f; mDataStore.loadIfNeeded(); mDataStore.setUserPreferredRefreshRate(testDisplayDevice, refreshRate); final ByteArrayOutputStream baos = new ByteArrayOutputStream(); mInjector.setWriteStream(baos); mDataStore.saveIfNeeded(); mTestLooper.dispatchAll(); assertTrue(mInjector.wasWriteSuccessful()); TestInjector newInjector = new TestInjector(); PersistentDataStore newDataStore = new PersistentDataStore(newInjector); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); newInjector.setReadStream(bais); newDataStore.loadIfNeeded(); assertTrue(Float.isNaN(mDataStore.getBrightness(testDisplayDevice))); } public class TestInjector extends PersistentDataStore.Injector { private InputStream mReadStream; private OutputStream mWriteStream; Loading Loading
services/core/java/com/android/server/display/PersistentDataStore.java +9 −3 Original line number Diff line number Diff line Loading @@ -619,7 +619,7 @@ final class PersistentDataStore { private static final class DisplayState { private int mColorMode; private float mBrightness; private float mBrightness = Float.NaN; private int mWidth; private int mHeight; private float mRefreshRate; Loading Loading @@ -700,7 +700,11 @@ final class PersistentDataStore { break; case TAG_BRIGHTNESS_VALUE: String brightness = parser.nextText(); try { mBrightness = Float.parseFloat(brightness); } catch (NumberFormatException e) { mBrightness = Float.NaN; } break; case TAG_BRIGHTNESS_CONFIGURATIONS: mDisplayBrightnessConfigurations.loadFromXml(parser); Loading @@ -727,7 +731,9 @@ final class PersistentDataStore { serializer.endTag(null, TAG_COLOR_MODE); serializer.startTag(null, TAG_BRIGHTNESS_VALUE); if (!Float.isNaN(mBrightness)) { serializer.text(Float.toString(mBrightness)); } serializer.endTag(null, TAG_BRIGHTNESS_VALUE); serializer.startTag(null, TAG_BRIGHTNESS_CONFIGURATIONS); Loading
services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java +34 −0 Original line number Diff line number Diff line Loading @@ -344,6 +344,40 @@ public class PersistentDataStoreTest { assertEquals(85.3f, newDataStore.getUserPreferredRefreshRate(testDisplayDevice), 0.1f); } @Test public void testBrightnessInitialisesWithInvalidFloat() { final String uniqueDisplayId = "test:123"; DisplayDevice testDisplayDevice = new DisplayDevice(null, null, uniqueDisplayId, null) { @Override public boolean hasStableUniqueId() { return true; } @Override public DisplayDeviceInfo getDisplayDeviceInfoLocked() { return null; } }; // Set any value which initialises Display state float refreshRate = 85.3f; mDataStore.loadIfNeeded(); mDataStore.setUserPreferredRefreshRate(testDisplayDevice, refreshRate); final ByteArrayOutputStream baos = new ByteArrayOutputStream(); mInjector.setWriteStream(baos); mDataStore.saveIfNeeded(); mTestLooper.dispatchAll(); assertTrue(mInjector.wasWriteSuccessful()); TestInjector newInjector = new TestInjector(); PersistentDataStore newDataStore = new PersistentDataStore(newInjector); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); newInjector.setReadStream(bais); newDataStore.loadIfNeeded(); assertTrue(Float.isNaN(mDataStore.getBrightness(testDisplayDevice))); } public class TestInjector extends PersistentDataStore.Injector { private InputStream mReadStream; private OutputStream mWriteStream; Loading