Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f49d3de3 authored by Kriti Dang's avatar Kriti Dang
Browse files

Initialise the brightness value with Float.NaN in PersistentDataStore

If there is no DisplayState, and it gets initialised because of any
other field, for instance refresh-rate, the brightness gets initialised
by 0. Since 0 is a permissible value for brightness, is causes issues by
changing the brightness to 0.

Bug: 259517441
Test: atest PersistentDataStoreTest
Change-Id: I532afc9e9d437199922f83f3c4440127a86a88f5
parent 5932f31d
Loading
Loading
Loading
Loading
+9 −3
Original line number Original line Diff line number Diff line
@@ -619,7 +619,7 @@ final class PersistentDataStore {


    private static final class DisplayState {
    private static final class DisplayState {
        private int mColorMode;
        private int mColorMode;
        private float mBrightness;
        private float mBrightness = Float.NaN;
        private int mWidth;
        private int mWidth;
        private int mHeight;
        private int mHeight;
        private float mRefreshRate;
        private float mRefreshRate;
@@ -700,7 +700,11 @@ final class PersistentDataStore {
                        break;
                        break;
                    case TAG_BRIGHTNESS_VALUE:
                    case TAG_BRIGHTNESS_VALUE:
                        String brightness = parser.nextText();
                        String brightness = parser.nextText();
                        try {
                            mBrightness = Float.parseFloat(brightness);
                            mBrightness = Float.parseFloat(brightness);
                        } catch (NumberFormatException e) {
                            mBrightness = Float.NaN;
                        }
                        break;
                        break;
                    case TAG_BRIGHTNESS_CONFIGURATIONS:
                    case TAG_BRIGHTNESS_CONFIGURATIONS:
                        mDisplayBrightnessConfigurations.loadFromXml(parser);
                        mDisplayBrightnessConfigurations.loadFromXml(parser);
@@ -727,7 +731,9 @@ final class PersistentDataStore {
            serializer.endTag(null, TAG_COLOR_MODE);
            serializer.endTag(null, TAG_COLOR_MODE);


            serializer.startTag(null, TAG_BRIGHTNESS_VALUE);
            serializer.startTag(null, TAG_BRIGHTNESS_VALUE);
            if (!Float.isNaN(mBrightness)) {
                serializer.text(Float.toString(mBrightness));
                serializer.text(Float.toString(mBrightness));
            }
            serializer.endTag(null, TAG_BRIGHTNESS_VALUE);
            serializer.endTag(null, TAG_BRIGHTNESS_VALUE);


            serializer.startTag(null, TAG_BRIGHTNESS_CONFIGURATIONS);
            serializer.startTag(null, TAG_BRIGHTNESS_CONFIGURATIONS);
+34 −0
Original line number Original line Diff line number Diff line
@@ -344,6 +344,40 @@ public class PersistentDataStoreTest {
        assertEquals(85.3f, newDataStore.getUserPreferredRefreshRate(testDisplayDevice), 0.1f);
        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 {
    public class TestInjector extends PersistentDataStore.Injector {
        private InputStream mReadStream;
        private InputStream mReadStream;
        private OutputStream mWriteStream;
        private OutputStream mWriteStream;