Program: 86942
Project: 86942
Buggy source:
@Override public boolean onPreferenceChange(@NonNull Preference preference,Object value){
  final String key=preference.getKey();
  final String previousAudibleMode=modePreference.getValue();
  final double previousMin=Double.parseDouble(minPreference.getText());
  final double previousMax=Double.parseDouble(maxPreference.getText());
switch (key) {
case "String_Node_Str":
    final boolean audibleEnabled=(Boolean)value;
  if (audibleEnabled) {
    MyAudible.startAudible();
  }
 else {
    MyAudible.stopAudible();
  }
break;
case "String_Node_Str":
final String audibleMode=(String)value;
if (!audibleMode.equals(previousAudibleMode)) {
final double units=Convert.metric ? Convert.KPH : Convert.MPH;
final double min;
final double max;
switch (audibleMode) {
case "String_Node_Str":
min=0;
max=Math.round(62.6 / units);
break;
case "String_Node_Str":
min=Math.round(-62.6 / units);
max=0;
break;
case "String_Node_Str":
min=0;
max=3;
break;
default :
Log.e(TAG,"String_Node_Str" + audibleMode);
min=0;
max=1;
}
minPreference.setText(Double.toString(min));
maxPreference.setText(Double.toString(max));
updateAudibleMode(audibleMode,min,max);
}
break;
case "String_Node_Str":
final double min=Double.parseDouble((String)value);
updateAudibleMode(previousAudibleMode,min,previousMax);
break;
case "String_Node_Str":
final double max=Double.parseDouble((String)value);
updateAudibleMode(previousAudibleMode,previousMin,max);
break;
case "String_Node_Str":
final double speechRate=Double.parseDouble((String)value);
updateSpeechRate(speechRate);
break;
}
return true;
}

Fixed version (ground truth):
@Override public boolean onPreferenceChange(@NonNull Preference preference,Object value){
  final String key=preference.getKey();
  final String previousAudibleMode=modePreference.getValue();
  final double previousMin=Util.parseDouble(minPreference.getText());
  final double previousMax=Util.parseDouble(maxPreference.getText());
switch (key) {
case "String_Node_Str":
    final boolean audibleEnabled=(Boolean)value;
  if (audibleEnabled) {
    MyAudible.startAudible();
  }
 else {
    MyAudible.stopAudible();
  }
break;
case "String_Node_Str":
final String audibleMode=(String)value;
if (!audibleMode.equals(previousAudibleMode)) {
final double units=Convert.metric ? Convert.KPH : Convert.MPH;
final double min;
final double max;
switch (audibleMode) {
case "String_Node_Str":
min=0;
max=Math.round(62.6 / units);
break;
case "String_Node_Str":
min=Math.round(-62.6 / units);
max=0;
break;
case "String_Node_Str":
min=0;
max=3;
break;
default :
Log.e(TAG,"String_Node_Str" + audibleMode);
min=0;
max=1;
}
minPreference.setText(Double.toString(min));
maxPreference.setText(Double.toString(max));
updateAudibleMode(audibleMode,min,max);
}
break;
case "String_Node_Str":
final double min=Util.parseDouble((String)value);
if (!Util.isReal(min)) return false;
updateAudibleMode(previousAudibleMode,min,previousMax);
break;
case "String_Node_Str":
final double max=Util.parseDouble((String)value);
if (!Util.isReal(max)) return false;
updateAudibleMode(previousAudibleMode,previousMin,max);
break;
case "String_Node_Str":
final double speechRate=Util.parseDouble((String)value);
if (!Util.isReal(speechRate)) return false;
updateSpeechRate(speechRate);
break;
}
return true;
}