am ce9e2526: Merge "Implement new accessibility APIs in lists, text view" into klp-dev

* commit 'ce9e2526d43159df931cc9c0ba7173960d8a6a06':
  Implement new accessibility APIs in lists, text view
This commit is contained in:
Alan Viverette
2013-08-28 10:49:44 -07:00
committed by Android Git Automerger
5 changed files with 98 additions and 27 deletions

View File

@ -30370,6 +30370,7 @@ package android.widget {
method protected void layoutChildren();
method public void onFilterComplete(int);
method public void onGlobalLayout();
method public void onInitializeAccessibilityNodeInfoForItem(android.view.View, int, android.view.accessibility.AccessibilityNodeInfo);
method public boolean onRemoteAdapterConnected();
method public void onRemoteAdapterDisconnected();
method public void onRestoreInstanceState(android.os.Parcelable);

View File

@ -2309,33 +2309,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
super.onInitializeAccessibilityNodeInfo(host, info);
final int position = getPositionForView(host);
final ListAdapter adapter = getAdapter();
if ((position == INVALID_POSITION) || (adapter == null)) {
return;
}
if (!isEnabled() || !adapter.isEnabled(position)) {
return;
}
if (position == getSelectedItemPosition()) {
info.setSelected(true);
info.addAction(AccessibilityNodeInfo.ACTION_CLEAR_SELECTION);
} else {
info.addAction(AccessibilityNodeInfo.ACTION_SELECT);
}
if (isClickable()) {
info.addAction(AccessibilityNodeInfo.ACTION_CLICK);
info.setClickable(true);
}
if (isLongClickable()) {
info.addAction(AccessibilityNodeInfo.ACTION_LONG_CLICK);
info.setLongClickable(true);
}
onInitializeAccessibilityNodeInfoForItem(host, position, info);
}
@Override
@ -2388,6 +2362,45 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
}
}
/**
* Initializes an {@link AccessibilityNodeInfo} with information about a
* particular item in the list.
*
* @param view View representing the list item.
* @param position Position of the list item within the adapter.
* @param info Node info to populate.
*/
public void onInitializeAccessibilityNodeInfoForItem(
View view, int position, AccessibilityNodeInfo info) {
final ListAdapter adapter = getAdapter();
if (position == INVALID_POSITION || adapter == null) {
// The item doesn't exist, so there's not much we can do here.
return;
}
if (!isEnabled() || !adapter.isEnabled(position)) {
info.setEnabled(false);
return;
}
if (position == getSelectedItemPosition()) {
info.setSelected(true);
info.addAction(AccessibilityNodeInfo.ACTION_CLEAR_SELECTION);
} else {
info.addAction(AccessibilityNodeInfo.ACTION_SELECT);
}
if (isClickable()) {
info.addAction(AccessibilityNodeInfo.ACTION_CLICK);
info.setClickable(true);
}
if (isLongClickable()) {
info.addAction(AccessibilityNodeInfo.ACTION_LONG_CLICK);
info.setLongClickable(true);
}
}
void positionSelector(int position, View sel) {
if (position != INVALID_POSITION) {
mSelectorPosition = position;

View File

@ -30,7 +30,10 @@ import android.view.ViewDebug;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeInfo.CollectionInfo;
import android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo;
import android.view.animation.GridLayoutAnimationController;
import android.widget.AbsListView.LayoutParams;
import android.widget.RemoteViews.RemoteView;
@ -2259,5 +2262,37 @@ public class GridView extends AbsListView {
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
info.setClassName(GridView.class.getName());
final int columnsCount = getNumColumns();
final int rowsCount = getCount() / columnsCount;
final CollectionInfo collectionInfo = CollectionInfo.obtain(columnsCount, rowsCount, false);
info.setCollectionInfo(collectionInfo);
}
@Override
public void onInitializeAccessibilityNodeInfoForItem(
View view, int position, AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfoForItem(view, position, info);
final int count = getCount();
final int columnsCount = getNumColumns();
final int rowsCount = count / columnsCount;
final int row;
final int column;
if (!mStackFromBottom) {
column = position % columnsCount;
row = position / columnsCount;
} else {
final int invertedIndex = count - 1 - position;
column = columnsCount - 1 - (invertedIndex % columnsCount);
row = rowsCount - 1 - invertedIndex / columnsCount;
}
final LayoutParams lp = (LayoutParams) view.getLayoutParams();
final boolean isHeading = lp != null && lp.viewType != ITEM_VIEW_TYPE_HEADER_OR_FOOTER;
final CollectionItemInfo itemInfo = CollectionItemInfo.obtain(column, 1, row, 1, isHeading);
info.setCollectionItemInfo(itemInfo);
}
}

View File

@ -42,6 +42,8 @@ import android.view.ViewParent;
import android.view.ViewRootImpl;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeInfo.CollectionInfo;
import android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo;
import android.widget.RemoteViews.RemoteView;
import java.util.ArrayList;
@ -3778,5 +3780,20 @@ public class ListView extends AbsListView {
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
info.setClassName(ListView.class.getName());
final int count = getCount();
final CollectionInfo collectionInfo = CollectionInfo.obtain(1, count, false);
info.setCollectionInfo(collectionInfo);
}
@Override
public void onInitializeAccessibilityNodeInfoForItem(
View view, int position, AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfoForItem(view, position, info);
final LayoutParams lp = (LayoutParams) view.getLayoutParams();
final boolean isHeading = lp != null && lp.viewType != ITEM_VIEW_TYPE_HEADER_OR_FOOTER;
final CollectionItemInfo itemInfo = CollectionItemInfo.obtain(0, 1, position, 1, isHeading);
info.setCollectionItemInfo(itemInfo);
}
}

View File

@ -4406,6 +4406,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
public void setError(CharSequence error, Drawable icon) {
createEditorIfNeeded();
mEditor.setError(error, icon);
notifyViewAccessibilityStateChangedIfNeeded();
}
@Override
@ -8147,6 +8148,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
if (mEditor != null) {
info.setInputType(mEditor.mInputType);
if (mEditor.mError != null) {
info.setContentInvalid(true);
}
}
if (!TextUtils.isEmpty(mText)) {