From ce00ba3778721b6a8e15b7027576ac7ad2d689d1 Mon Sep 17 00:00:00 2001 From: pubiqq Date: Wed, 15 May 2024 18:11:43 +0000 Subject: [PATCH] [ProgressIndicator] Fix ArithmeticException when calculating the phase Resolves https://github.com/material-components/material-components-android/pull/4154 GIT_ORIGIN_REV_ID=d5aedbbd23f1b6d126263cba8960df0bc36386c4 PiperOrigin-RevId: 634014470 --- .../DrawableWithAnimatedVisibilityChange.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/java/com/google/android/material/progressindicator/DrawableWithAnimatedVisibilityChange.java b/lib/java/com/google/android/material/progressindicator/DrawableWithAnimatedVisibilityChange.java index d82984d7a45..f6992aa3c93 100644 --- a/lib/java/com/google/android/material/progressindicator/DrawableWithAnimatedVisibilityChange.java +++ b/lib/java/com/google/android/material/progressindicator/DrawableWithAnimatedVisibilityChange.java @@ -451,15 +451,18 @@ float getPhaseFraction() { if (mockPhaseFraction > 0) { return mockPhaseFraction; } + float phaseFraction = 0f; - if (baseSpec.speed != 0) { + if (baseSpec.hasWavyEffect() && baseSpec.speed != 0) { float durationScale = animatorDurationScaleProvider.getSystemAnimatorDurationScale( context.getContentResolver()); - int cycleInMs = (int) (1000f * baseSpec.wavelength / baseSpec.speed * durationScale); - phaseFraction = (float) (System.currentTimeMillis() % cycleInMs) / cycleInMs; - if (phaseFraction < 0f) { - phaseFraction = (phaseFraction % 1) + 1f; + if (durationScale > 0f) { + int cycleInMs = (int) (1000f * baseSpec.wavelength / baseSpec.speed * durationScale); + phaseFraction = (float) (System.currentTimeMillis() % cycleInMs) / cycleInMs; + if (phaseFraction < 0f) { + phaseFraction = (phaseFraction % 1) + 1f; + } } } return phaseFraction;