Skip to content

Commit 51e8e9c

Browse files
Android Implementation for Secondary Progress
1 parent c282de0 commit 51e8e9c

File tree

8 files changed

+84
-0
lines changed

8 files changed

+84
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,6 @@ src/dist
6767
# Expo
6868
.expo
6969
web-build
70+
71+
# VS Code
72+
.vscode

package/android/src/main/java/com/reactnativecommunity/slider/ReactSlider.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ public class ReactSlider extends AppCompatSeekBar {
5555
*/
5656
private double mValue = 0;
5757

58+
private double mBufferedValue = 0;
59+
5860
private boolean isSliding = false;
5961

6062
/** If zero it's determined automatically. */
@@ -109,6 +111,11 @@ private void disableStateListAnimatorIfNeeded() {
109111
updateValue();
110112
}
111113

114+
/* package */ void setBufferedValue(double value) {
115+
mBufferedValue = value;
116+
updateBufferedValue();
117+
}
118+
112119
/* package */ void setStep(double step) {
113120
mStep = step;
114121
updateAll();
@@ -238,6 +245,10 @@ private void updateValue() {
238245
setProgress((int) Math.round((mValue - mMinValue) / (mMaxValue - mMinValue) * getTotalSteps()));
239246
}
240247

248+
private void updateBufferedValue() {
249+
setSecondaryProgress((int) Math.round((mBufferedValue - mMinValue) / (mMaxValue - mMinValue) * getTotalSteps()));
250+
}
251+
241252
private int getTotalSteps() {
242253
return (int) Math.ceil((mMaxValue - mMinValue) / getStepValue());
243254
}

package/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManagerImpl.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ public static void setValue(ReactSlider view, double value) {
4444
}
4545
}
4646

47+
public static void setBufferedValue(ReactSlider view, double value) {
48+
view.setBufferedValue(value);
49+
}
50+
4751
public static void setMinimumValue(ReactSlider view, float value) {
4852
view.setMinValue(value);
4953
}
@@ -116,6 +120,21 @@ public static void setMaximumTrackTintColor(ReactSlider view, Integer color) {
116120
}
117121
}
118122

123+
public static void setBufferedTrackTintColor(ReactSlider view, Integer color) {
124+
LayerDrawable drawable = (LayerDrawable) view.getProgressDrawable().getCurrent();
125+
Drawable secondaryProgress = drawable.findDrawableByLayerId(android.R.id.secondaryProgress);
126+
if (color == null) {
127+
secondaryProgress.clearColorFilter();
128+
} else {
129+
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
130+
secondaryProgress.setColorFilter(new PorterDuffColorFilter((int)color, PorterDuff.Mode.SRC_IN));
131+
}
132+
else {
133+
secondaryProgress.setColorFilter(color, PorterDuff.Mode.SRC_IN);
134+
}
135+
}
136+
}
137+
119138
public static void setInverted(ReactSlider view, boolean inverted) {
120139
if (inverted) view.setScaleX(-1f);
121140
else view.setScaleX(1f);

package/android/src/newarch/java/com/reactnativecommunity/slider/ReactSliderManager.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,12 @@ public void setValue(ReactSlider view, float value) {
110110
ReactSliderManagerImpl.setValue(view, value);
111111
}
112112

113+
@Override
114+
@ReactProp(name = "bufferedValue", defaultFloat = 0f)
115+
public void setBufferedValue(ReactSlider view, float value) {
116+
ReactSliderManagerImpl.setBufferedValue(view, value);
117+
}
118+
113119
@Override
114120
@ReactProp(name = "minimumValue", defaultFloat = 0f)
115121
public void setMinimumValue(ReactSlider view, float value) {
@@ -140,6 +146,12 @@ public void setMinimumTrackTintColor(ReactSlider view, Integer color) {
140146
ReactSliderManagerImpl.setMinimumTrackTintColor(view, color);
141147
}
142148

149+
@Override
150+
@ReactProp(name = "bufferedTrackTintColor", customType = "Color")
151+
public void setBufferedTrackTintColor(ReactSlider view, Integer color) {
152+
ReactSliderManagerImpl.setBufferedTrackTintColor(view, color);
153+
}
154+
143155
@Override
144156
@ReactProp(name = "maximumTrackTintColor", customType = "Color")
145157
public void setMaximumTrackTintColor(ReactSlider view, Integer color) {

package/android/src/oldarch/java/com/reactnativecommunity/slider/ReactSliderManager.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,11 @@ public void setValue(ReactSlider view, float value) {
138138
ReactSliderManagerImpl.setValue(view, value);
139139
}
140140

141+
@ReactProp(name = "bufferedValue", defaultFloat = 0f)
142+
public void setBufferedValue(ReactSlider view, float value) {
143+
ReactSliderManagerImpl.setBufferedValue(view, value);
144+
}
145+
141146
@ReactProp(name = "minimumValue", defaultFloat = 0f)
142147
public void setMinimumValue(ReactSlider view, float value) {
143148
ReactSliderManagerImpl.setMinimumValue(view, value);
@@ -173,6 +178,11 @@ public void setMinimumTrackTintColor(ReactSlider view, Integer color) {
173178
ReactSliderManagerImpl.setMinimumTrackTintColor(view, color);
174179
}
175180

181+
@ReactProp(name = "bufferedTrackTintColor", customType = "Color")
182+
public void setBufferedTrackTintColor(ReactSlider view, Integer color) {
183+
ReactSliderManagerImpl.setBufferedTrackTintColor(view, color);
184+
}
185+
176186
@ReactProp(name = "thumbImage")
177187
public void setThumbImage(ReactSlider view, @Nullable ReadableMap source) {
178188
ReactSliderManagerImpl.setThumbImage(view, source);

package/src/RNCSliderNativeComponent.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export interface NativeProps extends ViewProps {
2626
maximumValue?: Float;
2727
minimumTrackImage?: ImageSource;
2828
minimumTrackTintColor?: ColorValue;
29+
bufferedTrackTintColor?: ColorValue;
2930
minimumValue?: Float;
3031
onChange?: BubblingEventHandler<Event>;
3132
onRNCSliderSlidingStart?: DirectEventHandler<Event>;
@@ -37,6 +38,7 @@ export interface NativeProps extends ViewProps {
3738
thumbTintColor?: ColorValue;
3839
trackImage?: ImageSource;
3940
value?: Float;
41+
bufferedValue?: Float;
4042
lowerLimit?: Float;
4143
upperLimit?: Float;
4244
}

package/src/Slider.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,15 @@ type Props = ViewProps &
8686
*/
8787
value?: number;
8888

89+
/**
90+
* Write-only property representing the secondaryProgress of the slider.
91+
* Entered once at the beginning still acts as an initial value.
92+
* The value should be between minimumValue and maximumValue,
93+
* which default to 0 and 1 respectively.
94+
* Default value is 0.
95+
*/
96+
bufferedValue?: number;
97+
8998
/**
9099
* Step value of the slider. The value should be
91100
* between 0 and (maximumValue - minimumValue).
@@ -119,6 +128,8 @@ type Props = ViewProps &
119128
*/
120129
minimumTrackTintColor?: ColorValue;
121130

131+
bufferedTrackTintColor?: ColorValue;
132+
122133
/**
123134
* The color used for the track to the right of the button.
124135
* Overrides the default blue gradient image on iOS.
@@ -275,6 +286,7 @@ const SliderWithRef = React.forwardRef(SliderComponent);
275286

276287
SliderWithRef.defaultProps = {
277288
value: 0,
289+
bufferedValue: 0,
278290
minimumValue: 0,
279291
maximumValue: 1,
280292
step: 0,

package/typings/index.d.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,12 @@ export interface SliderProps
9494
*/
9595
minimumTrackTintColor?: string;
9696

97+
/**
98+
* The color used for the buffered track (secondaryProgress)
99+
* Overrides the default grey gradient image.
100+
*/
101+
bufferedTrackTintColor?: string;
102+
97103
/**
98104
* Initial minimum value of the slider. Default value is 0.
99105
*/
@@ -143,6 +149,15 @@ export interface SliderProps
143149
*/
144150
value?: number;
145151

152+
/**
153+
* Write-only property representing the bufferedValue of the slider.
154+
* Entered once at the beginning still acts as an initial value.
155+
* The value should be between minimumValue and maximumValue,
156+
* which default to 0 and 1 respectively.
157+
* Default value is 0.
158+
*/
159+
bufferedValue?: number;
160+
146161
/**
147162
* Reverses the direction of the slider.
148163
*/

0 commit comments

Comments
 (0)