From 7b371ddfbd5f4387703b76a30562fa7abcb0fc0e Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Tue, 5 Jan 2016 15:32:34 +0100 Subject: [PATCH] Do not pass invalid bounds for dim layer Makes the entire system freeze. Bug: 26396656 Change-Id: I9e9b0a297a351cd8ef72cdc8f5994df6c42567d9 --- .../android/server/wm/DockedStackDividerController.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java index 27ff5bc8e977..88aad13841b0 100644 --- a/services/core/java/com/android/server/wm/DockedStackDividerController.java +++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java @@ -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(); -- 2.11.0