/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 , ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . example . android . mars re ale state . overview Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . example . android . mars re ale state . network . M ars Api Filter Ċ import Ġcom . example . android . mars re ale state . network . M ars Property Ċ import Ġcom . example . android . mars re ale state . network . M ars Ret rofit Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . Dispatch ers . IO Ċ import Ġkotlinx . coroutines . Dispatch ers . Main Ċ Ċ /** Ċ Ġ* ĠThe Ġ[ ViewModel ] Ġthat Ġis Ġattached Ġto Ġthe Ġ[ Overview Fragment ]. Ċ Ġ*/ Ċ class ĠOverview ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġenum Ġclass ĠM ars Response State Ġ{ ĠLO ADING , ĠSUCCESS , ĠFAILURE Ġ} ĊĊĠĠĠ Ġ// ĠThe Ġinternal ĠMutable LiveData ĠString Ġthat Ġstores Ġthe Ġstatus Ġof Ġthe Ġmost Ġrecent Ġrequest ĊĠĠĠ Ġprivate Ġval Ġ_ status Ġ= ĠMutable LiveData < M ars Response State >() ĊĠĠĠ Ġ// ĠThe Ġexternal Ġimmutable ĠLive Data Ġfor Ġthe Ġrequest Ġstatus ĠString ĊĠĠĠ Ġval Ġstatus : ĠLive Data < M ars Response State > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ status ĊĊĠĠĠ Ġprivate Ġval Ġ_ response Ġ= ĠMutable LiveData < List < M ars Property >>() ĊĊĠĠĠ Ġval Ġresponse : ĠLive Data < List < M ars Property >> Ġget () Ġ= Ġ_ response ĊĊĠĠĠ Ġprivate Ġval Ġ_ navigate Details Ġ= ĠMutable LiveData < M ars Property >() ĊĠĠĠ Ġval Ġnavigate Details : ĠLive Data < M ars Property > Ġget () Ġ= Ġ_ navigate Details ĊĊĠ Ġ// Ġ Ġval ĠviewModel Job Ġ= ĠJob () Ċ // ĠĠĠ Ġval Ġcoroutine Scope Ġ= ĠCor outine Scope ( viewModel Job Ġ+ ĠDispatch ers . Main ) ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCall Ġget M ars Real E state Properties () Ġon Ġinit Ġso Ġwe Ġcan Ġdisplay Ġstatus Ġimmediately . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġget M ars Real E state Properties ( M ars Api Filter . SHOW _ ALL ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġvalue Ġof Ġthe Ġstatus ĠLive Data Ġto Ġthe ĠM ars ĠAPI Ġstatus . ĊĠĠĠĠ Ġ* ĠEn queue Ġwas Ġused Ġusing Ġthe Ġcallback Ġmethod ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget M ars Real E state Properties ( filter : ĠM ars Api Filter ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġget Mar spro perty Deferred Ġ= ĠM ars Ret rofit . api Service . getProperties ( filter . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠM ars Response State . LOADING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloaded Data Ġ= Ġget Mar spro perty Deferred . await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠM ars Response State . SUCCESS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( loaded Data . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ response . value Ġ= Ġloaded Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠM ars Response State . FAILURE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ response . value Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ ĠviewModel Scope . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisplay M ars Details ( mars Details : ĠM ars Property ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ navigate Details . value Ġ= Ġm ars Details ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisplay M ars Details Complete () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ navigate Details . value Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Filter ( filter : ĠM ars Api Filter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget M ars Real E state Properties ( filter ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ //// This Ġis Ġhow Ġto Ġuse Ġenqueue Ġto Ġretrieve Ġdata Ċ // private Ġfun Ġget M ars Real E state Properties () Ġ{ Ċ // ĠĠĠ ĠM ars Ret rofit . api Service . getProperties (). enqueue ( object Ġ: ĠCallback < List < M ars Property >> Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < List < M ars Property >>, Ġresponse : ĠResponse < List < M ars Property >>) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ_ response . value Ġ= Ġ" Suc ces : Ġ${ response . body ()?. size } ĠM ars Ġproperty Ġretrieved " Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < List < M ars Property >>, Ġt : ĠThrowable ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ_ response . value Ġ= Ġ" E Ġno Ġde y : Ġ" Ġ+ Ġt . message Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ}) Ċ //} Ċ