diff options
| author | 2023-05-13 09:28:40 +0000 | |
|---|---|---|
| committer | 2023-05-13 09:28:40 +0000 | |
| commit | d02f519e8e59214d1094be459a9c1f54ec2d7989 (patch) | |
| tree | d35ba956ef1bf8b991e8d0a8bb8a0fb81b378945 | |
| parent | 5c04a55e5973a825b79e0a7fcc6064ae6cdf9cd2 (diff) | |
| parent | 872dd81bdee8fef0e33dd0dc041447c214795437 (diff) | |
Merge "Only send brightnessChangeEvent if display is on" into udc-dev
4 files changed, 106 insertions, 62 deletions
diff --git a/core/java/android/hardware/display/BrightnessChangeEvent.java b/core/java/android/hardware/display/BrightnessChangeEvent.java index 6b7d8c3dde49..7ae88b80d02a 100644 --- a/core/java/android/hardware/display/BrightnessChangeEvent.java +++ b/core/java/android/hardware/display/BrightnessChangeEvent.java @@ -22,6 +22,7 @@ import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; +import java.util.Arrays; import java.util.Objects; /** @@ -233,6 +234,31 @@ public final class BrightnessChangeEvent implements Parcelable { dest.writeLong(colorSampleDuration); } + @Override + public String toString() { + return "BrightnessChangeEvent{" + + "brightness: " + brightness + + ", timeStamp: " + timeStamp + + ", packageName: " + packageName + + ", userId: " + userId + + ", uniqueDisplayId: " + uniqueDisplayId + + ", luxValues: " + Arrays.toString(luxValues) + + ", luxTimestamps: " + Arrays.toString(luxTimestamps) + + ", batteryLevel: " + batteryLevel + + ", powerBrightnessFactor: " + powerBrightnessFactor + + ", nightMode: " + nightMode + + ", colorTemperature: " + colorTemperature + + ", reduceBrightColors: " + reduceBrightColors + + ", reduceBrightColorsStrength: " + reduceBrightColorsStrength + + ", reduceBrightColorsOffset: " + reduceBrightColorsOffset + + ", lastBrightness: " + lastBrightness + + ", isDefaultBrightnessConfig: " + isDefaultBrightnessConfig + + ", isUserSetBrightness: " + isUserSetBrightness + + ", colorValueBuckets: " + Arrays.toString(colorValueBuckets) + + ", colorSampleDuration: " + colorSampleDuration + + "}"; + } + /** @hide */ public static class Builder { private float mBrightness; diff --git a/services/core/java/com/android/server/display/BrightnessTracker.java b/services/core/java/com/android/server/display/BrightnessTracker.java index 22b6a53ab907..e8c65efeb5cd 100644 --- a/services/core/java/com/android/server/display/BrightnessTracker.java +++ b/services/core/java/com/android/server/display/BrightnessTracker.java @@ -316,7 +316,9 @@ public class BrightnessTracker { } /** - * Notify the BrightnessTracker that the user has changed the brightness of the display. + * Notify the BrightnessTracker that the brightness of the display has changed. + * We pass both the user change and system changes, so that we know the starting point + * of the next user interaction. Only user interactions are then sent as BrightnessChangeEvents. */ public void notifyBrightnessChanged(float brightness, boolean userInitiated, float powerBrightnessFactor, boolean wasShortTermModelActive, @@ -352,10 +354,8 @@ public class BrightnessTracker { // Not currently gathering brightness change information return; } - float previousBrightness = mLastBrightness; mLastBrightness = brightness; - if (!userInitiated) { // We want to record what current brightness is so that we know what the user // changed it from, but if it wasn't user initiated then we don't want to record it @@ -429,7 +429,7 @@ public class BrightnessTracker { BrightnessChangeEvent event = builder.build(); if (DEBUG) { - Slog.d(TAG, "Event " + event.brightness + " " + event.packageName); + Slog.d(TAG, "Event: " + event.toString()); } synchronized (mEventsLock) { mEventsDirty = true; diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java index 0861cb59a944..9d31572c7d76 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController.java +++ b/services/core/java/com/android/server/display/DisplayPowerController.java @@ -1908,21 +1908,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call } } - // Report brightness to brightnesstracker: - // If brightness is not temporary (ie the slider has been released) - // AND if we are not in idle screen brightness mode. - if (!brightnessIsTemporary - && (mAutomaticBrightnessController != null - && !mAutomaticBrightnessController.isInIdleMode())) { - if (userInitiatedChange && (mAutomaticBrightnessController == null - || !mAutomaticBrightnessController.hasValidAmbientLux())) { - // If we don't have a valid lux reading we can't report a valid - // slider event so notify as if the system changed the brightness. - userInitiatedChange = false; - } - notifyBrightnessTrackerChanged(brightnessState, userInitiatedChange, - wasShortTermModelActive); - } + notifyBrightnessTrackerChanged(brightnessState, userInitiatedChange, + wasShortTermModelActive, autoBrightnessEnabled, brightnessIsTemporary); // We save the brightness info *after* the brightness setting has been changed and // adjustments made so that the brightness info reflects the latest value. @@ -2758,22 +2745,43 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call } private void notifyBrightnessTrackerChanged(float brightness, boolean userInitiated, - boolean wasShortTermModelActive) { + boolean wasShortTermModelActive, boolean autobrightnessEnabled, + boolean brightnessIsTemporary) { final float brightnessInNits = convertToAdjustedNits(brightness); - if (mUseAutoBrightness && brightnessInNits >= 0.0f - && mAutomaticBrightnessController != null && mBrightnessTracker != null) { - // We only want to track changes on devices that can actually map the display backlight - // values into a physical brightness unit since the value provided by the API is in - // nits and not using the arbitrary backlight units. - final float powerFactor = mPowerRequest.lowPowerMode - ? mPowerRequest.screenLowPowerBrightnessFactor - : 1.0f; - mBrightnessTracker.notifyBrightnessChanged(brightnessInNits, userInitiated, - powerFactor, wasShortTermModelActive, - mAutomaticBrightnessController.isDefaultConfig(), mUniqueDisplayId, - mAutomaticBrightnessController.getLastSensorValues(), - mAutomaticBrightnessController.getLastSensorTimestamps()); + + // Don't report brightness to brightnessTracker: + // If brightness is temporary (ie the slider has not been released) + // or if we are in idle screen brightness mode. + // or display is not on + // or we shouldn't be using autobrightness + // or the nits is invalid. + if (brightnessIsTemporary + || mAutomaticBrightnessController == null + || mAutomaticBrightnessController.isInIdleMode() + || !autobrightnessEnabled + || mBrightnessTracker == null + || !mUseAutoBrightness + || brightnessInNits < 0.0f) { + return; } + + if (userInitiated && !mAutomaticBrightnessController.hasValidAmbientLux()) { + // If we don't have a valid lux reading we can't report a valid + // slider event so notify as if the system changed the brightness. + userInitiated = false; + } + + // We only want to track changes on devices that can actually map the display backlight + // values into a physical brightness unit since the value provided by the API is in + // nits and not using the arbitrary backlight units. + final float powerFactor = mPowerRequest.lowPowerMode + ? mPowerRequest.screenLowPowerBrightnessFactor + : 1.0f; + mBrightnessTracker.notifyBrightnessChanged(brightnessInNits, userInitiated, + powerFactor, wasShortTermModelActive, + mAutomaticBrightnessController.isDefaultConfig(), mUniqueDisplayId, + mAutomaticBrightnessController.getLastSensorValues(), + mAutomaticBrightnessController.getLastSensorTimestamps()); } private float convertToNits(float brightness) { diff --git a/services/core/java/com/android/server/display/DisplayPowerController2.java b/services/core/java/com/android/server/display/DisplayPowerController2.java index 3b3d5da8396c..d95601fcacf2 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController2.java +++ b/services/core/java/com/android/server/display/DisplayPowerController2.java @@ -1539,21 +1539,9 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal } } - // Report brightness to brightnesstracker: - // If brightness is not temporary (ie the slider has been released) - // AND if we are not in idle screen brightness mode. - if (!brightnessIsTemporary - && (mAutomaticBrightnessController != null - && !mAutomaticBrightnessController.isInIdleMode())) { - if (userInitiatedChange && (mAutomaticBrightnessController == null - || !mAutomaticBrightnessController.hasValidAmbientLux())) { - // If we don't have a valid lux reading we can't report a valid - // slider event so notify as if the system changed the brightness. - userInitiatedChange = false; - } - notifyBrightnessTrackerChanged(brightnessState, userInitiatedChange, - wasShortTermModelActive); - } + notifyBrightnessTrackerChanged(brightnessState, userInitiatedChange, + wasShortTermModelActive, mAutomaticBrightnessStrategy.isAutoBrightnessEnabled(), + brightnessIsTemporary); // We save the brightness info *after* the brightness setting has been changed and // adjustments made so that the brightness info reflects the latest value. @@ -2215,23 +2203,45 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal } private void notifyBrightnessTrackerChanged(float brightness, boolean userInitiated, - boolean wasShortTermModelActive) { + boolean wasShortTermModelActive, boolean autobrightnessEnabled, + boolean brightnessIsTemporary) { + final float brightnessInNits = mDisplayBrightnessController.convertToAdjustedNits(brightness); - if (mAutomaticBrightnessStrategy.shouldUseAutoBrightness() && brightnessInNits >= 0.0f - && mAutomaticBrightnessController != null && mBrightnessTracker != null) { - // We only want to track changes on devices that can actually map the display backlight - // values into a physical brightness unit since the value provided by the API is in - // nits and not using the arbitrary backlight units. - final float powerFactor = mPowerRequest.lowPowerMode - ? mPowerRequest.screenLowPowerBrightnessFactor - : 1.0f; - mBrightnessTracker.notifyBrightnessChanged(brightnessInNits, userInitiated, - powerFactor, wasShortTermModelActive, - mAutomaticBrightnessController.isDefaultConfig(), mUniqueDisplayId, - mAutomaticBrightnessController.getLastSensorValues(), - mAutomaticBrightnessController.getLastSensorTimestamps()); + // Don't report brightness to brightnessTracker: + // If brightness is temporary (ie the slider has not been released) + // or if we are in idle screen brightness mode. + // or display is not on + // or we shouldn't be using autobrightness + // or the nits is invalid. + if (brightnessIsTemporary + || mAutomaticBrightnessController == null + || mAutomaticBrightnessController.isInIdleMode() + || !autobrightnessEnabled + || mBrightnessTracker == null + || !mAutomaticBrightnessStrategy.shouldUseAutoBrightness() + || brightnessInNits < 0.0f) { + return; } + + if (userInitiated && (mAutomaticBrightnessController == null + || !mAutomaticBrightnessController.hasValidAmbientLux())) { + // If we don't have a valid lux reading we can't report a valid + // slider event so notify as if the system changed the brightness. + userInitiated = false; + } + + // We only want to track changes on devices that can actually map the display backlight + // values into a physical brightness unit since the value provided by the API is in + // nits and not using the arbitrary backlight units. + final float powerFactor = mPowerRequest.lowPowerMode + ? mPowerRequest.screenLowPowerBrightnessFactor + : 1.0f; + mBrightnessTracker.notifyBrightnessChanged(brightnessInNits, userInitiated, + powerFactor, wasShortTermModelActive, + mAutomaticBrightnessController.isDefaultConfig(), mUniqueDisplayId, + mAutomaticBrightnessController.getLastSensorValues(), + mAutomaticBrightnessController.getLastSensorTimestamps()); } @Override |