From c5874094eb64d7312bea02f15456977f3da5ca70 Mon Sep 17 00:00:00 2001 From: Adam Powell Date: Thu, 17 Mar 2016 16:27:24 -0700 Subject: [PATCH] Dispatch aggregated visibility when performing attachViewToParent attachViewToParent is generally used for finishing a temporary detach of a view as seen in ListView, etc. Have it dispatch aggregated visibility to the newly added view so as to correctly update the view as to its new state. Bug 27702014 Change-Id: Ie8a67c78d3edf401641d52ce10bddf7cb49796fe --- core/java/android/view/ViewGroup.java | 2 ++ core/java/android/widget/ImageView.java | 9 ++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index aa11e3f96ef5d..816d9c48539ec 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -4994,6 +4994,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager if (child.hasFocus()) { requestChildFocus(child, child.findFocus()); } + dispatchVisibilityAggregated(isAttachedToWindow() && getWindowVisibility() == VISIBLE + && isShown()); } /** diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java index 04d344f0caa6e..222a040d2b3ca 100644 --- a/core/java/android/widget/ImageView.java +++ b/core/java/android/widget/ImageView.java @@ -913,7 +913,9 @@ public class ImageView extends View { if (mDrawable != null) { mDrawable.setCallback(null); unscheduleDrawable(mDrawable); - mDrawable.setVisible(false, false); + if (isAttachedToWindow()) { + mDrawable.setVisible(false, false); + } } mDrawable = d; @@ -924,8 +926,9 @@ public class ImageView extends View { if (d.isStateful()) { d.setState(getDrawableState()); } - d.setVisible(isAttachedToWindow() && getWindowVisibility() == VISIBLE && isShown(), - true); + if (isAttachedToWindow()) { + d.setVisible(getWindowVisibility() == VISIBLE && isShown(), true); + } d.setLevel(mLevel); mDrawableWidth = d.getIntrinsicWidth(); mDrawableHeight = d.getIntrinsicHeight();