fix switch trackColor on Android. fixes #23962 (#23977)

Summary:
fixes #23962, where trackColor is reset when value changed. This PR will set trackColor corresponding trackColor every-time value changes.

[Android] [Changed] - Fix Switch trackColor
Pull Request resolved: https://github.com/facebook/react-native/pull/23977

Differential Revision: D14495206

Pulled By: hramos

fbshipit-source-id: d712f540cd3f8359d6e85f79c12732689870a112
This commit is contained in:
Dulmandakh 2019-03-16 07:30:04 -07:00 committed by Mike Grabowski
parent 4260907b90
commit becc15468f
2 changed files with 15 additions and 6 deletions

View File

@ -54,6 +54,10 @@ class BasicSwitchExample extends React.Component<
<Switch
testID="on-off-initial-off"
onValueChange={value => this.setState({falseSwitchIsOn: value})}
trackColor={{
true: 'yellow',
false: 'purple',
}}
value={this.state.falseSwitchIsOn}
/>
<OnOffIndicator

View File

@ -36,6 +36,7 @@ import javax.annotation.Nullable;
if (mAllowChange && isChecked() != checked) {
mAllowChange = false;
super.setChecked(checked);
setTrackColor(checked);
}
}
@ -59,12 +60,7 @@ import javax.annotation.Nullable;
// If the switch has a different value than the value sent by JS, we must change it.
if (isChecked() != on) {
super.setChecked(on);
if (mTrackColorForTrue != null || mTrackColorForFalse != null) {
// Update the track color to reflect the new value. We only want to do this if these
// props were actually set from JS; otherwise we'll just reset the color to the default.
Integer currentTrackColor = on ? mTrackColorForTrue : mTrackColorForFalse;
setTrackColor(currentTrackColor);
}
setTrackColor(on);
}
mAllowChange = true;
}
@ -90,4 +86,13 @@ import javax.annotation.Nullable;
setTrackColor(mTrackColorForFalse);
}
}
private void setTrackColor(boolean checked) {
if (mTrackColorForTrue != null || mTrackColorForFalse != null) {
// Update the track color to reflect the new value. We only want to do this if these
// props were actually set from JS; otherwise we'll just reset the color to the default.
Integer currentTrackColor = checked ? mTrackColorForTrue : mTrackColorForFalse;
setTrackColor(currentTrackColor);
}
}
}