Don't add cells to FocusLogic sparse matrix if they aren't focusable.

Previously, any child of ShortcutAndWidgetContainer was added to the
matrix, causing widgets (which aren't focusable) to be considered as
potential targets to gain focus when an arrow key was pressed. But if
the algorithm chose them, they couldn't take the focus so nothing
happened (i.e. the focus stayed on the app/folder it was on before).

Bug: 25126768
Change-Id: Id55fc310f7f58fb8795cce51dcefe4fd1210f788
This commit is contained in:
Tony Wickham
2015-10-21 17:50:22 -07:00
parent d5d7fa10af
commit df315180f0
+18 -6
View File
@@ -165,8 +165,12 @@ public class FocusLogic {
// Iterate thru the children.
for (int i = 0; i < parent.getChildCount(); i++ ) {
int cx = ((CellLayout.LayoutParams) parent.getChildAt(i).getLayoutParams()).cellX;
int cy = ((CellLayout.LayoutParams) parent.getChildAt(i).getLayoutParams()).cellY;
View cell = parent.getChildAt(i);
if (!cell.isFocusable()) {
continue;
}
int cx = ((CellLayout.LayoutParams) cell.getLayoutParams()).cellX;
int cy = ((CellLayout.LayoutParams) cell.getLayoutParams()).cellY;
matrix[invert ? (m - cx - 1) : cx][cy] = i;
}
if (DEBUG) {
@@ -199,8 +203,12 @@ public class FocusLogic {
// Iterate thru the children of the top parent.
for (int i = 0; i < iconParent.getChildCount(); i++) {
int cx = ((CellLayout.LayoutParams) iconParent.getChildAt(i).getLayoutParams()).cellX;
int cy = ((CellLayout.LayoutParams) iconParent.getChildAt(i).getLayoutParams()).cellY;
View cell = iconParent.getChildAt(i);
if (!cell.isFocusable()) {
continue;
}
int cx = ((CellLayout.LayoutParams) cell.getLayoutParams()).cellX;
int cy = ((CellLayout.LayoutParams) cell.getLayoutParams()).cellY;
matrix[cx][cy] = i;
}
@@ -253,8 +261,12 @@ public class FocusLogic {
// Iterate thru the children of the top parent.
for (int i = 0; i < iconParent.getChildCount(); i++) {
int cx = ((CellLayout.LayoutParams) iconParent.getChildAt(i).getLayoutParams()).cellX;
int cy = ((CellLayout.LayoutParams) iconParent.getChildAt(i).getLayoutParams()).cellY;
View cell = iconParent.getChildAt(i);
if (!cell.isFocusable()) {
continue;
}
int cx = ((CellLayout.LayoutParams) cell.getLayoutParams()).cellX;
int cy = ((CellLayout.LayoutParams) cell.getLayoutParams()).cellY;
if (pivotX < 0) {
matrix[cx - pivotX][cy] = i;
} else {