From eb3370d4907d03a9cc9de9d3707f54e11e91e302 Mon Sep 17 00:00:00 2001 From: Pablo Ceballos Date: Wed, 31 Aug 2016 15:00:17 -0700 Subject: [PATCH] Handle null Surface in createVirtualDisplay One can pass a null Surface to createVirtualDisplay and then set the Surface after creation. Properly handle the isSingleBuffered check for this case. Bug 31219726 Change-Id: I14ebaca58912fdb4989e0ba0f4c251df31e24617 --- .../com/android/server/display/DisplayManagerService.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index 45a96441e57e2..971989b212194 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -1402,7 +1402,7 @@ public final class DisplayManagerService extends SystemService { throw new IllegalArgumentException("width, height, and densityDpi must be " + "greater than 0"); } - if (surface.isSingleBuffered()) { + if (surface != null && surface.isSingleBuffered()) { throw new IllegalArgumentException("Surface can't be single-buffered"); } @@ -1463,6 +1463,9 @@ public final class DisplayManagerService extends SystemService { @Override // Binder call public void setVirtualDisplaySurface(IVirtualDisplayCallback callback, Surface surface) { + if (surface != null && surface.isSingleBuffered()) { + throw new IllegalArgumentException("Surface can't be single-buffered"); + } final long token = Binder.clearCallingIdentity(); try { setVirtualDisplaySurfaceInternal(callback.asBinder(), surface);