diff options
| author | Romain Guy <romainguy@google.com> | 2012-03-08 10:47:02 -0800 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-03-08 10:47:02 -0800 |
| commit | 250069bf6bf3d7e2ef85c49e0cd100e80c3c8b7d (patch) | |
| tree | 5dbcb720953c2462948ea42160fc5cef0d1b4556 /core | |
| parent | cd40f4a062d73088462eaca6c3e778440c1ccdd8 (diff) | |
| parent | 7e4e561bc717a6eea4e0d06ec4173ad27420425f (diff) | |
| download | frameworks_base-250069bf6bf3d7e2ef85c49e0cd100e80c3c8b7d.zip frameworks_base-250069bf6bf3d7e2ef85c49e0cd100e80c3c8b7d.tar.gz frameworks_base-250069bf6bf3d7e2ef85c49e0cd100e80c3c8b7d.tar.bz2 | |
Merge "Ignore draw requests when the display is off"
Diffstat (limited to 'core')
| -rw-r--r-- | core/java/android/view/IWindow.aidl | 1 | ||||
| -rw-r--r-- | core/java/android/view/View.java | 2 | ||||
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 38 | ||||
| -rw-r--r-- | core/java/com/android/internal/view/BaseIWindow.java | 3 |
4 files changed, 42 insertions, 2 deletions
diff --git a/core/java/android/view/IWindow.aidl b/core/java/android/view/IWindow.aidl index 715fa7b..acb1387 100644 --- a/core/java/android/view/IWindow.aidl +++ b/core/java/android/view/IWindow.aidl @@ -49,6 +49,7 @@ oneway interface IWindow { boolean reportDraw, in Configuration newConfig); void dispatchAppVisibility(boolean visible); void dispatchGetNewSurface(); + void dispatchScreenStatus(boolean on); /** * Tell the window that it is either gaining or losing focus. Keep it up diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 9457067..ac0e17c 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -14871,6 +14871,8 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal boolean mHardwareAccelerationRequested; HardwareRenderer mHardwareRenderer; + boolean mScreenOn; + /** * Scale factor used by the compatibility mode */ diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 80d4c53..7fd05c3 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -46,6 +46,7 @@ import android.os.LatencyTimer; import android.os.Looper; import android.os.Message; import android.os.ParcelFileDescriptor; +import android.os.PowerManager; import android.os.Process; import android.os.RemoteException; import android.os.SystemClock; @@ -390,6 +391,9 @@ public final class ViewRootImpl implements ViewParent, mProfileRendering = Boolean.parseBoolean( SystemProperties.get(PROPERTY_PROFILE_RENDERING, "false")); mChoreographer = Choreographer.getInstance(); + + PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); + mAttachInfo.mScreenOn = powerManager.isScreenOn(); } /** @@ -757,6 +761,16 @@ public final class ViewRootImpl implements ViewParent, scheduleTraversals(); } + void handleScreenStatusChange(boolean on) { + if (on != mAttachInfo.mScreenOn) { + mAttachInfo.mScreenOn = on; + if (on) { + mFullRedrawNeeded = true; + scheduleTraversals(); + } + } + } + /** * {@inheritDoc} */ @@ -1886,6 +1900,8 @@ public final class ViewRootImpl implements ViewParent, } private void performDraw() { + if (!mAttachInfo.mScreenOn) return; + final long drawStartTime; if (ViewDebug.DEBUG_LATENCY) { drawStartTime = System.nanoTime(); @@ -2018,8 +2034,7 @@ public final class ViewRootImpl implements ViewParent, } if (!dirty.isEmpty() || mIsAnimating) { - if (mAttachInfo.mHardwareRenderer != null - && mAttachInfo.mHardwareRenderer.isEnabled()) { + if (mAttachInfo.mHardwareRenderer != null && mAttachInfo.mHardwareRenderer.isEnabled()) { // Draw with hardware renderer. mIsAnimating = false; mHardwareYOffset = yoff; @@ -2485,6 +2500,7 @@ public final class ViewRootImpl implements ViewParent, private final static int MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_VIEW_ID = 21; private final static int MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_TEXT = 22; private final static int MSG_PROCESS_INPUT_EVENTS = 23; + private final static int MSG_DISPATCH_SCREEN_STATUS = 24; final class ViewRootHandler extends Handler { @Override @@ -2741,6 +2757,11 @@ public final class ViewRootImpl implements ViewParent, .findAccessibilityNodeInfosByTextUiThread(msg); } } break; + case MSG_DISPATCH_SCREEN_STATUS: { + if (mView != null) { + handleScreenStatusChange(msg.arg1 == 1); + } + } break; } } } @@ -4121,6 +4142,12 @@ public final class ViewRootImpl implements ViewParent, mHandler.sendMessage(msg); } + public void dispatchScreenStatusChange(boolean on) { + Message msg = mHandler.obtainMessage(MSG_DISPATCH_SCREEN_STATUS); + msg.arg1 = on ? 1 : 0; + mHandler.sendMessage(msg); + } + public void dispatchGetNewSurface() { Message msg = mHandler.obtainMessage(MSG_DISPATCH_GET_NEW_SURFACE); mHandler.sendMessage(msg); @@ -4322,6 +4349,13 @@ public final class ViewRootImpl implements ViewParent, } } + public void dispatchScreenStatus(boolean on) { + final ViewRootImpl viewAncestor = mViewAncestor.get(); + if (viewAncestor != null) { + viewAncestor.dispatchScreenStatusChange(on); + } + } + public void dispatchGetNewSurface() { final ViewRootImpl viewAncestor = mViewAncestor.get(); if (viewAncestor != null) { diff --git a/core/java/com/android/internal/view/BaseIWindow.java b/core/java/com/android/internal/view/BaseIWindow.java index b227700..e695f8e 100644 --- a/core/java/com/android/internal/view/BaseIWindow.java +++ b/core/java/com/android/internal/view/BaseIWindow.java @@ -49,6 +49,9 @@ public class BaseIWindow extends IWindow.Stub { public void dispatchGetNewSurface() { } + public void dispatchScreenStatus(boolean on) { + } + public void windowFocusChanged(boolean hasFocus, boolean touchEnabled) { } |
