package Ġcom . with google . experiments . un plug ged . data . integrations . weather Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . with google . experiments . un plug ged . Build Config Ċ import Ġcom . with google . experiments . un plug ged . R Ċ import Ġcom . with google . experiments . un plug ged . data . integrations . maps . Google HttpClient Ċ import Ġcom . with google . experiments . un plug ged . model . Three Hour Forecast Ċ import Ġcom . with google . experiments . un plug ged . ui . AppState Ċ import Ġokhttp 3 . Http Url Ċ import Ġokhttp 3 . Request Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . time . Instant Ċ Ċ class ĠOpen Weather Service Ġ{ ĊĠĠ Ġprivate Ġval Ġgson Ġ= ĠGson () ĊĊĠĠ Ġfun Ġforecast ( city : ĠString ): ĠList < Three Hour Forecast >? Ġ{ ĊĠĠĠĠĠ Ġval Ġurl Ġ= ĠHttp Url . get (" https :// api . open weather map . org / data / 2 . 5 / forecast ") ĊĊĠĠĠĠĠ Ġval Ġfinal Url Ġ= Ġurl . newBuilder () ĊĠĠĠĠĠĠĠĠ Ġ. add Encoded QueryParameter (" q ", Ġcity ) ĊĠĠĠĠĠĠĠĠ Ġ. add QueryParameter (" units ", Ġ" metric ") ĊĠĠĠĠĠĠĠĠ Ġ. add QueryParameter (" appid ", ĠBuild Config . WE ATHER _ APP _ ID ) ĊĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠ Ġ. url ( final Url ) ĊĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠ Ġval Ġresponse Ġ= ĠGoogle HttpClient . ok HttpClient . new Call ( request ). execute () ĊĊĠĠĠĠĠ Ġreturn Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠ Ġresponse . body ()?. use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġgson . fromJson ( response . body ()?. char Stream (), ĠFore cast Result :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult . list . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! it . dt _ txt . endsWith (" 0 3 : 0 0 : 0 0 ") Ġand ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! it . dt _ txt . endsWith (" 0 6 : 0 0 : 0 0 ") Ġand ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! it . dt _ txt . endsWith (" 0 0 : 0 0 : 0 0 ") Ġand ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! it . dt _ txt . endsWith (" 1 5 : 0 0 : 0 0 ") Ġand ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! it . dt _ txt . endsWith (" 2 1 : 0 0 : 0 0 ") Ġand ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . dt _ txt . startsWith ( AppState . current Date . value !!. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d ( it . dt _ txt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThree Hour Forecast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= ĠInstant . of Epoch Second ( it . dt ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemperature Ġ= Ġit . main . temp . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Res Ġ= Ġmap Icon ( it . weather [ 0 ]. icon ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Ġ= Ġit . weather [ 0 ]. main ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)} ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ} ĊĊĠĠ Ġprivate Ġfun Ġmap Icon ( icon : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠ Ġicons Map . forEach Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠ Ġif ( value . contains ( icon )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġkey ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠ Ġ} Ċ } Ċ Ċ private Ġval Ġicons Map Ġ= Ġmap Of ( ĊĠĠ ĠR . drawable . ic _ sun ny Ġto Ġset Of (" 0 1 d ", Ġ" 0 1 n "), ĊĠĠ ĠR . drawable . ic _ sun _ cloud Ġto Ġset Of (" 0 2 d ", Ġ" 0 2 n "), ĊĠĠ ĠR . drawable . ic _ cloud y Ġto Ġset Of (" 0 3 d ", Ġ" 0 3 n ", Ġ" 0 4 d ", Ġ" 0 4 n "), ĊĠĠ ĠR . drawable . ic _ rain Ġto Ġset Of (" 0 9 d ", Ġ" 0 9 n ", Ġ" 1 0 d ", Ġ" 1 0 n "), ĊĠĠ ĠR . drawable . ic _ th under Ġto Ġset Of (" 1 1 d ", Ġ" 1 1 n "), ĊĠĠ ĠR . drawable . ic _ snow Ġto Ġset Of (" 1 3 d ", Ġ" 1 3 n "), ĊĠĠ ĠR . drawable . ic _ wind Ġto Ġset Of (" 5 0 d ", Ġ" 5 0 n ") Ċ ) Ċ Ċ data Ġclass ĠFore cast Result ( val Ġlist : ĠList < Forecast Entry >) Ċ Ċ data Ġclass ĠFore cast Entry ( val Ġdt : ĠLong , Ġval Ġweather : ĠList < Weather >, Ġval Ġmain : ĠTemperature , Ġval Ġdt _ txt : ĠString ) Ċ Ċ data Ġclass ĠWeather ( val Ġmain : ĠString , Ġval Ġicon : ĠString ) Ċ Ċ data Ġclass ĠTemperature ( val Ġtemp : ĠDouble )