package Ġcom . the wiz rd . shared _ resources . weather data . here Ċ Ċ 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 . location data . Location Data Ċ import Ġcom . the wiz rd . shared _ resources . location data . google . get Google Location 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 . here . HERE OAuth Utils Ċ 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 Ġcom . the wiz rd . shared _ resources . weather data . sm c . Sun Moon Calc Provider Ċ 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 . text . Decimal Format Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠHERE Weather Provider Ġ: ĠWeather Provider Impl (), ĠWeather Alert Provider Interface Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠWE ATHER _ GLOBAL _ QUERY _ URL Ġ= Ġ" https :// weather . ls . here api . com / weather / 1 . 0 / report . json ?" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" product = alerts & product = forecast _ 7 days _ simple & product = forecast _ hourly & product = forecast _ astr onomy & product = observation & one observation = true " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"& % s & language =% s & metric = false " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠWE ATHER _ US _ CA _ QUERY _ URL Ġ= Ġ" https :// weather . ls . here api . com / weather / 1 . 0 / report . json ?" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" product = n ws _ alerts & product = forecast _ 7 days _ simple & product = forecast _ hourly & product = forecast _ astr onomy & product = observation & one observation = true " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"& % s & language =% s & metric = false " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAL ERT _ GLOBAL _ QUERY _ URL Ġ= Ġ" https :// weather . ls . here api . com / weather / 1 . 0 / report . json ? product = alerts & % s & language =% s & metric = false " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAL ERT _ US _ CA _ QUERY _ URL Ġ= Ġ" https :// weather . ls . here api . com / weather / 1 . 0 / report . json ? product = n ws _ alerts & % s & language =% s & metric = false " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġm Location Provider Ġ= ĠRemote Config . getLocation Provider ( get Weather API ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġget Google Location Provider () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Weather API (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠWeather API . HERE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsupports Weather Locale (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Key Required (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġneeds External Alert Data (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġis Key Valid ( key : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget API Key (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ 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 Ġ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 Ġauthorization Ġ= ĠH ER EO Auth Utils . get Bearer Token ( false ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( authorization . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠWeather Exception ( Error Status . NETWORK ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġif Ġ( Location Utils . is US or Can ada ( country _ code )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ( WE ATHER _ US _ CA _ QUERY _ URL , Ġlocation _ query , Ġlocale ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ( WE ATHER _ GLOBAL _ QUERY _ URL , Ġlocation _ query , Ġlocale ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. cache Control ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Control . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. max Age ( 1 , ĠTimeUnit . HOUR S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Header (" Authorization ", Ġauthorization ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. 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 < Root object >( stream , ĠRoot object :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġfor Ġerrors ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( root ?. type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Invalid ĠRequest " Ġ-> Ġw Ex Ġ= ĠWeather Exception ( Error Status . QUERY NOT FOUND ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unauthorized " Ġ-> Ġw Ex Ġ= ĠWeather Exception ( Error Status . INVALID API KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEnd ĠStream ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream . close Quiet ly () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Ġ= Ġcreate Weather Data ( root ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġweather Ġalerts Ġif Ġavailable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather . weather Alerts Ġ= Ġcreate Weather Alerts ( root , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather . location . latitude , Ġweather . location . longitude ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ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 , Ġ" HERE Weather Provider : Ġerror Ġgetting Ġweather Ġdata ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 Ġupdate Weather Data ( location : ĠLocation Data , Ġweather : ĠWeather ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġlocation . tz Offset ĊĊĠĠĠĠĠĠĠ Ġif Ġ( weather . weather Alerts ?. isNotEmpty () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( alert Ġin Ġweather . weather Alerts ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alert . date . offset Ġ!= Ġoffset ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert . date Ġ= Ġalert . date . with Zone Same Local ( offset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alert . expires Date . offset Ġ!= Ġoffset ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert . expires Date Ġ= Ġalert . expires Date . with Zone Same Local ( offset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġtz Ġfor Ġweather Ġproperties ĊĠĠĠĠĠĠĠ Ġweather . update Time Ġ= Ġweather . update Time . with Zone Same Instant ( location . tz Offset ) ĊĠĠĠĠĠĠĠ Ġweather . condition . observation Time Ġ= Ġweather . condition . observation Time . with Zone Same Instant ( location . tz Offset ) ĊĊĠĠĠĠĠĠĠ Ġval Ġold Ġ= Ġweather . astr onomy ĊĠĠĠĠĠĠĠ Ġif Ġ( old . moon set . isEqual ( DateTime Utils . getLocal DateTime MIN ()) Ġ|| Ġold . moon rise . isEqual ( DateTime Utils . getLocal DateTime MIN ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Ast ro Ġ= ĠSun Moon Calc Provider (). get A str onomy Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather . condition . observation Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Ast ro . sun rise Ġ= Ġold . sun rise ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Ast ro . sun set Ġ= Ġold . sun set ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather . astr onomy Ġ= Ġnew Ast ro ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . write Line ( Log . ERROR , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( forecast Ġin Ġweather . forecast ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġforecast . date Ġ= Ġforecast . date . plus Seconds ( offset . total Seconds . to Long ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Alerts ( location : ĠLocation Data ): ĠCollection < Weather Alert > Ġ{ ĊĠĠĠĠĠĠĠ Ġ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 Ġclient Ġ= ĠSimple Library . instance . httpClient ĊĠĠĠĠĠĠĠ Ġvar Ġresponse : ĠResponse ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwere Ġunder Ġrate Ġlimit , Ġdeny Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck RateLimit () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthorization Ġ= ĠH ER EO Auth Utils . get Bearer Token ( false ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( authorization . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠWeather Exception ( Error Status . NETWORK ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcountry _ code Ġ= Ġlocation . country Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġif Ġ( Location Utils . is US or Can ada ( country _ code )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ( ALERT _ US _ CA _ QUERY _ URL , Ġlocation . query , Ġlocale ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ( ALERT _ GLOBAL _ QUERY _ URL , Ġlocation . query , Ġlocale ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Header (" Authorization ", Ġauthorization ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. cache Control ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Control . Builder () Ġ// ĠUpdates Ġ 4 x Ġper Ġday ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. max Age ( 6 , ĠTimeUnit . HOUR S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConnect Ġto Ġweb stream ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġclient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck For Errors ( response ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġresponse . get Stream () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLoad Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJSON Parser . de serializer < Root object >( stream , ĠRoot object :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEnd ĠStream ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream . close Quiet ly () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġweather Ġalerts Ġif Ġavailable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalerts Ġ= Ġcreate Weather Alerts ( root , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation . latitude . toFloat (), Ġlocation . longitude . toFloat ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . write Line ( Log . ERROR , Ġex , Ġ" HERE Weather Provider : Ġerror Ġgetting Ġweather Ġalert Ġdata ") ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse ?. close () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( alerts Ġ== Ġnull ) Ġalerts Ġ= Ġempty List () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġalerts ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 , Ġ" latitude =% s & longitude =% 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 , Ġ" latitude =% s & longitude =% s ", Ġdf . format ( location . latitude ), Ġdf . format ( location . longitude )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlocale To Lang Code ( iso : ĠString , Ġname : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġname ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Weather Icon ( icon : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġis Night Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( icon Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠWeather Icons . NA ĊĊĠĠĠĠĠĠĠ Ġif Ġ( icon . startsWith (" N _ ") Ġ|| Ġicon . contains (" night _ ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Night Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġreturn Ġget Weather Icon ( is Night , Ġicon ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Weather Icon ( is Night : ĠBoolean , Ġicon : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġweather Icon Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġif Ġ( icon Ġ== Ġnull ) Ġreturn ĠWeather Icons . NA ĊĊĠĠĠĠĠĠĠ Ġif Ġ( icon . contains (" over cast ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= Ġif Ġ( is Night ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Icons . N IGHT _ OVER CAST ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Icons . DAY _ SUN NY _ OVER CAST ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( icon . contains (" most ly _ sun ny ") Ġ|| Ġicon . contains (" most ly _ clear ") Ġ|| Ġicon . contains (" part ly _ cloud y ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġicon . contains (" pass ing _ clo und s ") Ġ|| Ġicon . contains (" more _ sun _ than _ clouds ") Ġ|| Ġicon . contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" scatter ed _ clouds " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġicon . contains (" de creasing _ cloud iness ") Ġ|| Ġicon . contains (" clear ing _ sk ies ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġicon . contains (" low _ clouds ") Ġ|| Ġicon . contains (" pass ing _ clouds ") ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= Ġif Ġ( is Night ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Icons . N IGHT _ ALT _ PART LY _ CLOUD Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Icons . DAY _ PART LY _ CLOUD Y ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( icon . contains (" cloud y ") Ġ|| Ġicon . contains (" a _ mix ture _ of _ sun _ and _ clouds ") Ġ|| Ġicon . contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" in creasing _ cloud iness " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġicon . contains (" break s _ of _ sun _ late ") Ġ|| Ġicon . contains (" af tern oon _ clouds ") Ġ|| Ġicon . contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mor ning _ clouds " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġicon . contains (" part ly _ sun ny ") Ġ|| Ġicon . contains (" more _ clouds _ than _ sun ") Ġ|| Ġicon . contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" broken _ clouds " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= Ġif Ġ( is Night ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Icons . N IGHT _ ALT _ CLOUD Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Icons . DAY _ CLOUD Y ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( icon . contains (" high _ level _ clouds ") Ġ|| Ġicon . contains (" high _ clouds ")) Ġweather Icon Ġ= Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ ALT _ CLOUD Y _ HIGH Ġelse ĠWeather Icons . DAY _ CLOUD Y _ HIGH Ġelse Ġif Ġ( icon . contains (" fl ur ries ") Ġ|| Ġicon . contains (" snow storm ") Ġ|| Ġicon . contains (" b li zz ard ")) Ġweather Icon Ġ= ĠWeather Icons . S NOW _ W IND Ġelse Ġif Ġ( icon . contains (" fog ")) Ġweather Icon Ġ= ĠWeather Icons . FO G Ġelse Ġif Ġ( icon . contains (" h azy ") Ġ|| Ġicon . contains (" h aze ")) Ġweather Icon Ġ= Ġif Ġ( is Night ) ĠWeather Icons . W IND Y Ġelse ĠWeather Icons . DAY _ HA ZE Ġelse Ġif Ġ( icon . contains (" s leet ") Ġ|| Ġicon . contains (" snow _ changing _ to _ an _ icy _ mix ") Ġ|| Ġicon . contains (" an _ icy _ mix _ changing _ to _ snow ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġicon . contains (" rain _ changing _ to _ snow ")) Ġweather Icon Ġ= ĠWeather Icons . S LE ET Ġelse Ġif Ġ( icon . contains (" mix ture _ of _ prec ip ") Ġ|| Ġicon . contains (" icy _ mix ") Ġ|| Ġicon . contains (" snow _ changing _ to _ rain ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġicon . contains (" snow _ rain _ mix ") Ġ|| Ġicon . contains (" free zing _ rain ")) Ġweather Icon Ġ= ĠWeather Icons . R AIN _ MIX Ġelse Ġif Ġ( icon . contains (" h ail ")) Ġweather Icon Ġ= ĠWeather Icons . H AIL Ġelse Ġif Ġ( icon . contains (" snow ")) Ġweather Icon Ġ= ĠWeather Icons . S NOW Ġelse Ġif Ġ( icon . contains (" sp rink les ") Ġ|| Ġicon . contains (" d ri zzle ")) Ġweather Icon Ġ= ĠWeather Icons . SPR INK LE Ġelse Ġif Ġ( icon . contains (" light _ rain ") Ġ|| Ġicon . contains (" show ers ")) Ġweather Icon Ġ= ĠWeather Icons . SHOW ERS Ġelse Ġif Ġ( icon . contains (" rain ") Ġ|| Ġicon . contains (" f lood ")) Ġweather Icon Ġ= ĠWeather Icons . R AIN Ġelse Ġif Ġ( icon . contains (" t storm s ") Ġ|| Ġicon . contains (" th under storm s ") Ġ|| Ġicon . contains (" th und ers how ers ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġicon . contains (" t rop ical _ storm ")) Ġweather Icon Ġ= ĠWeather Icons . TH UNDER ST ORM Ġelse Ġif Ġ( icon . contains (" smoke ")) Ġweather Icon Ġ= ĠWeather Icons . S MO KE Ġelse Ġif Ġ( icon . contains (" t ornado ")) Ġweather Icon Ġ= ĠWeather Icons . TOR N ADO Ġelse Ġif Ġ( icon . contains (" hur ric ane ")) Ġweather Icon Ġ= ĠWeather Icons . H UR RIC ANE Ġelse Ġif Ġ( icon . contains (" sand storm ")) Ġweather Icon Ġ= ĠWeather Icons . S AND ST ORM Ġelse Ġif Ġ( icon . contains (" dust storm ")) Ġweather Icon Ġ= ĠWeather Icons . D UST Ġelse Ġif Ġ( icon . contains (" clear ") Ġ|| Ġicon . contains (" sun ny ")) Ġweather Icon Ġ= Ġif Ġ( is Night ) ĠWeather Icons . N IGHT _ CLEAR Ġelse ĠWeather Icons . DAY _ SUN NY Ġelse Ġif Ġ( icon . contains (" cw _ no _ report _ icon ") Ġ|| Ġicon . startsWith (" night _ ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= Ġif Ġ( is Night ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Icons . N IGHT _ CLEAR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Icons . DAY _ SUN NY ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( weather Icon . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNot ĠAvailable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather Icon Ġ= ĠWeather Icons . NA ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġweather Icon ĊĠĠĠ Ġ} Ċ }