summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Mathias Agopian <mathias@google.com> 2012-05-12 19:57:07 -0700
committer Mathias Agopian <mathias@google.com> 2012-05-12 19:57:07 -0700
commitcbeb33249d5beec7903f18269c991a5515c5d981 (patch)
treeb16165f4e4910587725aaf08d3c6ca55bd73020a
parentdca5fb9e7e193d6aed233e0650691675a56022a3 (diff)
fix SurfaceView visibility state changes
SurfaceView didn't recompute the transparent region when the INVISIBLE state (as opposed to GONE) was involved. Bug: 6467123 Change-Id: I05930bd568a345331840c1ad8d9123ef4904c04f
-rw-r--r--core/java/android/view/SurfaceView.java12
1 files changed, 11 insertions, 1 deletions
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index ee322f8b773c..5e7a12bdd15a 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -231,7 +231,17 @@ public class SurfaceView extends View {
public void setVisibility(int visibility) {
super.setVisibility(visibility);
mViewVisibility = visibility == VISIBLE;
- mRequestedVisible = mWindowVisibility && mViewVisibility;
+ boolean newRequestedVisible = mWindowVisibility && mViewVisibility;
+ if (newRequestedVisible != mRequestedVisible) {
+ // our base class (View) invalidates the layout only when
+ // we go from/to the GONE state. However, SurfaceView needs
+ // to request a re-layout when the visibility changes at all.
+ // This is needed because the transparent region is computed
+ // as part of the layout phase, and it changes (obviously) when
+ // the visibility changes.
+ requestLayout();
+ }
+ mRequestedVisible = newRequestedVisible;
updateWindow(false, false);
}