am ae25108a: Merge "Add support for auto-brightness adjust, but leave it disabled." into jb-mr1-dev
* commit 'ae25108a7b7181bedac11d6b31ff0a64ece729aa': Add support for auto-brightness adjust, but leave it disabled.
This commit is contained in:
@@ -32,7 +32,10 @@ import android.os.AsyncTask;
|
|||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
|
import android.os.PowerManager;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
|
import android.text.format.DateUtils;
|
||||||
|
import android.util.FloatMath;
|
||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
import android.util.Spline;
|
import android.util.Spline;
|
||||||
import android.util.TimeUtils;
|
import android.util.TimeUtils;
|
||||||
@@ -78,6 +81,13 @@ final class DisplayPowerController {
|
|||||||
// screen state returns. Playing the animation can also be somewhat slow.
|
// screen state returns. Playing the animation can also be somewhat slow.
|
||||||
private static final boolean USE_ELECTRON_BEAM_ON_ANIMATION = false;
|
private static final boolean USE_ELECTRON_BEAM_ON_ANIMATION = false;
|
||||||
|
|
||||||
|
// If true, enables the use of the screen auto-brightness adjustment setting.
|
||||||
|
private static final boolean USE_SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT = false;
|
||||||
|
|
||||||
|
// The maximum range of gamma adjustment possible using the screen
|
||||||
|
// auto-brightness adjustment setting.
|
||||||
|
private static final float SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT_MAX_GAMMA = 3.0f;
|
||||||
|
|
||||||
private static final int ELECTRON_BEAM_ON_ANIMATION_DURATION_MILLIS = 300;
|
private static final int ELECTRON_BEAM_ON_ANIMATION_DURATION_MILLIS = 300;
|
||||||
private static final int ELECTRON_BEAM_OFF_ANIMATION_DURATION_MILLIS = 600;
|
private static final int ELECTRON_BEAM_OFF_ANIMATION_DURATION_MILLIS = 600;
|
||||||
|
|
||||||
@@ -150,8 +160,11 @@ final class DisplayPowerController {
|
|||||||
// The dim screen brightness.
|
// The dim screen brightness.
|
||||||
private final int mScreenBrightnessDimConfig;
|
private final int mScreenBrightnessDimConfig;
|
||||||
|
|
||||||
// Auto-brightness.
|
// True if auto-brightness should be used.
|
||||||
private boolean mUseSoftwareAutoBrightnessConfig;
|
private boolean mUseSoftwareAutoBrightnessConfig;
|
||||||
|
|
||||||
|
// The auto-brightness spline adjustment.
|
||||||
|
// The brightness values have been scaled to a range of 0..1.
|
||||||
private Spline mScreenAutoBrightnessSpline;
|
private Spline mScreenAutoBrightnessSpline;
|
||||||
|
|
||||||
// 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
|
||||||
@@ -266,6 +279,9 @@ final class DisplayPowerController {
|
|||||||
// Use -1 if there is no current auto-brightness value available.
|
// Use -1 if there is no current auto-brightness value available.
|
||||||
private int mScreenAutoBrightness = -1;
|
private int mScreenAutoBrightness = -1;
|
||||||
|
|
||||||
|
// The last screen auto-brightness gamma. (For printing in dump() only.)
|
||||||
|
private float mLastScreenAutoBrightnessGamma = 1.0f;
|
||||||
|
|
||||||
// True if the screen auto-brightness value is actually being used to
|
// True if the screen auto-brightness value is actually being used to
|
||||||
// set the display brightness.
|
// set the display brightness.
|
||||||
private boolean mUsingScreenAutoBrightness;
|
private boolean mUsingScreenAutoBrightness;
|
||||||
@@ -335,10 +351,10 @@ final class DisplayPowerController {
|
|||||||
final int n = brightness.length;
|
final int n = brightness.length;
|
||||||
float[] x = new float[n];
|
float[] x = new float[n];
|
||||||
float[] y = new float[n];
|
float[] y = new float[n];
|
||||||
y[0] = brightness[0];
|
y[0] = (float)brightness[0] / PowerManager.BRIGHTNESS_ON;
|
||||||
for (int i = 1; i < n; i++) {
|
for (int i = 1; i < n; i++) {
|
||||||
x[i] = lux[i - 1];
|
x[i] = lux[i - 1];
|
||||||
y[i] = brightness[i];
|
y[i] = (float)brightness[i] / PowerManager.BRIGHTNESS_ON;
|
||||||
}
|
}
|
||||||
|
|
||||||
Spline spline = Spline.createMonotoneCubicSpline(x, y);
|
Spline spline = Spline.createMonotoneCubicSpline(x, y);
|
||||||
@@ -470,6 +486,8 @@ final class DisplayPowerController {
|
|||||||
// Update the power state request.
|
// Update the power state request.
|
||||||
final boolean mustNotify;
|
final boolean mustNotify;
|
||||||
boolean mustInitialize = false;
|
boolean mustInitialize = false;
|
||||||
|
boolean updateAutoBrightness = false;
|
||||||
|
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
mPendingUpdatePowerStateLocked = false;
|
mPendingUpdatePowerStateLocked = false;
|
||||||
if (mPendingRequestLocked == null) {
|
if (mPendingRequestLocked == null) {
|
||||||
@@ -483,6 +501,10 @@ final class DisplayPowerController {
|
|||||||
mPendingRequestChangedLocked = false;
|
mPendingRequestChangedLocked = false;
|
||||||
mustInitialize = true;
|
mustInitialize = true;
|
||||||
} else if (mPendingRequestChangedLocked) {
|
} else if (mPendingRequestChangedLocked) {
|
||||||
|
if (mPowerRequest.screenAutoBrightnessAdjustment
|
||||||
|
!= mPendingRequestLocked.screenAutoBrightnessAdjustment) {
|
||||||
|
updateAutoBrightness = true;
|
||||||
|
}
|
||||||
mPowerRequest.copyFrom(mPendingRequestLocked);
|
mPowerRequest.copyFrom(mPendingRequestLocked);
|
||||||
mWaitingForNegativeProximity |= mPendingWaitForNegativeProximityLocked;
|
mWaitingForNegativeProximity |= mPendingWaitForNegativeProximityLocked;
|
||||||
mPendingWaitForNegativeProximityLocked = false;
|
mPendingWaitForNegativeProximityLocked = false;
|
||||||
@@ -530,19 +552,21 @@ final class DisplayPowerController {
|
|||||||
// Turn on the light sensor if needed.
|
// Turn on the light sensor if needed.
|
||||||
if (mLightSensor != null) {
|
if (mLightSensor != null) {
|
||||||
setLightSensorEnabled(mPowerRequest.useAutoBrightness
|
setLightSensorEnabled(mPowerRequest.useAutoBrightness
|
||||||
&& wantScreenOn(mPowerRequest.screenState));
|
&& wantScreenOn(mPowerRequest.screenState), updateAutoBrightness);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the screen brightness.
|
// Set the screen brightness.
|
||||||
if (mPowerRequest.screenState == DisplayPowerRequest.SCREEN_STATE_DIM) {
|
if (mPowerRequest.screenState == DisplayPowerRequest.SCREEN_STATE_DIM) {
|
||||||
// Screen is dimmed. Overrides everything else.
|
// Screen is dimmed. Overrides everything else.
|
||||||
animateScreenBrightness(mScreenBrightnessDimConfig, BRIGHTNESS_RAMP_RATE_FAST);
|
animateScreenBrightness(
|
||||||
|
clampScreenBrightness(mScreenBrightnessDimConfig),
|
||||||
|
BRIGHTNESS_RAMP_RATE_FAST);
|
||||||
mUsingScreenAutoBrightness = false;
|
mUsingScreenAutoBrightness = false;
|
||||||
} else if (mPowerRequest.screenState == DisplayPowerRequest.SCREEN_STATE_BRIGHT) {
|
} else if (mPowerRequest.screenState == DisplayPowerRequest.SCREEN_STATE_BRIGHT) {
|
||||||
if (mScreenAutoBrightness >= 0 && mLightSensorEnabled) {
|
if (mScreenAutoBrightness >= 0 && mLightSensorEnabled) {
|
||||||
// Use current auto-brightness value.
|
// Use current auto-brightness value.
|
||||||
animateScreenBrightness(
|
animateScreenBrightness(
|
||||||
Math.max(mScreenAutoBrightness, mScreenBrightnessDimConfig),
|
clampScreenBrightness(mScreenAutoBrightness),
|
||||||
mUsingScreenAutoBrightness ? BRIGHTNESS_RAMP_RATE_SLOW :
|
mUsingScreenAutoBrightness ? BRIGHTNESS_RAMP_RATE_SLOW :
|
||||||
BRIGHTNESS_RAMP_RATE_FAST);
|
BRIGHTNESS_RAMP_RATE_FAST);
|
||||||
mUsingScreenAutoBrightness = true;
|
mUsingScreenAutoBrightness = true;
|
||||||
@@ -552,7 +576,7 @@ final class DisplayPowerController {
|
|||||||
// provide a nominal default value for the case where auto-brightness
|
// provide a nominal default value for the case where auto-brightness
|
||||||
// is not ready yet.
|
// is not ready yet.
|
||||||
animateScreenBrightness(
|
animateScreenBrightness(
|
||||||
Math.max(mPowerRequest.screenBrightness, mScreenBrightnessDimConfig),
|
clampScreenBrightness(mPowerRequest.screenBrightness),
|
||||||
BRIGHTNESS_RAMP_RATE_FAST);
|
BRIGHTNESS_RAMP_RATE_FAST);
|
||||||
mUsingScreenAutoBrightness = false;
|
mUsingScreenAutoBrightness = false;
|
||||||
}
|
}
|
||||||
@@ -630,6 +654,10 @@ final class DisplayPowerController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int clampScreenBrightness(int value) {
|
||||||
|
return Math.min(Math.max(Math.max(value, mScreenBrightnessDimConfig), 0), 255);
|
||||||
|
}
|
||||||
|
|
||||||
private void animateScreenBrightness(int target, int rate) {
|
private void animateScreenBrightness(int target, int rate) {
|
||||||
if (mScreenBrightnessRampAnimator.animateTo(target, rate)) {
|
if (mScreenBrightnessRampAnimator.animateTo(target, rate)) {
|
||||||
mNotifier.onScreenBrightness(target);
|
mNotifier.onScreenBrightness(target);
|
||||||
@@ -691,9 +719,10 @@ final class DisplayPowerController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setLightSensorEnabled(boolean enable) {
|
private void setLightSensorEnabled(boolean enable, boolean updateAutoBrightness) {
|
||||||
if (enable) {
|
if (enable) {
|
||||||
if (!mLightSensorEnabled) {
|
if (!mLightSensorEnabled) {
|
||||||
|
updateAutoBrightness = true;
|
||||||
mLightSensorEnabled = true;
|
mLightSensorEnabled = true;
|
||||||
mLightSensorEnableTime = SystemClock.uptimeMillis();
|
mLightSensorEnableTime = SystemClock.uptimeMillis();
|
||||||
mSensorManager.registerListener(mLightSensorListener, mLightSensor,
|
mSensorManager.registerListener(mLightSensorListener, mLightSensor,
|
||||||
@@ -703,11 +732,13 @@ final class DisplayPowerController {
|
|||||||
if (mLightSensorEnabled) {
|
if (mLightSensorEnabled) {
|
||||||
mLightSensorEnabled = false;
|
mLightSensorEnabled = false;
|
||||||
mLightMeasurementValid = false;
|
mLightMeasurementValid = false;
|
||||||
updateAutoBrightness(false);
|
|
||||||
mHandler.removeMessages(MSG_LIGHT_SENSOR_DEBOUNCED);
|
mHandler.removeMessages(MSG_LIGHT_SENSOR_DEBOUNCED);
|
||||||
mSensorManager.unregisterListener(mLightSensorListener);
|
mSensorManager.unregisterListener(mLightSensorListener);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (updateAutoBrightness) {
|
||||||
|
updateAutoBrightness(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleLightSensorEvent(long time, float lux) {
|
private void handleLightSensorEvent(long time, float lux) {
|
||||||
@@ -818,26 +849,46 @@ final class DisplayPowerController {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final int newScreenAutoBrightness = interpolateBrightness(
|
float value = mScreenAutoBrightnessSpline.interpolate(mLightMeasurement);
|
||||||
mScreenAutoBrightnessSpline, mLightMeasurement);
|
float gamma = 1.0f;
|
||||||
|
|
||||||
|
if (USE_SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT
|
||||||
|
&& mPowerRequest.screenAutoBrightnessAdjustment != 0.0f) {
|
||||||
|
final float adjGamma = FloatMath.pow(SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT_MAX_GAMMA,
|
||||||
|
Math.min(1.0f, Math.max(-1.0f,
|
||||||
|
-mPowerRequest.screenAutoBrightnessAdjustment)));
|
||||||
|
gamma *= adjGamma;
|
||||||
|
if (DEBUG) {
|
||||||
|
Slog.d(TAG, "updateAutoBrightness: adjGamma=" + adjGamma);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gamma != 1.0f) {
|
||||||
|
final float in = value;
|
||||||
|
value = FloatMath.pow(value, gamma);
|
||||||
|
if (DEBUG) {
|
||||||
|
Slog.d(TAG, "updateAutoBrightness: gamma=" + gamma
|
||||||
|
+ ", in=" + in + ", out=" + value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int newScreenAutoBrightness = clampScreenBrightness(
|
||||||
|
(int)Math.round(value * PowerManager.BRIGHTNESS_ON));
|
||||||
if (mScreenAutoBrightness != newScreenAutoBrightness) {
|
if (mScreenAutoBrightness != newScreenAutoBrightness) {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Slog.d(TAG, "updateAutoBrightness: mScreenAutoBrightness="
|
Slog.d(TAG, "updateAutoBrightness: mScreenAutoBrightness="
|
||||||
+ mScreenAutoBrightness + "newScreenAutoBrightness="
|
+ mScreenAutoBrightness + ", newScreenAutoBrightness="
|
||||||
+ newScreenAutoBrightness);
|
+ newScreenAutoBrightness);
|
||||||
}
|
}
|
||||||
|
|
||||||
mScreenAutoBrightness = newScreenAutoBrightness;
|
mScreenAutoBrightness = newScreenAutoBrightness;
|
||||||
|
mLastScreenAutoBrightnessGamma = gamma;
|
||||||
if (sendUpdate) {
|
if (sendUpdate) {
|
||||||
sendUpdatePowerState();
|
sendUpdatePowerState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int interpolateBrightness(Spline spline, float lux) {
|
|
||||||
return Math.min(255, Math.max(0, (int)Math.round(spline.interpolate(lux))));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void sendOnStateChanged() {
|
private void sendOnStateChanged() {
|
||||||
mCallbackHandler.post(mOnStateChangedRunnable);
|
mCallbackHandler.post(mOnStateChangedRunnable);
|
||||||
}
|
}
|
||||||
@@ -943,6 +994,7 @@ final class DisplayPowerController {
|
|||||||
+ TimeUtils.formatUptime(mPendingLightSensorDebounceTime));
|
+ TimeUtils.formatUptime(mPendingLightSensorDebounceTime));
|
||||||
pw.println(" mScreenAutoBrightness=" + mScreenAutoBrightness);
|
pw.println(" mScreenAutoBrightness=" + mScreenAutoBrightness);
|
||||||
pw.println(" mUsingScreenAutoBrightness=" + mUsingScreenAutoBrightness);
|
pw.println(" mUsingScreenAutoBrightness=" + mUsingScreenAutoBrightness);
|
||||||
|
pw.println(" mLastScreenAutoBrightnessGamma=" + mLastScreenAutoBrightnessGamma);
|
||||||
|
|
||||||
if (mElectronBeamOnAnimator != null) {
|
if (mElectronBeamOnAnimator != null) {
|
||||||
pw.println(" mElectronBeamOnAnimator.isStarted()=" +
|
pw.println(" mElectronBeamOnAnimator.isStarted()=" +
|
||||||
|
|||||||
@@ -46,6 +46,9 @@ final class DisplayPowerRequest {
|
|||||||
// value to use while waiting for the light sensor to report enough data.
|
// value to use while waiting for the light sensor to report enough data.
|
||||||
public int screenBrightness;
|
public int screenBrightness;
|
||||||
|
|
||||||
|
// The screen auto-brightness adjustment factor in the range -1 (dimmer) to 1 (brighter).
|
||||||
|
public float screenAutoBrightnessAdjustment;
|
||||||
|
|
||||||
// If true, enables automatic brightness control.
|
// If true, enables automatic brightness control.
|
||||||
public boolean useAutoBrightness;
|
public boolean useAutoBrightness;
|
||||||
|
|
||||||
@@ -53,6 +56,7 @@ final class DisplayPowerRequest {
|
|||||||
screenState = SCREEN_STATE_BRIGHT;
|
screenState = SCREEN_STATE_BRIGHT;
|
||||||
useProximitySensor = false;
|
useProximitySensor = false;
|
||||||
screenBrightness = PowerManager.BRIGHTNESS_ON;
|
screenBrightness = PowerManager.BRIGHTNESS_ON;
|
||||||
|
screenAutoBrightnessAdjustment = 0.0f;
|
||||||
useAutoBrightness = false;
|
useAutoBrightness = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,6 +68,7 @@ final class DisplayPowerRequest {
|
|||||||
screenState = other.screenState;
|
screenState = other.screenState;
|
||||||
useProximitySensor = other.useProximitySensor;
|
useProximitySensor = other.useProximitySensor;
|
||||||
screenBrightness = other.screenBrightness;
|
screenBrightness = other.screenBrightness;
|
||||||
|
screenAutoBrightnessAdjustment = other.screenAutoBrightnessAdjustment;
|
||||||
useAutoBrightness = other.useAutoBrightness;
|
useAutoBrightness = other.useAutoBrightness;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,6 +83,7 @@ final class DisplayPowerRequest {
|
|||||||
&& screenState == other.screenState
|
&& screenState == other.screenState
|
||||||
&& useProximitySensor == other.useProximitySensor
|
&& useProximitySensor == other.useProximitySensor
|
||||||
&& screenBrightness == other.screenBrightness
|
&& screenBrightness == other.screenBrightness
|
||||||
|
&& screenAutoBrightnessAdjustment == other.screenAutoBrightnessAdjustment
|
||||||
&& useAutoBrightness == other.useAutoBrightness;
|
&& useAutoBrightness == other.useAutoBrightness;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,6 +97,7 @@ final class DisplayPowerRequest {
|
|||||||
return "screenState=" + screenState
|
return "screenState=" + screenState
|
||||||
+ ", useProximitySensor=" + useProximitySensor
|
+ ", useProximitySensor=" + useProximitySensor
|
||||||
+ ", screenBrightness=" + screenBrightness
|
+ ", screenBrightness=" + screenBrightness
|
||||||
|
+ ", screenAutoBrightnessAdjustment=" + screenAutoBrightnessAdjustment
|
||||||
+ ", useAutoBrightness=" + useAutoBrightness;
|
+ ", useAutoBrightness=" + useAutoBrightness;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -249,6 +249,10 @@ public final class PowerManagerService extends IPowerManager.Stub
|
|||||||
// Use -1 if no value has been set.
|
// Use -1 if no value has been set.
|
||||||
private int mScreenBrightnessSetting;
|
private int mScreenBrightnessSetting;
|
||||||
|
|
||||||
|
// The screen auto-brightness adjustment setting, from -1 to 1.
|
||||||
|
// Use 0 if there is no adjustment.
|
||||||
|
private float mScreenAutoBrightnessAdjustmentSetting;
|
||||||
|
|
||||||
// The screen brightness mode.
|
// The screen brightness mode.
|
||||||
// One of the Settings.System.SCREEN_BRIGHTNESS_MODE_* constants.
|
// One of the Settings.System.SCREEN_BRIGHTNESS_MODE_* constants.
|
||||||
private int mScreenBrightnessModeSetting;
|
private int mScreenBrightnessModeSetting;
|
||||||
@@ -263,6 +267,12 @@ public final class PowerManagerService extends IPowerManager.Stub
|
|||||||
// Use -1 to disable.
|
// Use -1 to disable.
|
||||||
private int mTemporaryScreenBrightnessSettingOverride = -1;
|
private int mTemporaryScreenBrightnessSettingOverride = -1;
|
||||||
|
|
||||||
|
// The screen brightness adjustment setting override from the settings
|
||||||
|
// application to temporarily adjust the auto-brightness adjustment factor
|
||||||
|
// until next updated, in the range -1..1.
|
||||||
|
// Use NaN to disable.
|
||||||
|
private float mTemporaryScreenAutoBrightnessAdjustmentSettingOverride = Float.NaN;
|
||||||
|
|
||||||
private native void nativeInit();
|
private native void nativeInit();
|
||||||
private static native void nativeShutdown();
|
private static native void nativeShutdown();
|
||||||
private static native void nativeReboot(String reason) throws IOException;
|
private static native void nativeReboot(String reason) throws IOException;
|
||||||
@@ -389,6 +399,14 @@ public final class PowerManagerService extends IPowerManager.Stub
|
|||||||
mTemporaryScreenBrightnessSettingOverride = -1;
|
mTemporaryScreenBrightnessSettingOverride = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final float oldScreenAutoBrightnessAdjustmentSetting =
|
||||||
|
mScreenAutoBrightnessAdjustmentSetting;
|
||||||
|
mScreenAutoBrightnessAdjustmentSetting = Settings.System.getFloat(resolver,
|
||||||
|
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, 0.0f);
|
||||||
|
if (oldScreenAutoBrightnessAdjustmentSetting != mScreenAutoBrightnessAdjustmentSetting) {
|
||||||
|
mTemporaryScreenAutoBrightnessAdjustmentSettingOverride = -1;
|
||||||
|
}
|
||||||
|
|
||||||
mScreenBrightnessModeSetting = Settings.System.getInt(resolver,
|
mScreenBrightnessModeSetting = Settings.System.getInt(resolver,
|
||||||
Settings.System.SCREEN_BRIGHTNESS_MODE,
|
Settings.System.SCREEN_BRIGHTNESS_MODE,
|
||||||
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
|
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
|
||||||
@@ -1275,6 +1293,7 @@ public final class PowerManagerService extends IPowerManager.Stub
|
|||||||
}
|
}
|
||||||
|
|
||||||
int screenBrightness = mScreenBrightnessSettingDefault;
|
int screenBrightness = mScreenBrightnessSettingDefault;
|
||||||
|
float screenAutoBrightnessAdjustment = 0.0f;
|
||||||
boolean autoBrightness = (mScreenBrightnessModeSetting ==
|
boolean autoBrightness = (mScreenBrightnessModeSetting ==
|
||||||
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
|
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
|
||||||
if (isValidBrightness(mScreenBrightnessOverrideFromWindowManager)) {
|
if (isValidBrightness(mScreenBrightnessOverrideFromWindowManager)) {
|
||||||
@@ -1283,14 +1302,26 @@ public final class PowerManagerService extends IPowerManager.Stub
|
|||||||
} else if (isValidBrightness(mTemporaryScreenBrightnessSettingOverride)) {
|
} else if (isValidBrightness(mTemporaryScreenBrightnessSettingOverride)) {
|
||||||
screenBrightness = mTemporaryScreenBrightnessSettingOverride;
|
screenBrightness = mTemporaryScreenBrightnessSettingOverride;
|
||||||
} else if (isValidBrightness(mScreenBrightnessSetting)) {
|
} else if (isValidBrightness(mScreenBrightnessSetting)) {
|
||||||
screenBrightness = mScreenBrightnessSetting;
|
screenBrightness = mScreenBrightnessSetting;
|
||||||
}
|
}
|
||||||
if (autoBrightness) {
|
if (autoBrightness) {
|
||||||
screenBrightness = mScreenBrightnessSettingDefault;
|
screenBrightness = mScreenBrightnessSettingDefault;
|
||||||
|
if (isValidAutoBrightnessAdjustment(
|
||||||
|
mTemporaryScreenAutoBrightnessAdjustmentSettingOverride)) {
|
||||||
|
screenAutoBrightnessAdjustment =
|
||||||
|
mTemporaryScreenAutoBrightnessAdjustmentSettingOverride;
|
||||||
|
} else if (isValidAutoBrightnessAdjustment(
|
||||||
|
mScreenAutoBrightnessAdjustmentSetting)) {
|
||||||
|
screenAutoBrightnessAdjustment = mScreenAutoBrightnessAdjustmentSetting;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
screenBrightness = Math.max(Math.min(screenBrightness,
|
screenBrightness = Math.max(Math.min(screenBrightness,
|
||||||
mScreenBrightnessSettingMaximum), mScreenBrightnessSettingMinimum);
|
mScreenBrightnessSettingMaximum), mScreenBrightnessSettingMinimum);
|
||||||
|
screenAutoBrightnessAdjustment = Math.max(Math.min(
|
||||||
|
screenAutoBrightnessAdjustment, 1.0f), -1.0f);
|
||||||
mDisplayPowerRequest.screenBrightness = screenBrightness;
|
mDisplayPowerRequest.screenBrightness = screenBrightness;
|
||||||
|
mDisplayPowerRequest.screenAutoBrightnessAdjustment =
|
||||||
|
screenAutoBrightnessAdjustment;
|
||||||
mDisplayPowerRequest.useAutoBrightness = autoBrightness;
|
mDisplayPowerRequest.useAutoBrightness = autoBrightness;
|
||||||
|
|
||||||
mDisplayPowerRequest.useProximitySensor = shouldUseProximitySensorLocked();
|
mDisplayPowerRequest.useProximitySensor = shouldUseProximitySensorLocked();
|
||||||
@@ -1314,6 +1345,10 @@ public final class PowerManagerService extends IPowerManager.Stub
|
|||||||
return value >= 0 && value <= 255;
|
return value >= 0 && value <= 255;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean isValidAutoBrightnessAdjustment(float value) {
|
||||||
|
return !Float.isNaN(value);
|
||||||
|
}
|
||||||
|
|
||||||
private int getDesiredScreenPowerState() {
|
private int getDesiredScreenPowerState() {
|
||||||
if (mWakefulness == WAKEFULNESS_ASLEEP) {
|
if (mWakefulness == WAKEFULNESS_ASLEEP) {
|
||||||
return DisplayPowerRequest.SCREEN_STATE_OFF;
|
return DisplayPowerRequest.SCREEN_STATE_OFF;
|
||||||
@@ -1690,15 +1725,32 @@ public final class PowerManagerService extends IPowerManager.Stub
|
|||||||
*
|
*
|
||||||
* The override will be canceled when the setting value is next updated.
|
* The override will be canceled when the setting value is next updated.
|
||||||
*
|
*
|
||||||
* @param adj The overridden brightness, or -1 to disable the override.
|
* @param adj The overridden brightness, or Float.NaN to disable the override.
|
||||||
*
|
*
|
||||||
* @see Settings.System#SCREEN_AUTO_BRIGHTNESS_ADJ
|
* @see Settings.System#SCREEN_AUTO_BRIGHTNESS_ADJ
|
||||||
*/
|
*/
|
||||||
@Override // Binder call
|
@Override // Binder call
|
||||||
public void setTemporaryScreenAutoBrightnessAdjustmentSettingOverride(float adj) {
|
public void setTemporaryScreenAutoBrightnessAdjustmentSettingOverride(float adj) {
|
||||||
// Not implemented.
|
|
||||||
// The SCREEN_AUTO_BRIGHTNESS_ADJ setting is not currently supported.
|
|
||||||
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null);
|
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null);
|
||||||
|
|
||||||
|
final long ident = Binder.clearCallingIdentity();
|
||||||
|
try {
|
||||||
|
setTemporaryScreenAutoBrightnessAdjustmentSettingOverrideInternal(adj);
|
||||||
|
} finally {
|
||||||
|
Binder.restoreCallingIdentity(ident);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setTemporaryScreenAutoBrightnessAdjustmentSettingOverrideInternal(float adj) {
|
||||||
|
synchronized (mLock) {
|
||||||
|
// Note: This condition handles NaN because NaN is not equal to any other
|
||||||
|
// value, including itself.
|
||||||
|
if (mTemporaryScreenAutoBrightnessAdjustmentSettingOverride != adj) {
|
||||||
|
mTemporaryScreenAutoBrightnessAdjustmentSettingOverride = adj;
|
||||||
|
mDirty |= DIRTY_SETTINGS;
|
||||||
|
updatePowerStateLocked();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1774,11 +1826,15 @@ public final class PowerManagerService extends IPowerManager.Stub
|
|||||||
+ isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked() + ")");
|
+ isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked() + ")");
|
||||||
pw.println(" mStayOnWhilePluggedInSetting=" + mStayOnWhilePluggedInSetting);
|
pw.println(" mStayOnWhilePluggedInSetting=" + mStayOnWhilePluggedInSetting);
|
||||||
pw.println(" mScreenBrightnessSetting=" + mScreenBrightnessSetting);
|
pw.println(" mScreenBrightnessSetting=" + mScreenBrightnessSetting);
|
||||||
|
pw.println(" mScreenAutoBrightnessAdjustmentSetting="
|
||||||
|
+ mScreenAutoBrightnessAdjustmentSetting);
|
||||||
pw.println(" mScreenBrightnessModeSetting=" + mScreenBrightnessModeSetting);
|
pw.println(" mScreenBrightnessModeSetting=" + mScreenBrightnessModeSetting);
|
||||||
pw.println(" mScreenBrightnessOverrideFromWindowManager="
|
pw.println(" mScreenBrightnessOverrideFromWindowManager="
|
||||||
+ mScreenBrightnessOverrideFromWindowManager);
|
+ mScreenBrightnessOverrideFromWindowManager);
|
||||||
pw.println(" mTemporaryScreenBrightnessSettingOverride="
|
pw.println(" mTemporaryScreenBrightnessSettingOverride="
|
||||||
+ mTemporaryScreenBrightnessSettingOverride);
|
+ mTemporaryScreenBrightnessSettingOverride);
|
||||||
|
pw.println(" mTemporaryScreenAutoBrightnessAdjustmentSettingOverride="
|
||||||
|
+ mTemporaryScreenAutoBrightnessAdjustmentSettingOverride);
|
||||||
pw.println(" mScreenBrightnessSettingMinimum=" + mScreenBrightnessSettingMinimum);
|
pw.println(" mScreenBrightnessSettingMinimum=" + mScreenBrightnessSettingMinimum);
|
||||||
pw.println(" mScreenBrightnessSettingMaximum=" + mScreenBrightnessSettingMaximum);
|
pw.println(" mScreenBrightnessSettingMaximum=" + mScreenBrightnessSettingMaximum);
|
||||||
pw.println(" mScreenBrightnessSettingDefault=" + mScreenBrightnessSettingDefault);
|
pw.println(" mScreenBrightnessSettingDefault=" + mScreenBrightnessSettingDefault);
|
||||||
|
|||||||
Reference in New Issue
Block a user