package Ġcom . the wiz rd . shared _ resources . weather data . weather api Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . ibm . icu . util . UL oc ale Ċ import Ġcom . the wiz rd . shared _ resources . Simple Library Ċ import Ġcom . the wiz rd . shared _ resources . icons . Weather Icons Ċ import Ġcom . the wiz rd . shared _ resources . keys . Keys Ċ import Ġcom . the wiz rd . shared _ resources . location data . Location Data Ċ import Ġcom . the wiz rd . shared _ resources . location data . location iq . Location IQ Provider Ċ import Ġcom . the wiz rd . shared _ resources . okhttp 3 . Ok Http 3 Utils . await Ċ import Ġcom . the wiz rd . shared _ resources . okhttp 3 . Ok Http 3 Utils . get Stream Ċ import Ġcom . the wiz rd . shared _ resources . remote config . Remote Config Ċ import Ġcom . the wiz rd . shared _ resources . utils .* Ċ import Ġcom . the wiz rd . shared _ resources . utils . API Request Utils . check For Errors Ċ import Ġcom . the wiz rd . shared _ resources . utils . API Request Utils . check RateLimit Ċ import Ġcom . the wiz rd . shared _ resources . utils . API Request Utils . throw If RateLimit ed Ċ import Ġcom . the wiz rd . shared _ resources . utils . Exception Utils . copy StackTrace Ċ import Ġcom . the wiz rd . shared _ resources . weather data . Weather API Ċ import Ġcom . the wiz rd . shared _ resources . weather data . Weather Alert Provider Interface Ċ import Ġcom . the wiz rd . shared _ resources . weather data . Weather Provider Impl Ċ import Ġcom . the wiz rd . shared _ resources . weather data . model . Weather Ċ import Ġcom . the wiz rd . shared _ resources . weather data . model . Weather Alert Ċ import Ġcom . the wiz rd . shared _ resources . weather data . model . isNull Or Invalid Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġokhttp 3 . Cache Control Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . Response Ċ import Ġokhttp 3 . internal . close Quiet ly Ċ import Ġjava . io . IOException Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . text . Decimal Format Ċ import Ġjava . time . Instant Ċ import Ġjava . time . Local Time Ċ import Ġjava . time . Zone Offset Ċ import Ġjava . time . Z onedDateTime Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠWeather Api Provider Ġ: ĠWeather Provider Impl (), ĠWeather Alert Provider Interface Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠBASE _ URL Ġ= Ġ" https :// api . weather api . com / v 1 /" ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY CHECK _ QUERY _ URL Ġ= ĠBASE _ URL Ġ+ Ġ" forecast . json ? key =% s " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠWE ATHER _ QUERY _ URL Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBASE _ URL Ġ+ Ġ" forecast . json ? q =% s & days = 1 0 & a qi = yes & alerts = yes & lang =% s & key =% s " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAL ER TS _ QUERY _ URL Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBASE _ URL Ġ+ Ġ" forecast . json ? q =% s & days = 1 & hour = 6 & a qi = no & alerts = yes & lang =% s & key =% s " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġm Location Provider Ġ= ĠRemote Config . getLocation Provider ( get Weather API ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠLocation IQ Provider () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Weather API (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠWeather API . WE ATHER API ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsupports Weather Locale (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsupports Alerts (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġneeds External Alert Data (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Key Required (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Hour ly Forecast Interval (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Weather Exception :: class ) ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġis Key Valid ( key : ĠString ?): ĠBoolean Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( key . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠWeather Exception ( Error Status . INVALID API KEY ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar ĠisValid Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġw Ex : ĠWeather Exception ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠSimple Library . instance . httpClient ĊĠĠĠĠĠĠĠ Ġvar Ġresponse : ĠResponse ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwere Ġunder Ġrate Ġlimit , Ġdeny Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck RateLimit () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. cache Control ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Control . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. max Age ( 1 , ĠTimeUnit . DAYS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( String . format ( KEY CHECK _ QUERY _ URL , Ġkey )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConnect Ġto Ġweb stream ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġclient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow If RateLimit ed ( response ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( response . code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp URLConnection . HTTP _ BAD _ REQUEST Ġ-> ĠisValid Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp URLConnection . HTTP _ UN AUTHORIZ ED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw Ex Ġ= ĠWeather Exception ( Error Status . INVALID API KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisValid Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ex Ġis ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw Ex Ġ= ĠWeather Exception ( Error Status . NETWORK ERROR ). copy StackTrace ( ex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ex Ġis ĠWeather Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw Ex Ġ= Ġex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠisValid Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse ?. close Quiet ly () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( w Ex Ġ!= Ġnull Ġ&& Ġw Ex . error Status Ġ!= ĠError Status . INVALID API KEY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġw Ex ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn @ with Context ĠisValid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget API Key (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠKeys . get Weather ApiKey () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Weather Exception :: class ) ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Weather ( location _ query : ĠString , Ġcountry _ code : ĠString ): ĠWeather Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġweather : ĠWeather ? ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġu Locale Ġ= ĠU Locale . for Locale ( Locale Utils . getLocale ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocale Ġ= Ġlocale To Lang Code ( u Locale . language , Ġu Locale . to Language Tag ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsettings Mgr Ġ= ĠSimple Library . instance . app . settings Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( settings Mgr . use Personal Key ()) Ġsettings Mgr . get API Key ( Weather API . WE ATHER API ) Ġelse Ġget API Key () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠSimple Library . instance . httpClient ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresponse : ĠResponse ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġw Ex : ĠWeather Exception ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwere Ġunder Ġrate Ġlimit , Ġdeny Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck RateLimit () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. cache Control ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Control . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. max Age ( 1 , ĠTimeUnit . HOUR S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( String . format ( WE ATHER _ QUERY _ URL , Ġlocation _ query , Ġlocale , Ġkey )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConnect Ġto Ġweb stream ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġclient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck For Errors ( response ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġresponse . get Stream () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLoad Ġweather ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠJSON Parser . de serializer < Forecast Response >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFore cast Response :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEnd ĠStream ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream . close Quiet ly () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Ġ= Ġcreate Weather Data ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ex Ġis ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw Ex Ġ= ĠWeather Exception ( Error Status . NETWORK ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ex Ġis ĠWeather Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw Ex Ġ= Ġex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . write Line ( Log . ERROR , Ġex , Ġ" Weather Api Provider : Ġerror Ġgetting Ġweather Ġdata ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse ?. close Quiet ly () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( w Ex Ġ== Ġnull Ġ&& Ġweather . isNull Or Invalid ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw Ex Ġ= ĠWeather Exception ( Error Status . NO WE ATHER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( weather Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( supports Weather Locale ()) Ġweather . locale Ġ= Ġlocale ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather . query Ġ= Ġlocation _ query ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( w Ex Ġ!= Ġnull ) Ġthrow Ġw Ex ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context Ġweather !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Weather Exception :: class ) ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Alerts ( location : ĠLocation Data ): ĠCollection < Weather Alert > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġalerts : ĠCollection < Weather Alert >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġu Locale Ġ= ĠU Locale . for Locale ( Locale Utils . getLocale ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocale Ġ= Ġlocale To Lang Code ( u Locale . language , Ġu Locale . to Language Tag ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsettings Mgr Ġ= ĠSimple Library . instance . app . settings Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( settings Mgr . use Personal Key ()) Ġsettings Mgr . get API Key ( Weather API . WE ATHER API ) Ġelse Ġget API Key () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠSimple Library . instance . httpClient ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresponse : ĠResponse ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwere Ġunder Ġrate Ġlimit , Ġdeny Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck RateLimit () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. cache Control ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Control . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. max Age ( 6 , ĠTimeUnit . HOUR S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAL ER TS _ QUERY _ URL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Location Query ( location ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConnect Ġto Ġweb stream ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġclient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck For Errors ( response ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġresponse . get Stream () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLoad Ġweather ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠJSON Parser . de serializer < Forecast Response >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFore cast Response :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEnd ĠStream ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream . close Quiet ly () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalerts Ġ= Ġcreate Weather Alerts ( root . alerts ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . write Line ( Log . ERROR , Ġex , Ġ" Weather Api Provider : Ġerror Ġgetting Ġweather Ġalert Ġdata ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse ?. close Quiet ly () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alerts Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalerts Ġ= Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context Ġalerts ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Weather Exception :: class ) ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġupdate Weather Data ( location : ĠLocation Data , Ġweather : ĠWeather ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġno - op ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Location Query ( weather : ĠWeather ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdf Ġ= ĠDecimal Format . getInstance ( Locale . ROOT ) Ġas ĠDecimal Format ĊĠĠĠĠĠĠĠ Ġdf . apply Pattern (" 0 . #### ") ĊĠĠĠĠĠĠĠ Ġreturn ĠString . format ( Locale . ROOT , Ġ"% s ,% s ", Ġdf . format ( weather . location . latitude ), Ġdf . format ( weather . location . longitude )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Location Query ( location : ĠLocation Data ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdf Ġ= ĠDecimal Format . getInstance ( Locale . ROOT ) Ġas ĠDecimal Format ĊĠĠĠĠĠĠĠ Ġdf . apply Pattern (" 0 . #### ") ĊĠĠĠĠĠĠĠ Ġreturn ĠString . format ( Locale . ROOT , Ġ"% s ,% s ", Ġdf . format ( location . latitude ), Ġdf . format ( location . longitude )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlocale To Lang Code ( iso : ĠString , Ġname : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcode Ġ= Ġ" en " ĊĊĠĠĠĠĠĠĠ Ġcode Ġ= Ġwhen Ġ( iso ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠChinese ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" zh " Ġ-> Ġwhen Ġ( name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠChinese Ġ- ĠTr ad itional ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" zh - H ant ", Ġ" zh - HK ", Ġ" zh - MO ", Ġ" zh - TW " Ġ-> Ġ" zh _ tw " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠM and ar in ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" zh - cm n " Ġ-> Ġ" zh _ cm n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠW u ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" zh - w uu " Ġ-> Ġ" zh _ w uu " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠX iang ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" zh - hs n " Ġ-> Ġ" zh _ hs n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠC ant one se ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" zh - y ue " Ġ-> Ġ" zh _ y ue " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠChinese Ġ- ĠSimpl ified ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" zh " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġiso ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcode ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Weather Icon ( icon : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Weather Icon ( false , Ġicon ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Weather Icon ( is Night : ĠBoolean , Ġicon : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġweather Icon Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġval Ġcondition Code Ġ= Ġicon ?. toInt OrNull () Ġ?: Ġreturn ĠWeather Icons . NA ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( condition Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠSun ny Ġ/ ĠClear Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ CLEAR Ġelse ĠWeather Icons . DAY _ SUN NY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠPart ly Ġcloud y Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ ALT _ PART LY _ CLOUD Y Ġelse ĠWeather Icons . DAY _ PART LY _ CLOUD Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠOver cast Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 9 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ OVER CAST Ġelse ĠWeather Icons . DAY _ SUN NY _ OVER CAST ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCloud y Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 6 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ ALT _ CLOUD Y Ġelse ĠWeather Icons . DAY _ CLOUD Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 0 3 0 : ĠM ist ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 1 3 5 : ĠF og ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 1 4 7 : ĠFree zing Ġfog ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 3 0 , Ġ 1 1 3 5 , Ġ 1 1 4 7 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ FO G Ġelse ĠWeather Icons . DAY _ FO G ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 0 6 3 : ĠPatch y Ġrain Ġpossible ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 1 8 6 : ĠMod erate Ġrain Ġat Ġtimes ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 1 8 9 : ĠMod erate Ġrain ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 6 3 , Ġ 1 1 8 6 , Ġ 1 1 8 9 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ ALT _ R AIN Ġelse ĠWeather Icons . DAY _ R AIN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 0 6 6 : ĠPatch y Ġsnow Ġpossible ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 1 0 : ĠPatch y Ġlight Ġsnow ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 1 3 : ĠLight Ġsnow ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 1 6 : ĠPatch y Ġmod erate Ġsnow ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 1 9 : ĠMod erate Ġsnow ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 5 5 : ĠLight Ġsnow Ġshow ers ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 5 8 : ĠMod erate Ġor Ġheavy Ġsnow Ġshow ers ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 6 6 , Ġ 1 2 1 0 , Ġ 1 2 1 3 , Ġ 1 2 1 6 , Ġ 1 2 1 9 , Ġ 1 2 5 5 , Ġ 1 2 5 8 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ ALT _ S NOW Ġelse ĠWeather Icons . DAY _ S NOW ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 0 6 9 : ĠPatch y Ġs leet Ġpossible ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 0 4 : ĠLight Ġs leet ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 0 7 : ĠMod erate Ġor Ġheavy Ġs leet ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 4 9 : ĠLight Ġs leet Ġshow ers ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 5 2 : ĠMod erate Ġor Ġheavy Ġs leet Ġshow ers ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 6 9 , Ġ 1 2 0 4 , Ġ 1 2 0 7 , Ġ 1 2 4 9 , Ġ 1 2 5 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ ALT _ S LE ET Ġelse ĠWeather Icons . DAY _ S LE ET ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 0 7 2 : ĠPatch y Ġfree zing Ġd ri zzle Ġpossible ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 1 6 8 : ĠFree zing Ġd ri zzle ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 1 7 1 : ĠHe avy Ġfree zing Ġd ri zzle ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 1 9 8 : ĠLight Ġfree zing Ġrain ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 0 1 : ĠMod erate Ġor Ġheavy Ġfree zing Ġrain ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 7 2 , Ġ 1 1 6 8 , Ġ 1 1 7 1 , Ġ 1 1 9 8 , Ġ 1 2 0 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ ALT _ R AIN _ MIX Ġelse ĠWeather Icons . DAY _ R AIN _ MIX ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠTh under y Ġout break s Ġpossible Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 8 7 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ ALT _ LIGHT NING Ġelse ĠWeather Icons . DAY _ LIGHT NING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 1 1 4 : ĠB low ing Ġsnow ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 1 1 7 : ĠB li zz ard ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 2 2 : ĠPatch y Ġheavy Ġsnow ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 2 5 : ĠHe avy Ġsnow ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 1 1 4 , Ġ 1 1 1 7 , Ġ 1 2 2 2 , Ġ 1 2 2 5 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ ALT _ S NOW _ W IND Ġelse ĠWeather Icons . DAY _ S NOW _ W IND ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 1 5 0 : ĠPatch y Ġlight Ġd ri zzle ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 1 5 3 : ĠLight Ġd ri zzle ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 1 8 0 : ĠPatch y Ġlight Ġrain ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 1 8 3 : ĠLight Ġrain ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 1 5 0 , Ġ 1 1 5 3 , Ġ 1 1 8 0 , Ġ 1 1 8 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ ALT _ SPR INK LE Ġelse ĠWeather Icons . DAY _ SPR INK LE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 1 9 2 : ĠHe avy Ġrain Ġat Ġtimes ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 1 9 5 : ĠHe avy Ġrain ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 4 3 : ĠMod erate Ġor Ġheavy Ġrain Ġsh ower ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 4 6 : ĠT orrent ial Ġrain Ġsh ower ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 1 9 2 , Ġ 1 1 9 5 , Ġ 1 2 4 3 , Ġ 1 2 4 6 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ ALT _ R AIN _ W IND Ġelse ĠWeather Icons . DAY _ R AIN _ W IND ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 3 7 : ĠI ce Ġpel lets ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 6 1 : ĠLight Ġshow ers Ġof Ġice Ġpel lets ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 6 4 : ĠMod erate Ġor Ġheavy Ġshow ers Ġof Ġice Ġpel lets ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 3 7 , Ġ 1 2 6 1 , Ġ 1 2 6 4 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ ALT _ H AIL Ġelse ĠWeather Icons . DAY _ H AIL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ 1 2 4 0 : ĠLight Ġrain Ġsh ower Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 4 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ ALT _ SHOW ERS Ġelse ĠWeather Icons . DAY _ SHOW ERS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠPatch y Ġlight Ġrain Ġwith Ġth under Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 7 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ ALT _ ST ORM _ SHOW ERS Ġelse ĠWeather Icons . DAY _ ST ORM _ SHOW ERS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠMod erate Ġor Ġheavy Ġrain Ġwith Ġth under Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 7 6 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ ALT _ TH UNDER ST ORM Ġelse ĠWeather Icons . DAY _ TH UNDER ST ORM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 7 9 : ĠPatch y Ġlight Ġsnow Ġwith Ġth under ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 2 8 2 : ĠMod erate Ġor Ġheavy Ġsnow Ġwith Ġth under ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 7 9 , Ġ 1 2 8 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ ALT _ S NOW _ TH UNDER ST ORM Ġelse ĠWeather Icons . DAY _ S NOW _ TH UNDER ST ORM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( weather Icon . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNot ĠAvailable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= ĠWeather Icons . NA ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġweather Icon ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSome Ġconditions Ġcan Ġbe Ġfor Ġany Ġtime Ġof Ġday ĊĠĠĠ Ġ// ĠSo Ġuse Ġsun rise / set Ġdata Ġas Ġfallback ĊĠĠĠ Ġoverride Ġfun Ġis Night ( weather : ĠWeather ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġis Night Ġ= Ġsuper . is Night ( weather ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! is Night ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠF allback Ġto Ġsun set / rise Ġtime Ġjust Ġin Ġcase ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtz : ĠZone Offset ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! weather . location . tz Long . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠZone Id Compat . of ( weather . location . tz Long ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtz Ġ= Ġid . rules . get Offset ( Instant . now ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tz Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtz Ġ= Ġweather . location . tz Offset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsun rise Ġ= Ġweather . astr onomy ?. sun rise ?. to Local Time () Ġ?: ĠLocal Time . of ( 6 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsun set Ġ= Ġweather . astr onomy ?. sun set ?. to Local Time () Ġ?: ĠLocal Time . of ( 1 8 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠZ onedDateTime . now ( tz ). to Local Time () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDetermine Ġwhether Ġits Ġnight Ġusing Ġsun set / rise Ġtimes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( now . to Nano OfDay () Ġ< Ġsun rise . to Nano OfDay () Ġ|| Ġnow . to Nano OfDay () Ġ> Ġsun set . to Nano OfDay ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Night Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġis Night ĊĠĠĠ Ġ} Ċ }