am e4c9ac2d: Merge "Remember which list child has A11y focus BEFORE clearing A11y focus." into jb-mr2-dev

* commit 'e4c9ac2df26f640fa9aeab5928e82bcc59a33da2':
  Remember which list child has A11y focus BEFORE clearing A11y focus.
This commit is contained in:
Svetoslav Ganov
2013-03-18 21:28:02 +00:00
committed by Android Git Automerger

View File

@@ -1550,6 +1550,32 @@ public class ListView extends AbsListView {
setSelectedPositionInt(mNextSelectedPosition);
// Remember which child, if any, had accessibility focus. This must
// occur before recycling any views, since that will clear
// accessibility focus.
final ViewRootImpl viewRootImpl = getViewRootImpl();
if (viewRootImpl != null) {
final View accessFocusedView = viewRootImpl.getAccessibilityFocusedHost();
if (accessFocusedView != null) {
final View accessFocusedChild = findAccessibilityFocusedChild(
accessFocusedView);
if (accessFocusedChild != null) {
if (!dataChanged || isDirectChildHeaderOrFooter(accessFocusedChild)) {
// If the views won't be changing, try to maintain
// focus on the current view host and (if
// applicable) its virtual view.
accessibilityFocusLayoutRestoreView = accessFocusedView;
accessibilityFocusLayoutRestoreNode = viewRootImpl
.getAccessibilityFocusedVirtualView();
} else {
// Otherwise, try to maintain focus at the same
// position.
accessibilityFocusPosition = getPositionForView(accessFocusedChild);
}
}
}
}
// Pull all children into the RecycleBin.
// These views will be reused if possible
final int firstPosition = mFirstPosition;
@@ -1590,30 +1616,6 @@ public class ListView extends AbsListView {
requestFocus();
}
// Remember which child, if any, had accessibility focus.
final ViewRootImpl viewRootImpl = getViewRootImpl();
if (viewRootImpl != null) {
final View accessFocusedView = viewRootImpl.getAccessibilityFocusedHost();
if (accessFocusedView != null) {
final View accessFocusedChild = findAccessibilityFocusedChild(
accessFocusedView);
if (accessFocusedChild != null) {
if (!dataChanged || isDirectChildHeaderOrFooter(accessFocusedChild)) {
// If the views won't be changing, try to maintain
// focus on the current view host and (if
// applicable) its virtual view.
accessibilityFocusLayoutRestoreView = accessFocusedView;
accessibilityFocusLayoutRestoreNode = viewRootImpl
.getAccessibilityFocusedVirtualView();
} else {
// Otherwise, try to maintain focus at the same
// position.
accessibilityFocusPosition = getPositionForView(accessFocusedChild);
}
}
}
}
// Clear out old views
detachAllViewsFromParent();
recycleBin.removeSkippedScrap();