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

Commit 28836af1 authored by petsjonkin's avatar petsjonkin
Browse files

Extracting LightSensorController from ABC

No functional changes

Bug: b/322445088
Test: atest DisplayServiceTests

Change-Id: I6720977d81a816dd3ce982791e9d8fba08dd2685
parent 3825ffc7
Loading
Loading
Loading
Loading
+49 −642

File changed.

Preview size limit exceeded, changes collapsed.

+35 −142
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@ import com.android.server.display.brightness.BrightnessEvent;
import com.android.server.display.brightness.BrightnessReason;
import com.android.server.display.brightness.BrightnessUtils;
import com.android.server.display.brightness.DisplayBrightnessController;
import com.android.server.display.brightness.LightSensorController;
import com.android.server.display.brightness.clamper.BrightnessClamperController;
import com.android.server.display.brightness.strategy.AutomaticBrightnessStrategy;
import com.android.server.display.color.ColorDisplayService.ColorDisplayServiceInternal;
@@ -1048,102 +1049,13 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        }

        if (defaultModeBrightnessMapper != null) {
            // Ambient Lux - Active Mode Brightness Thresholds
            float[] ambientBrighteningThresholds =
                    mDisplayDeviceConfig.getAmbientBrighteningPercentages();
            float[] ambientDarkeningThresholds =
                    mDisplayDeviceConfig.getAmbientDarkeningPercentages();
            float[] ambientBrighteningLevels =
                    mDisplayDeviceConfig.getAmbientBrighteningLevels();
            float[] ambientDarkeningLevels =
                    mDisplayDeviceConfig.getAmbientDarkeningLevels();
            float ambientDarkeningMinThreshold =
                    mDisplayDeviceConfig.getAmbientLuxDarkeningMinThreshold();
            float ambientBrighteningMinThreshold =
                    mDisplayDeviceConfig.getAmbientLuxBrighteningMinThreshold();
            HysteresisLevels ambientBrightnessThresholds = mInjector.getHysteresisLevels(
                    ambientBrighteningThresholds, ambientDarkeningThresholds,
                    ambientBrighteningLevels, ambientDarkeningLevels, ambientDarkeningMinThreshold,
                    ambientBrighteningMinThreshold);

            // Display - Active Mode Brightness Thresholds
            float[] screenBrighteningThresholds =
                    mDisplayDeviceConfig.getScreenBrighteningPercentages();
            float[] screenDarkeningThresholds =
                    mDisplayDeviceConfig.getScreenDarkeningPercentages();
            float[] screenBrighteningLevels =
                    mDisplayDeviceConfig.getScreenBrighteningLevels();
            float[] screenDarkeningLevels =
                    mDisplayDeviceConfig.getScreenDarkeningLevels();
            float screenDarkeningMinThreshold =
                    mDisplayDeviceConfig.getScreenDarkeningMinThreshold();
            float screenBrighteningMinThreshold =
                    mDisplayDeviceConfig.getScreenBrighteningMinThreshold();
            HysteresisLevels screenBrightnessThresholds = mInjector.getHysteresisLevels(
                    screenBrighteningThresholds, screenDarkeningThresholds,
                    screenBrighteningLevels, screenDarkeningLevels, screenDarkeningMinThreshold,
                    screenBrighteningMinThreshold, true);

            // Ambient Lux - Idle Screen Brightness Thresholds
            float ambientDarkeningMinThresholdIdle =
                    mDisplayDeviceConfig.getAmbientLuxDarkeningMinThresholdIdle();
            float ambientBrighteningMinThresholdIdle =
                    mDisplayDeviceConfig.getAmbientLuxBrighteningMinThresholdIdle();
            float[] ambientBrighteningThresholdsIdle =
                    mDisplayDeviceConfig.getAmbientBrighteningPercentagesIdle();
            float[] ambientDarkeningThresholdsIdle =
                    mDisplayDeviceConfig.getAmbientDarkeningPercentagesIdle();
            float[] ambientBrighteningLevelsIdle =
                    mDisplayDeviceConfig.getAmbientBrighteningLevelsIdle();
            float[] ambientDarkeningLevelsIdle =
                    mDisplayDeviceConfig.getAmbientDarkeningLevelsIdle();
            HysteresisLevels ambientBrightnessThresholdsIdle = mInjector.getHysteresisLevels(
                    ambientBrighteningThresholdsIdle, ambientDarkeningThresholdsIdle,
                    ambientBrighteningLevelsIdle, ambientDarkeningLevelsIdle,
                    ambientDarkeningMinThresholdIdle, ambientBrighteningMinThresholdIdle);
            HysteresisLevels screenBrightnessThresholds =
                    mInjector.getBrightnessThresholdsHysteresisLevels(mDisplayDeviceConfig);

            // Display - Idle Screen Brightness Thresholds
            float screenDarkeningMinThresholdIdle =
                    mDisplayDeviceConfig.getScreenDarkeningMinThresholdIdle();
            float screenBrighteningMinThresholdIdle =
                    mDisplayDeviceConfig.getScreenBrighteningMinThresholdIdle();
            float[] screenBrighteningThresholdsIdle =
                    mDisplayDeviceConfig.getScreenBrighteningPercentagesIdle();
            float[] screenDarkeningThresholdsIdle =
                    mDisplayDeviceConfig.getScreenDarkeningPercentagesIdle();
            float[] screenBrighteningLevelsIdle =
                    mDisplayDeviceConfig.getScreenBrighteningLevelsIdle();
            float[] screenDarkeningLevelsIdle =
                    mDisplayDeviceConfig.getScreenDarkeningLevelsIdle();
            HysteresisLevels screenBrightnessThresholdsIdle = mInjector.getHysteresisLevels(
                    screenBrighteningThresholdsIdle, screenDarkeningThresholdsIdle,
                    screenBrighteningLevelsIdle, screenDarkeningLevelsIdle,
                    screenDarkeningMinThresholdIdle, screenBrighteningMinThresholdIdle);

            long brighteningLightDebounce = mDisplayDeviceConfig
                    .getAutoBrightnessBrighteningLightDebounce();
            long darkeningLightDebounce = mDisplayDeviceConfig
                    .getAutoBrightnessDarkeningLightDebounce();
            long brighteningLightDebounceIdle = mDisplayDeviceConfig
                    .getAutoBrightnessBrighteningLightDebounceIdle();
            long darkeningLightDebounceIdle = mDisplayDeviceConfig
                    .getAutoBrightnessDarkeningLightDebounceIdle();
            boolean autoBrightnessResetAmbientLuxAfterWarmUp = context.getResources().getBoolean(
                    R.bool.config_autoBrightnessResetAmbientLuxAfterWarmUp);

            int lightSensorWarmUpTimeConfig = context.getResources().getInteger(
                    R.integer.config_lightSensorWarmupTime);
            int lightSensorRate = context.getResources().getInteger(
                    R.integer.config_autoBrightnessLightSensorRate);
            int initialLightSensorRate = context.getResources().getInteger(
                    R.integer.config_autoBrightnessInitialLightSensorRate);
            if (initialLightSensorRate == -1) {
                initialLightSensorRate = lightSensorRate;
            } else if (initialLightSensorRate > lightSensorRate) {
                Slog.w(mTag, "Expected config_autoBrightnessInitialLightSensorRate ("
                        + initialLightSensorRate + ") to be less than or equal to "
                        + "config_autoBrightnessLightSensorRate (" + lightSensorRate + ").");
            }
            HysteresisLevels screenBrightnessThresholdsIdle =
                    mInjector.getBrightnessThresholdsIdleHysteresisLevels(mDisplayDeviceConfig);

            loadAmbientLightSensor();
            // BrightnessTracker should only use one light sensor, we want to use the light sensor
@@ -1155,17 +1067,15 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
            if (mAutomaticBrightnessController != null) {
                mAutomaticBrightnessController.stop();
            }

            LightSensorController.LightSensorControllerConfig config =
                    mInjector.getLightSensorControllerConfig(context, mDisplayDeviceConfig);
            mAutomaticBrightnessController = mInjector.getAutomaticBrightnessController(
                    this, handler.getLooper(), mSensorManager, mLightSensor,
                    brightnessMappers, lightSensorWarmUpTimeConfig, PowerManager.BRIGHTNESS_MIN,
                    PowerManager.BRIGHTNESS_MAX, mDozeScaleFactor, lightSensorRate,
                    initialLightSensorRate, brighteningLightDebounce, darkeningLightDebounce,
                    brighteningLightDebounceIdle, darkeningLightDebounceIdle,
                    autoBrightnessResetAmbientLuxAfterWarmUp, ambientBrightnessThresholds,
                    screenBrightnessThresholds, ambientBrightnessThresholdsIdle,
                    screenBrightnessThresholdsIdle, mContext, mBrightnessRangeController,
                    mBrightnessThrottler, mDisplayDeviceConfig.getAmbientHorizonShort(),
                    mDisplayDeviceConfig.getAmbientHorizonLong(), userLux, userNits,
                    this, handler.getLooper(), mSensorManager, brightnessMappers,
                    PowerManager.BRIGHTNESS_MIN, PowerManager.BRIGHTNESS_MAX, mDozeScaleFactor,
                    screenBrightnessThresholds, screenBrightnessThresholdsIdle,
                    mContext, mBrightnessRangeController,
                    mBrightnessThrottler, userLux, userNits, mDisplayId, config,
                    mBrightnessClamperController);
            mDisplayBrightnessController.setAutomaticBrightnessController(
                    mAutomaticBrightnessController);
@@ -3165,32 +3075,34 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call

        AutomaticBrightnessController getAutomaticBrightnessController(
                AutomaticBrightnessController.Callbacks callbacks, Looper looper,
                SensorManager sensorManager, Sensor lightSensor,
                SensorManager sensorManager,
                SparseArray<BrightnessMappingStrategy> brightnessMappingStrategyMap,
                int lightSensorWarmUpTime, float brightnessMin, float brightnessMax,
                float dozeScaleFactor, int lightSensorRate, int initialLightSensorRate,
                long brighteningLightDebounceConfig, long darkeningLightDebounceConfig,
                long brighteningLightDebounceConfigIdle, long darkeningLightDebounceConfigIdle,
                boolean resetAmbientLuxAfterWarmUpConfig,
                HysteresisLevels ambientBrightnessThresholds,
                float brightnessMin, float brightnessMax, float dozeScaleFactor,
                HysteresisLevels screenBrightnessThresholds,
                HysteresisLevels ambientBrightnessThresholdsIdle,
                HysteresisLevels screenBrightnessThresholdsIdle, Context context,
                BrightnessRangeController brightnessModeController,
                BrightnessThrottler brightnessThrottler, int ambientLightHorizonShort,
                int ambientLightHorizonLong, float userLux, float userNits,
                BrightnessThrottler brightnessThrottler, float userLux, float userNits,
                int displayId, LightSensorController.LightSensorControllerConfig config,
                BrightnessClamperController brightnessClamperController) {
            return new AutomaticBrightnessController(callbacks, looper, sensorManager,
                    brightnessMappingStrategyMap, brightnessMin, brightnessMax, dozeScaleFactor,
                    screenBrightnessThresholds, screenBrightnessThresholdsIdle, context,
                    brightnessModeController, brightnessThrottler, userLux, userNits, displayId,
                    config, brightnessClamperController);
        }

        LightSensorController.LightSensorControllerConfig getLightSensorControllerConfig(
                Context context, DisplayDeviceConfig displayDeviceConfig) {
            return LightSensorController.LightSensorControllerConfig.create(
                    context.getResources(), displayDeviceConfig);
        }

            return new AutomaticBrightnessController(callbacks, looper, sensorManager, lightSensor,
                    brightnessMappingStrategyMap, lightSensorWarmUpTime, brightnessMin,
                    brightnessMax, dozeScaleFactor, lightSensorRate, initialLightSensorRate,
                    brighteningLightDebounceConfig, darkeningLightDebounceConfig,
                    brighteningLightDebounceConfigIdle, darkeningLightDebounceConfigIdle,
                    resetAmbientLuxAfterWarmUpConfig, ambientBrightnessThresholds,
                    screenBrightnessThresholds, ambientBrightnessThresholdsIdle,
                    screenBrightnessThresholdsIdle, context, brightnessModeController,
                    brightnessThrottler, ambientLightHorizonShort, ambientLightHorizonLong, userLux,
                    userNits, brightnessClamperController);
        HysteresisLevels getBrightnessThresholdsIdleHysteresisLevels(DisplayDeviceConfig ddc) {
            return HysteresisLevels.getBrightnessThresholdsIdle(ddc);
        }

        HysteresisLevels getBrightnessThresholdsHysteresisLevels(DisplayDeviceConfig ddc) {
            return HysteresisLevels.getBrightnessThresholds(ddc);
        }

        BrightnessMappingStrategy getDefaultModeBrightnessMapper(Context context,
@@ -3200,25 +3112,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                    AUTO_BRIGHTNESS_MODE_DEFAULT, displayWhiteBalanceController);
        }

        HysteresisLevels getHysteresisLevels(float[] brighteningThresholdsPercentages,
                float[] darkeningThresholdsPercentages, float[] brighteningThresholdLevels,
                float[] darkeningThresholdLevels, float minDarkeningThreshold,
                float minBrighteningThreshold) {
            return new HysteresisLevels(brighteningThresholdsPercentages,
                    darkeningThresholdsPercentages, brighteningThresholdLevels,
                    darkeningThresholdLevels, minDarkeningThreshold, minBrighteningThreshold);
        }

        HysteresisLevels getHysteresisLevels(float[] brighteningThresholdsPercentages,
                float[] darkeningThresholdsPercentages, float[] brighteningThresholdLevels,
                float[] darkeningThresholdLevels, float minDarkeningThreshold,
                float minBrighteningThreshold, boolean potentialOldBrightnessRange) {
            return new HysteresisLevels(brighteningThresholdsPercentages,
                    darkeningThresholdsPercentages, brighteningThresholdLevels,
                    darkeningThresholdLevels, minDarkeningThreshold, minBrighteningThreshold,
                    potentialOldBrightnessRange);
        }

        ScreenOffBrightnessSensorController getScreenOffBrightnessSensorController(
                SensorManager sensorManager,
                Sensor lightSensor,
+48 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.server.display;

import android.util.Slog;

import com.android.internal.annotations.VisibleForTesting;
import com.android.server.display.utils.DebugUtils;

import java.io.PrintWriter;
@@ -52,7 +53,8 @@ public class HysteresisLevels {
     * @param potentialOldBrightnessRange whether or not the values used could be from the old
     *                                    screen brightness range ie, between 1-255.
    */
    HysteresisLevels(float[] brighteningThresholdsPercentages,
    @VisibleForTesting
    public HysteresisLevels(float[] brighteningThresholdsPercentages,
            float[] darkeningThresholdsPercentages,
            float[] brighteningThresholdLevels, float[] darkeningThresholdLevels,
            float minDarkeningThreshold, float minBrighteningThreshold,
@@ -138,7 +140,10 @@ public class HysteresisLevels {
        return levelArray;
    }

    void dump(PrintWriter pw) {
    /**
     * Print the object's debug information into the given stream.
     */
    public void dump(PrintWriter pw) {
        pw.println("HysteresisLevels");
        pw.println("  mBrighteningThresholdLevels=" + Arrays.toString(mBrighteningThresholdLevels));
        pw.println("  mBrighteningThresholdsPercentages="
@@ -149,4 +154,45 @@ public class HysteresisLevels {
                + Arrays.toString(mDarkeningThresholdsPercentages));
        pw.println("  mMinDarkening=" + mMinDarkening);
    }


    /**
     * Creates hysteresis levels for Active Ambient Lux
     */
    public static HysteresisLevels getAmbientBrightnessThresholds(DisplayDeviceConfig ddc) {
        return new HysteresisLevels(ddc.getAmbientBrighteningPercentages(),
                ddc.getAmbientDarkeningPercentages(), ddc.getAmbientBrighteningLevels(),
                ddc.getAmbientDarkeningLevels(), ddc.getAmbientLuxDarkeningMinThreshold(),
                ddc.getAmbientLuxBrighteningMinThreshold());
    }

    /**
     * Creates hysteresis levels for Active Screen Brightness
     */
    public static HysteresisLevels getBrightnessThresholds(DisplayDeviceConfig ddc) {
        return new HysteresisLevels(ddc.getScreenBrighteningPercentages(),
                ddc.getScreenDarkeningPercentages(), ddc.getScreenBrighteningLevels(),
                ddc.getScreenDarkeningLevels(), ddc.getScreenDarkeningMinThreshold(),
                ddc.getScreenBrighteningMinThreshold(), true);
    }

    /**
     * Creates hysteresis levels for Idle Ambient Lux
     */
    public static HysteresisLevels getAmbientBrightnessThresholdsIdle(DisplayDeviceConfig ddc) {
        return new HysteresisLevels(ddc.getAmbientBrighteningPercentagesIdle(),
                ddc.getAmbientDarkeningPercentagesIdle(), ddc.getAmbientBrighteningLevelsIdle(),
                ddc.getAmbientDarkeningLevelsIdle(), ddc.getAmbientLuxDarkeningMinThresholdIdle(),
                ddc.getAmbientLuxBrighteningMinThresholdIdle());
    }

    /**
     * Creates hysteresis levels for Idle Screen Brightness
     */
    public static HysteresisLevels getBrightnessThresholdsIdle(DisplayDeviceConfig ddc) {
        return new HysteresisLevels(ddc.getScreenBrighteningPercentagesIdle(),
                ddc.getScreenDarkeningPercentagesIdle(), ddc.getScreenBrighteningLevelsIdle(),
                ddc.getScreenDarkeningLevelsIdle(), ddc.getScreenDarkeningMinThresholdIdle(),
                ddc.getScreenBrighteningMinThresholdIdle());
    }
}
+868 −0

File added.

Preview size limit exceeded, changes collapsed.

+118 −540

File changed.

Preview size limit exceeded, changes collapsed.

Loading