diff options
| author | 2019-04-25 15:15:22 -0700 | |
|---|---|---|
| committer | 2019-04-29 16:06:14 -0700 | |
| commit | 7edecb35e6fbc82ca73aee52aefffc7de8458db5 (patch) | |
| tree | 408ce3e899e374524a028072b3513ec2d00cc49b | |
| parent | 2f956b53dff62e84ce74fdb79a7104900409e79c (diff) | |
WM/ViewRootImpl: Fix convertFromTranslucent to respect existing state.
Code-paths triggered by convertFromTranslucent end up setting an opaque
state both on the client side and the WindowManager side, without
appropriately checking to see if we were already non-opaque before we
were convertedToTranslucent.
Bug:126897750
Test: Manual
Change-Id: I2d19624be31330100b61615fabae04899d95cda9
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 1 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 7 |
2 files changed, 6 insertions, 2 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 865a656994b5..e3087efa31b6 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -8279,6 +8279,7 @@ public final class ViewRootImpl implements ViewParent, void changeCanvasOpacity(boolean opaque) { Log.d(mTag, "changeCanvasOpacity: opaque=" + opaque); + opaque = opaque & ((mView.mPrivateFlags & View.PFLAG_REQUEST_TRANSPARENT_REGIONS) == 0); if (mAttachInfo.mThreadedRenderer != null) { mAttachInfo.mThreadedRenderer.setOpaque(opaque); } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index dae29b2cf180..49fa12690034 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -137,6 +137,7 @@ import android.database.ContentObserver; import android.graphics.Bitmap; import android.graphics.Insets; import android.graphics.Matrix; +import android.graphics.PixelFormat; import android.graphics.Point; import android.graphics.Rect; import android.graphics.RectF; @@ -2607,9 +2608,11 @@ public class WindowManagerService extends IWindowManager.Stub final AppWindowToken wtoken = mRoot.getAppWindowToken(token); if (wtoken != null) { final WindowState win = wtoken.findMainWindow(); - if (win != null) { - win.mWinAnimator.setOpaqueLocked(isOpaque); + if (win == null) { + return; } + isOpaque = isOpaque & !PixelFormat.formatHasAlpha(win.getAttrs().format); + win.mWinAnimator.setOpaqueLocked(isOpaque); } } |