summaryrefslogtreecommitdiff
path: root/core/java/android/widget/GridView.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/widget/GridView.java')
-rw-r--r--core/java/android/widget/GridView.java40
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);
}
}