/* Ċ Ġ* Ġ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 Ġpl . kr z ys z to f . dro be k . w emple 3 . home Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ import Ġpl . kr z ys z to f . dro be k . w emple 3 . domain . model . Weather Ċ import Ġpl . kr z ys z to f . dro be k . w emple 3 . domain . repository . Weather Repository Ċ import Ġjava . time . Local Time Ċ Ċ class ĠHome ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠWeather Repository Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġview State Ġ= ĠMutable LiveData ( Home ViewState . INITIAL ) ĊĠĠĠ Ġfun Ġget ViewState (): ĠLive Data < Home ViewState > Ġ= Ġview State ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġweather Data : ĠWeather ĊĠĠĠ Ġprivate Ġvar Ġselected Day : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġfun Ġget Weather Details () Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġdelay ( 3 0 0 ) ĊĠĠĠĠĠĠĠ Ġval ĠcurrentTime Ġ= ĠLocal Time . now () ĊĠĠĠĠĠĠĠ Ġweather Data Ġ= Ġrepository . get Weather (" Z ak op ane ") ĊĠĠĠĠĠĠĠ Ġval Ġday Ġ= Ġweather Data . days [ selected Day ] ĊĊĠĠĠĠĠĠĠ Ġview State . value Ġ= ĠHome ViewState ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentTime Ġ= ĠcurrentTime , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday OfWeek Ġ= Ġday . day OfWeek , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsun set Ġ= Ġday . sun set , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsun rise Ġ= Ġday . sun rise , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Days Ġ= Ġweather Data . days . size Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday Selected Ġ= Ġselected Day , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather Details Ġ= Ġday . get Weather Details For Closest Time ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Data . location Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentTime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Time Changed ( it : ĠLocal Time ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview State . value Ġ= Ġview State . value ?. copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentTime Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather Details Ġ= Ġweather Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. days [ selected Day ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Weather Details For Closest Time ( weather Data . location Name , Ġit ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Next Page Swipe () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( selected Day Ġ== Ġweather Data . days . size ) Ġreturn ĊĠĠĠĠĠĠĠ Ġselected Day Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġtime Ġ= Ġview State . value ?. currentTime Ġ?: ĠLocal Time . MIN ĊĠĠĠĠĠĠĠ Ġval Ġday Ġ= Ġweather Data . days [ selected Day ] ĊĠĠĠĠĠĠĠ Ġview State . value Ġ= Ġview State . value ?. copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentTime Ġ= Ġtime , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday Selected Ġ= Ġselected Day , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday OfWeek Ġ= Ġday . day OfWeek , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather Details Ġ= Ġday . get Weather Details For Closest Time ( weather Data . location Name , Ġtime ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Previous Page Swipe () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( selected Day Ġ== Ġ 0 ) Ġreturn ĊĠĠĠĠĠĠĠ Ġselected Day Ġ-= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġtime Ġ= Ġview State . value ?. currentTime Ġ?: ĠLocal Time . MIN ĊĠĠĠĠĠĠĠ Ġval Ġday Ġ= Ġweather Data . days [ selected Day ] ĊĠĠĠĠĠĠĠ Ġview State . value Ġ= Ġview State . value ?. copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentTime Ġ= Ġtime , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday OfWeek Ġ= Ġday . day OfWeek , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday Selected Ġ= Ġselected Day , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather Details Ġ= Ġday . get Weather Details For Closest Time ( weather Data . location Name , Ġtime ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠWeather . Day . get Weather Details For Closest Time ( ĊĠĠĠĠĠĠĠ Ġlocation : ĠString , ĊĠĠĠĠĠĠĠ Ġtime : ĠLocal Time ĊĠĠĠ Ġ): ĠWeather Details Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclosest Time Ġ= Ġhourly Weather . keys . to Sorted Set (). tail Set ( time ). first OrNull () ĊĠĠĠĠĠĠĠ Ġval Ġforecast Ġ= Ġhourly Weather [ closest Time ] Ġ?: Ġhourly Weather . values . last () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠWeather Details ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Ġ= Ġlocation , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġforecast . description , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemperature Ġ= ĠWeather Details . Parameter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġforecast . temperature . value . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit Ġ= Ġforecast . temperature . unit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhum idity Ġ= ĠWeather Details . Parameter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġforecast . humidity . value . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit Ġ= Ġforecast . humidity . unit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpressure Ġ= ĠWeather Details . Parameter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġforecast . pressure . value . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit Ġ= Ġforecast . pressure . unit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcloud iness Ġ= ĠWeather Details . Parameter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġforecast . cloud iness . value . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit Ġ= Ġforecast . cloud iness . unit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwind Ġ= ĠWeather Details . Parameter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġforecast . wind . value . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit Ġ= Ġforecast . wind . unit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ