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
This commit is contained in:
@@ -115,7 +115,7 @@ public class BrightnessSynchronizer {
|
|||||||
Slog.i(TAG, "Setting initial brightness to default value of: " + defaultBrightness);
|
Slog.i(TAG, "Setting initial brightness to default value of: " + defaultBrightness);
|
||||||
}
|
}
|
||||||
|
|
||||||
mBrightnessSyncObserver.startObserving();
|
mBrightnessSyncObserver.startObserving(mHandler);
|
||||||
mHandler.sendEmptyMessageAtTime(MSG_RUN_UPDATE, mClock.uptimeMillis());
|
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
|
@Override
|
||||||
public void onChange(boolean selfChange, Uri uri) {
|
public void onChange(boolean selfChange, Uri uri) {
|
||||||
if (selfChange) {
|
if (selfChange) {
|
||||||
@@ -493,19 +494,19 @@ public class BrightnessSynchronizer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
boolean isObserving() {
|
boolean isObserving() {
|
||||||
return mIsObserving;
|
return mIsObserving;
|
||||||
}
|
}
|
||||||
|
|
||||||
void startObserving() {
|
void startObserving(Handler handler) {
|
||||||
final ContentResolver cr = mContext.getContentResolver();
|
final ContentResolver cr = mContext.getContentResolver();
|
||||||
cr.registerContentObserver(BRIGHTNESS_URI, false, mContentObserver,
|
cr.registerContentObserver(BRIGHTNESS_URI, false,
|
||||||
UserHandle.USER_ALL);
|
createBrightnessContentObserver(handler), UserHandle.USER_ALL);
|
||||||
mDisplayManager.registerDisplayListener(mListener, mHandler,
|
mDisplayManager.registerDisplayListener(mListener, handler,
|
||||||
DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS);
|
DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS);
|
||||||
mIsObserving = true;
|
mIsObserving = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user