/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 dev challenge . presentation . screen Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . example . android dev challenge . domain . entity . location . Location Ċ import Ġcom . example . android dev challenge . domain . entity . weather . Weather Ċ import Ġcom . example . android dev challenge . domain . use case . location . Get C ities UseCase Ċ import Ġcom . example . android dev challenge . domain . use case . location . Get Favorite Locations UseCase Ċ import Ġcom . example . android dev challenge . domain . use case . location . Save Location To F avorites UseCase Ċ import Ġcom . example . android dev challenge . domain . use case . weather . Get Forecast Info For Location UseCase Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ class ĠWeather Screen ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval ĠgetC ities UseCase : ĠGet C ities UseCase , ĊĠĠĠ Ġprivate Ġval Ġget Forecast Info For Location UseCase : ĠGet Forecast Info For Location UseCase , ĊĠĠĠ Ġprivate Ġval Ġsave Location To F avorites UseCase : ĠSave Location To F avorites UseCase , ĊĠĠĠ Ġprivate Ġval Ġget F avorites UseCase : ĠGet Favorite Locations UseCase Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ forecast Ġ= ĠMutable LiveData < Weather >() ĊĠĠĠ Ġprivate Ġval Ġ_ selected Location Ġ= ĠMutable LiveData < Location >() ĊĠĠĠ Ġprivate Ġval Ġ_ search Result Ġ= ĠMutable LiveData < List < Location >>( emptyList ()) ĊĠĠĠ Ġprivate Ġval Ġ_ search Query Ġ= ĠMutable LiveData ("") ĊĠĠĠ Ġprivate Ġval Ġ_ favorite Locations Ġ= ĠMutable LiveData < List < Location >>( emptyList ()) ĊĠĠĠ Ġval Ġforecast : ĠLive Data < Weather > Ġ= Ġ_ forecast ĊĠĠĠ Ġval Ġselected Location : ĠLive Data < Location > Ġ= Ġ_ selected Location ĊĠĠĠ Ġval Ġsearch Result : ĠLive Data < List < Location >> Ġ= Ġ_ search Result ĊĠĠĠ Ġval Ġsearch Query : ĠLive Data < String > Ġ= Ġ_ search Query ĊĠĠĠ Ġval Ġfavorite Locations : ĠLive Data < List < Location >> Ġ= Ġ_ favorite Locations ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget F avorites UseCase (). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ favorite Locations . value Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġit . first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon City Selected ( first ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon City Selected ( location : ĠLocation ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Forecast Info For Location UseCase . invoke ( location ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . location . selected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ forecast . value Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ selected Location . value Ġ= Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon City Added ( location : ĠLocation ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Location To F avorites UseCase . invoke ( location ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ search Query . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget F avorites UseCase (). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ favorite Locations . value Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Query Changed ( query : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ search Query . value Ġ= Ġquery ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetC ities UseCase ( query ). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ search Result . value Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ