Skip to content

Commit 4ce106f

Browse files
sganovAndroid (Google) Code Review
authored andcommitted
Merge "Fixing some minor issues in accessibility focus." into jb-dev
2 parents 7e12cf0 + f76a83c commit 4ce106f

File tree

2 files changed

+18
-14
lines changed

2 files changed

+18
-14
lines changed

core/java/android/view/View.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4325,7 +4325,6 @@ protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyF
43254325
if (gainFocus) {
43264326
if (AccessibilityManager.getInstance(mContext).isEnabled()) {
43274327
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
4328-
requestAccessibilityFocus();
43294328
}
43304329
}
43314330

@@ -6183,8 +6182,6 @@ public boolean requestAccessibilityFocus() {
61836182
invalidate();
61846183
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
61856184
notifyAccessibilityStateChanged();
6186-
// Try to give input focus to this view - not a descendant.
6187-
requestFocusNoSearch(View.FOCUS_DOWN, null);
61886185
return true;
61896186
}
61906187
return false;
@@ -6230,11 +6227,13 @@ public void clearAccessibilityFocus() {
62306227
private void requestAccessibilityFocusFromHover() {
62316228
if (includeForAccessibility() && isActionableForAccessibility()) {
62326229
requestAccessibilityFocus();
6230+
requestFocusNoSearch(View.FOCUS_DOWN, null);
62336231
} else {
62346232
if (mParent != null) {
62356233
View nextFocus = mParent.findViewToTakeAccessibilityFocusFromHover(this, this);
62366234
if (nextFocus != null) {
62376235
nextFocus.requestAccessibilityFocus();
6236+
nextFocus.requestFocusNoSearch(View.FOCUS_DOWN, null);
62386237
}
62396238
}
62406239
}

core/java/android/widget/AbsListView.java

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1352,24 +1352,23 @@ public View focusSearch(View focused, int direction) {
13521352
case ACCESSIBILITY_FOCUS_FORWARD: {
13531353
ViewRootImpl viewRootImpl = getViewRootImpl();
13541354
if (viewRootImpl == null) {
1355-
break;
1355+
return null;
13561356
}
13571357
View currentFocus = viewRootImpl.getAccessibilityFocusedHost();
13581358
if (currentFocus == null) {
1359-
break;
1359+
return super.focusSearch(this, direction);
13601360
}
13611361
// If we have the focus try giving it to the first child.
13621362
if (currentFocus == this) {
1363-
final int firstVisiblePosition = getFirstVisiblePosition();
1364-
if (firstVisiblePosition >= 0) {
1363+
if (getChildCount() > 0) {
13651364
return getChildAt(0);
13661365
}
1367-
return null;
1366+
return super.focusSearch(this, direction);
13681367
}
13691368
// Find the item that has accessibility focus.
13701369
final int currentPosition = getPositionForView(currentFocus);
13711370
if (currentPosition < 0 || currentPosition >= getCount()) {
1372-
break;
1371+
return super.focusSearch(this, direction);
13731372
}
13741373
// Try to advance focus in the current item.
13751374
View currentItem = getChildAt(currentPosition - getFirstVisiblePosition());
@@ -1386,25 +1385,31 @@ public View focusSearch(View focused, int direction) {
13861385
final int nextPosition = currentPosition - getFirstVisiblePosition() + 1;
13871386
if (nextPosition < getChildCount()) {
13881387
return getChildAt(nextPosition);
1388+
} else {
1389+
return super.focusSearch(this, direction);
13891390
}
1390-
} break;
1391+
}
13911392
case ACCESSIBILITY_FOCUS_BACKWARD: {
13921393
ViewRootImpl viewRootImpl = getViewRootImpl();
13931394
if (viewRootImpl == null) {
1394-
break;
1395+
return null;
13951396
}
13961397
View currentFocus = viewRootImpl.getAccessibilityFocusedHost();
13971398
if (currentFocus == null) {
1398-
break;
1399+
return super.focusSearch(this, direction);
13991400
}
14001401
// If we have the focus do a generic search.
14011402
if (currentFocus == this) {
1403+
final int lastChildIndex = getChildCount() - 1;
1404+
if (lastChildIndex >= 0) {
1405+
return getChildAt(lastChildIndex);
1406+
}
14021407
return super.focusSearch(this, direction);
14031408
}
14041409
// Find the item that has accessibility focus.
14051410
final int currentPosition = getPositionForView(currentFocus);
14061411
if (currentPosition < 0 || currentPosition >= getCount()) {
1407-
break;
1412+
return super.focusSearch(this, direction);
14081413
}
14091414
// Try to advance focus in the current item.
14101415
View currentItem = getChildAt(currentPosition - getFirstVisiblePosition());
@@ -1422,7 +1427,7 @@ public View focusSearch(View focused, int direction) {
14221427
if (nextPosition >= 0) {
14231428
return getChildAt(nextPosition);
14241429
} else {
1425-
return this;
1430+
return super.focusSearch(this, direction);
14261431
}
14271432
}
14281433
}

0 commit comments

Comments
 (0)