Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit df315180 authored by Tony Wickham's avatar Tony Wickham
Browse files

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
parent d5d7fa10
Loading
Loading
Loading
Loading
+18 −6
Original line number Diff line number Diff line
@@ -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 {