summaryrefslogtreecommitdiff
path: root/core/java/android/view/FocusFinder.java
diff options
context:
space:
mode:
authorYabin Huang <yabinh@google.com>2020-06-10 15:37:59 -0700
committerYabin Huang <yabinh@google.com>2020-07-24 22:03:51 +0000
commit18048e074b88671efda2c07b82426085b57c87de (patch)
tree7d0a80fef388406305f5643da7dfd99697015493 /core/java/android/view/FocusFinder.java
parent5df07126d5741970d757767cf9d3eacaf39876cf (diff)
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)
Diffstat (limited to 'core/java/android/view/FocusFinder.java')
-rw-r--r--core/java/android/view/FocusFinder.java19
1 files changed, 11 insertions, 8 deletions
diff --git a/core/java/android/view/FocusFinder.java b/core/java/android/view/FocusFinder.java
index 713cfb48c95f..064bc6947fc4 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<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;
+ return focusables.get(0);
}
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;
+ return focusables.get(count - 1);
}
private static View getNextKeyboardNavigationCluster(