From c34aea875a9b868c0654e294a3256cdb051e2d8f Mon Sep 17 00:00:00 2001 From: Robert Carr Date: Tue, 16 Jun 2020 11:47:07 -0700 Subject: [PATCH] SurfaceView: Check ViewRootImpl non-null This call to updateRelativeZ may be triggered from the RT frame callback which may be triggered after we are detached from the Window and in that case will be null. If we are detached we are also going invisible so there is no need to set a relativeZ. Bug: 158706756 Test: Existing tests pass Change-Id: I46aa824807b7b275e6a015c428fe7467a72ca949 --- core/java/android/view/SurfaceView.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index 57f91ed3c0ae3..5dd21e2ad9151 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -1638,9 +1638,14 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall } private void updateRelativeZ(Transaction t) { - SurfaceControl viewRoot = getViewRootImpl().getSurfaceControl(); - t.setRelativeLayer(mBackgroundControl, viewRoot, Integer.MIN_VALUE); - t.setRelativeLayer(mSurfaceControl, viewRoot, mSubLayer); + final ViewRootImpl viewRoot = getViewRootImpl(); + if (viewRoot == null) { + // We were just detached. + return; + } + final SurfaceControl viewRootControl = viewRoot.getSurfaceControl(); + t.setRelativeLayer(mBackgroundControl, viewRootControl, Integer.MIN_VALUE); + t.setRelativeLayer(mSurfaceControl, viewRootControl, mSubLayer); } /**