package Ġorg . erg op l atform . ios . transactions Ċ Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġorg . erg op l atform . explorer . client . model . Transaction Info Ċ import Ġorg . erg op l atform . ios . ui .* Ċ import Ġorg . erg op l atform . transactions . Signing Result Ċ import Ġorg . erg op l atform . transactions . cold Signing Response To Qr Chunks Ċ import Ġorg . erg op l atform . transactions . reduce Boxes Ċ import Ġorg . erg op l atform . ui logic .* Ċ import Ġorg . erg op l atform . ui logic . transactions . Col d Wallet Signing Ui Logic Ċ import Ġorg . ro bo vm . apple . core graphics . C GRect Ċ import Ġorg . ro bo vm . apple . u ikit .* Ċ Ċ class ĠC old Wallet Signing ViewController ( private Ġval Ġsigning Request Chunk : ĠString , Ġprivate Ġval Ġwallet Id : ĠInt ) Ġ: ĊĠĠĠ ĠCor outine ViewController () Ġ{ ĊĊĠĠĠ Ġval Ġui Logic Ġ= ĠI os Ui Logic () ĊĠĠĠ Ġval Ġtexts Ġ= Ġget App Delegate (). texts ĊĊĠĠĠ Ġprivate Ġval Ġscanning Container Ġ= ĠSc anning Container () ĊĠĠĠ Ġprivate Ġval Ġtransaction Container Ġ= ĠTransaction Container () ĊĠĠĠ Ġprivate Ġval Ġsigned Qr Codes Container Ġ= ĠSigned Qr Code Container () ĊĊĠĠĠ Ġoverride Ġfun Ġview Did Load () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . view Did Load () ĊĊĠĠĠĠĠĠĠ Ġview . layout Margins Ġ= ĠUI Edge Insets . Zero () ĊĠĠĠĠĠĠĠ Ġval Ġtexts Ġ= Ġget App Delegate (). texts ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtexts . get ( STRING _ TITLE _ SIGN ING _ REQUEST ) ĊĠĠĠĠĠĠĠ Ġview . backgroundColor Ġ= ĠUI Color . system Background () ĊĠĠĠĠĠĠĠ Ġnavigation Controller . navigation Bar ?. tint Color Ġ= ĠUI Color . label () ĊĊĠĠĠĠĠĠĠ Ġval Ġscrolling Container Ġ= ĠUIView ( C GRect . Zero ()) ĊĠĠĠĠĠĠĠ Ġval Ġscroll View Ġ= Ġscrolling Container . wrap In Vertical ScrollView () ĊĊĠĠĠĠĠĠĠ Ġview . add Sub view ( scroll View ) ĊĠĠĠĠĠĠĠ Ġscrolling Container . add Sub view ( sc anning Container ) ĊĠĠĠĠĠĠĠ Ġscrolling Container . add Sub view ( transaction Container ) ĊĠĠĠĠĠĠĠ Ġscrolling Container . add Sub view ( signed Qr Codes Container ) ĊĊĠĠĠĠĠĠĠ Ġscanning Container . edges To Super view ( maxWidth Ġ= ĠMAX _ WIDTH ) ĊĠĠĠĠĠĠĠ Ġtransaction Container . edges To Super view ( maxWidth Ġ= ĠMAX _ WIDTH ) ĊĠĠĠĠĠĠĠ Ġsigned Qr Codes Container . edges To Super view ( maxWidth Ġ= ĠMAX _ WIDTH ) ĊĠĠĠĠĠĠĠ Ġscroll View . edges To Super view () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġview Will Ap pear ( animated : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . view Will Ap pear ( animated ) ĊĠĠĠĠĠĠĠ Ġui Logic . set Wallet Id ( wallet Id , Ġget App Delegate (). database ) ĊĠĠĠĠĠĠĠ Ġadd Qr Code Chunk ( signing Request Chunk ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Qr Code Chunk ( qr Code Chunk : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġui Logic . add Qr Code Chunk ( qr Code Chunk ) ĊĊĠĠĠĠĠĠĠ Ġscanning Container . status Text . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexts . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTRING _ LABEL _ QR _ PAGES _ INFO , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Logic . qr Pages Collector . pages Added , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Logic . qr Pages Collector . pages Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġscanning Container . error Text . text Ġ= Ġui Logic . last ErrorMessage Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠ Ġui Logic . transaction Info ?. reduce Boxes ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Container . bind Transaction ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrefresh Ui State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh Ui State () Ġ{ ĊĠĠĠĠĠĠĠ Ġscanning Container . is Hidden Ġ= Ġui Logic . state Ġ!= ĠC old Wallet Signing Ui Logic . State . SCAN NING ĊĠĠĠĠĠĠĠ Ġtransaction Container . is Hidden Ġ= Ġui Logic . state Ġ!= ĠC old Wallet Signing Ui Logic . State . WAIT ING _ TO _ CONFIRM ĊĠĠĠĠĠĠĠ Ġsigned Qr Codes Container . is Hidden Ġ= Ġui Logic . state Ġ!= ĠC old Wallet Signing Ui Logic . State . PRESENT _ RESULT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġscan Next () Ġ{ ĊĠĠĠĠĠĠĠ Ġpresent ViewController ( Qr Scanner ViewController ( invoke After Dismiss al Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Qr Code Chunk ( it ) ĊĠĠĠĠĠĠĠ Ġ}, Ġtrue ) Ġ{} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠSc anning Container Ġ: ĠUIView ( C GRect . Zero ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatus Text Ġ= ĠHead line 2 Label (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Alignment Ġ= ĠN ST ext Alignment . Center ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġerror Text Ġ= ĠBody 1 Bold Label (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextColor Ġ= Ġui Color E rg o ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Alignment Ġ= ĠN ST ext Alignment . Center ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Ġ= ĠUI ImageView ( get I os System Image ( IMAGE _ QR _ CODE , ĠUI Image Symbol Scale . Large , Ġ 1 5 0 . 0 )). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Mode Ġ= ĠUIView Content Mode . Center ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt int Color Ġ= ĠUI Color . secondary Label () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscan Next Button Ġ= ĠPrimary Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexts . get ( STRING _ LABEL _ SCAN _ QR ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget I os System Image ( IMAGE _ QR _ SCAN , ĠUI Image Symbol Scale . Small ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Touch Up Inside Listener Ġ{ Ġ_, Ġ_ Ġ-> Ġscan Next () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Sub view ( image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Sub view ( status Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Sub view ( error Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Sub view ( scan Next Button ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage . fixed Height ( 2 0 0 . 0 ). top To Super view (). width Matches Super view () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Text . top To Bottom Of ( image , ĠDEFAULT _ M ARGIN Ġ* Ġ 2 ). width Matches Super view () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Text . top To Bottom Of ( status Text , ĠDEFAULT _ M ARGIN Ġ* Ġ 2 ). width Matches Super view () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscan Next Button . top To Bottom Of ( error Text , ĠDEFAULT _ M ARGIN Ġ* Ġ 2 ). bottom To Super view ( can Be Less Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fixed Width ( 2 0 0 . 0 ). center Horizontal () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠTransaction Container Ġ: ĠUI Stack View () Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġin boxes List Ġ= ĠUI Stack View (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaxis Ġ= ĠU ILayout Constraint Axis . Vertical ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġout Boxes List Ġ= ĠUI Stack View (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaxis Ġ= ĠU ILayout Constraint Axis . Vertical ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaxis Ġ= ĠU ILayout Constraint Axis . Vertical ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspacing Ġ= ĠDEFAULT _ M ARGIN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Margins Ġ= ĠUI Edge Insets ( DEFAULT _ M ARGIN Ġ* Ġ 2 , Ġ 0 . 0 , ĠDEFAULT _ M ARGIN Ġ* Ġ 2 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Layout Margins Relative Arrange ment Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Arrange d Sub view ( Body 2 Bold Label (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtexts . get ( STRING _ DESC _ SIGN ING _ REQUEST ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Arrange d Sub view ( create Horizontal Separator ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Arrange d Sub view ( Body 1 Bold Label (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtexts . get ( STRING _ TITLE _ IN BOX ES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextColor Ġ= Ġui Color E rg o ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Arrange d Sub view ( Body 2 Label (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtexts . get ( STRING _ DESC _ IN BOX ES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Arrange d Sub view ( in boxes List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Arrange d Sub view ( create Horizontal Separator ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Arrange d Sub view ( Body 1 Bold Label (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtexts . get ( STRING _ TITLE _ OUT BOX ES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextColor Ġ= Ġui Color E rg o ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Arrange d Sub view ( Body 2 Label (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtexts . get ( STRING _ DESC _ OUT BOX ES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Arrange d Sub view ( out Boxes List ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsign Button Ġ= ĠPrimary Button ( texts . get ( STRING _ LABEL _ CONFIRM )). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Touch Up Inside Listener Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Auth Flow ( ui Logic . wallet !!. wallet Config ) Ġ{ Ġmnemonic Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Logic . sign Tx With Mnemonic Async ( mn emonic , ĠI os String Provider ( texts )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbutton Container Ġ= ĠUIView ( C GRect . Zero ()). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Sub view ( sign Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign Button . fixed Width ( 1 0 0 . 0 ). center Horizontal (). bottom To Super view () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. top To Super view ( top Inset Ġ= ĠDEFAULT _ M ARGIN Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Arrange d Sub view ( button Container ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind Transaction ( transaction Info : ĠTransaction Info ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin boxes List . clear Arrange d Sub views () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Info . inputs . forEach Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin boxes List . add Arrange d Sub view ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransaction Box Entry View (). bind Box View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . address , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . assets , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexts ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Boxes List . clear Arrange d Sub views () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Info . outputs . forEach Ġ{ Ġoutput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Boxes List . add Arrange d Sub view ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransaction Box Entry View (). bind Box View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . address , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . assets , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexts ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠSigned Qr Code Container Ġ: ĠP aged Qr Code Container ( texts , Ġtexts . get ( STRING _ LABEL _ DIS MIS S )) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcalc Chunks From RawData ( raw Data : ĠString , Ġlimit : ĠInt ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcold Signing Response To Qr Chunks ( raw Data , Ġlimit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcontinue Button Pressed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Controller . pop ViewController ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠI os Ui Logic Ġ: ĠC old Wallet Signing Ui Logic () Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġprogress ViewController Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProgress ViewController . Progress ViewController Presenter ( this @ Col d Wallet Signing ViewController ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġcoroutine Scope : ĠCor outine Scope ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġview Controller Scope ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnotify Ui Locked ( locked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun On MainThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress ViewController . set Ui Locked ( locked ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnotify Signing Result ( er go Tx Result : ĠSign ing Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun On MainThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( er go Tx Result . success Ġ&& Ġui Logic . signed Qr Code Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsigned Qr Codes Container . raw Data Ġ= Ġui Logic . signed Qr Code ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Ui State () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġtexts . get ( STRING _ ERROR _ PRE PARE _ TRANSACTION ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġer go Tx Result . error Msg ?. let Ġ{ Ġ"\ n \ n $ it " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresent ViewController ( build Simple Alert Controller ("", Ġmessage , Ġtexts ), Ġtrue ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }