From d0292964f3a4ab0a5e3a6f00514f01c498530d3f Mon Sep 17 00:00:00 2001 From: "Qi (wangqi) Wang" Date: Fri, 12 Jun 2020 11:10:34 -0700 Subject: [PATCH] Make underlying SurfaceView respect visibility of InlineContentView. SurfaceView doesn't respect its ancestor's visibility change, so we need a OnPreDrawListener listener to update it according to visibility change in the view hierarchy. Bug: 158714351 Test: verified locally Change-Id: I7d6a7db48e037ed7d4ec2ecb23a158e8d1c43240 --- .../android/widget/inline/InlineContentView.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/core/java/android/widget/inline/InlineContentView.java b/core/java/android/widget/inline/InlineContentView.java index 6a85de5ca7576..8ca218c1d1a7d 100644 --- a/core/java/android/widget/inline/InlineContentView.java +++ b/core/java/android/widget/inline/InlineContentView.java @@ -27,6 +27,7 @@ import android.view.SurfaceControlViewHost; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.ViewGroup; +import android.view.ViewTreeObserver.OnPreDrawListener; import java.util.function.Consumer; @@ -130,6 +131,16 @@ public class InlineContentView extends ViewGroup { @Nullable private SurfacePackageUpdater mSurfacePackageUpdater; + @NonNull + private final OnPreDrawListener mDrawListener = new OnPreDrawListener() { + @Override + public boolean onPreDraw() { + int visibility = InlineContentView.this.isShown() ? VISIBLE : GONE; + mSurfaceView.setVisibility(visibility); + return true; + } + }; + /** * @inheritDoc * @hide @@ -202,6 +213,8 @@ public class InlineContentView extends ViewGroup { } }); } + mSurfaceView.setVisibility(VISIBLE); + getViewTreeObserver().addOnPreDrawListener(mDrawListener); } @Override @@ -211,6 +224,7 @@ public class InlineContentView extends ViewGroup { if (mSurfacePackageUpdater != null) { mSurfacePackageUpdater.onSurfacePackageReleased(); } + getViewTreeObserver().removeOnPreDrawListener(mDrawListener); } @Override