From 9cdf4c9559fea99ce2808bda0b4463479aa90120 Mon Sep 17 00:00:00 2001 From: pfthomas Date: Wed, 2 Mar 2022 07:52:22 -0800 Subject: [PATCH] [MaterialTimePicker][a11y] Fix wrong clock item selection PiperOrigin-RevId: 431938695 --- .../material/timepicker/ClockFaceView.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/lib/java/com/google/android/material/timepicker/ClockFaceView.java b/lib/java/com/google/android/material/timepicker/ClockFaceView.java index b4019f9e26e..e0fed4e49e3 100644 --- a/lib/java/com/google/android/material/timepicker/ClockFaceView.java +++ b/lib/java/com/google/android/material/timepicker/ClockFaceView.java @@ -277,22 +277,26 @@ private void findIntersectingTextView() { continue; } tv.getDrawingRect(textViewRect); - textViewRect.offset(tv.getPaddingLeft(), tv.getPaddingTop()); offsetDescendantRectToMyCoords(tv, textViewRect); - scratch.set(textViewRect); - if (RectF.intersects(selectorBox, scratch)) { - tv.getPaint().setShader(getGradient(selectorBox)); - tv.setSelected(true); - } else { - tv.getPaint().setShader(null); // clear - tv.setSelected(false); - } + // set selection + tv.setSelected(selectorBox.contains(textViewRect.centerX(), textViewRect.centerY())); + + // set gradient + RadialGradient radialGradient = getGradientForTextView(selectorBox, textViewRect, tv); + tv.getPaint().setShader(radialGradient); tv.invalidate(); } } - private RadialGradient getGradient(RectF selectorBox) { + @Nullable + private RadialGradient getGradientForTextView(RectF selectorBox, Rect tvBox, TextView tv) { + scratch.set(tvBox); + scratch.offset(tv.getPaddingLeft(), tv.getPaddingTop()); + if (!RectF.intersects(selectorBox, scratch)) { + return null; + } + return new RadialGradient( (selectorBox.centerX() - scratch.left), (selectorBox.centerY() - scratch.top),