package Ġcom . k yle cor ry . trail _ sense . weather . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . view . isIn visible Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . k yle cor ry . and rome da . alerts . toast Ċ import Ġcom . k yle cor ry . and rome da . core . sensors . as LiveData Ċ import Ġcom . k yle cor ry . and rome da . core . time . Throttle Ċ import Ġcom . k yle cor ry . and rome da . core . try Or Nothing Ċ import Ġcom . k yle cor ry . and rome da . fragments . Bound Fragment Ċ import Ġcom . k yle cor ry . and rome da . location . IG PS Ċ import Ġcom . k yle cor ry . sol . science . meteor ology . Pressure Characteristic Ċ import Ġcom . k yle cor ry . sol . science . meteor ology . Pressure T end ency Ċ import Ġcom . k yle cor ry . sol . science . meteor ology . Weather Ċ import Ġcom . k yle cor ry . sol . units . Pressure Ċ import Ġcom . k yle cor ry . sol . units . Pressure Units Ċ import Ġcom . k yle cor ry . trail _ sense . R Ċ import Ġcom . k yle cor ry . trail _ sense . databinding . Activity Weather Binding Ċ import Ġcom . k yle cor ry . trail _ sense . quick actions . Weather Quick Action Binder Ċ import Ġcom . k yle cor ry . trail _ sense . shared .* Ċ import Ġcom . k yle cor ry . trail _ sense . shared . sensors . Sensor Service Ċ import Ġcom . k yle cor ry . trail _ sense . shared . views . User Error Ċ import Ġcom . k yle cor ry . trail _ sense . weather . domain . Pressure Alt itude Reading Ċ import Ġcom . k yle cor ry . trail _ sense . weather . domain . Pressure Reading Ċ import Ġcom . k yle cor ry . trail _ sense . weather . domain . Pressure Unit Utils Ċ import Ġcom . k yle cor ry . trail _ sense . weather . domain . Weather Service Ċ import Ġcom . k yle cor ry . trail _ sense . weather . infrastructure . Weather Context ual Service Ċ import Ġcom . k yle cor ry . trail _ sense . weather . infrastructure . Weather Update Scheduler Ċ import Ġcom . k yle cor ry . trail _ sense . weather . infrastructure . commands . Monitor Weather Command Ċ import Ġcom . k yle cor ry . trail _ sense . weather . infrastructure . persistence . Pressure Repo Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjava . time . Duration Ċ import Ġjava . time . Instant Ċ Ċ class ĠWeather Fragment Ġ: ĠBound Fragment < Activity Weather Binding >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbar ometer Ġby Ġlazy Ġ{ Ġsensor Service . get Bar ometer () Ġ} ĊĠĠĠ Ġprivate Ġval Ġal time ter Ġby Ġlazy Ġ{ Ġsensor Service . get GPS Al time ter () Ġ} ĊĠĠĠ Ġprivate Ġval Ġther mo meter Ġby Ġlazy Ġ{ Ġsensor Service . get Th er mo meter () Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġalt itude Ġ= Ġ 0 F ĊĠĠĠ Ġprivate Ġvar Ġuse Sea Level Pressure Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġunits Ġ= ĠPress ure Units . H pa ĊĊĠĠĠ Ġprivate Ġval Ġprefs Ġby Ġlazy Ġ{ ĠUser Preferences ( require Context ()) Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġchart : ĠPress ure Chart ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnav Controller : ĠNav Controller ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġweather Service : ĠWeather Service ĊĠĠĠ Ġprivate Ġval Ġsensor Service Ġby Ġlazy Ġ{ ĠSensor Service ( require Context ()) Ġ} ĊĠĠĠ Ġprivate Ġval Ġformat Service Ġby Ġlazy Ġ{ ĠFormat Service ( require Context ()) Ġ} ĊĠĠĠ Ġprivate Ġval Ġpressure Repo Ġby Ġlazy Ġ{ ĠPress ure Repo . getInstance ( require Context ()) Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġthrottle Ġ= ĠTh rottle ( 2 0 ) ĊĊĠĠĠ Ġprivate Ġvar Ġreading History : ĠList < Pressure Alt itude Reading > Ġ= ĠlistOf () ĊĊĠĠĠ Ġprivate Ġvar Ġvalue Selected Time Ġ= Ġ 0 L ĊĊĠĠĠ Ġprivate Ġval Ġweather Forecast Service Ġby Ġlazy Ġ{ ĠWeather Context ual Service . getInstance ( require Context ()) Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġload Alt itude Job : ĠJob ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlog Job : ĠJob ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġis Logging Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠWeather Quick Action Binder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . weather ĊĠĠĠĠĠĠĠ Ġ). bind () ĊĊĠĠĠĠĠĠĠ Ġnav Controller Ġ= Ġfind Nav Controller () ĊĊĠĠĠĠĠĠĠ Ġweather Service Ġ= ĠWeather Service ( prefs . weather ) ĊĊĠĠĠĠĠĠĠ Ġchart Ġ= ĠPress ure Chart ( binding . chart ) Ġ{ Ġtime Ago , Ġpressure Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Logging ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Pressure Chart ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ago Ġ== Ġnull Ġ|| Ġpressure Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . pressure Marker . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . log Btn . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatted Ġ= Ġformat Service . format Pressure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPress ure ( pressure , Ġunits ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUnits . get Decimal Places ( units ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . pressure Marker . text Ġ= ĠgetString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . pressure _ reading _ time _ ago , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformatted , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat Service . format Duration ( time Ago , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . pressure Marker . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . log Btn . isIn visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Selected Time Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . log Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Job Ġ= Ġrun In Background Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Logging Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . log Btn . isIn visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . log Loading . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMonitor Weather Command ( require Context (), Ġfalse ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( getString ( R . string . pressure _ logged )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . log Btn . isIn visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . log Loading . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Logging Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpressure Repo . get Press ures (). observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreading History Ġ= Ġit . map Ġ{ Ġit . to Pressure Alt itude Reading () Ġ}. sorted By Ġ{ Ġit . time Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . time Ġ<= ĠInstant . now () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Forecast () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbar ometer . as LiveData (). observe ( view Lifecycle Owner , Ġ{ Ġupdate () Ġ}) ĊĠĠĠĠĠĠĠ Ġther mo meter . as LiveData (). observe ( view Lifecycle Owner , Ġ{ Ġupdate () Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġuse Sea Level Pressure Ġ= Ġprefs . weather . use Sea Level Pressure ĊĠĠĠĠĠĠĠ Ġalt itude Ġ= Ġal time ter . altitude ĊĠĠĠĠĠĠĠ Ġunits Ġ= Ġprefs . pressure Units ĊĊĠĠĠĠĠĠĠ Ġload Alt itude Job Ġ= Ġrun In Background Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! al time ter . has Valid Reading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġal time ter . read () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalt itude Ġ= Ġal time ter . altitude ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġupdate () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! prefs . weather . should Monitor Weather ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠUser Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUSER _ ERROR _ WE ATHER _ MONITOR _ OFF , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . weather _ monitoring _ disabled ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ weather , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠgetString ( R . string . enable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . weather . should Monitor Weather Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Update Scheduler . start ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire MainActivity (). error Banner . dismiss ( USER _ ERROR _ WE ATHER _ MONITOR _ OFF ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire MainActivity (). error Banner . report ( error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġtry Or Nothing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Alt itude Job ?. cancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Or Nothing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Job ?. cancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Logging Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġrequire MainActivity (). error Banner . dismiss ( USER _ ERROR _ WE ATHER _ MONITOR _ OFF ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Bound ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( bar ometer . pressure Ġ== Ġ 0 . 0 f ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( throttle . is Th rott led ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġread ings Ġ= Ġget Cal ibr ated Press ures () ĊĊĠĠĠĠĠĠĠ Ġdisplay Chart ( read ings ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtend ency Ġ= Ġweather Service . getT end ency ( read ings ) ĊĠĠĠĠĠĠĠ Ġdisplay T end ency ( t end ency ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpressure Ġ= ĠgetCurrent Pressure () ĊĠĠĠĠĠĠĠ Ġdisplay Pressure ( pressure ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( System . currentTimeMillis () Ġ- Ġvalue Selected Time Ġ> Ġ 5 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . pressure Marker . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Logging ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . log Btn . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Cal ibr ated Press ures ( include Current : ĠBoolean Ġ= Ġfalse ): ĠList < Pressure Reading > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġread ings Ġ= Ġreading History . to Mutable List () ĊĠĠĠĠĠĠĠ Ġif Ġ( include Current ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread ings . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPress ure Alt itude Reading ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbar ometer . pressure , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġal time ter . altitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġther mo meter . temperature , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( al time ter Ġis ĠIG PS ) Ġ( al time ter Ġas ĠIG PS ). vertical Accuracy Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġweather Service . cal ibrate ( read ings , Ġprefs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdisplay Chart ( read ings : ĠList < Pressure Reading >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Read ings Ġ= Ġread ings . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDuration . between ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ<= Ġprefs . weather . pressure History ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( display Read ings . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Time Ġ= ĠDuration . between ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Read ings . first (). time , ĠInstant . now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhours Ġ= Ġtotal Time . to Hours () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġminutes Ġ= Ġtotal Time . to Minutes () Ġ% Ġ 6 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( hours ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 L Ġ-> Ġbinding . pressure History Duration . text Ġ= Ġcontext ?. resources ?. get Quantity String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . plurals . last _ minutes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminutes . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminutes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( minutes Ġ>= Ġ 3 0 ) Ġhours ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . pressure History Duration . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. resources ?. get Quantity String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . plurals . last _ hours , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhours . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhours ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( display Read ings . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchart . set Units ( units ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchart Data Ġ= Ġdisplay Read ings . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ago Ġ= ĠDuration . between ( Instant . now (), Ġit . time ). seconds Ġ/ Ġ( 6 0 f Ġ* Ġ 6 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ago Ġas ĠNumber , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( Pressure Unit Utils . convert ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunits ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) Ġas ĠNumber ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġchart . plot ( chart Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdisplay T end ency ( t end ency : ĠPress ure T end ency ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġformatted Ġ= Ġformat Service . format Pressure ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPress ure ( t end ency . amount , ĠPress ure Units . H pa ). convertTo ( units ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnits . get Decimal Places ( units ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbinding . t end ency Amount . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . pressure _ t end ency _ format _ 2 , Ġformatted ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( t end ency . character istic ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPress ure Characteristic . Fall ing , ĠPress ure Characteristic . Fall ing Fast Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bar ometer Trend . setImage Resource ( R . drawable . ic _ arrow _ down ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bar ometer Trend . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPress ure Characteristic . R ising , ĠPress ure Characteristic . R ising Fast Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bar ometer Trend . setImage Resource ( R . drawable . ic _ arrow _ up ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bar ometer Trend . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġbinding . bar ometer Trend . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġupdate Forecast () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhourly Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather Forecast Service . get Hour ly Forecast () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdaily Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather Forecast Service . get Daily Forecast () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . weather Now Lbl . text Ġ= Ġformat Service . format Short Term Weather ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhourly ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . weather Now Img . setImage Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Weather Image ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhourly , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPress ure Reading ( Instant . now (), Ġbar ometer . pressure ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . weather Later Lbl . text Ġ= Ġget Long Term Weather Description ( daily ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetCurrent Pressure (): ĠPress ure Reading Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( use Sea Level Pressure ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreading Ġ= ĠPress ure Alt itude Reading ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbar ometer . pressure , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġal time ter . altitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġther mo meter . temperature , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( al time ter Ġis ĠIG PS ) Ġ( al time ter Ġas ĠIG PS ). vertical Accuracy Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather Service . cal ibrate ( reading History Ġ+ ĠlistOf ( reading ), Ġprefs ). last OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreading . sea Level ( prefs . weather . sea Level Factor In Temp ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPress ure Reading ( Instant . now (), Ġbar ometer . pressure ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdisplay Pressure ( pressure : ĠPress ure Reading ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġformatted Ġ= Ġformat Service . format Pressure ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPress ure ( pressure . value , ĠPress ure Units . H pa ). convertTo ( units ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnits . get Decimal Places ( units ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbinding . pressure . text Ġ= Ġformatted ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Weather Image ( weather : ĠWeather , Ġcurrent Pressure : ĠPress ure Reading ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( weather ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeather . Impro ving Fast Ġ-> Ġif Ġ( current Pressure . is Low ()) ĠR . drawable . cloud y Ġelse ĠR . drawable . sun ny ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeather . Impro ving Slow Ġ-> Ġif Ġ( current Pressure . is High ()) ĠR . drawable . sun ny Ġelse ĠR . drawable . part ially _ cloud y ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeather . W ors ening Slow Ġ-> Ġif Ġ( current Pressure . is Low ()) ĠR . drawable . light _ rain Ġelse ĠR . drawable . cloud y ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeather . W ors ening Fast Ġ-> Ġif Ġ( current Pressure . is Low ()) ĠR . drawable . heavy _ rain Ġelse ĠR . drawable . light _ rain ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeather . Storm Ġ-> ĠR . drawable . storm ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . drawable . st eady ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Long Term Weather Description ( weather : ĠWeather ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( weather ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeather . Impro ving Fast , ĠWeather . Impro ving Slow Ġ-> ĠgetString ( R . string . forecast _ impro ving ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeather . W ors ening Slow , ĠWeather . W ors ening Fast , ĠWeather . Storm Ġ-> ĠgetString ( R . string . forecast _ w ors ening ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate Binding ( ĊĠĠĠĠĠĠĠ Ġlayout Inflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ? ĊĠĠĠ Ġ): ĠActivity Weather Binding Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠActivity Weather Binding . inflate ( layout Inflater , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ