From 2ecbe69ddd4fc93e83c2810ab88abb03e4f9f718 Mon Sep 17 00:00:00 2001 From: Niklas Brunlid Date: Thu, 2 Nov 2017 09:26:37 +0100 Subject: Avoid overflow in focus fudge calculation When comparing decoding the next View to get focus, the last-resort calculation (magic number and square of distance between the View corners) could overflow, giving a false positive. This causes the focus to jump around in certain cases. Change from int to long to avoid in the foreseeable future. Test: Manual - Use a phone with an 18:9 ratio (1080*2160) - make FrameworksCoreTests - adb install -r out/target/product/aurora/data/app/FrameworksCoreTests/FrameworksCoreTests.apk - adb shell am instrument -r -w -e class android.widget.scroll.ScrollViewButtonsAndLabelsTest#testArrowScrollUpOffScreenVerticalFadingEdge com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner Change-Id: I119cd66f563cfa312c2304bb910c27075e674e59 --- core/java/android/view/FocusFinder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/java/android/view/FocusFinder.java b/core/java/android/view/FocusFinder.java index af26a88e877c..21b72f3eb8c1 100644 --- a/core/java/android/view/FocusFinder.java +++ b/core/java/android/view/FocusFinder.java @@ -530,7 +530,7 @@ public class FocusFinder { * axis distances. Warning: this fudge factor is finely tuned, be sure to * run all focus tests if you dare tweak it. */ - int getWeightedDistanceFor(int majorAxisDistance, int minorAxisDistance) { + long getWeightedDistanceFor(long majorAxisDistance, long minorAxisDistance) { return 13 * majorAxisDistance * majorAxisDistance + minorAxisDistance * minorAxisDistance; } -- cgit v1.2.3-59-g8ed1b