summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Robert Carr <racarr@google.com> 2019-04-25 15:15:22 -0700
committer Robert Carr <racarr@google.com> 2019-04-29 16:06:14 -0700
commit7edecb35e6fbc82ca73aee52aefffc7de8458db5 (patch)
tree408ce3e899e374524a028072b3513ec2d00cc49b
parent2f956b53dff62e84ce74fdb79a7104900409e79c (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.java1
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java7
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);
}
}