package Ġcom . t inas he . weather . ui . home Ċ Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . t inas he . weather . data . model . Entry Ċ import Ġcom . t inas he . weather . data . model . Forecast Ċ import Ġcom . t inas he . weather . data . model . Saved Place Ċ import Ġcom . t inas he . weather . data . model . Temperature Unit Ċ import Ġcom . t inas he . weather . data . model . event . Weather Event Ċ import Ġcom . t inas he . weather . ui . home . vh . At tribution Holder Ċ import Ġcom . t inas he . weather . ui . home . vh . Current Day Holder Ċ import Ġcom . t inas he . weather . ui . home . vh . Day Holder Ċ import Ġcom . t inas he . weather . ui . home . vh . Saved Places Holder Ċ import Ġcom . t inas he . weather . utils . Rx Bus Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġtim ber . log . Tim ber Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġt inas he Ġon Ġ 2 0 1 8 / 0 3 / 2 1 . Ċ Ġ*/ Ċ class ĠWeather Data Adapter Ġconstructor ( private Ġval Ġon Day Click : Ġ( Entry ) Ġ-> ĠUnit ) Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġsize : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġdaily : ĠList < Entry > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġprivate Ġval Ġdis pos ables Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġvar Ġtemperature Unit : ĠTemperature Unit Ġ= ĠTemperature Unit . CEL SI US ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġweather Ġ= ĠRx Bus . getInstance (). to Observable ( Weather Event :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġit . place Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsaved Places . find Ġ{ Ġit . place Id Ġ== Ġid Ġ} ?. entry Ġ= Ġit . entry ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġdis pos ables . add ( weather ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġforecast : ĠFore cast ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdaily Ġ= Ġvalue ?. daily ?. data Ġ?: Ġmutable ListOf () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// current Ġ+ Ġdaily Ġ+ Ġat tribution ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġ 1 Ġ+ Ġdaily . size Ġ+ Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( saved Places . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsaved Places : ĠArrayList < Saved Place > Ġ= Ġarray ListOf () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġempty Ġ= Ġfield . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( empty Ġ&& Ġvalue . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Inserted ( size Ġ- Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( value . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( size Ġ- Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( value . isEmpty () Ġ&& Ġ! empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠTYPE _ CURRENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ- Ġ 1 Ġ-> ĠTYPE _ ATTRIBUT ION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( saved Places . isNotEmpty () Ġ&& Ġposition Ġ== Ġ( size Ġ- Ġ 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ SA VED _ PL ACES ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ DAY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ CURRENT Ġ-> ĠCurrent Day Holder . inflate ( parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ DAY Ġ-> ĠDay Holder . inflate ( parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ SA VED _ PL ACES Ġ-> ĠSaved Places Holder . inflate ( parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠAt tribution Holder . inflate ( parent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġsize ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCurrent Day Holder Ġ-> Ġforecast ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( it . currently , Ġit . hourly , Ġtemperature Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDay Holder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday Pos Ġ= Ġposition Ġ- Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( day Pos Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( daily [ day Pos ], Ġtemperature Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( daily [ day Pos ], Ġtemperature Unit , ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Day Click . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAt tribution Holder Ġ-> Ġholder . bind () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSaved Places Holder Ġ-> Ġholder . bind ( saved Places , Ġtemperature Unit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ CURRENT Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ DAY Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ SA VED _ PL ACES Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ ATTRIBUT ION Ġ= Ġ 4 ĊĠĠĠ Ġ} Ċ }