From 024a349fe67ff349f5c36f744e9a75d3127bc441 Mon Sep 17 00:00:00 2001 From: Robert Carr Date: Mon, 22 Apr 2019 09:21:57 -0700 Subject: [PATCH] DimLayer: More release fixes. DimState and DimAnimatable are sharing ownership of the Dim layer with either having the possibility to remove it. They aren't holding references to eachother so its not clear where to consolidate ownership. We take the easy way out and add some valid checks so they can safely share ownership. Bug: 130315011 Test: Existing tests pass Change-Id: Id473e40c58f1ca0f4a6a23284e220c6fd2ec36d2 --- services/core/java/com/android/server/wm/Dimmer.java | 8 ++++++-- .../wmtests/src/com/android/server/wm/DimmerTests.java | 5 ++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/wm/Dimmer.java b/services/core/java/com/android/server/wm/Dimmer.java index a7a793fa8d340..767327a278bd3 100644 --- a/services/core/java/com/android/server/wm/Dimmer.java +++ b/services/core/java/com/android/server/wm/Dimmer.java @@ -102,7 +102,9 @@ class Dimmer { } void removeSurface() { - getPendingTransaction().remove(mDimLayer); + if (mDimLayer != null && mDimLayer.isValid()) { + getPendingTransaction().remove(mDimLayer); + } mDimLayer = null; } } @@ -305,7 +307,9 @@ class Dimmer { if (!mDimState.mDimming) { if (!mDimState.mAnimateExit) { - t.remove(mDimState.mDimLayer); + if (mDimState.mDimLayer.isValid()) { + t.remove(mDimState.mDimLayer); + } } else { startDimExit(mLastRequestedDimContainer, mDimState.mSurfaceAnimator, t); } diff --git a/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java b/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java index 5b32fe68feaec..292a05bd966a6 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java @@ -27,6 +27,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.Mockito.when; import android.graphics.Rect; import android.platform.test.annotations.Presubmit; @@ -78,7 +79,9 @@ public class DimmerTests extends WindowTestsBase { @Override public SurfaceControl build() { - return mock(SurfaceControl.class); + SurfaceControl mSc = mock(SurfaceControl.class); + when(mSc.isValid()).thenReturn(true); + return mSc; } }