package Ġorg . simple . clin ic . login . pin Ċ Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Observable Source Ċ import Ġio . reactivex . Observable Transformer Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . rx kotlin . of Type Ċ import Ġorg . simple . clin ic . user . O ngo ing Login Entry Ċ import Ġorg . simple . clin ic . user . User Session Ċ import Ġorg . simple . clin ic . widgets . Ui Event Ċ Ċ class ĠUpdate Login Entry With Entered Pin ( private Ġval Ġuser Session : ĠUser Session ) Ġ: ĠObservable Transformer < Ui Event , ĠUi Event > Ġ{ ĊĊĠ Ġoverride Ġfun Ġapply ( upstream : ĠObservable < Ui Event >): ĠObservable Source < Ui Event > Ġ{ ĊĠĠĠ Ġval Ġentered Pin Ġ= Ġupstream ĊĠĠĠĠĠĠĠ Ġ. of Type < Login Pin Authenticated >() ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . pin Ġ} ĊĊĠĠĠ Ġval Ġupdated Entry Stream Ġ= Ġentered Pin ĊĠĠĠĠĠĠĠ Ġ. flatMap Single ( this :: current Entry With New Pin ) ĊĠĠĠĠĠĠĠ Ġ. flatMap Single ( this :: save Updated Login Entry ) ĊĠĠĠĠĠĠĠ Ġ. map (:: Login Pin Screen Updated Login Entry ) ĊĊĠĠĠ Ġreturn Ġupstream . merge With ( updated Entry Stream ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsave Updated Login Entry ( new Entry : ĠO ngo ing Login Entry ): ĠSingle < O ngo ing Login Entry > Ġ{ ĊĠĠĠ Ġreturn Ġuser Session ĊĠĠĠĠĠĠĠ Ġ. save O ngo ing Login Entry ( new Entry ) ĊĠĠĠĠĠĠĠ Ġ. to Single Default ( new Entry ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcurrent Entry With New Pin ( pin : ĠString ): ĠSingle < O ngo ing Login Entry > Ġ{ ĊĠĠĠ Ġreturn Ġuser Session ĊĠĠĠĠĠĠĠ Ġ. ongo ing Login Entry () ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . copy ( pin Ġ= Ġpin ) Ġ} ĊĠ Ġ} Ċ } Ċ