From 29cae8904f35215b2a15d367c3b396c07969262c Mon Sep 17 00:00:00 2001 From: Daichi Hirono Date: Thu, 1 Feb 2018 09:14:02 +0900 Subject: [PATCH] Create 1x1 dummy surface when zero size is specified for drag shadow Since P, we cannot create zero size surface. For compatibility, we create 1x1 dummy surface when the app claims zero size surface. Bug: 72416622 Test: Invoke startDragAndDrop with zero size surface Change-Id: Ifefd07e93389979eaa2a6fbe29abe5850fcdef34 --- core/java/android/view/View.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 5150c1fec8a31..aada62aaaf871 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -23634,9 +23634,16 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Point shadowTouchPoint = new Point(); shadowBuilder.onProvideShadowMetrics(shadowSize, shadowTouchPoint); - if ((shadowSize.x <= 0) || (shadowSize.y <= 0) + if ((shadowSize.x < 0) || (shadowSize.y < 0) || (shadowTouchPoint.x < 0) || (shadowTouchPoint.y < 0)) { - throw new IllegalStateException("Drag shadow dimensions must be positive"); + throw new IllegalStateException("Drag shadow dimensions must not be negative"); + } + + // Create 1x1 surface when zero surface size is specified because SurfaceControl.Builder + // does not accept zero size surface. + if (shadowSize.x == 0 || shadowSize.y == 0) { + shadowSize.x = 1; + shadowSize.y = 1; } if (ViewDebug.DEBUG_DRAG) {