Repetir acciones en estado con RxJava

Esto está en Kotlin, pero creo que cualquiera que escriba Java podrá entender.

Estoy tratando de hacer un cronómetro con Rx y estoy teniendo un pequeño problema al hacer la parada real y comenzar. El gran problema es que no sé cómo mantener la hora actual, mientras la modifico cuando entran diferentes acciones (comenzar y parar). Esto es lo que tengo ahora.

fullTime.switchMap { startTime -> controlCommands.switchMap { command -> when (command) { ControlState.PLAY -> Observable.interval(1L, TimeUnit.SECONDS).map { ControlState.PLAY } ControlState.PAUSE -> Observable.just(ControlState.PAUSE) else -> Observable.just(ControlState.STOP) } } } 

Donde los fullTime y controlCommands son Observable que emiten events sobre la hora de inicio actual para realizar una count regresiva y decir qué hacer a continuación, respectivamente. Quiero desconectarme de los controlCommands de controlCommands y ser capaz de mantener el estado comenzando en el time de inicio, que contará hacia atrás cuando aparezca un evento de PLAY , pausará cuando aparezca PAUSE , y lo reiniciará en el momento de startTime cuando aparezca STOP .

scan casi funciona, pero no sé cómo parar después de que el timer llegue a 0 y todavía se está enviando PLAY cada segundo, ya que enviaría información duplicada. Tampoco permite una separación entre el estado y el valor observado. Entonces, el valor que acumulo con el scan debe ser del mismo tipo que el valor dentro del Observable (si tiene sentido).

¿Alguna idea de lo que debería hacer?