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

Commit a46ed6db authored by Fiona Campbell's avatar Fiona Campbell Committed by Automerger Merge Worker
Browse files

Merge "Allow proximity sensor to be specified per display" into sc-dev am: fa506656

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14234426

Change-Id: Ia25f159576b9301ae9b840d6eb56302abaa17a64
parents 8280cd99 fa506656
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -79,6 +79,9 @@ public class DisplayDeviceConfig {
    // The details of the ambient light sensor associated with this display.
    private final SensorIdentifier mAmbientLightSensor = new SensorIdentifier();

    // The details of the proximity sensor associated with this display.
    private final SensorIdentifier mProximitySensor = new SensorIdentifier();

    // Nits and backlight values that are loaded from either the display device config file, or
    // config.xml. These are the raw values and just used for the dumpsys
    private float[] mRawNits;
@@ -272,6 +275,10 @@ public class DisplayDeviceConfig {
        return mAmbientLightSensor;
    }

    SensorIdentifier getProximitySensor() {
        return mProximitySensor;
    }

    /**
     * @return true if a nits to backlight mapping is defined in this config, false otherwise.
     */
@@ -322,6 +329,7 @@ public class DisplayDeviceConfig {
                + ", mBrightnessRampSlowDecrease=" + mBrightnessRampSlowDecrease
                + ", mBrightnessRampSlowIncrease=" + mBrightnessRampSlowIncrease
                + ", mAmbientLightSensor=" + mAmbientLightSensor
                + ", mProximitySensor=" + mProximitySensor
                + "}";
        return str;
    }
@@ -374,6 +382,7 @@ public class DisplayDeviceConfig {
                loadQuirks(config);
                loadBrightnessRamps(config);
                loadAmbientLightSensorFromDdc(config);
                loadProxSensorFromDdc(config);
            } else {
                Slog.w(TAG, "DisplayDeviceConfig file is null");
            }
@@ -390,6 +399,7 @@ public class DisplayDeviceConfig {
        loadBrightnessMapFromConfigXml();
        loadBrightnessRampsFromConfigXml();
        loadAmbientLightSensorFromConfigXml();
        setProxSensorUnspecified();
    }

    private void initFromDefaultValues() {
@@ -403,6 +413,7 @@ public class DisplayDeviceConfig {
        mBrightnessRampSlowIncrease = PowerManager.BRIGHTNESS_MAX;
        setSimpleMappingStrategyValues();
        loadAmbientLightSensorFromConfigXml();
        setProxSensorUnspecified();
    }

    private void loadBrightnessDefaultFromDdcXml(DisplayConfiguration config) {
@@ -686,6 +697,21 @@ public class DisplayDeviceConfig {
        }
    }

    private void setProxSensorUnspecified() {
        mProximitySensor.name = "";
        mProximitySensor.type = "";
    }

    private void loadProxSensorFromDdc(DisplayConfiguration config) {
        SensorDetails sensorDetails = config.getProxSensor();
        if (sensorDetails != null) {
            mProximitySensor.name = sensorDetails.getName();
            mProximitySensor.type = sensorDetails.getType();
        } else {
            setProxSensorUnspecified();
        }
    }

    static class SensorIdentifier {
        public String type;
        public String name;
+28 −12
Original line number Diff line number Diff line
@@ -584,15 +584,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        mBrightnessBucketsInDozeConfig = resources.getBoolean(
                com.android.internal.R.bool.config_displayBrightnessBucketsInDoze);

        if (mDisplayId == Display.DEFAULT_DISPLAY && !DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT) {
            // TODO: b/178385123 Once there are sensor associations, we can enable proximity for
            // non-default displays.
            mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
            if (mProximitySensor != null) {
                mProximityThreshold = Math.min(mProximitySensor.getMaximumRange(),
                        TYPICAL_PROXIMITY_THRESHOLD);
            }
        }
        loadProximitySensor();

        mCurrentScreenBrightnessSetting = getScreenBrightnessSetting();
        mScreenBrightnessForVr = getScreenBrightnessForVrSetting();
        mAutoBrightnessAdjustment = getAutoBrightnessAdjustmentSetting();
@@ -658,7 +651,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        mBrightnessMapper.recalculateSplines(mCdsi.isReduceBrightColorsActivated(), adjustedNits);
    }

    private Sensor findSensor(String sensorType, String sensorName, int fallbackType) {
    private Sensor findSensor(String sensorType, String sensorName, int fallbackType,
            boolean useFallback) {
        final boolean isNameSpecified = !TextUtils.isEmpty(sensorName);
        final boolean isTypeSpecified = !TextUtils.isEmpty(sensorType);
        List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
@@ -670,7 +664,11 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                }
            }
        }
        if (useFallback) {
            return mSensorManager.getDefaultSensor(fallbackType);
        } else {
            return null;
        }
    }

    /**
@@ -806,6 +804,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
            mDisplayDeviceConfig = config;

            loadAmbientLightSensor();
            loadProximitySensor();
            mHbmController.resetHbmData(token, config.getHighBrightnessModeData());
        });
    }
@@ -1614,7 +1613,24 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                mDisplayDeviceConfig.getAmbientLightSensor();
        String lightSensorName = lightSensor.name;
        String lightSensorType = lightSensor.type;
        mLightSensor = findSensor(lightSensorType, lightSensorName, Sensor.TYPE_LIGHT);
        mLightSensor = findSensor(lightSensorType, lightSensorName, Sensor.TYPE_LIGHT,
                mDisplayId == Display.DEFAULT_DISPLAY);
    }

    private void loadProximitySensor() {
        if (DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT) {
            return;
        }
        final DisplayDeviceConfig.SensorIdentifier proxSensor =
                mDisplayDeviceConfig.getProximitySensor();
        final String proxSensorName = proxSensor.name;
        final String proxSensorType = proxSensor.type;
        mProximitySensor = findSensor(proxSensorType, proxSensorName, Sensor.TYPE_PROXIMITY,
                mDisplayId == Display.DEFAULT_DISPLAY);
        if (mProximitySensor != null) {
            mProximityThreshold = Math.min(mProximitySensor.getMaximumRange(),
                    TYPICAL_PROXIMITY_THRESHOLD);
        }
    }

    private float clampScreenBrightnessForVr(float value) {
+3 −0
Original line number Diff line number Diff line
@@ -51,6 +51,9 @@
                <xs:element type="sensorDetails" name="lightSensor">
                    <xs:annotation name="final"/>
                </xs:element>
                <xs:element type="sensorDetails" name="proxSensor">
                    <xs:annotation name="final"/>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
+2 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ package com.android.server.display.config {
    ctor public DisplayConfiguration();
    method public com.android.server.display.config.HighBrightnessMode getHighBrightnessMode();
    method public final com.android.server.display.config.SensorDetails getLightSensor();
    method public final com.android.server.display.config.SensorDetails getProxSensor();
    method public com.android.server.display.config.DisplayQuirks getQuirks();
    method @NonNull public final java.math.BigDecimal getScreenBrightnessDefault();
    method @NonNull public final com.android.server.display.config.NitsMap getScreenBrightnessMap();
@@ -14,6 +15,7 @@ package com.android.server.display.config {
    method public final java.math.BigDecimal getScreenBrightnessRampSlowIncrease();
    method public void setHighBrightnessMode(com.android.server.display.config.HighBrightnessMode);
    method public final void setLightSensor(com.android.server.display.config.SensorDetails);
    method public final void setProxSensor(com.android.server.display.config.SensorDetails);
    method public void setQuirks(com.android.server.display.config.DisplayQuirks);
    method public final void setScreenBrightnessDefault(@NonNull java.math.BigDecimal);
    method public final void setScreenBrightnessMap(@NonNull com.android.server.display.config.NitsMap);