diff options
| -rw-r--r-- | services/core/java/com/android/server/display/PersistentDataStore.java | 12 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java | 34 | 
2 files changed, 43 insertions, 3 deletions
| diff --git a/services/core/java/com/android/server/display/PersistentDataStore.java b/services/core/java/com/android/server/display/PersistentDataStore.java index a11f1721a4b9..73131a1dc220 100644 --- a/services/core/java/com/android/server/display/PersistentDataStore.java +++ b/services/core/java/com/android/server/display/PersistentDataStore.java @@ -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; @@ -700,7 +700,11 @@ final class PersistentDataStore {                          break;                      case TAG_BRIGHTNESS_VALUE:                          String brightness = parser.nextText(); -                        mBrightness = Float.parseFloat(brightness); +                        try { +                            mBrightness = Float.parseFloat(brightness); +                        } catch (NumberFormatException e) { +                            mBrightness = Float.NaN; +                        }                          break;                      case TAG_BRIGHTNESS_CONFIGURATIONS:                          mDisplayBrightnessConfigurations.loadFromXml(parser); @@ -727,7 +731,9 @@ final class PersistentDataStore {              serializer.endTag(null, TAG_COLOR_MODE);              serializer.startTag(null, TAG_BRIGHTNESS_VALUE); -            serializer.text(Float.toString(mBrightness)); +            if (!Float.isNaN(mBrightness)) { +                serializer.text(Float.toString(mBrightness)); +            }              serializer.endTag(null, TAG_BRIGHTNESS_VALUE);              serializer.startTag(null, TAG_BRIGHTNESS_CONFIGURATIONS); diff --git a/services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java b/services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java index 3b0a22f80c30..35a677e0f816 100644 --- a/services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java +++ b/services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java @@ -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; |