Skip to content

Commit aacbf91

Browse files
sganovAndroid (Google) Code Review
authored andcommitted
Merge "Not visible view should not be announced or interacted with."
2 parents e68c676 + 0b0a41d commit aacbf91

File tree

4 files changed

+28
-22
lines changed

4 files changed

+28
-22
lines changed

core/java/android/view/ViewRootImpl.java

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4543,7 +4543,7 @@ public void findAccessibilityNodeInfoByAccessibilityIdUiThread(Message message)
45434543
predicate.init(accessibilityId);
45444544
View root = ViewRootImpl.this.mView;
45454545
View target = root.findViewByPredicate(predicate);
4546-
if (target != null && target.isShown()) {
4546+
if (target != null && target.getVisibility() == View.VISIBLE) {
45474547
info = target.createAccessibilityNodeInfo();
45484548
}
45494549
} finally {
@@ -4586,7 +4586,7 @@ public void findAccessibilityNodeInfoByViewIdUiThread(Message message) {
45864586
try {
45874587
View root = ViewRootImpl.this.mView;
45884588
View target = root.findViewById(viewId);
4589-
if (target != null && target.isShown()) {
4589+
if (target != null && target.getVisibility() == View.VISIBLE) {
45904590
info = target.createAccessibilityNodeInfo();
45914591
}
45924592
} finally {
@@ -4637,14 +4637,14 @@ public void findAccessibilityNodeInfosByViewTextUiThread(Message message) {
46374637
ArrayList<View> foundViews = mAttachInfo.mFocusablesTempList;
46384638
foundViews.clear();
46394639

4640-
View root;
4640+
View root = null;
46414641
if (accessibilityViewId != View.NO_ID) {
46424642
root = findViewByAccessibilityId(accessibilityViewId);
46434643
} else {
46444644
root = ViewRootImpl.this.mView;
46454645
}
46464646

4647-
if (root == null || !root.isShown()) {
4647+
if (root == null || root.getVisibility() != View.VISIBLE) {
46484648
return;
46494649
}
46504650

@@ -4659,7 +4659,7 @@ public void findAccessibilityNodeInfosByViewTextUiThread(Message message) {
46594659
final int viewCount = foundViews.size();
46604660
for (int i = 0; i < viewCount; i++) {
46614661
View foundView = foundViews.get(i);
4662-
if (foundView.isShown()) {
4662+
if (foundView.getVisibility() == View.VISIBLE) {
46634663
infos.add(foundView.createAccessibilityNodeInfo());
46644664
}
46654665
}
@@ -4732,7 +4732,7 @@ public void perfromAccessibilityActionUiThread(Message message) {
47324732

47334733
private boolean performActionFocus(int accessibilityId) {
47344734
View target = findViewByAccessibilityId(accessibilityId);
4735-
if (target == null) {
4735+
if (target == null || target.getVisibility() != View.VISIBLE) {
47364736
return false;
47374737
}
47384738
// Get out of touch mode since accessibility wants to move focus around.
@@ -4742,7 +4742,7 @@ private boolean performActionFocus(int accessibilityId) {
47424742

47434743
private boolean performActionClearFocus(int accessibilityId) {
47444744
View target = findViewByAccessibilityId(accessibilityId);
4745-
if (target == null) {
4745+
if (target == null || target.getVisibility() != View.VISIBLE) {
47464746
return false;
47474747
}
47484748
if (!target.isFocused()) {
@@ -4754,7 +4754,7 @@ private boolean performActionClearFocus(int accessibilityId) {
47544754

47554755
private boolean performActionSelect(int accessibilityId) {
47564756
View target = findViewByAccessibilityId(accessibilityId);
4757-
if (target == null) {
4757+
if (target == null || target.getVisibility() != View.VISIBLE) {
47584758
return false;
47594759
}
47604760
if (target.isSelected()) {
@@ -4766,7 +4766,7 @@ private boolean performActionSelect(int accessibilityId) {
47664766

47674767
private boolean performActionClearSelection(int accessibilityId) {
47684768
View target = findViewByAccessibilityId(accessibilityId);
4769-
if (target == null) {
4769+
if (target == null || target.getVisibility() != View.VISIBLE) {
47704770
return false;
47714771
}
47724772
if (!target.isSelected()) {
@@ -4783,18 +4783,21 @@ private View findViewByAccessibilityId(int accessibilityId) {
47834783
}
47844784
mFindByAccessibilityIdPredicate.init(accessibilityId);
47854785
View foundView = root.findViewByPredicate(mFindByAccessibilityIdPredicate);
4786-
return (foundView != null && foundView.isShown()) ? foundView : null;
4786+
if (foundView == null || foundView.getVisibility() != View.VISIBLE) {
4787+
return null;
4788+
}
4789+
return foundView;
47874790
}
47884791

47894792
private final class FindByAccessibilitytIdPredicate implements Predicate<View> {
4790-
public int mSerchedId;
4793+
public int mSearchedId;
47914794

47924795
public void init(int searchedId) {
4793-
mSerchedId = searchedId;
4796+
mSearchedId = searchedId;
47944797
}
47954798

47964799
public boolean apply(View view) {
4797-
return (view.getAccessibilityViewId() == mSerchedId);
4800+
return (view.getAccessibilityViewId() == mSearchedId);
47984801
}
47994802
}
48004803
}

core/java/android/widget/AdapterView.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -886,20 +886,19 @@ public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
886886
event.setEventType(AccessibilityEvent.TYPE_VIEW_SELECTED);
887887
}
888888

889-
// We first get a chance to populate the event.
890-
onPopulateAccessibilityEvent(event);
891-
889+
View selectedView = getSelectedView();
890+
if (selectedView != null && selectedView.getVisibility() == VISIBLE) {
891+
// We first get a chance to populate the event.
892+
onPopulateAccessibilityEvent(event);
893+
}
892894
return false;
893895
}
894896

895897
@Override
896898
public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
897899
// We send selection events only from AdapterView to avoid
898900
// generation of such event for each child.
899-
View selectedView = getSelectedView();
900-
if (selectedView != null) {
901-
selectedView.dispatchPopulateAccessibilityEvent(event);
902-
}
901+
getSelectedView().dispatchPopulateAccessibilityEvent(event);
903902
}
904903

905904
@Override

core/java/android/widget/RelativeLayout.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -961,7 +961,8 @@ public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
961961
}
962962

963963
for (View view : mTopToBottomLeftToRightSet) {
964-
if (view.dispatchPopulateAccessibilityEvent(event)) {
964+
if (view.getVisibility() == View.VISIBLE
965+
&& view.dispatchPopulateAccessibilityEvent(event)) {
965966
mTopToBottomLeftToRightSet.clear();
966967
return true;
967968
}

core/java/android/widget/TabWidget.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,10 @@ public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
405405
onPopulateAccessibilityEvent(event);
406406
// Dispatch only to the selected tab.
407407
if (mSelectedTab != -1) {
408-
return getChildTabViewAt(mSelectedTab).dispatchPopulateAccessibilityEvent(event);
408+
View tabView = getChildTabViewAt(mSelectedTab);
409+
if (tabView != null && tabView.getVisibility() == VISIBLE) {
410+
return tabView.dispatchPopulateAccessibilityEvent(event);
411+
}
409412
}
410413
return false;
411414
}

0 commit comments

Comments
 (0)