package Ġio . mu un . apollo . presentation . ui . helper Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . text . TextUtils Ċ import Ġio . mu un . apollo . domain . model . Bitcoin Unit Ċ import Ġio . mu un . apollo . presentation . ui . helper . Bitcoin Helper . format Input Bitcoin Amount Ċ import Ġio . mu un . apollo . presentation . ui . helper . Bitcoin Helper . format Long Bitcoin Amount Ċ import Ġio . mu un . apollo . presentation . ui . helper . Bitcoin Helper . format Short Bitcoin Amount Ċ import Ġio . mu un . apollo . presentation . ui . view . Rich Text Ċ import Ġio . mu un . common . model . Currency Ċ import Ġio . mu un . common . utils . Bitcoin Utils Ċ import Ġorg . jav am oney . mon eta . Money Ċ import Ġorg . jav am oney . mon eta . format . Amount Format Params Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . math . Round ingMode Ċ import Ġjava . util .* Ċ import Ġjavax . money . Currency Unit Ċ import Ġjavax . money . Mon etary Ċ import Ġjavax . money . Mon etary Amount Ċ import Ġjavax . money . Round ing QueryBuilder Ċ import Ġjavax . money . format . Amount Format QueryBuilder Ċ import Ġjavax . money . format . Mon etary Formats Ċ Ċ object ĠMoney Helper Ġ{ ĊĊĠĠĠ Ġconst Ġval ĠMAX _ FR ACTION AL _ DIG ITS _ FI AT Ġ= Ġ 2 ĊĠĠĠ Ġconst Ġval ĠMAX _ FR ACTION AL _ DIG ITS _ BTC Ġ= Ġ 8 ĊĊĠĠĠ Ġprivate Ġclass ĠF iat Format ( private Ġval Ġbase Pattern : ĠString , Ġprivate Ġval Ġdecimals Pattern : ĠChar ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild For ( currency : ĠCurrency Unit ): ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Pattern Ġ+ ĠgetDefault Fraction Digits ( currency , Ġdecimals Pattern ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠgetDefault Fraction Digits ( currency : ĠCurrency Unit , Ġsymbol : ĠChar ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( currency . default Fraction Digits Ġin Ġ 0 .. 9 ) Ġ// ĠBut Ġnormally Ġ 0 , Ġ 2 Ġor Ġ 3 Ġaccording Ġto Ġdoc ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdigits Ġ= Ġ"." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcurrency . default Fraction Digits ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdigits Ġ+= Ġsymbol ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdigits . remove Suffix (".") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAlways Ġdisplay Ġall Ġdecimals . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval ĠDEFAULT _ FI AT _ FORMAT : ĠF iat Format Ġ= ĠF iat Format (" ### , ## 0 ", Ġ' 0 ') ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ" Flex ible " Ġdisplay : Ġno Ġdecimals Ġrequired , Ġbut Ġup Ġto Ġ{@ code Ġcurrency . default Fraction Digits } ĊĠĠĠĠ Ġ* Ġdecimals Ġif Ġprecision Ġrequires Ġit . ĠUseful Ġfor Ġhandling Ġof Ġinput / user Ġedition . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval ĠINPUT _ FI AT _ FORMAT : ĠF iat Format Ġ= ĠF iat Format (" ### , ### ", Ġ'# ') ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFormat Ġa ĠMon etary Amount Ġas ĠRich Text , Ġto Ġdisplay Ġin Ġa ĠTextView , Ġallowing Ġfor Ġdifferent Ġcolors ĊĠĠĠĠ Ġ* Ġfor Ġthe Ġamount Ġand Ġcurrency , Ġand Ġshowing Ġmore Ġdecimals Ġfor ĠBTC . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġto Long Rich Text ( ĊĠĠĠĠĠĠĠ Ġamt : ĠMon etary Amount , ĊĠĠĠĠĠĠĠ Ġamt Color : ĠInt , ĊĠĠĠĠĠĠĠ Ġcurrency Color : ĠInt , ĊĠĠĠĠĠĠĠ Ġbitcoin Unit : ĠBitcoin Unit , ĊĠĠĠĠĠĠĠ Ġlocale : ĠLocale ĊĠĠĠ Ġ): ĠCharSequence Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġformatted Amount Ġ= Ġformat Long Mon etary Amount ( amt , Ġfalse , Ġbitcoin Unit , Ġlocale ) ĊĠĠĠĠĠĠĠ Ġval Ġformat Currency Ġ= Ġformat Currency ( amt . currency , Ġbitcoin Unit ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġconcat Rich Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRich Text ( formatted Amount ). set ForegroundColor ( amt Color ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRich Text ( format Currency ). set ForegroundColor ( currency Color ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconcat Rich Text ( rich Text 1 : ĠCharSequence , Ġrich Text 2 : ĠCharSequence ): ĠCharSequence Ġ= ĊĠĠĠĠĠĠĠ ĠText Utils . concat ( rich Text 1 , Ġ" Ġ", Ġrich Text 2 ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFormat Ġa ĠMon etary Amount Ġfor Ġthe Ġpurposes Ġof Ġuser Ġinput Ġedition . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġformat Input Mon etary Amount ( ĊĠĠĠĠĠĠĠ Ġamount : ĠMon etary Amount , ĊĠĠĠĠĠĠĠ Ġbitcoin Unit : ĠBitcoin Unit , ĊĠĠĠĠĠĠĠ Ġlocale : ĠLocale ĊĠĠĠ Ġ): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( amount . is Btc ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat Input Bitcoin Amount ( Bitcoin Utils . bit coins ToS at osh is ( amount ), Ġbitcoin Unit , Ġlocale ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat ( amount , ĠINPUT _ FI AT _ FORMAT . build For ( amount . currency ), Ġfalse , Ġlocale ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFormat Ġa Ġmon etary Ġamount Ġwith Ġhigh - precision Ġdecimals , Ġforcing Ġthe Ġdisplay Ġof Ġthe Ġcurrency ĊĠĠĠĠ Ġ* Ġcode . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġformat Long Mon etary Amount ( ĊĠĠĠĠĠĠĠ Ġamount : ĠMon etary Amount , ĊĠĠĠĠĠĠĠ Ġbitcoin Unit : ĠBitcoin Unit , ĊĠĠĠĠĠĠĠ Ġlocale : ĠLocale ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġformat Long Mon etary Amount ( amount , Ġtrue , Ġbitcoin Unit , Ġlocale ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFormat Ġa Ġmon etary Ġamount Ġwith Ġhigh - precision Ġdecimals . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġformat Long Mon etary Amount ( ĊĠĠĠĠĠĠĠ Ġamount : ĠMon etary Amount , ĊĠĠĠĠĠĠĠ Ġshow Currency Code : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġbitcoin Unit : ĠBitcoin Unit , ĊĠĠĠĠĠĠĠ Ġlocale : ĠLocale ĊĠĠĠ Ġ): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( amount . is Btc ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamount In S ats Ġ= ĠBitcoin Utils . bit coins ToS at osh is ( amount ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat Long Bitcoin Amount ( amount In S ats , Ġshow Currency Code , Ġbitcoin Unit , Ġlocale ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat ( amount , ĠDEFAULT _ FI AT _ FORMAT . build For ( amount . currency ), Ġshow Currency Code , Ġlocale ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFormat Ġa Ġmon etary Ġamount Ġwith Ġlow - precision Ġdecimals , Ġforcing Ġthe Ġdisplay Ġof Ġthe Ġcurrency ĊĠĠĠĠ Ġ* Ġcode . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġformat Short Mon etary Amount ( ĊĠĠĠĠĠĠĠ Ġamt : ĠMon etary Amount , ĊĠĠĠĠĠĠĠ Ġbitcoin Unit : ĠBitcoin Unit , ĊĠĠĠĠĠĠĠ Ġlocale : ĠLocale ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġformat Short Mon etary Amount ( amt , Ġtrue , Ġbitcoin Unit , Ġlocale ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFormat Ġa Ġmon etary Ġamount Ġwith Ġlow - precision Ġdecimals . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġformat Short Mon etary Amount ( ĊĠĠĠĠĠĠĠ Ġamount : ĠMon etary Amount , ĊĠĠĠĠĠĠĠ Ġshow Currency Code : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġbitcoin Unit : ĠBitcoin Unit , ĊĠĠĠĠĠĠĠ Ġlocale : ĠLocale ĊĠĠĠ Ġ): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( amount . is Btc ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat Short Bitcoin Amount ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitcoin Utils . bit coins ToS at osh is ( amount ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Currency Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitcoin Unit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocale ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat ( amount , ĠDEFAULT _ FI AT _ FORMAT . build For ( amount . currency ), Ġshow Currency Code , Ġlocale ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġa ĠUI - ready Ġrepresentation Ġof Ġthe Ġcurrency . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġformat Currency ( currency : ĠCurrency Unit , Ġbitcoin Unit : ĠBitcoin Unit ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġformat Currency ( currency . currency Code , Ġbitcoin Unit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġa ĠUI - ready Ġrepresentation Ġof Ġthe Ġcurrency Ġcode . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Default Locale ") ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġformat Currency ( currency Code : ĠString , Ġbitcoin Unit : ĠBitcoin Unit ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( currency Code Ġ== Ġ" BTC " Ġ&& Ġbitcoin Unit Ġ== ĠBitcoin Unit . SAT S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" SAT " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Code . toUpperCase () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġa ĠUI - ready Ġrepresentation Ġof Ġthe Ġcurrency Ġname , Ġgiven Ġthe Ġcode . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġformat Currency Name ( currency : ĠCurrency , Ġbitcoin Unit : ĠBitcoin Unit ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( currency . code Ġ== Ġ" BTC " Ġ&& Ġbitcoin Unit Ġ== ĠBitcoin Unit . SAT S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sat oshi " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency . name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRound Ġa Ġmon etary Ġamount , Ġkeeping Ġthe Ġappropriate Ġnumber Ġof Ġdigits Ġfor Ġthe Ġcurrency . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġround ( amount : ĠMon etary Amount ): ĠMon etary Amount Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrounded Number Ġ= Ġamount . number ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. number Value ( BigDecimal :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Scale ( amount . currency . max Fraction al Digits (), ĠRound ingMode . UP ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠMoney . of ( rounded Number , Ġamount . currency ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġformat ( ĊĠĠĠĠĠĠĠ Ġfi at Amount : ĠMon etary Amount , ĊĠĠĠĠĠĠĠ Ġpattern : ĠString , ĊĠĠĠĠĠĠĠ Ġshow Symbol : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġlocale : ĠLocale ĊĠĠĠ Ġ): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġleft Ġhere Ġas Ġdocumentation ĊĠĠĠĠĠĠĠ Ġ// Ġfinal ĠString Ġsymbol Ġ= ĠCurrency . CUR REN CI ES . get ( code ). get Symbol (); ĊĊĠĠĠĠĠĠĠ Ġval Ġfull Pattern Ġ= Ġpattern Ġ+ Ġif Ġ( show Symbol ) Ġ" ĠÂ ¤ " Ġelse Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġformatter Ġ= ĠMon etary Formats . get Amount Format ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAmount Format QueryBuilder . of ( locale ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( Amount Format Params . PATTERN , Ġfull Pattern ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrounding Ġ= ĠMon etary . get Round ing ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRound ing QueryBuilder . of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Scale ( fi at Amount . currency . default Fraction Digits ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( Round ingMode . HALF _ UP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġformatter . format ( fi at Amount . with ( rounding )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġthe Ġamount Ġof Ġfraction al Ġdigits Ġto Ġuse Ġfor Ġa Ġgiven Ġcurrency . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠCurrency Unit . max Fraction al Digits () Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( currency Code Ġ== Ġ" BTC ") ĠMAX _ FR ACTION AL _ DIG ITS _ BTC Ġelse ĠMAX _ FR ACTION AL _ DIG ITS _ FI AT Ċ }