From f9e79e0499a114b184e0d0f4dbd45b3d690a4657 Mon Sep 17 00:00:00 2001 From: Winson Date: Wed, 4 May 2016 17:21:22 -0700 Subject: [PATCH] Fix edge case crash with invalid bitmap dimensions. - In these cases, skip returning an animation spec for that task Bug: 28235453 Change-Id: I611dc4390c0cbd2ca5f16112e4784848b2d6896f --- .../views/RecentsTransitionHelper.java | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java index e3c3af0abbd5d..41869dd5f417f 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java @@ -306,8 +306,11 @@ public class RecentsTransitionHelper { mTmpTransform.fillIn(taskView); stackLayout.transformToScreenCoordinates(mTmpTransform, null /* windowOverrideRect */); - specs.add(composeAnimationSpec(stackView, taskView, mTmpTransform, - true /* addHeaderBitmap */)); + AppTransitionAnimationSpec spec = composeAnimationSpec(stackView, taskView, + mTmpTransform, true /* addHeaderBitmap */); + if (spec != null) { + specs.add(spec); + } } return specs; } @@ -329,8 +332,11 @@ public class RecentsTransitionHelper { mTmpTransform.fillIn(taskView); stackLayout.transformToScreenCoordinates(mTmpTransform, null /* windowOverrideRect */); - specs.add(composeAnimationSpec(stackView, tv, mTmpTransform, - true /* addHeaderBitmap */)); + AppTransitionAnimationSpec spec = composeAnimationSpec(stackView, tv, + mTmpTransform, true /* addHeaderBitmap */); + if (spec != null) { + specs.add(spec); + } } } } @@ -376,11 +382,13 @@ public class RecentsTransitionHelper { private static Bitmap composeHeaderBitmap(TaskView taskView, TaskViewTransform transform) { float scale = transform.scale; - int fromHeaderWidth = (int) (transform.rect.width()); - int fromHeaderHeight = (int) (taskView.mHeaderView.getMeasuredHeight() * scale); - Bitmap b = Bitmap.createBitmap(fromHeaderWidth, fromHeaderHeight, - Bitmap.Config.ARGB_8888); + int headerWidth = (int) (transform.rect.width()); + int headerHeight = (int) (taskView.mHeaderView.getMeasuredHeight() * scale); + if (headerWidth == 0 || headerHeight == 0) { + return null; + } + Bitmap b = Bitmap.createBitmap(headerWidth, headerHeight, Bitmap.Config.ARGB_8888); if (RecentsDebugFlags.Static.EnableTransitionThumbnailDebugMode) { b.eraseColor(0xFFff0000); } else { @@ -400,6 +408,9 @@ public class RecentsTransitionHelper { Bitmap b = null; if (addHeaderBitmap) { b = composeHeaderBitmap(taskView, transform); + if (b == null) { + return null; + } } Rect taskRect = new Rect();