summaryrefslogtreecommitdiffstats
path: root/services/core/java
diff options
context:
space:
mode:
authorJeff Brown <jeffbrown@google.com>2014-05-20 22:02:46 -0700
committerJeff Brown <jeffbrown@google.com>2014-05-20 22:02:46 -0700
commit4255869ac00e700395832ee73b2294603d4b6ece (patch)
tree7ecd9c102d3a3d65ca404b4ec811005908754077 /services/core/java
parent6d8fd27e51d799cf7418b14092b5e806d9792812 (diff)
downloadframeworks_base-4255869ac00e700395832ee73b2294603d4b6ece.zip
frameworks_base-4255869ac00e700395832ee73b2294603d4b6ece.tar.gz
frameworks_base-4255869ac00e700395832ee73b2294603d4b6ece.tar.bz2
Defer display ready until brightness ramp completes.
Bug: 14494096 Change-Id: I6da6fffbbce2c7058170e5c6139eae4cb5a06d88
Diffstat (limited to 'services/core/java')
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController.java12
-rw-r--r--services/core/java/com/android/server/display/RampAnimator.java23
2 files changed, 35 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 279a9cc..47406a1 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -544,6 +544,7 @@ final class DisplayPowerController {
mScreenBrightnessRampAnimator = new RampAnimator<DisplayPowerState>(
mPowerState, DisplayPowerState.SCREEN_BRIGHTNESS);
+ mScreenBrightnessRampAnimator.setListener(mRampAnimatorListener);
// Initialize screen state for battery stats.
try {
@@ -570,6 +571,13 @@ final class DisplayPowerController {
}
};
+ private final RampAnimator.Listener mRampAnimatorListener = new RampAnimator.Listener() {
+ @Override
+ public void onAnimationEnd() {
+ sendUpdatePowerState();
+ }
+ };
+
private void updatePowerState() {
// Update the power state request.
final boolean mustNotify;
@@ -753,6 +761,7 @@ final class DisplayPowerController {
&& !mScreenOnWasBlocked
&& !mElectronBeamOnAnimator.isStarted()
&& !mElectronBeamOffAnimator.isStarted()
+ && !mScreenBrightnessRampAnimator.isAnimating()
&& mPowerState.waitUntilClean(mCleanListener)) {
synchronized (mLock) {
if (!mPendingRequestChangedLocked) {
@@ -1290,6 +1299,9 @@ final class DisplayPowerController {
pw.println(" mLastScreenAutoBrightnessGamma=" + mLastScreenAutoBrightnessGamma);
pw.println(" mTwilight.getCurrentState()=" + mTwilight.getCurrentState());
+ pw.println(" mScreenBrightnessRampAnimator.isAnimating()=" +
+ mScreenBrightnessRampAnimator.isAnimating());
+
if (mElectronBeamOnAnimator != null) {
pw.println(" mElectronBeamOnAnimator.isStarted()=" +
mElectronBeamOnAnimator.isStarted());
diff --git a/services/core/java/com/android/server/display/RampAnimator.java b/services/core/java/com/android/server/display/RampAnimator.java
index 6688d6a..ad1e857 100644
--- a/services/core/java/com/android/server/display/RampAnimator.java
+++ b/services/core/java/com/android/server/display/RampAnimator.java
@@ -39,6 +39,8 @@ final class RampAnimator<T> {
private boolean mFirstTime = true;
+ private Listener mListener;
+
public RampAnimator(T object, IntProperty<T> property) {
mObject = object;
mProperty = property;
@@ -92,6 +94,20 @@ final class RampAnimator<T> {
return changed;
}
+ /**
+ * Returns true if the animation is running.
+ */
+ public boolean isAnimating() {
+ return mAnimating;
+ }
+
+ /**
+ * Sets a listener to watch for animation events.
+ */
+ public void setListener(Listener listener) {
+ mListener = listener;
+ }
+
private void postCallback() {
mChoreographer.postCallback(Choreographer.CALLBACK_ANIMATION, mCallback, null);
}
@@ -131,7 +147,14 @@ final class RampAnimator<T> {
postCallback();
} else {
mAnimating = false;
+ if (mListener != null) {
+ mListener.onAnimationEnd();
+ }
}
}
};
+
+ public interface Listener {
+ void onAnimationEnd();
+ }
}