OSDN Git Service

Do not pass invalid bounds for dim layer
authorJorim Jaggi <jjaggi@google.com>
Tue, 5 Jan 2016 14:32:34 +0000 (15:32 +0100)
committerJorim Jaggi <jjaggi@google.com>
Tue, 5 Jan 2016 14:35:50 +0000 (14:35 +0000)
Makes the entire system freeze.

Bug: 26396656
Change-Id: I9e9b0a297a351cd8ef72cdc8f5994df6c42567d9

services/core/java/com/android/server/wm/DockedStackDividerController.java

index 27ff5bc..88aad13 100644 (file)
@@ -172,12 +172,18 @@ public class DockedStackDividerController implements DimLayerUser {
     void setResizeDimLayer(boolean visible, int targetStackId, float alpha) {
         SurfaceControl.openTransaction();
         TaskStack stack = mDisplayContent.mService.mStackIdToStack.get(targetStackId);
-        if (visible && stack != null) {
+        boolean visibleAndValid = visible && stack != null;
+        if (visibleAndValid) {
             stack.getDimBounds(mTmpRect);
-            mDimLayer.setBounds(mTmpRect);
-            mDimLayer.show(mDisplayContent.mService.mLayersController.getResizeDimLayer(), alpha,
-                    0 /* duration */);
-        } else {
+            if (mTmpRect.height() > 0) {
+                mDimLayer.setBounds(mTmpRect);
+                mDimLayer.show(mDisplayContent.mService.mLayersController.getResizeDimLayer(),
+                        alpha, 0 /* duration */);
+            } else {
+                visibleAndValid = false;
+            }
+        }
+        if (!visibleAndValid) {
             mDimLayer.hide();
         }
         SurfaceControl.closeTransaction();