OSDN Git Service

Destroy dimLayer surface in removeDimLayerUser() if it is not fullscreen.
authorChong Zhang <chz@google.com>
Thu, 5 Nov 2015 04:59:26 +0000 (20:59 -0800)
committerChong Zhang <chz@google.com>
Thu, 5 Nov 2015 23:28:40 +0000 (15:28 -0800)
For a non-fullscreen dimLayerUser, its dimLayer surface is not shared with
other dimLayerUsers and should be destroyed when we remove it from mState.

Change-Id: Iaf300178c2534b87fccca99a836ae3416605c9ca

services/core/java/com/android/server/wm/DimLayerController.java

index 67576ba..921d27c 100644 (file)
@@ -270,7 +270,14 @@ class DimLayerController {
     }
 
     void removeDimLayerUser(DimLayer.DimLayerUser dimLayerUser) {
-        mState.remove(dimLayerUser);
+        DimLayerState state = mState.get(dimLayerUser);
+        if (state != null) {
+            // Destroy the surface, unless it's the shared fullscreen dim.
+            if (state.dimLayer != mSharedFullScreenDimLayer) {
+                state.dimLayer.destroySurface();
+            }
+            mState.remove(dimLayerUser);
+        }
     }
 
     void applyDimBehind(DimLayer.DimLayerUser dimLayerUser, WindowStateAnimator animator) {