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

Commit b7ebbded authored by Adrian Roos's avatar Adrian Roos
Browse files

Fix errors that could lead to brightness flickering

Ensures that changing the brightness doesn't lead to
another write to settings from SystemUI. Also makes
sure that a BrightnessDialog from a background user
is never showing. While we're in there, fix the obsolete
window flags as well and ensure BrightnessDialog only ever
allocates one BrightnessController.

Bug: 16297345
Change-Id: Id95b598b0fa99680072bc160afb00d2cd49f05ca
parent 4482e4bb
Loading
Loading
Loading
Loading
+21 −13
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ public class BrightnessController implements ToggleSlider.Listener {

    private boolean mAutomatic;
    private boolean mListening;
    private boolean mExternalChange;

    public interface BrightnessStateChangeCallback {
        public void onBrightnessLevelChanged();
@@ -86,6 +87,8 @@ public class BrightnessController implements ToggleSlider.Listener {
        @Override
        public void onChange(boolean selfChange, Uri uri) {
            if (selfChange) return;
            try {
                mExternalChange = true;
                if (BRIGHTNESS_MODE_URI.equals(uri)) {
                    updateMode();
                    updateSlider();
@@ -100,6 +103,9 @@ public class BrightnessController implements ToggleSlider.Listener {
                for (BrightnessStateChangeCallback cb : mChangeCallbacks) {
                    cb.onBrightnessLevelChanged();
                }
            } finally {
                mExternalChange = false;
            }
        }

        public void startObserving() {
@@ -191,6 +197,8 @@ public class BrightnessController implements ToggleSlider.Listener {
    @Override
    public void onChanged(ToggleSlider view, boolean tracking, boolean automatic, int value) {
        updateIcon(mAutomatic);
        if (mExternalChange) return;

        if (!mAutomatic) {
            final int val = value + mMinimumBacklight;
            setBrightness(val);
+4 −12
Original line number Diff line number Diff line
@@ -40,35 +40,27 @@ public class BrightnessDialog extends Activity {
        super.onCreate(savedInstanceState);

        final Window window = getWindow();
        final WindowManager.LayoutParams lp = window.getAttributes();

        // Offset from the top
        lp.y = getResources().getDimensionPixelOffset(R.dimen.volume_panel_top);
        lp.type = WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY;
        lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;

        window.setAttributes(lp);
        window.setGravity(Gravity.TOP);
        window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        window.requestFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.quick_settings_brightness_dialog);

        final ImageView icon = (ImageView) findViewById(R.id.brightness_icon);
        final ToggleSlider slider = (ToggleSlider) findViewById(R.id.brightness_slider);
        mBrightnessController = new BrightnessController(this, icon, slider);
    }

    @Override
    protected void onStart() {
        super.onStart();

        final ImageView icon = (ImageView) findViewById(R.id.brightness_icon);
        final ToggleSlider slider = (ToggleSlider) findViewById(R.id.brightness_slider);
        mBrightnessController = new BrightnessController(this, icon, slider);
        mBrightnessController.registerCallbacks();
    }

    @Override
    protected void onStop() {
        super.onStop();

        mBrightnessController.unregisterCallbacks();
    }