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

Commit 713af5fd authored by Yabin Huang's avatar Yabin Huang
Browse files

Update FocusFinder

Don't return the current view when finding the next or previous view.

Bug: 158492287
Test: atest cts/tests/tests/view/src/android/view/cts/FocusFinderTest.java
atest frameworks/base/core/tests/coretests/src/android/view/FocusFinderTest.java

Change-Id: Ib5c1854d1a13b9469ca55dfbf0be61bead47e29e
parent 82352f9d
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
@@ -311,6 +311,9 @@ public class FocusFinder {
        }

        final int count = focusables.size();
        if (count < 2) {
            return null;
        }
        switch (direction) {
            case View.FOCUS_FORWARD:
                return getNextFocusable(focused, focusables, count);
@@ -373,30 +376,30 @@ public class FocusFinder {
    }

    private static View getNextFocusable(View focused, ArrayList<View> focusables, int count) {
        if (count < 2) {
            return null;
        }
        if (focused != null) {
            int position = focusables.lastIndexOf(focused);
            if (position >= 0 && position + 1 < count) {
                return focusables.get(position + 1);
            }
        }
        if (!focusables.isEmpty()) {
        return focusables.get(0);
    }
        return null;
    }

    private static View getPreviousFocusable(View focused, ArrayList<View> focusables, int count) {
        if (count < 2) {
            return null;
        }
        if (focused != null) {
            int position = focusables.indexOf(focused);
            if (position > 0) {
                return focusables.get(position - 1);
            }
        }
        if (!focusables.isEmpty()) {
        return focusables.get(count - 1);
    }
        return null;
    }

    private static View getNextKeyboardNavigationCluster(
            View root,