package Ġcom . thor nb ir ds . framework ext . component . presenter Ċ Ċ import Ġandroidx . annotation . Call Super Ċ import Ġcom . thor nb ir ds . framework ext . component . page . Base Page Controller Ċ import Ġio . reactivex . Observable Transformer Ċ import Ġio . reactivex . subjects . Behavior Subject Ċ import Ġcom . thor nb ir ds . component . presenter . Component Presenter Ġas ĠPres enter Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġyang li Ġon Ġ 2 0 1 7 / 8 / 2 . Ċ Ġ* Ċ Ġ* Ġ@ module Ġ åħ·æľī Rx çĶŁåĳ½ åĳ¨æľŁ ç»ĳ å®ļçļĦ è¡¨ çİ° Ċ Ġ*/ Ċ type alias ĠComponent Presenter < VIEW > Ġ= ĠPres enter < VIEW , ĠBase Page Controller > Ċ Ċ abstract Ġclass ĠRx Life Cycle Presenter < VIEW >( ĊĠĠĠ Ġcontroller : ĠBase Page Controller Ċ ) Ġ: ĠComponent Presenter < VIEW >( controller ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġm Behavior Subject : ĠBehavior Subject < Presenter Event > Ġ= ĠBehavior Subject . create () ĊĊĠĠĠ Ġ@ Call Super ĊĠĠĠ Ġoverride Ġfun Ġstart Presenter () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Behavior Subject . onNext ( Presenter Event . START ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Call Super ĊĠĠĠ Ġoverride Ġfun Ġstop Presenter () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Behavior Subject . onNext ( Presenter Event . STOP ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Call Super ĊĠĠĠ Ġoverride Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Behavior Subject . onNext ( Presenter Event . DESTROY ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġ< T > Ġbind Until Event ( event : ĠPres enter Event ): ĠObservable Transformer < T , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbind Until Event ( m Behavior Subject , Ġevent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġenum Ġclass ĠPres enter Event Ġ{ ĊĠĠĠĠĠĠĠ ĠSTART , ĠSTOP , ĠDEST ROY ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġ< T , ĠR > Ġbind Until Event ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubject : ĠBehavior Subject < R >, Ġevent : ĠR ĊĠĠĠĠĠĠĠ Ġ): ĠObservable Transformer < T , ĠT > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠObservable Transformer Ġ{ Ġupstream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupstream . take Until ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject . filter Ġ{ Ġr Ġ-> Ġr Ġ== Ġevent Ġ}). take ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }