package Ġru . n 1 ks . f 1 dashboard . li ved ata Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġru . n 1 ks . f 1 dashboard .* Ċ import Ġru . n 1 ks . f 1 dashboard . model .* Ċ import Ġjava . text . Decimal Format Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlin . math . absolute Value ĊĊ Ċ interface ĠView Provider Ġ{ ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠView > ĠfindViewById ( id : ĠInt ): ĠT ĊĠĠĠ Ġfun Ġget Drawable ( id : ĠInt ): ĠDrawable ĊĠĠĠ Ġfun Ġget Color ( id : ĠInt ): ĠInt Ċ } Ċ Ċ enum Ġclass ĠD rs Common State Ġ{ ĊĠĠĠ ĠAvailable , ĠUn available , ĠUp coming , ĠFault Ċ } Ċ Ċ data Ġclass ĠComp et itor Driver ( ĊĠĠĠ Ġval Ġcode : ĠInt , ĊĠĠĠ Ġval Ġdriver : ĠPart icipant Data . Driver Ċ ) Ċ Ċ data Ġclass ĠComp et itor ( ĊĠĠĠ Ġval Ġid : ĠInt , ĊĠĠĠ Ġval Ġposition : ĠInt , ĊĠĠĠ Ġval Ġlast Lap Time : ĠFloat , ĊĠĠĠ Ġval Ġbest Lap Time : ĠFloat , ĊĠĠĠ Ġval Ġlap : ĠInt , ĊĠĠĠ Ġval Ġvisual Ty re Type : ĠTy re Compound , ĊĠĠĠ Ġval Ġactual Ty re Type : ĠTy re Compound , ĊĠĠĠ Ġval Ġty re Age : ĠInt , ĊĠĠĠ Ġval Ġdriver : ĠComp et itor Driver ? Ċ ) Ġ{ ĊĊĠĠĠ Ġval Ġposition String : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġposition . toString (). pad End ( 2 , Ġ' Ġ') ĊĊĠĠĠ Ġval Ġare Ty res New : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġty re Age Ġ< Ġ 3 ĊĊĠĠĠ Ġval Ġty re Type Value : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( visual Ty re Type Ġ== Ġactual Ty re Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisual Ty re Type . char . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisual Ty re Type Ġ== ĠTy re Compound . X Ġ-> Ġactual Ty re Type . char . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ty re Type Ġ== ĠTy re Compound . X Ġ-> Ġvisual Ty re Type . char . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġactual Ty re Type . char . toString () Ġ+ Ġvisual Ty re Type . char . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġty re Ty re Color : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( visual Ty re Type Ġ!= ĠTy re Compound . X ) Ġvisual Ty re Type . color Ġelse Ġactual Ty re Type . color ĊĊĠĠĠ Ġfun Ġin Bound ( size : ĠInt ): ĠBoolean Ġ= Ġid Ġin Ġ 0 Ġuntil Ġsize Ċ } Ċ Ċ data Ġclass ĠTy re State Field ( ĊĠĠĠ Ġval Ġwe ar : ĠInt , ĊĠĠĠ Ġval Ġinner Temperature : ĠInt , ĊĠĠĠ Ġval Ġouter Temperature : ĠInt Ċ ) Ġ{ ĊĊĠĠĠ Ġval Ġwe ar Color : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwe ar Ġ< Ġ 5 Ġ-> ĠR . color . we ar 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwe ar Ġ< Ġ 1 5 Ġ-> ĠR . color . we ar 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwe ar Ġ< Ġ 2 3 Ġ-> ĠR . color . we ar 2 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwe ar Ġ< Ġ 3 2 Ġ-> ĠR . color . we ar 3 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwe ar Ġ< Ġ 4 0 Ġ-> ĠR . color . we ar 4 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwe ar Ġ< Ġ 5 0 Ġ-> ĠR . color . we ar 5 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwe ar Ġ< Ġ 6 0 Ġ-> ĠR . color . we ar 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwe ar Ġ< Ġ 7 0 Ġ-> ĠR . color . we ar 7 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwe ar Ġ< Ġ 8 0 Ġ-> ĠR . color . we ar 8 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwe ar Ġ< Ġ 9 0 Ġ-> ĠR . color . we ar 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwe ar Ġ<= Ġ 1 0 0 Ġ-> ĠR . color . we ar 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . color . in op ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġwe ar Value : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( we ar Ġ< Ġ 0 Ġ|| Ġwe ar Ġ> Ġ 9 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" XX " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwe ar . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġinner Temperature Color : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdefine Temp Color ( inner Temperature ) ĊĊĠĠĠ Ġval Ġouter Temperature Color : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdefine Temp Color ( outer Temperature ) ĊĊĠĠĠ Ġprivate Ġfun Ġdefine Temp Color ( temp : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Ġ< Ġ 8 2 Ġ-> ĠR . color . low Temp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Ġ< Ġ 1 0 3 Ġ-> ĠR . color . normal Temp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Ġ< Ġ 1 1 0 Ġ-> ĠR . color . warm Temp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . color . high Temp ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠLive Data Field < T >( ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġprivate Ġvar Ġdata : ĠT , ĊĠĠĠ Ġprivate Ġval Ġextract Data Func : Ġ( data : ĠT , Ġpacket : ĠTe lemetry Packet <* >) Ġ-> ĠT , ĊĠĠĠ Ġprivate Ġval ĠonUpdate Func : ĠView Provider .( T ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĊĠĠĠ Ġfun ĠonUpdate ( view Provider : ĠView Provider , Ġupdate : ĠTe lemetry Packet <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠnewData Ġ= Ġextract Data Func ( this . data , Ġupdate ) ĊĠĠĠĠĠĠĠ Ġif Ġ( new Data Ġ== Ġdata ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġdata Ġ= ĠnewData ĊĠĠĠĠĠĠĠ ĠonUpdate Func ( view Provider , Ġdata ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠL aps Field ( ĊĠĠĠ Ġval Ġl aps Count : ĠInt , ĊĠĠĠ Ġval Ġcurrent Lap : ĠInt Ċ ) Ċ Ċ data Ġclass ĠD rs Field ( ĊĠĠĠ Ġval Ġstate : ĠD rs Common State , ĊĠĠĠ Ġval Ġis Allowed : ĠBoolean , ĊĠĠĠ Ġval Ġis Opened : ĠBoolean Ċ ) Ċ Ċ data Ġclass ĠR iv als Field ( ĊĠĠĠ Ġval Ġahead 2 : ĠComp et itor ?, ĊĠĠĠ Ġval Ġahead : ĠComp et itor ?, ĊĠĠĠ Ġval Ġplayer : ĠComp et itor ?, ĊĠĠĠ Ġval Ġbehind : ĠComp et itor ?, ĊĠĠĠ Ġval Ġbehind 2 : ĠComp et itor ? Ċ ) Ċ Ċ data Ġclass ĠBest Lap Field ( ĊĠĠĠ Ġval Ġcompet itor Id : ĠInt , ĊĠĠĠ Ġval Ġdriver : ĠPart icipant Data . Driver ?, ĊĠĠĠ Ġval Ġbest Lap Time : ĠFloat Ċ ) Ċ Ċ data Ġclass ĠTypes Field ( ĊĠĠĠ Ġval Ġty re FL : ĠTy re State Field , ĊĠĠĠ Ġval Ġty re FR : ĠTy re State Field , ĊĠĠĠ Ġval Ġty re RL : ĠTy re State Field , ĊĠĠĠ Ġval Ġty re RR : ĠTy re State Field Ċ ) Ċ Ċ private Ġval Ġseconds And Ms Format : ĠDecimal Format Ġ= ĠDecimal Format (" 0 0 . 0 0 0 ") Ċ private Ġval Ġseconds Format : ĠDecimal Format Ġ= ĠDecimal Format (" 0 0 ") Ċ private Ġval Ġfuel Format : ĠDecimal Format Ġ= ĠDecimal Format ("+ # ,# 0 . 0 0 ;- # ") Ċ private Ġval Ġtime Formatter : Ġ( Float ) Ġ-> ĠString Ġ= Ġ{ ĊĠĠĠ Ġval Ġn 1 Ġ= Ġit . toInt () Ġ/ Ġ 6 0 ĊĠĠĠ Ġval Ġn 2 Ġ= Ġit Ġ% Ġ 6 0 ĊĠĠĠ Ġif Ġ( n 1 Ġ== Ġ 0 Ġ&& Ġn 2 . absolute Value Ġ< Ġ 0 . 0 0 1 f ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" X : XX . XXX " ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ"${ n 1 }:${ seconds And Ms Format . format ( n 2 )}" ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠLive Data ( ĊĠĠĠ Ġprivate Ġval Ġactivity : ĠActivity , ĊĠĠĠ Ġprivate Ġval Ġfields : ĠCollection < LiveData Field <* >> Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġviews Ġ= ĠHashMap < Int , ĠView >() ĊĠĠĠ Ġprivate Ġval Ġview Provider Ġ= Ġobject Ġ: ĠView Provider Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠView > ĠfindViewById ( id : ĠInt ): ĠT Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews [ id ]. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġactivity . findViewById < T >( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews [ id ] Ġ= Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġas ĠT ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Drawable ( id : ĠInt ): ĠDrawable Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( activity , Ġid ) !! ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Color ( id : ĠInt ): ĠInt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( activity , Ġid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonUpdate ( packet : ĠTe lemetry Packet <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfields . iterator (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Update ( view Provider , Ġpacket ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Suppress Lint (" SetText I 1 8 n ") Ċ val ĠLive Data Fields Ġ= ĠlistOf < LiveData Field < *> >( ĊĠĠĠ ĠLive Data Field ( ĊĠĠĠĠĠĠĠ Ġ" lap Remaining ", ĊĠĠĠĠĠĠĠ ĠL aps Field ( 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠ Ġ{ Ġdata , Ġpacket Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Session Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal L aps Ġ= Ġit . data . total L aps . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( total L aps Ġ!= Ġdata . lap s Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata . copy ( lap s Count Ġ= Ġtotal L aps ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Lap Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Lap Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data . items [ packet . header . player Car Index ]. current Lap Num . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Lap Ġ!= Ġdata . current Lap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata . copy ( current Lap Ġ= Ġcurrent Lap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlap Field Ġ= ĠfindViewById < TextView >( R . id . lap Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlap Field . text Ġ= Ġif Ġ( it . lap s Count Ġ- Ġit . current Lap Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"+ ${ it . lap s Count Ġ- Ġit . current Lap }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ it . current Lap }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ), ĊĠĠĠ ĠLive Data Field ( ĊĠĠĠĠĠĠĠ Ġ" fuel Remaining ", ĊĠĠĠĠĠĠĠĠ 0 . 0 f , ĊĠĠĠĠĠĠĠ Ġ{ Ġdata , Ġpacket Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Car Status Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġit . data . items [ it . header . player Car Index ]. fuel Remaining L aps ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfuel Field Ġ= ĠfindViewById < TextView >( R . id . fuel Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfuel Field . text Ġ= Ġfuel Format . format ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ), ĊĠĠĠ ĠLive Data Field ( ĊĠĠĠĠĠĠĠ Ġ" fuel Mix Mode ", ĊĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠ Ġ{ Ġdata , Ġpacket Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Car Status Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġit . data . items [ it . header . player Car Index ]. fuel Mix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfuel Field Ġ= ĠfindViewById < TextView >( R . id . fuel Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfuel Field . background Ġ= Ġget Drawable ( R . color . lean Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfuel Field . background Ġ= Ġget Drawable ( R . color . fast est Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfuel Field . background Ġ= Ġget Drawable ( R . color . high Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfuel Field . background Ġ= Ġget Drawable ( R . color . normal Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ), ĊĠĠĠ ĠLive Data Field ( ĊĠĠĠĠĠĠĠ Ġ" ers Mode ", ĊĠĠĠĠĠĠĠ Ġ- 1 , ĊĠĠĠĠĠĠĠ Ġ{ Ġdata , Ġpacket Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Car Status Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġit . data . items [ it . header . player Car Index ]. ers Deploy Mode . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ ers Field Ġ= ĠfindViewById < TextView >( R . id . ers Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ ers Field . text Ġ= Ġit . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ ers Field . background Ġ= Ġget Drawable ( R . color . lean Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ ers Field . background Ġ= Ġget Drawable ( R . color . high Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ ers Field . background Ġ= Ġget Drawable ( R . color . fast est Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ ers Field . background Ġ= Ġget Drawable ( R . color . normal Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ), ĊĠĠĠ ĠLive Data Field ( ĊĠĠĠĠĠĠĠ Ġ" bb ", ĊĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠ Ġ{ Ġdata , Ġpacket Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Car Setup Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġit . data . items [ it . header . player Car Index ]. br ake Bias . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbb Field Ġ= ĠfindViewById < TextView >( R . id . bb Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbb Field . text Ġ= Ġit . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbb Field . background Ġ= Ġget Drawable ( R . color . warn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= ĠSystem . nano Time () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbb Field . tag Ġ= Ġtag ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . just ( bb Field ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. delay ( 1 0 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġfield Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field . tag Ġ== Ġtag ) Ġfield . background Ġ= Ġget Drawable ( R . color . black ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ), ĊĠĠĠ ĠLive Data Field ( ĊĠĠĠĠĠĠĠ Ġ" diff ", ĊĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠ Ġ{ Ġdata , Ġpacket Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Car Setup Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġit . data . items [ it . header . player Car Index ]. on Throttle . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Field Ġ= ĠfindViewById < TextView >( R . id . diff Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Field . text Ġ= Ġit . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Field . background Ġ= Ġget Drawable ( R . color . warn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= ĠSystem . nano Time () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Field . tag Ġ= Ġtag ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . just ( diff Field ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. delay ( 1 0 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġfield Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field . tag Ġ== Ġtag ) Ġfield . background Ġ= Ġget Drawable ( R . color . black ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ), ĊĠĠĠ ĠLive Data Field ( ĊĠĠĠĠĠĠĠ Ġ" recommended Gear ", ĊĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠ Ġ{ Ġdata , Ġpacket Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Car Telemetry Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġit . data . suggest ed Gear . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecommended Gear Field Ġ= ĠfindViewById < TextView >( R . id . recommended Gear Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecommended Gear Field . text Ġ= Ġit . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecommended Gear Field . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ), ĊĠĠĠ ĠLive Data Field ( ĊĠĠĠĠĠĠĠ Ġ" dr s State ", ĊĠĠĠĠĠĠĠ Ġdata Ġ= ĠD rs Field ( D rs Common State . Unavailable , Ġis Allowed Ġ= Ġfalse , Ġis Opened Ġ= Ġfalse ), ĊĠĠĠĠĠĠĠ Ġextract Data Func Ġ= Ġ{ Ġdata , Ġpacket Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Car Status Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcar Status Data Ġ= Ġit . data . items [ it . header . player Car Index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcar Status Data . dr s Fault Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . state Ġ!= ĠD rs Common State . Fault ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata . copy ( state Ġ= ĠD rs Common State . Fault ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcar Status Data . dr s Available Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . state Ġ!= ĠD rs Common State . Up coming ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata . copy ( state Ġ= ĠD rs Common State . Up coming ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . state Ġ!= ĠD rs Common State . Available Ġ|| Ġdata . is Allowed Ġ!= Ġcar Status Data . dr s Allowed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠD rs Common State . Available , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Allowed Ġ= Ġcar Status Data . dr s Allowed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Car Telemetry Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Opened Ġ= Ġit . data . items [ it . header . player Car Index ]. dr s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . is Opened Ġ!= Ġis Opened ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata . copy ( is Opened Ġ= Ġis Opened ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ ĠonUpdate Func Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd rs Field Ġ= ĠfindViewById < TextView >( R . id . dr s Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD rs Common State . Unavailable Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd rs Field . text Ġ= Ġ" X " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Opened ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd rs Field . background Ġ= Ġget Drawable ( R . color . black ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd rs Field . background Ġ= Ġget Drawable ( R . color . warn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD rs Common State . Fault Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd rs Field . text Ġ= Ġ" X " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd rs Field . background Ġ= Ġget Drawable ( R . color . dr s Fault ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD rs Common State . Up coming Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd rs Field . text Ġ= Ġ" âĨ ĳ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd rs Field . background Ġ= Ġget Drawable ( R . color . dr s Up coming ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD rs Common State . Available Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Allowed Ġ&& Ġ! it . is Opened ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd rs Field . text Ġ= Ġ"-" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd rs Field . background Ġ= Ġget Drawable ( R . color . warn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd rs Field . text Ġ= Ġ"-" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd rs Field . background Ġ= Ġget Drawable ( R . color . black ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ), ĊĠĠĠ ĠLive Data Field ( ĊĠĠĠĠĠĠĠ Ġ" ri vals ", ĊĠĠĠĠĠĠĠ ĠR iv als Field ( ahead 2 Ġ= Ġnull , Ġahead Ġ= Ġnull , Ġplayer Ġ= Ġnull , Ġbehind Ġ= Ġnull , Ġbehind 2 Ġ= Ġnull ), ĊĠĠĠĠĠĠĠ Ġ{ Ġdata , Ġpacket Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Lap Data Packet > Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer Data Ġ= Ġit . data . items [ it . header . player Car Index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer Index Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data . items . indexOf First Ġ{ Ġitem Ġ-> Ġitem . car Position Ġ== Ġplayer Data . car Position Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġri val A head Index Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data . items . indexOf First Ġ{ Ġitem Ġ-> Ġitem . car Position Ġ== Ġplayer Data . car Position Ġminus Byte ĠBytes . One Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġri val A head Data Ġ= Ġit . data . items . get OrNull ( rival A head Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġri val A head 2 Index Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data . items . indexOf First Ġ{ Ġitem Ġ-> Ġitem . car Position Ġ== Ġplayer Data . car Position Ġminus Byte ĠBytes . Two Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġri val A head 2 Data Ġ= Ġit . data . items . get OrNull ( rival A head 2 Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġri val Be hind Index Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data . items . indexOf First Ġ{ Ġitem Ġ-> Ġitem . car Position Ġ== Ġplayer Data . car Position Ġplus Byte ĠBytes . One Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġri val Be hind Data Ġ= Ġit . data . items . get OrNull ( rival Be hind Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġri val Be hind 2 Index Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data . items . indexOf First Ġ{ Ġitem Ġ-> Ġitem . car Position Ġ== Ġplayer Data . car Position Ġplus Byte ĠBytes . Two Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġri val Be hind 2 Data Ġ= Ġit . data . items . get OrNull ( rival Be hind 2 Index ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer Ġ= ĠComp et itor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġplayer Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġplayer Data . car Position . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Lap Time Ġ= Ġplayer Data . last Lap Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Lap Time Ġ= Ġplayer Data . best Lap Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlap Ġ= Ġplayer Data . current Lap Num . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisual Ty re Type Ġ= Ġdata . player ?. visual Ty re Type Ġ?: ĠTy re Compound . X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ty re Type Ġ= Ġdata . player ?. actual Ty re Type Ġ?: ĠTy re Compound . X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re Age Ġ= Ġdata . player ?. ty re Age Ġ?: ĠInt . MAX _ VALUE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġahead Ġ= Ġri val A head Data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComp et itor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġri val A head Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġit . car Position . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Lap Time Ġ= Ġit . last Lap Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Lap Time Ġ= Ġit . best Lap Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlap Ġ= Ġit . current Lap Num . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisual Ty re Type Ġ= Ġif Ġ( data . ahead ?. id Ġ== Ġri val A head Index ) Ġdata . ahead . visual Ty re Type Ġelse ĠTy re Compound . X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ty re Type Ġ= Ġif Ġ( data . ahead ?. id Ġ== Ġri val A head Index ) Ġdata . ahead . actual Ty re Type Ġelse ĠTy re Compound . X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re Age Ġ= Ġdata . ahead ?. ty re Age Ġ?: ĠInt . MAX _ VALUE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= Ġif Ġ( data . ahead ?. id Ġ== Ġri val A head Index ) Ġdata . ahead . driver Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġahead 2 Ġ= Ġri val A head 2 Data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComp et itor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġri val A head 2 Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġit . car Position . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Lap Time Ġ= Ġit . last Lap Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Lap Time Ġ= Ġit . best Lap Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlap Ġ= Ġit . current Lap Num . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisual Ty re Type Ġ= Ġif Ġ( data . ahead 2 ?. id Ġ== Ġri val A head 2 Index ) Ġdata . ahead 2 . visual Ty re Type Ġelse ĠTy re Compound . X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ty re Type Ġ= Ġif Ġ( data . ahead 2 ?. id Ġ== Ġri val A head 2 Index ) Ġdata . ahead 2 . actual Ty re Type Ġelse ĠTy re Compound . X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re Age Ġ= Ġdata . ahead 2 ?. ty re Age Ġ?: ĠInt . MAX _ VALUE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= Ġif Ġ( data . ahead 2 ?. id Ġ== Ġri val A head 2 Index ) Ġdata . ahead 2 . driver Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbehind Ġ= Ġri val Be hind Data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComp et itor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġri val Be hind Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġit . car Position . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Lap Time Ġ= Ġit . last Lap Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Lap Time Ġ= Ġit . best Lap Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlap Ġ= Ġit . current Lap Num . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisual Ty re Type Ġ= Ġif Ġ( data . behind ?. id Ġ== Ġri val Be hind Index ) Ġdata . behind . visual Ty re Type Ġelse ĠTy re Compound . X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ty re Type Ġ= Ġif Ġ( data . behind ?. id Ġ== Ġri val Be hind Index ) Ġdata . behind . actual Ty re Type Ġelse ĠTy re Compound . X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re Age Ġ= Ġdata . behind ?. ty re Age Ġ?: ĠInt . MAX _ VALUE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= Ġif Ġ( data . behind ?. id Ġ== Ġri val Be hind Index ) Ġdata . behind . driver Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbehind 2 Ġ= Ġri val Be hind 2 Data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComp et itor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġri val Be hind 2 Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġit . car Position . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Lap Time Ġ= Ġit . last Lap Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Lap Time Ġ= Ġit . best Lap Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlap Ġ= Ġit . current Lap Num . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisual Ty re Type Ġ= Ġif Ġ( data . behind 2 ?. id Ġ== Ġri val Be hind 2 Index ) Ġdata . behind 2 . visual Ty re Type Ġelse ĠTy re Compound . X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ty re Type Ġ= Ġif Ġ( data . behind 2 ?. id Ġ== Ġri val Be hind 2 Index ) Ġdata . behind 2 . actual Ty re Type Ġelse ĠTy re Compound . X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re Age Ġ= Ġdata . behind 2 ?. ty re Age Ġ?: ĠInt . MAX _ VALUE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= Ġif Ġ( data . behind 2 ?. id Ġ== Ġri val Be hind 2 Index ) Ġdata . behind 2 . driver Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field ĠR iv als Field ( ahead 2 , Ġahead , Ġplayer , Ġbehind , Ġbehind 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Participant Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠnewData Ġ= Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . ahead ?. in Bound ( it . data . items . size ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewData Ġ= ĠnewData . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead Ġ= Ġdata . ahead . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= ĠComp et itor Driver ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data . items [ data . ahead . id ]. race Number . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data . items [ data . ahead . id ]. driver ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . ahead 2 ?. in Bound ( it . data . items . size ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewData Ġ= ĠnewData . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead 2 Ġ= Ġdata . ahead 2 . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= ĠComp et itor Driver ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data . items [ data . ahead 2 . id ]. race Number . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data . items [ data . ahead 2 . id ]. driver ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . behind ?. in Bound ( it . data . items . size ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewData Ġ= ĠnewData . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind Ġ= Ġdata . behind . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= ĠComp et itor Driver ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data . items [ data . behind . id ]. race Number . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data . items [ data . behind . id ]. driver ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . behind 2 ?. in Bound ( it . data . items . size ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewData Ġ= ĠnewData . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind 2 Ġ= Ġdata . behind 2 . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= ĠComp et itor Driver ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data . items [ data . behind 2 . id ]. race Number . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data . items [ data . behind 2 . id ]. driver ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field ĠnewData ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Car Status Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠnewData Ġ= Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . player ?. in Bound ( it . data . items . size ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewData Ġ= Ġdata . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Ġ= Ġdata . player . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisual Ty re Type Ġ= Ġit . data . items [ data . player . id ]. visual Ty re Compound , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ty re Type Ġ= Ġit . data . items [ data . player . id ]. actual Ty re Compound , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re Age Ġ= Ġit . data . items [ data . player . id ]. ty res Age L aps . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . ahead ?. in Bound ( it . data . items . size ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewData Ġ= ĠnewData . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead Ġ= Ġdata . ahead . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisual Ty re Type Ġ= Ġit . data . items [ data . ahead . id ]. visual Ty re Compound , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ty re Type Ġ= Ġit . data . items [ data . ahead . id ]. actual Ty re Compound , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re Age Ġ= Ġit . data . items [ data . ahead . id ]. ty res Age L aps . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . ahead 2 ?. in Bound ( it . data . items . size ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewData Ġ= ĠnewData . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead 2 Ġ= Ġdata . ahead 2 . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisual Ty re Type Ġ= Ġit . data . items [ data . ahead 2 . id ]. visual Ty re Compound , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ty re Type Ġ= Ġit . data . items [ data . ahead 2 . id ]. actual Ty re Compound , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re Age Ġ= Ġit . data . items [ data . ahead 2 . id ]. ty res Age L aps . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . behind ?. in Bound ( it . data . items . size ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewData Ġ= ĠnewData . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind Ġ= Ġdata . behind . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisual Ty re Type Ġ= Ġit . data . items [ data . behind . id ]. visual Ty re Compound , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ty re Type Ġ= Ġit . data . items [ data . behind . id ]. actual Ty re Compound , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re Age Ġ= Ġit . data . items [ data . behind . id ]. ty res Age L aps . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . behind 2 ?. in Bound ( it . data . items . size ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewData Ġ= ĠnewData . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind 2 Ġ= Ġdata . behind 2 . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisual Ty re Type Ġ= Ġit . data . items [ data . behind 2 . id ]. visual Ty re Compound , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual Ty re Type Ġ= Ġit . data . items [ data . behind 2 . id ]. actual Ty re Compound , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re Age Ġ= Ġit . data . items [ data . behind 2 . id ]. ty res Age L aps . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field ĠnewData ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ Ġcontext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġahead Driver Field Ġ= ĠfindViewById < TextView >( R . id . ahead Driver Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġahead Time Field Ġ= ĠfindViewById < TextView >( R . id . ahead Time Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġahead Ty re Field Ġ= ĠfindViewById < TextView >( R . id . ahead Ty re Value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . ahead Ġ!= Ġnull Ġ&& Ġcontext . ahead . position Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead Driver Field . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . ahead . position String Ġ+ Ġcontext . ahead . driver . let Ġ{ Ġif Ġ( it Ġ!= Ġnull ) Ġ" Ġ${ it . driver . name }" Ġelse Ġ"" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead Time Field . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Formatter ( context . ahead . last Lap Time ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . ahead . last Lap Time Ġ< Ġcontext . player ?. last Lap Time Ġ?: ĠFloat . MIN _ VALUE Ġ-> Ġahead Time Field . setTextColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . time Better ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . ahead . last Lap Time Ġ> Ġcontext . player ?. last Lap Time Ġ?: ĠFloat . MAX _ VALUE Ġ-> Ġahead Time Field . setTextColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . time W orse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġahead Time Field . setTextColor ( getColor ( R . color . white )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead Ty re Field . text Ġ= Ġcontext . ahead . ty re Type Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead Ty re Field . setTextColor ( getColor ( context . ahead . ty re Ty re Color )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead Ty re Field . background Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . ahead . are Ty res New ) Ġget Drawable ( R . color . ty re New ) Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead Driver Field . text Ġ= Ġ" XX " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead Time Field . text Ġ= Ġ" X : XX . XXX " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead Time Field . setTextColor ( getColor ( R . color . white )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead Ty re Field . text Ġ= Ġ" X " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead Ty re Field . setTextColor ( getColor ( R . color . white )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead Ty re Field . background Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġahead 2 Driver Field Ġ= ĠfindViewById < TextView >( R . id . ahead 2 Driver Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġahead 2 Time Field Ġ= ĠfindViewById < TextView >( R . id . ahead 2 Time Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġahead 2 Ty re Field Ġ= ĠfindViewById < TextView >( R . id . ahead 2 Ty re Value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . ahead 2 Ġ!= Ġnull Ġ&& Ġcontext . ahead 2 . position Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead 2 Driver Field . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . ahead 2 . position String Ġ+ Ġcontext . ahead 2 . driver . let Ġ{ Ġif Ġ( it Ġ!= Ġnull ) Ġ" Ġ${ it . driver . name }" Ġelse Ġ"" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead 2 Time Field . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Formatter ( context . ahead 2 . last Lap Time ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . ahead 2 . last Lap Time Ġ< Ġcontext . player ?. last Lap Time Ġ?: ĠFloat . MIN _ VALUE Ġ-> Ġahead 2 Time Field . setTextColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . time Better ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . ahead 2 . last Lap Time Ġ> Ġcontext . player ?. last Lap Time Ġ?: ĠFloat . MAX _ VALUE Ġ-> Ġahead 2 Time Field . setTextColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . time W orse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġahead 2 Time Field . setTextColor ( getColor ( R . color . white )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead 2 Ty re Field . text Ġ= Ġcontext . ahead 2 . ty re Type Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead 2 Ty re Field . setTextColor ( getColor ( context . ahead 2 . ty re Ty re Color )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead 2 Ty re Field . background Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . ahead 2 . are Ty res New ) Ġget Drawable ( R . color . ty re New ) Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead 2 Driver Field . text Ġ= Ġ" XX " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead 2 Time Field . text Ġ= Ġ" X : XX . XXX " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead 2 Time Field . setTextColor ( getColor ( R . color . white )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead 2 Ty re Field . text Ġ= Ġ" X " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead 2 Ty re Field . setTextColor ( getColor ( R . color . white )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġahead 2 Ty re Field . background Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer Best Time Field Ġ= ĠfindViewById < TextView >( R . id . my Best Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer Last Time Field Ġ= ĠfindViewById < TextView >( R . id . my Time Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer Ty re Field Ġ= ĠfindViewById < TextView >( R . id . my Ty re Value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . player Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Best Time Field . text Ġ= Ġtime Formatter ( context . player . best Lap Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Last Time Field . text Ġ= Ġtime Formatter ( context . player . last Lap Time ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . player . lap Ġ< Ġcontext . ahead ?. lap Ġ?: Ġcontext . player . lap ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Last Time Field . setTextColor ( getColor ( R . color . time Ir relevant )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Last Time Field . setTextColor ( getColor ( R . color . white )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Ty re Field . text Ġ= Ġcontext . player . ty re Type Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Ty re Field . setTextColor ( getColor ( context . player . ty re Ty re Color )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Ty re Field . background Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . player . are Ty res New ) Ġget Drawable ( R . color . ty re New ) Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Best Time Field . text Ġ= Ġ" X : XX . XXX " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Last Time Field . text Ġ= Ġ" X : XX . XXX " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Ty re Field . text Ġ= Ġ" X " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Ty re Field . setTextColor ( getColor ( R . color . white )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Ty re Field . background Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbehind Driver Field Ġ= ĠfindViewById < TextView >( R . id . behind Driver Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbehind Time Field Ġ= ĠfindViewById < TextView >( R . id . behind Time Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbehind Ty re File d Ġ= ĠfindViewById < TextView >( R . id . behind Ty re Value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . behind Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind Driver Field . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . behind . position String Ġ+ Ġcontext . behind . driver . let Ġ{ Ġif Ġ( it Ġ!= Ġnull ) Ġ" Ġ${ it . driver . name }" Ġelse Ġ"" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind Time Field . text Ġ= Ġtime Formatter ( context . behind . last Lap Time ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . behind . lap Ġ< Ġcontext . player ?. lap Ġ?: Ġcontext . behind . lap ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind Time Field . setTextColor ( getColor ( R . color . time Ir relevant )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . behind . last Lap Time Ġ< Ġcontext . player ?. last Lap Time Ġ?: ĠFloat . MIN _ VALUE Ġ-> Ġbehind Time Field . setTextColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . time Better ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . behind . last Lap Time Ġ> Ġcontext . player ?. last Lap Time Ġ?: ĠFloat . MAX _ VALUE Ġ-> Ġbehind Time Field . setTextColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . time W orse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġbehind Time Field . setTextColor ( getColor ( R . color . white )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind Ty re File d . text Ġ= Ġcontext . behind . ty re Type Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind Ty re File d . setTextColor ( getColor ( context . behind . ty re Ty re Color )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind Ty re File d . background Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . behind . are Ty res New ) Ġget Drawable ( R . color . ty re New ) Ġelse Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind Driver Field . text Ġ= Ġ" XX " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind Time Field . text Ġ= Ġ" X : XX . XXX " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind Time Field . setTextColor ( getColor ( R . color . white )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind Ty re File d . text Ġ= Ġ" X " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind Ty re File d . setTextColor ( getColor ( R . color . white )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind Ty re File d . background Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbehind 2 Driver Field Ġ= ĠfindViewById < TextView >( R . id . behind 2 Driver Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbehind 2 Time Field Ġ= ĠfindViewById < TextView >( R . id . behind 2 Time Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbehind 2 Ty re File d Ġ= ĠfindViewById < TextView >( R . id . behind 2 Ty re Value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . behind 2 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind 2 Driver Field . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . behind 2 . position String Ġ+ Ġcontext . behind 2 . driver . let Ġ{ Ġif Ġ( it Ġ!= Ġnull ) Ġ" Ġ${ it . driver . name }" Ġelse Ġ"" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind 2 Time Field . text Ġ= Ġtime Formatter ( context . behind 2 . last Lap Time ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . behind 2 . lap Ġ< Ġcontext . player ?. lap Ġ?: Ġcontext . behind 2 . lap ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind 2 Time Field . setTextColor ( getColor ( R . color . time Ir relevant )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . behind 2 . last Lap Time Ġ< Ġcontext . player ?. last Lap Time Ġ?: ĠFloat . MIN _ VALUE Ġ-> Ġbehind 2 Time Field . setTextColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . time Better ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . behind 2 . last Lap Time Ġ> Ġcontext . player ?. last Lap Time Ġ?: ĠFloat . MAX _ VALUE Ġ-> Ġbehind 2 Time Field . setTextColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . time W orse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġbehind 2 Time Field . setTextColor ( getColor ( R . color . white )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind 2 Ty re File d . text Ġ= Ġcontext . behind 2 . ty re Type Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind 2 Ty re File d . setTextColor ( getColor ( context . behind 2 . ty re Ty re Color )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind 2 Ty re File d . background Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . behind 2 . are Ty res New ) Ġget Drawable ( R . color . ty re New ) Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind 2 Driver Field . text Ġ= Ġ" XX " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind 2 Time Field . text Ġ= Ġ" X : XX . XXX " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind 2 Time Field . setTextColor ( getColor ( R . color . white )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind 2 Ty re File d . text Ġ= Ġ" X " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind 2 Ty re File d . setTextColor ( getColor ( R . color . white )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehind 2 Ty re File d . background Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ), ĊĠĠĠ ĠLive Data Field ( ĊĠĠĠĠĠĠĠ Ġ" best Time ", ĊĠĠĠĠĠĠĠ ĠBest Lap Field ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompet itor Id Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbest Lap Time Ġ= Ġ 0 . 0 f ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ{ Ġdata , Ġpacket Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Lap Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbest Lap Time Ġ= Ġit . data . items . filter Ġ{ Ġit . best Lap Time Ġ> Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. min Of OrNull Ġ{ Ġit . best Lap Time Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( best Lap Time Ġ!= Ġnull Ġ&& Ġ( data . compet itor Id Ġ== Ġ- 1 Ġ|| Ġdata . best Lap Time Ġ> Ġbest Lap Time )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompet itor Id Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Lap Time Ġ= Ġit . data . items . filter Ġ{ Ġit . best Lap Time Ġ> Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. min Of OrNull Ġ{ Ġit . best Lap Time Ġ} Ġ?: Ġ 0 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < EventData Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . data . eventType Ġ== ĠEvent Details . Type . Session Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field ĠBest Lap Field ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompet itor Id Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Lap Time Ġ= Ġ 0 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data . as Type < Fast est Lap Data > Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcid Ġ= Ġevent . vehicle Idx . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompet itor Id Ġ= Ġcid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= Ġif Ġ( data . compet itor Id Ġ== Ġcid ) Ġdata . driver Ġelse Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Lap Time Ġ= Ġevent . lap Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Participant Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . compet itor Id Ġ>= Ġ 0 Ġ&& Ġdata . compet itor Id Ġ< Ġit . data . items . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= Ġit . data . items [ data . compet itor Id ]. driver ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( findViewById ( R . id . best Session Time ) Ġas ĠTextView ). text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Formatter ( it . best Lap Time ) Ġ+ Ġ" Ġ" Ġ+ Ġ( it . driver ?. name Ġ?: Ġ"") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ), ĊĠĠĠ ĠLive Data Field ( ĊĠĠĠĠĠĠĠ Ġ" ty res ", ĊĠĠĠĠĠĠĠ ĠTypes Field ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġty re FL Ġ= ĠTy re State Field ( 0 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġty re FR Ġ= ĠTy re State Field ( 0 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġty re RL Ġ= ĠTy re State Field ( 0 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġty re RR Ġ= ĠTy re State Field ( 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ{ Ġdata , Ġpacket Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Car Telemetry Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcar Telemetry Data Ġ= Ġit . data . items [ it . header . player Car Index ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġty re FL Ġ= Ġdata . ty re FL ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( car Telemetry Data . ty res Surface Temperature FL Ġ!= Ġty re FL . outer Temperature ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re FL Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re FL . copy ( outer Temperature Ġ= Ġcar Telemetry Data . ty res Surface Temperature FL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( car Telemetry Data . ty res Inner Temperature FL Ġ!= Ġty re FL . inner Temperature ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re FL Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re FL . copy ( inner Temperature Ġ= Ġcar Telemetry Data . ty res Inner Temperature FL ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġty re FR Ġ= Ġdata . ty re FR ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( car Telemetry Data . ty res Surface Temperature FR Ġ!= Ġty re FR . outer Temperature ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re FR Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re FR . copy ( outer Temperature Ġ= Ġcar Telemetry Data . ty res Surface Temperature FR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( car Telemetry Data . ty res Inner Temperature FR Ġ!= Ġty re FR . inner Temperature ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re FR Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re FR . copy ( inner Temperature Ġ= Ġcar Telemetry Data . ty res Inner Temperature FR ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġty re RL Ġ= Ġdata . ty re RL ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( car Telemetry Data . ty res Surface Temperature RL Ġ!= Ġty re RL . outer Temperature ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re RL Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re RL . copy ( outer Temperature Ġ= Ġcar Telemetry Data . ty res Surface Temperature RL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( car Telemetry Data . ty res Inner Temperature RL Ġ!= Ġty re RL . inner Temperature ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re RL Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re RL . copy ( inner Temperature Ġ= Ġcar Telemetry Data . ty res Inner Temperature RL ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġty re RR Ġ= Ġdata . ty re RR ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( car Telemetry Data . ty res Surface Temperature RR Ġ!= Ġty re RR . outer Temperature ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re RR Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re RR . copy ( outer Temperature Ġ= Ġcar Telemetry Data . ty res Surface Temperature RR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( car Telemetry Data . ty res Inner Temperature RR Ġ!= Ġty re RR . inner Temperature ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re RR Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re RR . copy ( inner Temperature Ġ= Ġcar Telemetry Data . ty res Inner Temperature RR ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field ĠTypes Field ( ty re FL , Ġty re FR , Ġty re RL , Ġty re RR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Car Status Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcar Status Data Ġ= Ġit . data . items [ it . header . player Car Index ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġty re FL Ġ= Ġdata . ty re FL ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( car Status Data . ty res W ear FL Ġ!= Ġty re FL . we ar ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re FL Ġ= Ġty re FL . copy ( we ar Ġ= Ġcar Status Data . ty res W ear FL ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġty re FR Ġ= Ġdata . ty re FR ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( car Status Data . ty res W ear FR Ġ!= Ġty re FR . we ar ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re FR Ġ= Ġty re FR . copy ( we ar Ġ= Ġcar Status Data . ty res W ear FR ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġty re RL Ġ= Ġdata . ty re RL ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( car Status Data . ty res W ear RL Ġ!= Ġty re RL . we ar ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re RL Ġ= Ġty re RL . copy ( we ar Ġ= Ġcar Status Data . ty res W ear RL ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġty re RR Ġ= Ġdata . ty re RR ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( car Status Data . ty res W ear RR Ġ!= Ġty re RR . we ar ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty re RR Ġ= Ġty re RR . copy ( we ar Ġ= Ġcar Status Data . ty res W ear RR ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field ĠTypes Field ( ty re FL , Ġty re FR , Ġty re RL , Ġty re RR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < TextView >( R . id . we ar FL Value ). also Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . background Ġ= Ġget Drawable ( it . ty re FL . we ar Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . text Ġ= Ġit . ty re FL . we ar Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < TextView >( R . id . we ar FR Value ). also Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . background Ġ= Ġget Drawable ( it . ty re FR . we ar Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . text Ġ= Ġit . ty re FR . we ar Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < TextView >( R . id . we ar RL Value ). also Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . background Ġ= Ġget Drawable ( it . ty re RL . we ar Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . text Ġ= Ġit . ty re RL . we ar Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < TextView >( R . id . we ar RR Value ). also Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . background Ġ= Ġget Drawable ( it . ty re RR . we ar Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . text Ġ= Ġit . ty re RR . we ar Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < View >( R . id . surface FL Value ). background Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Drawable ( it . ty re FL . outer Temperature Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < View >( R . id . surface FR Value ). background Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Drawable ( it . ty re FR . outer Temperature Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < View >( R . id . surface RL Value ). background Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Drawable ( it . ty re RL . outer Temperature Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < View >( R . id . surface RR Value ). background Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Drawable ( it . ty re RR . outer Temperature Color ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < View >( R . id . inner FL Value ). background Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Drawable ( it . ty re FL . inner Temperature Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < View >( R . id . inner FR Value ). background Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Drawable ( it . ty re FR . inner Temperature Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < View >( R . id . inner RL Value ). background Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Drawable ( it . ty re RL . inner Temperature Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < View >( R . id . inner RR Value ). background Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Drawable ( it . ty re RR . inner Temperature Color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ), ĊĠĠĠ ĠLive Data Field ( ĊĠĠĠĠĠĠĠ Ġ" front W ing ", ĊĠĠĠĠĠĠĠ ĠarrayOf ( 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠ Ġ{ Ġdata , Ġpacket Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Car Status Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data . items [ it . header . player Car Index ]. front Left W ing Damage . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data . items [ it . header . player Car Index ]. front Right W ing Damage . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfront Left W ing Field Ġ= ĠfindViewById < TextView >( R . id . front W ing Left Damage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfront Right W ing Field Ġ= ĠfindViewById < TextView >( R . id . front W ing Right Damage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it [ 0 ] Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfront Left W ing Field . text Ġ= Ġit [ 0 ]. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfront Left W ing Field . background Ġ= Ġget Drawable ( R . color . warn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfront Left W ing Field . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfront Left W ing Field . background Ġ= Ġget Drawable ( R . color . black ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it [ 1 ] Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfront Right W ing Field . text Ġ= Ġit [ 1 ]. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfront Right W ing Field . background Ġ= Ġget Drawable ( R . color . warn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfront Right W ing Field . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfront Right W ing Field . background Ġ= Ġget Drawable ( R . color . black ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ), ĊĠĠĠ ĠLive Data Field ( ĊĠĠĠĠĠĠĠ Ġ" rear W ing ", ĊĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠ Ġ{ Ġdata , Ġpacket Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Car Status Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġit . data . items [ it . header . player Car Index ]. rear W ing Damage . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrear W ing Field Ġ= ĠfindViewById < TextView >( R . id . rear W ing Damage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrear W ing Field . text Ġ= Ġit . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrear W ing Field . background Ġ= Ġget Drawable ( R . color . warn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrear W ing Field . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrear W ing Field . background Ġ= Ġget Drawable ( R . color . black ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ), ĊĠĠĠ ĠLive Data Field ( ĊĠĠĠĠĠĠĠ Ġ" engine ", ĊĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠ Ġ{ Ġdata , Ġpacket Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Car Telemetry Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġit . data . items [ it . header . player Car Index ]. engine Temperature . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġengine Field Ġ= ĠfindViewById < TextView >( R . id . engine Temp Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġengine Field . text Ġ= Ġit . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ>= Ġ 1 3 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġengine Field . background Ġ= Ġget Drawable ( R . color . high Temp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ> Ġ 1 2 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġengine Field . background Ġ= Ġget Drawable ( R . color . warm Temp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ>= Ġ 1 0 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġengine Field . background Ġ= Ġget Drawable ( R . color . normal Temp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġengine Field . background Ġ= Ġget Drawable ( R . color . low Temp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ), ĊĠĠĠ ĠLive Data Field ( ĊĠĠĠĠĠĠĠ Ġ" session Time ", ĊĠĠĠĠĠĠĠ Ġ- 1 , ĊĠĠĠĠĠĠĠ Ġ{ Ġdata , Ġpacket Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . as Type < Session Data Packet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Left Ġ= Ġit . data . session Time Left . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Left Ġ!= Ġdata ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġtime Left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ LiveData Field Ġdata ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsession Time Field Ġ= ĠfindViewById < TextView >( R . id . session Time Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession Time Field . text Ġ= Ġ"${ it Ġ/ Ġ 6 0 }:${ seconds Format . format ( it Ġ% Ġ 6 0 )}" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession Time Field . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ), ĊĠĠĠ ĠLive Data Field ( ĊĠĠĠĠĠĠĠ Ġ" counter ", ĊĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠ Ġ{ Ġdata , Ġ_ Ġ-> Ġdata Ġ+ Ġ 1 Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ% Ġ 1 0 0 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdebug Field Ġ= ĠfindViewById < TextView >( R . id . debug Frame Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Field . text Ġ= Ġit . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ )