/** Ċ Ġ* ĠB read Wallet Ċ Ġ* Ċ Ġ* ĠCreated Ġby ĠA hs an ĠBut t Ġ< ah san . but t @ bread wallet . com > Ġon Ġ 1 2 / 0 9 / 2 0 . Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 Ġb read wallet ĠLLC Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġcom . bread wallet . ui . u ig ift Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . core . view . is G one Ċ import Ġcom . blue lin el abs . cond uctor . Router Transaction Ċ import Ġcom . bread wallet . bread box . format Crypto For Ui Ċ import Ġcom . bread wallet . ui . Base Controller Ċ import Ġcom . bread wallet . ui . Base Mob ius Controller Ċ import Ġcom . bread wallet . ui . View Effect Ċ import Ġcom . bread wallet . ui . change handlers . Bottom Sheet Change Handler Ċ import Ġcom . bread wallet . ui . change handlers . Dialog Change Handler Ċ import Ġcom . bread wallet . ui . controllers . AlertDialog Controller Ċ import Ġcom . bread wallet . ui . flow bind . click s Ċ import Ġcom . bread wallet . ui . flow bind . text Changes Ċ import Ġcom . bread wallet . ui . format Fi at For Ui Ċ import Ġcom . bread wallet . ui . u ig ift . databinding . Controller Create Gift Binding Ċ import Ġcom . bread wallet . ui . u ig ift . Create Gift . M Ċ import Ġcom . bread wallet . ui . u ig ift . Create Gift . E Ċ import Ġcom . bread wallet . ui . u ig ift . Create Gift . F Ċ import Ġcom . bread wallet . ui . u ig ift . Create Gift . State Ċ import Ġcom . bread wallet . ui . u ig ift . Create Gift . Fi at Amount Option Ċ import Ġcom . bread wallet . ui . u ig ift . databinding . Controller Confirm Gift Details Binding Ċ import Ġcom . bread wallet . util . Currency Code Ċ import Ġcom . google . android . material . button . Material Button Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġkotlinx . coroutines . flow . merge Ċ import Ġorg . kode in . di . direct Ċ import Ġorg . kode in . di . er ased . instance Ċ import Ġjava . math . BigDecimal Ċ Ċ private Ġconst Ġval ĠCUR RE NCY _ ID Ġ= Ġ" currency _ id " Ċ private Ġconst Ġval ĠFI AT _ AMOUNT _ OPTIONS Ġ= Ġ 5 Ċ Ċ interface ĠConfirm ation Listener Ġ{ ĊĠĠĠ Ġfun Ġon Confirmed () ĊĠĠĠ Ġfun Ġon Cancelled () Ċ } Ċ Ċ class ĠCreate Gift Controller ( ĊĠĠĠ Ġargs : ĠBundle Ċ ) Ġ: ĠBase Mob ius Controller < M , ĠE , ĠF >( args ), ĠConfirm ation Listener , ĠAlertDialog Controller . Listener Ġ{ ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġcurrency Id : ĠString ĊĠĠĠ Ġ) Ġ: Ġthis ( bundle Of ( CUR RE NCY _ ID Ġto Ġcurrency Id )) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Pop Handler ( Bottom Sheet Change Handler ()) ĊĠĠĠĠĠĠĠ Ġoverride Push Handler ( Bottom Sheet Change Handler ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġdefault Model : ĠM Ġ= ĠM . create Default ( arg ( CUR RE NCY _ ID )) ĊĠĠĠ Ġoverride Ġval Ġinit Ġ= ĠCreate Gift Init ĊĠĠĠ Ġoverride Ġval Ġupdate Ġ= ĠCreate Gift Update ĊĠĠĠ Ġoverride Ġval Ġflow Effect Handler ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcreate Create G ifting Handler ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Id Ġ= Ġarg ( CUR RE NCY _ ID ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb read Box Ġ= Ġdirect . instance (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Manager Ġ= Ġdirect . instance (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrates Ġ= Ġdirect . instance (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgift Backup Ġ= Ġdirect . instance (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeta DataManager Ġ= Ġdirect . instance () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġbinding Ġby Ġview Binding ( Controller Create Gift Binding :: inflate ) ĊĠĠĠ Ġprivate Ġval Ġamount Choices : ĠList < Material Button > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Choice 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Choice 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Choice 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Choice 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Choice 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbind View ( model Flow : ĠFlow < M >): ĠFlow < E > Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmerge ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Close . click s (). map Ġ{ ĠE . On Close Clicked Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Choices . map Indexed Ġ{ Ġindex , Ġinput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . click s (). map Ġ{ ĠE . On Amount Clicked ( index , Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. merge (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipient Name Input . text Changes (). map Ġ{ ĠE . On Name Changed ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Btn . click s (). map Ġ{ ĠE . On Create Clicked Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠM . render () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( fi at Amount Options . size Ġ== ĠFI AT _ AMOUNT _ OPTIONS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Only Ġ$ FI AT _ AMOUNT _ OPTIONS Ġgift Ġamounts Ġare Ġsupported ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Changed ( M :: state , ĠM :: amount Selection Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Inputs ( state , Ġamount Selection Index , Ġfi at Amount Options ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading View . root . is G one Ġ= Ġstate Ġ!= ĠState . LOADING Ġ&& Ġstate Ġ!= ĠState . SEND ING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Changed ( M :: fi at Amount Options , ĠM :: amount Selection Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Choices . initialize ( state , Ġamount Selection Index , Ġfi at Amount Options ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Back (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġevent Consumer . accept ( E . On Close Clicked ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle View Effect ( effect : ĠView Effect ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( effect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF . Close Ġ-> Ġrouter . pop Current Controller () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF . Confirm Transaction Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontroller Ġ= ĠConfirm ation Controller ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeffect . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeffect . amount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeffect . currency Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeffect . fi at Amount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeffect . fi at Fee , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeffect . fi at Currency Code ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . push Controller ( Router Transaction . with ( controller )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Inputs ( state : ĠState , Ġselection : ĠInt , Ġfi at Amount Options : ĠList < Fi at Amount Option >) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenable Ġ= Ġstate Ġ== ĠState . READY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Choices . initialize ( state , Ġselection , Ġfi at Amount Options ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecipient Name Input . isEnabled Ġ= Ġenable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Btn . isEnabled Ġ= Ġenable ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠList < Material Button >. initialize ( state : ĠState , Ġselection : ĠInt , Ġfi at Amount Options : ĠList < Fi at Amount Option >) Ġ{ ĊĠĠĠĠĠĠĠ ĠforEach Indexed Ġ{ Ġindex , Ġbutton Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġopt Ġ= Ġfi at Amount Options [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . isEnabled Ġ= Ġ( state Ġ== ĠState . READY ) Ġ&& Ġopt . enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . text Ġ= Ġopt . amount . format Fi at For Ui ( opt . fi at Currency Code , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . isChecked Ġ= Ġselection Ġ== Ġindex ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Positive Clicked ( ĊĠĠĠĠĠĠĠ Ġdialog Id : ĠString , ĊĠĠĠĠĠĠĠ Ġcontroller : ĠAlertDialog Controller , ĊĠĠĠĠĠĠĠ Ġresult : ĠAlertDialog Controller . Dialog Input Result ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Create Gift . Error . valueOf ( dialog Id ). is Critical ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . pop Controller ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Confirmed () Ġ{ ĊĠĠĠĠĠĠĠ Ġevent Consumer . accept ( E . On Transaction Confirm Clicked ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cancelled () Ġ{ ĊĠĠĠĠĠĠĠ Ġevent Consumer . accept ( E . On Transaction Cancel Clicked ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠConfirm ation Controller ( args : ĠBundle ) Ġ: ĠBaseController ( args ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount : ĠBigDecimal , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Code : ĠCurrency Code , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfi at Amount : ĠBigDecimal , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfi at Fee : ĠBigDecimal , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfi at Currency Code : ĠString ĊĠĠĠĠĠĠĠ Ġ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" amount " Ġto Ġamount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" currency Code " Ġto Ġcurrency Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" fi at Amount " Ġto Ġfi at Amount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" fi at Fee " Ġto Ġfi at Fee , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" fi at Currency Code " Ġto Ġfi at Currency Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġname : ĠString Ġ= Ġarg (" name ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġamount : ĠBigDecimal Ġ= Ġarg (" amount ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcurrency Code : ĠString Ġ= Ġarg (" currency Code ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfi at Amount : ĠBigDecimal Ġ= Ġarg (" fi at Amount ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfi at Fee : ĠBigDecimal Ġ= Ġarg (" fi at Fee ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfi at Currency Code : ĠString Ġ= Ġarg (" fi at Currency Code ") ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Pop Handler ( Dialog Change Handler ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Push Handler ( Dialog Change Handler ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbinding Ġby Ġview Binding ( Controller Confirm Gift Details Binding :: inflate ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Attach ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Attach ( view ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfi at Amount String Ġ= Ġfi at Amount . format Fi at For Ui ( fi at Currency Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Value . text Ġ= Ġ"% s Ġ(% s ) ". format ( amount . format Crypto For Ui ( currency Code ), Ġfi at Amount String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Address . text Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Fee Value . text Ġ= Ġfi at Fee . format Fi at For Ui ( fi at Currency Code ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġfind Listener < Confirmation Listener >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcancel Ġ= ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Cancelled () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . pop Controller ( this @ Confirmation Controller ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Confirmed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . pop Controller ( this @ Confirmation Controller ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Btn . setOnClickListener ( cancel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Btn . setOnClickListener ( cancel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Back (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Listener < Confirmation Listener >() ?. on Cancelled () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . handle Back () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ