From 18048e074b88671efda2c07b82426085b57c87de Mon Sep 17 00:00:00 2001 From: Yabin Huang Date: Wed, 10 Jun 2020 15:37:59 -0700 Subject: [PATCH] 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 713af5fdd39a2b56efe89d1125d6864f92c6298f) --- core/java/android/view/FocusFinder.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/core/java/android/view/FocusFinder.java b/core/java/android/view/FocusFinder.java index 713cfb48c95f1..064bc6947fc43 100644 --- a/core/java/android/view/FocusFinder.java +++ b/core/java/android/view/FocusFinder.java @@ -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,29 +376,29 @@ public class FocusFinder { } private static View getNextFocusable(View focused, ArrayList 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; + return focusables.get(0); } private static View getPreviousFocusable(View focused, ArrayList 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; + return focusables.get(count - 1); } private static View getNextKeyboardNavigationCluster(