package Ġorg . simple . clin ic . registration . register Ċ Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Observable Source Ċ import Ġio . reactivex . Observable Transformer Ċ import Ġio . reactivex . rx kotlin . of Type Ċ import Ġorg . simple . clin ic . registration . Registration Result . Network Error Ċ import Ġorg . simple . clin ic . registration . Registration Result . Success Ċ import Ġorg . simple . clin ic . registration . Registration Result . Unexpected Error Ċ import Ġorg . simple . clin ic . user . User Session Ċ import Ġorg . simple . clin ic . widgets . Screen Created Ċ import Ġorg . simple . clin ic . widgets . Ui Event Ċ import Ġjavax . inject . Inject Ċ Ċ type alias ĠUi Ġ= ĠRegistration Loading Screen Ċ type alias ĠUi Change Ġ= Ġ( Ui ) Ġ-> ĠUnit Ċ Ċ class ĠRegistration Loading Screen Controller Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġuser Session : ĠUser Session Ċ ) Ġ: ĠObservable Transformer < Ui Event , ĠUi Change > Ġ{ ĊĊĠ Ġoverride Ġfun Ġapply ( events : ĠObservable < Ui Event >): ĠObservable Source < Ui Change > Ġ{ ĊĠĠĠ Ġreturn Ġregister On Start ( events ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġregister On Start ( events : ĠObservable < Ui Event >): ĠObservable < Ui Change > Ġ{ ĊĊĠĠĠ Ġval Ġretry Click s Ġ= Ġevents . of Type < Register Error Retry Clicked >() ĊĠĠĠ Ġval Ġcreates Ġ= Ġevents . of Type < Screen Created >() ĊĊĠĠĠ Ġval Ġregister Ġ= ĠObservable ĊĠĠĠĠĠĠĠ Ġ. merge ( creates , Ġretry Click s ) ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġuser Session ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Observable () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. replay () ĊĠĠĠĠĠĠĠ Ġ. ref Count () ĊĊĠĠĠ Ġval Ġclear O ngo ing Entry Ġ= Ġregister ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġis ĠSuccess Ġ} ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġuser Session . clear O ngo ing Registration Entry () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and Then ( Observable . never < Ui Change >()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġshow Screen Changes Ġ= Ġregister . map Ġ{ ĊĠĠĠĠĠ Ġ{ Ġui : ĠUi Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠSuccess Ġ-> Ġui . open Home Screen () ĊĠĠĠĠĠĠĠĠĠ ĠNetwork Error Ġ-> Ġui . show Network Error () ĊĠĠĠĠĠĠĠĠĠ ĠUnexpected Error Ġ-> Ġui . show Unexpected Error () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġshow Screen Changes . merge With ( clear O ngo ing Entry ) ĊĠ Ġ} Ċ } Ċ