diff options
author | Guang Zhu <guangzhu@google.com> | 2012-05-14 19:37:18 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2012-05-14 19:37:18 -0700 |
commit | 9a19d16a1a44b8f394f93e116adb48024148f8ef (patch) | |
tree | 77394b5b2ac25e244d6451012aa1ef53af7492e9 /core/java | |
parent | 183dc8e254472484252afa550f2771786ded4580 (diff) | |
parent | 58b0dcde83354bd1ae9091a7cbc7f207fb29960a (diff) | |
download | frameworks_base-9a19d16a1a44b8f394f93e116adb48024148f8ef.zip frameworks_base-9a19d16a1a44b8f394f93e116adb48024148f8ef.tar.gz frameworks_base-9a19d16a1a44b8f394f93e116adb48024148f8ef.tar.bz2 |
am 58b0dcde: am 0d607fbe: accessibility bug fix in NumberPicker
* commit '58b0dcde83354bd1ae9091a7cbc7f207fb29960a':
accessibility bug fix in NumberPicker
Diffstat (limited to 'core/java')
-rw-r--r-- | core/java/android/view/View.java | 43 | ||||
-rw-r--r-- | core/java/android/widget/NumberPicker.java | 12 |
2 files changed, 42 insertions, 13 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 2719fa1..e209964 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -670,7 +670,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal protected static final String VIEW_LOG_TAG = "View"; /** - * When set to true, apps will draw debugging information about their layouts. + * When set to true, apps will draw debugging information about their layouts. * * @hide */ @@ -4786,17 +4786,46 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal * entirely by its predecessors, and has an alpha greater than zero. * * @return Whether the view is visible on the screen. + * + * @hide */ - private boolean isVisibleToUser() { + protected boolean isVisibleToUser() { + return isVisibleToUser(null); + } + + /** + * Computes whether the given portion of this view is visible to the user. Such a view is + * attached, visible, all its predecessors are visible, has an alpha greater than zero, and + * the specified portion is not clipped entirely by its predecessors. + * + * @param boundInView the portion of the view to test; coordinates should be relative; may be + * <code>null</code>, and the entire view will be tested in this case. + * When <code>true</code> is returned by the function, the actual visible + * region will be stored in this parameter; that is, if boundInView is fully + * contained within the view, no modification will be made, otherwise regions + * outside of the visible area of the view will be clipped. + * + * @return Whether the specified portion of the view is visible on the screen. + * + * @hide + */ + protected boolean isVisibleToUser(Rect boundInView) { + Rect visibleRect = mAttachInfo.mTmpInvalRect; + Point offset = mAttachInfo.mPoint; // The first two checks are made also made by isShown() which // however traverses the tree up to the parent to catch that. // Therefore, we do some fail fast check to minimize the up // tree traversal. - return (mAttachInfo != null - && mAttachInfo.mWindowVisibility == View.VISIBLE - && getAlpha() > 0 - && isShown() - && getGlobalVisibleRect(mAttachInfo.mTmpInvalRect)); + boolean isVisible = mAttachInfo != null + && mAttachInfo.mWindowVisibility == View.VISIBLE + && getAlpha() > 0 + && isShown() + && getGlobalVisibleRect(visibleRect, offset); + if (isVisible && boundInView != null) { + visibleRect.offset(-offset.x, -offset.y); + isVisible &= boundInView.intersect(visibleRect); + } + return isVisible; } /** diff --git a/core/java/android/widget/NumberPicker.java b/core/java/android/widget/NumberPicker.java index 6ff924b..7c809b3 100644 --- a/core/java/android/widget/NumberPicker.java +++ b/core/java/android/widget/NumberPicker.java @@ -2239,20 +2239,17 @@ public class NumberPicker extends LinearLayout { info.setPackageName(mContext.getPackageName()); info.setSource(NumberPicker.this, virtualViewId); info.setParent(NumberPicker.this); - info.addChild(NumberPicker.this, VIRTUAL_VIEW_ID_DECREMENT); - info.addChild(NumberPicker.this, VIRTUAL_VIEW_ID_INPUT); - info.addChild(NumberPicker.this, VIRTUAL_VIEW_ID_INCREMENT); info.setText(text); info.setClickable(true); info.setLongClickable(true); info.setEnabled(NumberPicker.this.isEnabled()); Rect boundsInParent = mTempRect; boundsInParent.set(left, top, right, bottom); + info.setVisibleToUser(isVisibleToUser(boundsInParent)); info.setBoundsInParent(boundsInParent); Rect boundsInScreen = boundsInParent; int[] locationOnScreen = mTempArray; getLocationOnScreen(locationOnScreen); - boundsInScreen.offsetTo(0, 0); boundsInScreen.offset(locationOnScreen[0], locationOnScreen[1]); info.setBoundsInScreen(boundsInScreen); return info; @@ -2261,19 +2258,22 @@ public class NumberPicker extends LinearLayout { private AccessibilityNodeInfo createAccessibilityNodeInfoForNumberPicker(int left, int top, int right, int bottom) { AccessibilityNodeInfo info = AccessibilityNodeInfo.obtain(); - info.setClassName(Button.class.getName()); + info.setClassName(NumberPicker.class.getName()); info.setPackageName(mContext.getPackageName()); info.setSource(NumberPicker.this); + info.addChild(NumberPicker.this, VIRTUAL_VIEW_ID_DECREMENT); + info.addChild(NumberPicker.this, VIRTUAL_VIEW_ID_INPUT); + info.addChild(NumberPicker.this, VIRTUAL_VIEW_ID_INCREMENT); info.setParent((View) getParent()); info.setEnabled(NumberPicker.this.isEnabled()); info.setScrollable(true); Rect boundsInParent = mTempRect; boundsInParent.set(left, top, right, bottom); info.setBoundsInParent(boundsInParent); + info.setVisibleToUser(isVisibleToUser()); Rect boundsInScreen = boundsInParent; int[] locationOnScreen = mTempArray; getLocationOnScreen(locationOnScreen); - boundsInScreen.offsetTo(0, 0); boundsInScreen.offset(locationOnScreen[0], locationOnScreen[1]); info.setBoundsInScreen(boundsInScreen); return info; |