Код выглядит не понятно. Я предлагаю написать так
 if ((statusNotPassed(STATUS_PREPARE) || repeat)&& (dist <= PREPARE_DISTANCE)) {
     if (dist >= PREPARE_DISTANCE_END) {
или 
  if (dist >= PREPARE_DISTANCE_END || repeat) {
    .....

То есть я не хочу чтобы эмулировалось сбрасывание состояния через statusPassed... 
Это должно улучшить читабельность. Пожалуйста отпишитесь, хочу побыстрее закрыть это request.