Skip to content

Commit

Permalink
fix switch trackColor on Android. fixes #23962 (#23977)
Browse files Browse the repository at this point in the history
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: #23977

Differential Revision: D14495206

Pulled By: hramos

fbshipit-source-id: d712f540cd3f8359d6e85f79c12732689870a112
  • Loading branch information
dulmandakh authored and facebook-github-bot committed Mar 16, 2019
1 parent 508daf2 commit d6ee448
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 6 deletions.
4 changes: 4 additions & 0 deletions RNTester/js/SwitchExample.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ public void setChecked(boolean checked) {
if (mAllowChange && isChecked() != checked) {
mAllowChange = false;
super.setChecked(checked);
setTrackColor(checked);
}
}

Expand All @@ -59,12 +60,7 @@ public void setThumbColor(@Nullable Integer color) {
// 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;
}
Expand All @@ -90,4 +86,13 @@ public void setTrackColorForFalse(@Nullable Integer color) {
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);
}
}
}

0 comments on commit d6ee448

Please sign in to comment.