am 093e9890: am 34afdf02: Merge "Automatic brightness using ALS while dozing." into lmp-mr1-dev

* commit '093e98908743eb37104a280541a060dcd46351d0':
  Automatic brightness using ALS while dozing.
This commit is contained in:
Filip Gruszczynski
2014-11-05 18:55:34 +00:00
committed by Android Git Automerger
4 changed files with 55 additions and 15 deletions

View File

@@ -801,6 +801,13 @@
that can be set by the user. --> that can be set by the user. -->
<integer name="config_screenBrightnessDoze">1</integer> <integer name="config_screenBrightnessDoze">1</integer>
<!-- Allow automatic adjusting of the screen brightness while dozing in low power state. -->
<bool name="config_allowAutoBrightnessWhileDozing">false</bool>
<!-- If we allow automatic adjustment of screen brightness while dozing, how many times we want
to reduce it to preserve the battery. Value of 100% means no scaling. -->
<fraction name="config_screenAutoBrightnessDozeScaleFactor">100%</fraction>
<!-- Screen brightness used to dim the screen when the user activity <!-- Screen brightness used to dim the screen when the user activity
timeout expires. May be less than the minimum allowed brightness setting timeout expires. May be less than the minimum allowed brightness setting
that can be set by the user. --> that can be set by the user. -->

View File

@@ -1574,6 +1574,7 @@
<java-symbol type="bool" name="config_enableNetworkLocationOverlay" /> <java-symbol type="bool" name="config_enableNetworkLocationOverlay" />
<java-symbol type="bool" name="config_sf_limitedAlpha" /> <java-symbol type="bool" name="config_sf_limitedAlpha" />
<java-symbol type="bool" name="config_unplugTurnsOnScreen" /> <java-symbol type="bool" name="config_unplugTurnsOnScreen" />
<java-symbol type="bool" name="config_allowAutoBrightnessWhileDozing" />
<java-symbol type="bool" name="config_allowTheaterModeWakeFromUnplug" /> <java-symbol type="bool" name="config_allowTheaterModeWakeFromUnplug" />
<java-symbol type="bool" name="config_allowTheaterModeWakeFromGesture" /> <java-symbol type="bool" name="config_allowTheaterModeWakeFromGesture" />
<java-symbol type="bool" name="config_allowTheaterModeWakeFromCameraLens" /> <java-symbol type="bool" name="config_allowTheaterModeWakeFromCameraLens" />
@@ -1615,6 +1616,7 @@
<java-symbol type="id" name="replace_app_icon" /> <java-symbol type="id" name="replace_app_icon" />
<java-symbol type="id" name="replace_message" /> <java-symbol type="id" name="replace_message" />
<java-symbol type="fraction" name="config_dimBehindFadeDuration" /> <java-symbol type="fraction" name="config_dimBehindFadeDuration" />
<java-symbol type="fraction" name="config_screenAutoBrightnessDozeScaleFactor" />
<java-symbol type="integer" name="config_carDockKeepsScreenOn" /> <java-symbol type="integer" name="config_carDockKeepsScreenOn" />
<java-symbol type="integer" name="config_criticalBatteryWarningLevel" /> <java-symbol type="integer" name="config_criticalBatteryWarningLevel" />
<java-symbol type="integer" name="config_datause_notification_type" /> <java-symbol type="integer" name="config_datause_notification_type" />

View File

@@ -21,7 +21,6 @@ import com.android.server.twilight.TwilightListener;
import com.android.server.twilight.TwilightManager; import com.android.server.twilight.TwilightManager;
import com.android.server.twilight.TwilightState; import com.android.server.twilight.TwilightState;
import android.content.res.Resources;
import android.hardware.Sensor; import android.hardware.Sensor;
import android.hardware.SensorEvent; import android.hardware.SensorEvent;
import android.hardware.SensorEventListener; import android.hardware.SensorEventListener;
@@ -120,6 +119,7 @@ class AutomaticBrightnessController {
// The minimum and maximum screen brightnesses. // The minimum and maximum screen brightnesses.
private final int mScreenBrightnessRangeMinimum; private final int mScreenBrightnessRangeMinimum;
private final int mScreenBrightnessRangeMaximum; private final int mScreenBrightnessRangeMaximum;
private final float mDozeScaleFactor;
// Amount of time to delay auto-brightness after screen on while waiting for // Amount of time to delay auto-brightness after screen on while waiting for
// the light sensor to warm-up in milliseconds. // the light sensor to warm-up in milliseconds.
@@ -171,9 +171,12 @@ class AutomaticBrightnessController {
// The last screen auto-brightness gamma. (For printing in dump() only.) // The last screen auto-brightness gamma. (For printing in dump() only.)
private float mLastScreenAutoBrightnessGamma = 1.0f; private float mLastScreenAutoBrightnessGamma = 1.0f;
// Are we going to adjust brightness while dozing.
private boolean mDozing;
public AutomaticBrightnessController(Callbacks callbacks, Looper looper, public AutomaticBrightnessController(Callbacks callbacks, Looper looper,
SensorManager sensorManager, Spline autoBrightnessSpline, SensorManager sensorManager, Spline autoBrightnessSpline, int lightSensorWarmUpTime,
int lightSensorWarmUpTime, int brightnessMin, int brightnessMax) { int brightnessMin, int brightnessMax, float dozeScaleFactor) {
mCallbacks = callbacks; mCallbacks = callbacks;
mTwilight = LocalServices.getService(TwilightManager.class); mTwilight = LocalServices.getService(TwilightManager.class);
mSensorManager = sensorManager; mSensorManager = sensorManager;
@@ -181,6 +184,7 @@ class AutomaticBrightnessController {
mScreenBrightnessRangeMinimum = brightnessMin; mScreenBrightnessRangeMinimum = brightnessMin;
mScreenBrightnessRangeMaximum = brightnessMax; mScreenBrightnessRangeMaximum = brightnessMax;
mLightSensorWarmUpTimeConfig = lightSensorWarmUpTime; mLightSensorWarmUpTimeConfig = lightSensorWarmUpTime;
mDozeScaleFactor = dozeScaleFactor;
mHandler = new AutomaticBrightnessHandler(looper); mHandler = new AutomaticBrightnessHandler(looper);
mAmbientLightRingBuffer = new AmbientLightRingBuffer(); mAmbientLightRingBuffer = new AmbientLightRingBuffer();
@@ -195,11 +199,20 @@ class AutomaticBrightnessController {
} }
public int getAutomaticScreenBrightness() { public int getAutomaticScreenBrightness() {
if (mDozing) {
return (int) (mScreenAutoBrightness * mDozeScaleFactor);
}
return mScreenAutoBrightness; return mScreenAutoBrightness;
} }
public void configure(boolean enable, float adjustment) { public void configure(boolean enable, float adjustment, boolean dozing) {
boolean changed = setLightSensorEnabled(enable); // While dozing, the application processor may be suspended which will prevent us from
// receiving new information from the light sensor. On some devices, we may be able to
// switch to a wake-up light sensor instead but for now we will simply disable the sensor
// and hold onto the last computed screen auto brightness. We save the dozing flag for
// debugging purposes.
mDozing = dozing;
boolean changed = setLightSensorEnabled(enable && !dozing);
changed |= setScreenAutoBrightnessAdjustment(adjustment); changed |= setScreenAutoBrightnessAdjustment(adjustment);
if (changed) { if (changed) {
updateAutoBrightness(false /*sendUpdate*/); updateAutoBrightness(false /*sendUpdate*/);
@@ -230,6 +243,7 @@ class AutomaticBrightnessController {
pw.println(" mScreenAutoBrightness=" + mScreenAutoBrightness); pw.println(" mScreenAutoBrightness=" + mScreenAutoBrightness);
pw.println(" mScreenAutoBrightnessAdjustment=" + mScreenAutoBrightnessAdjustment); pw.println(" mScreenAutoBrightnessAdjustment=" + mScreenAutoBrightnessAdjustment);
pw.println(" mLastScreenAutoBrightnessGamma=" + mLastScreenAutoBrightnessGamma); pw.println(" mLastScreenAutoBrightnessGamma=" + mLastScreenAutoBrightnessGamma);
pw.println(" mDozing=" + mDozing);
} }
private boolean setLightSensorEnabled(boolean enable) { private boolean setLightSensorEnabled(boolean enable) {

View File

@@ -155,6 +155,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
// True if auto-brightness should be used. // True if auto-brightness should be used.
private boolean mUseSoftwareAutoBrightnessConfig; private boolean mUseSoftwareAutoBrightnessConfig;
// True if should use light sensor to automatically determine doze screen brightness.
private final boolean mAllowAutoBrightnessWhileDozingConfig;
// True if we should fade the screen while turning it off, false if we should play // True if we should fade the screen while turning it off, false if we should play
// a stylish color fade animation instead. // a stylish color fade animation instead.
private boolean mColorFadeFadesConfig; private boolean mColorFadeFadesConfig;
@@ -295,6 +298,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
mUseSoftwareAutoBrightnessConfig = resources.getBoolean( mUseSoftwareAutoBrightnessConfig = resources.getBoolean(
com.android.internal.R.bool.config_automatic_brightness_available); com.android.internal.R.bool.config_automatic_brightness_available);
mAllowAutoBrightnessWhileDozingConfig = resources.getBoolean(
com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing);
if (mUseSoftwareAutoBrightnessConfig) { if (mUseSoftwareAutoBrightnessConfig) {
int[] lux = resources.getIntArray( int[] lux = resources.getIntArray(
com.android.internal.R.array.config_autoBrightnessLevels); com.android.internal.R.array.config_autoBrightnessLevels);
@@ -302,6 +309,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
com.android.internal.R.array.config_autoBrightnessLcdBacklightValues); com.android.internal.R.array.config_autoBrightnessLcdBacklightValues);
int lightSensorWarmUpTimeConfig = resources.getInteger( int lightSensorWarmUpTimeConfig = resources.getInteger(
com.android.internal.R.integer.config_lightSensorWarmupTime); com.android.internal.R.integer.config_lightSensorWarmupTime);
final float dozeScaleFactor = resources.getFraction(
com.android.internal.R.fraction.config_screenAutoBrightnessDozeScaleFactor,
1, 1);
Spline screenAutoBrightnessSpline = createAutoBrightnessSpline(lux, screenBrightness); Spline screenAutoBrightnessSpline = createAutoBrightnessSpline(lux, screenBrightness);
if (screenAutoBrightnessSpline == null) { if (screenAutoBrightnessSpline == null) {
@@ -326,7 +336,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
mAutomaticBrightnessController = new AutomaticBrightnessController(this, mAutomaticBrightnessController = new AutomaticBrightnessController(this,
handler.getLooper(), sensorManager, screenAutoBrightnessSpline, handler.getLooper(), sensorManager, screenAutoBrightnessSpline,
lightSensorWarmUpTimeConfig, screenBrightnessRangeMinimum, lightSensorWarmUpTimeConfig, screenBrightnessRangeMinimum,
mScreenBrightnessRangeMaximum); mScreenBrightnessRangeMaximum, dozeScaleFactor);
} }
} }
@@ -523,7 +533,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
} else { } else {
state = Display.STATE_DOZE; state = Display.STATE_DOZE;
} }
brightness = mPowerRequest.dozeScreenBrightness; if (!mAllowAutoBrightnessWhileDozingConfig) {
brightness = mPowerRequest.dozeScreenBrightness;
}
break; break;
case DisplayPowerRequest.POLICY_DIM: case DisplayPowerRequest.POLICY_DIM:
case DisplayPowerRequest.POLICY_BRIGHT: case DisplayPowerRequest.POLICY_BRIGHT:
@@ -577,19 +589,16 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
brightness = PowerManager.BRIGHTNESS_ON; brightness = PowerManager.BRIGHTNESS_ON;
} }
// Use default brightness when dozing unless overridden.
if (brightness < 0 && (state == Display.STATE_DOZE
|| state == Display.STATE_DOZE_SUSPEND)) {
brightness = mScreenBrightnessDozeConfig;
}
// Configure auto-brightness. // Configure auto-brightness.
boolean autoBrightnessEnabled = false; boolean autoBrightnessEnabled = false;
if (mAutomaticBrightnessController != null) { if (mAutomaticBrightnessController != null) {
final boolean autoBrightnessEnabledInDoze = mAllowAutoBrightnessWhileDozingConfig
&& (state == Display.STATE_DOZE || state == Display.STATE_DOZE_SUSPEND);
autoBrightnessEnabled = mPowerRequest.useAutoBrightness autoBrightnessEnabled = mPowerRequest.useAutoBrightness
&& state == Display.STATE_ON && brightness < 0; && (state == Display.STATE_ON || autoBrightnessEnabledInDoze)
&& brightness < 0;
mAutomaticBrightnessController.configure(autoBrightnessEnabled, mAutomaticBrightnessController.configure(autoBrightnessEnabled,
mPowerRequest.screenAutoBrightnessAdjustment); mPowerRequest.screenAutoBrightnessAdjustment, state != Display.STATE_ON);
} }
// Apply auto-brightness. // Apply auto-brightness.
@@ -612,6 +621,12 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
mAppliedAutoBrightness = false; mAppliedAutoBrightness = false;
} }
// Use default brightness when dozing unless overridden.
if (brightness < 0 && (state == Display.STATE_DOZE
|| state == Display.STATE_DOZE_SUSPEND)) {
brightness = mScreenBrightnessDozeConfig;
}
// Apply manual brightness. // Apply manual brightness.
// Use the current brightness setting from the request, which is expected // Use the current brightness setting from the request, which is expected
// provide a nominal default value for the case where auto-brightness // provide a nominal default value for the case where auto-brightness
@@ -1024,6 +1039,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
pw.println(" mScreenBrightnessRangeMinimum=" + mScreenBrightnessRangeMinimum); pw.println(" mScreenBrightnessRangeMinimum=" + mScreenBrightnessRangeMinimum);
pw.println(" mScreenBrightnessRangeMaximum=" + mScreenBrightnessRangeMaximum); pw.println(" mScreenBrightnessRangeMaximum=" + mScreenBrightnessRangeMaximum);
pw.println(" mUseSoftwareAutoBrightnessConfig=" + mUseSoftwareAutoBrightnessConfig); pw.println(" mUseSoftwareAutoBrightnessConfig=" + mUseSoftwareAutoBrightnessConfig);
pw.println(" mAllowAutoBrightnessWhileDozingConfig=" +
mAllowAutoBrightnessWhileDozingConfig);
pw.println(" mColorFadeFadesConfig=" + mColorFadeFadesConfig); pw.println(" mColorFadeFadesConfig=" + mColorFadeFadesConfig);
mHandler.runWithScissors(new Runnable() { mHandler.runWithScissors(new Runnable() {