package Ġcom . s yle im an . my foot prints . presentation Layer . activities . photo Editor . presenter . state Machine . transitions Ċ Ċ import Ġcom . s yle im an . my foot prints . presentation Layer . activities . photo Editor . presenter . state Machine . I StateMachine For Transition Ċ import Ġcom . s yle im an . my foot prints . presentation Layer . activities . photo Editor . viewModel . IP h oto Editor Model Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ Ċ /** ĠTransition Ġfor Ġsome Ġjob Ġ*/ Ċ abstract Ġclass ĠNot Empty Transition ( ĊĠĠĠ Ġstate Machine : ĠI StateMachine For Transition , ĊĠĠĠ Ġprotected Ġval Ġmodel Ġ: ĠI Photo Editor Model ) Ġ: ĠTransition Base ( state Machine ) Ċ { ĊĠĠĠ Ġprotected Ġfun Ġprocess In Background ( background Thread Action Ġ: Ġ() -> Unit , Ġui Thread Action Ġ: Ġ() -> Unit ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoperation Ġ= ĠObservable . from Callable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Thread Action . invoke () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Machine . register Long Operation ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui Thread Action . invoke () ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ Ġe Ġ-> ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠError ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Machine . register Long Operation ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġstate Machine . register Long Operation ( operation ) ĊĠĠĠ Ġ} Ċ }