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

Commit da39f93e authored by Oleg Petšjonkin's avatar Oleg Petšjonkin Committed by Android (Google) Code Review
Browse files

Merge "BrightnessClamperController state recalculation blocked until started" into main

parents c06384c6 130b5355
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -81,6 +81,8 @@ public class BrightnessClamperController {
                }
            };

    private volatile boolean mStarted = false;

    public BrightnessClamperController(Handler handler,
            ClamperChangeListener clamperChangeListener, DisplayDeviceData data, Context context,
            DisplayManagerFlags flags, SensorManager sensorManager, float currentBrightness) {
@@ -100,10 +102,10 @@ public class BrightnessClamperController {
        mClamperChangeListenerExternal = clamperChangeListener;
        mExecutor = new HandlerExecutor(handler);

        Runnable clamperChangeRunnableInternal = this::recalculateBrightnessCap;
        Runnable modifiersChangeRunnableInternal = this::recalculateModifiersState;
        ClamperChangeListener clamperChangeListenerInternal = () -> {
            if (!mHandler.hasCallbacks(clamperChangeRunnableInternal)) {
                mHandler.post(clamperChangeRunnableInternal);
            if (mStarted && !mHandler.hasCallbacks(modifiersChangeRunnableInternal)) {
                mHandler.post(modifiersChangeRunnableInternal);
            }
        };

@@ -187,6 +189,7 @@ public class BrightnessClamperController {
     * Called in DisplayControllerHandler
     */
    public void stop() {
        mStarted = false;
        mDeviceConfigParameterProvider.removeOnPropertiesChangedListener(
                mOnPropertiesChangedListener);
        mLightSensorController.stop();
@@ -195,9 +198,9 @@ public class BrightnessClamperController {


    // Called in DisplayControllerHandler
    private void recalculateBrightnessCap() {
    private void recalculateModifiersState() {
        ModifiersAggregatedState newAggregatedState = new ModifiersAggregatedState();
        mStatefulModifiers.forEach((clamper) -> clamper.applyStateChange(newAggregatedState));
        mStatefulModifiers.forEach((modifier) -> modifier.applyStateChange(newAggregatedState));

        if (needToNotifyExternalListener(mModifiersAggregatedState, newAggregatedState)) {
            mClamperChangeListenerExternal.onChanged();
@@ -223,6 +226,7 @@ public class BrightnessClamperController {
                    mExecutor, mOnPropertiesChangedListener);
        }
        adjustLightSensorSubscription();
        mStarted = true;
    }

    private void adjustLightSensorSubscription() {
+20 −0
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ package com.android.server.display.brightness.clamper;
import static android.view.Display.STATE_OFF;
import static android.view.Display.STATE_ON;

import static com.google.common.truth.Truth.assertThat;

import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
@@ -269,6 +271,24 @@ public class BrightnessClamperControllerTest {
        verify(mMockExternalListener).onChanged();
    }

    @Test
    public void test_doesNotScheduleRecalculateBeforeStart() {
        mTestInjector = new TestInjector(List.of()) {
            @Override
            List<BrightnessStateModifier> getModifiers(DisplayManagerFlags flags, Context context,
                    Handler handler, BrightnessClamperController.ClamperChangeListener listener,
                    BrightnessClamperController.DisplayDeviceData displayDeviceData,
                    float currentBrightness) {
                listener.onChanged();
                return super.getModifiers(flags, context, handler, listener, displayDeviceData,
                        currentBrightness);
            }
        };
        mClamperController = createBrightnessClamperController();

        assertThat(mTestHandler.getPendingMessages()).isEmpty();
    }

    private BrightnessClamperController createBrightnessClamperController() {
        return new BrightnessClamperController(mTestInjector, mTestHandler, mMockExternalListener,
                mMockDisplayDeviceData, mMockContext, mFlags, mSensorManager, 0);