package Ġcom . battle l ancer . series guide . ui . shows Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . paging . Position al DataSource Ċ import Ġcom . battle l ancer . series guide . model . Episode With Show Ċ import Ġcom . battle l ancer . series guide . ui . shows . Calendar Fragment 2 ViewModel . Calendar Item Ċ import Ġcom . battle l ancer . series guide . util . Time Tools Ċ import Ġjava . util . Calendar Ċ import Ġjava . util . LinkedList Ċ Ċ class ĠCalendar DataSource ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġsource : ĠPosition al DataSource < Episode With Show > Ċ ) Ġ: ĠPosition al DataSource < Calendar Item >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġadd Invalid ated Callback ( on Invalid ated Callback : ĠInvalid ated Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsource . add Invalid ated Callback ( on Invalid ated Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Invalid ated Callback ( on Invalid ated Callback : ĠInvalid ated Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsource . remove Invalid ated Callback ( on Invalid ated Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinvalidate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsource . invalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Invalid (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsource . is Invalid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Initial ( ĊĠĠĠĠĠĠĠ Ġparams : ĠLoad Initial Params , ĊĠĠĠĠĠĠĠ Ġcallback : ĠLoad Initial Callback < Calendar Item > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsource . load Initial ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠPosition al DataSource . Load Initial Callback < Episode With Show >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Result ( data : ĠList < Episode With Show >, Ġposition : ĠInt , Ġtotal Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnot Ġusing Ġplaceholders , Ġcan Ġnot Ġknow Ġthe Ġnumber Ġof Ġheaders Ġin Ġadvance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Result ( convert ( data ), Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Result ( data : ĠList < Episode With Show >, Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" on Result Ġcalled Ġby Ġdelegate Ġdata Ġsource .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Range ( params : ĠLoad Range Params , Ġcallback : ĠLoad Range Callback < Calendar Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġreduce Ġparams . start Position Ġby Ġamount Ġof Ġpreviously Ġadded Ġheaders ? ĊĠĠĠĠĠĠĠ Ġsource . load Range ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠPosition al DataSource . Load Range Callback < Episode With Show >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Result ( data : ĠList < Episode With Show >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconverted Ġ= Ġconvert ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( converted . size Ġ> Ġparams . load Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcut Data Ġ= ĠLinkedList < Calendar Item >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġparams . load Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcut Data . add ( converted [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Result ( cut Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Result ( converted ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO Ġwould Ġalso Ġneed Ġitem Ġbefore Ġthis Ġlist Ġif Ġnot Ġat Ġposition Ġ 0 ĊĠĠĠ Ġprivate Ġfun Ġconvert ( episodes : ĠList < Episode With Show >): ĠMutable List < Calendar Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmapped Ġ= ĠLinkedList < Calendar Item >() ĊĊĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġvar Ġprevious Header Time : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġepisode s . forEach Indexed Ġ{ Ġindex , Ġepisode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinsert Ġheader Ġif Ġfirst Ġitem Ġor Ġprevious Ġitem Ġhas Ġdifferent Ġheader Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Time Ġ= Ġcalculate Header Time ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġepisode . episode _ first a ired ms ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 0 Ġ|| Ġheader Time Ġ!= Ġprevious Header Time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapped . add ( Calendar Item ( header Time , Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Header Time Ġ= Ġheader Time ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmapped . add ( Calendar Item ( header Time , Ġepisode )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmapped ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Header Time ( context : ĠContext , Ġcalendar : ĠCalendar , Ġrelease Time : ĠLong ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactual Release Ġ= ĠTime Tools . apply User Offset ( context , Ġrelease Time ) ĊĊĠĠĠĠĠĠĠ Ġcalendar . time Ġ= Ġactual Release ĊĠĠĠĠĠĠĠ Ġ// Ġnot Ġmid night Ġbecause Ġupcoming -> recent Ġis Ġdelayed Ġ 1 Ġhour ĊĠĠĠĠĠĠĠ Ġ// Ġso Ġheader Ġwould Ġdisplay Ġwrong Ġrelative Ġtime Ġclose Ġto Ġmid night ĊĠĠĠĠĠĠĠ Ġcalendar . set ( Calendar . HOUR _ OF _ DAY , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġcalendar . set ( Calendar . MINUTE , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġcalendar . set ( Calendar . SECOND , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġcalendar . set ( Calendar . MILLI SECOND , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcalendar . time In Millis ĊĠĠĠ Ġ} Ċ }