summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/hardware/display/BrightnessChangeEvent.java26
-rw-r--r--services/core/java/com/android/server/display/BrightnessTracker.java8
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController.java66
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController2.java68
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