From c09f4d331a32eada48fe4086f2035bd47204e046 Mon Sep 17 00:00:00 2001 From: Stefan Andonian Date: Thu, 27 Feb 2025 13:23:27 -0800 Subject: [PATCH] Fix OutlineProvider for PageIndicatorDots for new visual updates. Bug: 394355070 Test: Verified locally that the active indicator is outlined properly. Flag: com.android.launcher3.enable_launcher_visual_refresh Change-Id: Ia8bd95285292c532f741707e446c83df01c3d540 --- .../pageindicators/PageIndicatorDots.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/com/android/launcher3/pageindicators/PageIndicatorDots.java b/src/com/android/launcher3/pageindicators/PageIndicatorDots.java index 37f51899aa..81d362f5c4 100644 --- a/src/com/android/launcher3/pageindicators/PageIndicatorDots.java +++ b/src/com/android/launcher3/pageindicators/PageIndicatorDots.java @@ -81,6 +81,7 @@ public class PageIndicatorDots extends View implements Insettable, PageIndicator // This is used to optimize the onDraw method by not constructing a new RectF each draw. private static final RectF sTempRect = new RectF(); + private static final Rect sLastActiveRect = new Rect(); private static final FloatProperty CURRENT_POSITION = new FloatProperty("current_position") { @@ -515,6 +516,9 @@ public class PageIndicatorDots extends View implements Insettable, PageIndicator } } } + if (Math.round(mCurrentPosition) == i) { + sTempRect.roundOut(sLastActiveRect); + } canvas.drawRoundRect(sTempRect, mDotRadius, mDotRadius, mPaginationPaint); // TODO(b/394355070) Verify RTL experience works correctly with visual updates @@ -567,6 +571,7 @@ public class PageIndicatorDots extends View implements Insettable, PageIndicator sTempRect.left = sTempRect.right - rectWidth; } + sTempRect.roundOut(sLastActiveRect); return sTempRect; } @@ -590,15 +595,7 @@ public class PageIndicatorDots extends View implements Insettable, PageIndicator @Override public void getOutline(View view, Outline outline) { if (mEntryAnimationRadiusFactors == null) { - // TODO(b/394355070): Verify Outline works correctly with visual updates - RectF activeRect = getActiveRect(); - outline.setRoundRect( - (int) activeRect.left, - (int) activeRect.top, - (int) activeRect.right, - (int) activeRect.bottom, - mDotRadius - ); + outline.setRoundRect(sLastActiveRect, mDotRadius); } } }