summaryrefslogtreecommitdiffstats
path: root/core/java
diff options
context:
space:
mode:
authorGuang Zhu <guangzhu@google.com>2012-05-14 19:37:18 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2012-05-14 19:37:18 -0700
commit9a19d16a1a44b8f394f93e116adb48024148f8ef (patch)
tree77394b5b2ac25e244d6451012aa1ef53af7492e9 /core/java
parent183dc8e254472484252afa550f2771786ded4580 (diff)
parent58b0dcde83354bd1ae9091a7cbc7f207fb29960a (diff)
downloadframeworks_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.java43
-rw-r--r--core/java/android/widget/NumberPicker.java12
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;