From a64f1c742f2f8da8205ea8e4c263c67be34fe65c Mon Sep 17 00:00:00 2001 From: manabu-nakamura Date: Mon, 12 Aug 2024 19:58:35 +0900 Subject: [PATCH 1/8] [Slider][RangeSlider] valueFrom and valueTo can have the same value --- lib/java/com/google/android/material/slider/BaseSlider.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/java/com/google/android/material/slider/BaseSlider.java b/lib/java/com/google/android/material/slider/BaseSlider.java index 6ca6cd6856a..547875b6c5d 100644 --- a/lib/java/com/google/android/material/slider/BaseSlider.java +++ b/lib/java/com/google/android/material/slider/BaseSlider.java @@ -574,14 +574,14 @@ private boolean maybeIncreaseTrackSidePadding() { } private void validateValueFrom() { - if (valueFrom >= valueTo) { + if (valueFrom > valueTo) { throw new IllegalStateException( String.format(EXCEPTION_ILLEGAL_VALUE_FROM, valueFrom, valueTo)); } } private void validateValueTo() { - if (valueTo <= valueFrom) { + if (valueTo < valueFrom) { throw new IllegalStateException( String.format(EXCEPTION_ILLEGAL_VALUE_TO, valueTo, valueFrom)); } @@ -2437,7 +2437,7 @@ private void updateThumbWidthWhenPressed() { } private double snapPosition(float position) { - if (stepSize > 0.0f) { + if (stepSize > 0.0f && valueTo != valueFrom) { int stepCount = (int) ((valueTo - valueFrom) / stepSize); return Math.round(position * stepCount) / (double) stepCount; } From 421f83b3c8fceb71258b0d9cc7693dbec18e2e5a Mon Sep 17 00:00:00 2001 From: manabu-nakamura Date: Fri, 27 Sep 2024 23:49:11 +0900 Subject: [PATCH 2/8] [Slider][RangeSlider] valueFrom and valueTo can have the same value --- lib/java/com/google/android/material/slider/BaseSlider.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/java/com/google/android/material/slider/BaseSlider.java b/lib/java/com/google/android/material/slider/BaseSlider.java index 547875b6c5d..93265367d46 100644 --- a/lib/java/com/google/android/material/slider/BaseSlider.java +++ b/lib/java/com/google/android/material/slider/BaseSlider.java @@ -2071,7 +2071,10 @@ private void drawInactiveTrack(@NonNull Canvas canvas, int width, int yCenter) { * being on the far left, and 1 on the far right. */ private float normalizeValue(float value) { - float normalized = (value - valueFrom) / (valueTo - valueFrom); + float normalized = 0; + if (valueTo != valueFrom) { + normalized = (value - valueFrom) / (valueTo - valueFrom); + } if (isRtl()) { return 1 - normalized; } From e9ba7f28d659175eb0d668d6bb445fe428dbd4f7 Mon Sep 17 00:00:00 2001 From: manabu-nakamura Date: Mon, 30 Sep 2024 13:58:12 +0900 Subject: [PATCH 3/8] [Slider][RangeSlider] valueFrom and valueTo can have the same value --- lib/java/com/google/android/material/slider/BaseSlider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/java/com/google/android/material/slider/BaseSlider.java b/lib/java/com/google/android/material/slider/BaseSlider.java index 93265367d46..b5760200e06 100644 --- a/lib/java/com/google/android/material/slider/BaseSlider.java +++ b/lib/java/com/google/android/material/slider/BaseSlider.java @@ -1997,7 +1997,7 @@ protected void onDraw(@NonNull Canvas canvas) { float first = values.get(0); float last = values.get(values.size() - 1); - if (last < valueTo || (values.size() > 1 && first > valueFrom)) { + if (last < valueTo || (values.size() > 1 && first > valueFrom) || valueTo == valueFrom) { drawInactiveTrack(canvas, trackWidth, yCenter); } if (last > valueFrom) { From 6ab7ec86e0c90ce0dcf2f161d840c19e8990123e Mon Sep 17 00:00:00 2001 From: manabu-nakamura Date: Tue, 22 Oct 2024 20:35:18 +0900 Subject: [PATCH 4/8] [Slider][RangeSlider] valueFrom and valueTo can have the same value --- .../com/google/android/material/slider/BaseSlider.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/lib/java/com/google/android/material/slider/BaseSlider.java b/lib/java/com/google/android/material/slider/BaseSlider.java index b5760200e06..8b64edad51a 100644 --- a/lib/java/com/google/android/material/slider/BaseSlider.java +++ b/lib/java/com/google/android/material/slider/BaseSlider.java @@ -224,8 +224,6 @@ abstract class BaseSlider< + " stepSize(%s)"; private static final String EXCEPTION_ILLEGAL_VALUE_FROM = "valueFrom(%s) must be smaller than valueTo(%s)"; - private static final String EXCEPTION_ILLEGAL_VALUE_TO = - "valueTo(%s) must be greater than valueFrom(%s)"; private static final String EXCEPTION_ILLEGAL_STEP_SIZE = "The stepSize(%s) must be 0, or a factor of the valueFrom(%s)-valueTo(%s) range"; private static final String EXCEPTION_ILLEGAL_MIN_SEPARATION = @@ -580,13 +578,6 @@ private void validateValueFrom() { } } - private void validateValueTo() { - if (valueTo < valueFrom) { - throw new IllegalStateException( - String.format(EXCEPTION_ILLEGAL_VALUE_TO, valueTo, valueFrom)); - } - } - private boolean valueLandsOnTick(float value) { // Check that the value is a multiple of stepSize given the offset of valueFrom. double result = @@ -669,7 +660,6 @@ private void warnAboutFloatingPointError() { private void validateConfigurationIfDirty() { if (dirtyConfig) { validateValueFrom(); - validateValueTo(); validateStepSize(); validateValues(); validateMinSeparation(); From a5873f88f2054e5b09bebbf962ddb134d6a1334d Mon Sep 17 00:00:00 2001 From: manabu-nakamura Date: Fri, 6 Dec 2024 19:18:24 +0900 Subject: [PATCH 5/8] [Slider][RangeSlider] valueFrom and valueTo can have the same value --- lib/java/com/google/android/material/slider/BaseSlider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/java/com/google/android/material/slider/BaseSlider.java b/lib/java/com/google/android/material/slider/BaseSlider.java index 3d0466e57b1..f8f8fb0b182 100644 --- a/lib/java/com/google/android/material/slider/BaseSlider.java +++ b/lib/java/com/google/android/material/slider/BaseSlider.java @@ -239,7 +239,7 @@ abstract class BaseSlider< "Value(%s) must be equal to valueFrom(%s) plus a multiple of stepSize(%s) when using" + " stepSize(%s)"; private static final String EXCEPTION_ILLEGAL_VALUE_FROM = - "valueFrom(%s) must be smaller than valueTo(%s)"; + "valueFrom(%s) must be smaller than or equal to valueTo(%s)"; private static final String EXCEPTION_ILLEGAL_STEP_SIZE = "The stepSize(%s) must be 0, or a factor of the valueFrom(%s)-valueTo(%s) range"; private static final String EXCEPTION_ILLEGAL_MIN_SEPARATION = From bda669053a0ed47394901f985c1595ed6523be45 Mon Sep 17 00:00:00 2001 From: manabu-nakamura Date: Sat, 11 Jan 2025 21:25:17 +0900 Subject: [PATCH 6/8] [Slider][RangeSlider] valueFrom and valueTo can have the same value --- lib/java/com/google/android/material/slider/BaseSlider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/java/com/google/android/material/slider/BaseSlider.java b/lib/java/com/google/android/material/slider/BaseSlider.java index 717eb4aedee..99520293c3d 100644 --- a/lib/java/com/google/android/material/slider/BaseSlider.java +++ b/lib/java/com/google/android/material/slider/BaseSlider.java @@ -3099,7 +3099,7 @@ protected boolean pickActiveThumb() { if (compare(valueDiff, activeThumbDiff) == 0) { // Two thumbs on the same value and we don't have enough movement to use direction yet. - if (abs(valueX - touchX) < scaledTouchSlop) { + if (abs(valueX - touchX) < scaledTouchSlop && valueFrom != valueTo) { activeThumbIdx = -1; return false; } From 6b38a032f05d278d8060c4af245aeaefb38077cb Mon Sep 17 00:00:00 2001 From: manabu-nakamura Date: Sat, 11 Jan 2025 21:37:24 +0900 Subject: [PATCH 7/8] [Slider][RangeSlider] valueFrom and valueTo can have the same value --- lib/java/com/google/android/material/slider/BaseSlider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/java/com/google/android/material/slider/BaseSlider.java b/lib/java/com/google/android/material/slider/BaseSlider.java index 99520293c3d..043e09514c9 100644 --- a/lib/java/com/google/android/material/slider/BaseSlider.java +++ b/lib/java/com/google/android/material/slider/BaseSlider.java @@ -3099,7 +3099,7 @@ protected boolean pickActiveThumb() { if (compare(valueDiff, activeThumbDiff) == 0) { // Two thumbs on the same value and we don't have enough movement to use direction yet. - if (abs(valueX - touchX) < scaledTouchSlop && valueFrom != valueTo) { + if (abs(valueX - touchX) < scaledTouchSlop && valueTo != valueFrom) { activeThumbIdx = -1; return false; } From 5eb09e6ca372a747ce9ae15629583177a09a9a10 Mon Sep 17 00:00:00 2001 From: manabu-nakamura Date: Sun, 19 Jan 2025 10:12:12 +0900 Subject: [PATCH 8/8] [Slider][RangeSlider] valueFrom and valueTo can have the same value --- lib/java/com/google/android/material/slider/BaseSlider.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/java/com/google/android/material/slider/BaseSlider.java b/lib/java/com/google/android/material/slider/BaseSlider.java index 755c8bc5569..7d904dd4524 100644 --- a/lib/java/com/google/android/material/slider/BaseSlider.java +++ b/lib/java/com/google/android/material/slider/BaseSlider.java @@ -2570,10 +2570,7 @@ private void populateInactiveTrackLeftRect(int width, int yCenter) { * being on the far left, and 1 on the far right. */ private float normalizeValue(float value) { - float normalized = 0; - if (valueTo != valueFrom) { - normalized = (value - valueFrom) / (valueTo - valueFrom); - } + float normalized = (valueTo != valueFrom) ? (value - valueFrom) / (valueTo - valueFrom) : 0; if (isRtl() || isVertical()) { return 1 - normalized; }