Merge "Fix bug 2587373 - awaken scrollbars when a scrolling view becomes visible." into froyo

This commit is contained in:
Adam Powell
2010-04-19 15:33:08 -07:00
committed by Android (Google) Code Review

View File

@@ -1512,6 +1512,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
* @hide
*/
static final int CANCEL_NEXT_UP_EVENT = 0x04000000;
/**
* Indicates that we should awaken scroll bars once attached
*
* @hide
*/
private static final int AWAKEN_SCROLL_BARS_ON_ATTACH = 0x08000000;
/**
* The parent this view is attached to.
@@ -3838,6 +3845,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
* {@link #INVISIBLE} or {@link #GONE}.
*/
protected void onVisibilityChanged(View changedView, int visibility) {
if (visibility == VISIBLE) {
if (mAttachInfo != null) {
initialAwakenScrollBars();
} else {
mPrivateFlags |= AWAKEN_SCROLL_BARS_ON_ATTACH;
}
}
}
/**
@@ -3888,6 +3902,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
* @param visibility The new visibility of the window.
*/
protected void onWindowVisibilityChanged(int visibility) {
if (visibility == VISIBLE) {
initialAwakenScrollBars();
}
}
/**
@@ -4908,6 +4925,19 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
awakenScrollBars(mScrollCache.scrollBarDefaultDelayBeforeFade, true);
}
/**
* Trigger the scrollbars to draw.
* This method differs from awakenScrollBars() only in its default duration.
* initialAwakenScrollBars() will show the scroll bars for longer than
* usual to give the user more of a chance to notice them.
*
* @return true if the animation is played, false otherwise.
*/
private boolean initialAwakenScrollBars() {
return mScrollCache != null &&
awakenScrollBars(mScrollCache.scrollBarDefaultDelayBeforeFade * 4, true);
}
/**
* <p>
* Trigger the scrollbars to draw. When invoked this method starts an
@@ -5900,6 +5930,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
if ((mPrivateFlags & REQUEST_TRANSPARENT_REGIONS) != 0) {
mParent.requestTransparentRegion(this);
}
if ((mPrivateFlags & AWAKEN_SCROLL_BARS_ON_ATTACH) != 0) {
initialAwakenScrollBars();
mPrivateFlags &= ~AWAKEN_SCROLL_BARS_ON_ATTACH;
}
}
/**