summaryrefslogtreecommitdiffstats
path: root/core/java/android
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2012-05-12 19:57:07 -0700
committerMathias Agopian <mathias@google.com>2012-05-12 19:57:07 -0700
commitcbeb33249d5beec7903f18269c991a5515c5d981 (patch)
treeb16165f4e4910587725aaf08d3c6ca55bd73020a /core/java/android
parentdca5fb9e7e193d6aed233e0650691675a56022a3 (diff)
downloadframeworks_base-cbeb33249d5beec7903f18269c991a5515c5d981.zip
frameworks_base-cbeb33249d5beec7903f18269c991a5515c5d981.tar.gz
frameworks_base-cbeb33249d5beec7903f18269c991a5515c5d981.tar.bz2
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
Diffstat (limited to 'core/java/android')
-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 ee322f8..5e7a12b 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);
}