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

Commit c1923a26 authored by Fabián Kozynski's avatar Fabián Kozynski
Browse files

Reinflate QS brightness on density change

Recreate all the controllers and re-attach to mirror.

Test: manual: adb shell wm density
Test: heapdump: no leaks of old views, controllers
Fixes: 319050325
Flag: None
Change-Id: I137a7a5121bd482b7838fd6f15ed123807139cab
parent 9f7479bf
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -189,6 +189,7 @@ public class QSPanel extends LinearLayout implements Tunable {
    public void setBrightnessView(@NonNull View view) {
        if (mBrightnessView != null) {
            removeView(mBrightnessView);
            mChildrenLayoutTop.remove(mBrightnessView);
            mMovableContentStartIndex--;
        }
        addView(view, 0);
+30 −3
Original line number Diff line number Diff line
@@ -56,14 +56,18 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
    private final QSCustomizerController mQsCustomizerController;
    private final QSTileRevealController.Factory mQsTileRevealControllerFactory;
    private final FalsingManager mFalsingManager;
    private final BrightnessController mBrightnessController;
    private final BrightnessSliderController mBrightnessSliderController;
    private final BrightnessMirrorHandler mBrightnessMirrorHandler;
    private BrightnessController mBrightnessController;
    private BrightnessSliderController mBrightnessSliderController;
    private BrightnessMirrorHandler mBrightnessMirrorHandler;
    private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
    private boolean mListening;

    private final boolean mSceneContainerEnabled;

    private int mLastDensity;
    private final BrightnessSliderController.Factory mBrightnessSliderControllerFactory;
    private final BrightnessController.Factory mBrightnessControllerFactory;

    private View.OnTouchListener mTileLayoutTouchListener = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
@@ -93,6 +97,8 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
        mQsCustomizerController = qsCustomizerController;
        mQsTileRevealControllerFactory = qsTileRevealControllerFactory;
        mFalsingManager = falsingManager;
        mBrightnessSliderControllerFactory = brightnessSliderFactory;
        mBrightnessControllerFactory = brightnessControllerFactory;

        mBrightnessSliderController = brightnessSliderFactory.create(getContext(), mView);
        mView.setBrightnessView(mBrightnessSliderController.getRootView());
@@ -100,6 +106,7 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
        mBrightnessController = brightnessControllerFactory.create(mBrightnessSliderController);
        mBrightnessMirrorHandler = new BrightnessMirrorHandler(mBrightnessController);
        mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
        mLastDensity = view.getResources().getConfiguration().densityDpi;
        mSceneContainerEnabled = sceneContainerFlags.isEnabled();
    }

@@ -147,11 +154,31 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
    @Override
    protected void onConfigurationChanged() {
        mView.updateResources();
        int newDensity = mView.getResources().getConfiguration().densityDpi;
        if (newDensity != mLastDensity) {
            mLastDensity = newDensity;
            reinflateBrightnessSlider();
        }

        if (mView.isListening()) {
            refreshAllTiles();
        }
    }

    private void reinflateBrightnessSlider() {
        mBrightnessController.unregisterCallbacks();
        mBrightnessSliderController =
                mBrightnessSliderControllerFactory.create(getContext(), mView);
        mView.setBrightnessView(mBrightnessSliderController.getRootView());
        mBrightnessController = mBrightnessControllerFactory.create(mBrightnessSliderController);
        mBrightnessMirrorHandler.setBrightnessController(mBrightnessController);
        mBrightnessSliderController.init();
        if (mListening) {
            mBrightnessController.registerCallbacks();
        }
    }


    @Override
    protected void onSplitShadeChanged(boolean shouldUseSplitNotificationShade) {
        ((PagedTileLayout) mView.getOrCreateTileLayout())
+10 −3
Original line number Diff line number Diff line
@@ -19,9 +19,16 @@ package com.android.systemui.settings.brightness
import com.android.systemui.statusbar.policy.BrightnessMirrorController
import com.android.systemui.statusbar.policy.BrightnessMirrorController.BrightnessMirrorListener

class BrightnessMirrorHandler(private val brightnessController: MirroredBrightnessController) {
class BrightnessMirrorHandler(brightnessController: MirroredBrightnessController) {

    private var mirrorController: BrightnessMirrorController? = null
    var mirrorController: BrightnessMirrorController? = null
        private set

    var brightnessController: MirroredBrightnessController = brightnessController
        set(value) {
            field = value
            updateBrightnessMirror()
        }

    private val brightnessMirrorListener = BrightnessMirrorListener { updateBrightnessMirror() }

@@ -33,7 +40,7 @@ class BrightnessMirrorHandler(private val brightnessController: MirroredBrightne
        mirrorController?.removeCallback(brightnessMirrorListener)
    }

    fun setController(controller: BrightnessMirrorController) {
    fun setController(controller: BrightnessMirrorController?) {
        mirrorController?.removeCallback(brightnessMirrorListener)
        mirrorController = controller
        mirrorController?.addCallback(brightnessMirrorListener)