Skip to content

Commit 6168ae4

Browse files
Utkarsh-vishnoimaciej.lodygowski
authored andcommitted
Android Implementation for Secondary Progress
1 parent 7986cc0 commit 6168ae4

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
@@ -69,3 +69,6 @@ src/dist
6969
# Expo
7070
.expo
7171
web-build
72+
73+
# VS Code
74+
.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
@@ -57,6 +57,8 @@ public class ReactSlider extends AppCompatSeekBar {
5757
*/
5858
private double mValue = 0;
5959

60+
private double mBufferedValue = 0;
61+
6062
private boolean isSliding = false;
6163

6264
/** If zero it's determined automatically. */
@@ -120,6 +122,11 @@ private void disableStateListAnimatorIfNeeded() {
120122
updateValue();
121123
}
122124

125+
/* package */ void setBufferedValue(double value) {
126+
mBufferedValue = value;
127+
updateBufferedValue();
128+
}
129+
123130
/* package */ void setStep(double step) {
124131
mStep = step;
125132
updateAll();
@@ -263,6 +270,10 @@ private void updateValue() {
263270
setProgress((int) Math.round((mValue - mMinValue) / (mMaxValue - mMinValue) * getTotalSteps()));
264271
}
265272

273+
private void updateBufferedValue() {
274+
setSecondaryProgress((int) Math.round((mBufferedValue - mMinValue) / (mMaxValue - mMinValue) * getTotalSteps()));
275+
}
276+
266277
private int getTotalSteps() {
267278
return (int) Math.ceil((mMaxValue - mMinValue) / getStepValue());
268279
}

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, double 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
@@ -106,6 +106,12 @@ public void setValue(ReactSlider view, float value) {
106106
ReactSliderManagerImpl.setValue(view, value);
107107
}
108108

109+
@Override
110+
@ReactProp(name = "bufferedValue", defaultFloat = 0f)
111+
public void setBufferedValue(ReactSlider view, float value) {
112+
ReactSliderManagerImpl.setBufferedValue(view, value);
113+
}
114+
109115
@Override
110116
@ReactProp(name = "minimumValue", defaultFloat = 0f)
111117
public void setMinimumValue(ReactSlider view, double value) {
@@ -136,6 +142,12 @@ public void setMinimumTrackTintColor(ReactSlider view, Integer color) {
136142
ReactSliderManagerImpl.setMinimumTrackTintColor(view, color);
137143
}
138144

145+
@Override
146+
@ReactProp(name = "bufferedTrackTintColor", customType = "Color")
147+
public void setBufferedTrackTintColor(ReactSlider view, Integer color) {
148+
ReactSliderManagerImpl.setBufferedTrackTintColor(view, color);
149+
}
150+
139151
@Override
140152
@ReactProp(name = "maximumTrackTintColor", customType = "Color")
141153
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
@@ -125,6 +125,11 @@ public void setValue(ReactSlider view, float value) {
125125
ReactSliderManagerImpl.setValue(view, value);
126126
}
127127

128+
@ReactProp(name = "bufferedValue", defaultFloat = 0f)
129+
public void setBufferedValue(ReactSlider view, float value) {
130+
ReactSliderManagerImpl.setBufferedValue(view, value);
131+
}
132+
128133
@ReactProp(name = "minimumValue", defaultFloat = 0f)
129134
public void setMinimumValue(ReactSlider view, double value) {
130135
ReactSliderManagerImpl.setMinimumValue(view, value);
@@ -160,6 +165,11 @@ public void setMinimumTrackTintColor(ReactSlider view, Integer color) {
160165
ReactSliderManagerImpl.setMinimumTrackTintColor(view, color);
161166
}
162167

168+
@ReactProp(name = "bufferedTrackTintColor", customType = "Color")
169+
public void setBufferedTrackTintColor(ReactSlider view, Integer color) {
170+
ReactSliderManagerImpl.setBufferedTrackTintColor(view, color);
171+
}
172+
163173
@ReactProp(name = "thumbImage")
164174
public void setThumbImage(ReactSlider view, @Nullable ReadableMap source) {
165175
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
@@ -87,6 +87,15 @@ type Props = ViewProps &
8787
*/
8888
value?: number;
8989

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

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

352363
SliderWithRef.defaultProps = {
353364
value: 0,
365+
bufferedValue: 0,
354366
minimumValue: 0,
355367
maximumValue: 1,
356368
step: 0,

package/typings/index.d.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,12 @@ export interface SliderProps
108108
*/
109109
minimumTrackTintColor?: string;
110110

111+
/**
112+
* The color used for the buffered track (secondaryProgress)
113+
* Overrides the default grey gradient image.
114+
*/
115+
bufferedTrackTintColor?: string;
116+
111117
/**
112118
* Initial minimum value of the slider. Default value is 0.
113119
*/
@@ -157,6 +163,15 @@ export interface SliderProps
157163
*/
158164
value?: number;
159165

166+
/**
167+
* Write-only property representing the bufferedValue of the slider.
168+
* Entered once at the beginning still acts as an initial value.
169+
* The value should be between minimumValue and maximumValue,
170+
* which default to 0 and 1 respectively.
171+
* Default value is 0.
172+
*/
173+
bufferedValue?: number;
174+
160175
/**
161176
* Reverses the direction of the slider.
162177
*/

0 commit comments

Comments
 (0)