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

Commit 90e2f377 authored by Philip Junker's avatar Philip Junker
Browse files

Initialize ContentObserver in startObserving().

This removes a race condition where ContentObserver is initialized
while mHandler is null which causes the ContentObserver#onChange() callback to run on a different thread and can cause an NPE.

Bug: 246843362
Test: manual
Test: atest BrightnessSynchronizerTest
Change-Id: Ib8e192c3961390ece721fa473d5c09323c30bafe
parent 6bf944b7
Loading
Loading
Loading
Loading
+17 −16
Original line number Diff line number Diff line
@@ -115,7 +115,7 @@ public class BrightnessSynchronizer {
            Slog.i(TAG, "Setting initial brightness to default value of: " + defaultBrightness);
        }

        mBrightnessSyncObserver.startObserving();
        mBrightnessSyncObserver.startObserving(mHandler);
        mHandler.sendEmptyMessageAtTime(MSG_RUN_UPDATE, mClock.uptimeMillis());
    }

@@ -482,7 +482,8 @@ public class BrightnessSynchronizer {
            }
        };

        private final ContentObserver mContentObserver = new ContentObserver(mHandler) {
        private ContentObserver createBrightnessContentObserver(Handler handler) {
            return new ContentObserver(handler) {
                @Override
                public void onChange(boolean selfChange, Uri uri) {
                    if (selfChange) {
@@ -493,19 +494,19 @@ public class BrightnessSynchronizer {
                    }
                }
            };
        }

        boolean isObserving() {
            return mIsObserving;
        }

        void startObserving() {
        void startObserving(Handler handler) {
            final ContentResolver cr = mContext.getContentResolver();
            cr.registerContentObserver(BRIGHTNESS_URI, false, mContentObserver,
                    UserHandle.USER_ALL);
            mDisplayManager.registerDisplayListener(mListener, mHandler,
            cr.registerContentObserver(BRIGHTNESS_URI, false,
                    createBrightnessContentObserver(handler), UserHandle.USER_ALL);
            mDisplayManager.registerDisplayListener(mListener, handler,
                    DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS);
            mIsObserving = true;
        }

    }
}