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

Commit a23a0106 authored by Fiona Campbell's avatar Fiona Campbell Committed by Android (Google) Code Review
Browse files

Merge "Clamp brightness before setting it" into main

parents 66e8f750 5fc7cd8f
Loading
Loading
Loading
Loading
+6 −9
Original line number Diff line number Diff line
@@ -134,6 +134,7 @@ import android.util.ArraySet;
import android.util.EventLog;
import android.util.IndentingPrintWriter;
import android.util.IntArray;
import android.util.MathUtils;
import android.util.Pair;
import android.util.Slog;
import android.util.SparseArray;
@@ -3098,6 +3099,7 @@ public final class DisplayManagerService extends SystemService {

    /**
     * Get internal or external viewport. Create it if does not currently exist.
     *
     * @param viewportType - either INTERNAL or EXTERNAL
     * @return the viewport with the requested type
     */
@@ -4413,7 +4415,6 @@ public final class DisplayManagerService extends SystemService {
        }



        @Override // Binder call
        public BrightnessConfiguration getBrightnessConfigurationForUser(int userId) {
            final String uniqueId;
@@ -4492,10 +4493,12 @@ public final class DisplayManagerService extends SystemService {
        @Override // Binder call
        public void setBrightness(int displayId, float brightness) {
            setBrightness_enforcePermission();
            if (!isValidBrightness(brightness)) {
                Slog.w(TAG, "Attempted to set invalid brightness" + brightness);
            if (Float.isNaN(brightness)) {
                Slog.w(TAG, "Attempted to set invalid brightness: " + brightness);
                return;
            }
            MathUtils.constrain(brightness, PowerManager.BRIGHTNESS_MIN,
                    PowerManager.BRIGHTNESS_MAX);
            final long token = Binder.clearCallingIdentity();
            try {
                synchronized (mSyncRoot) {
@@ -4791,12 +4794,6 @@ public final class DisplayManagerService extends SystemService {
        }
    }

    private static boolean isValidBrightness(float brightness) {
        return !Float.isNaN(brightness)
                && (brightness >= PowerManager.BRIGHTNESS_MIN)
                && (brightness <= PowerManager.BRIGHTNESS_MAX);
    }

    @VisibleForTesting
    void overrideSensorManager(SensorManager sensorManager) {
        synchronized (mSyncRoot) {
+69 −0
Original line number Diff line number Diff line
@@ -107,6 +107,7 @@ import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.os.MessageQueue;
import android.os.PowerManager;
import android.os.Process;
import android.os.RemoteException;
import android.os.SystemProperties;
@@ -3052,6 +3053,74 @@ public class DisplayManagerServiceTest {
        }
    }

    @Test
    public void testBrightnessUpdates() {
        DisplayManagerService displayManager =
                new DisplayManagerService(mContext, mShortMockedInjector);
        DisplayManagerInternal localService = displayManager.new LocalService();
        DisplayManagerService.BinderService displayManagerBinderService =
                displayManager.new BinderService();
        registerDefaultDisplays(displayManager);
        initDisplayPowerController(localService);

        final float invalidBrightness = -0.3f;
        final float brightnessOff = -1.0f;
        final float minimumBrightness = 0.0f;
        final float validBrightness = 0.5f;

        Settings.System.putInt(mContext.getContentResolver(),
                Settings.System.SCREEN_BRIGHTNESS_MODE,
                Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);

        // set and check valid brightness
        waitForIdleHandler(mPowerHandler);
        displayManagerBinderService.setBrightness(Display.DEFAULT_DISPLAY, validBrightness);
        waitForIdleHandler(mPowerHandler);
        assertEquals(validBrightness,
                displayManagerBinderService.getBrightness(Display.DEFAULT_DISPLAY),
                FLOAT_TOLERANCE);

        // set and check invalid brightness
        waitForIdleHandler(mPowerHandler);
        displayManagerBinderService.setBrightness(Display.DEFAULT_DISPLAY, invalidBrightness);
        waitForIdleHandler(mPowerHandler);
        assertEquals(PowerManager.BRIGHTNESS_MIN,
                displayManagerBinderService.getBrightness(Display.DEFAULT_DISPLAY),
                FLOAT_TOLERANCE);

        // reset and check valid brightness
        waitForIdleHandler(mPowerHandler);
        displayManagerBinderService.setBrightness(Display.DEFAULT_DISPLAY, validBrightness);
        waitForIdleHandler(mPowerHandler);
        assertEquals(validBrightness,
                displayManagerBinderService.getBrightness(Display.DEFAULT_DISPLAY),
                FLOAT_TOLERANCE);

        // set and check brightness off
        waitForIdleHandler(mPowerHandler);
        displayManagerBinderService.setBrightness(Display.DEFAULT_DISPLAY, brightnessOff);
        waitForIdleHandler(mPowerHandler);
        assertEquals(PowerManager.BRIGHTNESS_MIN,
                displayManagerBinderService.getBrightness(Display.DEFAULT_DISPLAY),
                FLOAT_TOLERANCE);

        // reset and check valid brightness
        waitForIdleHandler(mPowerHandler);
        displayManagerBinderService.setBrightness(Display.DEFAULT_DISPLAY, validBrightness);
        waitForIdleHandler(mPowerHandler);
        assertEquals(validBrightness,
                displayManagerBinderService.getBrightness(Display.DEFAULT_DISPLAY),
                FLOAT_TOLERANCE);

        // set and check minimum brightness
        waitForIdleHandler(mPowerHandler);
        displayManagerBinderService.setBrightness(Display.DEFAULT_DISPLAY, minimumBrightness);
        waitForIdleHandler(mPowerHandler);
        assertEquals(PowerManager.BRIGHTNESS_MIN,
                displayManagerBinderService.getBrightness(Display.DEFAULT_DISPLAY),
                FLOAT_TOLERANCE);
    }

    @Test
    public void testResolutionChangeGetsBackedUp() throws Exception {
        when(mMockFlags.isResolutionBackupRestoreEnabled()).thenReturn(true);