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

Commit 1f0cc20c authored by Piotr Wilczyński's avatar Piotr Wilczyński
Browse files

Bedtime mode clamper

Bug: 311165690
Test: atest com.android.server.display.brightness.clamper
Test: atest DisplayDeviceConfigTest
Test: adb shell dumpsys display
Change-Id: I4115f6cc3b98a3139a6cfecd5e67290eb83ebac2
parent 529f64a2
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -1522,6 +1522,10 @@
    config_screenBrightnessSettingDefaultFloat instead -->
    <integer name="config_screenBrightnessSettingDefault">102</integer>

    <!-- Maximum screen brightness setting when screen brightness capped in Wear Bedtime mode.
    The value must be in the range [0, 255]. -->
    <integer name="config_screenBrightnessCapForWearBedtimeMode">20</integer>

    <!-- Minimum screen brightness setting allowed by power manager.
         -2 is invalid so setting will resort to int value specified above.
         Set this to 0.0 to allow screen to go to minimal brightness.
+1 −0
Original line number Diff line number Diff line
@@ -2078,6 +2078,7 @@
  <java-symbol type="integer" name="config_screenBrightnessSettingMinimum" />
  <java-symbol type="integer" name="config_screenBrightnessSettingMaximum" />
  <java-symbol type="integer" name="config_screenBrightnessSettingDefault" />
  <java-symbol type="integer" name="config_screenBrightnessCapForWearBedtimeMode" />
  <java-symbol type="dimen" name="config_screenBrightnessSettingMinimumFloat" />
  <java-symbol type="dimen" name="config_screenBrightnessSettingMaximumFloat" />
  <java-symbol type="dimen" name="config_screenBrightnessSettingDefaultFloat" />
+35 −2
Original line number Diff line number Diff line
@@ -528,6 +528,7 @@ import javax.xml.datatype.DatatypeConfigurationException;
 *         <majorVersion>2</majorVersion>
 *         <minorVersion>0</minorVersion>
 *     </usiVersion>
 *     <screenBrightnessCapForWearBedtimeMode>0.1</screenBrightnessCapForWearBedtimeMode>
 *    </displayConfiguration>
 *  }
 *  </pre>
@@ -843,6 +844,11 @@ public class DisplayDeviceConfig {
    @Nullable
    private HdrBrightnessData mHdrBrightnessData;

    /**
     * Maximum screen brightness setting when screen brightness capped in Wear Bedtime mode.
     */
    private float mBrightnessCapForWearBedtimeMode;

    @VisibleForTesting
    DisplayDeviceConfig(Context context) {
        mContext = context;
@@ -1741,6 +1747,13 @@ public class DisplayDeviceConfig {
        return mHostUsiVersion;
    }

    /**
     * @return Maximum screen brightness setting when screen brightness capped in Wear Bedtime mode.
     */
    public float getBrightnessCapForWearBedtimeMode() {
        return mBrightnessCapForWearBedtimeMode;
    }

    @Override
    public String toString() {
        return "DisplayDeviceConfig{"
@@ -1871,7 +1884,8 @@ public class DisplayDeviceConfig {
                mScreenOffBrightnessSensorValueToLux)
                + "\n"
                + "mUsiVersion= " + mHostUsiVersion + "\n"
                + "mHdrBrightnessData" + mHdrBrightnessData
                + "mHdrBrightnessData= " + mHdrBrightnessData + "\n"
                + "mBrightnessCapForWearBedtimeMode= " + mBrightnessCapForWearBedtimeMode
                + "}";
    }

@@ -1938,6 +1952,7 @@ public class DisplayDeviceConfig {
                loadScreenOffBrightnessSensorValueToLuxFromDdc(config);
                loadUsiVersion(config);
                mHdrBrightnessData = HdrBrightnessData.loadConfig(config);
                loadBrightnessCapForWearBedtimeMode(config);
            } else {
                Slog.w(TAG, "DisplayDeviceConfig file is null");
            }
@@ -1961,6 +1976,7 @@ public class DisplayDeviceConfig {
        loadAutoBrightnessConfigsFromConfigXml();
        loadAutoBrightnessAvailableFromConfigXml();
        loadRefreshRateSetting(null);
        loadBrightnessCapForWearBedtimeModeFromConfigXml();
        mLoadedFrom = "<config.xml>";
    }

@@ -3350,6 +3366,23 @@ public class DisplayDeviceConfig {
                : null;
    }

    private void loadBrightnessCapForWearBedtimeMode(DisplayConfiguration config) {
        if (config != null) {
            BigDecimal configBrightnessCap = config.getScreenBrightnessCapForWearBedtimeMode();
            if (configBrightnessCap != null) {
                mBrightnessCapForWearBedtimeMode = configBrightnessCap.floatValue();
            } else {
                loadBrightnessCapForWearBedtimeModeFromConfigXml();
            }
        }
    }

    private void loadBrightnessCapForWearBedtimeModeFromConfigXml() {
        mBrightnessCapForWearBedtimeMode = BrightnessSynchronizer.brightnessIntToFloat(
                mContext.getResources().getInteger(com.android.internal.R.integer
                        .config_screenBrightnessCapForWearBedtimeMode));
    }

    /**
     * Container for high brightness mode configuration data.
     */
+15 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.display.brightness.clamper;

import android.annotation.NonNull;
import android.os.Handler;
import android.os.PowerManager;

import com.android.server.display.DisplayBrightnessState;
@@ -31,6 +32,18 @@ abstract class BrightnessClamper<T> {
    protected float mBrightnessCap = PowerManager.BRIGHTNESS_MAX;
    protected boolean mIsActive = false;

    @NonNull
    protected final Handler mHandler;

    @NonNull
    protected final BrightnessClamperController.ClamperChangeListener mChangeListener;

    BrightnessClamper(Handler handler,
            BrightnessClamperController.ClamperChangeListener changeListener) {
        mHandler = handler;
        mChangeListener = changeListener;
    }

    float getBrightnessCap() {
        return mBrightnessCap;
    }
@@ -60,6 +73,7 @@ abstract class BrightnessClamper<T> {

    protected enum Type {
        THERMAL,
        POWER
        POWER,
        BEDTIME_MODE
    }
}
+14 −3
Original line number Diff line number Diff line
@@ -90,7 +90,8 @@ public class BrightnessClamperController {
            }
        };

        mClampers = injector.getClampers(handler, clamperChangeListenerInternal, data, flags);
        mClampers = injector.getClampers(handler, clamperChangeListenerInternal, data, flags,
                context);
        mModifiers = injector.getModifiers(context);
        mOnPropertiesChangedListener =
                properties -> mClampers.forEach(BrightnessClamper::onDeviceConfigChanged);
@@ -234,7 +235,7 @@ public class BrightnessClamperController {

        List<BrightnessClamper<? super DisplayDeviceData>> getClampers(Handler handler,
                ClamperChangeListener clamperChangeListener, DisplayDeviceData data,
                DisplayManagerFlags flags) {
                DisplayManagerFlags flags, Context context) {
            List<BrightnessClamper<? super DisplayDeviceData>> clampers = new ArrayList<>();
            clampers.add(
                    new BrightnessThermalClamper(handler, clamperChangeListener, data));
@@ -242,6 +243,10 @@ public class BrightnessClamperController {
                clampers.add(new BrightnessPowerClamper(handler, clamperChangeListener,
                            data));
            }
            if (flags.isBrightnessWearBedtimeModeClamperEnabled()) {
                clampers.add(new BrightnessWearBedtimeModeClamper(handler, context,
                        clamperChangeListener, data));
            }
            return clampers;
        }

@@ -257,7 +262,8 @@ public class BrightnessClamperController {
     * Config Data for clampers
     */
    public static class DisplayDeviceData implements BrightnessThermalClamper.ThermalData,
                BrightnessPowerClamper.PowerData {
                BrightnessPowerClamper.PowerData,
            BrightnessWearBedtimeModeClamper.WearBedtimeModeData {
        @NonNull
        private final String mUniqueDisplayId;
        @NonNull
@@ -315,5 +321,10 @@ public class BrightnessClamperController {
        public PowerThrottlingConfigData getPowerThrottlingConfigData() {
            return mDisplayDeviceConfig.getPowerThrottlingConfigData();
        }

        @Override
        public float getBrightnessWearBedtimeModeCap() {
            return mDisplayDeviceConfig.getBrightnessCapForWearBedtimeMode();
        }
    }
}
Loading