ручка onKeyDown с использованием RxAndroid

Я использую https://github.com/mkoslacz/Moviper для своего приложения для Android Tv Box. Существует только одно действие с несколькими дочерними фрагментами. Я хочу распространять onKeyDown на дочерние фрагменты, только если событие еще не обработано. Это было легко обойтись без использования RxJava. Я мог бы возвратить логическое значение, чтобы сказать, что событие уже обработано или нет. Есть ли способ, которым я могу справиться с ним, используя RxJava? Я использую Kotlin как исходный язык. Вот что я пытаюсь сделать.

class MainActivity : ViperAiPassiveActivity<HomeContract.View>(), HomeContract.View { private val keyPressSubject = BehaviorSubject.create<KeyEvent>() private lateinit var predicate: (KeyEvent) -> Boolean override fun keyPresses(predicate: (KeyEvent) -> Boolean): Observable<KeyEvent> { this.predicate = predicate return keyPressSubject } override fun createPresenter() = HomePresenter() override fun getLayoutId(): Int { return R.layout.activity_main } override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { event?.run { if (predicate(event)) { keyPressSubject.onNext(event) return true } } return super.onKeyDown(keyCode, event) } } 

Я закончил создание своего собственного обработчика событий (хотя его не используют RxJava, но он выполняет эту работу в моем случае)

 object KeyEventManager { private val handlers: MutableMap<Int, (KeyEvent?) -> Boolean> = ArrayMap() fun register(handler: (KeyEvent?) -> Boolean): Int { val id = (handlers.keys.max() ?: 0) + 1 handlers.put(id, handler) return id } fun unregister(id: Int) { handlers.remove(id) } fun postEvent(event: KeyEvent?): Boolean { for (key in handlers.keys) { handlers.get(key)?.run { if (invoke(event)) { return true } } } return false } }