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

Commit 18048e07 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
(cherry picked from commit 713af5fd)
parent 5df07126
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,