package Ġcom . ty g ane utron ics . my rate calculator . activities Ċ Ċ import Ġandroid . app widget . App Widget Manager Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . card view . widget . Card View Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . swiper ef resh layout . widget . Swipe Refresh Layout Ċ import Ġcom . android . vol ley . Default Retry Policy Ċ import Ġcom . android . vol ley . Response Ċ import Ġcom . android . vol ley . Vol ley Error Ċ import Ġcom . android . vol ley . toolbox . JsonObject Request Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . google . firebase . analytics . Firebase Analytics Ċ import Ġcom . mal ta is n . cal cd ialog . Calc Dialog Ċ import Ġcom . mal ta is n . cal cd ialog . Calc N ump ad Layout Ċ import Ġcom . ty g ane utron ics . my rate calculator . Calculator Ċ import Ġcom . ty g ane utron ics . my rate calculator . My Application Ċ import Ġcom . ty g ane utron ics . my rate calculator . R Ċ import Ġcom . ty g ane utron ics . my rate calculator . contract . Currency Contract Ċ import Ġcom . ty g ane utron ics . my rate calculator . fragments . Fragment Calculator Ċ import Ġcom . ty g ane utron ics . my rate calculator . models .* Ċ import Ġcom . ty g ane utron ics . my rate calculator . utils . Base Utils Ċ import Ġcom . ty g ane utron ics . my rate calculator . widget . Multiple Rate Provider Ċ import Ġcom . ty g ane utron ics . my rate calculator . widget . Single Rate Provider Ċ import Ġkotlinx . android . synt hetic . main . layout _ amount .* Ċ import Ġkotlinx . android . synt hetic . main . layout _ main .* Ċ import Ġkotlinx . android . synt hetic . main . layout _ rates .* Ċ import Ġkotlinx . android . synt hetic . main . layout _ result . view .* Ċ import Ġorg . json . JSONObject Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . time . Instant Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Zone Id Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjava . time . format . Format Style Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠMainActivity Ġ: ĠBase Activity (), ĠText Watcher , ĠAdapter View . On ItemSelected Listener , ĊĠĠĠ ĠResponse . Listener < JSONObject >, ĠResponse . Error Listener , ĠSw ipe Refresh Layout . On Refresh Listener , ĊĠĠĠ ĠView . OnClickListener , ĠCalc Dialog . Calc Dialog Callback Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġfragment Calculator : ĠFragment Calculator Ġ= ĠFragment Calculator () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . layout _ main ) ĊĠĠĠĠĠĠĠ Ġsetup Ad () ĊĊĠĠĠĠĠĠĠ Ġbind Views () ĊĠĠĠĠĠĠĠ Ġsync Views () ĊĠĠĠĠĠĠĠ Ġtext Watch ers () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( should Update ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Rates () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtext Watch ers () Ġ{ ĊĠĠĠĠĠĠĠ Ġet _ bond . add TextChanged Listener ( this ) ĊĠĠĠĠĠĠĠ Ġet _ om ir . add TextChanged Listener ( this ) ĊĠĠĠĠĠĠĠ Ġet _ rt gs . add TextChanged Listener ( this ) ĊĠĠĠĠĠĠĠ Ġet _ rb z . add TextChanged Listener ( this ) ĊĠĠĠĠĠĠĠ Ġet _ z ar . add TextChanged Listener ( this ) ĊĠĠĠĠĠĠĠ Ġet _ amount . add TextChanged Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġbind Ġlayout Ġviews ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġbind Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġsr _ layout . setOn Refresh Listener ( this ) ĊĊĠĠĠĠĠĠĠ Ġs _ currency . on ItemSelected Listener Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġbtn _ toggle . setOnClickListener ( this ) ĊĊĠĠĠĠĠĠĠ Ġ// calculator Ġbtn s ĊĠĠĠĠĠĠĠ Ġib _ bond _ calculator . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġib _ om ir _ calculator . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġib _ rt gs _ calculator . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġib _ rb z _ calculator . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġib _ z ar _ calculator . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġib _ amount _ calculator . setOnClickListener ( this ) ĊĊĠĠĠĠĠĠĠ Ġtrigger Rate Dialog () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSync Ġlayout Ġviews ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsync Views () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġet _ bond . setText ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Utils . get Prefs ( this ). getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . currency _ bond ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġet _ om ir . setText ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Utils . get Prefs ( this ). getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . currency _ om ir ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġet _ rt gs . setText ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Utils . get Prefs ( this ). getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . currency _ rt gs ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġet _ rb z . setText ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Utils . get Prefs ( this ). getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . currency _ rb z ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġet _ z ar . setText ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Utils . get Prefs ( this ). getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . currency _ z ar ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġs _ currency . setSelection ( Base Utils . get Prefs ( this ). getInt ( Currency Contract . CUR RE NCY , Ġ 0 )) ĊĊĠĠĠĠĠĠĠ Ġet _ amount . text ?. append ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Utils . get Prefs ( this ). getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" amount ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfragment Calculator . settings . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Value Ġ= ĠBigDecimal ("- 1 e 1 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxValue Ġ= ĠBigDecimal (" 1 e 1 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn ump ad Layout Ġ= ĠCal cN ump ad Layout . CAL C UL ATOR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Expression Shown Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Answer Btn Shown Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsr _ layout . setColor Scheme Resources ( R . color . color Accent ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( view . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . btn _ toggle Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Analytics . getInstance ( base Context ). log Event (" toggle _ rates _ parent ", ĠBundle ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn _ toggle . set Compound Draw ables With Intr insic Bounds ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout _ rates . isVisible Ġ= Ġlayout _ rates . isVisible . not () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable : ĠInt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( layout _ rates . isVisible ) ĠR . drawable . ic _ expand _ less Ġelse ĠR . drawable . ic _ expand _ more ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ib _ bond _ calculator Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Calculator . settings . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Value Ġ= Ġet _ bond . text . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġif Ġ( it . isNull Or Blank ()) Ġ" 0 " Ġelse Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toString (). to BigDecimal () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code Ġ= Ġview . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Calculator . show ( support FragmentManager , Ġ" Calc Dialog ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ib _ om ir _ calculator Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Calculator . settings . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Value Ġ= Ġet _ om ir . text . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġif Ġ( it . isNull Or Blank ()) Ġ" 0 " Ġelse Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toString (). to BigDecimal () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code Ġ= Ġview . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Calculator . show ( support FragmentManager , Ġ" Calc Dialog ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ib _ rt gs _ calculator Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Calculator . settings . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Value Ġ= Ġet _ rt gs . text . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġif Ġ( it . isNull Or Blank ()) Ġ" 0 " Ġelse Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toString (). to BigDecimal () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code Ġ= Ġview . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Calculator . show ( support FragmentManager , Ġ" Calc Dialog ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ib _ rb z _ calculator Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Calculator . settings . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Value Ġ= Ġet _ rb z . text . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġif Ġ( it . isNull Or Blank ()) Ġ" 0 " Ġelse Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toString (). to BigDecimal () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code Ġ= Ġview . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Calculator . show ( support FragmentManager , Ġ" Calc Dialog ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ib _ z ar _ calculator Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Calculator . settings . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Value Ġ= Ġet _ z ar . text . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġif Ġ( it . isNull Or Blank ()) Ġ" 0 " Ġelse Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toString (). to BigDecimal () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code Ġ= Ġview . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Calculator . show ( support FragmentManager , Ġ" Calc Dialog ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ib _ amount _ calculator Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Calculator . settings . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Value Ġ= Ġet _ amount . text . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġif Ġ( it . isNull Or Blank ()) Ġ" 0 " Ġelse Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toString (). to BigDecimal () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code Ġ= Ġview . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Calculator . show ( support FragmentManager , Ġ" Calc Dialog ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġsr _ layout . is Refresh ing Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġget Firebase Analytics () !!. log Event (" refresh _ rates ", ĠBundle ()) ĊĊĠĠĠĠĠĠĠ Ġfetch Rates () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshould Update (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcheck Ġ= ĠBase Utils . get Prefs ( base Context ). getBoolean (" check _ update ", Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( check ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Ġ= ĠBase Utils . get Prefs ( base Context ). getLong ( Currency Contract . LAST _ CHECK , Ġ 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= ĠBase Utils . get Prefs ( base Context ). getString (" update _ interval ", Ġ" 1 ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhours Ġ= ĠTimeUnit . HOUR S . to Millis ( offset !!. to Long ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Ġ= Ġcheck . and ( System . currentTimeMillis () Ġ> Ġlast . plus ( hours )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcheck ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDo Ġfetch Ġserver Ġrates ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġfetch Rates () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġprefer Ġ= ĠBase Utils . get Prefs ( application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getString (" preferred _ currency ", ĠgetString ( R . string . prefer _ max )) ĊĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . parse ( getString ( R . string . rates _ url )). build Up on () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append QueryParameter ( Currency Contract . PREFER , Ġprefer ). build () ĊĊĠĠĠĠĠĠĠ Ġval ĠjsonObject Request Ġ= ĠJsonObject Request ( uri . toString (), Ġnull , Ġthis , Ġthis ) ĊĊĠĠĠĠĠĠĠ ĠjsonObject Request . set Should Cache ( false ) ĊĠĠĠĠĠĠĠ ĠjsonObject Request . retry Policy Ġ= ĠDefault Retry Policy ( 1 0 0 0 0 , Ġ 2 , Ġ 1 . 0 f ) ĊĊĠĠĠĠĠĠĠ ĠMy Application . request Queue . add ( jsonObject Request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Response ( response : ĠJSONObject ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġsr _ layout . is Refresh ing Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Base Utils . get Prefs ( base Context ). getBoolean (" auto _ update ", Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate C urrencies ( response ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalc _ result _ layout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . update _ available , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ IN DEFIN ITE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . update _ apply ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate C urrencies ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate C urrencies ( response : ĠJSONObject ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc urrencies Ġ= ĠJSONObject ( response . toString ()). opt JSONArray ( Currency Contract . USD ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( currencies Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġc urrencies . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrency Ġ= Ġc urrencies . getJSONObject ( i ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstant Ġ= ĠInstant . of Epoch Second ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency . getString ( Currency Contract . LAST _ UPDATED ). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformat Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime Formatter . of Localized DateTime ( Format Style . LONG , ĠFormat Style . SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠLocalDateTime . of Instant ( instant , ĠZone Id . system Default ()). format ( format ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrate Ġ= Ġcurrency . getString ( Currency Contract . RATE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( currency . getString ( Currency Contract . CUR RE NCY )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . currency _ bond ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ bond . setText ( rate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ bond _ parent . helper Text Ġ= Ġdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . currency _ om ir ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ om ir . setText ( rate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ om ir _ parent . helper Text Ġ= Ġdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . currency _ rb z ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ rb z . setText ( rate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ rb z _ parent . helper Text Ġ= Ġdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . currency _ rt gs ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ rt gs . setText ( rate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ rt gs _ parent . helper Text Ġ= Ġdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . currency _ z ar ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ z ar . setText ( rate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ z ar _ parent . helper Text Ġ= Ġdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Rates () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Utils . get Prefs ( base Context ). edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Long ( Currency Contract . LAST _ CHECK , ĠSystem . currentTimeMillis ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonError Response ( error : ĠVol ley Error ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġerror ?. printStackTrace () ĊĊĠĠĠĠĠĠĠ Ġsr _ layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View < *> ?) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( parent : ĠAdapter View < *> ?, Ġview : ĠView ?, Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFirebase Analytics . getInstance ( base Context ). log Event (" change _ currency ", ĠBundle ()) ĊĊĠĠĠĠĠĠĠ Ġcalculate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcalculate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . calculator , Ġmenu ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ settings Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( base Context , ĠSettings Activity (). java Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ info Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Analytics . getInstance ( base Context ). log Event (" view _ info _ dialog ", ĠBundle ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . setTitle ( R . string . menu _ info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . setIcon ( Context Compat . get Drawable ( base Context , ĠR . drawable . ic _ info )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . setMessage ( R . string . info _ message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . set Positive Button ( R . string . info _ dismiss , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Rates () Ġ{ ĊĠĠĠĠĠĠĠ ĠBase Utils . get Prefs ( this ). edit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( getString ( R . string . currency _ bond ), Ġet _ bond . text ?. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠ ĠBase Utils . get Prefs ( this ). edit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( getString ( R . string . currency _ om ir ), Ġet _ om ir . text ?. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠ ĠBase Utils . get Prefs ( this ). edit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( getString ( R . string . currency _ rt gs ), Ġet _ rt gs . text ?. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠ ĠBase Utils . get Prefs ( this ). edit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( getString ( R . string . currency _ rb z ), Ġet _ rb z . text ?. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠ ĠBase Utils . get Prefs ( this ). edit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( getString ( R . string . currency _ z ar ), Ġet _ z ar . text ?. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Calculator (): ĠCalculator Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġbond Text Ġ= Ġnormal ise Input ( et _ bond . text ?. toString ()) ĊĠĠĠĠĠĠĠ Ġvar Ġom ir Text Ġ= Ġnormal ise Input ( et _ om ir . text ?. toString ()) ĊĠĠĠĠĠĠĠ Ġvar Ġrt gs Text Ġ= Ġnormal ise Input ( et _ rt gs . text ?. toString ()) ĊĠĠĠĠĠĠĠ Ġvar Ġr bz Text Ġ= Ġnormal ise Input ( et _ rb z . text ?. toString ()) ĊĠĠĠĠĠĠĠ Ġvar Ġz ar Text Ġ= Ġnormal ise Input ( et _ z ar . text ?. toString ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( bond Text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbond Text Ġ= Ġ" 1 " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( om ir Text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġom ir Text Ġ= Ġ" 1 " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( rt gs Text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrt gs Text Ġ= Ġ" 1 " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( rb z Text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr bz Text Ġ= Ġ" 1 " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( z ar Text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġz ar Text Ġ= Ġ" 1 " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsave Rates () ĊĊĠĠĠĠĠĠĠ Ġval Ġus d Ġ= ĠUSD ( 1 . 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġbond Ġ= ĠB OND ( bond Text . toDouble ()) ĊĠĠĠĠĠĠĠ Ġval Ġom ir Ġ= ĠO MIR ( om ir Text . toDouble ()) ĊĠĠĠĠĠĠĠ Ġval Ġrt gs Ġ= ĠRT GS ( rt gs Text . toDouble ()) ĊĠĠĠĠĠĠĠ Ġval Ġr bz Ġ= ĠRB Z ( rb z Text . toDouble ()) ĊĠĠĠĠĠĠĠ Ġval Ġz ar Ġ= ĠZ AR ( z ar Text . toDouble ()) ĊĊĠĠĠĠĠĠĠ Ġvar Ġcurrency : ĠCurrency Ġ= Ġus d ĊĠĠĠĠĠĠĠ Ġwhen Ġ( s _ currency . selected Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . currency _ usd ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Ġ= Ġus d ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . currency _ om ir ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Ġ= Ġom ir ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . currency _ bond ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Ġ= Ġbond ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . currency _ rt gs ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Ġ= Ġrt gs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . currency _ rb z ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Ġ= Ġr bz ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . currency _ z ar ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Ġ= Ġz ar ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠCalculator ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġus d , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbond , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġom ir , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrt gs , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr bz , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġz ar , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Numeric ( input : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnormal ise Input ( input : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( input Ġ== Ġnull Ġ|| Ġinput . isEmpty () Ġ|| Ġ! is Numeric ( input )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" 1 " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġinput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcalculator Ġ= Ġget Calculator () ĊĊĠĠĠĠĠĠĠ Ġval Ġamount Text Ġ= Ġnormal ise Input ( et _ amount . text ?. toString ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( amount Text . isNotEmpty ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// save Ġamount Ġentered ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Utils . get Prefs ( this ). edit (). putString (" amount ", Ġamount Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Utils . get Prefs ( this ). edit (). put Int (" currency ", Ġs _ currency . selected Item Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalc _ result _ layout . removeAll Views () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Currency Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Text . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculator . to USD ( amount Text . toDouble ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculator . usd ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Currency Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Text . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculator . to B OND ( amount Text . toDouble ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculator . bond ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Currency Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Text . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculator . to OM IR ( amount Text . toDouble ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculator . om ir ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Currency Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Text . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculator . to RB Z ( amount Text . toDouble ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculator . rb z ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Currency Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Text . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculator . to RT GS ( amount Text . toDouble ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculator . rt gs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Currency Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Text . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculator . to Z AR ( amount Text . toDouble ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculator . z ar ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Currency Result ( amount Text : ĠDouble , Ġresult : ĠDouble , Ġcurrency : ĠCurrency ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġadd Result Layout ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Result Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency . get Sign (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( currency . getName ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġresult , ĠgetString ( currency . getName ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġget Ġcalculated Ġresult Ġtext ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Result Text ( ĊĠĠĠĠĠĠĠ Ġamount Text : ĠDouble , ĊĠĠĠĠĠĠĠ Ġsign : ĠString , ĊĠĠĠĠĠĠĠ Ġresult : ĠDouble , ĊĠĠĠĠĠĠĠ Ġcurrency : ĠString ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcalculator Ġ= Ġget Calculator () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠgetString ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . result , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalculator . currency . get Sign (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Text , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs _ currency . selected Item , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsign , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcreate Ġresult Ġlayout ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġadd Result Layout ( result : ĠString , Ġamount : ĠDouble , Ġcurrency : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Layout : ĠCard View Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Inflater . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . layout _ result , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalc _ result _ layout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġas ĠCard View ĊĊĠĠĠĠĠĠĠ Ġresult Layout . result _ text . text Ġ= Ġresult ĊĠĠĠĠĠĠĠ Ġresult Layout . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġet _ amount . setText ( String . format ("% 1 0 . 2 f ", Ġamount ). trim ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselection Ġ= Ġresources . getString Array ( R . array . currencies ). indexOf ( currency ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Analytics . getInstance ( base Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. log Event (" copy _ result _ for _ calculation ", ĠBundle ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġs _ currency . setSelection ( selection ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcalc _ result _ layout . addView ( result Layout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĊĠĠĠĠĠĠĠ Ġupdate Multiple Widget () ĊĠĠĠĠĠĠĠ Ġupdate Single Widget () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Multiple Widget () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcomponent Name Ġ= ĠComponent Name ( this , ĠMultiple Rate Provider :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġval Ġapp Widget Manager Ġ= ĠApp Widget Manager . getInstance ( this ) ĊĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠMultiple Rate Provider :: class . java ) ĊĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠApp Widget Manager . ACTION _ APP WIDGET _ UPDATE ĊĊĠĠĠĠĠĠĠ Ġval Ġmultiple Ids Ġ= Ġapp Widget Manager . getApp Widget Ids ( component Name ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( App Widget Manager . EXTRA _ APP WIDGET _ IDS , Ġmultiple Ids ) ĊĠĠĠĠĠĠĠ Ġsend Broadcast ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Single Widget () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcomponent Name Ġ= ĠComponent Name ( this , ĠSingle Rate Provider :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġval Ġapp Widget Manager Ġ= ĠApp Widget Manager . getInstance ( this ) ĊĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠSingle Rate Provider :: class . java ) ĊĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠApp Widget Manager . ACTION _ APP WIDGET _ UPDATE ĊĊĠĠĠĠĠĠĠ Ġval Ġmultiple Ids Ġ= Ġapp Widget Manager . getApp Widget Ids ( component Name ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( App Widget Manager . EXTRA _ APP WIDGET _ IDS , Ġmultiple Ids ) ĊĠĠĠĠĠĠĠ Ġsend Broadcast ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Value Entered ( request Code : ĠInt , Ġvalue : ĠBigDecimal ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ib _ bond _ calculator Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ bond . setText ( value ?. to Plain String () Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ib _ om ir _ calculator Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ om ir . setText ( value ?. to Plain String () Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ib _ rt gs _ calculator Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ rt gs . setText ( value ?. to Plain String () Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ib _ rb z _ calculator Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ rb z . setText ( value ?. to Plain String () Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ib _ z ar _ calculator Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ z ar . setText ( value ?. to Plain String () Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ib _ amount _ calculator Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ amount . setText ( value ?. to Plain String () Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ