package Ġcom . example . android . pay ser ak otlin čĊč Ċ import Ġandroid . annotation . Suppress Lint č Ċ import Ġandroid . app . Loader Manager č Ċ import Ġandroid . content . Loader č Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* č Ċ import Ġandroid . net . Uri č Ċ import Ġandroid . os . Bundle č Ċ import Ġandroid . support . v 7 . app . AppCompatActivity č Ċ import Ġandroid . widget . Array Adapter č Ċ import Ġandroid . widget . Toast č Ċ import Ġcom . example . android . pay ser ak otlin . R . array . currency _ array č Ċ import Ġjava . net . Malformed URLException č Ċ import Ġjava . net . URL čĊč Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠLoader Manager . Loader Callbacks < String > Ġ{ čĊčĊĠĠĠ Ġprivate Ġval ĠP AY SER A _ REQUEST _ URL Ġ= Ġ Ġ" http :// api . ev p . lt / currency / commercial / exchange /" čĊčĊĠĠĠ Ġprivate Ġvar Ġs avings USD Ġ= Ġ 1 0 0 0 . 0 čĊĠĠĠ Ġprivate Ġvar Ġs avings EUR Ġ= Ġ 0 . 0 čĊĠĠĠ Ġprivate Ġvar Ġs avings J PY Ġ= Ġ 0 . 0 čĊčĊĠĠĠ Ġprivate Ġvar Ġcom missions USD Ġ= Ġ 0 . 0 čĊĠĠĠ Ġprivate Ġvar Ġcom missions EUR Ġ= Ġ 0 . 0 čĊĠĠĠ Ġprivate Ġvar Ġcom missions J PY Ġ= Ġ 0 . 0 čĊčĊĠĠĠ Ġprivate Ġvar Ġfrom Currency Ġ= Ġ" USD " čĊĠĠĠ Ġprivate Ġvar Ġto Currency Ġ= Ġ" USD " čĊĠĠĠ Ġprivate Ġvar Ġenough S avings : Boolean Ġ= Ġfalse čĊčĊĠĠĠ Ġprivate Ġvar Ġfrom Amount Ġ= Ġ 0 . 0 čĊĠĠĠ Ġprivate Ġvar Ġcom mission Pay Ġ= Ġ 0 . 0 čĊĠĠĠ Ġprivate Ġvar Ġfree Conversions Ġ= Ġ 5 čĊčĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) čĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) čĊčĊĠĠĠĠĠĠĠ Ġval Ġf Adapter Ġ= ĠArray Adapter . createFrom Resource ( this , čĊĠĠĠĠĠĠĠ Ġcurrency _ array , Ġandroid . R . layout . simple _ spinner _ item ) čĊĠĠĠĠĠĠĠ Ġf Adapter . set DropDown View Resource ( android . R . layout . simple _ spinner _ dropdown _ item ) čĊĠĠĠĠĠĠĠ Ġfrom _ currency _ spinner . adapter Ġ= Ġf Adapter čĊčĊĠĠĠĠĠĠĠ Ġval Ġt Adapter Ġ= ĠArray Adapter . createFrom Resource ( this , čĊĠĠĠĠĠĠĠ Ġcurrency _ array , Ġandroid . R . layout . simple _ spinner _ item ) čĊĠĠĠĠĠĠĠ Ġt Adapter . set DropDown View Resource ( android . R . layout . simple _ spinner _ dropdown _ item ) čĊĠĠĠĠĠĠĠ Ġto _ currency _ spinner . adapter Ġ= Ġt Adapter čĊčĊĠĠĠĠĠĠĠ Ġupdate S avings () čĊčĊĠĠĠĠĠĠĠ Ġconvert _ button . setOnClickListener Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Currency Ġ= Ġfrom _ currency _ spinner . selected Item . toString () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Currency Ġ= Ġto _ currency _ spinner . selected Item . toString () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġamount . text . toString () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( a ! ="") Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Amount Ġ= Ġjava . lang . Double . parseDouble ( a ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloader Manager . init Loader ( 1 , Ġnull , Ġthis @ MainActivity ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊ čĊčĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") čĊĠĠĠ Ġprivate Ġfun Ġupdate S avings (){ čĊĠĠĠĠĠĠĠ ĠUSD . text Ġ= Ġ"% . 2 f ". format ( sav ings USD ) Ġ+ Ġ" ĠUSD " čĊčĊĠĠĠĠĠĠĠ ĠEUR . text Ġ= Ġ"% . 2 f ". format ( sav ings EUR ) Ġ+ Ġ" ĠEUR " čĊčĊĠĠĠĠĠĠĠ ĠJ PY . text Ġ= Ġ"% . 0 f ". format ( sav ings J PY ) Ġ+ Ġ" ĠJ PY " čĊčĊĠĠĠĠĠĠĠ Ġcom USD . text Ġ= Ġ(" %. 2 f ". format ( com missions USD )) Ġ+ Ġ" ĠUSD " čĊčĊĠĠĠĠĠĠĠ Ġcom EUR . text Ġ= Ġ"% . 2 f ". format ( com missions EUR ) Ġ+ Ġ" ĠEUR " čĊčĊĠĠĠĠĠĠĠ Ġcom J PY . text Ġ= Ġ"% . 0 f ". format ( com missions J PY ) Ġ+ Ġ" ĠJ PY " čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġconvert Currency ( data : String ){ čĊĠĠĠĠĠĠĠ Ġval Ġtoast Ġ= ĠToast . makeText ( this @ MainActivity , Ġ" J Å« s Ġkon vert av ote Ġ" Ġ+ Ġ"% . 2 f ". format ( from Amount ) Ġ+ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ$ from Currency ĠÄ ¯ Ġ$ data Ġ$ to Currency . ĠKom isin is Ġm ok est is Ġ- Ġ" Ġ+ Ġ"% . 2 f ". format ( commission Pay ) Ġ+ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ" Ġ+ Ġfrom Currency Ġ+ ". ", ĠToast . LENGTH _ LONG ) čĊčĊĠĠĠĠĠĠĠ Ġvar Ġamount Ġ= Ġjava . lang . Double . parseDouble ( data ) čĊĠĠĠĠĠĠĠ Ġenough S avings Ġ= Ġfalse čĊĠĠĠĠĠĠĠ Ġval Ġcom mission Rate Ġ= Ġ 0 . 0 0 7 čĊĠĠĠĠĠĠĠ Ġcom mission Pay Ġ= Ġ 0 . 0 čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( free Conversions <= 1 ) čĊĠĠĠĠĠĠĠ Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcom mission Pay Ġ= Ġfrom Amount Ġ* Ġcom mission Rate čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġwhen Ġ( from Currency ){ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" USD " Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs avings USD Ġ= Ġcalculate ( sav ings USD ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( en ough S avings ) Ġ{ com missions USD Ġ+= Ġcom mission Pay ; Ġtoast . show ()} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" EUR " Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs avings EUR Ġ= Ġcalculate ( sav ings EUR ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( en ough S avings ) Ġ{ com missions EUR Ġ+= Ġcom mission Pay ; Ġtoast . show ()} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" J PY " Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs avings J PY Ġ= Ġcalculate ( sav ings J PY ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( en ough S avings ) Ġ{ com missions J PY Ġ+= Ġcom mission Pay ; Ġtoast . show ()} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġwhen ( to Currency ){ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" USD " Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( en ough S avings ) Ġ{ Ġs avings USD Ġ+= Ġamount } čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" EUR " Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( en ough S avings ) Ġ{ Ġs avings EUR Ġ+= Ġamount } čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" J PY " Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( en ough S avings ) Ġ{ Ġs avings J PY Ġ+= Ġamount } čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġupdate S avings () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġcalculate ( a : Double ): Double { čĊĠĠĠĠĠĠĠ Ġval Ġtoast Ġ= ĠToast . makeText ( this @ MainActivity , ĠR . string . not _ s ufficient _ fund s , ĠToast . LENGTH _ SHORT ) čĊĠĠĠĠĠĠĠ Ġreturn Ġif ( a Ġ>= Ġfrom Amount Ġ+ Ġcom mission Pay ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġa Ġ- Ġ( from Amount Ġ+ Ġcom mission Pay ); Ġfree Conversions --; Ġenough S avings Ġ= Ġtrue ; Ġb čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġelse Ġ{ Ġtoast . show (); Ġa Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġcreate Url ( a : String ): ĠURL ? Ġ{ čĊĠĠĠĠĠĠĠ Ġvar Ġurl : URL čĊĠĠĠĠĠĠĠ Ġtry { čĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= ĠURL ( a ) čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : Malformed URLException ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġurl čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun ĠonCreate Loader ( id : ĠInt , Ġargs : ĠBundle ?): ĠLoader < String > Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġbase Uri Ġ= ĠUri . parse ( PAY SER A _ REQUEST _ URL ) čĊĠĠĠĠĠĠĠ Ġval Ġuri Builder Ġ= Ġbase Uri . build Up on () čĊĠĠĠĠĠĠĠ Ġuri Builder . append Path ("$ from Amount -$ from Currency ") čĊĠĠĠĠĠĠĠ Ġuri Builder . append Path ( to Currency ) čĊĠĠĠĠĠĠĠ Ġuri Builder . append Path (" latest ") čĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġcreate Url ( uri Builder . toString ()) čĊĠĠĠĠĠĠĠ Ġreturn ĠConvert Loader ( this , Ġurl ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun ĠonLoad Finished ( loader : ĠLoader < String > ?, Ġdata : ĠString ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ(( data Ġ!= Ġ" 0 . 0 0 ") Ġ&& Ġfrom Currency Ġ!= Ġto Currency ){ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġconvert Currency ( data ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġloader Manager . destroy Loader ( 1 ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Loader Reset ( loader : ĠLoader < String > ?) Ġ{} čĊč Ċ } čĊ