package Ġcom . eb urg _ soft . currency converter . features . converter . view model Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mediator LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . eb urg _ soft . currency converter . core . datatype . Result Type Ċ import Ġcom . eb urg _ soft . currency converter . data . datasource . database . models . Currency Conversion Entity Ċ import Ġcom . eb urg _ soft . currency converter . data . di . Scopes Ċ import Ġcom . eb urg _ soft . currency converter . data . repository . Currency Conversion Repository Ċ import Ġcom . eb urg _ soft . currency converter . data . repository . mapper . Network To Entity Mapper Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ import Ġretrofit 2 . HttpException Ċ import Ġtoo th pick . T ooth pick Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util . Calendar Ċ import Ġjava . util . Locale Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠConverter ViewModel Ġ@ Inject Ġconstructor ( private Ġval Ġcurrency Conversion Repository : ĠCurrency Conversion Repository ) Ġ: ĊĠĠĠ ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġsecond C urrencies Number Mutable LiveData : ĠMutable LiveData < Double > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġsecond C urrencies Number LiveData : ĠMutable LiveData < Double > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsecond C urrencies Number Mutable LiveData ĊĊĠĠĠ Ġprivate Ġval Ġerror On Loading Mutable LiveData : ĠMutable LiveData < String > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġerror On Loading LiveData : ĠMutable LiveData < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġerror On Loading Mutable LiveData ĊĊĠĠĠ Ġprivate Ġval ĠisLoading Mutable LiveData : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval ĠisLoading LiveData : ĠMutable LiveData < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠisLoading Mutable LiveData ĊĊĠĠĠ Ġprivate Ġval Ġis Existing History Mutable LiveData : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġis Existing History LiveData : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġis Existing History Mutable LiveData ĊĊĠĠĠ Ġinit Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġcheck History Size () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO : Ġ 2 2 . 0 9 . 2 0 2 0 Ġfix Ġmethod ĠĊĠĠĠ Ġprivate Ġfun Ġcheck History Size () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrency Conversion List Mediator LiveData : ĠMed iator LiveData < List < Currency Conversion Entity >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMed iator LiveData () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġcurrency Conversion Repository . getAll Currency Conversions () Ċ // ĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Conversion List Mediator LiveData . add Source ( source ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Conversion List Mediator LiveData . value Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Conversion List Mediator LiveData . remove Source ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlive Data : ĠLive Data < List < Currency Conversion Entity >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Conversion Repository . getAll Currency Conversions () Ċ // ĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġcurrency Conversion List Mediator LiveData . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġlive Data . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġvalue ?. size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Existing History Mutable LiveData . value Ġ= Ġsize !! Ġ> Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġsave Ġcurrent Ġcurrency Ġconversion : ĊĠĠĠĠĠĠĠĠ 1 . Ġget Ġresponse Ġfrom Ġnetwork ; ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 . Ġif Ġresult Ġis Ġsuccess : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 . 1 . Ġmap Ġresponse Ġdata Ġto Ġentity Ġobject ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 . 2 . Ġsave Ġnew Ġcurrency Ġconversion Ġto Ġdatabase ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 . 3 . Ġget Ġsecond Ġcurrency Ġnumber Ġto ĠUI ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 . 1 . Ġshow Ġerror Ġin ĠAlertDialog . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ// ĠTODO : Ġ 1 5 . 0 9 . 2 0 2 0 Ġrefactor ! ĠĊĠĠĠ Ġfun Ġsave Currency Conversion ( ĊĠĠĠĠĠĠĠ Ġfirst Currency Number : ĠString , ĊĠĠĠĠĠĠĠ Ġfirst C urrencies Type : ĠString , ĊĠĠĠĠĠĠĠ Ġsecond C urrencies Type : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrency Conversion Entity : ĠCurrency Conversion Entity ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Mutable LiveData . value Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first C urrencies Type Ġ!= Ġsecond C urrencies Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork To Entity Mapper Ġ= ĠNetwork To Entity Mapper () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork To Entity Mapper . set First Currency Number ( first Currency Number . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc urrencies Ġ= Ġ"$ first C urrencies Type ,$ second C urrencies Type " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrency Conversion Result Ġ= Ġcurrency Conversion Repository . get Exchange Rates ( currencies ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Result Success ( currency Conversion Result . result Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Conversion Entity Ġ= Ġnetwork To Entity Mapper . map ( currency Conversion Result . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Result Success ( currency Conversion Entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond C urrencies Number Mutable LiveData . post Value ( currency Conversion Entity . second Currency Number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Result Error ( currency Conversion Result . error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Conversion Entity Ġ= ĠCurrency Conversion Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Currency Number . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst C urrencies Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Currency Number . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond C urrencies Type , Ġdate Ġ= ĠgetCurrent Date () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Conversion Repository . save Currency Conversion ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Conversion Entity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond C urrencies Number Mutable LiveData . value Ġ= Ġfirst Currency Number . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcheck History Size () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 3 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Mutable LiveData . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Result Error ( exception : ĠException ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Mutable LiveData . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ}. invoke On Completion Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( exception Ġis ĠHttp Exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror On Loading Mutable LiveData . value Ġ= Ġ" C urrencies Ġare Ġinvalid Ġfor Ġcurrent Ġdate " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Result Success ( result Type : ĠResult Type ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġresult Type Ġ== ĠResult Type . SUCCESS ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Result Success ( currency Conversion Entity : ĠCurrency Conversion Entity ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Conversion Entity ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Conversion Repository . save Currency Conversion ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond C urrencies Number Mutable LiveData . post Value ( it . second Currency Number ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetCurrent Date () Ġ= ĊĠĠĠĠĠĠĠ ĠSimpleDateFormat ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork To Entity Mapper . result Date Pattern , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocale . getDefault () ĊĠĠĠĠĠĠĠ Ġ). format ( Calendar . getInstance (). time ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ ĠT ooth pick . close Scope ( Scopes . CONVER TER ) ĊĠĠĠ Ġ} Ċ }