diff options
Diffstat (limited to 'core/java/android/widget/GridView.java')
| -rw-r--r-- | core/java/android/widget/GridView.java | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java index 63147dd73411..15daf83c6003 100644 --- a/core/java/android/widget/GridView.java +++ b/core/java/android/widget/GridView.java @@ -20,6 +20,7 @@ import android.content.Context; import android.content.Intent; import android.content.res.TypedArray; import android.graphics.Rect; +import android.os.Trace; import android.util.AttributeSet; import android.view.Gravity; import android.view.KeyEvent; @@ -29,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; @@ -1364,6 +1368,8 @@ public class GridView extends AbsListView { */ private void setupChild(View child, int position, int y, boolean flow, int childrenLeft, boolean selected, boolean recycled, int where) { + Trace.traceBegin(Trace.TRACE_TAG_VIEW, "setupGridItem"); + boolean isSelected = selected && shouldShowSelector(); final boolean updateChildSelected = isSelected != child.isSelected(); final int mode = mTouchMode; @@ -1459,6 +1465,8 @@ public class GridView extends AbsListView { != position) { child.jumpDrawablesToCurrentState(); } + + Trace.traceEnd(Trace.TRACE_TAG_VIEW); } /** @@ -2254,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); } } |
